8.随机位生成和流密码
- **简要介绍伪随机数生成器的要求:**随机性、不可预测性,种子要求随机或伪随机。
- 伪随机生成算法:线性同余生成器、BBS生成器。
- 解释如何用分组密码构建伪随机数生成器:使用CTR和OFB
- 简要介绍流密码和RC4:
- 流密码:
通过使用密钥和伪随机数生成器(PRNG)产生一串比特流作为密钥流,然后将明文和密钥流进行异或运算,得到密文流。 - RC4:(以密钥作为输入种子的伪随机数生成器)
- 产生密钥流。
- 明文和密钥流异或产生密文。
- 流密码:
8.1 伪随机数生成
随机位生成是指生成具有随机性的随机位流。
-
随机位生成策略:(核心:对称分组密码)
- 伪随机数生成器(PRNG):利用算法确定性地计算产生随机位。
- 真随机数生成器(TRNG):使用某种物理源生成非确定性的随机位。
- 伪随机函数(PRF):用于生成固定长度的伪随机串。
-
随机数要求:
- 随机性:(统计意义下)
- 分布均匀性
- 独立性
- 不可预测性:随机数中的任何一部分都不能通过预测得出正确结果。
- 随机性:(统计意义下)
-
伪随机生成器的要求:
- 随机性
- 均匀性:在生成随机或伪随机位序列的任何位置,0或1出现的次数大致相等。
- 可伸缩性:若一个序列是随机的,那么其子序列也应是随机的
- 一致性:对于所有初始值(种子),生成器的性质必须是一致性的。
- 不可预测性
- 正向不可预测性:若不知道种子,无法预测序列下一位。
- 反向不可预测性:由随机数序列无法推算到种子值。
- 种子的要求:种子值必须是安全的并且不可预测,一般而言,种子本身必须是随机数或伪随机数。
- 随机性
8.2 伪随机数生成器
8.2.1 线性同余生成器
推导公式:
X
n
+
1
=
(
a
X
n
+
c
)
m
o
d
m
X_{n+1} = (aX_{n}+c)\mod \ m
Xn+1=(aXn+c)mod m
公式变量解释:
- m m m : 模(即周期) ( m > 0 m > 0 m>0)
- a a a : 乘数 ( 0 < a < m 0 < a < m 0<a<m)
- c c c : 增量 ( 0 ≤ c < m 0 \le c < m 0≤c<m)
- X 0 X_{0} X0 : 初始值或种子 ( 0 0 0 <= X 0 X_{0} X0 < m m m)
特点:
- 该算法本身不随机。
- 若敌手知道算法,则可以根据部分序列值推出各个参数。
8.2.2 BBS生成器
算法过程:
- 选择两个大素数 p p p 和 q q q ,满足 p ≡ q ≡ 3 ( m o d 4 ) p \equiv q \equiv 3(\mod 4) p≡q≡3(mod4).
- 令 n = p ∗ q n = p*q n=p∗q, 选择一个随机数 s s s , 且 s s s 与 n n n 互素,按下列算法生成序列:
特点:
- 安全性依据:基于对大整数n的因子分解困难问题。
- BBS被称为密码安全伪随机位生成器 (CSPRBG):能够通过下一位测试
- 下一位测试:不存在能以大于二分之一的概率预测下一位的多项式时间算法。
8.3 流密码
采用的是伪随机数流密钥,一次一位。
参数:
- K K K:输入密钥
- f f f : 转换函数
- z i z_{i} zi : 输出的密钥流(加密位)
- g g g : 输出函数
- Ⅳ Ⅳ Ⅳ :初始向量(可以公布)
特点:
- 适合加密大量的的快速流数据。
- 适合在受限设备使用。(能力有限的设备)
要求:
- 加密序列周期要长。
- 密钥流接近随机流的性质。
- 生成器的输出由输入密钥K控制。
8.3.1 RC4
面向字节运算的变长密钥流密码。
算法流程:
- 初始化状态向量S:状态向量S是一个有256字节的数组。
- 密钥流生成:利用状态向量S不断生成一个字节密钥流k。(加解密)
- 初始化状态向量S:状态向量S是一个有256字节的数组。
- 密钥流生成:利用状态向量S不断生成一个字节密钥流k。(加解密)
[外链图片转存中…(img-4xjsBGTU-1699507136355)]