初期化ベクトル とは?
初期化ベクトル(IV)は、鍵と並んで暗号アルゴリズムへの追加入力として使用されるランダムまたは疑似ランダム値で、同じ鍵で暗号化された同一の平文が操作をまたいで異なる暗号文を生成することを保証します。
別名: IV, initialisation vector
初期化ベクトルはノンスと同じ基本的な目的を果たします。各暗号化操作に固有性を導入します。用語はしばしば同義に使われますが、「IV」はブロック暗号モード(CBC、GCM、CTR)の文脈でより一般的で、「ノンス」はより広く使用されます。AES-GCM では IV は Galois/Counter Mode で使用されるカウンターを初期化する 12 バイトの値です。
IV は秘密である必要はありません。通常、暗号文と共に平文で保存または転送されます。そのセキュリティ上の貢献は秘密性ではなく固有性から来ます。しかし、暗号モードによっては、IV が予測不可能(CBC モードのように)であるか、単に固有(GCM モードのように)である必要があります。CBC モードで予測可能な IV を使用すると特定の攻撃が可能になりますが、GCM は同じ鍵で IV が再使用されないことだけを要求します。
AES-GCM での IV の再使用は壊滅的です。攻撃者が認証鍵を回復して有効な暗号文を偽造できるようになり、2 つの暗号文ストリームの XOR を通じて平文に関する情報が漏洩します。このため、実装は IV 生成に暗号学的に安全な乱数生成器を使用し、IV を手動で構築したり再使用したりしてはなりません。
Vaulted における 初期化ベクトル の使われ方
Vaulted はすべてのシークレットに対して Web Crypto API の crypto.getRandomValues() を使って新鮮な 12 バイトの IV を生成します。IV は暗号文と共にサーバーに送信され、暗号化されたレコードの一部として Redis に保存されます。受信者がシークレットを取得すると、IV は暗号文と共に返され、ブラウザが AES-256-GCM 復号パラメーターを再構築できるようにします。Vaulted はシークレットごとに固有の鍵も生成するため、鍵と IV のペアは常に固有です。