ChaCha20-Poly1305とは
ChaCha20-Poly1305は、Daniel J. Bernsteinによって設計された認証付き暗号(AEAD)です。ChaCha20ストリーム暗号とPoly1305メッセージ認証コードを組み合わせています。
- 高速:ソフトウェア実装でAESより高速(AES-NIがない環境)
- 安全:タイミング攻撃に対して設計上耐性
- シンプル:実装が容易でバグが少ない
使用例
- TLS 1.3:
TLS_CHACHA20_POLY1305_SHA256 - WireGuard VPN:デフォルト暗号化
- SSH:
chacha20-poly1305@openssh.com - Noise Protocol:Signal等で使用
ChaCha20 vs AES-GCM
| 項目 | ChaCha20 | AES-GCM |
|---|---|---|
| HW加速なし | ✅ 高速 | 遅い |
| HW加速あり | 速い | ✅ 最速 |
| モバイル/IoT | ✅ 最適 | 要AES-NI |
Pythonでの使用例
from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305
import os
key = ChaCha20Poly1305.generate_key()
chacha = ChaCha20Poly1305(key)
nonce = os.urandom(12) # 96ビットナンス
ciphertext = chacha.encrypt(nonce, b"secret data", b"aad")
plaintext = chacha.decrypt(nonce, ciphertext, b"aad")
