初始化向量将来会增大吗?

时间:2011-06-15 15:45:12

标签: cryptography aes initialization-vector

我目前正在使用带有CBC模式的AES(256)来加密数据。我用加密数据存储初始化向量。现在我只是将IV添加到加密数据的开始,然后解密,将其作为硬编码字节长度读取。

如果将来初始化向量长度发生变化,此方法将会中断。

所以我的问题是:

未来更长的AES密钥大小=更长的IV吗?或者,换句话说,AES的块大小将来会改变吗?

如果是这样,处理这个问题的最佳方法是什么?使用第一个字节作为IV的长度指示,然后读取那么多字节?

3 个答案:

答案 0 :(得分:4)

Rijndael支持更大的块大小,但AES目前固定在128位块。似乎相对不太可能由NIST标准化较大的Rijndael块大小,因为这实际上是一种全新的算法,任何人都没有实现。如果NIST认为需要更大尺寸的分组密码,那么很可能只会进行新的竞赛。

然而,我建议的是,而不是IV长度,你在消息的开头附近包含某种算法标识符(你只需要一个字节),这将不仅仅是灵活性处理更大的IV,但也会在未来以其他方式扩展您的格式,例如新算法。例如0 == AES-256 / CBC,1 == AES-256 / GCM,2 = AES-2.0 / CBC,3 = AES-256 / CBC,在某处有特殊的额外标题,等等。

PS - 不要忘记也使用消息验证代码,否则你会暴露自己的各种简单的消息修改攻击。

答案 1 :(得分:2)

初始化向量的目的是使第一个块随机化,这样使用相同密钥加密两次的相同数据将不会产生相同的输出。

从信息理论的角度来看,AES有“仅”2 ^ 128个不同的IV,因为这些是您可能与第一个实际数据块进行异或的所有可能的随机值。因此,没有任何理由让IV大于密码的块大小。

更大的块大小可以证明更大的IV。较大的密钥大小不会。

根据定义,较大的块大小意味着不同的算法。因此,您可以标记数据以指示您正在使用的算法,这就是您将如何判断要使用的块大小(以及IV大小)。

答案 2 :(得分:0)

作为替代解决方案,您可以切换到AES-CTR模式。计数器模式需要Nonce,但Nonce不必与AES块大小相关联。如果AES块大小增加(不太可能,正如Jack所说)那么你可以保留相同大小的Nonce。