目录
一、随机数的应用
二、随机数的性质
三、伪随机数生成器
1.伪随机数生成器的结构
1)伪随机数生成器的内部状态
2)伪随机数生成器的种子
四、对伪随机数生成器的攻击
1)生成密钥
对称密码和消息认证码
2)生成密钥对
公钥密码和数字签名
3)生成初始化向量
分组密码的模式(CBC、CFB、OFB)
4)生成nonce
防御重放攻击和分组密码的CTR模式
5)生成salt(盐)
基于口令的密码(PBE)
1)随机性
不存在统计学偏差,完全杂乱的数列
2)不可预测性
不能从过去的数列中推测出下一个要出现的数
3)不可重现性
不能出现重复数列(除非保存下来)
由此可分为三类随机数:
1)弱伪随机数:只具有随机性,不具有不可预测性和不可重现性
2)强伪随机数:具有随机性和不可预测性,但不具有不可重现性
3)真随机数:具有随机性、不可预测性和不可重现性
注:软件只能生成伪随机数,是因为运行软件的计算机自身仅具备有限的内部状态,在内部条件相同时,软件只能生成相同的数;我们将首次出现到出现之前的数列长度称为周期,凡是具有周期的数列都不具备不可重现性;想要生成真随机数,就要从不可重现的事物中获取(声音、温度等)
通过硬件生成的数列(根据温度、声音的变化)的设备称为随机数生成器(RNG)
使用软件生成的数列称为伪随机数生成器(PRNG)
指生成器中管理的内存中的数值,根据内部状态计算随机数的方法和改变内部状态的方法组合后,就是伪随机数生成器的算法
由于内部状态决定了下一个生成的伪随机数,因此内部状态不能被攻击者知道
用于对内部状态进行初始化,种子本身是一串随机的比特序列,根据种子可算出伪随机数
种子需要保密
1)对种子进行攻击
当种子被攻击后,攻击者就可以知道这给伪随机数生成器生成的全部伪随机数列;为了防止被攻击,使用不可重现性的真随机数作为种子
2)对随机数池进行攻击
一般使用随机数池的文件积累随机比特数列,当需要使用时,从池中取出所需长度的比特序列来使用
随机数池被攻击后,伪随机数的种子会被预测出来