コアデータの暗号化に関する質問があります。私はいくつかの機密ユーザーデータをCore Data SQLiteデータベースに保存しています。クリティカルな値はすべての変換可能なもので、私はAES256を使って、それらを「オンザフライで」暗号化し、解読しています。暗号化キーは、ユーザーが選択したパスワードのSHA512ハッシュです。これはこれまでのところうまくいきます。コアデータの暗号化
ここでユーザーのパスワードについてです。ユーザーがアプリを起動すると、彼はパスワードを尋ねられます。パスワードはSHA512でハッシュされ、iOSキーチェーンに保存されます。書き込み操作または読み取り操作ごとに、NSValueTransformerはキーチェーンからパスワードを取得します。アプリケーションが閉じている場合は、キーチェーンからパスワードハッシュを削除します。
私のコアデータデータベースには、乱数値が0の特別なエンティティがありますが、これは単なる値です。ユーザーが正しいパスワードを入力したかどうかをテストするには、このエンティティを取得して番号を読み取ります。それが=ならば! 0、私は解読が失敗するとNSValueTransformerは常に0を返すので、パスワードが正しいことを知っています。
今私の実際の質問:これは暗号化の良いアプローチだと思いませんか?入力されたパスワードが正しいかどうかを調べるにはどうすればよいでしょうか?
NSValueTransformerがキーチェーンに常にアクセスしなければならないため、アプリケーションの実行中にキーチェーンにパスワードハッシュを格納するとすべての処理が遅くなります。パスワードハッシュをメモリに保存するだけで十分安全なので、アプリが終了したら削除されますか?
「パスワードに基づいて鍵の暗号化キーで暗号化したランダムに生成された暗号化キーを使用する」という意味で説明できますか?私はコアデータストアのいくつかのフィールドを暗号化することを検討しており、暗号化を行うための鍵を生成するためのベストプラクティスを探しています。私はそれが変更することができますので、パスワードに基づいて意味をなさないことに同意します。 –