c - rand 应该用于 IV 吗?

标签 c random aes cbc-mode initialization-vector

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/

相关文章:

c - 是否可以使用仅在运行时知道参数数量和类型的函数指针来调用函数

c - 生成具有随机边的图

swift - 基于种子 Swift 3 生成随机值

java - 可以使用共享的 Random 实例来获得高斯分布吗

c - 创建并返回数组的函数导致问题

C - malloc 用于指向结构体的指针

java - 将 delayMicroseconds 函数添加到标准 firmata 以运行带处理的 Arduino

C#:AES 错误:填充无效且无法删除。相同的 key 和一切,帮助

java - AES/CFB/NOPADDING(128 位)带密码加盐

Java 显示无效字符?