1. 硬件随机数基础:真随机 vs 伪随机,熵源与 TRNG 物理原理
各位同学,咱们今天聊硬件随机数。说实话,这个领域我一开始也觉得挺枯燥的——不就是生成几个随机数嘛,软件里 rand() 一把梭不就完了?直到我在一个金融安全项目里吃了大亏,才真正明白硬件随机数到底有多重要。
那一次,我们用的伪随机数生成器被攻击者预测出了密钥。嗯,从那以后,我对随机数的态度就彻底变了。今天这第一课,咱们就把地基打牢。
1.1 真随机数 vs 伪随机数——本质区别在哪?
先问一个问题:你平时写代码用的 random() 函数,生成的是真随机数吗?
答案很残酷——不是。绝大多数编程语言标准库里的随机函数,都是伪随机数生成器(PRNG)。它们本质上是确定性的算法:只要种子相同,输出的序列就完全一样。
核心区别一句话:
- 伪随机数(PRNG):由算法生成,可复现,有周期。适合模拟、游戏,但不适合密码学。
- 真随机数(TRNG):从物理过程中提取,不可预测,无周期。密码学、密钥生成、安全协议必须用它。
我个人的习惯是:凡是涉及密钥、签名、身份认证的地方,一律只用硬件真随机数。伪随机数再快,我也不放心。
| 特性 | 伪随机数(PRNG) | 真随机数(TRNG) |
|---|---|---|
| 生成方式 | 数学算法 + 种子 | 物理熵源采样 |
| 可预测性 | 知道种子即可预测全部序列 | 理论上不可预测 |
| 周期性 | 有(取决于算法和状态位宽) | 无 |
| 典型速度 | 快(Gbps 级别) | 慢(Kbps ~ Mbps 级别) |
| 密码学适用性 | ❌ 不可单独使用 | ✅ 必须使用 |
⚠️ 我曾经踩过的坑: 有个项目用软件 PRNG 生成 RSA 密钥对,结果两次重启后生成的密钥一模一样。攻击者直接复现了我们的种子环境,所有加密形同虚设。从那以后,我定了一条死规矩:密码学密钥的熵必须来自硬件 TRNG。
1.2 熵源概念——随机数的「燃料」
你想想看,伪随机数生成器为什么能被预测?因为它缺少一样东西——熵。
熵,在信息论里是「不确定性」的度量。在随机数领域,熵就是不可预测的信息来源。一个优秀的 TRNG,核心就是有一个高质量的熵源。
常见的熵源有哪些?我列几个实际项目中用过的:
- 热噪声:电阻或晶体管中的电子热运动,纯物理随机
- 抖动(Jitter):时钟信号的相位抖动,尤其是环形振荡器
- 量子效应:比如光子检测、隧穿效应(高端场景)
- 混沌电路:非线性电路产生的混沌振荡
说白了,熵源就是 TRNG 的「原料」。原料质量不行,后面处理得再好也没用。我记得有个项目为了省成本,用温度传感器做熵源,结果温度变化太慢,输出的随机数有明显的相关性——直接被安全审计打回来了。
💡 我的经验: 评估熵源质量,看两个指标:熵率(每秒能提供多少比特的不可预测信息)和熵源稳定性(是否受温度、电压、老化影响)。好的熵源,这两个指标都要过硬。
1.3 硬件随机数发生器(TRNG)的物理原理
好了,咱们进入正题。TRNG 到底是怎么工作的?我画了一张图,把核心流程拆开给你看。
这张图我建议你多看几遍。TRNG 的四个核心模块,缺一不可:
- 物理熵源:这是 TRNG 的心脏。我个人最常用的是环形振荡器抖动方案——多个反相器首尾相连,利用工艺偏差和热噪声产生随机相位抖动。成本低,集成度高。
- 模拟采样:把物理信号(比如电压波动、时钟边沿)转换成数字域可处理的信号。这里要注意采样频率和熵源带宽的匹配——采样太快,相邻样本相关;采样太慢,吞吐量不够。
- 数字化:得到原始比特流。但这时候的比特往往有偏——比如 1 的比例是 60%,0 是 40%。直接拿去用,密码学上就是灾难。
- 后处理:去偏、压缩、提取。常见算法有 Von Neumann 去偏器、哈希函数(如 SHA-256)、加密算法(如 AES-CTR)。这一步把原始熵「提纯」成均匀分布的随机数。
⚠️ 避坑指南: 我曾经见过一个设计,后处理只用了简单的异或链,结果输出仍然有微弱的相关性。后来换了基于哈希的后处理,才通过 FIPS 140-2 认证。记住:后处理不是可选项,是必选项。而且后处理算法本身也要抗侧信道攻击。
1.4 常见的 TRNG 物理实现方案
实际工程中,TRNG 的实现方案五花八门。我挑三种最常见的,给你对比一下:
| 方案 | 物理原理 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|
| 环形振荡器抖动 | 反相器链的相位噪声 | 全数字、易集成、低成本 | 对电源噪声敏感 | MCU、SoC、FPGA |
| 电阻热噪声 | 电阻两端的热电压波动 | 熵源质量高、理论成熟 | 需要模拟电路、面积大 | 安全芯片、HSM |
| 量子隧穿效应 | PN 结的隧穿电流随机性 | 理论上最纯净的随机源 | 工艺特殊、成本极高 | 军用、国家级安全设备 |
你想想看,为什么环形振荡器方案在消费级芯片里这么流行?说白了,就是因为它全数字、无模拟 IP、随便找个工艺都能做。我做过一个 IoT 芯片,整个 TRNG 只用了几十个标准单元,面积不到 0.01 mm²,成本几乎为零。
但代价是什么?鲁棒性差。电源电压波动 10%,熵率可能下降 50%。所以工业级产品往往会在环形振荡器方案上加稳压器和温度补偿。
1.5 熵源质量的评估指标
最后,咱们聊聊怎么判断一个 TRNG 好不好。光看数据手册没用,得看实测指标。
我个人习惯用这三个指标:
- 最小熵(Min-Entropy):最保守的熵估计。假设攻击者知道你的分布,他能猜对单次输出的概率上限。密码学要求这个值 > 0.99 比特/比特。
- 自相关系数:衡量相邻样本的相关性。理想值是 0,工程上 < 0.01 就算合格。
- NIST SP 800-22 测试套件:15 项统计测试,全部通过才算「密码学可用」。
💡 一个小技巧: 我每次拿到新的 TRNG 芯片,第一件事不是跑 NIST 测试,而是先看原始采样数据的直方图。如果直方图有明显的偏斜或双峰,后处理再强也救不回来。这个习惯帮我筛掉过至少三款「看起来很美」的 TRNG 芯片。
好了,第一课的内容就到这里。硬件随机数的核心概念——真随机 vs 伪随机、熵源、TRNG 架构——咱们都过了一遍。这些东西看着基础,但我在实际项目中见过太多人在这上面翻车。记住一句话:密码学的安全,始于熵源的质量。