图解密码技术 - 随机数
Contents
随机数的作用
随机数主要用来:
- 生成密钥:用于对称密码和消息认证码
- 生成密钥对:用于非对称密码和数字签名
- 生成初始化向量(IV):用于对称密码的CBC、CFB、OFB模式
- 生成nonce:用于防御重放攻击以及对称密码CTR模式
- 生成盐
随机数的性质
随机数的性质主要由三个方面
- 随机性:无法被攻击者看穿生成的方式。
- 不可预测性:攻击者在知道过去的伪随机数列的前提下,依然无法预测出下一个生成出来的伪随机数的性质。
- 不可重现性:无法重现和某一随即数列完全相同的数列的性质。
伪随机数生成器
通过硬件生成的随即数列,例如根据传感器收集的热量、声音的变化等事实上无法预测和重现的自然现象信息来生成,像这样的硬件设备称为随机数生成器(Random Number Generator, RNG)
。
生成随机数的软件称为伪随机数生成器(Pseudo Random Number Generator, PRNG)
。
在伪随机数生成器
中,内部状态
指的是伪随机数生成器所管理的内存中的数值
。当需要产生伪随机数时,会根据这个内部状态进行计算得到一个数值返回。
种子
是用来对伪随机数生成器的内部状态进行初始化的。
伪随机数所使用的算法:
- 杂乱的方法:不推荐,无法理解其产生方法
- 线性同余法:不推荐,不具备不可预测性
- 单向散列函数法:推荐,具有单向性,从而使其具有不可预测性
- 密码法:推荐,具有机密性,从而使其具有不可预测性
- ANSI X9.17:推荐