ノンス とは?
ノンス(number used once)は、暗号化操作において厳密に一度だけ使用される固有の通常ランダムまたは順次の値で、同一の入力が異なる出力を生成することを保証し、リプレイ攻撃とパターン分析を防ぎます。
別名: number used once, cryptographic nonce
ノンスなしで同じ鍵で同じ平文を暗号化すると、毎回同一の暗号文が得られます。複数のメッセージを観察する攻撃者はパターンを検出できます。同一の暗号文は、復号せずとも同じメッセージが送信されたことを明らかにします。ノンスは各暗号化操作に固有の値を導入することでこの問題を解消し、同じ鍵で同じ平文を暗号化しても常に異なる暗号文が生成されるようにします。
ノンスのセキュリティ要件はアルゴリズムによって異なります。一部のアルゴリズム(AES-GCM など)は同じ鍵でノンスを再使用しないことを要求します。再使用すると機密性と認証を壊滅的に侵害する可能性があります。これらのアルゴリズムでは、ランダムなノンスは偶発的な衝突が無視できるほど小さくなる十分な大きさが必要です。96 ビットのランダムノンス(AES-GCM で使用)は単一の鍵での約 2^32 回の暗号化に対して十分な衝突耐性を提供します。
ノンスは暗号プロトコルで異なる名前で現れます。AES-GCM では初期化ベクトルと呼ばれ、チャレンジレスポンス認証ではチャレンジ、ブロックチェーンではマイニングノンスです。共通点は固有性です。使用されるコンテキスト内で値が繰り返してはなりません。
Vaulted における ノンス の使われ方
Vaulted で暗号化されたすべてのシークレットは、Web Crypto API の暗号学的に安全な乱数生成器によって生成された固有のランダムな 12 バイト(96 ビット)ノンスを使用します。このノンスは AES-256-GCM 暗号化の初期化ベクトルとして機能します。暗号文と共にサーバーに保存され、復号のために受信者に転送されます。各シークレットが新しく生成された鍵とノンスのペアを使用するため、ノンスの再使用は大規模でも実際的な懸念事項ではありません。