AES 的 CBC 模式指定要使每条消息唯一,应使用 IV。 IV 应该是随机的并且只使用一次,否则它可能允许人们解密使用相同 key 的其他密文。
C 中的rand()
函数适合生成这个IV 吗?它通常以当前时间为种子的事实是否使其容易受到某种攻击?
最佳答案
快速回答是否。不要将非加密安全随机生成器用于初始化 vector 。初始化 vector 未加密发送,因此可以认为它们可以由这些函数之一生成。但这应该会导致弱点,我将解释:如果你使用一个糟糕的(rand()
是一个如此弱的随机例程)你会缩小你生成的可能 IV 的空间。一个例子就足够了:
假设您在某些加密消息中使用 8 字节 IV。但是您使用的随机函数有一个 8 位种子,这样一个糟糕的随机函数只能生成 256 个可能的字节序列,因此可能最多只能生成 256 个可能的 IV(即使它们显示出纯随机性,或在整个空间上广泛分布的哈希值)知道这一点的攻击者可以复制可能的 IV 的整个 256 空间,使它们完全无用。
关于c - rand 应该用于 IV 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45130330/