如何生成随机数字
通常有三个方式去生成随机数字:软件生成、物理生成还有量子不确定生成法。
软件方法 最常见的生成随机数字的方法是使用计算机运行确定的算法来生成。这种确定的算法不能生成真正的随机数字(生成的最高质量数字也是可以被预测且可被猜出的,最为致命的是他们的算法都有规律性的特征)。因此,软件数字发生器通常被叫做伪随机或者准随机发生器。
硬件方法 第二种生成随机数字的方法是利用介于软件随机数字发生器和基于量子的硬件发生器的物理环境。例如,Linux操作系统拥有一个随机数字发生器,可以捕捉键盘、鼠标、中断信号和硬盘驱动器的动作,并由此生成信号作为随机数字的来源。Microsoft's® CryptGenRandom 功能(微软 CryptoAPI 的一部分)也是类似的应用,例如,利用鼠标和键盘实时输入,在各种系统数据和用户数据中加入已经存储的随机数字。 这些物理行为生成方式看起来是随机的,其实他们的随机性是无法证明的,如果取样的物理动作是静止的或者是重复的,这样就可能生成一个低质量的随机数字(或者不生成随机数字)。所以应用这种物理方法会存在几个潜在的安全隐患。例如,在如浏览器等这样的网络应用中,客户端和服务器之间传送的请求信息可以很有效地把客户端的鼠标的位置和动作次序显示出来。与之类似,客户可以使用 "snap-to" 选项把鼠标指示器中心停在将要按的按钮的中心,这样也可能预计即将发生的点击动作。结果是,这种环境中由鼠标运动中得出的随机数字源的质量远远低于 RNG 设计者的预期。
量子机制法 唯一的真正的随机数字发生器是在亚原子级别观察量子行为。这是因为随机性和亚原子微粒有与生俱来的共性。一个基于量子的硬件发生器非常实用,下面包括实例:
1) 辐射衰变期粒子发射之间的时间间隔 这种方式每秒只产生 30 字节,还要求有很笨重(危险的?)的一堆硬件。
2) 热噪音通过一个半导体二极管或者电阻
这种方法常用于附加的 PC 硬件中
3) 在一特定时间段对电容'充电
4) 自由运行震荡器的频率不稳定性
该方法是威盛 PadLock RNG 方案的基础。与基于电阻器的方案相比,该方案有很大不同,不过最终随机性的来源是相同的。
这些生成源已经在一些商业应用中的附加随机数字发生器设备中体现,他们中还没有任何一项被广泛达成或者使用。不过已经出现了一些外设,比如 PCI 卡和串口设备,这些商用硬件发生器非常昂贵并且笨重庞大。 |