计算机如何生成随机数? 什么是种子?
根据随机性的来源和原理,随机数主要分为伪随机数(Pseudo Random Numbers, PRNG) 和真随机数(True Random Numbers, TRNG) 两大类,伪随机数是计算机最常用的随机数类型。
1. 伪随机数(Pseudo Random Numbers, PRNG)
伪随机数不是“真正的随机数”,其本质是通过 “确定性算法” 生成的、看似随机的数列—— 通过一个初始种子 (seed) 和确定性的算法(比如线性同余、Mersenne Twister、Xorshift 等)生成一个数列,只要初始条件(“种子”)固定,生成的数列就完全固定,不具备真正的不确定性。
-
种子: 随机数列的 “起点”,通常是一个整数。如果种子相同,无论何时、在何种设备上运行,生成的随机数序列都会完全一致
-
算法: 对种子进行数学变换(如移位、取模、乘法逆元等),生成下一个 “随机数”,同时将该数作为下一次计算的 “新种子”,循环往复生成数列
伪随机数具有可预测性和周期性,为了让伪随机数 “更随机”,关键是让种子具备不确定性,即避免使用固定种子,而是从系统中提取 “动态变量” 作为种子,例如使用
当前系统时间做种子(精确到毫秒 / 微秒,如1696412345678);
2. 真随机数(True Random Numbers, TRNG)
真随机数的核心是从物理世界的 “天然不确定性” 中提取随机信息,其生成过程不依赖算法,也无法被预测或复现,具备真正的随机性。
真随机数的核心原理是提取物理世界的 “噪声”,通过硬件传感器捕捉这些噪声,再转化为二进制的随机数,如:电子噪声,环境噪声,量子现象等。