1. 随机数发生器概述:TRNG与PRNG的区别、硬件熵源类型与密码学地位
各位同学,咱们今天开篇聊一个看似简单、实则坑特别多的东西——随机数发生器。我做了十几年硬件安全,见过太多因为随机数没搞好导致整个系统被攻破的案例。说白了,随机数就是密码学的“地基”,地基要是松了,上面盖多高的楼都没用。
1.1 TRNG与PRNG:真随机 vs 伪随机
先搞清楚两个基本概念:真随机数发生器(TRNG)和伪随机数发生器(PRNG)。很多人觉得“随机嘛,不就是产生一些没有规律的数字”,其实差远了。
| 对比维度 | TRNG(真随机) | PRNG(伪随机) |
|---|---|---|
| 熵来源 | 物理过程(热噪声、量子效应等) | 算法 + 种子(初始值) |
| 可预测性 | 理论上不可预测 | 知道种子和算法即可复现 |
| 输出速率 | 通常较慢(几十Kbps ~ 几Mbps) | 非常快(Gbps级别) |
| 硬件开销 | 需要专用模拟电路 | 纯数字逻辑即可实现 |
| 典型应用 | 密钥生成、随机种子 | 流密码、仿真、游戏 |
我个人的习惯是这么理解的:TRNG 是“从物理世界抓取不确定性”,PRNG 是“用算法把一个小秘密膨胀成一大串看似随机的数”。你想想看,如果攻击者知道了 PRNG 的种子,那整个“随机”序列就完全暴露了。所以密码学里真正用来生成密钥的,必须是 TRNG。
核心原则:TRNG 负责产生不可预测的熵,PRNG 负责把熵“拉伸”成足够长的随机序列。两者是配合关系,不是替代关系。
1.2 硬件熵源类型:热噪声、振荡器采样、混沌电路
TRNG 的核心是熵源——也就是那个“物理随机性”从哪来。我这些年接触过的方案主要有三类,咱们一个一个说。
1.2.1 热噪声熵源
这是最“正统”的做法。利用半导体器件中载流子的热运动产生的随机电压波动。说白了,就是电阻或晶体管里的电子在乱撞,撞出来的噪声。
- 优点:物理原理清晰,随机性质量高,理论上经过适当处理可以通过所有统计测试
- 缺点:信号幅度极小(微伏级),需要高增益放大器,对温度和工艺敏感
- 典型结构:电阻热噪声 → 放大器 → 比较器 → 采样输出
我记得有一次做车规级芯片,热噪声 TRNG 在 -40°C 低温下输出熵率直接掉了一半。后来查了半天,发现是放大器的偏置电路在低温下漂移了。嗯,这种坑只有踩过才知道。
1.2.2 振荡器采样熵源
这个方案在 FPGA 和数字芯片里特别常见。原理很简单:用两个振荡器,一个快的,一个慢的。用慢振荡器去采样快振荡器的相位,因为两个振荡器之间总有抖动(jitter),采出来的结果就是随机的。
- 优点:纯数字实现,不需要模拟电路,移植性好
- 缺点:对电源噪声敏感,容易受到确定性干扰影响
- 典型结构:环形振荡器(高频) + 环形振荡器(低频) + D触发器采样
避坑指南:我曾经遇到过振荡器采样 TRNG 在芯片量产时出现“锁相”现象——两个振荡器因为版图耦合导致频率锁定,输出变成全0或全1。后来强制在版图上加了隔离环才解决。所以做振荡器采样,一定要检查版图隔离!
1.2.3 混沌电路熵源
这个相对小众一些,但很有意思。利用非线性电路(比如蔡氏电路、逻辑映射电路)的混沌行为产生随机序列。混沌系统对初始条件极度敏感,稍微一点扰动就会导致完全不同的输出轨迹。
- 优点:输出速率可以做得比较高,面积相对小
- 缺点:设计难度大,混沌状态容易退化,需要额外的状态监测
- 典型结构:非线性映射电路 + 模数转换 + 后处理
我个人对混沌熵源持谨慎态度。不是说它不好,而是混沌系统的“边界条件”太敏感了。你设计时仿真跑得好好的,流片回来可能因为工艺偏差就掉出混沌区了。除非你有足够的测试数据覆盖,否则不建议在安全等级高的产品里用。
1.3 TRNG在密码学中的核心地位
咱们直接说结论:没有 TRNG,现代密码学就是空中楼阁。
为什么?因为密码学的安全性最终都依赖于“密钥不可预测”。你想想看:
- 密钥生成:RSA、ECC、AES 的密钥必须来自 TRNG。如果用 PRNG 生成密钥,攻击者只要猜到种子,所有密钥就全废了。
- 随机数种子:PRNG 本身也需要 TRNG 提供种子。没有好的种子,PRNG 输出再多也是“伪”的。
- 协议安全:TLS 握手、数字签名中的 nonce(一次性随机数)如果可预测,整个协议就可以被攻击。
- 防侧信道:很多掩码防护、随机化技术依赖 TRNG 提供真正的随机性来混淆功耗和电磁泄露。
警告:千万不要为了省成本或面积,用 PRNG 替代 TRNG 来生成密钥。我见过某 IoT 芯片因为用了片上 PRNG 做密钥生成,结果被攻击者通过电源分析还原出种子,整个产品线的密钥全部泄露。这个教训价值几千万。
下面这张图总结了 TRNG 在密码系统里的位置和作用:
从这张图可以看得很清楚:TRNG 是整个密码系统的“熵源头”。密钥生成、PRNG 播种、协议 nonce,全都依赖 TRNG 提供不可预测的随机性。没有 TRNG,这些环节就都变成了“伪随机”,安全性也就无从谈起。
一句话总结:TRNG 是密码系统的“物理信任根”。它的质量直接决定了整个系统的安全底线。评估 TRNG 性能,就是在评估这个信任根到底有多可靠。