Encryption AES、密码块链接模式、静态初始化向量和更改数据

Encryption AES、密码块链接模式、静态初始化向量和更改数据,encryption,cryptography,aes,Encryption,Cryptography,Aes,当使用AES(或者可能是大多数密码)时,对给定密钥重用初始化向量(IV)是一种不好的做法。例如,假设我使用密码块链接(CBC)模式用给定的IV加密数据块。对于下一个数据块,应该更改IV(例如,nonce可能会增加或其他内容)。不过,我想知道(主要是出于好奇)如果可以保证数据块的前四个字节都在递增,那么使用相同的IV会有多大的安全风险。换句话说,假设要加密的两个数据块是: 0x00000000someotherdatafollowsforsomenumberofblocks 0x00000001s

当使用AES(或者可能是大多数密码)时,对给定密钥重用初始化向量(IV)是一种不好的做法。例如,假设我使用密码块链接(CBC)模式用给定的IV加密数据块。对于下一个数据块,应该更改IV(例如,nonce可能会增加或其他内容)。不过,我想知道(主要是出于好奇)如果可以保证数据块的前四个字节都在递增,那么使用相同的IV会有多大的安全风险。换句话说,假设要加密的两个数据块是:

0x00000000someotherdatafollowsforsomenumberofblocks
0x00000001someotherdatathatmaydifferormaynotfollows

如果对两个数据块使用相同的IV,会泄漏多少信息?

这取决于加密算法的块大小。对于通常64字节的块大小,我认为这不会有任何区别。在输入分组密码之前,许多块的第一位是相同的,但结果不会有任何可识别的模式。对于小于4字节的块大小(我不认为会发生这种情况),这会产生不同,因为第一个块总是相同的,会泄漏有关模式的信息。只是我的意见

编辑:

找到这个

“对于CBC和CFB,重复使用IV会泄漏关于第一个块的一些信息 关于明文,以及关于两条消息共享的任何公共前缀“


资料来源:我所在大学的讲座:)

在这种情况下,可能没关系(但无论如何,不要这样做)。“有效IV”是您的第一个加密块,它保证每个消息都不同(只要nonce在同一个密钥下确实不会重复),因为分组密码操作是一个双射。这也是不可预测的,只要您在更改“IV”的同时更改密钥,因为即使使用完全可预测的输入,攻击者也不能预测分组密码的输出(分组密码的行为类似于伪随机函数)

然而,它非常脆弱。在你转向更绿色的牧场很久之后仍在维护此协议的人很可能不理解安全性在很大程度上取决于不重复的临时状态,并且可能会“优化”它。为一个真正的IV发送一个额外的信息块真的是你负担不起的开销吗?

马克, 你所描述的几乎就是在书中提出的。 具体而言,有两种方法可以生成IV:

  • 随机生成一个新的静脉注射 每条信息
  • 对于每条消息,使用一个新的唯一nonce(这可能是一个计数器),加密nonce,并将结果用作IV

  • 第二个选项与您的建议非常相似。

    谢谢您的输入。我绝对同意“不要那样做”的观点。我对加密的了解只足以理解任何看似好主意但没有人推荐的东西几乎肯定是坏主意。事实上,我正在从事的当前项目需要CTR模式,这绝对需要一个新的IV,并且不会从数据本身的更改中获益。CBC模式下的IV要求包括唯一性和不可预测性。可预测的IVs允许。这个特殊的病例有可预测的静脉注射,所以肯定不是很好。