GM/T 0005-2012《随机性检测规范》标准深度解读:从统计测试到密评合规

标准规范 · 2026-07-26

概述

随机数是密码系统的血液——密钥生成、Nonce 初始化、IV 填充、挑战-响应协议,每一个环节都依赖高质量的随机数。一旦随机数生成器存在缺陷,整个密码系统的安全性就会像地基不牢的大厦一样轰然倒塌。

GM/T 0005-2012《随机性检测规范》是中国密码管理局发布的行业标准,规定了随机数生成器的检测方法和判定准则。它是密评(密码应用安全性评估)中随机数检测环节的核心依据,也是密码模块安全认证(GM/T 0028-2014)的重要组成部分。

本文将从标准背景、理论基础、检测方法、密评关联、国际对比和工程实践六个维度,对 GM/T 0005-2012 进行深度解读,帮助读者理解:

  • 为什么随机性检测如此重要?
  • GM/T 0005 规定了哪些检测项目?
  • 如何在实际工程中通过随机性检测?
  • 密评中随机性检测的判定标准是什么?

标准背景与适用范围

为什么需要随机性检测标准

密码学中有一句名言:"如果你的随机数是可预测的,那么你的密码系统就是透明的。"历史上,随机数生成器的缺陷曾多次导致严重的安全事故:

  • 2008 年 Debian OpenSSL 随机数漏洞:由于代码注释错误,OpenSSL 的随机数生成器唯一熵源变为进程 ID(PID),导致生成的密钥空间从 2^128 骤降至 2^15,所有由此生成的 SSH 密钥和 SSL 证书都可被暴力破解。
  • 2013 年 Dual_EC_DRBG 后门:NIST 标准中推荐的椭圆曲线随机数生成器被证实存在 NSA 植入的后门,利用内部参数可预测输出序列。
  • 物联网设备弱随机数:大量 IoT 设备因硬件熵源不足,启动时生成相同或可预测的密钥,导致大规模设备被劫持。
这些案例表明:随机数质量不能假设,必须检测

GM/T 0005 在标准体系中的位置

GM/T 0005-2012 是中国商用密码标准体系中的基础性标准,与以下标准构成紧密的引用关系:

  • GM/T 0004-2012《SM3 密码杂凑算法》:SM3 哈希函数常用于随机数生成器的熵提取和条件处理。
  • GM/T 0028-2014《密码模块安全技术要求》:密码模块的随机数生成功能必须通过 GM/T 0005 的检测。
  • GM/T 0054-2018《信息系统密码应用基本要求》:等保密码要求中,随机数生成是物理安全、网络安全、主机安全等多个层面的必查项。
  • GB/T 39786-2021《信息系统密码应用基本要求》:密评中随机性检测的执行依据。

适用范围

GM/T 0005-2012 适用于以下场景的随机性检测:

  • 密码模块(如加密机、智能密码钥匙、安全芯片)的随机数生成功能
  • 信息系统中使用的随机数生成器
  • 第三方检测机构对随机数生成器的检测评估
  • 密评中对随机数生成环节的合规性判定

随机性检测的理论基础

统计假设检验框架

随机性检测的核心方法是统计假设检验。其基本思路是:

  • 零假设(H₀):被测序列是真正随机的。
  • 检验统计量:根据序列特征计算一个数值(如频率、游程长度、矩阵秩等)。
  • P 值:在零假设成立的前提下,观察到当前统计量(或更极端值)的概率。
  • 判定:若 P 值小于显著性水平 α(通常取 0.01),则拒绝零假设,认为序列不随机。
GM/T 0005 中的每一项检测都遵循这一框架。需要注意的是:
  • 第一类错误(α 错误):将随机序列误判为不随机。α = 0.01 意味着 1% 的随机序列会被误杀。
  • 第二类错误(β 错误):将不随机序列误判为随机。β 错误取决于检测的功效(power)。

熵源与熵估计

随机数生成器分为两类:

  • 真随机数生成器(TRNG):依赖物理噪声源(如热噪声、振荡器抖动、量子效应)。
  • 伪随机数生成器(PRNG):利用确定性算法(如 Hash-DRBG、HMAC-DRBG、CTR-DRBG)将短种子扩展为长序列。
GM/T 0005 的检测对象主要是 PRNG 的输出,但也适用于 TRNG 后处理后的输出。检测的核心是判断输出序列是否具有足够的统计随机性,而不论其内部实现。

随机性检测的局限性

