Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 182

ChaCha20-Poly1305

审核人Cybersecurity entrepreneur & security researcher

ChaCha20-Poly1305 是什么?

ChaCha20-Poly1305由 ChaCha20 流密码与 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 是 128 位一次性 MAC,作用于密文与关联数据,其密钥来自 ChaCha20 第一个密钥流块。由于它具有恒定时间特性,并在缺少 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 会泄露两段明文的异或,并暴露 Poly1305 密钥,从而可伪造消息。因此实现使用确定性计数器,并在计数器回绕前更换密钥。

flowchart LR
  K[256 位密钥] --> CC[ChaCha20]
  N[96 位 nonce] --> CC
  CC -->|块 0| PK[Poly1305 一次性密钥]
  CC -->|块 1..n| KS[密钥流]
  P[明文] --> X((异或))
  KS --> X
  X --> CT[密文]
  AD[关联数据] --> PM[Poly1305 MAC]
  CT --> PM
  PK --> PM
  PM --> TAG[128 位标签]
  CT --> OUT[密文 + 标签]
  TAG --> OUT

示例

  1. 01

    TLS 1.3 套件 TLS_CHACHA20_POLY1305_SHA256。

  2. 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。

相关术语