随机性在现代计算机科学中是一个非常重要的概念,因为它涉及许多加密、安全、模拟等方面。在计算机中,随机数是一组数字或符号,被认为是没有任何模式或规律性的。所以,计算机生成随机数的能力至关重要。本文将探讨计算机生成随机数的奥秘,从硬件到算法,一步步深入了解。
硬件生成随机数
计算机的硬件部分是生成随机数的第一个因素。利用物理过程和硬件设备的特性,计算机可以生成真正的随机数,也就是真正的随机性。这些硬件设备可以在计算机系统中集成或做为一个独立的设备来使用。
在计算机中,如下两个硬件设备可以产生真正的随机数:
1. 基于热噪声的源:利用电子设备的自然热噪声来产生随机数。这个设备是被称作真随机数生成器(TRNG)。
2. 基于量子力学的源: 利用量子力学的性质来产生的随机数,这个种类的设备可称作量子随机数生成器(QRNG)。
TRNG设备利用电子随机运动来产生随机数。电子随机运动不受任何外部环境影响,因为产生在电阻器和半导体材料等随机抗阻件物质中。设备检测到电子信号的波动,将其转换为数字随机数。这个数字的真实性非常高,因此被广泛应用于密码学和金融中的安全领域。
QRNG则使一些光子的行为,通过光子相对位置的变化来创造随机数。光子被用来代表二进制位,这是因为一个 光子可以随意被分为两种状态:竖极性和横极性,代表数字 0 和数字 1。量子随机数生成器是最安全的,因为它是利用量子态的不可克隆定理,提供了真正的随机性。
算法生成随机数
硬件设备是真正随机数的来源。但因为它们可能成本较高,而且不便于使用和维护,大多数情况下算法是更常见的随机数生成方法。生成伪随机数就是计算机根据一些规则和算法来产生的。虽然这些数字看起来像是随机的,但是它们是根据某个海报产生的算法生成的。所以,算法生成的随机数,也称作伪随机数。
当时间和成本因素限制硬件使用时,计算机既可以利用硬件随机生成器来提供秘密密钥,也可以使用 PRNG(伪随机数生成器) 。PRNG类似于 TRNG,他们借鉴了 TRNG 的随机性。但这些方法不基于物理过程,而是需要一个种子,种子是随机数生成器所有的输出值中的一项,从而扭曲随机性,详见下文。PRNG 设备可让您自定义一些因素,使其根据计算机的伪随机性和一个“种子”值生成随机数。
PRNG算法在技术上不是真正的随机,因为他们基于种子值执行相同的步骤来生成相同的随机数序列。不过,如果种子值是随机的,那么我们称他们为“随机”。衡量 PRNG 的质量的一个重要的因素是产生的数到底有多少种可能性。
PRNG算法最常见的就是线性同余方法。它的公式如下:
Xn+1 = (a*Xn + c ) % m
此式中 n 是产出的随机数的下标,Xn 是上一产生的随机数,而a、c、m 都是事先定义好的常数。X0 的取值是种子,只有当 X0, a, c, m 确定时产生相同的随机数系列。
PRNG 的算法最初种子是提供一些数值,这些数字通常是从随机硬件生成器获得的,或者全球唯一甚至人类难以猜测的数值(比如说当前时间戳)。在现代计算机中,通常使用的 PRNG 算法有 Mersenne Twister、Xorshift、Congruential 等。
总结:
计算机生成随机数作为信息安全的一部分,是一个非常重要的技术。计算机硬件设备,如 TRNG 和 QRNG,可以生成真正的随机数。而基于算法的 PRNG 则是大多数情况下使用的生成方式。PRNG 提供了大量随机值,使用种子来确定某个随机性,但不同的随机数生成器提供的随机数字质量不同。选择符合自己需要的随机数生成器,在持续的质量监测和改进后,是非常必要和重要的。