统计检测有一个根本局限:任何有限的统计检测都无法证明一个序列是真正随机的。通过所有统计检测的序列,可能只是"看起来随机",但实际上是由精心构造的确定性算法生成的。

因此,GM/T 0005 的检测结果应当与设计审查熵源评估结合使用,形成"设计-实现-检测"三位一体的随机数安全保障体系。

检测方法与流程

检测流程概览

GM/T 0005-2012 规定的检测流程包括以下步骤:

  • 样品采集:从被测随机数生成器采集足够数量的样本。
  • 样本准备:将原始输出转换为二进制序列。
  • 统计检测:逐项执行标准规定的统计检测。
  • 结果判定:根据 P 值和通过率判定是否合格。
  • 报告出具:记录检测过程、数据和结论。

样本要求

样本质量直接影响检测结果的可靠性。GM/T 0005 对样本有以下要求:

  • 样本长度:每个样本通常为 10^6 比特(具体长度取决于检测项目)。
  • 样本数量:通常需要 100 个或更多独立样本。
  • 独立性:样本之间必须相互独立,避免相关性干扰。

统计检测项目

GM/T 0005 规定了一系列统计检测项目,用于从不同角度评估序列的随机性。这些检测项目可以分为以下几类:

频率类检测

  • 单比特频率检测:检验 0 和 1 的出现概率是否接近 1/2。
  • 块内频率检测:将序列分块,检验每块内 0/1 频率是否均匀。
游程类检测
  • 游程总数检测:检验 0 和 1 的游程总数是否符合随机序列的期望。
  • 最长游程检测:检验最长连续 1 游程的长度是否异常。
矩阵与变换类检测
  • 二进制矩阵秩检测:检验子序列构成的矩阵的秩分布。
  • 离散傅里叶变换(DFT)检测:检验序列的频域特征是否存在周期性。
模板匹配类检测
  • 非重叠模板匹配检测:检验特定模式(如连续 9 个 1)的出现频率。
  • 重叠模板匹配检测:同上,但允许重叠匹配。
复杂度类检测
  • 线性复杂度检测:检验序列的线性反馈移位寄存器(LFSR)复杂度。
  • 序列检测:检验不同长度子序列的出现频率是否均匀。
熵类检测
  • 近似熵检测:比较相邻长度子序列的频率差异。
  • 累积和检测:检验序列的累积和是否偏离随机游走。

判定规则

GM/T 0005 的判定规则通常包括两个层面:

  • 单样本判定:对每个样本的每个检测项目,计算 P 值。若 P 值 ≥ α(通常 0.01),则该项目通过。
  • 总体判定:在所有样本中,计算每个检测项目的通过率。若通过率 ≥ 某个阈值(通常 96%),则该检测项目总体通过。
只有当所有检测项目都总体通过时,被测随机数生成器才判定为"合格"。

与密评的关联

密评中的随机数检测要求

在密评(依据 GB/T 39786-2021 和 GM/T 0054-2018)中,随机数生成是多个安全层面的必查项:

  • 物理安全:机房物理随机数生成器(如量子随机数发生器)的部署和检测。
  • 网络安全:TLS/SSL 协议中随机数的质量。
  • 主机安全:操作系统随机数生成器(/dev/urandom、CryptGenRandom)的配置和检测。
  • 应用安全:应用系统中随机数生成的实现和检测。
  • 数据安全:数据加密、签名中随机数的质量。
密评中,随机数检测通常包括:
  • 设计审查:检查随机数生成器的设计是否符合标准(如使用 SM3 进行熵提取)。
  • 实现审查:检查代码实现是否正确(如种子管理、重播种机制)。
  • 统计检测:使用 GM/T 0005 对实际输出进行统计检测。

常见不合格项

根据实战经验,密评中随机数检测的常见不合格项包括:

  • 使用非密码学安全 PRNG:如 C 库的 rand()、Java 的 java.util.Random、Python 的 random 模块。这些 PRNG 不应用于密码学场景。
  • 熵源不足:TRNG 的物理噪声源不稳定,或 PRNG 的种子熵不足。
  • 重播种机制缺失:PRNG 长时间运行不重播种,导致状态泄露风险增加。
  • 统计检测未通过:实际输出存在统计偏差,未通过 GM/T 0005 检测。
  • 检测记录缺失:无法提供随机数检测的原始数据和报告。

整改建议

