3. 真随机数发生器(TRNG)设计

真随机数发生器,简称TRNG,是安全芯片的“心脏起搏器”。

为什么这么说?你想想看,密钥生成、签名、认证协议,哪个环节离得开随机数?如果随机数能被预测,那整个安全体系就形同虚设。伪随机数发生器(PRNG)虽然快,但它是确定性的——只要知道种子,就能复现整个序列。TRNG不一样,它从物理过程中提取熵,比如热噪声、时钟抖动、混沌电路。说白了,TRNG产生的数,连芯片自己都不知道下一个会是什么。

3.1 TRNG原理

TRNG的核心是“熵源”。熵源来自物理世界的随机现象。我习惯把TRNG分成三部分:

  • 熵源:产生原始随机信号,比如热噪声、振荡器抖动。
  • 采样与量化:把模拟的随机信号转成数字比特流。
  • 后处理:去除偏差,提高统计质量,比如用冯·诺依曼校正器或哈希函数。

嗯,这里要注意:熵源的质量直接决定TRNG的安全性。如果熵源不够“乱”,后处理也救不回来。我在项目中遇到过,有人用简单的环形振荡器做熵源,结果输出序列有明显的周期性——说白了,就是熵不够。

核心指标

  • 熵率:每比特携带的随机信息量,理想值为1。
  • 吞吐率:每秒能产生多少随机比特。
  • 鲁棒性:对工艺、电压、温度(PVT)变化的容忍度。

3.2 基于振荡器的TRNG

这是最经典的TRNG结构。原理很简单:利用振荡器的相位噪声(jitter)作为熵源。

具体做法:两个振荡器,一个慢速,一个快速。慢速振荡器作为采样时钟,快速振荡器作为被采样信号。由于慢速时钟的边沿位置受jitter影响,每次采样到的快速振荡器周期数会随机变化。

我个人习惯用这种结构做低成本TRNG。它面积小,功耗低,适合IoT芯片。但有个坑:振荡器容易受电源噪声和温度影响。我曾经调试过一款芯片,高温下jitter变小,随机性急剧下降。后来加了稳压器和温度补偿,才算搞定。

避坑指南

我曾经在28nm工艺上设计过环形振荡器TRNG。一开始直接用了标准单元的反相器链,结果后仿发现输出有偏。后来改成电流饥饿型振荡器,通过调节偏置电流控制振荡频率,jitter特性好了很多。

// 简单的振荡器TRNG Verilog模型
module osc_trng (
    input  clk_slow,   // 慢速采样时钟
    input  rst_n,
    output reg rnd_bit
);
    wire osc_fast;     // 快速振荡器输出
    // 快速振荡器:奇数个反相器环
    assign osc_fast = ~osc_fast; // 实际需要延迟单元
    
    always @(posedge clk_slow or negedge rst_n) begin
        if (!rst_n)
            rnd_bit <= 1'b0;
        else
            rnd_bit <= osc_fast; // 采样快速振荡器
    end
endmodule

3.3 基于混沌的TRNG

混沌电路是另一种有趣的熵源。混沌系统对初始条件极度敏感——微小的差异会指数级放大。你想想看,这天然就是随机数的好材料。

常见的混沌TRNG基于混沌映射,比如Logistic映射、Bernoulli映射。在电路层面,可以用开关电容电路或跨导放大器实现混沌振荡器。

我记得有一次评估一个混沌TRNG方案。它的优点是熵率高,一个周期就能产生多个随机比特。但缺点是电路复杂,对工艺偏差敏感。说白了,混沌TRNG更适合高性能场景,比如服务器安全芯片。

注意事项

混沌TRNG的初始条件需要精心设计。如果初始状态落在混沌吸引子的“窗口”内,输出可能退化为周期序列。我建议在设计中加入自检电路,实时监测输出熵率。

3.4 TRNG在安全协议中的应用

TRNG在安全协议中无处不在。我挑几个典型的场景说说。

3.4.1 密钥生成

无论是对称密钥(AES)还是非对称密钥(RSA、ECC),密钥都必须随机生成。TRNG提供种子,PRNG负责扩展。但注意:如果TRNG熵不够,密钥空间会缩小,攻击者可以暴力破解。

3.4.2 挑战-响应协议

在身份认证中,服务器发送一个随机挑战(challenge),设备用密钥加密后返回响应。挑战必须是一次性的、不可预测的。TRNG就是生成挑战的最佳选择。

3.4.3 掩码与防护

在抗侧信道攻击中,TRNG用于生成掩码。比如在AES的S盒计算中,用随机掩码掩盖中间值,让功耗和电磁辐射与真实数据无关。

实际案例

我在设计一款金融安全芯片时,TRNG同时服务于三个模块:密钥管理、交易签名、以及抗DPA(差分功耗分析)掩码。当时最头疼的是资源冲突——三个模块同时请求随机数,TRNG吞吐不够。后来加了FIFO缓冲和优先级仲裁,才算解决。

3.5 知识体系结构图

下面这张图概括了TRNG设计的核心逻辑。从熵源到后处理,再到安全协议应用,一条线串起来。

TRNG设计知识体系 熵源 采样与量化 后处理 热噪声 振荡器抖动 混沌电路 边沿采样 过采样 冯·诺依曼校正 哈希函数 自检电路 安全协议应用 密钥生成 挑战-响应 掩码防护

3.6 总结与经验

TRNG设计,说白了就是跟“不确定性”打交道。你越想控制它,它越不听话。我做了十几年芯片,最大的体会是:

  • 熵源要冗余:别只依赖一种物理现象。多源融合更可靠。
  • 后处理要保守:宁可降低吞吐,也要保证输出无偏。
  • 测试要全面:NIST SP 800-22、Diehard测试,一个都不能少。

个人建议

如果你刚开始设计TRNG,先从振荡器结构入手。它简单、可控,适合练手。等摸透了jitter的特性,再挑战混沌TRNG。记住:安全芯片里,TRNG不是功能模块,它是信任的基石。

专注资料整理