首页/安全/加密与证书速查/IV 与 nonce 的正确用法
加密算法基础95 条

IV 与 nonce 的正确用法

初始化向量决定同一密钥下加密结果的随机性:CBC 要求随机且不可预测,CTR/GCM 要求同一密钥下唯一;理解差异可避免密钥流量用。

加密与证书速查安全更新于 2026-10-12
CBC 的 IV16 字节随机数,随密文一起存储
GCM/CTR 的 nonce推荐 12 字节,按消息唯一计数
是否保密不需要,但必须防预测与重用
存储通常前置在密文文件中

生成随机 IV / nonce

生成随机 IV / nonce
openssl rand -hex 16                  # 32 个十六进制字符 = 16 字节 IV
head -c 12 /dev/urandom | xxd -p      # 12 字节 GCM nonce
openssl rand -base64 12
把 IV 写成常量、或在失败重试时复用同一 nonce,是高频的实现错误;nonce 重用对流模式等同于密钥泄漏。

易错点

  • IV 需要防预测不一定随机:CTR/GCM 允许使用结构化计数器,但必须保证同一密钥下不重叠
  • 把「随机 IV」交给弱随机源生成(如时间戳、rand())会引入可预测性

数据来源与参考

  • NIST SP 800-38A
  • NIST SP 800-38D §8.3
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