HIPAA に準拠する必要がある iOS アプリを作成しています。アプリはできればオフラインで機能する必要があるため、データは電話に保存する必要があります。
だからここに私がやろうと思っていたことがあります:
- 最初の起動時に、ユーザーはユーザー名、パスワード、およびパスフレーズを入力します。サーバーは、デバイスのユーザー名、パスワード、および UDID (Advertising ID) を使用してユーザーを認証します。サーバーとの通信は HTTPS を使用して行われます。
認証が成功した場合:
- ユーザー名はキー チェーンに格納されます。
パスフレーズ+UDID は、OpenSSL ライブラリで利用可能な「PBKDF2」を使用してハッシュされます。こちらもキーチェーンに収納。この操作のソルトはキー チェーンに格納されます。以降の検証では、salt がキー チェーンから取得されます。
ユーザー名 + パスフレーズ + UDID + 静的キーは、「PBKDF2」を使用してキーを生成するために使用され、再びソルトがキー チェーンに格納され、その後の使用からキー チェーンから取得されます。生成されたキーはメモリに保存され、キーが生成された後はパスフレーズは忘れられます。Static-Key はコード内に存在します。
アプリがバックグラウンドになると、キーは忘れられます。つまり、変数は nil に設定されます。
アプリを再開または再起動すると、パスフレーズを入力する画面がユーザーに表示されます。入力されたパスフレーズが正しい場合、アプリはキーを再度生成します。それ以外の場合、約 5 回連続して試行すると、アプリはデータを消去し、ユーザーをログイン画面に戻します (可能であれば、必要な情報を含むイベントに関するメッセージをサーバーに送信します)。
ここに私の2つの質問があります:
project-imax/EncryptedCoreData の安定性を知りたいですか? それらが多対多の関係をサポートしていないことは知っています。しかし、関係を表すエンティティを作成することで、この問題を回避しました (これは、3 番目のテーブルを使用して実際の SQL DB で行われる方法と同様です)。暗号化されたコア データを使用した経験のある方から、その経験と直面した問題についてお聞きしたいと思います。特に、これは個々の属性のパフォーマンスの暗号化と比較してどうですか?
次に、私が導入しようとしているセキュリティ対策に問題はありますか。あなたが言及したい提案や改善。