GM/T 0047-2024 安全电子签章密码检测规范:从算法到合规的全链路检测指南

标准规范 · 2026-08-30

概述

GM/T 0047-2024《安全电子签章密码检测规范》是国密电子签章领域最重要的检测标准之一,于 2024 年发布并替代了原有的 GM/T 0047-2016 版本。该标准规定了安全电子签章系统的密码检测要求、检测方法和判定准则,适用于密码检测机构对电子签章产品进行合规性检测。

核心问题:如何验证一个电子签章系统是否符合国密标准?答案就在 GM/T 0047-2024。

标准定位与适用范围

1. 标准体系中的位置

GM/T 0047 在国密标准体系中处于"检测层"的关键位置:

层级标准作用
基础层GM/T 0044-2016(SM9)定义算法原型
规范层GM/T 0031-2025规定技术要求
检测层GM/T 0047-2024提供检测方法
实施层GM/T 0131-2023定义接口规范

2. 检测对象

本标准适用于以下电子签章产品的密码检测:

  • 电子签章系统软件
  • 云签章服务平台
  • 电子印章硬件设备
  • 签章中间件组件

3. 检测级别

根据被测系统的安全等级,检测分为两个级别:

级别适用场景检测深度
一级普通商业合同签章基本功能检测
二级金融、政务等高安全场景完整安全检测

检测内容详解

1. 算法合规性检测

#### 1.1 SM2 签名算法检测

GM/T 0047-2024 明确要求电子签章必须使用 SM2 算法进行签名,检测内容包括:

CODE
检测项目:SM2 签名算法
检测范围:密钥长度、签名生成、签名验证
判定标准:符合 GM/T 0003.2-2012 要求

检测方法:

  • 使用标准测试向量验证 SM2 签名算法实现
  • 检查密钥长度是否为 256 位
  • 验证签名格式是否符合 PKCS#7/CMS 结构
#### 1.2 SM3 哈希算法检测

电子签章的数据完整性保护依赖于 SM3 哈希算法:

检测项要求检测方法
哈希长度256 位输出长度验证
碰撞抗性符合密码学安全要求理论分析 + 测试向量
标准符合性GB/T 32905-2016对照标准文档
#### 1.3 SM4 加密算法检测

用于签章数据的加密保护:

CODE
检测项目:SM4 加密算法
密钥长度:128 位
工作模式:ECB/CBC/GCM
填充方式:PKCS#5/PKCS#7

2. 签章数据结构检测

#### 2.1 CAdES 格式检测

GM/T 0047-2024 规定电子签章应采用 CAdES(CMS Advanced Electronic Signatures)格式:

关键检测点:

  • 签名属性完整性:检查 signaturePolicyId、signingTime 等必填属性
  • 证书链验证:验证证书链是否完整且有效
  • 时间戳验证:检查签名时间戳是否符合 RFC 3161 或 GM/T 0033-2023
#### 2.2 PAdES 格式检测

对于 PDF 文档签章,需符合 PAdES(PDF Advanced Electronic Signatures)标准:

检测项标准要求
PDF 版本≥ 1.7
签名字段符合 ISO 32000-2
可见性支持可见/不可见签章

3. 密钥管理检测

#### 3.1 密钥生成检测

检测项要求检测方法
随机性符合 GM/T 0005-2012NIST SP 800-22 测试套件
密钥长度SM2: 256位, SM4: 128位直接测量
熵源硬件 RNG 或 CSPRNG源代码审查
#### 3.2 密钥存储检测

检测密钥在存储时的保护机制:

  • 软件密钥:是否加密存储,密钥派生是否安全
  • 硬件密钥:是否存储在安全芯片/USBKey 中
  • 传输密钥:是否使用数字信封保护

4. 签名流程检测

#### 4.1 签名过程完整性

检测电子签章系统的签名流程是否符合标准:

CODE
步骤 1: 计算文档哈希 (SM3)
步骤 2: 用签名私钥生成 SM2 签名
步骤 3: 构建 CMS/PKCS#7 签名包
步骤 4: 添加时间戳 (可选但推荐)
步骤 5: 输出最终签章数据

