シナリオ:
ユーザーA、B、Cは、Webアプリケーションから暗号化されたデータにアクセスする必要があります。それらはすべて同じデータにアクセスします。
暗号化キーは、サーバーに保存されないように、ログインに関連付ける必要があります。
質問:ユーザー名とパスワードがすべて異なる場合でも、ログインの詳細にキーを関連付けることはできますか?このシナリオでの最良のアプローチは何ですか?
一般に、これを行うソリューションは次のように機能します。自分で構築しようとするのではなく、すでにこれを実行して使用している信頼できるシステムを見つける必要があります。
データにアクセスするには:
ユーザーのパスワードを変更するには:
ユーザーを管理するには:
詳細(システムの理解を助けるためにのみ存在します)にもかかわらず、[〜#〜]ください[〜#〜]これを自分で実装しようとしないでください。欠けているか、やっと言及されただけの多くの重要な詳細があります。たとえば、ユーザーがマスターキーを直接見ないことが重要です(そうしないと、マスターキーのコピーを保存でき、キー構造全体を再生成してデータを再暗号化せずにアクセスを効果的に取り消すことができなくなります)。これらの詳細の多く(メモリ内の安全なキーストレージなど)はプラットフォームに依存します。
さらに、暗号プリミティブのライブラリ実装を使用している場合でも、暗号自体を台無しにする多くの方法があります。キーまたはキー派生パラメーターを誤って生成し、誤ったプリミティブを選択した場合、またはサイドチャネル攻撃に対して脆弱な方法でいずれかのステップを実装した場合、スキーム全体が危険にさらされる可能性があります。このことを自分で考えようとしないでください。暗号化の実装について知識のある誰かがすでにまとめたもの、そして知識のある他の誰かがレビューしたものを使います。
アプリケーションの詳細に大きく依存しますが、大まかに言えば...
ユーザーごとに公開鍵/秘密鍵のペアを生成できます。対称鍵を使用してデータを暗号化してから、その対称鍵を各ユーザーの公開鍵で暗号化します。個別に暗号化された単一の対称キーのコピーを保存し、ログイン時にそれらを各ユーザーに、および(対称的に)暗号化されたデータの単一のコピーをそれらに戻します。
ユーザーは秘密鍵を使用して対称鍵のコピーを復号化し、それを使用してデータを復号化します。
警告-私は、このアプローチをアプリケーションにとって実行不可能にする可能性のあるあらゆる種類の懸念をここで手を振っています。これまでに「独自の」暗号プロトコルを使用する前に、地域のセキュリティ専門家に相談してください。しかし、そうは言っても、上記の大まかなアウトラインは、あなたが求めていることを実行するはずです。