计算机是严格确定的机器,却要产生“随机”数字,它到底怎么做到的?答案分两种:伪随机数生成器(PRNG)和真随机数生成器(TRNG)。这篇文章讲随机数生成器的原理,以及它们各自用在哪里。

伪随机数:确定算法 + 种子

伪随机数生成器用一个算法从一个“种子”数字出发,生成一串看似随机的数字。只要种子相同,生成的序列就完全相同。所以它是“可复现的随机”:对游戏和模拟够用,但严格说不是真随机。常见的算法(如梅森旋转)周期很长,生成的序列在统计上接近均匀。

种子从哪里来

伪随机数的“随机性”很大程度来自种子:如果每次用同一个种子,生成的序列就一样。程序通常用当前时间、进程 ID、系统熵等作为种子,让每次运行的结果不同。这也是为什么有些游戏“读档后开箱结果不变”——种子被固定了。

真随机数:从物理世界取随机

真随机数生成器从物理过程获取随机性:电子噪声、放射性衰变、热噪声、用户鼠标移动。这些过程本质不可预测,产生的是真随机。操作系统和密码学应用会收集系统熵(鼠标、键盘、磁盘延迟)来生成加密级随机数,用于密钥、验证码和加密。

为什么密码学要“真随机”

密码安全依赖“不可预测”:如果密钥是用可预测的伪随机数生成的,攻击者可以推测出来。所以加密、令牌、安全验证码必须用加密级随机源,而不是普通游戏的随机数。用本站的随机密码生成器生成日常密码没问题,但系统级的密钥生成必须依赖系统提供的安全随机源。

理解随机数,选对工具

随机数没有“绝对好”,只有“是否适合场景”:抽奖游戏用伪随机足够,密码安全必须用加密级随机,科学模拟要可复现的伪随机。理解了 PRNG 和 TRNG 的区别,你就能在“够用”和“安全”之间做出正确选择,也不会再被“绝对随机”的宣传误导。