#### 4.2 验签流程检测

验证签章的系统必须能够:

  • 解析 CMS 签名结构
  • 提取签名者和证书信息
  • 验证签名有效性
  • 验证时间戳有效性
  • 报告验证结果

检测工具与方法

1. 自动化检测工具

GM/T 0047-2024 推荐使用以下检测工具:

工具类型示例用途
算法测试OpenSSL/gmssl CLISM2/SM3/SM4 算法验证
结构分析ASN.1 解析器CMS 数据结构检查
证书验证OpenSSL verify证书链验证
完整性检查Python hashlib哈希算法验证

2. 手动检测示例

#### 2.1 SM2 签名验证

#### 2.2 CMS 签名解析

常见问题与解决方案

问题 1: SM2 签名验证失败

现象:验签返回 False,但密钥对正确。

原因:

  • ZA 值计算错误(缺少 identity 或 ENTLEN)
  • 哈希算法使用错误(用了 SHA-256 而非 SM3)
解决:
PYTHON
# 正确用法:gmssl 内部自动硬编码 user_id
from gmssl import sm2

# CryptSM2 无需 user_id 参数(library 内部固定为 '1234567812345678')
crypt = sm2.CryptSM2(
    public_key=pub_key,
    private_key=priv_key
)
# ZA 值由库内部自动计算,符合 GM/T 0009 规范

问题 2: 时间戳验证失败

现象:签章有效,但时间戳验证报错。

原因:

  • 时间戳令牌格式不符合 RFC 3161
  • 时间戳证书的信任链不完整
解决:
  • 使用符合 GM/T 0033-2023 的时间戳服务
  • 确保证书签发机构在信任库中

问题 3: 证书链验证不通过

现象:verify 返回 CERTIFICATE_VERIFY_FAILED。

原因:

  • 中间证书缺失
  • 根证书不在信任库
  • 证书已吊销未检查 CRL/OCSP
解决:
BASH
# 检查证书链
openssl verify -CAfile root_ca.pem -untrusted inter_ca.pem signer.pem

# 检查 CRL
openssl crl -in crl.pem -text -noout

合规实施建议

1. 检测机构实施要点

  • 检测环境准备
- 安装 gmssl 3.2+ 或 Tongsuo - 准备标准测试向量库 - 建立证书信任库

  • 检测流程标准化
- 制定详细的检查清单(Checklist) - 记录所有测试结果 - 生成标准化检测报告

2. 厂商合规自查清单

检测项自查方法通过标准
SM2 签名正确性使用标准测试向量全部通过
签名格式合规性ASN.1 解析检查符合 CMS 结构
时间戳有效性验证时间戳令牌符合 RFC 3161
证书链完整性OpenSSL verify无错误
密钥安全性检查密钥存储方式硬件保护或加密存储

与相关标准的关系

1. 与 GM/T 0031-2025 的关系

GM/T 0047 是 GM/T 0031 的检测配套标准:

标准性质内容
GM/T 0031-2025技术规范规定"应该怎么做"
GM/T 0047-2024检测规范规定"如何验证"

2. 与 GB/T 38540-2020 的关系

两者互为补充:

  • GB/T 38540-2020:国家标准,范围更广,含管理要求
  • GM/T 0047-2024:行业标准,专注密码技术检测

3. 检测标准链条

CODE
GM/T 0031-2025 (技术要求)
       ↓
GM/T 0047-2024 (检测方法)
       ↓
密评报告 (合规证明)

总结

GM/T 0047-2024 是电子签章产品合规检测的核心标准,覆盖了从算法验证到数据格式检查的完整检测链条。对于检测机构,它提供了标准化的检测方法;对于厂商,它是产品合规的自查指南。

关键要点:

  • 所有密码算法必须使用国密标准(SM2/SM3/SM4)
  • 签章数据格式必须符合 CAdES/PAdES 规范
  • 密钥管理必须满足安全存储要求
  • 时间戳和证书链验证是必检项
后续行动:建议检测机构按照本标准建立完整的检测能力,厂商在产品发布前完成自查。


参考标准:

相关实践: