术语表

ChaCha20-Poly1305

最后核实

定义

ChaCha20-Poly1305 是把 ChaCha20 流密码与 Poly1305 认证算法组合而成的 AEAD 算法,专为纯软件实现时的高速和恒定时间而设计。

ChaCha20-Poly1305 是一种 AEAD 算法,由 Daniel J. Bernstein 设计的两个组件构成:ChaCha20 流密码负责加密,Poly1305 一次性认证算法负责生成认证标签。IETF 版本见 RFC 8439,使用 256 位密钥、96 位 nonce 和 128 位标签。RFC 7905 定义了 ECDHE-RSA-CHACHA20-POLY1305 等 TLS 1.2 套件,TLS 1.3 中对应的套件是 TLS_CHACHA20_POLY1305_SHA256。

为什么重要

ChaCha20 只用加法、循环移位和异或运算,在没有 AES 指令的处理器上(老款或低端手机、小型 ARM 开发板等)也能跑得很快,而且不会出现依赖密钥的内存访问,天然抗时序攻击。在这类设备上它通常明显快于软件实现的 AES。它还为 TLS 提供了一个结构完全不同的备选 AEAD,生态不必只押宝 AES-GCM。服务器同时启用两者时,一般让客户端自行选择,各类设备都能用上最适合自己硬件的算法。国内用户机型跨度大,同时提供两者更稳妥。

例子

强制用 ChaCha20-Poly1305 建立 TLS 1.3 连接,确认服务器是否支持:

openssl s_client -connect example.com:443 -tls1_3 -ciphersuites TLS_CHACHA20_POLY1305_SHA256

TLS 1.2 方面,在 Nginx 的 ssl_ciphers 中加入 ECDHE-ECDSA-CHACHA20-POLY1305 和 ECDHE-RSA-CHACHA20-POLY1305 即可。

常见误区

  • 流密码天生不如 AES 安全。 RC4 的问题是 RC4 自身的缺陷。ChaCha20 使用 256 位密钥,没有已知的实用攻击,并且是 IETF 标准。
  • 它总是比 AES-GCM 快。 在有 AES 硬件加速的 CPU 上,AES-GCM 通常持平甚至更快,ChaCha20 的优势在没有加速指令的硬件上。
  • 启用它需要特定类型的证书。 对称加密算法与证书是 RSA 还是 ECDSA 无关。

延伸阅读