ユースケース
Webアプリケーションのデータベース内のデータを暗号化したいと思います。次の要件があります。
したがって、公開鍵と秘密鍵を使用して非対称暗号化を使用します。暗号化操作はいつでもWebアプリで開始できますが、Webアプリで復号化できるのは、ユーザーがパスフレーズを入力した場合のみです。
問題
これらはすべて正常に機能しますが、問題は、ユーザーがデータを復号化するたびにパスフレーズを提供する必要があることです。ユーザーがパスフレーズを1回入力した後、セッションに対して「認証されたままにする」オプションをユーザーに提供したいと思います。
ここで私は問題を抱えています。パスフレーズのハッシュをセッションに保存することにした場合、サーバーは技術的にユーザーの入力なしでデータを復号化できます。 Cookieでパスフレーズハッシュを覚えておくこともオプションではありません。
どのような一般的なオプションがありますか?私のアプローチ全体が正しくない可能性はありますか?
可能な解決策?
いくつか考えた後、私は以下を実装する予定です:
これは安全なアプローチですか?
データは次の場合にのみ復号化できます。
メモ:
データ自体は公開鍵で暗号化されていませんが、ランダム鍵が生成され、AESを使用してデータを暗号化するために使用されます。次に、この鍵は公開鍵で暗号化されます。これにより、なんらかのユーザー管理が可能になります。
すべてがHTTPSで実行されます
秘密鍵はパスフレーズ自体ではなく、パスフレーズのハッシュで暗号化されます
前もって感謝します
あなたが説明したことは OpenPGP 標準の基本に非常に似ています(ほとんど同じです)。このスキームの独自の実装を試みる前に、OpenPGPについて読むことをお勧めします。
ここで提示された質問に答えるには:
ここで私は問題を抱えています。パスフレーズのハッシュをセッションに保存することにした場合、サーバーは技術的にユーザーの入力なしでデータを復号化できます。 Cookieでパスフレーズハッシュを覚えておくこともオプションではありません。
これはトートロジーです。サーバーの暗号文イン/アウトパラダイムを維持しない限り、いつでも保存されたデータを復号化できます。最善の方法は、すべての操作でユーザー入力を要求することです。