伪随机数发生器

本文包括:随机数的性质,具体的伪随机数发生器,攻击思路。

伪随机数发生器包括:线性同余法,BBS,分组密码形式,ANIS X.917,单项散列函数,密码法。

尝试新编辑格式!
.

性质

随机性
  1. 可伸缩性:任何子序列都符合随机性
  2. 统计分布均匀:0 1 分布很好地保持在各占50%。
  3. 独立性:任何子序列不能通过其他子序列推导出来。
  4. 一致性:输入任何种子都符合随机性
不可预测性

在攻击者知道过去的伪随机数列的情况下,仍然无法预测下一个伪随机数。

  1. 向后不可预测性
  2. 向前不可预测性
不可重现性

真随机数(如白噪声,热辐射,分子无规律运动 等)。

投骰子是真随机数。

伪随机数发生器——PRNG
  1. 伪随机比特流:生产不限长的位流,应用于流密码。
  2. 伪随机函数(PRF):生产固定长度的位串,每轮输入包括种子+上下文。应用于对称密码 等等。

二者除了位的数量之外,并无区别

真随机数发生器——TRNG

.
.

具体的伪随机数发生器

1.线性同余法

m:模 , a:乘数 , c:增量 , X0:种子

Xn+1 =(aXn+c)mod m

特点:

只有随机性,不具备不可预测性,不能用于密码技术
很多伪随机数库都是用线性同余法编写的,如C语言的rand,JAVA的java.util.Random类等,这些都不能用于密码技术

三个标准:

1.全周期,即 t=m-1
2.越随机越好
3.可以在32位运算器方便运算

常用:

取c=0;m=231-1.
Xn+1 =(aXn)mod(231-1)
虽然a的取值有很多很多,但其实满足3个标准的并不多。

攻击:

1.如果其他人知道了参数a,c,m,那么它只需知道一个随机数,就可以推得后续所有数列
2.如果仅知道是线性同余法,那么只需知道连续4个随机数,也可以推得后续数列

改进:

1.每隔N个数,就重新输入种子(比如对时钟取模作为种子)
2.增加一步,将随机数加时钟值再取模
.

.

2.BBS发生器

算法:

选择两个大素数p, q, 满足 p ≡ q ≡ 3(mod 4)
设n=pq, 找一个随机数s, s和n互素,即gcd(s,n)=1
令 X0 = s2 mod n

for i=1 to ∞
Xi = (Xi-12mod n
Bi = Xi mod 2

S叫种子

特点:

随机性+不可预测性
性能很好!

贴个例子(抄来的):(n=383*503,s=101355)
2
.

3.分组密码形式

利用OFB和CTR模式思想的伪随机数发生器。
在这里插入图片描述

不同点:

CTR模式:每次V++
OFB模式:本轮输出作为下轮的V

相同点:

种子 = K + V
(对于ASE的话,种子 = 128bit密钥 + 128bit的V)

.
.

4. ANIS X.917

史上最强?

  • 应用在金融和PGP等。

构成:

输入:64位的时间值 + 64位种子(任意初始值)(二者都必需不断更新)
密钥:三个3DES模块,用同一个56bit密钥
输出:64位随机数 + 64位种子

过程: 图背下来
(其中EDE([K1,K2],X)代表两个密钥的3DES。)
在这里插入图片描述

加密钥(图):在这里插入图片描述

思路:

用三次3DES保证了随机数
即使他人知道了输出RI,也无法推出其他参数。
换句话说:密钥保护了内部状态。

.

5. 单项散列函数

具备 随机性 + 不可预测性

散列的单向性是不可预测性的保障。
在这里插入图片描述

.

6. 密码法

在这里插入图片描述
思路同于单项散列函数。
密钥是不可预测性的保障。

.
.
.

攻击思路

  1. 对种子攻击

一般 种子 由真随机数发生器生成。

  1. 对随机数池攻击

真随机数一般不会等使用时才当场生成,
而是提前生成一些,储备在名为随机数池的文件中。
如果随机数池遭到攻击,那么伪随机数都可能被预测,
虽然随机数池的数据并没有实际意义,但是我们却必须保护它。

.
.
.
.
.
.
.

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值