伪随机数的产生和流密码
随机数产生的原则
随机数的使用
- 密钥分发和相互认证方案
- 会话密钥的产生
- RSA公钥加密算法中密钥的产生
- 对称流密码的位流产生
对于随机数的要求
-
随机性
- 分布均匀性
0 0 0和 1 1 1出现的概率大致相等
- 独立性
任何子序列不能由其他序列推导
-
不可预测性
敌手不能从先前的随机数推导出后面的随机数
TRNG,PRNG,PRF
确定性算法能够产生经受得住随机性检测的序列,序列并非统计随机,称之为伪随机数。
TRNG 真随机数产生器
将随机的源作为输入,称为熵源
PRNG 伪随机数产生器
将种子作为输入,使用确定算法产生位输出序列,输出仅和种子有关
用于产生不限长位流的算法
PRF 伪随机函数
产生固定长度的伪随机串
对PRNG的要求
基本要求:不知道种子的敌手不能预测伪随机串
特定要求:
-
随机性
- 均匀性
0和1出现的量大约相等
- 可伸缩性
任何序列的子序列也可通过随机性测试
- 一致性
对于任何种子,发生器的行为具有一致性
-
不可预测性
- 前向不可预测性
已知以前位数不可预知下一位
- 后项不可预测性
从任何随机序列都不能推断出种子值
-
种子的要求
- 种子本身必须为随机数或伪随机数,例如由TRNG产生
算法设计
- 特意构造的伪随机数算法
- 基于现有密码算法的算法
伪随机数发生器
线性同余发生器
X n + 1 = a X 0 + c m o d m X_{n+1}=aX_{0}+c\mod m Xn+1=aX0+cmodm
参数选取
- m m m取很大的值,例如 2 32 − 1 2^{32}-1 232