曾有统计学家说,在古代最好的手工随机数生成器是立方体,把它们扔到盒子中摇动,让它们旋转碰撞,当它们静止下来时,朝上的那一面就是随机的。
在中国,充满智慧的中国先人们就懂得用随机数来占卜,他们用火来烧龟壳,产生的随机裂缝被认为预示着事情的未来发展,而易经里常用的生成随机数方式是用49条草按一定的规则切分几次,最终的结果也是随机数。
现在由于计算机的普及应用,很多程序都需要使用随机数生成器,因此需要一个内置的随机数指令。
如果一个随机数发生器是确定性函数,可以重复调用一个随机数序列,如果初始条件相同,则此函数产生的随机数序列结果也相同,这种就是伪随机数发生器。
最早的伪随机数生成器算法是用一个随机种子值对其进行平方计算,然后截取平方结果中间的若干位数字,得到一个新的数字,重复这个过程,就会得到一个具有统计学概率论意义上的随机数序列,这种方法也叫做平方取中法。
但用这种方式算出来的结果是有漏洞的,当随机数多到一定程序,就会出现短而重复周期的数字,形成明显的规律。这种规律产生的原因,就是它的算法是后续值基于先前值,所以会产生周期性循环。
为了解决随机数生成器生成的结果有规律的问题,很多科学家提出了很多新发明来试图解决这个问题,但很多都难以达到理想的效果。在1997年日本人发明了旋转随机数生成器,它利用寄存器的反馈移位机制,能产生循环周期非常长的随机数序列,其循环周期是每隔2的19937次方减1,这么长的随机数周期,已经能满足大多数的计算机应用。
在1999年,英特尔终于实现在在芯片里内置随机数生成器,它是根据硬件的热噪声来生成随机数的,可以说是一个基于物理的真下的随机数生成器。
最近,也出现了使用硬件随机数生成器的方式,利用开源硬件的设计源码公开性,用户可以检查随机数的生成过程是否符合真正随机,完全透明的算法机制,让更多的专业随机数生成器使用硬件随机数生成器来参与运算。
时至今日,各种手机、电脑、服务器、芯片、单片机等已经内置了随机数生成器以便满意产品的计算效率和安全需求,而安全专家也一直在试图攻破这些随机数算法寻找随机数漏洞,矛与盾总是相伴着一起发展。