Salsa20 暗号化
拡張ノンス変種対応の高速ストリーム暗号
クライアントサイドセキュリティ
すべての暗号化・復号化操作はブラウザ内でローカルに実行されます。データがサーバーに送信されることはありません。
初期ブロックカウンター値(暗号化は通常0、復号化は同じ値を使用)
Salsa20について
Salsa20は2005年にDaniel J. Bernsteinによって設計されたストリーム暗号です。256ビット鍵と64ビットnonceを使用してキーストリームを生成し、平文とXORして暗号文を生成します。この暗号はソフトウェア実装での高性能を目指して設計されています。
Salsa20はeSTREAMプロジェクトに提出され、ソフトウェアプロファイルのファイナリストとして選ばれました。ChaChaファミリーの基礎となっています。
アルゴリズム比較
| アルゴリズム | ラウンド | Nonce長 | 速度 | 最適用途 |
|---|---|---|---|---|
| Salsa20/20 | 20 | 64 bits (8 bytes) | 標準 | 汎用暗号化、高セキュリティ |
| Salsa20/12 | 12 | 64 bits (8 bytes) | 高速 | パフォーマンス重視のアプリケーション |
| Salsa20/8 | 8 | 64 bits (8 bytes) | 最速 | 最高速度シナリオ |
| XSalsa20 | 20 | 192 bits (24 bytes) | 標準 | ランダムnonce、NaCl/libsodium |
Salsa20の仕組み
Salsa20は4×4の32ビットワード行列(合計512ビット)で動作します。初期状態は鍵(256ビット)、nonce(64ビット)、カウンター(64ビット)、および'expand 32-byte k'という文字列を形成する4つの定数ワードで構成されます。
コア関数は20ラウンドのクォーターラウンド演算を適用し、加算-回転-XOR(ARX)演算のみを使用します。これによりSalsa20はソフトウェアで効率的に動作し、タイミング攻撃に耐性があります。
XSalsa20はHSalsa20を使用してnonceを192ビットに拡張します。HSalsa20はnonceの最初の128ビットからサブキーを導出し、残りの64ビットを実際のnonceとして使用します。これにより安全なランダムnonce生成が可能になります。
ラウンド変種
- Salsa20/20(20ラウンド)- 完全なセキュリティマージンを提供する標準変種。ほとんどのアプリケーションに推奨。
- Salsa20/12(12ラウンド)- eSTREAMポートフォリオ選定。性能とセキュリティの良好なバランスを提供。
- Salsa20/8(8ラウンド)- 最速変種。既知の実用的な攻撃はないが、セキュリティマージンは低下。
主な特徴
- 高性能:ソフトウェア向けに最適化、最新CPUで1バイトあたり3-4サイクル
- シンプルな設計:ARX演算のみ使用、ルックアップテーブル不要で簡単に実装
- 定数時間:キャッシュタイミングサイドチャネル攻撃に耐性
- 大容量カウンター:64ビットカウンターにより鍵-nonceペアあたり最大2^70バイトの暗号化が可能
- 拡張Nonce:XSalsa20の192ビットnonceはランダムnonce生成を可能に
セキュリティに関する注意事項
- 同じ鍵でnonceを再利用しないでください - セキュリティが完全に破壊されます
- Salsa20は暗号化のみを提供し、認証は提供しません - AEADにはPoly1305と組み合わせてください
- ランダムnonceの場合、XSalsa20を使用して衝突確率を最小化してください
- パスワードから鍵を導出するには適切なKDF(HKDF、Argon2)を使用してください
実際の使用例
- NaCl/libsodium:XSalsa20-Poly1305がデフォルトのAEAD構成
- 暗号化ツール:多くのファイル暗号化ユーティリティがSalsa20変種を使用
- パスワードマネージャー:一部は保存された認証情報の暗号化にSalsa20を使用
- ゲームエンジン:ネットワークゲームでの高速暗号化に使用
参考資料
- D.J. Bernstein - Salsa20仕様
- eSTREAMプロジェクト - ストリーム暗号ポートフォリオ
- Wikipedia - Salsa20
- NaCl - ネットワーキングと暗号化ライブラリ
よくある質問
Salsa20とChaCha20の違いは何ですか?
ChaCha20はSalsa20を改良したもので、ラウンドあたりの拡散が向上しています。ChaCha20はラウンドあたりのセキュリティが優れているため、IETF標準となりました。新しいプロジェクトでは一般的にChaCha20が推奨されます。
どのラウンド変種を使用すべきですか?
最大のセキュリティにはSalsa20/20を使用してください。Salsa20/12は速度とセキュリティの良好なバランスを提供します。Salsa20/8はパフォーマンスが絶対に重要で、脅威モデルがセキュリティマージンの低下を許容する場合にのみ使用してください。
XSalsa20はいつ使用すべきですか?
ランダムnonceを生成する必要がある場合にXSalsa20を使用してください。192ビットのnonce空間により、ランダム生成での衝突は事実上不可能です。標準Salsa20の64ビットnonceは慎重なカウンター管理が必要です。
認証なしのSalsa20は安全ですか?
Salsa20単体は機密性のみを提供し、完全性は提供しません。攻撃者は検出されずに暗号文を変更できます。認証付き暗号化のためには、常にPoly1305または他のMACと組み合わせてください。
このツールは本番環境で使用できますか?
このツールは教育および開発目的です。実装は仕様に従っていますが、本番システムではlibsodium、OpenSSL、またはプラットフォーム提供のAPIなど、十分に監査された暗号化ライブラリを使用すべきです。