TRNG 核心架构:三种主流方案深度拆解
做硬件随机数生成器,说白了就是在芯片上造一个「物理熵源」。我这些年摸过的 TRNG 方案,主流的基本就三种:振荡器采样环、混沌电路、量子效应 TRNG。每种都有它的脾气,选型时稍不注意就会踩坑。
今天咱们就把这三种架构从头到尾捋一遍。我会结合自己踩过的坑,告诉你它们各自好在哪、烂在哪。
一、振荡器采样环(RO-based TRNG)
这是最经典、也是我最早接触的方案。原理很简单:用两个振荡器,一个快一个慢,用慢的时钟去采快的时钟。由于相位噪声和抖动,每次采到的值都不一样。
核心逻辑:利用环形振荡器(Ring Oscillator)的随机抖动作为熵源。抖动来源于热噪声和闪烁噪声,这些物理噪声在 CMOS 工艺里天然存在。
我记得第一次在 FPGA 上搭这个电路时,觉得太简单了——几个反相器串起来,再加个 D 触发器就完事。结果呢?输出全是 0 和 1 交替的规律序列,根本没法用。
后来才明白,问题出在振荡器频率设计上。慢钟和快钟的频率比没拉开,采样窗口不够随机。
典型结构
// 简化的振荡器采样环结构
// 快振荡器:奇数个反相器组成环
// 慢振荡器:低频时钟源
// D触发器:用慢钟沿采样快钟输出
module ro_trng (
input wire clk_slow,
input wire rst_n,
output wire rand_bit
);
wire ro_out;
// 3级环形振荡器
assign ro_out = ~(ro_out & rst_n); // 简化示意
// 实际需要奇数级反相器链
DFF dff_inst (
.D(ro_out),
.CLK(clk_slow),
.Q(rand_bit)
);
endmodule
我的经验:振荡器级数建议选 3、5、7 这样的奇数,级数越多相位噪声越大,但功耗也上去了。我一般用 5 级,平衡性最好。
优缺点对比
| 维度 | 评价 |
|---|---|
| 实现难度 | 极低。标准单元库就能搭,不需要模拟电路 |
| 吞吐率 | 中等。典型值 10~100 Mbps,受限于慢钟频率 |
| 功耗 | 较低。但振荡器一直跑,待机时也不省电 |
| 抗攻击能力 | 弱。频率注入攻击很容易让输出变得可预测 |
| 工艺敏感性 | 高。不同工艺角下振荡频率漂移严重 |
避坑指南:我曾经在一个 28nm 项目里直接用 65nm 的振荡器参数,结果芯片回来频率偏了 40%,随机性测试直接挂掉。不同工艺节点一定要重新仿真 PVT 角。
二、混沌电路 TRNG
混沌电路,说白了就是利用非线性系统的「蝴蝶效应」——初始条件的微小差异会被指数级放大。我接触这个方案是在做安全芯片的时候,客户要求抗攻击能力必须达到 CC EAL6+。
混沌 TRNG 的核心是一个非线性映射电路,比如 Logistic 映射或 Chua 电路。这些电路对参数极其敏感,稍微偏一点,输出序列就从混沌变成周期了。
典型实现:Logistic 映射
// 离散时间 Logistic 映射
// x(n+1) = r * x(n) * (1 - x(n))
// 当 r 在 [3.57, 4.0] 区间时进入混沌状态
// 模拟实现需要:
// 1. 乘法器(实现 x*(1-x))
// 2. 增益放大器(设置 r 值)
// 3. 采样保持电路
// 4. ADC 量化输出
嗯,这里要注意。混沌电路看着很美,但实际做起来坑特别多。我遇到过最头疼的问题就是参数漂移——温度一变,r 值就跑了,混沌区直接变成周期区。
| 维度 | 评价 |
|---|---|
| 实现难度 | 高。需要模拟乘法器、高精度增益控制 |
| 吞吐率 | 高。可达 Gbps 级别,因为混沌系统本身是高速的 |
| 功耗 | 较高。模拟电路持续工作,且需要偏置电路 |
| 抗攻击能力 | 强。对注入攻击不敏感,因为非线性特性天然抑制干扰 |
| 工艺敏感性 | 极高。0.1% 的电阻偏差就能让系统退出混沌区 |
关键点:混沌 TRNG 的随机性质量高度依赖电路参数的精确匹配。我建议在流片前做蒙特卡洛仿真,确保 3-sigma 范围内系统都处于混沌状态。
三、量子效应 TRNG
这个方案听起来高大上,其实原理也很直接——利用量子力学中的本质随机性。比如光子通过半透半反镜后的路径选择,或者量子隧穿效应中载流子通过势垒的概率。
我个人觉得,量子 TRNG 是三种方案里「最随机」的。为什么?因为振荡器环和混沌电路的随机性归根结底来自经典噪声,而经典噪声在理论上是可以被预测的(只要有完美的模型)。但量子过程是本质随机的,连上帝都管不了。
常见实现方式
- 光子路径选择:用 LED 发出单光子,经过分束器后由两个单光子探测器接收。哪个探测器响应,就输出 0 或 1。
- 量子隧穿噪声:利用反向偏置 PN 结的隧穿电流,放大后采样。隧穿事件的发生时间服从泊松分布。
- 真空态涨落:用平衡零差检测器测量真空态的相位涨落,这是目前商用方案的主流。
我踩过的坑:做光子方案时,一开始用的 LED 功率太大,一次发出多个光子,结果分束器后的两个探测器同时响应,输出全是 1。后来把光功率衰减到单光子水平才解决问题。
| 维度 | 评价 |
|---|---|
| 实现难度 | 极高。需要光学封装或专用模拟工艺 |
| 吞吐率 | 中等。光子方案受限于探测器死时间,典型 10~100 Mbps |
| 功耗 | 中等。LED 和探测器功耗不高,但外围电路复杂 |
| 抗攻击能力 | 极强。量子过程无法被经典手段干扰 |
| 工艺敏感性 | 低。量子效应本身对工艺不敏感,但探测器需要校准 |
三种架构全景对比
说了这么多,咱们用一张图把三种方案的核心逻辑串起来。这张图是我做方案选型时必画的,每次都能帮我快速定位问题。
选型建议:到底该用哪种?
你想想看,如果只是做消费级产品,比如智能家居的密钥生成,振荡器采样环完全够用。成本低、实现快,加个后处理模块就能通过 NIST SP 800-22 测试。
但如果你在做金融安全芯片或者政府级加密设备,我建议直接上量子 TRNG。虽然贵,但它的随机性有物理保证,审计时底气足。
混沌电路呢?说实话,它处在一个比较尴尬的位置。性能比振荡器环好,但实现复杂度又比量子方案低不了多少。我个人只在需要超高吞吐率(比如 10 Gbps 以上)的场景才会考虑它。
一句话总结:低成本选振荡器环,高性能选混沌电路,高安全选量子 TRNG。没有万能方案,只有最适合你场景的方案。