当使用AES(或者可能是大多数密码)时,重复使用给定密钥的初始化向量(IV)是不好的做法。例如,假设我使用密码块链接(CBC)模式使用给定的IV加密一块数据。对于下一个数据块,应该改变IV(例如,随机数可以递增或者某些东西)。我想知道,(并且主要出于好奇)如果可以保证块的前四个字节递增,则使用相同的IV会有多大的安全风险。换句话说,假设要加密的两个数据块是:
0x00000000someotherdatafollowsforsomenumberofblocks
0x00000001someotherdatathatmaydifferormaynotfollows
如果同一个IV用于两个数据块,那么会泄漏多少信息?
答案 0 :(得分:3)
在这种特殊情况下,它可能没问题(但不管怎么说都不行)。 “有效IV”是你的第一个加密块,每个消息保证不同(只要nonce真的永远不会在同一个键下重复),因为块密码操作是一个双射。它也是不可预测的,只要您在更改“IV”的同时更改密钥,因为即使具有完全可预测的输入,攻击者也不应该能够预测分组密码的输出(分组密码表现为伪随机函数)。
然而,它非常脆弱。在你转向更环保的牧场之后很久就维持这个协议的人可能不会理解安全性在很大程度上取决于非重复的nonce,并且可以“优化”它。发送那个单独的额外块,每个消息真正的IV真的是你买不起的开销吗?答案 1 :(得分:2)
标记, 你所描述的几乎是Appendix C of NIST SP800-38a中提出的内容。 特别是,有两种方法可以生成IV:
第二个选项看起来与你提议的非常相似。
答案 2 :(得分:1)
那么,这取决于加密算法的块大小。对于64字节的通常块大小,我认为这不会有任何区别。在进入分组密码之前,对于许多块,第一个比特将是相同的,但结果将没有任何可识别的模式。对于块大小< 4个字节(我认为不会发生这种情况)会产生影响,因为第一个块总是相同的,泄漏有关模式的信息。只是我的意见。
编辑:
找到了这个
“对于CBC和CFB,重复使用IV泄漏了有关第一个块的一些信息 明文的内容,以及两条消息“
共享的任何公共前缀来源:我大学的讲座:)