密码学
流密码
定义
通过将数据与由密钥和 nonce 派生的伪随机密钥流逐位或逐字节异或来加密的对称密码。
流密码以秘钥和 nonce 为输入生成伪随机密钥流,逐字节与明文异或得到密文;解密时再生相同的密钥流并与密文异或。它没有分组边界、状态较少,非常适合流式数据与资源受限环境。现代设计如 ChaCha20、Salsa20 软件友好、运行时间恒定且安全;而 RC4 等旧设计已被破解,TLS、WPA 等多数标准明令禁止。流密码最关键的规则是绝不重复使用(密钥,nonce)对:同一密钥流加密的两条消息会泄露其异或,通常足以恢复双方明文。因此实际系统多以 ChaCha20-Poly1305 等认证模式使用。
示例
- ChaCha20-Poly1305 是 TLS 1.3 与 QUIC 中占主导地位的流密码 AEAD。
- RC4 历史上用于 WEP 与 SSL/TLS,现已被禁止。
相关术语
ChaCha20
由 Daniel J. Bernstein 设计的现代流密码,使用 256 位密钥和 96 位 nonce,常与 Poly1305 组合为 AEAD 算法 ChaCha20-Poly1305 广泛部署。
Salsa20
Daniel J. Bernstein 于 2005 年设计的 256 位密钥流密码,入选 eSTREAM 软件组合,是 ChaCha20 的直接前身。
分组密码
对固定长度明文分组使用密钥进行加密的对称密码,通常结合工作模式以处理任意长度的数据。
对称加密
加密和解密使用同一个秘密密钥的加密方案,在密钥安全分发的前提下提供高速度和强机密性。
加密
使用算法和密钥将明文转换为密文的密码学过程,使只有授权方才能恢复原始数据。
随机数(Nonce)
提供给密码学算法的 "一次性数值",用于保证新鲜性,防止重放或密钥/IV 重用。