是否建议我使用初始化向量来加密/解密我的数据?它会让事情更安全吗?是否需要根据具体情况进行评估?
为了将其置于实际上下文中,Win32 Cryptography函数CryptSetKeyParam允许在加密/解密之前在密钥上设置初始化向量.其他API也允许这样做.
通常建议什么,为什么?
当相同的密钥可能用于加密多个消息时,IV是必不可少的.
原因是,在大多数加密模式下,可以一起分析用相同密钥加密的两个消息.例如,在简单的流密码中,对使用相同密钥加密的两个密文进行异或运算导致两个消息的XOR,使用传统的密码分析技术可以从中轻松提取明文.
弱IV是使WEP易碎的部分原因.
IV基本上将一些独特的非秘密数据混合到密钥中,以防止相同的密钥被使用两次.
在大多数情况下,你应该使用IV.由于每次都会随机生成IV,如果加密相同的数据两次,加密的消息将会不同,观察者也不可能说这两条消息是否相同.
仔细看看CBC模式的图片(见下文).你很快就会意识到,知道IV的攻击者就像攻击者知道前一块密文一样(是的,他们已经知道了很多这样的密文).
这就是我所说的:当你不确保数据完整性时,IV = 0的大多数"问题"是块加密模式的一般问题.你真的必须确保诚信.
以下是我的工作:使用强校验和(加密哈希或HMAC)并在加密前将其添加到您的明文中.有你已知的第一个密文块:它是没有校验和的同一个东西的IV,你需要校验和一百万个其他原因.
最后:CBC和流密码之间的任何类比都不是非常有见地的恕我直言.
只要看看CBC模式的图片,我想你会感到惊喜.
这是一张图片:
http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
链接文字