密码学安全伪随机数生成器
编辑密码安全随机数生成器(也称为密码安全伪随机数生成器 (CSPRNG))是适用于密码学的伪随机数生成器。 密码学的许多领域都需要这样的随机数,例如:
- 密钥生成
- nonces 使用一次(随机字节序列)
- 流加密
- 盐
这些数字的随机性的质量要求是非常不同的。 对于nonces,保证随机实验中数字的xxx性即可; 对于创建xxx密钥甚至一次性一密本,对数字的要求高得不成比例。 理论上,一次性一密本只有由自然随机数创建才能保持牢不可破。
原则上,CSPRNG 需要与普通伪随机数生成器相同的要求,但必须满足一些额外的安全条件。 一方面,它生成的数字序列不能与真正的随机数序列区分开来。 另一方面,即使已知精确的操作模式,也不能从发生器的输出中推断出其内部状态。
BSI 在技术指南 BSI TR-03116 中指定了用于联邦政府项目的随机数生成器的要求,并将它们划分为功能类别。 本质上,物理实数(类 PTG.2、PTG.3)和非物理实数随机数生成器(类 NTG.1)与确定性或伪随机数生成器(类 DRG.2、DRG.3)不同。 PTG.3 和 NTG.1 类使用 DRG.3 类的确定性随机数生成器处理获得的熵,因此被视为混合随机数生成器。 自 2022 年以来就不再考虑以前的 PTG.1 和 DRG.1 类。
非确定性 CSRNG
编辑理想情况下,随机数的生成由不确定的熵源提供。 例如,这可以是基于硬件的随机数生成器或混合生成器。 非确定性生成器应该用于密码学应用程序,因为只有使用这些才能保证它们不可复制或不可预测。
确定性CS(P)RNG
编辑通常,使用非确定性生成器是不可能的或太慢了。 密码安全的伪随机数生成器基于密码原语(例如块或流加密)或安全哈希函数,或者基于数学上的难题。
基于密码原语的生成器
加密或散列函数可以在所谓的计数器或输出反馈模式下运行。 这里重要的是,不可能找出生成器的初始状态。 找出生成器的内部状态就等于破解了加密本身。
此处生成的数字在密码学上是安全的并且是伪随机的(只要所使用的函数保证了这一点)。 基于久经考验的功能的生成器,例如 B. AES 或 SHA-1,通过所有常见的随机性统计测试。
基于数论问题的生成器
Blum-Blum Shub 生成器的安全性依赖于以下假设:整数的质因数分解是一个无法在多项式时间内解决的难题。
随机性检验
编辑FIPS 140
该标准中列出了 CSPRNG 的测试套件。 为此,对 20000 个输出位进行各种统计测试:
- 单比特测试
- 扑克测试
- 运行测试
- 长时间运行测试
Maurer 的通用测试
该测试背后的想法是,不可能显着压缩随机数序列。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/342198/