4、真随机数发生器(TRNG):TRNG与PRNG的区别、TRNG的熵源设计、TRNG的在线测试与健康检测
各位同学,今天我们来聊聊真随机数发生器。说实话,这个模块在芯片安全里是个“隐形英雄”。你平时可能不太注意它,但一旦它出问题,整个加密系统就跟纸糊的一样。我当年做第一颗安全芯片时,就在这上面栽过跟头——嗯,后面会细说。
4.1 TRNG与PRNG的区别
先搞清楚两个概念:PRNG(伪随机数发生器)和TRNG(真随机数发生器)。
PRNG,说白了就是个算法。你给它一个种子,它就能源源不断地吐出“看起来随机”的数。但问题是——它本质上是确定的。只要知道种子和算法,就能复现整个序列。我见过不少项目,工程师图省事直接用PRNG当密钥源,结果被攻击者通过侧信道反推出种子,整个系统直接沦陷。
TRNG就不一样了。它依赖物理世界的随机性——比如热噪声、抖动、亚稳态。这些过程在物理上是不可预测的,所以TRNG产生的数才是真正的随机。你想想看,量子力学层面的不确定性,谁能预测?
我习惯用一个比喻:PRNG就像一本写好的剧本,演员按台词演;TRNG就像现场即兴表演,没人知道下一句是什么。
- 确定性:PRNG是确定的,TRNG是非确定的
- 熵源:PRNG依赖种子,TRNG依赖物理噪声
- 可重复性:PRNG可复现,TRNG不可复现
- 应用场景:PRNG适合仿真测试,TRNG适合密钥生成
但注意,实际芯片里往往是两者配合使用。TRNG负责产生高质量的种子,PRNG负责快速扩展。这叫“混合模式”。
4.2 TRNG的熵源设计
熵源是TRNG的心脏。设计不好,整个TRNG就是摆设。常见的熵源有几种:
4.2.1 环形振荡器抖动
这是最经典的做法。两个环形振荡器,频率略有差异,通过采样产生随机位。原理很简单:振荡器的相位会受热噪声影响,产生随机抖动。我早期做的一个项目就用这个方案,但踩了个坑——
4.2.2 亚稳态采样
利用触发器的亚稳态特性。当输入信号刚好在时钟边沿附近变化时,触发器会进入亚稳态,最终稳定到0或1是随机的。这个方法面积小,但输出速率低。
我个人习惯用这种方法做“熵源增强”。在主熵源后面加一级亚稳态采样,把残留的确定性成分打散。
4.2.3 量子噪声源
这是目前最前沿的做法。利用PN结的散粒噪声或电阻的热噪声,经过放大和比较器产生随机位。优点是熵质量极高,缺点是模拟电路设计复杂,对工艺敏感。
我记得有一次帮客户调试一颗28nm的芯片,他们的量子噪声源在低温下输出全是0。查了半天,发现是比较器的失调电压随温度漂移了。后来加了动态失调消除,才算搞定。
4.3 TRNG的在线测试与健康检测
这是TRNG设计里最容易忽视的部分。很多工程师觉得“我熵源设计好了,输出随机数就行了”。但现实是——熵源会老化、会受环境影响、甚至会被攻击者刻意干扰。
所以,在线测试不是可选项,是必选项。
4.3.1 健康检测的层次
我一般把健康检测分为三个层次:
- 原始熵源检测:直接检测模拟信号的幅度、频率、抖动范围。比如环形振荡器的频率是否在正常范围内。
- 数字后处理检测:对经过数字化后的比特流做统计测试。比如计算0/1比例、游程长度、自相关等。
- 系统级检测:结合密码模块,验证生成的随机数是否能通过NIST SP 800-22等标准测试。
4.3.2 常用的在线测试算法
这里我列几个常用的,你们可以直接参考:
| 测试项 | 检测内容 | 阈值建议 |
|---|---|---|
| 重复计数测试 | 连续相同的比特数 | 超过64位则告警 |
| 自适应比例测试 | 窗口内0/1比例偏差 | 偏差超过3σ则告警 |
| 游程测试 | 连续0或1的游程长度分布 | 与期望分布偏差超过5%则告警 |
| 自相关测试 | 延迟1~16位的自相关系数 | 系数绝对值超过0.01则告警 |
4.3.3 攻击场景与应对
你想想看,攻击者会怎么对付你的TRNG?
- 频率锁定攻击:注入特定频率的电磁干扰,让振荡器被锁定。应对方法:做频率监测,发现异常立即切换熵源。
- 温度攻击:极端温度让熵源失效。应对方法:温度传感器+自适应偏置电路。
- 电压毛刺攻击:瞬间电压变化让比较器输出固定值。应对方法:多次采样+多数表决。
我曾经遇到过一种很狡猾的攻击——攻击者不是让TRNG完全失效,而是让它的熵率降低到50%以下。这样生成的密钥虽然看起来随机,但实际熵值只有一半。破解难度直接降了一个数量级。所以,健康检测不仅要检测“是否失效”,还要检测“是否退化”。
4.4 一个完整的TRNG架构
下面我用SVG画一个典型的TRNG架构图,你们可以直观感受一下各个模块的关系:
从这张图你可以看到,TRNG不是简单的“熵源→输出”一条线。健康检测是贯穿始终的。模拟端检测物理信号,数字端检测统计特性,控制逻辑根据检测结果决定是否告警或切换熵源。
好了,关于TRNG的核心内容就这些。记住一句话:TRNG的强度不取决于它有多复杂,而取决于你对熵源的理解有多深,以及你的健康检测有多全面。下次你们设计安全芯片时,希望这些经验能帮你们少走弯路。