首页/网络/协议速查/ChaCha20-Poly1305

ChaCha20-Poly1305

移动端与无 AES 硬件加速设备上的首选 AEAD:纯软件实现快、抗侧信道,TLS 1.3 强制套件之一。

协议速查网络更新于 2026-10-13

它是什么

ChaCha20-Poly1305 由流加密与一次性认证器组合而成(RFC 8439),是 TLS 1.3 的强制套件之一。它不需要查表运算,因此在没有专用硬件加速的移动设备与嵌入式平台上表现优异,同时天然规避了查表实现可能带来的时序风险。

什么时候它更划算

设备具备硬件加速时,另一套主流对称算法更快;没有硬件加速时,这套算法在纯软件实现下通常更优。服务端同时提供两套套件,让客户端按自身硬件能力选择,是当前最稳妥的配置方式。

基本信息

组成流加密加一次性认证器
规范RFC 8439;TLS 1.3 强制套件见 RFC 8446 §9.1
优势无查找表,移动端与纯软件实现性能好
要点一次性值不可重复使用

典型使用场景

  • 移动端与物联网设备的加密套件选择
  • 排查「同一站点在不同设备上握手速度差异明显」
  • 评估服务端套件配置是否覆盖不同硬件能力
  • 学习认证加密的构造方式与安全边界

查看与测试

查看与测试
openssl ciphers -v 'CHACHA20' | head                    # 查看支持的套件
openssl speed -evp chacha20-poly1305                    # 测本机软件实现的性能
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | grep -i 'cipher'   # 看实际协商结果

不同版本下的地位

协议版本是否强制说明
TLS 1.3是标准要求实现,协商后完全保密
TLS 1.2否可协商,但部分特性与保护力度不同
库与语言默认值视实现不同运行时的默认优先级可能不同
服务端同时提供两套主流套件、由客户端按硬件能力自选,比在中枢端强行指定其中一套更稳妥。
它是流密码:一次性值与计数器管理出错(重复使用)同样是致命问题,不要自己手写实现。
性能差异必须实测:同一台机器上不同实现的差距可能高达数倍,凭经验判断很容易选错。

易错点

  • 自己手写实现:一次性值复用会导致密钥流重复,加密形同虚设
  • 服务端只配一套套件:移动端与服务器端无法各自取得最优性能
  • 认为新算法一定更快:具备硬件加速时老牌对称算法通常更优
  • 忽略库与语言的默认优先级:不同运行时的选择顺序不同,需要实测确认
  • 只关注套件名称不看协商结果:最终使用的算法与套件列表并不总是一致

数据来源与参考

  • RFC 8439(ChaCha20-Poly1305)
  • RFC 8446 §9.1

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