暗号
ストリーム暗号
定義
鍵とナンスから導出した擬似乱数の鍵ストリームを平文とビットまたはバイト単位で XOR して暗号化する対称暗号。
ストリーム暗号は秘密鍵とナンスから擬似乱数の鍵ストリームを生成し、平文と XOR して暗号文を得ます。復号時は同じ鍵ストリームを再生成して暗号文と XOR します。ブロック境界がなく状態量も小さいため、ストリーミング処理や省リソース環境に向きます。ChaCha20 や Salsa20 のような現代的設計は高速・定数時間で安全ですが、RC4 のような旧来の設計は破られており、TLS や WPA など多くの標準で禁止されています。最重要のルールは(鍵, ナンス)組を二度と使わないことです。同じ鍵ストリームで暗号化された 2 つのメッセージはその XOR を露呈し、しばしば両方の平文を復元できてしまいます。そのため通常は ChaCha20-Poly1305 のような認証付きモードで利用します。
例
- ChaCha20-Poly1305 は TLS 1.3 と QUIC で主流のストリーム暗号系 AEAD。
- RC4 は WEP や SSL/TLS で歴史的に用いられたが現在は禁止されている。
関連用語
ChaCha20
Daniel J. Bernstein が設計した現代的ストリーム暗号で、256 ビット鍵と 96 ビットナンスを用いる。Poly1305 と組み合わせた AEAD「ChaCha20-Poly1305」として広く使われる。
Salsa20
Daniel J. Bernstein が 2005 年に設計した 256 ビット鍵のストリーム暗号。eSTREAM ポートフォリオに選定され、ChaCha20 の直接の先祖となるアルゴリズム。
ブロック暗号
固定長の平文ブロックを秘密鍵で暗号化する対称暗号で、任意長のデータを扱うために通常は暗号利用モードと組み合わせて使う。
対称鍵暗号
暗号化と復号に同じ秘密鍵を使う暗号方式で、鍵を安全に共有できれば高速で強力な機密性を提供する。
暗号化
アルゴリズムと鍵を用いて平文を暗号文に変換し、認可された当事者のみが元のデータを復元できるようにする処理。
ノンス
暗号アルゴリズムに与える一度しか使ってはならない値で、新鮮性を保証し、リプレイや鍵・IV の再利用を防ぐ。