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,现代密码学就是空中楼阁。

为什么?因为密码学的安全性最终都依赖于“密钥不可预测”。你想想看:

  1. 密钥生成:RSA、ECC、AES 的密钥必须来自 TRNG。如果用 PRNG 生成密钥,攻击者只要猜到种子,所有密钥就全废了。
  2. 随机数种子:PRNG 本身也需要 TRNG 提供种子。没有好的种子,PRNG 输出再多也是“伪”的。
  3. 协议安全:TLS 握手、数字签名中的 nonce(一次性随机数)如果可预测,整个协议就可以被攻击。
  4. 防侧信道:很多掩码防护、随机化技术依赖 TRNG 提供真正的随机性来混淆功耗和电磁泄露。

警告:千万不要为了省成本或面积,用 PRNG 替代 TRNG 来生成密钥。我见过某 IoT 芯片因为用了片上 PRNG 做密钥生成,结果被攻击者通过电源分析还原出种子,整个产品线的密钥全部泄露。这个教训价值几千万。

下面这张图总结了 TRNG 在密码系统里的位置和作用:

TRNG在密码系统中的核心地位 物理熵源 热噪声 / 振荡器 / 混沌 TRNG 核心 采样 + 量化 + 后处理 随机比特流 不可预测的原始熵 密钥生成 AES / RSA / ECC 密钥 PRNG 种子 为伪随机数发生器播种 协议 Nonce TLS握手 / 数字签名 ⚠ 核心原则:密钥必须直接来自TRNG,不可用PRNG替代 PRNG只能用于非安全场景,或作为TRNG输出的“扩展器”

从这张图可以看得很清楚:TRNG 是整个密码系统的“熵源头”。密钥生成、PRNG 播种、协议 nonce,全都依赖 TRNG 提供不可预测的随机性。没有 TRNG,这些环节就都变成了“伪随机”,安全性也就无从谈起。

一句话总结:TRNG 是密码系统的“物理信任根”。它的质量直接决定了整个系统的安全底线。评估 TRNG 性能,就是在评估这个信任根到底有多可靠。