暗号
Salsa20
定義
Daniel J. Bernstein が 2005 年に設計した 256 ビット鍵のストリーム暗号。eSTREAM ポートフォリオに選定され、ChaCha20 の直接の先祖となるアルゴリズム。
Salsa20 は Daniel J. Bernstein が 2005 年に発表したストリーム暗号で、欧州 eSTREAM コンペティションのソフトウェアポートフォリオ最終版に採用されました。256 ビット鍵、64 ビットナンス、ブロックカウンタから得られる 512 ビットの内部状態に対し、加算・回転・XOR ベースの quarter-round 関数を 20 ラウンド適用(Salsa20/20)して鍵ストリームを生成します(Salsa20/12 や Salsa20/8 の縮小版も存在)。ソフトウェア実装で高速・定数時間であり、縮小ラウンドへの攻撃を除いて十分な暗号解析耐性を維持しています。現在は拡散性とより長いナンスを持つ ChaCha20 にほぼ置き換わっていますが、ナンス拡張版 XSalsa20 として NaCl/libsodium ライブラリや、過去には Tor の Hidden Service で利用されてきました。
例
- NaCl/libsodium の secretbox は既定の AEAD として XSalsa20-Poly1305 を採用している。
- Salsa20/12 は eSTREAM の最終ポートフォリオに選ばれた。
関連用語
ChaCha20
Daniel J. Bernstein が設計した現代的ストリーム暗号で、256 ビット鍵と 96 ビットナンスを用いる。Poly1305 と組み合わせた AEAD「ChaCha20-Poly1305」として広く使われる。
ストリーム暗号
鍵とナンスから導出した擬似乱数の鍵ストリームを平文とビットまたはバイト単位で XOR して暗号化する対称暗号。
対称鍵暗号
暗号化と復号に同じ秘密鍵を使う暗号方式で、鍵を安全に共有できれば高速で強力な機密性を提供する。
暗号化
アルゴリズムと鍵を用いて平文を暗号文に変換し、認可された当事者のみが元のデータを復元できるようにする処理。
暗号スイート
鍵交換、認証、データ暗号化、完全性のアルゴリズム群を 1 つの名前にまとめた組み合わせで、TLS などの協議によりセッションごとに選ばれる。
ノンス
暗号アルゴリズムに与える一度しか使ってはならない値で、新鮮性を保証し、リプレイや鍵・IV の再利用を防ぐ。