クライアントサイド暗号化 とは?
クライアントサイド暗号化とは、通常ブラウザやネイティブアプリでデータをサーバーに送信する前にユーザーのデバイスで暗号化するプラクティスで、サーバーが受け取り保存するのは暗号化されたデータのみとなります。
クライアントサイド暗号化は、ゼロ知識システムとエンドツーエンド暗号化システムを実現する技術的なメカニズムです。データがユーザーのデバイスを離れる前に暗号化することで、平文はネットワークを通過せず、サーバー上に存在しません。これにより、ネットワーク傍受、サーバー侵害、内部者の脅威を同時に防ぎます。
ウェブアプリケーションでは、クライアントサイド暗号化は通常 Web Crypto API に依存します。Web Crypto API は暗号化操作のためのブラウザネイティブのインターフェースです。Web Crypto API はコンパイルされたネイティブコードを実行し、タイミング攻撃への耐性があり、最新デバイスのハードウェアアクセラレーションを活用できるため、JavaScript 暗号ライブラリよりも優れています。
クライアントサイド暗号化の主なトレードオフは、サーバーが暗号化されたデータを処理したり検索したりできないことです。サーバーサイドの検索、コンテンツ分析、データ変換などの機能は、サーバーが実際にデータを読み取れないため不可能になります。シークレット共有では、このトレードオフは理想的です。サーバーはデータの塊を保存してアクセスルールを実施するだけでよく、内容を理解する必要はありません。
Vaulted における クライアントサイド暗号化 の使われ方
Vaulted を通じて共有されるすべてのシークレットは、ブラウザがネットワークリクエストを送信する前に Web Crypto API を使ってクライアントサイドで暗号化されます。ブラウザはランダムな AES-256-GCM 鍵を生成し、平文を暗号化して、生成された暗号文と IV のみをサーバーに送信します。暗号鍵は URL フラグメントに配置され、ブラウザは HTTP リクエストにフラグメントを含めません。つまり、平文は送信者と受信者のブラウザメモリにのみ存在し、ネットワーク上にも、サーバー上にも存在しません。