CoderTools

ChaCha20 暗号化

認証オプション付きの最新ストリーム暗号

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

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

ChaCha20:96ビットノンスを使用する256ビットストリーム暗号。高速で安全、認証なし。

初期カウンター値(デフォルト:0)

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

ChaCha20 について

ChaCha20 は、Daniel J. Bernstein が 2008 年に設計した最新のストリーム暗号で、Salsa20 暗号から派生しています。256ビット鍵を使用し、512ビットブロックで動作し、平文と XOR 演算するキーストリームを生成します。この暗号は、速度、セキュリティ、タイミング攻撃への耐性で知られ、ソフトウェア実装に最適です。

この暗号は速度、セキュリティ、タイミング攻撃への耐性で知られ、ソフトウェア実装に最適な選択です。

アルゴリズム比較

アルゴリズム 認証 鍵長 ノンスサイズ 適用シナリオ
ChaCha20 ストリーム暗号 256 bits 96 bits (12 bytes) 生の暗号化、カスタムプロトコル
ChaCha20-Poly1305 AEAD 256 bits 96 bits (12 bytes) TLS 1.3、QUIC、セキュアメッセージング
XChaCha20 ストリーム暗号 256 bits 192 bits (24 bytes) ランダムnonceシナリオ
XChaCha20-Poly1305 AEAD 256 bits 192 bits (24 bytes) ほとんどのアプリケーション(推奨)

ChaCha20 の仕組み

ChaCha20 は 20 ラウンドで動作し、4×4 の 32 ビットワード行列にクォーターラウンド関数を適用します。初期状態は以下で構成されます:

各ラウンドは加算、XOR、回転を使用して状態を置換し、ソフトウェアでの高速性を維持しながら優れた拡散を提供します。

AEAD:認証付き暗号化

ChaCha20-Poly1305 は RFC 8439 で標準化された関連データ付き認証暗号化(AEAD)構造です。ChaCha20 を暗号化に、Poly1305 MAC を認証に組み合わせます。これにより機密性と完全性の両方が保証され、暗号文や AAD への改ざんは復号化時に検出されます。128ビット認証タグが暗号文に追加されます。

これにより機密性と完全性の両方が保証されます。暗号文やAADの改ざんは復号時に検出されます。128ビット認証タグは暗号文とAADから計算されます。

主な特徴

  • 高性能:ソフトウェア実装向けに最適化、ハードウェア加速なしのプラットフォームで AES より 3 倍高速
  • 定時間:テーブルベースの AES 実装と異なり、キャッシュタイミング攻撃に耐性
  • シンプルな設計:ARX 操作(加算、回転、XOR)のみを使用、正しく実装しやすい
  • 広く採用:TLS 1.3、OpenSSH、WireGuard、Signal プロトコルなどで使用
  • 拡張ノンス:XChaCha20 バリアントは衝突リスクなしで安全なランダムノンス生成が可能

セキュリティ上の考慮事項

  • 同じ鍵でノンスを再利用しないでください - セキュリティが完全に破壊されます
  • 改ざんを検出するため、ほとんどのアプリケーションでは AEAD バリアント(Poly1305)を使用
  • ランダムノンスを使用する場合、衝突確率を最小化するため XChaCha20(192ビット)を使用
  • 適切な KDF(HKDF、Argon2)を使用してパスワードから鍵を導出

実際の使用例

  • TLS 1.3:デフォルト暗号スイート(TLS_CHACHA20_POLY1305_SHA256)
  • WireGuard VPN:主要暗号化プロトコル
  • Signal プロトコル:エンドツーエンド暗号化メッセージング
  • Cloudflare:モバイルクライアント向けに AES-GCM より優先
  • Linux カーネル:CSPRNG(/dev/urandom)

参考資料

よくある質問

ChaCha20 と AES の違いは何ですか?

どちらも安全な対称暗号です。ChaCha20 はハードウェア加速なしのソフトウェアで 3 倍高速で、タイミング攻撃に耐性があります。AES はハードウェアサポート(AES-NI)があれば高速です。ChaCha20 はモバイルや組み込みデバイスに適しています。

ChaCha20 ではなく XChaCha20 を使う理由は?

XChaCha20 の 192 ビットノンスは安全なランダムノンス生成を可能にします。96 ビットノンスでは衝突を避けるため慎重なノンス管理が必要です。一意のシーケンシャルノンスを保証できない場合、XChaCha20 を推奨します。

カウンターパラメータの用途は?

カウンターは各ブロックで増分することで 64 バイトを超えるメッセージの暗号化を可能にします。AEAD モードでは 1 から開始します(ブロック 0 は Poly1305 鍵の生成に使用)。通常はデフォルト(0)のままで問題ありません。

このツールでファイルを暗号化できますか?

このツールは完全にブラウザで実行され、テキストや小さなデータの暗号化に適しています。大きなファイルには openssl や libsodium ベースのアプリケーションなどのネイティブツールを使用してください。

このツールは本番環境で安全に使用できますか?

このツールは教育および開発目的です。実装は標準仕様に従っていますが、本番システムでは libsodium、OpenSSL、またはプラットフォーム提供の API などの十分に監査された暗号ライブラリを使用すべきです。