密码学
随机数(Nonce)
别称: 一次性数值, 密码学随机数
定义
提供给密码学算法的 "一次性数值",用于保证新鲜性,防止重放或密钥/IV 重用。
Nonce 是一个在某个密钥的有效期内绝不重复的输入,被对称加密、AEAD 模式、签名方案及认证协议用来保证每次操作的唯一性。在 AES-GCM、ChaCha20-Poly1305 等 AEAD 模式中,nonce 通常为 96 位,可由随机数生成或确定性计数器构造;同一个密钥下重用 AES-GCM 的 nonce 会同时摧毁机密性与认证性。Nonce 也出现在 TLS 握手、OAuth/OIDC 挑战、Bitcoin 区块头以及 ECDSA 等签名方案中——在 ECDSA 里重用 nonce 会泄露私钥。最佳实践是采用足够长的随机 nonce 或严格单调递增的计数器,在无法排除碰撞时改用抗误用模式(AES-GCM-SIV、XChaCha20-Poly1305 等)。
示例
- TLS 1.3 通过将序列号与方向相关的 IV 进行 XOR 来派生每条记录的 AEAD nonce。
- 2010 年 PlayStation 3 的 ECDSA 私钥被恢复,原因是 Sony 重用了签名时的 nonce。
相关术语
初始化向量(IV)
分组密码工作模式所使用的随机初始值,用于保证相同明文在同一密钥下加密会得到不同密文。
对称加密
加密和解密使用同一个秘密密钥的加密方案,在密钥安全分发的前提下提供高速度和强机密性。
ChaCha20
由 Daniel J. Bernstein 设计的现代流密码,使用 256 位密钥和 96 位 nonce,常与 Poly1305 组合为 AEAD 算法 ChaCha20-Poly1305 广泛部署。
AES(高级加密标准)
由 NIST 标准化的 128 位分组密码,密钥长度可为 128、192 或 256 位,由 Daemen 与 Rijmen 设计,是全球占主导地位的对称加密算法。
重放攻击
捕获合法网络流量(通常是身份令牌或交易),并稍后重新发送以冒充原始发送方的攻击。
ECDSA
DSA 在椭圆曲线上的变体,由 FIPS 186 标准化,生成紧凑签名,其安全性依赖于椭圆曲线离散对数问题。