一. 随机数的性质
- 随机性——不存在统计学偏差,是完全杂乱的数列
弱伪随机数 - 不可预测性——不能从过去的数列推测出下一个出现的数
强伪随机数 - 不可重现性——除非将数列本身保存下来,否则不能重现相同的数列
真随机数
反复掷骰子生成的数列具备不可重现性!
二. 伪随机数生成器PRNG
1.杂乱的方法
使用复杂算法所生成的数列大多数都会具有很短的周期。
如果程序员不能够理解算法的详细内容,那么就无法判断出所生成的随机数是否具备不可预测性。
2.线性同余法
Rn+1 = (A*Rn+C)modM
将当前的伪随机数值乘以A,再加上C,然后将除以M得到的余数作为下一个伪随机数,最近一次生成的伪随机数的值就是内部状态。
不具备不可预测性,不能用于密码技术。
3.单向散列函数法
单向散列函数的单向性是支持伪随机数生成器不可预测性的基础
4.密码法
密码的机密性是支持伪随机数生成器不可预测性的基础
5.ANSI X9.17
二. 对伪随机数生成器的攻击
1.对种子进行攻击
‘使用具备不可重现性的真随机数作为种子
2.对随机数池进行攻击
在随机数池中积累随即比特序列,需要时再选取。