ChaCha20-Poly1305(チャチャ20)
Daniel Bernstein 2008年設計のストリーム暗号 + 認証付AEAD。TLS 1.3 / WireGuard / Google QUIC 採用、ARM / モバイルでAES より高速、AES の代替候補。
概要
ChaCha20-Poly1305 はDaniel J. Bernstein (米イリノイ大学・「djb」・Curve25519 / Ed25519 等の暗号設計多数) が2008年に発表した「ChaCha」(Salsa20 の改良版) と 2005年発表した「Poly1305」を組合せたAEAD (Authenticated Encryption with Associated Data) 暗号スイート。2014年Google が組合せ実装公開・2015年RFC 7539 / 2018年RFC 8439 で標準化。ARM / モバイル (AES-NI なし環境) でAES-GCM より3-5倍高速・実装が定数時間 (Constant-Time) でサイドチャネル攻撃耐性が高い。
ChaCha20-Poly1305 主要仕様
| 項目 | 仕様 |
|---|---|
| 暗号 | ChaCha20 (256bit 鍵) ストリーム暗号 |
| 認証 | Poly1305 (128bit MAC) |
| Nonce | 96bit (per message) |
| ブロックサイズ | 64 byte |
| ラウンド数 | 20 (Salsa20/8 から改良) |
| 構造 | ARX (Add-Rotate-XOR) |
| 設計者 | Daniel J. Bernstein (djb) |
| 標準化 | RFC 7539 (2015) / RFC 8439 (2018) |
主要採用先
| 用途 | プロトコル |
|---|---|
| TLS 1.3 | 推奨暗号スイート3つの1つ |
| TLS 1.2 (拡張) | RFC 7905 (2016) |
| WireGuard | 標準 (唯一の暗号) |
| Signal Protocol | メッセンジャー |
| Google QUIC | 元祖採用 |
| OpenSSH | [email protected] (2013) |
| E2E 暗号 | |
| Apple iMessage | 一部 |
| Wireshark | 解析対応 |
ChaCha20 vs AES-GCM 比較
| 項目 | AES-128-GCM | ChaCha20-Poly1305 |
|---|---|---|
| 鍵 | 128bit | 256bit |
| HW加速 | AES-NI 必須 | 不要 (SW高速) |
| ARM (HWなし) | 50-100 MB/s | 200-400 MB/s |
| x86 + AES-NI | 3-5 GB/s | 1-2 GB/s |
| モバイル (旧Android) | 遅 | 高速 |
| サイドチャネル耐性 | Cache attack 注意 | Constant-Time |
| 標準化 | NIST FIPS 197 (AES) + RFC 5288 (GCM) | RFC 8439 |
ChaCha20 は ARX (Add-Rotate-XOR) のみで設計され、Cache タイミング攻撃耐性が構造的に高い。AES より単純な実装で安全性確保。
ChaCha20 設計の特徴
ChaCha20 はSalsa20 (2005) の改良:
- 20 ラウンド (Salsa20/8 や/12 から増・安全マージン向上)
- 列演算 (column round) を行演算 (diagonal round) に変更
- 同性能で安全性向上
- ARX のみ (Add / Rotate / XOR)
- S-Box なし (シンプル)
Poly1305 認証
メッセージ認証コード (MAC):
- 多項式評価ベース
- 128bit 出力
- 32bit 乗算で計算可能
- Galois Counter Mode (AES-GCM) と類似但しシンプル
- ChaCha20 + Poly1305 で1パス処理 (AEAD)
XChaCha20-Poly1305
ChaCha20 のNonce 拡張 (24 byte = 192bit) 版:
- 通常Nonce 96bit から拡張
- ランダムNonce 安全使用可能 (Nonce 衝突確率天文学的小)
- Signal Protocol / libsodium で広範採用
- RFC ドラフト段階 (2024)
関連用語との違い
- vs AES-GCM: ARM軽量 / x86高速
- vs Salsa20: 旧版 / 安全マージン向上
- vs PQC: 古典 / 量子耐性
FAQ
Q1: AES-GCM と ChaCha20 どちら? A: x86 HW (AES-NI) があれば AES-GCM が速い。モバイル / IoT / 古いARM はChaCha20 推奨。多くのライブラリが自動選択。
Q2: Daniel Bernstein は誰? A: 米暗号学者・「djb」(イニシャル)・Curve25519 / Ed25519 / NaCl / qmail / DJBDNS 等の重要暗号 / ソフトウェア設計者。米司法省「Bernstein訴訟」(1995) で暗号輸出規制を緩和した立役者。
Q3: WireGuard はなぜ ChaCha20 のみ? A: シンプル設計哲学・「正しいアルゴリズム1つだけ」を採用、ChaCha20 が ARM / モバイル含む全環境で十分高速・安全。AES サポートで設定肥大化を回避。