2012-01-10 136 views
25

我知道独特的IV在加密时非常重要,可以防止频率分析等攻击。问题:For AES CBC encryption, whats the importance of the IV?有一个非常明确的答案来解释IV的重要性。AES加密如何传输IV

以明文形式发送IV会有什么安全漏洞吗?或者是否需要使用用于发送对称密钥的相同公钥/私钥进行加密?

如果IV需要加密发送,那么为什么不每次都生成一个新的对称密钥并将IV作为密钥的一部分?生成对称密钥是否太昂贵?或者是最小化传输的数据量?


顶端回答到Secret vs. Non-secret Initialization Vector状态:

一个典型的密钥建立协议将导致两个涉及双方计算一个数据,他们,但只有他们,都知道。使用Diffie-Hellman(或其任何椭圆曲线变体),所述共享数据片段具有固定长度,并且它们无法控制其值(它们只是得到相同的看起来随机的比特序列)。

两个实体如何在没有共享信息的情况下导出“相同的表面上随机的位序列”?是否将共享信息发送加密的假设?而且,如果共享信息被加密发送,为什么不直接发送加密的IV?


因为应用程序需要安全地传输对称密钥,它似乎是从密钥本身分离IV本质上是一个优化。或者我错过了什么?

+0

我过去曾经使用过的一个方案是每次生成一个随机密钥,并用先前共享的公钥/私钥对对密钥和iv进行加密。我从来没有觉得这会增加AES有效载荷(对于我的使用),但可能极其有限的通信协议可能对尺寸有更严格的要求 – rejj 2012-01-10 14:17:36

回答

25

通过以明文方式发送IV没有任何安全漏洞 - 这类似于以明文形式存储哈希值的盐:只要攻击者无法控制IV /盐,并且只要它是随机的, 没有问题。

26

初始化向量和密钥之间的主要区别是密钥必须保密,而IV不一定是 - 它可以被攻击者读取而不会对加密的安全性产生任何危险有关计划。

这个想法是,你可以使用相同的密钥来处理几个消息,只为每个消息使用不同的(随机)初始化向量,所以纯文本之间的关系不会显示在相应的密文中。也就是说,如果您使用的是像Diffie-Hellman这样的密钥协议方案,它为每个会话提供新的共享密钥,您也可以使用它来生成第一个初始化向量。与直接选择初始化向量并将其与消息一起发送相比,这并没有带来太多的安全优势,但是可以节省一些带宽和一些来自随机源的熵。如果其中一个合作伙伴有一个糟糕的随机性来源(尽管DH在这种情况下也不是很安全),它会使IV更随机一些。

两个实体如何在没有共享信息的情况下导出“相同的表面上随机的位序列”? 是否假设共享信息已发送加密?而且,如果共享信息被加密发送,为什么不直接发送IV加密?

的Diffie-Hellman是基于群论问题:伊芙知道一个(环式)基团G与发电机g并看到两个值g^a(从Alice发送到Bob)和g^b(从鲍勃发送到Alice),其中ab是由Alice和Bob选择的随机大整数,并且Eve和甚至其他伙伴都不知道)。共享秘密然后是(g^a)^b = g^(a·b) = (g^b)^a。显然鲍勃(谁知道b)可以计算出秘密为(g^a)^b,而爱丽丝(谁知道a)可以计算出(g^b)^a。夏娃需要得到这个秘密来破解协议。

在某些群体这个(被称为计算Diffie-Hellman问题)似乎是一个很难的问题,我们正在使用的密码,这些群体。 (在原始的DH中,我们使用一些大的有限素数域的乘法群的素数的子群,在椭圆曲线DH中,我们在有限域上使用椭圆曲线群,其他群也起作用)

然后Alice和Bob都使用密钥派生函数来导出实际的密钥材料(即,两个方向的加密密钥,MAC密钥和开始IV)。

+0

非常有帮助,谢谢 – RunHolt 2012-01-12 14:19:48