密码学
Salsa20
定义
Daniel J. Bernstein 于 2005 年设计的 256 位密钥流密码,入选 eSTREAM 软件组合,是 ChaCha20 的直接前身。
Salsa20 是 Daniel J. Bernstein 于 2005 年发布的流密码,被欧洲 eSTREAM 竞赛软件组合选入最终入选名单。它通过对由 256 位密钥、64 位 nonce 与分组计数器派生出的 512 位内部状态,执行 20 轮(Salsa20/20)或减少版本 Salsa20/12、Salsa20/8 的四分之一轮函数(基于加、循环移位、异或)来生成密钥流。该算法软件性能高、运行时间恒定,且除针对减少轮数的攻击外,未受到有效密码分析。如今它主要被 ChaCha20 取代——后者扩散更佳、nonce 更长——但仍以 XSalsa20(扩展 nonce 版)形式存在,被 NaCl/libsodium 库以及历史上的 Tor 隐藏服务协议采用。
示例
- NaCl/libsodium 的 secretbox 默认 AEAD 为 XSalsa20-Poly1305。
- Salsa20/12 是 eSTREAM 软件组合最终入选算法之一。
相关术语
ChaCha20
由 Daniel J. Bernstein 设计的现代流密码,使用 256 位密钥和 96 位 nonce,常与 Poly1305 组合为 AEAD 算法 ChaCha20-Poly1305 广泛部署。
流密码
通过将数据与由密钥和 nonce 派生的伪随机密钥流逐位或逐字节异或来加密的对称密码。
对称加密
加密和解密使用同一个秘密密钥的加密方案,在密钥安全分发的前提下提供高速度和强机密性。
加密
使用算法和密钥将明文转换为密文的密码学过程,使只有授权方才能恢复原始数据。
密码套件
由密钥交换、身份认证、数据加密和完整性算法组合而成的命名集合,由 TLS 等协议在每次会话中协商使用。
随机数(Nonce)
提供给密码学算法的 "一次性数值",用于保证新鲜性,防止重放或密钥/IV 重用。