rand 应该用于 IV 吗?

Should rand be used for an IV?

AES 的 CBC 模式指定要使每条消息唯一,应使用 IV。 IV应该是随机的并且只使用一次,否则它可能允许人们解密使用相同密钥的其他密文。

C中的rand()函数适合生成这个IV吗?它通常以当前时间为种子的事实是否使其容易受到某种攻击?

快速回答是。不要将非加密安全随机生成器用于初始化向量。初始化向量未加密发送,因此可以认为它们可以由这些函数之一生成。但这应该会导致弱点,我将解释:如果你使用一个糟糕的(rand() 是一个如此弱的随机例程)你会缩小你正在生成的可能 IV 的 space。一个例子就足够了:

假设您在某些加密邮件中使用了 8 字节的 IV。但是您使用的随机函数有一个 8 位种子,这样一个糟糕的随机函数只能生成 256 个可能的字节序列,因此可能最多只能生成 256 个可能的 IV(即使它们显示出纯随机性,或在整个 space 上广泛传播的哈希值)知道这一点的攻击者可以复制整个 256 space 可能的 IV,使它们完全无用。