ChaCha20 暗号化
認証オプション付きの最新ストリーム暗号
クライアントサイドセキュリティ
すべての暗号化/復号操作はブラウザ内でローカルに実行されます。データはサーバーに送信されません。
初期カウンター値(デフォルト:0)
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)
参考資料
- RFC 7539 - IETF プロトコル用の ChaCha20 と Poly1305
- RFC 8439 - IETF プロトコル用の ChaCha20 と Poly1305(更新版)
- Wikipedia - ChaCha20-Poly1305
- D.J. Bernstein による ChaCha 原論文
よくある質問
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 などの十分に監査された暗号ライブラリを使用すべきです。