随机数,顾名思义就是随机出现的数,其在密码学、统计学及其它方面都有很广阔的应用。在前端领域,我们也经常使用随机数来防止缓存。那么随机数是如何生成的,另外经常听到的伪随机,这些是什么意思,今天我们就来学习一下。
随机数的特点
在密码学中,随机数的随机性检验分为三个标准:
- 统计学伪随机性
即在给定的数列中,每个数字出现的数量大致相等。就如同掷骰子一样,掷的次数足够多,1 - 6 每个数字出现的次数基本是相等的。 - 密码学安全伪随机
定义为,给定随机样本的一部分和随机算法,不能有效地演算出随机样本的剩余部分。 - 真随机性
定义随机样本不可重现。为了产生真随机性,需要借助物理现象获取信息,一般认为如环境温度、声音、辐射变化等,这些是随机的,根据这些物理信息生成的数列,一般认为不可重现。
真随机数一般很难获得,在设计密码算法时,通常使用的随机数列,都是伪随机数列。另外如果一个随机数算法生成数列的周期足够大,可以通过各种随机性检验,也认为这种数是伪随机数。
下面就介绍两种伪随机数生成算法
线性同余生成器
线性同余生成器是最广泛使用的伪随机数生成器。它的算法非常简单:
X n + 1 = ( a X n + c ) m o d m X_{n+1} = (aX_n + c) \bmod m Xn+1=(aXn+c)modm
其中 m 为模数,m > 0;
a 为乘数,0 ≤ a < m;
c 为增量,0 ≤ c < m;
X