AES加密如何传输IV

Run*_*olt 28 cryptography aes initialization-vector

我知道独特的IV在加密时非常重要,可以防止频率分析等攻击.问题:对于AES CBC加密,最重要的是IV?有一个非常明确的答案解释了IV的重要性.

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

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


Secret与Non-secret Initialization Vector的最佳答案如下:

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

两个实体如何在没有共享信息的情况下导出"相同的看似随机的比特序列"?假设共享信息是加密发送的吗?并且,如果共享信息是加密发送的,为什么不直接发送加密的IV?


因为应用程序需要安全地传输对称密钥,所以将IV与密钥本身分开似乎是一种优化.或者我错过了什么?

Paŭ*_*ann 30

初始化向量和密钥之间的主要区别在于密钥必须保密,而IV不必是 - 它可以被攻击者读取而不会对所讨论的加密方案的安全性造成任何危险.

这个想法是你可以对几个消息使用相同的密钥,只为每个消息使用不同的(随机)初始化向量,因此普通文本之间的关系不会显示在相应的密文中.

也就是说,如果您使用像Diffie-Hellman这样的密钥协议方案,它为每个会话提供了新的共享密钥,您也可以使用它来生成第一个初始化向量.与直接选择初始化向量并将其与消息一起发送相比,这并没有真正提供太多安全性优势,但是保存了一些带宽,以及来自随机源的一些熵.如果其中一个伙伴有一个糟糕的随机源(虽然DH在这种情况下也不是很安全),它会使IV更随机一些.

两个实体如何在没有共享信息的情况下导出"相同的看似随机的比特序列"?假设共享信息是加密发送的吗?并且,如果共享信息是加密发送的,为什么不直接发送加密的IV?

Diffie-Hellman基于一个群论问题:Eve知道一个G带有生成器的(循环)组g并看到两个值g^a(从Alice传送到Bob)和g^b(从Bob传送到Alice),其中ab是选择的随机大整数由爱丽丝和鲍勃,夏娃甚至其他伙伴都不知道.然后是共享秘密(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).


Eug*_*eck 29

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