密码学
ChaCha20
定义
由 Daniel J. Bernstein 设计的现代流密码,使用 256 位密钥和 96 位 nonce,常与 Poly1305 组合为 AEAD 算法 ChaCha20-Poly1305 广泛部署。
ChaCha20 是 Daniel J. Bernstein 于 2008 年提出的 20 轮流密码,是 Salsa20 的改进设计。它使用 256 位密钥、96 位 nonce 和 32 位分组计数器,通过对 32 位字的加、循环移位、异或等简单运算生成密钥流,在无 AES 硬件加速的 CPU(移动端、嵌入式)上具有高速且恒定时间的特性。与 Poly1305 消息认证码结合形成的 AEAD 方案 ChaCha20-Poly1305 由 RFC 8439 标准化,并与 AES-GCM 一同成为 TLS 1.3 必须支持的两套密码套件之一。ChaCha20 广泛用于 TLS、QUIC、WireGuard、OpenSSH、Signal 协议以及 Linux 内核加密。经过十余年的密码分析,完整 20 轮版本至今未发现已知攻击。
示例
- TLS 1.3 与 QUIC 在移动设备上常用 TLS_CHACHA20_POLY1305_SHA256。
- WireGuard 使用 ChaCha20-Poly1305 加密所有数据包。
相关术语
Salsa20
Daniel J. Bernstein 于 2005 年设计的 256 位密钥流密码,入选 eSTREAM 软件组合,是 ChaCha20 的直接前身。
流密码
通过将数据与由密钥和 nonce 派生的伪随机密钥流逐位或逐字节异或来加密的对称密码。
AES(高级加密标准)
由 NIST 标准化的 128 位分组密码,密钥长度可为 128、192 或 256 位,由 Daemen 与 Rijmen 设计,是全球占主导地位的对称加密算法。
对称加密
加密和解密使用同一个秘密密钥的加密方案,在密钥安全分发的前提下提供高速度和强机密性。
加密
使用算法和密钥将明文转换为密文的密码学过程,使只有授权方才能恢复原始数据。
密码套件
由密钥交换、身份认证、数据加密和完整性算法组合而成的命名集合,由 TLS 等协议在每次会话中协商使用。