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 令牌。