秘密与非秘密初始化向量

Hut*_*ut8 23 security encryption cryptography initialization-vector

今天我正在做一些悠闲的阅读,并偶然发现了使用离散对数密码学(修订版)(NIST特刊800-56A)的双智能密钥建立方案建议书第5.8节(第45页).我很困惑:

应使用Approved密钥派生函数(KDF)从共享密钥中导出秘密密钥材料.来自KDF的输出仅用于秘密密钥材料,例如用于数据加密或消息完整性的对称密钥,秘密初始化向量或将用于生成其他密钥的主密钥(可能使用不同的进程) ).不应使用共享密钥生成非秘密密钥材料(例如非秘密初始化向量).

现在我不是Alan Turing,但我认为初始化向量不需要保密.在什么情况下会想要一个"秘密初始化向量?" 托马斯·波尔宁说,IVs是公开的,他似乎精通密码学.与caf一样.

Tho*_*nin 26

初始化向量不需要是秘密的(它不是密钥),但它也不需要是公共的(发送者和接收者必须知道它,但英国女王也不必知道它).

典型的密钥建立协议将导致双方计算一个数据,但只有他们都知道.利用Diffie-Hellman(或其任何椭圆曲线变体),所述共享数据片段具有固定长度并且它们不能控制其值(它们两者都获得相同的看似随机的比特序列).为了将该共享秘密用于对称加密,它们必须将该共享数据导出为适当长度的位序列,以用于它们将要使用的任何对称加密算法.

在您使用密钥建立算法获取发送方和接收方之间的共享密钥的协议中,并将使用该密钥对消息进行对称加密(可能是非常长的流消息),可以使用KDF 一次性产生钥匙 IV.这就是它如何进入,例如,SSL:从共享秘密(在SSL规范中称为"预主密钥")计算出一大块派生秘密数据,然后将其拆分为对称密钥和初始化向量两个加密方向.你可以做其他的事情,例如,生成随机IV并将它们与加密数据一起发送,而不是使用通过KDF获得的IV(这就是它在最新版本的TLS(SSL的后续版本)中的表现).两种策略同样有效(TLS使用外部随机IV,因为他们希望每个"记录"都有一个新的随机IV - TLS连接中的数据包 - 这就是为什么使用KDF不再适合的原因).