こんにちは、機密性の高い医療記録を保存する Rails アプリに取り組んでいるため、保存されたデータを暗号化するためのベスト プラクティスの方法を探しています。私は、ランダムな鍵と IV を生成し、続いて公開鍵で IV を暗号化する対称暗号化を提供する gem strongbox を使用することにしました。アプリケーションは、ユーザーと一連の特別ユーザー (登録医師) の両方に、暗号化されたデータへのアクセスを提供する必要があります。
私の質問は、実装方法がよくわからない 2 つのプロパティをワークフローに持たせる必要があるという事実に関連しています。
最初の問題は、ログインしてデータを送信するユーザーのパスワードを公開鍵として使用したいということですが、暗号化されたパスワードを保存するgem Deviseを使用しています。誰かがデータベースにアクセスできると、暗号化ワークフローが無効になる可能性があるため、暗号化されたパスワードを使用したくありません。
第2の問題点は、暗号化された情報は、その情報を作成した利用者だけでなく、一連の特別な利用者(医療利用者)にもアクセスされる必要があることである。PHP には、公開鍵の配列を取ることができる関数 openssl_seal があることは知っていますが、実装についてはわかりません。
受信者の公開鍵ごとに対称鍵を暗号化して保存する必要がありますか? または、すべての公開鍵と私たちを提供して、一度暗号化して保存することはできますか
3 番目の問題は、1 番目と 2 番目の問題の組み合わせです。ワークフローのセキュリティを損なう可能性のあるものをサーバーに保存することなく、複数の受信者の公開鍵にアクセスするにはどうすればよいですか?
私が探しているのは、実用的な(コード)実装ではなく、アーキテクチャの概要に関するアドバイスと議論です。