0Pricing
Cryptology Academy · 课时

真随机性与伪随机性

区分硬件熵源和软件 PRNG

真随机性与伪随机性 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

随机性为何重要

密码学安全性从根本上依赖不可预测性。如果攻击者能够预测您的密钥、IV 或 nonce——哪怕只能部分预测——整个密码学系统都可能崩溃。弱随机性已经导致现实世界中多起灾难性的安全漏洞。

真随机数生成器(TRNG)

TRNG 从物理熵中提取随机性:电阻器中的热噪声、反向偏置二极管中的散粒噪声、放射性衰变、鼠标移动、击键时间以及磁盘寻道延迟。这些都是真实不可预测的物理现象。

熵池

OS 维护一个熵池——其中收集了物理噪声样本,并对这些样本进行 XOR 运算和哈希处理。Linux 的 /dev/random 和 /dev/urandom 从该熵池中提取数据。系统运行期间,熵池会持续得到补充。

伪随机数生成器(PRNG)

PRNG(也称为确定性 RNG / DRNG)使用确定性算法,将一个较短的种子扩展为一长串伪随机字节。给定相同的种子,它会产生相同的输出。除非使用真正的熵进行播种,否则不适合用于密码学。

PRNG 与 CSPRNG

PRNG 可能存在可检测的统计偏差,或者可以根据观测到的输出预测其结果。密码学安全伪随机数生成器(CSPRNG)增加了以下特性:(1) 前向安全性(无法根据当前状态预测过去的输出);(2) 回溯抵抗性(无法根据过去的输出预测未来的输出)。

区分测试

如果不存在任何多项式时间算法,能够以显著高于 1/2 的概率将其输出与真正的随机序列区分开来,那么 PRNG 在密码学上就是安全的。这就是下一比特不可预测性标准。

不同平台上的熵源

Linux:/dev/urandom(完成初始播种后不会阻塞)、getrandom() 系统调用。Windows:CryptGenRandom()、BCryptGenRandom()。macOS/iOS:SecRandomCopyBytes()。浏览器:window.crypto.getRandomValues()。所有这些来源都会汇入 OS 熵池。

统计测试

NIST SP 800-22 提供了 15 项随机性统计测试:频数、块内频数、游程、Maurer 通用测试、线性复杂度等。通过统计测试并不能证明密码学安全性,只能说明不存在明显偏差。

种子质量

使用弱熵播种的 CSPRNG(例如使用当前时间的秒数)是可以预测的。知道种子的攻击者可以重建整个输出。始终使用 OS 熵进行播种:在 Python 中使用 os.urandom(32),不要使用 time.time() 或 random.random()。

硬件 RNG

Intel RDRAND(x86 指令)从芯片上的 TRNG 返回硬件生成的随机字节。AMD 和 ARM 也存在等效的硬件。Linux 会将 RDRAND 混入 /dev/urandom。由于信任方面的考虑,它被用作补充熵源,而不是唯一来源。

量子随机数生成器

QRNG 利用量子力学现象(光子到达时间、真空涨落)生成可证明随机的输出。商用 QRNG(ID Quantique、Quantis)用于高安全性应用。对于一般用途而言,成本过高。

快速检查

CSPRNG 与普通 PRNG 的区别性特征是什么?

总结

TRNG 提取物理熵;PRNG 以确定性方式扩展种子;CSPRNG 与真正的随机性不可区分。OS 熵池会将两者结合起来。下一节:实践中使用的具体 CSPRNG 设计。

常见问题解答

「真随机性与伪随机性」课时是免费的吗?

是的 — 「真随机性与伪随机性」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「真随机性与伪随机性」这节课中我会学到什么?

区分硬件熵源和软件 PRNG 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「真随机性与伪随机性」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 真随机性与伪随机性
  2. 密码学安全的 PRNG
  3. 熵枯竭与弱密钥漏洞
  4. 安全生成密钥、随机数和 IV
← 返回 Cryptology Academy