SecureRandom真的需要生成初始化向量还是足够随机?

时间:2012-09-03 14:03:42

标签: java encryption random cryptography initialization-vector

要使流密码能够抵御重复的密钥攻击,IV不应重复。但是SecureRandom在这方面是否优于简单的非安全随机(或仅用于生成不可预测的序列)?

假设我正在使用AES CBC模式的固定大小的消息,并且我为每个IV生成一个新的Random(使用当前的纳米时间作为种子),与SecureRandom相比,这是否会增加重复IV的概率?

4 个答案:

答案 0 :(得分:4)

使用Random生成IV的最大问题不是它可能重复,而是攻击者可以预测未来的IV,这可以用来攻击CBC。

相关:https://crypto.stackexchange.com/q/3515/2805

答案 1 :(得分:1)

随机使用48位密钥,因此它将重复大约每2 ^ 48个值。这意味着不会生成每个可能的long。这对你来说可能是也可能不是随机的。如果有疑问,请使用SecureRandom,您可以随时更改。

答案 2 :(得分:0)

是的,IV应该是完全随机的。如果您不使用完整随机,则可能会泄漏有关纯文本的信息。不要忘记随机与纯文本进行异或。因此,如果IV具有可预测的结构,您可能会发现重复的密文,从而以与ECB相同的方式泄漏信息。如果攻击者可以影响要加密的纯文本,这将更加明显。

答案 3 :(得分:0)

IV通常不需要不可预测,但需要一次性使用。这意味着使用弱种子或具有短周期的简单随机数生成器不应用于生成IV。

使用中最强的随机数生成器每秒仅生成几十位熵。大多数算法都将IV视为密钥的次要。因此,应该为密钥保留缓慢而强大的RNG,并为IV播种快速,长周期的RNG。