随机数可用于多种目的,例如生成数据加密密钥、模拟和建模复杂现象以及从更大的数据集中选择随机样本。它们在美学上也被使用过,例如在文学和音乐中,当然在游戏和赌博中也很流行。讨论单个随机数时,该数值是从一组可能的值中抽取出来的,每个值都是等可能的;讨论随机数序列时,每个被绘制的数字必须在统计上独立于其他数字。
随着计算机的发展,程序员意识到需要在程序中加入随机性,但让计算机真正'偶然'行事却相当困难。计算机盲目地听从指令,因此是完全可以预测的。使用计算机生成随机数的主要方法有两种:伪随机数生成器(PRNGs)和真随机数生成器(TRNGs)。这两种方法有不同的特点,各有利弊。
伪随机数生成器 (PRNGs)
正如'伪随机数'这个词所暗示的那样,伪随机数并不是你所期望的那种随机数字,至少在你用来掷骰子或买彩票的时候不是这样。从本质上说,PRNGs 是一种算法,它使用数学公式或简单的预计算表来生成随机出现的数字序列。线性同余法是 PRNG 的一个很好的例子。对伪随机数理论进行了大量的研究,而生成伪随机数的现代算法非常好,以至于这些数字看起来完全是随机的。
如果将计算机生成的随机数与骰子掷出的点数进行比较,就很容易理解 PRNGs 和 TRNGs 之间的基本区别。因为 PRNGs 通过使用数学公式或预先计算的列表生成随机数,所以使用一个对应于某人多次滚动骰子并写下结果。每当你想要一个骰子,你就会得到名单上的下一个。实际上,这些数字看起来是随机的,但实际上它们是预先确定的。TRNGs 的工作原理是让一台电脑实际滚动骰子——或者,更常见的是,使用一些比骰子更容易连接到电脑的物理现象。
PRNG 效率高,能在短时间内生成大量数字,且具有确定性,这意味着如果序列中的起始点已知,一个给定的数字序列可以在稍后的日期被复制。PRNG 通常也是周期性的,这意味着序列最终会自己重复。虽然周期性从来都不是一个理想的特征,但现代 PRNG 的周期太长,以至于在大多数实际情况下都可以忽略它。
这些特性使 PRNG 适用于需要许多数字的应用程序,并且在这些应用程序中,相同的序列可以很容易地重播。这种应用程序的常见示例是模拟和建模应用程序。PRNG 不适用于那些数据不可预测的应用程序,比如数据加密和赌博。
值得注意的是,尽管好的 PRNG 算法存在,但它们并不总是被使用,而且很容易出现令人讨厌的意外情况。以 Web 语言 PHP 为例,在 GNU/Linux 下使用通常表现良好,但在 Microsoft Windows 下可能不符合某些标准(如 2008 年可视化分析的要求)。2002 年曾有研究人员指出,MacOS 上的 PRNG 精度不足,难以用于病毒感染的科学模拟。最重要的是,即使 PRNG 能够满足应用程序的需求,您仍然需要小心使用哪一种。
真随机数生成器 (TRNGs)
与 PRNGs 相比,TRNGs 从物理现象中提取随机性并将其引入计算机。你可以把它想象成一个连接到电脑上的骰子,但通常人们使用的是一种物理现象,它比连接电脑更容易。物理现象可简单至鼠标移动轨迹或按键间隔时间。然而,在实践中,您必须小心选择哪个源。
有许多其他的方法可以让你的计算机具有真正的随机性。放射性物质是一种很好的物理现象,辐射源衰变的时间点是完全不可预测的,它们很容易被检测出来并输入计算机,避免了操作系统中的任何缓冲机制。瑞士 Fourmilab 的 HotBits 服务是该技术的典型示例。大气噪声也是常用源,普通收音机即可接收,RANDOM.ORG 即采用此法。也可利用环境背景噪音,但需注意规律性,例如电脑风扇的旋转噪音可能缺乏足够的随机性。
只要小心,可能性是无限的。视觉效果突出的方法是 LavaRand 生成器,通过拍摄硅图像和熔岩灯画面获取随机数。LavaRand 已停用,但其开发者仍在 LavaRnd 网站继续相关工作(不再依赖熔岩灯)。Java EntropyPool 可从多种来源(如 HotBits)收集随机比特,并通过其 Web 服务器提供访问。
无论何种物理现象,核心在于识别数据中不可预测的微小波动。例如,HotBits 利用放射性衰变时间的微小差异,RANDOM.ORG 则利用大气噪声振幅的微小变化。
TRNG 特点与 PRNG 显著不同。首先效率较低,生成耗时较长。其次具有不确定性,给定序列不可复现(虽偶有巧合),且无周期性。
PRNG 与 TRNG 对比
下表总结了两种生成器的特性对比。
| 特性 | Pseudo-Random Number Generators | True Random Number Generators |
|---|---|---|
| Efficiency | Excellent | Poor |
| Determinism | Deterministic | Nondeterministic |
| Periodicity | Periodic | Aperiodic |
这些特性使 TRNGs 适合于 PRNGs 不适合的应用程序集,例如数据加密、游戏和赌博。下表总结了哪种类型的生成器最适合哪些应用程序:

