我们可能很容易想象针对密码的攻击,因为如果有人说“有这样一个密码”,你很自然地就会想到“这个密码会被破解吗?”
和密码相比,伪随机数生成器实在是很少被人们所注意,因此我们很容易忘记伪随机数生成器也是可以受到攻击的。然而,由于伪随机数生成器承担了生成密钥的重任,因此它经常成为攻击的对象。
对种子进行攻击
伪随机数的种子和密码的密钥同等重要。如果攻击者知道了伪随机数的种子,那么他就能够知道这个伪随机数生成器所生成的全部伪随机数列。因此,伪随机数的种子不可以被攻击者知道。
要避免种子被攻击者知道,我们需要使用具备不可重现性的真随机数作为种子。
对随机数池进行攻击
当然,我们一般不会到了需要的时候才当场生成真随机数,而是会事先在一个名为随机数池( random pool)的文件中积累随机比特序列。当密码软件需要伪随机数的种子时,可以从这个随机数池中取出所需长度的随机比特序列来使用。
随机数池的内容不可以被攻击者知道,否则伪随机数的种子就有可能被预测出来。
随机数池本身并不储存任何有意义的信息。我们需要保护没有任何意义的比特序列,这点有点违背常识,但其实却是非常重要的。