ChaCha20-Poly1305 暗号化 & 復号
無料オンライン ChaCha20-Poly1305 暗号化 & 復号 ツール。100% ローカル処理 — データは端末の外に出ません。
結果がここに表示されます...
入力 → 暗号化
Usage Guide
ChaCha20-Poly1305について
ChaCha20-Poly1305は、ChaCha20ストリーム暗号とPoly1305メッセージ認証コードを組み合わせた認証付き暗号化(AEAD)アルゴリズムです。Daniel J. Bernsteinが設計し、 RFC 8439 で標準化され、TLS 1.3、SSH、 WireGuard でプライマリ暗号スイートとして採用されています。単一の操作で機密性(暗号化)と完全性(認証)の両方を提供し、盗聴と暗号文の改ざんを防ぎます。ChaCha20-Poly1305は、ハードウェアAES加速のないプラットフォーム向けに、AES-GCMのソフトウェアフレンドリーな代替として開発されました。
使用手順
このツールは暗号化と復号の両方をサポートします。キーは必須です。ナンスは空のままにすると自動生成されます:
キーとナンスの形式
ChaCha20-Poly1305は固定サイズのパラメータを使用します:
ChaCha20-Poly1305 vs AES-GCM
どちらもTLS 1.3のAEAD暗号です。各々を選ぶタイミングを以下に示します:
FAQ
Q: なぜ出力が入力より長いのですか?
A: 暗号化された出力はbase64エンコードされており、12バイトのナンス + 平文の長さ + 16バイトのPoly1305認証タグが含まれています。そのため、バイナリのオーバーヘッドは28バイト(12ナンス + 16タグ)で、base64エンコードがさらに約33%の長さを追加します。
Q: 暗号文を改ざんするとどうなりますか?
A: ChaCha20-Poly1305は改ざんされた暗号文の復号を拒否します。Poly1305タグは暗号文全体に対して計算されたメッセージ認証コードです。1ビットでも変更があるとタグ検証が失敗し、復号関数は壊れた平文を生成する代わりにエラーを返します。
Q: ChaCha20-Poly1305と単純なChaCha20の違いは何ですか?
A: 単純なChaCha20は機密性のみを提供します — データを暗号化しますが改ざんを検出しません。 ChaCha20-Poly1305はChaCha20暗号化とPoly1305認証タグを組み合わせ、機密性と完全性の両方を提供します。実用的な用途では常にChaCha20-Poly1305を単純なChaCha20より優先してください。
Q: 複数のメッセージに同じキーを使用できますか?
A: はい、ただし各メッセージは一意のナンスを使用する必要があります。(キー、ナンス)ペアは絶対に再使用してはいけません。12バイトのナンスでは、ランダムなナンス生成により誕生日の衝突確率は約1/296で、数十億のメッセージに対して安全です。
Q: ChaCha20-Poly1305は量子コンピューターに耐性がありますか?
A: すべての対称暗号と同様に、ChaCha20-Poly1305はグローバーのアルゴリズムの影響を受け、256ビットのセキュリティが128ビット相当に減少します。128ビットの耐量子セキュリティはほとんどのアプリケーションに十分と考えられています。そのため、256ビットキーを持つChaCha20-Poly1305は128ビットセキュリティレベルで耐量子と見なされており、 AES-256-GCM も同様です。
Q: 「無効なキー、ナンス、または暗号文」で復号が失敗するのはなぜですか?
A: このエラーは認証タグの検証が失敗したことを意味します。一般的な原因:
間違ったキー:キーが暗号化に使用されたものと一致していません。
破損した暗号文:base64文字列が変更、切り詰め、または誤って貼り付けられました。
非ChaCha20-Poly1305データの復号:入力が別のアルゴリズムまたはツールで暗号化されました。
Use Cases
推奨:対称ファイルおよびメッセージ暗号化
ChaCha20-Poly1305は優れた汎用対称暗号化の選択肢です。WireGuard VPNのすべてのトンネルトラフィックに使用され、TLS 1.3の2つの主要な暗号スイートの1つです。常にメッセージごとに新しいランダムなナンスを生成してください(このツールは自動的に前置します)。
- ✅ ChaCha20-Poly1305(モバイル、クロスプラットフォーム、ソフトウェアのみに推奨)
- ✅ AES-256-GCM(AES-NIハードウェアが利用可能な場合に推奨)
- ✅ XChaCha20-Poly1305(拡張24バイトナンス、大量メッセージング向け)
- ❌ 新しいプロジェクトでは非認証暗号(AES-CBC、単純なChaCha20)を使用しないでください
推奨:モバイルおよびIoT暗号化
ハードウェアAES加速のないプラットフォームでは、ChaCha20-Poly1305がAES-GCMを上回ります。ChaCha20はソフトウェアフレンドリーなため、すべてのプラットフォームで定数時間で実行され、タイミングサイドチャンネルのリスクがありません。Googleはこの理由でAndroid TLSトラフィックの優先暗号としてChaCha20-Poly1305を選択しました。
- ✅ ChaCha20-Poly1305(ハードウェアAESなしで最高のパフォーマンス)
- ✅ AES-256-GCM(AESハードウェアを持つデバイスで許容可能)
- 💡 TLS 1.3は自動的にネゴシエーションします — 両方の暗号スイートが必須
- ❌ 制約のあるデバイスでAES-CBCを使用しないでください(認証なし、遅い)
許容可能:暗号化されたローカルストレージ
ChaCha20-Poly1305はローカルに保存された機密データを保護できます。パスワードを直接使用するのではなく、 Argon2id を使用してユーザーパスワードからキーを導出してください。
- ✅ ChaCha20-Poly1305 + Argon2idキー導出(パスワードベースの暗号化)
- ✅ AES-256-GCM + PBKDF2(FIPS準拠環境)
- 💡 保存:Argon2idパラメータ + ソルト + ChaCha20ナンス + 暗号文
- ❌ ローカルストレージにECBモードや非認証暗号を使用しないでください
非推奨:大きなファイルの暗号化
標準的なChaCha20-Poly1305は認証前に暗号文全体をバッファリングするため、大きなファイルに対してメモリ集約的です。数メガバイトを超えるファイルには、チャンク暗号化を処理する専用ツールまたはライブラリを使用してください(例:libsodium secretstream、age)。
- 💡 数MB以上のファイルにはチャンクAEADを使用してください
- ✅ libsodium secretstream(ストリーミングChaCha20-Poly1305)
- ✅ age暗号化ツール(ファイル指向、内部でChaCha20-Poly1305を使用)
- ✅ AES-256-GCMストリーミングモード(ハードウェア加速環境向け)
非推奨:鍵交換または認証
ChaCha20-Poly1305は対称暗号です — 両者がすでに同じ秘密鍵を共有している必要があります。鍵配布問題を解決しません。安全な鍵交換には、非対称プロトコルまたはTLS 1.3などの完全なプロトコルを使用してください。共有シークレットなしの認証には、 RSA またはECDSAデジタル署名を使用してください。
- ❌ ChaCha20-Poly1305は鍵配布を解決しません
- ✅ TLS 1.3(鍵交換 + ChaCha20-Poly1305データ暗号化を処理)
- ✅ X25519 + ChaCha20-Poly1305(Noiseプロトコルパターン)
- ✅ RSA / ECDSAデジタル署名と身元確認
非推奨:パスワードハッシュ
ベストプラクティスのまとめ
- AESハードウェア加速が利用できない場合 — モバイル、IoT、クロスプラットフォームソフトウェア — の対称暗号化にChaCha20-Poly1305を使用してください。
- 暗号化ごとに常に一意のランダムナンスを使用してください。ナンスフィールドを空のままにすると、ツールが自動的に1つを生成します。
- 暗号文の出力には12バイトのナンスと16バイトの認証タグが埋め込まれています — 復号に必要なのは単一のbase64文字列のみです。
- (キー、ナンス)ペアを絶対に再使用しないでください。ナンスの再使用はChaCha20-Poly1305のセキュリティを完全に破ります。
- パスワードベースの暗号化では、最初にArgon2idでキーを導出してください — パスワードをChaCha20-Poly1305のキーとして直接使用しないでください。