CoreDataの暗号化について質問があります。機密性の高いユーザーデータをCoreDataSQLiteデータベースに保存しています。重要な値はすべて変換可能であり、私はAES256を使用して、すべての値の個別のIVを含め、「オンザフライ」でそれらを暗号化および復号化します。暗号化キーは、ユーザーが選択したパスワードのSHA512ハッシュです。これは今のところ非常にうまく機能しています。
次に、ユーザーパスワードについて説明します。ユーザーがアプリを起動すると、パスワードの入力を求められます。パスワードはSHA512でハッシュされ、iOSキーチェーンに保存されています。書き込みまたは読み取り操作ごとに、NSValueTransformerはキーチェーンからパスワードを取得します。アプリを閉じている場合は、キーチェーンからパスワードハッシュを削除します。
私のCoreDataデータベースには、唯一の値として乱数!=0を持つ特別なエンティティがあります。ユーザーが正しいパスワードを入力したかどうかをテストするために、このエンティティを取得して番号を読み取ります。=の場合!0、復号化が失敗するとNSValueTransformerは常に0を返すため、パスワードが正しいことを知っています。
さて、私の実際の質問:これは暗号化の良いアプローチだと思いますか?入力したパスワードが正しいかどうかを他にどのようにテストしますか?
NSValueTransformerは常にキーチェーンにアクセスする必要があるため、アプリの実行中にパスワードハッシュをキーチェーンに保存すると、すべてが遅くなるのではないかと少し心配しています。パスワードハッシュをメモリに保持するだけで十分に安全なので、アプリを閉じると削除されますか?