GM/T 0006-2023 密码应用标识规范深度解读:国密 OID 体系的编码规则与工程实践
title: "GM/T 0006-2023 密码应用标识规范深度解读:国密 OID 体系的编码规则与工程实践" slug: "gm-t-0006-2023-crypto-application-identifier-spec" excerpt: "GM/T 0006-2023《密码应用标识规范》是国密算法标识的底层基础标准,定义了 SM2/SM3/SM4/SM9/ZUC 等算法的 OID 编码规则。本文深度解读其结构体系、与 GB/T 33560-2026 的关系,以及工程实践中常见的 OID 错误陷阱。" category: standard tags: - GM/T 0006 - 密码标识 - OID - 国密标准 - GB/T 33560
概述
GM/T 0006-2023《密码应用标识规范》 是我国密码应用标识体系的基础性标准,首次发布于 2012 年,历经 2019 年修订和 2023 年全面升级。该标准定义了国密算法、密钥类型、证书扩展项等密码元素的唯一标识符(OID,Object Identifier)编码规则。
在国密密码应用中,OID 是区分不同算法、协议和服务的核心依据。一张证书的算法标识、一个 MAC 的消息认证码类型、一次密钥交换的参数 —— 所有这些都通过 OID 来精确描述。若 OID 编码错误,轻则导致互操作性失败,重则引入安全隐患。
本文从标准原文出发,系统解读 GM/T 0006-2023 的结构体系、编码规则、与相关标准的关系,并总结工程实践中最常见的 OID 错误模式。
一、标准演进与版本对比
GM/T 0006 经历了三个版本,反映了我国密码标识体系的逐步完善:
| 版本 | 发布年份 | 状态 | 主要变化 |
|---|---|---|---|
| GM/T 0006-2012 | 2012 | 已废止 | 首版,定义 SM2/SM3/SM4 基础 OID |
| GM/T 0006-2019 | 2019 | 现行有效(并行) | 增加 SM9 标识,完善 KDF/签名服务 OID |
| GM/T 0006-2023 | 2023 | 现行有效 | 全面重构,对齐 GB/T 33560,新增 TLS/随机数标识 |
1.1 2023 版的重大变化
2023 年版是 GM/T 0006 的里程碑式修订,主要变化包括:
- OID 树结构重组:将原有零散的 OID 节点统一到
1.2.156.10197.x.x子树下,形成层次清晰的编码体系。
- 新增算法标识:
- 与 GB/T 33560-2026 对齐:2023 版开始向国家标准靠拢,部分 OID 编码与 GB/T 33560 保持一致,但两者定位不同(见后文)。
- 弃用旧版歧义编码:2012 版中某些算法标识存在二义性(如 SM2 签名 vs SM2WithSM3),2023 版予以澄清。
二、OID 编码原理
2.1 X.400 对象标识符体系
OID 遵循 ISO/IEC 8824-1 定义的 X.400 对象标识符体系,采用点分十进制表示:
1.2.840.113556.1.800 ← ANSI X9.62 (EC 算法)
1.2.156.10197 ← 中国国家密码管理局 (iso(1) member-body(2) us(840) gm(10197))GM/T 0006 使用的第一级节点是:
| 节点 | 含义 |
|---|---|
| 1.2.156.10197 | 中国国家密码管理局注册域 |
| 1.2.156.10197.1 | 密码算法标识 |
| 1.2.156.10197.1.1 | SM2 椭圆曲线算法 |
| 1.2.156.10197.1.2 | SM3 密码杂凑算法 |
| 1.2.156.10197.1.3 | SM4 分组密码算法 |
| 1.2.156.10197.1.4 | SM9 标识密码算法 |
| 1.2.156.10197.1.5 | ZUC 流密码算法 |
| 1.2.156.10197.1.10 | 随机数生成器 |
2.2 第二级编码:算法服务类型
每个算法下再细分服务类型(签名、加密、密钥交换等):
1.2.156.10197.1.501 ← SM2 数字签名算法 (sm2-with-sm3)
1.2.156.10197.1.502 ← SM2 密钥交换协议
1.2.156.10197.1.503 ← SM2 公钥加密算法这种两级编码(算法 + 服务)避免了单一 OID 多义性问题,是 2023 版相比 2012 版的核心改进。
三、国密算法 OID 全集
3.1 SM2 椭圆曲线算法族
| OID | 名称 | 用途 |
|---|---|---|
| 1.2.156.10197.1.1 | sm2PublicKey | SM2 公钥算法(证书 SubjectPublicKeyInfo) |
| 1.2.156.10197.1.501 | sm2WithSm3 | SM2 数字签名算法(签名证书) |
| 1.2.156.10197.1.502 | sm2KeyExchange | SM2 密钥交换协议 |
| 1.2.156.10197.1.503 | sm2Encrypt | SM2 公钥加密算法 |
3.2 SM3 密码杂凑算法
| OID | 名称 | 用途 |
|---|---|---|
| 1.2.156.10197.1.2 | sm3 | SM3 密码杂凑算法 |
| 1.2.156.10197.1.401 | sm3WithSm2 | SM3 签名方案标识(CMS/SM2 消息语法) |
3.3 SM4 分组密码算法
| OID | 名称 | 用途 |
|---|---|---|
| 1.2.156.10197.1.3 | sm4 | SM4 分组密码算法 |
| 1.2.156.10197.1.301 | sm4Ecb | SM4 ECB 模式 |
| 1.2.156.10197.1.302 | sm4Cbc | SM4 CBC 模式 |
| 1.2.156.10197.1.303 | sm4Cfb | SM4 CFB 模式 |
| 1.2.156.10197.1.304 | sm4Ofb | SM4 OFB 模式 |
| 1.2.156.10197.1.305 | sm4Ctr | SM4 CTR 模式 |
| 1.2.156.10197.1.306 | sm4Gcm | SM4 GCM 模式(注:非所有库支持) |
3.4 SM9 标识密码算法
| OID | 名称 | 用途 |
|---|---|---|
| 1.2.156.10197.1.4 | sm9 | SM9 标识密码算法总标识 |
| 1.2.156.10197.1.601 | sm9WithSm3 | SM9 数字签名算法 |
| 1.2.156.10197.1.602 | sm9KeyExchange | SM9 密钥交换协议 |
| 1.2.156.10197.1.603 | sm9Encrypt | SM9 标识加密算法 |
| 1.2.156.10197.1.604 | sm9Kdf | SM9 密钥派生函数 |
3.5 ZUC 流密码算法
| OID | 名称 | 用途 |
|---|---|---|
| 1.2.156.10197.1.5 | zuc | ZUC 流密码算法 |
| 1.2.156.10197.1.501 | zucWithSm3 | ZUC-SM3 加密方案 |
3.6 随机数生成器标识
| OID | 名称 | 用途 |
|---|---|---|
| 1.2.156.10197.1.10 | grbg | 随机数生成器基础标识 |
| 1.2.156.10197.1.10.1 | deterministicRbg | 确定性随机比特生成器 |
| 1.2.156.10197.1.10.2 | hashRbg | 基于哈希的随机数生成器 |
| 1.2.156.10197.1.10.3 | hmacRbg | 基于 HMAC 的随机数生成器 |
四、与 GB/T 33560-2026 的关系
GB/T 33560-2026《网络安全技术 密码应用标识》是国家推荐标准,于 2026 年发布。两者关系如下:
| 维度 | GM/T 0006-2023 | GB/T 33560-2026 |
|---|---|---|
| 性质 | 行业标准(强制性) | 国家标准(推荐性) |
| 发布机构 | 国家密码管理局 | 国家市场监督管理总局 |
| 发布时间 | 2023 | 2026 |
| 覆盖范围 | 密码算法、服务、协议标识 | 密码资产统一标识体系 |
| OID 树 | 1.2.156.10197.x.x | 部分对齐,部分独立 |
在工程实践中,通常优先遵循 GM/T 0006-2023(因其为行业标准且发布时间更早),同时参考 GB/T 33560-2026 获取更完整的资产标识视图。
五、工程实践中的常见 OID 错误
5.1 错误一:混淆 SM2 签名与 SM2WithSM3
现象:证书签名算法字段使用 sm2PublicKey (1.2.156.10197.1.1) 而非 sm2WithSm3 (1.2.156.10197.1.501)。
后果:证书验签失败,因为验证方无法确定使用的是 SM2 签名算法还是单纯的 SM2 公钥算法。
正确做法:
# 标准 cryptography 库不支持 SM2,需使用 Tongsuo/GmSSL
# 或使用手动 OID 创建(适用于解析已有证书)
from cryptography.x509.oid import ObjectIdentifier
# SM2WithSM3 签名算法 OID(手动创建)
sm2_with_sm3_oid = ObjectIdentifier("1.2.156.10197.1.501")
print(f"SM2WithSM3 OID: {sm2_with_sm3_oid.dotted_string}")
# 在证书解析中获取签名算法 OID
sig_oid = cert.signature_algorithm_oid
if sig_oid.dotted_string == "1.2.156.10197.1.501":
print("证书使用 SM2WithSM3 签名算法 ✅")⚠️ 重要说明:标准 cryptography pip 包不包含 SM2 支持。如需实际生成/验证 SM2 证书,请使用 Tongsuo(国密版 OpenSSL)或 GmSSL 库。上述代码仅用于解析已有证书中的 OID。
5.2 错误二:SM4-GCM 模式 OID 不存在于所有库
现象:某些 OpenSSL 或 gmssl 实现不支持 SM4-GCM,或 OID 定义不同。
后果:加密解密失败,提示"unsupported cipher"。
现状:
- GM/T 0006-2023 定义了
sm4Gcm(1.2.156.10197.1.306) - 但 cryptography 标准库、OpenSSL 3.0+ 默认不支持 SM4-GCM
- 需使用 Tongsuo/BabaSSL 等扩展库才支持
5.3 错误三:忽略 OID 层级结构导致冲突
现象:在证书扩展项中使用不规范的 OID 路径,如 1.2.156.10197.1.999(未注册)。
后果:证书被其他实现拒绝,因为该 OID 不在官方注册表中。
正确做法:仅使用 GM/T 0006-2023 附录中定义的注册 OID。如需自定义扩展,应向国家密码管理局申请 OID 注册。
5.4 错误四:混淆 GM/T 0018 接口标识与 OID
现象:在调用 GM/T 0018 接口时,将 algorithmID (如 0x0001) 与 OID (如 1.2.156.10197.1.501) 混用。
后果:参数类型不匹配,API 调用失败。
区分:
- OID:用于证书、消息语法、ASN.1 编码等场景
- 算法标识符:用于 GM/T 0018 接口调用,是整数值(如
0x0001= SM2 签名)
六、OID 验证与调试工具
6.1 命令行验证
使用 OpenSSL 解析证书中的 OID:
openssl x509 -in cert.pem -text -noout | grep -A2 "Signature Algorithm"
openssl x509 -in cert.pem -text -noout | grep "Public Key Algorithm"6.2 Python 解析
from cryptography import x509
from cryptography.hazmat.primitives import serialization
import ssl
# 加载证书
with open("cert.pem", "rb") as f:
cert = x509.load_pem_x509_certificate(f.read())
# 获取签名算法 OID
sig_oid = cert.signature_algorithm_oid
print(f"签名算法 OID: {sig_oid.dotted_string}")
print(f"签名算法名称: {sig_oid._name}")
# 获取公钥算法 OID
pub_oid = cert.public_key().public_algorithm
print(f"公钥算法 OID: {pub_oid}")6.3 GM/T 0006 对照表
编写自动化工具时,维护一份本地 OID 对照表:
GM_T_0006_OID_MAP = {
"1.2.156.10197.1.1": "sm2PublicKey",
"1.2.156.10197.1.2": "sm3",
"1.2.156.10197.1.3": "sm4",
"1.2.156.10197.1.4": "sm9",
"1.2.156.10197.1.5": "zuc",
"1.2.156.10197.1.501": "sm2WithSm3",
"1.2.156.10197.1.502": "sm2KeyExchange",
"1.2.156.10197.1.503": "sm2Encrypt",
"1.2.156.10197.1.401": "sm3WithSm2",
"1.2.156.10197.1.601": "sm9WithSm3",
# ... 完整映射见 GM/T 0006-2023 附录
}七、总结
GM/T 0006-2023《密码应用标识规范》是国密密码应用的基础性标准,定义了 SM2/SM3/SM4/SM9/ZUC 等算法的唯一标识符(OID)编码规则。
核心要点:
- OID 层级结构:第一级为国家密码管理局注册域(1.2.156.10197),第二级为算法类型,第三级为服务类型。
- 2023 版重大改进:重构 OID 树结构、新增 SM9/ZUC/随机数标识、与 GB/T 33560-2026 对齐。
- 工程常见错误:混淆 SM2 签名与 SM2WithSM3、误用不存在的 SM4-GCM OID、混淆接口标识符与 OID。
- 验证方法:使用 OpenSSL 命令行、Python cryptography 库、或维护本地 OID 对照表。
相关实践
- X.509 证书密码应用标识合规检查实战 — 基于 GM/T 0006-2023 构建国密标识验证工具
- GB/T 33560-2026 密码应用标识标准解读 — 国家标准与行业标准的对比分析
- RFC 5280 X.509 证书详细规范 — OID 在国际标准中的定义方式
参考标准
- GM/T 0006-2023《密码应用标识规范》,国家密码管理局
- GM/T 0018-2023《密码设备应用接口规范》,国家密码管理局
- GB/T 33560-2026《网络安全技术 密码应用标识》,国家市场监督管理总局
- RFC 5280《Internet X.509 PKI Certificate and CRL Profile》