跳到主要内容
ecdsa.com

ChaCha20-Poly1305

把 ChaCha20 流密码与 Poly1305 认证器结合起来的 AEAD(RFC 8439):256 位密钥、96 位 nonce 和 128 位标签,在没有 AES 硬件支持的环境中用软件实现也很快。
其他写法ChaCha20Poly1305XChaCha20-Poly1305RFC 8439

ChaCha20 只使用加法、循环移位和异或运算,因此在任何 CPU 上都以常量时间运行;Poly1305 是一次性 MAC,每条消息的密钥取自该加密算法输出的第一个分组。RFC 8439(取代了 RFC 7539)使用 32 位分组计数器,单条消息上限为 256 GiB。XChaCha20-Poly1305 把 nonce 扩展到 192 位,因此可以安全地使用随机 nonce;它由一份互联网草案描述,libsodium 等库已经实现。

重复使用同一对密钥和 nonce 会破坏机密性,并让攻击者能够伪造消息,这一点与 AES-GCM 完全相同。在带 AES 指令的 CPU 上,处理大量数据时 AES-GCM 通常更快(在 Apple M4 Max 的单个核心上,使用 OpenSSL 3.6.5:ChaCha20-Poly1305 约 2.1 GB/s,AES-256-GCM 约 8.8 GB/s),但在小消息和没有 AES 硬件的设备上,ChaCha20-Poly1305 更胜一筹。

它的应用包括 TLS 1.3 的 TLS_CHACHA20_POLY1305_SHA256(0x1303)、OpenSSH 的 chacha20-poly1305@openssh.com、WireGuard 的传输加密算法、age 的载荷加密以及 PASETO v2 的 local 令牌。

标准与参考资料

全部术语