ユーザーデータを含む Mac OS X アプリケーションを開発しています。Core data/Sqlite は、ユーザー データベースを格納するための適切なオプションです。しかし、ユーザー データの安全性を確保したいと考えています。それでは、安全なデータベースを開発するために Mac プラットフォームで利用できるオプションは何でしょうか..
1 に答える
Core Data で使用できるオプションがいくつかあります。しかし、これらの方法はどれも、ソフトウェアが実行されていて、復号化キーが「有効」である場合、データを保護しません.
最初のオプションは、暗号化されたディスク イメージを使用してデータベース ファイルを保存することです。これは iOS では必要ありません。すべてのファイルはデフォルトで暗号化されますが、暗号化の側面の一部を構成して、より厳格なセキュリティ設定を行うことができます (グーグルNSFileProtectionKey
)。OS X では、同等のテクノロジは FileVault ですが、ほとんどの場合アクティブではないため、当てにしないでください。そうです、ディスク イメージは、ソフトウェアの起動時にマウントされ、正しいパスワードが提供され、ソフトウェアの終了時にアンマウントされます。ヘルパー プロセスを使用してメイン アプリケーションを監視し、アプリがクラッシュしたり適切にアンマウントせずに終了した場合にイメージをアンマウントしたりして、アプリのクラッシュからディスク イメージを保護することができます。
2 番目のオプションはNSValueTransformer
、エンティティ内のすべての機密属性を暗号化するように記述することです。ここでは、保護は属性レベルにあります。これで十分な場合もそうでない場合もあり、フェッチ リクエストの動作に影響します。
3 番目のオプションは、(サブクラス化による) 独自の永続ストアを作成することNSAtomicStore
です。これには結果がないわけではありません。その解決策は慎重に評価する必要があります。
それに加えて、もちろん基本を忘れないでください: キーチェーン、PBKDF2 のようなキーストレッチ機能、パスワードソルトなど。