秘密与非秘密初始化向量

时间:2011-04-26 21:57:23

标签: security encryption cryptography initialization-vector

今天我正在做一些悠闲的阅读,偶然发现Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography (Revised) (NIST Special Publication 800-56A)的第5.8节(第45页)。我很困惑:

  

批准的密钥派生函数   (KDF)应用于获取秘密   从共享秘密中获取材料。   KDF的输出只能是   用于秘密密钥材料等   作为用于数据的对称密钥   加密或消息完整性,a   秘密初始化向量,或   将用于的主密钥   生成其他密钥(可能使用   不同的过程)。非秘密键控   材料(如非秘密   初始化矢量)不应该   使用共享密钥生成。

现在我不是Alan Turing,但我认为初始化向量不需要保密。在什么情况下会想要一个“秘密初始化向量?” Thomas Pornin说IV是公开的,他似乎精通密码学。与caf一样。

4 个答案:

答案 0 :(得分:26)

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

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

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

答案 1 :(得分:1)

好吧,考虑一下,如果两方具有相同的加密功能,但没有相同的IV,则不会得到相同的结果。那么,似乎提议是双方获得相同的共享秘密,并且每个都确定地生成IV(将是相同的)然后它们可以进行通信。这就是我读它的方式;但我实际上并未阅读该文件,而且我不完全确定我的描述是否准确;但这就是我开始调查的方式。

答案 2 :(得分:0)

CTR模式加密中计数器的起始值可以被认为是IV。如果您将其保密,则最终会获得一些额外的安全性,而不是通过您正在使用的密码的密钥长度授予的安全性。多少额外的内容很难说,但不知道它确实增加了弄清楚如何解密给定消息所需的工作。

答案 3 :(得分:0)

IV 是公开的还是私有的,无所谓 让我们考虑攻击者知道 IV,现在通过查看加密的数据包/数据, 和IV知识而没有加密密钥知识,他/她能猜出输入数据吗? (想一想)

让我们稍微倒退一下,假设加密中没有使用IV AES(输入,K)= E1 相同的输入将始终产生相同的加密文本。 攻击者可以通过查看加密文本和输入数据的一些先验知识(即某些协议的初始交换)来猜测密钥“K”

所以,这就是 IV 的帮助所在。它添加了输入值,即使对于相同的输入数据,您的加密文本也会发生变化。 即AES(输入,IV,K)= E1 因此,攻击者看到加密的数据包是不同的(即使输入数据相同)并且无法轻易猜测。 (即使有IV知识)