Web Cryptography Api のブレークスルーは、秘密鍵の内容を公開することなく、暗号化鍵の作成、使用、保存をネイティブにサポートすることです。
要約すれば:
- WebCrypto を使用してキーを生成し、エクスポート不可としてマークします
- キーを IndexedDB に保存する
暗号化キーを使用できますが、その内容はユーザーとプログラマの両方に対して隠されます。画像では、「cryptoKey」オブジェクトがブラウザによって隠されていることに注意してください
なぜ使わない...
- Cookie / ローカル ストレージ: テキスト ストレージのみを許可します。キーは base64 としてテキスト形式にエクスポートする必要があり、その内容は悪意のあるエージェントやユーザーによってコピーされる可能性があります...
- Local File : ユーザーフレンドリーではありません。キーの保護は完全にユーザーの手に委ねられています。各アプリケーションでは、ユーザーはキーを WebCrypto にインポートする必要があります。このソリューションは、同一生成元ポリシーによって保護されていません。ユーザーは他のサイトでキーを使用できます。
代替案(@dandavis によるコメント)
- キーを保存しないAES などの対称暗号化アルゴリズムで使用するパスワードからキーを取得します。必要に応じてキーが生成され、ユーザーにパスワードが要求されます。利点 パスワード マネージャーを使用することは可能ですが、その場合、ブラウザーにパスワード文字列が保存されます。キーは複数のコンピューターから使用できます
これらのソリューションは、データをサーバーから隠す必要がある場合に適しています。サーバーが必要なクライアント データを処理できるようにするには (キーの種類によって異なります)
対称鍵:データを復号化するために、サーバーに鍵自体 (抽出可能でなければならない) またはパスワードを提供する必要があります。
非対称鍵:サーバーは鍵ペア (公開/秘密) を使用します。サーバーは公開鍵をクライアントに送信します。クライアントからサーバーに送信されるデータは、サーバーの公開鍵で暗号化され、秘密鍵で復号化されます。サーバーからクライアントに送信されるデータは、クライアントの公開鍵で暗号化され、クライアントの秘密鍵で復号化されます。