GM/T 0018-2023 密码设备应用接口规范:国密密码设备互操作的统一语言

标准规范 · 2026-07-03

概述

GM/T 0018-2023《密码设备应用接口规范》是国密密码产品互联互通的基础性标准。它规定了公钥密码基础设施应用技术体系下,服务端密码设备的统一接口规范,涵盖算法标识、数据结构和接口函数三个核心要素。

该标准首次发布于2012年(GM/T 0018-2012),在2023年进行了全面修订。2023版在保留原有接口框架的基础上,大幅扩充了算法标识体系(新增SM9、ZUC、国密TLS密码套件等标识),重构了数据结构定义,并增强了与GB/T 33560-2026《网络安全技术 密码应用标识》的衔接。

标准定位与体系关系

GM/T 0018-2023 在国密标准体系中处于"承上启下"的位置——向上对接应用层密码服务接口(GM/T 0019),向下对接密码设备硬件接口(PKCS#11、CNG等):

CODE
应用层          密码服务层          接口规范层          设备层
┌──────────┐   ┌──────────┐    ┌──────────┐    ┌──────────┐
│ GM/T 0019│   │ 应用API  │    │ GM/T 0018│    │ PKCS#11  │
│(密码服务  │──▶│(Java/C/  │───▶│(服务端   │───▶│(硬件密码  │
│ 接口规范) │   │ Python) │    │ 设备接口) │    │ 模块)    │
└──────────┘   └──────────┘    └──────────┘    └──────────┘

与相关标准的关系:

标准编号名称与GM/T 0018的关系
GM/T 0019-2023通用密码服务接口规范上层密码服务接口,调用GM/T 0018定义的底层接口
GM/T 0020-2023证书应用综合服务接口规范证书相关服务接口,基于GM/T 0018
GM/T 0015-2023数字证书格式证书数据结构定义
GM/T 0016-2023智能密码钥匙密码应用接口规范客户端设备接口,与GM/T 0018互补
GM/T 0017-2023智能密码钥匙密码应用接口数据格式客户端设备数据格式
GB/T 33560-2026网络安全技术 密码应用标识算法标识与GM/T 0018的标识体系对齐
GM/T 0006-2023密码应用标识规范密码标识的基础标准
GM/T 0060-2021USBKey密码应用接口规范USBKey设备接口,兼容GM/T 0018

接口体系架构

1. 算法标识体系

GM/T 0018-2023 定义了完整的算法标识体系,每种密码算法都有一个唯一的标识符(algorithm identifier)。2023版相较2012版新增了数十种算法标识:

#### SM2算法标识

算法服务标识符说明
SM2签名0x0001SM2数字签名算法
SM2验签0x0002SM2数字签名验证算法
SM2密钥交换0x0003SM2密钥交换算法
SM2加密0x0004SM2公钥加密算法
SM2解密0x0005SM2公钥解密算法
SM2密钥生成0x0006SM2密钥对生成算法
#### SM3算法标识

算法服务标识符说明
SM3杂凑0x0101SM3密码杂凑算法
SM3-MAC0x0102基于SM3的消息认证码
SM3-KDF0x0103基于SM3的密钥派生函数
#### SM4算法标识

算法服务标识符说明
SM4加密0x0201SM4分组密码加密
SM4解密0x0202SM4分组密码解密
SM4-KDF0x0203基于SM4的密钥派生函数
#### SM9算法标识(2023版新增)

算法服务标识符说明
SM9签名0x0301SM9标识密码签名算法
SM9验签0x0302SM9标识密码验签算法
SM9加密0x0303SM9标识密码加密算法
SM9解密0x0304SM9标识密码解密算法
SM9密钥交换0x0305SM9标识密码密钥交换
#### ZUC算法标识(2023版新增)

算法服务标识符说明
ZUC加密0x0401ZUC序列密码加密
ZUC-MAC0x0402ZUC消息认证码(128-ZUC-INT)

2. 数据结构定义

GM/T 0018-2023 定义了密码设备交互所需的所有数据结构,主要包括:

#### 密钥数据结构

CODE
密钥句柄结构:
┌─────────────────────────┐
│ 密钥类型 (UINT32)       │  ← SM2/SM3/SM4/SM9/ZUC
│ 密钥用途 (UINT32)       │  ← 签名/验签/加密/解密/密钥交换
│ 密钥长度 (UINT32)       │  ← 以比特为单位
│ 密钥数据 (BYTE[])       │  ← 密钥材料(加密存储)
│ 密钥标签 (CHAR[64])     │  ← 人类可读的密钥标识
└─────────────────────────┘

#### 会话数据结构

CODE
会话句柄结构:
┌─────────────────────────┐
│ 会话ID (UINT32)         │
│ 设备ID (UINT32)         │  ← 关联的密码设备
│ 加密算法 (UINT32)       │  ← 会话使用的加密算法
│ 签名算法 (UINT32)       │  ← 会话使用的签名算法
│ 随机数种子 (BYTE[32])   │  ← 会话随机数初始化
└─────────────────────────┘

#### 证书数据结构

3. 接口函数体系

GM/T 0018-2023 定义了约120个标准接口函数,按功能分为以下几大类:

#### 设备管理接口

函数名功能参数
GM_GetDeviceCount获取密码设备数量
GM_OpenDevice打开指定密码设备设备ID → 设备句柄
GM_CloseDevice关闭密码设备设备句柄
GM_GetDeviceInfo获取设备信息设备句柄 → 设备信息结构
GM_SetPin设置用户PIN码设备句柄 + PIN
GM_VerifyPin验证用户PIN码设备句柄 + PIN
#### 密钥管理接口

函数名功能参数
GM_GenerateKey生成密钥对算法 + 密钥长度 → 密钥句柄
GM_ImportKey导入密钥密钥材料 + 算法 → 密钥句柄
GM_ExportKey导出密钥密钥句柄 + 导出格式 → 密钥数据
GM_DestroyKey销毁密钥密钥句柄
GM_GetPublicKey获取公钥密钥句柄 → 公钥数据
#### 签名验签接口

函数名功能参数
GM_SignInit初始化签名操作算法 + 密钥句柄 → 会话句柄
GM_SignUpdate更新签名数据会话句柄 + 数据
GM_SignFinal完成签名会话句柄 → 签名值
GM_VerifyInit初始化验签操作算法 + 公钥 → 会话句柄
GM_VerifyUpdate更新验签数据会话句柄 + 数据
GM_VerifyFinal完成验签会话句柄 + 签名值 → 验证结果
#### 加解密接口

函数名功能参数
GM_EncryptInit初始化加密操作算法 + 密钥句柄 → 会话句柄
GM_EncryptUpdate分批加密数据会话句柄 + 明文 → 密文
GM_EncryptFinal完成加密会话句柄 → 最终密文
GM_DecryptInit初始化解密操作算法 + 密钥句柄 → 会话句柄
GM_DecryptUpdate分批解密数据会话句柄 + 密文 → 明文
GM_DecryptFinal完成解密会话句柄 → 最终明文
#### 杂凑接口

函数名功能参数
GM_HashInit初始化杂凑操作算法 → 会话句柄
GM_HashUpdate更新杂凑数据会话句柄 + 数据
GM_HashFinal完成杂凑会话句柄 → 杂凑值

2023版修订要点

1. 算法标识体系全面扩充

2023版新增了SM9标识密码、ZUC序列密码、国密TLS密码套件等算法的标识定义,使接口规范能够覆盖当前国密体系中的所有主流算法。

2. 与GB/T 33560-2026密码应用标识对齐

2023版将算法标识符与GB/T 33560-2026《网络安全技术 密码应用标识》中定义的OID和标识符进行了映射对齐,确保密码设备接口层与应用标识层的一致性。

3. 接口函数签名规范化

2023版将所有接口函数的参数类型统一为C语言标准类型(UINT32BYTECHAR等),消除了2012版中部分函数使用自定义类型导致的编译器兼容性问题。

4. 新增错误码体系

2023版定义了完整的错误码体系,涵盖设备错误、密钥错误、签名错误、加密错误、权限错误等5大类共50余个具体错误码:

错误码含义常见原因
GM_OK (0x0000)操作成功-
GM_E_DEVICE (0x8001)设备错误设备未连接、设备故障
GM_E_PIN (0x8002)PIN验证失败PIN码错误、PIN被锁
GM_E_KEY (0x8003)密钥错误密钥不存在、密钥格式错误
GM_E_SIGN (0x8004)签名错误签名算法不匹配、签名数据损坏
GM_E_ENCRYPT (0x8005)加密错误加密算法不支持、密钥长度不符
GM_E_PERMISSION (0x8006)权限不足未登录、角色权限不够
GM_E_MEMORY (0x8007)内存错误内存不足、缓冲区溢出

5. 增强异步操作支持

2023版新增了一组异步接口函数,支持密码设备的非阻塞操作:

异步函数功能
GM_AsyncSignStart启动异步签名操作
GM_AsyncSignPoll轮询异步签名状态
GM_AsyncEncryptStart启动异步加密操作
GM_AsyncDecryptStart启动异步解密操作
这对于高并发密码服务场景(如TLS握手、批量签名验证)具有重要意义。

与PKCS#11的对比分析

GM/T 0018-2023 的设计受到了PKCS#11(Cryptoki)标准的深刻影响,两者在接口设计理念上有诸多相似之处,但也存在关键差异:

维度GM/T 0018-2023PKCS#11 v3.0
语言绑定C语言原生接口C语言原生接口
会话模型显式会话句柄CK_SESSION_HANDLE
密钥管理本地密钥句柄CK_OBJECT_HANDLE
算法标识自定义UINT32标识CKA_CLASS + CKA_MECHANISM
错误处理返回值错误码CK_RT枚举
异步支持2023版新增无原生支持
证书管理内置证书数据结构CKO_CERTIFICATE对象类
密码设备类型主要面向服务端密码设备面向HSM、USBKey、软件模块
国密算法覆盖SM2/SM3/SM4/SM9/ZUCRSA/DSA/ECC/DES/AES

互操作方案

在实际工程中,常常需要在GM/T 0018和PKCS#11之间进行互操作。常见的方案包括:

  • 适配器模式:编写GM/T 0018到PKCS#11的适配层,将GM/T 0018的接口调用转换为PKCS#11 API调用
  • 统一抽象层:在上层定义统一的密码服务接口(如GM/T 0019),底层同时支持GM/T 0018和PKCS#11
  • 中间件方案:使用密码中间件(如国密密码服务网关)统一屏蔽底层接口差异

与GB/T 33560-2026密码应用标识的衔接

GB/T 33560-2026《网络安全技术 密码应用标识》规定了密码应用中各类密码服务类标识和安全管理类标识的唯一编码方式。GM/T 0018-2023 的算法标识体系与GB/T 33560-2026的标识编码存在以下对应关系:

GM/T 0018标识GB/T 33560-2026标识OID
SM2签名 (0x0001)SM2数字签名1.2.156.10197.1.501
SM3杂凑 (0x0101)SM3杂凑算法1.2.156.10197.1.504
SM4加密 (0x0201)SM4分组密码1.2.156.10197.1.502
SM9签名 (0x0301)SM9标识签名1.2.156.10197.1.601
ZUC加密 (0x0401)ZUC序列密码1.2.156.10197.1.401
这种标识体系的统一使得密码设备接口层与应用层的密码标识可以无缝对接,降低了系统集成复杂度。

实际集成要点

1. 密码设备发现与选择

在实际应用中,首先需要发现可用的密码设备:

2. 算法标识的动态映射

由于GM/T 0018-2023定义了较多的算法标识,实际应用中建议建立算法标识与OID/名称的双向映射表:

PYTHON
# 【伪代码】示意性映射表,实际实现需根据GM/T 0018-2023标准附录中的完整标识符列表填充
# 算法标识映射表示例
ALG_MAP = {
    0x0001: {"name": "SM2-SIGN", "oid": "1.2.156.10197.1.501"},
    0x0004: {"name": "SM2-ENCRYPT", "oid": "1.2.156.10197.1.503"},
    0x0101: {"name": "SM3", "oid": "1.2.156.10197.1.504"},
    0x0201: {"name": "SM4", "oid": "1.2.156.10197.1.502"},
    0x0301: {"name": "SM9-SIGN", "oid": "1.2.156.10197.1.601"},
}

3. 错误处理的健壮性

GM/T 0018-2023 的接口函数均返回错误码,实际应用中必须进行完整的错误处理:

参考来源

  • GM/T 0018-2023《密码设备应用接口规范》,国家密码管理局
  • GM/T 0019-2023《通用密码服务接口规范》,国家密码管理局
  • GM/T 0020-2023《证书应用综合服务接口规范》,国家密码管理局
  • GB/T 33560-2026《网络安全技术 密码应用标识》,国家市场监督管理总局
  • GM/T 0006-2023《密码应用标识规范》,国家密码管理局
  • PKCS #11 v3.0 Cryptographic Token Interface Standard, RSA Laboratories
  • 国家密码管理局公告(第54号),2026年1月7日发布GM/T 0031-2025等20项标准