资讯动态

国密密钥生成熵源合规与随机数质量评估:从安当UKey看硬件RNG随机性举证

发布时间:2026/10/16 4:36:37 来源:尧图企业网站定制
一、密钥随机性为何是密码安全的地基在现代密码体系中不管是对称算法、非对称算法还是杂凑算法密钥本身都必须具备不可预测性。如果密钥由可预测的模式生成那么再强的算法结构也会失去保护意义。以分组密码为例攻击者不需要去攻破轮函数只要能够缩小密钥的搜索空间就能在可接受的成本内完成穷举。对于国密算法而言SM4 的密钥长度为一百二十八比特SM2 的私钥同样落在一百二十八比特量级的大整数区间SM1 作为硬件实现的对称算法其密钥也依赖高质量随机源。只要随机数发生器在某一次会话里出现偏置原本理论上的二的一百二十八次方搜索空间就可能坍缩到几个数量级以内这直接动摇了整个密码系统的地基。随机性之所以被称为地基是因为它处于所有密码运算的最上游。签名验签依赖私钥的不可猜测会话加密依赖一次一密的会话密钥软件授权保护依赖难以伪造的随机数挑战值双因素认证依赖动态变化的因子。任何一个环节如果使用了伪随机或弱随机攻击面就会从算法层下沉到随机数层。换句话说算法合规解决的是算得对而熵源合规解决的是起手那一步不可被预测二者缺一不可。更严峻的是弱随机的失败往往是静默的。系统不会因为随机数偏置而报错业务也不会立刻中断但攻击者可能在离线环境下慢慢积累样本、建立模型。等到密钥被推导出来损失已经发生。因此对承载私钥不可导出要求的硬件设备必须在出厂前、部署前、运行中三个时间点都证明自己的随机源是健康的。这也正是本文从 GM/T 0005 切入的原因该规范给出了一套可量化、可复现的检测方法让随机这件事不再停留在口头承诺而是变成一组可以通过统计检验回答的问题。从攻防视角看随机数相关的风险主要分为三类。第一类是算法缺陷即随机数发生器本身使用线性同余或简单移位寄存器这类结构具备周期性且可被逆向。第二类是种子缺陷即发生器设计正确但初始种子来自可观测的状态例如进程号、时间戳、内存地址攻击者只要能猜测运行环境就能重建序列。第三类是物理缺陷即熵源在极端温度、电压或电磁干扰下产出相关性健康检测未能拦截。硬件密码钥匙的目标正是用安全芯片内部的真随机源把第二类和第三类风险压到最低。二、硬件熵源的物理构成与采集链路2.1 噪声源的物理实现硬件密码钥匙内部的安全芯片需要一块真正的物理熵源。通俗地讲芯片要找一种自然界里测不准的物理量把它放大、采样、数字化形成原始噪声比特流。常见的物理机制有四种。其一是热噪声。半导体内部载流子的热运动产生电压涨落这种涨落与温度直接相关在常温下具备良好的随机性是最经典的熵来源之一。其二是时钟抖动。两个相互独立振荡的时钟之间存在相位漂移用高频时钟去采样低频时钟的边沿采样结果就携带了不可预测的抖动信息。这种方法在成本控制与稳定性之间取得不错平衡被大量安全芯片采用。其三是环形振荡器。把奇数个反相器首尾相连形成环路环路的振荡频率受工艺偏差、电压噪声与温度噪声影响对多个环振做异或或采样即可提取熵。环振方案便于在逻辑电路里实现且容易做多路冗余。其四是电荷噪声与亚阈值泄漏。在特殊设计的晶体管结构里单个电子的随机隧穿或漏电流变化也能作为熵来源这类方案更偏高端安全芯片对工艺要求更高。需要强调的是单一噪声源往往不够。工程上通常把多路独立噪声经过混合电路例如异或、级联哈希、线性反馈移位混合合成一路原始熵流再用数字后处理如 SM3 杂凑、确定性扩展输出最终随机数。这样一来即便某一路噪声源轻度退化整体输出仍然安全。2.2 熵采集与健康检测原始噪声比特流不能直接当作密钥使用。硬件随机数发生器通常包含三层处理熵采集、数字后处理、健康检测。健康检测又分为启动检测、连续检测与在线统计检测。启动检测在设备上电或密钥生成前运行用于确认噪声源确实在工作而不是卡死在固定电平。连续检测在随机数输出过程中周期性运行一旦发现比特流出现明显偏置、长时间锁定或周期重复就立刻拉高错误标志并停止输出避免把坏随机交给密钥生成模块。下面用一张表对比常见的熵源形态与适用场景噪声源类型物理机制典型优势主要风险常见用途热噪声载流子热涨落天然随机、易获取幅度小需放大基础熵源时钟抖动双钟相位漂移成本低、稳定受温漂影响主流方案环形振荡器多环振异或逻辑可实现工艺相关冗余设计电荷噪声电子隧穿泄漏高熵密度工艺门槛高高端芯片健康检测的核心原则可以概括为一句话宁可少出数也不能出坏数。对于密码应用而言随机数发生器若怀疑自身不健康正确做法是报错并阻断密钥生成而不是强行输出可能带偏置的比特。这一点在后续合规举证里会被反复放大。三、GM/T 0005 与 RNG 合规框架3.1 国密随机性检测规范GM/T 0005 是密码行业关于随机性检测的规范它规定了对二元序列开展统计检测的成套方法。规范给出一组检测项每项检测输出一个 P 值再依据 P 值判断该序列在统计意义上是否可视为随机。它的定位是对已经产出的随机数做统计体检而不是规定熵源怎么造。换句话说GM/T 0005 回答的是这批数像不像随机而熵源如何达标则更多参考其他标准里的熵估计要求。在合规落地时检测通常采用如下流程先由硬件随机数发生器产出足够长度的样本例如百万比特级以上再按规范逐项计算 P 值最后统计每个检测项的通过比例。只有当全部检测项的 P 值分布合理、通过率满足阈值才认为该批次随机数具备统计随机性。3.2 与国际标准的对照国密规范并不是孤例国际上同样有成熟的随机数与熵源评估体系。下表把常见标准放在一起对比方便做合规映射。标准 / 规范归属体系关注焦点典型检测方式GM/T 0005国密二元序列统计检测频率、游程、复杂度等GB/T 32915国标二元序列随机性与国密检测互补NIST SP 800-22美国统计测试套件十五类以上统计检测NIST SP 800-90B美国熵源估计最小熵估计方法FIPS 140-3美国模块安全等级含 RNG 要求AIS-31德国真随机源启动与连续检测需要澄清一个常见误解GM/T 0005 与 NIST SP 800-90B 不是替代关系。前者做序列统计体检后者做熵源最小熵估计二者从两个维度共同保证随机数的质量。一个严谨的硬件密码钥匙测评往往会同时引用这两类思路既给出熵源的熵估计下界又给出产出序列的统计检测报告。以安当UKey为例其内部的国密安全芯片在密钥生成路径上依赖硬件级真随机源配合 SM1、SM2、SM3、SM4 以及 RSA、AES、ECC、SHA 等算法协同工作形成从熵采集到密钥落地的闭环。这种芯片内生成、私钥不出芯片的设计正好把随机数质量与私钥保护两件事绑定在一起也让后续的密钥质量举证有了物理支点。四、随机性检测项详解4.1 检测项与判定逻辑GM/T 0005 规定了一组检测项每项都对样本序列施加一个统计量并基于该统计量计算 P 值。判定的逻辑是给定一个显著性水平常用 α0.01若 P 值落在 [α, 1-α] 之外则认为该样本在该项上不通过。对一批样本例如若干段序列则要求通过率不低于某一阈值例如 0.98 左右才能认定整体随机性合格。下面列出规范中常见的检测类别用于说明检测覆盖面检测项检测目的关注特性单比特频率检测0 与 1 是否均衡基本平衡性块内频率检测分段后频率是否均衡局部平衡性扑克检测等长子串分布是否均匀模式均匀度重叠子序列检测重叠模板出现频率短模式相关性游程检测连续相同比特长度分布游程结构块内最长游程检测块内最长连续 1极端游程二元推导检测位移异或后是否仍随机差分随机性自相关检测序列自身偏移相关性周期特征矩阵秩检测子矩阵秩分布线性结构累加和检测偏累积和最大偏移漂移程度近似熵检测子序列模式复杂度序列复杂度线性复杂度检测最短线性反馈长度可预测性通用统计检测压缩比近似熵信息密度离散傅里叶检测频域尖峰周期成分串行检测相邻比特联合分布二阶相关性这些检测从频率、模式、复杂度、相关性、周期等多个角度逼近随机这一概念。任何单一检测都无法证明随机但多项检测同时通过能够从统计意义上提供较强的信心。4.2 用代码复现一项检测为了把规范讲透下面用一段 Python 代码实现单比特频率检测即 GM/T 0005 中的单比特频率检测它检查 0 与 1 的比例是否显著偏离一半。代码仅用于说明统计原理真实测评需按规范完整实现并采用大样本。importmathdefmonobit_test(bits:str): 单比特频率检测检验 0/1 是否大致各占一半 bits: 由 0/1 组成的字符串长度 n 建议 100 位 nlen(bits)ifn0:returnNone# S_n (1 的个数) - (0 的个数)onesbits.count(1)zerosn-ones s_nones-zeros# 统计量近似服从标准正态分布s_obsabs(s_n)/math.sqrt(n)# 双尾 P 值p_valuemath.erfc(s_obs/math.sqrt(2))return{n:n,ones:ones,zeros:zeros,s_obs:round(s_obs,6),p_value:p_value,pass:p_value0.01,# 显著性水平 α0.01}sample1011001110100101101001100101110010110100101101001011010010110101resultmonobit_test(sample)print(result)这段代码的要点在于统计量是样本长度归一化后的偏差P 值由误差补函数给出判定阈值取 α0.01。在工程实践里检测程序会对成千上万段样本分别算 P 值再统计通过比例避免单一样本偶然不通过导致的误判。五、密钥质量举证如何证明密钥真的随机5.1 举证的思路所谓密钥质量举证就是向审计方、监管方或客户证明这台设备生成的密钥确实来自一个健康的随机源而不是可被预测的序列。举证材料通常包括四部分。第一部分是熵源说明描述噪声源的物理机制、混合方式与健康检测策略让评估者理解随机性从何而来。第二部分是随机数检测报告即用 GM/T 0005 或等价的统计套件对大批样本做检测给出每项检测的 P 值分布与通过率。第三部分是熵估计文档参考 NIST SP 800-90B 的思路对熵源做最小熵估计给出每比特熵的下界并据此论证密钥空间充足。第四部分是密钥生成流程证据证明私钥在芯片内部生成、私钥不可导出且随机数在生成密钥前经过健康检测。这部分尤其重要因为即便随机数本身合格如果私钥在生成后又被明文导出到不安全环境举证就不成立。5.2 芯片内生成与不可导出密钥质量的另一半来自私钥不出芯片。以安当UKey为例其 SM2 密钥对由芯片内部的安全运算单元生成私钥被锁定在安全存储区对外只暴露签名、验签、加密、解密等接口而不暴露私钥明文。这样的设计带来两个直接好处一是攻击者无法从设备外读取私钥从根本上消除了私钥泄露后再被分析的链路二是随机数到私钥的这一步转换全程在芯片内完成随机数在离开安全边界之前就已经被消耗为密钥材料不会被中途截获复用。在签名验签场景中这种闭环特别关键。服务端下发挑战值设备用内部私钥对挑战值做 SM2 签名服务端用预置公钥验签。整个过程中私钥始终未离开芯片随机数的作用被限制在设备内部外部能观测到的只有签名结果。即便攻击者截获了大量签名也无法反推私钥更无法利用可能的随机数缺陷去还原密钥——因为缺陷若导致重复随机数其后果也只在芯片内部被健康检测捕获。下面给出一段示意性的 C 动态库调用代码用于说明密钥在设备内生成、仅返回公钥的接口形态。代码为说明结构非真实完整实现/* 伪代码通过 C 动态库在硬件内生成 SM2 密钥对私钥不可导出 */#includestdint.h/* 返回值0 成功非 0 失败 */typedefint(*ukey_gen_sm2_keypair_t)(uint32_thandle,/* 设备句柄 */uint8_t*pubkey,/* 输出SM2 公钥可导出 */uint32_t*pubkey_len,/* 输入/输出公钥长度 */uint8_t*keyid,/* 输出密钥槽标识用于后续签名 */uint32_t*keyid_len);/* 签名私钥始终留在设备内仅返回签名值 */typedefint(*ukey_sm2_sign_t)(uint32_thandle,constuint8_t*keyid,uint32_tkeyid_len,constuint8_t*digest,/* SM3 摘要 */uint32_tdigest_len,uint8_t*signature,/* 输出签名值 */uint32_t*sig_len);这段接口设计传达了一个重要理念公钥可以导出用于分发与验签而私钥对应的密钥槽标识keyid只用于后续在设备内引用私钥明文永远不会出现在调用边界之外。这与私钥不可导出的合规要求是吻合的。5.3 四认证方案下的随机性角色在实际业务里硬件密码钥匙常见的认证方案可以归纳为四类基于 KeyID 映射到用户名的轻量绑定、基于 KeyID 的签名验签强认证、基于 CA 证书的身份凭证以及组合式方案。无论哪种方案随机数都扮演底层支撑角色。以 KeyID 到签名验签为例设备插入后服务端发起挑战设备用内部私钥签名服务端验签通过即确认持有者身份。这里随机数的质量决定了挑战被成功预测的概率——若随机数弱攻击者可能重放历史签名或构造碰撞。把随机数质量与私钥保护同时做扎实认证的抗伪造能力才有保障。六、芯片安全认证与固件签名6.1 安全等级与物理防护硬件密码钥匙的随机数质量还要放在芯片整体安全认证的框架下看。GM/T 0028 对密码模块提出了分级的安全要求等级从低到高对应不同的物理防护、角色认证、自毁与侧信道防护强度。高安全等级要求芯片具备抗拆解、抗探针、抗功耗分析等能力防止攻击者通过物理手段窥探内部状态包括窥探随机数发生器的中间寄存器。固件签名是另一道防线。设备内的固件如果可以被篡改攻击者在固件层植入后门、固定随机数种子就能从根源破坏随机性。因此合规设备会对固件做签名验签只有持有合法签名密钥的固件才能被加载运行任何未经签名的镜像都会被拒绝启动。硬件加密与固件签名共同构成算得对、也跑得正的双重保障。下表归纳不同安全等级对随机数与密钥保护的大致要求侧重安全等级侧重物理防护随机数要求密钥保护基础级基本封装统计检测通过存储加密增强级防拆解健康检测完备私钥不出芯片高级抗侧信道熵估计达标自毁与隔离6.2 侧信道与随机数侧信道攻击通过功耗、电磁辐射、计时等旁路信息推断内部运算。对于随机数发生器而言如果熵源电路在侧信道下表现出可被区分的特征攻击者可能从功耗曲线里恢复部分随机比特。高等级芯片会加入平衡功耗设计、随机掩码、噪声注入等手段让外部观测与内部状态之间失去可量化的关联。这也解释了为什么随机数质量不是一个孤立指标而是和整颗芯片的防护体系绑定的。七、工程落地与开发集成7.1 五大应用方向回到硬件密码钥匙的落地场景其能力通常围绕五个方向组织Web 双因素认证、C/S 架构下的客户端认证、软件授权保护、会话加密、以及操作系统双因素登录。这五个方向虽然业务形态不同但底层都依赖同一套密码原语——高质量的随机数、可靠的私钥存储、以及标准的签名验签流程。在 Web 双因素认证里设备提供持有因素配合口令构成双因子在 C/S 认证里客户端用设备内的私钥完成强身份校验软件授权保护用设备内密钥对授权文件签名验签防止软件被非法复制会话加密用设备协商或保护会话密钥保障远程接入过程中的数据机密性操作系统双因素则是在登录环节叠加硬件持有因子。可以看到随机数质量在每一环都起到基础作用。7.2 接口与开发形态工程上这类设备一般提供两类集成接口。一类是 RESTful 风格的接口适合服务端、Web 后端以标准请求方式调用便于在云环境或容器化架构里集成另一类是 C 动态库适合需要本地高性能、低延迟调用的客户端或中间件。两类接口在底层都指向同一颗安全芯片区别只在调用边界的形态。以典型调用链为例应用层请求生成密钥或执行签名中间层把请求翻译为设备指令设备内的三十二位精简指令集芯片在安全存储与运算单元上完成随机源采样、密钥生成、签名运算最后只把结果回传。芯片上的存储容量约一百二十八千字节用于容纳算法程序、密钥槽与运行时状态整条链路在硬件边界内闭合。7.3 信创适配与合规闭环在信创环境中设备需要适配国产处理器、操作系统与中间件确保从驱动到应用接口都能在自主技术栈上稳定运行。信创认证的核心不在于某个单项指标而在于整条技术链路的可控与可验证。把国密算法、硬件随机源、私钥不可导出、固件签名、安全芯片认证串成一条闭环才能在审计时提供完整证据链随机数来自合规熵源、密钥在芯片内生成、私钥从不导出、固件不可篡改、模块达到相应安全等级。对于开发团队而言落地时的注意力应放在三件事上一是选型的设备是否提供 GM/T 0005 检测报告与熵估计材料二是集成接口是否满足业务的性能与部署形态RESTful 或 C 动态库三是运行期是否具备随机数健康检测的失败阻断机制。把这三点确认清楚随机性相关的合规风险就能被显著压低。方案参考在评估或落地任意一款硬件密码钥匙时建议遵循一套与具体品牌无关的方法论把随机数质量从一个模糊诉求变成可验证的工程指标。第一建立熵源档案。要求设备方提供噪声源的物理机制说明、混合方式、健康检测策略启动检测、连续检测、在线统计检测以及失败处理流程。重点确认健康检测在异常时是阻断输出而非继续输出。第二开展统计检测。依据 GM/T 0005或等价的国密/国标随机性检测规范对大批量样本做全套检测记录每项检测的 P 值分布与整体通过率并保存原始样本以便复算。检测样本量应足够大避免小样本带来的偶然偏差。第三补充熵估计。在统计检测之外按熵源评估的思路做最小熵估计给出每比特熵的下界论证密钥空间在理论上是充足的。统计检测证明序列像随机熵估计证明源头够随机两者互为补充。第四闭合密钥生成证据。确认私钥在设备内生成且明文不可导出随机数在进入密钥生成前经过健康检测。只有随机数合格、密钥内部生成、私钥不离开边界这三点同时成立密钥质量举证才算完整。第五纳入模块安全框架。把随机数质量与芯片安全等级、固件签名、侧信道防护放在一起评估而不是孤立看待。同时建立运行期监测对随机数健康检测告警、固件校验失败、异常签名频率等指标做常态化记录与复核。最后保留可追溯的测评材料与版本化接口契约。每次算法库、固件或驱动变更都应重新走一遍检测与举证流程确保证据链随版本演进持续有效。这样的闭环不依赖单一产品能力而是一套可复制、可审计、可复现的通用落地路径。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