针对上述不合格项,常见的整改措施:

  • 替换非密码学安全 PRNG 为密码学安全 PRNG(如 /dev/urandom、getrandom()、CryptGenRandom)。
  • 增加硬件熵源(如 Intel RDRAND/RDSEED、硬件随机数发生器)。
  • 实现定期重播种机制。
  • 委托第三方检测机构进行 GM/T 0005 统计检测并出具报告。
  • 建立随机数检测的常态化机制,保留检测记录。

国际对比

NIST SP 800-90B

NIST SP 800-90B《Recommendation for the Entropy Sources Used for Random Bit Generation》是美国国家标准,规定了熵源的设计和评估方法。与 GM/T 0005 的主要区别:

  • 侧重点不同:SP 800-90B 侧重于熵源评估(设计层面),GM/T 0005 侧重于输出统计检测(实现层面)。
  • 方法不同:SP 800-90B 使用熵估计方法(如最小熵估计),GM/T 0005 使用统计假设检验。
  • 互补关系:两者可以结合使用,SP 800-90B 评估熵源质量,GM/T 0005 验证输出随机性。

AIS 31

AIS 31(Anforderungskatalog für Zufallsgeneratoren)是德国联邦信息安全局(BSI)发布的随机数生成器评估标准,广泛用于欧洲的安全认证(如 CC 认证)。与 GM/T 0005 相比:

  • 检测项目类似:两者都包含频率检测、游程检测、模板匹配等。
  • 判定标准不同:AIS 31 的判定标准更为严格,要求更高的通过率。
  • 应用场景不同:AIS 31 主要用于 CC 认证,GM/T 0005 主要用于中国密评。

FIPS 140-3

FIPS 140-3 是美国联邦信息处理标准,规定了密码模块的安全要求。其中,随机数生成是密码模块的必测项。FIPS 140-3 引用 SP 800-90B 进行熵源评估,同时要求进行统计检测(通常引用 SP 800-22,与 GM/T 0005 类似)。

工程实践

检测工具

进行 GM/T 0005 统计检测,可以使用以下工具:

  • NIST STS(Statistical Test Suite):NIST 发布的开源统计检测工具,实现了 SP 800-22 的检测项目。虽然不完全等同于 GM/T 0005,但检测原理相似,可作为参考。
  • TestU01:加拿大蒙特利尔大学开发的随机数检测库,包含 BigCrush、Crush、SmallCrush 三套检测套件,检测项目比 GM/T 0005 更全面。
  • dieharder:基于 Diehard 检测套件的开源工具,包含多种统计检测。
  • 自研工具:根据 GM/T 0005 的检测规范自行实现检测算法。

检测流程示例

以下是一个典型的随机数检测流程示例,展示了单比特频率检测和游程检测的实现:

密评中的证据准备

在密评中,随机数检测需要准备以下证据:

  • 设计文档:随机数生成器的设计说明,包括熵源类型、算法选择、重播种策略。
  • 实现代码:随机数生成的源代码或配置说明。
  • 检测报告:由第三方检测机构出具的 GM/T 0005 检测报告,包含样本信息、检测项目、P 值、通过率、判定结论。
  • 运维记录:随机数生成器的定期检测记录。

总结

GM/T 0005-2012《随机性检测规范》是密码系统中随机数质量保障的核心标准。通过系统的统计检测,可以有效发现随机数生成器的统计偏差,为密评提供客观的合规证据。

核心要点回顾

  • 随机数质量直接影响密码系统的安全性,不能假设,必须检测。
  • GM/T 0005 使用统计假设检验框架,通过 P 值和通过率判定随机性。
  • 密评中随机数检测包括设计审查、实现审查和统计检测三个层面。
  • 常见不合格项包括使用非密码学安全 PRNG、熵源不足、重播种机制缺失。
  • 国际上有 NIST SP 800-90B、AIS 31、FIPS 140-3 等类似标准,各有侧重。
实践建议
  • 在系统设计阶段就选择经过认证的随机数生成器。
  • 定期进行统计检测并保留检测记录。
  • 密评前委托第三方机构进行预检测,提前发现问题。

相关实践

参考来源

  • GM/T 0005-2012《随机性检测规范》
  • GM/T 0004-2012《SM3 密码杂凑算法》
  • GM/T 0028-2014《密码模块安全技术要求》
  • GB/T 39786-2021《信息系统密码应用基本要求》
  • NIST SP 800-90B《Recommendation for the Entropy Sources Used for Random Bit Generation》
  • NIST SP 800-22《A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications》