ChaCha20-Poly1305
ChaCha20-Poly1305 とは何ですか?
ChaCha20-Poly1305ChaCha20 ストリーム暗号と Poly1305 一回限り認証子を組み合わせた AEAD で、RFC 8439 で標準化され TLS 1.3 や WireGuard で採用される。
ChaCha20-Poly1305 は RFC 8439(RFC 7539 を廃止)で規定された AEAD 暗号です。ChaCha20 は Daniel J. Bernstein が設計した 256 ビット鍵の ARX 系ストリーム暗号で、96 ビット nonce と 32 ビットカウンタにより呼び出しごとに 512 ビットの鍵ストリームを生成します。Poly1305 は ChaCha20 の最初の鍵ストリームブロックから派生した鍵を用いる 128 ビットの一回限り MAC で、暗号文と関連データを認証します。AES-NI に依存しない純ソフトウェア実装でも定数時間かつ高速に動くため、Google は 2014 年に(Adam Langley が主導して)Chrome と Android へ導入し、AES ハードウェアを持たないモバイル端末を保護しました。これによりテーブル参照型 AES のキャッシュタイミングの弱点も回避できます。
現在では TLS 1.2 スイート(RFC 7905)、TLS 1.3 の必須スイート(RFC 8446)、QUIC(RFC 9001)、OpenSSH 6.5 以降の chacha20-poly1305@openssh.com、OpenVPN、そしてすべての WireGuard データフレームで使われています。拡張 nonce 版の XChaCha20-Poly1305(192 ビット nonce、libsodium が普及させた)は、誕生日限界を気にせず nonce をランダムに選べます。
AES-GCM と同様、nonce 再利用は壊滅的です。同一鍵で nonce を繰り返すと 2 つの平文の XOR が漏れ、Poly1305 の鍵も露出してメッセージ偽造が可能になります。そのため実装は決定的なカウンタを用い、カウンタが一巡する前に鍵を更新します。
flowchart LR K[256 ビット鍵] --> CC[ChaCha20] N[96 ビット nonce] --> CC CC -->|ブロック 0| PK[Poly1305 一回限り鍵] CC -->|ブロック 1..n| KS[鍵ストリーム] P[平文] --> X((XOR)) KS --> X X --> CT[暗号文] AD[関連データ] --> PM[Poly1305 MAC] CT --> PM PK --> PM PM --> TAG[128 ビットタグ] CT --> OUT[暗号文 + タグ] TAG --> OUT
● 例
- 01
TLS 1.3 スイート TLS_CHACHA20_POLY1305_SHA256。
- 02
WireGuard のトンネルデータは ChaCha20-Poly1305 で暗号化される。
● よくある質問
ChaCha20-Poly1305 とは何ですか?
ChaCha20 ストリーム暗号と Poly1305 一回限り認証子を組み合わせた AEAD で、RFC 8439 で標準化され TLS 1.3 や WireGuard で採用される。 サイバーセキュリティの 暗号 カテゴリに属します。
ChaCha20-Poly1305 とはどういう意味ですか?
ChaCha20 ストリーム暗号と Poly1305 一回限り認証子を組み合わせた AEAD で、RFC 8439 で標準化され TLS 1.3 や WireGuard で採用される。
ChaCha20-Poly1305 からどのように防御しますか?
ChaCha20-Poly1305 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
ChaCha20-Poly1305 の別名は何ですか?
一般的な別名: ChaCha20/Poly1305, RFC 8439, ChaPoly。