两个要求:随机性和不可预测性
真随机数生成器(TRNG)非确定性随机为生成器(NRBG)
使用不确定的物理源,生成非确定的随机位
过程:真随机源——转换为二元数——随机比特流TRNG
物理随机性原采样——噪声处理——熵池收集和混合——随机数生成
伪随机数生成器(PRNG)确定性随机为生成器(DRBG)
使用确定性的计算产生随机位。
PRNG取一个固定值(种子)作为输入,并用一个确定性算法生成输出位序列。
种子必须不可预测,一般由TRNG生成。
若应用为流密码,TRNG不实用
若只需生成有限数量的随机数,通常也希望使用TRNG做种子,使用PRF【(伪随机数生成函数):与PRNG唯一区别是,生成随机数的长度固定】输出。
算法分为两类:
- 专用算法:为生成伪随机位流而专门设计。
- 基于现有密码算法的算法:密码算法会随机化输入数据。
- 对称分组密码
- 哈希函数
- 消息认证码
线性同余生成器(LCG)
性能和随机性质取决于选择的参数(a、c、m)以及初始种子值
BBS生成器
利用两个大素数的乘积作为模数,然后选择一个初始值(种子)作为计算起点,然后迭代的计算下一个伪随机数。
使用分组密码生成伪随机数
eg:AES-128,种子由一个128位密钥和一个128位V值构成
在CTR模式下,V值每加密一次就增一
在OFB模式下,V值更新为前一个PRNG的值
CTR模式和OFB模式都属于流密码。
OFB模式是将加密的输出反馈到输入,而CTR模式则是将计数器的值用作输入。
参考: