GM/T 0006-2023 密码应用标识规范深度解读:国密 OID 体系的编码规则与工程实践

标准规范 · 2026-09-25


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-20122012已废止首版,定义 SM2/SM3/SM4 基础 OID
GM/T 0006-20192019现行有效(并行)增加 SM9 标识,完善 KDF/签名服务 OID
GM/T 0006-20232023现行有效全面重构,对齐 GB/T 33560,新增 TLS/随机数标识

1.1 2023 版的重大变化

2023 年版是 GM/T 0006 的里程碑式修订,主要变化包括:

  • OID 树结构重组:将原有零散的 OID 节点统一到 1.2.156.10197.x.x 子树下,形成层次清晰的编码体系。
  • 新增算法标识:
- ZUC 流密码算法(原 GM/T 0002 未覆盖) - SM9 标识密码完整体系(IBS/IBE/IKE) - 随机数生成器标识(GRBG) - TLS 密码套件标识

  • 与 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 对象标识符体系,采用点分十进制表示:

CODE
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.1SM2 椭圆曲线算法
1.2.156.10197.1.2SM3 密码杂凑算法
1.2.156.10197.1.3SM4 分组密码算法
1.2.156.10197.1.4SM9 标识密码算法
1.2.156.10197.1.5ZUC 流密码算法
1.2.156.10197.1.10随机数生成器

2.2 第二级编码:算法服务类型

每个算法下再细分服务类型(签名、加密、密钥交换等):

CODE
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.1sm2PublicKeySM2 公钥算法(证书 SubjectPublicKeyInfo)
1.2.156.10197.1.501sm2WithSm3SM2 数字签名算法(签名证书)
1.2.156.10197.1.502sm2KeyExchangeSM2 密钥交换协议
1.2.156.10197.1.503sm2EncryptSM2 公钥加密算法

3.2 SM3 密码杂凑算法

OID名称用途
1.2.156.10197.1.2sm3SM3 密码杂凑算法
1.2.156.10197.1.401sm3WithSm2SM3 签名方案标识(CMS/SM2 消息语法)

3.3 SM4 分组密码算法

OID名称用途
1.2.156.10197.1.3sm4SM4 分组密码算法
1.2.156.10197.1.301sm4EcbSM4 ECB 模式
1.2.156.10197.1.302sm4CbcSM4 CBC 模式
1.2.156.10197.1.303sm4CfbSM4 CFB 模式
1.2.156.10197.1.304sm4OfbSM4 OFB 模式
1.2.156.10197.1.305sm4CtrSM4 CTR 模式
1.2.156.10197.1.306sm4GcmSM4 GCM 模式(注:非所有库支持)

3.4 SM9 标识密码算法

OID名称用途
1.2.156.10197.1.4sm9SM9 标识密码算法总标识
1.2.156.10197.1.601sm9WithSm3SM9 数字签名算法
1.2.156.10197.1.602sm9KeyExchangeSM9 密钥交换协议
1.2.156.10197.1.603sm9EncryptSM9 标识加密算法
1.2.156.10197.1.604sm9KdfSM9 密钥派生函数

3.5 ZUC 流密码算法

OID名称用途
1.2.156.10197.1.5zucZUC 流密码算法
1.2.156.10197.1.501zucWithSm3ZUC-SM3 加密方案

3.6 随机数生成器标识

OID名称用途
1.2.156.10197.1.10grbg随机数生成器基础标识
1.2.156.10197.1.10.1deterministicRbg确定性随机比特生成器
1.2.156.10197.1.10.2hashRbg基于哈希的随机数生成器
1.2.156.10197.1.10.3hmacRbg基于 HMAC 的随机数生成器

四、与 GB/T 33560-2026 的关系

GB/T 33560-2026《网络安全技术 密码应用标识》是国家推荐标准,于 2026 年发布。两者关系如下:

维度GM/T 0006-2023GB/T 33560-2026
性质行业标准(强制性)国家标准(推荐性)
发布机构国家密码管理局国家市场监督管理总局
发布时间20232026
覆盖范围密码算法、服务、协议标识密码资产统一标识体系
OID 树1.2.156.10197.x.x部分对齐,部分独立
关键区别:GM/T 0006 专注于密码算法和服务的标识,而 GB/T 33560 扩展为全密码资产的标识体系,包括设备、模块、系统等多层次标识。

在工程实践中,通常优先遵循 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 公钥算法。

正确做法:

PYTHON
# 标准 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 等扩展库才支持
建议:生产环境使用 SM4-CBC + HMAC-SM3 Encrypt-then-MAC,安全强度与 SM4-GCM 等价,且兼容性更好。

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 签名)
两者映射关系在 GM/T 0018-2023 附录中有定义。

六、OID 验证与调试工具

6.1 命令行验证

使用 OpenSSL 解析证书中的 OID:

BASH
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 解析

6.3 GM/T 0006 对照表

编写自动化工具时,维护一份本地 OID 对照表:

七、总结

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 对照表。
在国密密码应用开发中,正确理解和运用 GM/T 0006-2023 的 OID 体系,是确保系统互操作性和合规性的基础。

相关实践

参考标准

  • GM/T 0006-2023《密码应用标识规范》,国家密码管理局
  • GM/T 0018-2023《密码设备应用接口规范》,国家密码管理局
  • GB/T 33560-2026《网络安全技术 密码应用标识》,国家市场监督管理总局
  • RFC 5280《Internet X.509 PKI Certificate and CRL Profile》