随机数应用
- 密钥
- 加密:不确定算法引入随机数实现
- 签名
- 认证:抗重放、假冒
- 密钥协商
安全要求:
- 随机性
- 分布均匀性:0,1频率大致相等
- 独立性:任何子序列不能有其他子序列推导
- 不可预测性
随机数生成方法
使用物理源生成非确定性随机数,真随机数生成器\((TRNG)\)或非确定性随机数生成器\((NRBG)\)
使用确定性算法生成的,成为伪随机数生成器\((PRNG)\)或者确定性随机数生成器\((DRBG)\)
\(TRNG\)
使用随机源作为输入,通常被称为熵源
熵源由物理环境抽取:时钟瞬时值、磁盘、电压等
生成随机的二进制输出
给定随机序列无法重现,没有周期
适合少量随机数生成
\(PRNG\)
采用种子作为输入,使用确定性算法生成输出位序列
种子通常由\(TRNG\)生成
算法存在反馈路径,部分结果反馈作为生成其他结果的输入
例如序列密码算法
PRNG的特点:
(1)高效的,可在短时间内生成许多随机数
(2)确定的,若已知序列的起点,则可在此后的重现给定的随机序列
(3)周期的,序列最终会重复自身
适用的场景:
(1)需要许多随机数
(2)需要在以后再次重放相同的随机序列
(3)现代PRNG的周期很长,以至于在大多数实际应用中都可以忽略不计
伪随机数生成器
线性同余生成器
\(X_{n+1} = (aX_{n} + c)modm\)
随机数序列\(\{X\}\)
评价随机数生成器的三个标准:
- 函数应是全周期的生成函数,即函数在重复前应生成从\(0\)到\(m-1\)之间的所有数
- 生成的序列看起来应是随机的
- 函数应能使用32位算术运算有效地实现
参数选取
(1)当\(a≡1 (mod4),c≡1 (mod2)\)时,随机数序列\(\{X\}\)为极大线性同余序列
(2)对于m,常用的评价标准之一是m与给定计算机可以表示的最大非负整数的值近似相等,于是对32位机,m 可以选为接近或等于\(2^{31}\)的值
优点:若乘数和模选择得当,则生成的随机数序列统计上几乎与从集合
\(\{0,1,2,…, m-1 \}\)中随机抽取的序列
缺点:
- 选定\(X_0\),后续生成序列确定,算法不随机
- 敌手根据根据线性同余算法和参数,能得到后续所有序列
- 根据序列小部分可计算算法各个参数
\(BBS(Blum Blum Shub)\)生成器
算法过程
\(p = q = 3 mod4\)
\(n = p * q\)
\(gcd(s,n) = 1\)
\(X_0 = s^2modn\)
\(X_{i} = X_{i-1}^2mosn\)
\(B_i = X_i mod 2\)
得到序列\(\{B\}\)
下一位测试
称某个伪随机位生成器可通过下一位测试,如果不存在一个多项式时间算法,对于输出序列的前k 位输入,能够以大于1/2的概率预测出第k+1位。换句话说,给定序列的前k位,没有有效的算法允许你以超过1/2的概率确定下一位是1还是0
通过下一位测试的伪随机位生成器定义为密码安全伪随机位生成器(CSPRBG)
BBS能够通过下一位测试,被称为密码安全伪随机位生成器
BBS安全性基于对n因子分解
基于分组密码生成伪随机数
分组密码算法是一个安全伪随机函数(PRF),对于任意明文分组分组密码产生一个明显随机的分组输出,密文中没有可以用来推导明文的规律性或者模式。将分组密码作为构建伪随机数发生器核心,使用分组密码构建伪随机数生成器是常见的方法。
使用分组密码构建PNRG 的两种方法:
• 分组密码的CTR 模式
• 分组密码的OFB 模式。
CTR模式
密钥K和向量V作为种子
while len(temp) < n : #需要的随机数长度V += 1 mod 2^128output_block = E(K,V)temp = temp || output_block #拼接
NIST SP 800-90A标准
OFB模式
更新向量V为前一个伪随机分组
V = temp
真随机数生成器
生成框架
(1)硬件噪声源生成一个真随机输出,将其数字化后,生成不确定的位源或真位源
(2)这个位源通过一个调节模块,减小偏差并使熵最大化
熵源
将某些真实模拟源转换为数字输入
调节
(1)偏差
TRNG生成的输出可能存在偏差,如1的个数大于0的个数,或0的个数大于1的个数。
例如,电子噪声之类的物理源可能包含叠加的规则结构、如波或其他周期现象。它们看起来是随机的,但使用统计测试可证明它们是确定的。
(2)熵率
熵率:数字噪声源(或熵源)提供熵的速率。
计算方法如下:源输出的位串提供的评估熵量除以位串的总位数(每个输出位产生的熵评估位)。这是介于0(无熵)和1(完全熵)之间的一个值
熵率是对位串的随机性或不可预测性的度量。
另一种表达方式是,对长为 n 位、最小熵为 k 的一个随机源,熵率为k/n
调节一般是使用密码算法“置乱”随机位以消除偏差并且增大熵来进行的。两种最常见的方法是使用哈希函数或分组密码
不使用哈希函数时,可以使用诸如AES之类的分组密码置乱TRNG位。使用AES时 ,一种简单的方法是获取128位分组的TRNG位,并用AES 和任意密钥加密每个分组
英特尔数字随机数生成器
DRNG硬件架构
逻辑框架
随机性检测
单比特频数检测
检测0和1个数是否接近
\(\varepsilon \sim B(1,\frac{1}{2})\)
根据中心极限定理:
\(n \rightarrow \infty\) 时 \(\frac{1}{n}sum^{n}_{k=1}\xi_{k}\) 近似服从正态分布 \(N(\mu,\frac{\sigma ^2}{n})\),均值1/2,方差1/4
\(\lim_{n \to \infty} P\{\frac{2\sum_{k=1}^{n}\xi_k - n}{\sqrt{n}} < x\}\) = \(\int_{-\infty}^{x} \frac{1}{\sqrt{2\pi}} e^{-\frac{t^2}{2}} dt\)
令 \(X = 2\varepsilon - 1, \quad S_n = X_1 + X_2 + \cdots + X_n = 2(\varepsilon_1 + \varepsilon_2 + \cdots + \varepsilon_n) - n\)
\(S_n / \sqrt{n}\) 服从标准正态分布
\(\lim_{n \to \infty} P\left(\frac{S_n}{\sqrt{n}} \leq z\right)\) = \(\Phi(z)\) = \(\int_{-\infty}^{z} \frac{1}{\sqrt{2\pi}} e^{-\frac{t^2}{2}} dt\)
\(P\left(\frac{|S_n|}{\sqrt{n}} \leq z\right) = 2\Phi(z) - 1\)
令 \(|s(obs)| = \frac{|X_1 + X_2 + \cdots + X_n|}{\sqrt{n}}\)
\(2[1 - \Phi(|s(obs)|)] = \operatorname{erfc}\left(\frac{|s(obs)|}{\sqrt{2}}\right)\)
将待检序列\(\varepsilon\)中的0和1分别转换成-1和1,计算\(𝑋_𝑖\)= 2\(\varepsilon_𝑖 − 1(1 ≤ 𝑖 ≤ 𝑛)\)
对其累加求和得\(𝑆_𝑛= \sum 𝑋_i\)
计算统计值\(𝑉 = \frac{S_n}{\sqrt{n}}\)
计算\(𝑃 − 𝑣𝑎𝑙𝑢𝑒 = 𝑒𝑟𝑓𝑐( \frac{V}{\sqrt{2}})\)
如果\(𝑃 − 𝑣𝑎𝑙𝑢𝑒 ≥ 𝛼\),则认为待检序列通过单比特频数检测。
扑克检测
子序列划分:将待检序列\(\varepsilon\) 划分为 \(N = \left\lfloor \frac{n}{m} \right\rfloor\) 个长度为 m 的非重叠子序列(多余比特舍弃),统计第\(i\) 种子序列模式出现的频数\(n_i 1 \leq i \leq 2^m )\)
计算统计值:给出统计量公式 \(V = \frac{2^m}{N} \sum_{i=1}^{2^m} n_i^2 - N\)
计算P-value:定义 \(P\text{-value} = \text{igamc}\left( \frac{2^m - 1}{2}, \frac{V}{2} \right)\)其中 \(\text{igamc}\) 为补不完全伽马函数。
检测结果判定:若 \(P\text{-value} \geq \alpha\),则认为待检序列通过扑克检测。
国密标准和国际标准
国密
GMT 0103-2021《随机数发生器总体框架》
GM/T 0105《软件随机数发生器设计指南》
GMT 0005-2021 《随机性检测技术规范》
GM/T 0062《密码产品随机数检测要求》
NIST
(1) SP 800-90A(Recommendation for Random Number Generation UsingDeterministic Random Bit Generators,2015年6月):确定性随机数生成方法DRNG
(2) SP800-90B(Recommendation for the Entropy Sources Used for RandomBit Generation,2018年 1 月):涵盖熵源 (ES)的设计原理和要求,非确定随机数生成方法NRNG
(3) SP800-90C(Recommendation for Random Bit Generator(RBG)Constructions,2016年 4 月 ) : 讨论结合90B中的熵源与90A中的DRNG的方式,生成随机数
(4) SP800-22(A Satistical Test Suie for Random and Pseudorandom NumberGenerators for CryptographicApplications,2010 年4月):随机性检测方法