Stream Cipher
ストリーム暗号はバイト単位やビット単位で暗号化し、鍵ストリームを平文と XOR する。パディングが不要で、リアルタイムやストリーミングデータに適する。
目的
ブロック境界なしの効率的な暗号化を提供し、ネットワークストリームや連続データに適合する。
メカニズム
暗号化は C_i = P_i ⊕ S_i で、S は鍵とノンス/カウンタから PRG で生成される鍵ストリームである。復号も同一である(XOR は自己逆)。安全性は鍵ストリームの疑似ランダム性とノンスの一意性に依存する。代表的な構成は ARX 系(ChaCha)、LFSR 系、AES-CTR モードである。
ユースケース
- TLS 1.3 で ChaCha20-Poly1305 を使う通信の保護
- リアルタイムの音声・映像暗号化
- WireGuard VPN における利用
- 低リソース組込みでの暗号化
例
- 入力
key + nonce → keystreamOutputC = P ⊕ SThe nonce must never repeat
よくあるエラー
- Encrypting two messages with the same key+nonce (a two-time pad)
- Use a unique nonce or counter per message
関連用語
Block Cipher
ブロック暗号は固定長のブロック(例: 128 ビット)を暗号化・復号する対称暗号であり、任意長のデータを扱うには運用モードが必要である。 用語集
ChaCha20
ChaCha20 は Daniel Bernstein が設計したストリーム暗号であり、ARX(加算・回転・XOR)演算で構成され、Poly1305 と組み合わせて AEAD として使われることが多い、AES-GCM の高性能な代替である。 用語集
RC4
RC4は、Ron Rivestが1987年に設計したストリーム暗号である。シンプルで高速だが深刻なバイアスがあり、TLSなどから禁止された。 用語集
Nonce
ノンス(nonce、number used once)は暗号化で一度だけ使われる値である。IVと似るが、ランダム性よりも一意性を重視し、ストリーム暗号やAEADで広く使われる。 用語集