伪随机数生成器介绍
概述
伪随机数生成器(pseudorandom number generator,PRNG),又称为确定性随机位生成器(deterministic random bit generator,DRBG),是用来生成接近于绝对随机数序列的数字序列的算法。一般来说,PRNG 会依赖于一个初始值,也称为种子,来生成对应的伪随机数序列。只要种子确定了,PRNG 所生成的随机数就是完全确定的,因此其生成的随机数序列并不是真正随机的。
就目前而言,PRNG 在众多应用都发挥着重要的作用,比如模拟(蒙特卡洛方法),电子竞技,密码应用。
随机性的严格性
随机性:随机数应该不存在统计学偏差,是完全杂乱的数列。
不可预测性:不能从过去的序列推测出下一个出现的数。
不可重现性:除非数列保存下来,否则不能重现相同的数列。
这三个性质的严格性依次递增。
一般来说,随机数可以分为三类
弱伪随机数
✅
❌
❌
强伪随机数
✅
✅
❌
真随机数
✅
✅
✅
一般来说,密码学中使用的随机数是第二种。
周期
正如我们之前所说,一旦 PRNG 所依赖的种子确定了,那么 PRNG 生成的随机数序列基本也就确定了。这里定义 PRNG 的周期如下:对于一个 PRNG 的所有可能起始状态,不重复序列的最长长度。显然,对于一个 PRNG 来说,其周期不会大于其所有可能的状态。但是,需要注意的是,并不是当我们遇到重复的输出时,就可以认为是 PRNG 的周期,因为 PRNG 的状态一般都是大于输出的位数的。
评价标准
参见维基百科,https://en.wikipedia.org/wiki/Pseudorandom_number_generator。
分类
目前通用的伪随机数生成器主要有
线性同余生成器,LCG
线性回归发生器
Linear feedback shift register,LFSR,线性反馈移位寄存器
问题
通常来说,伪随机数生成器可能会有以下问题
在某些种子的情况下,其生成的随机数序列的周期会比较小。
生成大数时,分配的不均匀。
连续值之间关联密切,知道后续值,可以知道之前的值。
输出序列的值的大小很不均匀。
参考
https://en.wikipedia.org/wiki/Pseudorandom_number_generator
Last updated