为什么计算机无法产生真随机数

为什么计算机无法产生真随机数

为什么计算机无法产生真随机数?


为什么计算机只能产生伪随机数

现有计算机编程语言中产生随机数的算法都是伪随机数生成器(PRNG)。

算法是确定的

计算机的随机数是由特定算法产生的,然而这些算法是确定的,对于这些算法输入相同的参数就会输出相同的结果。

故而随机数这个结果是由输入值确定的,所以计算机产生的是伪随机数(Pseudo-random Number)。

一般使用的算法有线性同余生成器(LCG)或梅森旋转器(Mersenne Twister)。

算法输出的结果是有限的

由于计算机存在浮点数精度限制以及数字长度限制,所以输入到算法后输入的随机数也一定是精度有限的和长度有限的。

种子值决定了算法输出的结果

伪随机数生成器产生的结果只依赖于种子值和算法,所以如果种子值是可以预测的,那么产生的随机数自然也是可以预测的。


如何产生真随机数

获得一个真随机数生成器(TRNG)的关键在于如何获得一个不可预测的种子值,那么如何获得一个不可预测的种子值呢?

计算机作为一个由数字电路构成的二进制电路是高度可预测的,故而计算机本身是无法产生随机的种子值的。

想要获得不可预测的种子值只能通过随机的物理事件。

在现有的物理学体系中可以产生随机事件的方式有下面几种:

热噪声

热噪声是由导体内电子的热运动引起的随机电流或电压波动。通过测量这些波动,可以产生随机数。
例如,一个电阻器或半导体器件在工作时会产生热噪声,通过放大和量化这些信号就可以得到随机数。

光电二极管噪声

光电二极管在没有光照的情况下内部任然会有热运动和量子效应产生的噪声,通过放大和量化这些信号可以得到随机数。

量子力学中的不确定性

根据海森堡不确定性原理,量子的位置和动量不能同时被精确测量,这两个量是随机的。
量子的波函数坍塌是随机的。
光量子在通过一个半反半透镜时是反射还是透过是随机的。
光量子在通过量子分束器时通过的路径是随机的。

放射性元素衰变

放射性元素的衰变间隔是随机的。

激光相位噪声

激光产生的光具有内在的量子噪声,通过放大和量化光信号可以得到随机数。

混沌系统

作为经典物理学中的最后一朵乌云,混沌系统对于初始条件的微小变化可以导致系统一段时间后具有完全不可预测的特性,可以量化后产生随机数。混沌系统比如湍流、混沌震荡器。

使用以上随机事件进行量化后作为种子值输入算法即可获取到真随机数。

评论