随机数基础:真随机数、伪随机数、确定性随机数生成器的区别与联系

在硬件安全领域,随机数是一切信任的基石。无论是密钥生成、签名随机数(nonce)、初始化向量(IV),还是掩码防护(masking)与侧信道防护,其安全性都直接取决于所使用随机数的不可预测性。然而,工程实践中“随机数”一词常被混用,导致设计者在选择熵源或评估安全强度时产生根本性误判。本章将系统梳理真随机数(True Random Number, TRN)、伪随机数(Pseudo Random Number, PRN)与确定性随机数生成器(Deterministic Random Bit Generator, DRBG)三者的数学本质、工程实现与安全边界,并给出在硬件安全场景下的选型与验证方法。

随机数生成体系:熵源、DRBG与安全边界 物理熵源 热噪声 / 抖动 / 亚稳态 量子效应 / 混沌电路 不可预测、不可克隆 TRNG 核心 原始熵 健康检测 重复计数 / 卡方 / 熵估计 告警 / 失效隔离 安全熵种子 DRBG (确定性) CTR / Hash / HMAC 模式 状态可复制、可预测 需定期重新播种 PRNG (非安全) LFSR / 线性同余 统计随机但可预测 不可用于安全场景 对比 安全随机数输出 密钥 / nonce / IV 非安全随机数输出 测试向量 / 加扰种子 TRNG提供不可预测种子 → DRBG扩展为高速安全随机流 → PRNG仅用于非安全场景

上图展示了硬件安全随机数生成体系的完整链路。物理熵源(TRNG核心)产生不可预测的原始熵,经过健康检测后作为种子输入DRBG,DRBG通过确定性算法将短种子扩展为任意长度的安全随机序列。而PRNG(非安全伪随机数生成器)则完全独立于熵源,仅依赖算法状态,不具备安全属性。下面我们将逐一剖析这三类随机数的本质。

2.1 核心原理:三类随机数的数学本质与安全属性

真随机数(TRN)来源于物理过程的固有随机性,如半导体热噪声、振荡器相位抖动、放射性衰变或量子效应。其核心特征在于:熵(Entropy)来自物理世界,而非算法。即使攻击者完全掌握生成器的电路设计、历史输出和当前状态,也无法预测下一个输出比特。TRNG的数学基础是信息论中的“熵”概念——每个输出比特至少包含1比特的香农熵,且熵源不可克隆、不可建模。

伪随机数(PRN)由确定性算法生成,如线性同余发生器(LCG)、线性反馈移位寄存器(LFSR)或梅森旋转算法。其输出序列在统计特性上接近均匀分布,但一旦初始种子(Seed)已知,整个序列即可被完整复现。PRNG的数学基础是“算法复杂度”——它只能提供计算意义上的随机性,而非信息论意义上的随机性。对于安全场景,PRNG是禁止的,因为攻击者只需观察少量输出即可通过算法逆向推导出内部状态。

确定性随机数生成器(DRBG)是密码学意义上的伪随机数生成器,遵循NIST SP 800-90A标准,支持CTR、Hash、HMAC三种模式。DRBG与普通PRNG的本质区别在于:它必须包含不可预测的种子输入,且具备前向安全性(Forward Secrecy)和后向安全性(Backward Secrecy)。即使攻击者获取了DRBG的当前内部状态,也无法反推出之前生成的随机数(前向安全);即使攻击者获取了种子,也无法预测后续输出(后向安全,前提是状态更新函数为单向函数)。

属性维度 TRNG(真随机数) DRBG(确定性安全随机数) PRNG(普通伪随机数)
熵来源 物理过程(热噪声、抖动) 种子(来自TRNG或安全输入) 算法状态(种子可预测)
可预测性 不可预测(信息论安全) 计算不可预测(密码学安全) 完全可预测(算法公开)
输出速率 低(受物理熵源带宽限制) 高(算法扩展,可达Gbps) 极高(简单运算)
安全强度 无条件安全 计算安全(依赖密码算法强度) 无安全性
典型应用 种子生成、密钥初始化 批量密钥、会话密钥、nonce 仿真、测试、非安全加扰

核心理解:TRNG是“熵源”,DRBG是“熵扩展器”,PRNG是“无熵的序列发生器”。在硬件安全芯片中,TRNG负责产生高质量的种子,DRBG负责将种子扩展为高速随机流,而PRNG仅用于非安全功能(如测试模式)。三者是“源-扩展-应用”的层级关系,而非并列关系。

2.2 判断方法:如何区分与验证随机数类型

