CoderTools

Salsa20 暗号化

拡張ノンス変種対応の高速ストリーム暗号

クライアントサイドセキュリティ

すべての暗号化・復号化操作はブラウザ内でローカルに実行されます。データがサーバーに送信されることはありません。

Salsa20:256ビットストリーム暗号、64ビットnonce、20ラウンド。多くのアプリケーションに適した高速で安全な暗号。

初期ブロックカウンター値(暗号化は通常0、復号化は同じ値を使用)

フォーマットオプション
🔒 100% ローカル処理ファイルは完全にブラウザ内で処理されます。データはサーバーにアップロードされません。

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を使用
  • ゲームエンジン:ネットワークゲームでの高速暗号化に使用

参考資料

よくある質問

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など、十分に監査された暗号化ライブラリを使用すべきです。