为了使流密码能够防止重复的密钥攻击,IV 不应该重复自己。但是 SecureRandom 在这方面是否比简单的非安全 Random 有好处(或者它只是用于生成不可预测的序列)?
假设我在 AES CBC 模式下使用固定大小的消息,并且我为每个 IV 生成一个新的 Random(使用当前的纳米时间作为种子),与 SecureRandom 相比,这会增加重复 IV 的概率吗?
为了使流密码能够防止重复的密钥攻击,IV 不应该重复自己。但是 SecureRandom 在这方面是否比简单的非安全 Random 有好处(或者它只是用于生成不可预测的序列)?
假设我在 AES CBC 模式下使用固定大小的消息,并且我为每个 IV 生成一个新的 Random(使用当前的纳米时间作为种子),与 SecureRandom 相比,这会增加重复 IV 的概率吗?
使用Random
生成 IV 的最大问题不是它可能会重复,而是攻击者可以预测未来的 IV,这可以用来攻击 CBC。
Random 使用 48 位密钥,因此它会重复大约每 2^48 个值。这意味着不会long
产生所有可能的情况。这对您来说可能足够随机,也可能不够随机。如果对使用 SecureRandom 有疑问,您可以随时更改它。
IV 通常不需要不可预测,但需要一次性使用。这意味着不应使用使用弱种子或具有短周期的简单随机数生成器来生成 IV。
使用中最强的随机数发生器每秒只产生几十比特的熵。大多数算法将 IV 视为次要的密钥。因此,缓慢而强大的 RNG 应该留给密钥并为 IV 播种快速、长周期的 RNG。
是的,IV 应该是完全随机的。如果您不使用完全随机,您可能会泄漏有关纯文本的信息。不要忘记随机数是与纯文本进行异或运算的。因此,如果 IV 具有可预测的结构,您可能会发现重复的密文,从而以与 ECB 相同的方式泄漏信息。如果攻击者可以影响要加密的纯文本,这将更加明显。