Nonce
ノンス(nonce、number used once)は暗号化で一度だけ使われる値である。IVと似るが、ランダム性よりも一意性を重視し、ストリーム暗号やAEADで広く使われる。
目的
同じ鍵での暗号化ごとに異なるキーストリームを生成させ、two-time pad攻撃を防止する。
メカニズム
ノンスは鍵の有効期間内で一意(再利用禁止)でなければならない。カウンタ(決定論的)またはランダム値でよい。CTR/GCM/ChaCha20はノンスからキーストリームを生成し、GCMでは96ビットノンスが最も一般的である。ノンス再利用は壊滅的なセキュリティ障害を招く。
ユースケース
- AES-GCMによるメッセージ暗号化
- ChaCha20-Poly1305による暗号化
- TLSレコードのシーケンス番号
- WireGuardのノンスカウンタ
例
- 入力
nonce=0,1,2... (counter)Outputa unique nonce per messageDeterministic and unique
よくあるエラー
- Nonce reuse replays the keystream and breaks authentication
- Use a monotonic counter or a long enough random nonce
関連用語
IV (Initialization Vector)
初期化ベクトル(IV、Initialization Vector)は、ブロック暗号モードにランダム性を注入する入力である。同じ平文でも暗号化ごとに異なる暗号文が生成される。 用語集
GCM (Galois/Counter Mode)
GCM(Galois/Counter Mode)は CTR 暗号と GHASH 認証を組み合わせた AEAD モードであり、機密性と完全性を同時に提供し、TLS 1.2/1.3 の推奨モードである。 用語集
CTR (Counter Mode)
CTR モードはブロック暗号をストリーム暗号に変える: 増分カウンタを暗号化してキーストリームを生成し、平文と XOR する。並列処理とランダムアクセスを支えるが、完全性は提供しない。 用語集
ChaCha20
ChaCha20 は Daniel Bernstein が設計したストリーム暗号であり、ARX(加算・回転・XOR)演算で構成され、Poly1305 と組み合わせて AEAD として使われることが多い、AES-GCM の高性能な代替である。 用語集