在工程实践中,区分三类随机数不能仅凭数据手册的宣称,而需要通过行为特征测试和安全属性验证来判断。以下是标准化的判断流程:

  1. 重复性测试:使用相同种子初始化生成器,若两次输出序列完全一致,则为PRNG或DRBG(确定性);若输出不同,则为TRNG(或TRNG+DRBG混合)。
  2. 状态泄露测试:获取生成器内部状态(如DRBG的V值和Key值),尝试预测后续输出。若可预测,则为PRNG;若不可预测,则为DRBG(具备后向安全)。
  3. 熵源独立性测试:断开物理熵源(如短路噪声源),观察输出是否停止或告警。TRNG会停止输出或触发健康检测告警,而DRBG/PRNG仍会继续输出(DRBG依赖种子,PRNG完全独立)。
  4. 统计测试套件:使用NIST SP 800-22或Dieharder测试套件,但需注意——统计测试只能证明“统计随机性”,无法区分TRNG与DRBG。真正的区分必须结合上述结构测试。

常见误区:许多工程师认为“通过NIST测试即为真随机数”。这是错误的。DRBG和PRNG都能通过NIST统计测试,因为它们的设计目标就是产生统计均匀的序列。统计测试只能排除“明显非随机”的生成器,无法验证熵源的真实性。安全认证(如CC EAL4+、FIPS 140-2)要求对熵源进行物理分析,而非仅依赖统计测试。

2.3 案例拆解:某安全芯片TRNG+DRBG架构的实战分析

以一款车规级安全芯片为例,其随机数子系统采用“TRNG熵源 + CTR_DRBG”混合架构。设计约束为:芯片面积0.12mm²,功耗预算2mW,随机数输出速率要求≥100Mbps,且需通过AEC-Q100 Grade 1可靠性认证。

初始现象与目标:初版设计中,工程师直接使用环形振荡器抖动作为熵源,输出接入CTR_DRBG。在实验室测试中,NIST SP 800-22全部通过,但进行故障注入攻击(电压毛刺)时,DRBG输出出现可预测性——攻击者通过降低电源电压至2.7V(正常3.3V),使环形振荡器停振,DRBG因种子熵不足而输出退化序列。

关键输入数据与指标:健康检测模块监测到熵源输出熵估计值从0.98比特/比特降至0.31比特/比特,但未触发告警阈值(设定为0.5)。DRBG在低熵状态下继续运行,导致密钥生成可预测。

分析判断过程:根因分析发现两个问题:① 健康检测的熵估计算法采用简单卡方检验,无法检测低频退化;② DRBG的reseed间隔过长(设定为10万次输出),在熵源退化期间持续使用低质量种子。

实际操作步骤:

// 改进后的健康检测逻辑(伪代码)
if (entropy_estimate < 0.7) {
    trigger_alarm();
    disable_drbg_output();
    switch_to_fallback_entropy(); // 启用备用熵源(如片上热噪声)
}
if (reseed_counter > 1000) {
    force_reseed(); // 缩短reseed间隔
}

结果对比:改进后,在相同电压毛刺攻击下,健康检测在2ms内触发告警并切断DRBG输出,系统切换到备用熵源。故障注入测试通过,密钥生成不可预测性恢复。代价是芯片面积增加0.03mm²(用于备用熵源),功耗增加0.3mW。

复盘经验:① 健康检测必须基于“熵估计”而非“统计测试”,且阈值应留有安全裕量;② DRBG的reseed策略必须与熵源健康状态联动,而非固定周期;③ 硬件安全设计必须考虑故障注入场景,不能仅依赖统计随机性。

2.4 常见误区与总结复盘

在硬件安全TRNG设计中,以下误区最为常见:

  • 误区一:TRNG输出速率越高越好。实际上,TRNG的熵源带宽有限,盲目提高采样速率会降低每比特熵。正确做法是TRNG产生低速高熵种子,DRBG负责高速扩展。
  • 误区二:DRBG可以替代TRNG。DRBG的安全性完全依赖种子质量,没有TRNG提供不可预测种子,DRBG退化为PRNG。两者是互补关系,而非替代关系。
  • 误区三:健康检测只需在启动时执行一次。熵源会随温度、电压、老化而退化,必须持续在线监测。FIPS 140-2要求连续健康检测。
  • 误区四:所有随机数应用都使用同一生成器。密钥生成应使用TRNG+DRBG,而测试向量生成可使用PRNG。混用会导致安全边界模糊。

设计建议:在硬件安全架构中,建议采用“TRNG熵源 + 健康检测 + DRBG”三层结构。TRNG负责产生种子,健康检测实时监控熵源质量,DRBG负责高速输出。同时,为DRBG配置独立的reseed机制和故障响应策略,确保在熵源退化时系统能安全降级或停止服务。