GM/T 0027-2014 智能密码钥匙技术规范:国密 USBKey 的硬件安全边界
概述
在国家密码管理体系中,智能密码钥匙(俗称 USBKey 或 U 盾)是最为常见的客户端密码设备形态。从个人网银的身份认证到企业电子签章的数字签名,USBKey 承载着 SM2 签名、SM3 杂凑、SM4 加密等核心密码操作。
GM/T 0027-2014《智能密码钥匙技术规范》 是规范这类设备技术要求的强制性标准。它与 GM/T 0016-2023(接口规范)、GM/T 0017-2023(数据格式规范)共同构成了国密 USBKey 产品的完整标准体系。
本文解读 GM/T 0027-2014 的核心技术要求、检测项目,以及与 GM/T 0016/0018 的接口关系,帮助实施者理解国密 USBKey 的安全边界和合规要求。
标准定位
在国密标准体系中的位置
CODE
┌─────────────────────────────────────────────────────┐
│ 应用层(Java/Python/C 调用) │
├─────────────────────────────────────────────────────┤
│ GM/T 0016-2023 │ GM/T 0018-2023 │
│ 智能密码钥匙接口规范 │ 密码设备应用接口规范 │
│ (客户端 USBKey) │ (服务端密码机) │
├─────────────────────────────────────────────────────┤
│ GM/T 0017-2023 │ 数据结构定义 │
│ 智能密码钥匙数据格式 │ │
├─────────────────────────────────────────────────────┤
│ GM/T 0027-2014 │ 硬件安全技术要求 │
│ 智能密码钥匙技术规范 │ │
├─────────────────────────────────────────────────────┤
│ GM/T 0028-2014 │ 密码模块安全等级 │
│ 密码模块安全技术要求 │ (安全 1-4 级) │
└─────────────────────────────────────────────────────┘与相关标准的关系
| 标准编号 | 名称 | 与 GM/T 0027 的关系 |
|---|---|---|
| GM/T 0016-2023 | 智能密码钥匙密码应用接口规范 | 定义 USBKey 的软件接口 |
| GM/T 0017-2023 | 智能密码钥匙密码应用接口数据格式规范 | 定义 USBKey 的数据结构 |
| GM/T 0028-2014 | 密码模块安全技术要求 | 定义安全等级要求 |
| GM/T 0029-2014 | 密码模块安全检测要求 | 定义 USBKey 的检测方法 |
| GB/T 39786-2021 | 信息系统密码应用基本要求 | 定义使用 USBKey 的合规要求 |
核心技术要求
1.1 安全结构要求
GM/T 0027-2014 规定智能密码钥匙必须具备以下安全结构:
| 安全组件 | 功能 | 要求 |
|---|---|---|
| 安全芯片 | 密码运算核心 | 通过 GM/T 0028 安全等级认证 |
| 操作系统 | 资源管理 | 支持多应用隔离 |
| 安全管理器 | 权限控制 | 三权分立(管理员/操作员/审计员) |
| 密钥管理系统 | 密钥生命周期 | 密钥不出芯片、用后销毁 |
| 防篡改机制 | 物理防护 | 检测到攻击时自动擦除密钥 |
1.2 密码算法要求
USBKey 必须支持以下国密算法:
| 算法 | 用途 | 标准依据 |
|---|---|---|
| SM2 | 数字签名、密钥交换 | GM/T 0003-2012 |
| SM3 | 杂凑、消息认证 | GM/T 0004-2012 |
| SM4 | 数据加密 | GM/T 0001-2012 |
| ZUC | 流密码(可选) | GM/T 0002-2012 |
- SM2 签名算法必须使用专用曲线(sm2p256v1,OID: 1.2.156.10197.1.301)
- SM3 杂凑算法输出长度为 256 比特
- SM4 加密算法分组长度为 128 比特,密钥长度为 128 比特
1.3 接口协议要求
USBKey 必须符合 PC/SC(Personal Computer/Smart Card)标准,支持以下传输协议:
| 协议 | 说明 | 适用场景 |
|---|---|---|
| T=0 | 字节传输协议 | 简单命令交互 |
| T=1 | 报文传输协议 | 大数据量传输 |
| USB 2.0/3.0 | 物理层协议 | 通用接口 |
CODE
Class | Instruction | Parameter1 | Parameter2 | Lc | Data | Le
0x00 | 0x20 | 0x00 | 0x00 | 0 | -- | 00常见命令:
SELECT FILE:选择应用GET CHALLENGE:获取随机数INTERNAL AUTHENTICATE:内部认证SIGN:执行 SM2 签名
检测项目
2.1 功能检测
根据 GM/T 0029-2014,USBKey 需要通过以下功能检测:
| 检测项 | 检测方法 | 合格标准 |
|---|---|---|
| SM2 签名验证 | 使用标准测试向量 | 签名值匹配 |
| SM3 杂凑计算 | 使用标准测试向量 | 哈希值匹配 |
| SM4 加密解密 | 使用标准测试向量 | 加解密结果匹配 |
| 随机数生成 | 通过 GM/T 0005 检测 | 符合随机性要求 |
| 密钥管理 | 模拟密钥导出攻击 | 密钥不出芯片 |
2.2 安全检测
| 检测项 | 检测方法 | 合格标准 |
|---|---|---|
| 防物理探测 | X 射线、显微镜观察 | 无密钥泄露 |
| 防电压毛刺 | 施加异常电压 | 自动擦除密钥 |
| 防温度攻击 | 极端温度测试 | 功能正常或安全降级 |
| 防时序攻击 | 测量操作时间 | 时间恒定 |
| 防差分功耗分析 | DPA 分析 | 无密钥信息泄露 |
2.3 环境适应性检测
| 检测项 | 测试条件 | 合格标准 |
|---|---|---|
| 高温测试 | 70°C,48 小时 | 功能正常 |
| 低温测试 | -40°C,48 小时 | 功能正常 |
| 湿度测试 | 85% RH,85°C,96 小时 | 无腐蚀 |
| 盐雾测试 | 5% NaCl,35°C,48 小时 | 无锈蚀 |
| 振动测试 | 10-55 Hz,1.5mm 振幅 | 结构完好 |
与 GM/T 0016/0018 的关系
3.1 接口协议的层次关系
CODE
┌────────────────────────────────────────────────────────┐
│ 应用层 │
│ Java Applet / C# DLL / Python Library │
├────────────────────────────────────────────────────────┤
│ GM/T 0016-2023(接口规范) │
│ 定义函数:Init()、Sign()、Verify()、Encrypt()、... │
├────────────────────────────────────────────────────────┤
│ GM/T 0017-2023(数据格式) │
│ 定义结构:SM2KeyPair、SM2Signature、SM4Context │
├────────────────────────────────────────────────────────┤
│ GM/T 0027-2014(技术规范) │
│ 定义硬件:安全芯片、操作系统、防篡改机制 │
├────────────────────────────────────────────────────────┤
│ PC/SC + USB 协议 │
│ 定义传输:APDU 命令、USB 描述符 │
└────────────────────────────────────────────────────────┘3.2 客户端与服务端的差异
| 特性 | GM/T 0016(客户端) | GM/T 0018(服务端) |
|---|---|---|
| 设备形态 | USBKey、智能卡 | 服务器密码机、HSM |
| 接口数量 | 单设备 | 多设备集群 |
| 密钥管理 | 单机密钥 | 分布式密钥 |
| 安全等级 | 安全 2-3 级 | 安全 3-4 级 |
| 主要用途 | 个人签名认证 | 批量签名服务 |
生产环境部署要点
4.1 密钥生成与注入
强制要求:
- 密钥必须在安全环境下生成(通过 GM/T 0028 认证的设备)
- 密钥注入过程必须双人操作(安全管理员 + 操作员)
- 注入后必须进行完整性校验
- ❌ 在办公电脑使用软件生成密钥
- ❌ 密钥以明文形式传输到 USBKey
- ❌ 未验证密钥完整性就投入使用
4.2 PIN 码管理
| 项目 | 要求 |
|---|---|
| 初始 PIN | 厂商预设,部署时必须修改 |
| PIN 长度 | 不少于 6 位 |
| 尝试次数 | 连续 6 次错误后锁定 |
| 锁定后处理 | 需要 PUQ(解锁码)解锁 |
| PUQ 管理 | 与 PIN 分开存储,双人控制 |
4.3 生命周期管理
CODE
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ 生成 │───▶│ 分发 │───▶│ 使用 │───▶│ 归档 │───▶│ 销毁 │
│ (KGS) │ │ (RA) │ │ (用户) │ │ (审计) │ │ (管理员) │
└─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
密钥生成 身份核验 SM2签名 密钥备份 安全擦除
固件烧录 证书绑定 SM3杂凑 密钥归档 物理销毁
应用安装 PIN 设定 SM4加密 使用审计 报告存档合规检查清单
5.1 采购合规
- [ ] USBKey 通过 GM/T 0028 安全等级认证(至少安全 2 级)
- [ ] 固件版本为最新稳定版
- [ ] 支持 SM2/SM3/SM4 国密算法
- [ ] 提供完整的检测报告
5.2 部署合规
- [ ] 初始 PIN 已修改
- [ ] 密钥生成环境符合要求
- [ ] 密钥注入过程有双人见证
- [ ] 密钥完整性已验证
5.3 使用合规
- [ ] PIN 码定期更换
- [ ] 丢失 USBKey 及时报损
- [ ] 废弃 USBKey 安全销毁
- [ ] 使用记录完整审计
常见问题
Q1: USBKey 支持 SM9 算法吗?
答:GM/T 0027-2014 未强制要求 SM9,但新版固件可能支持。购买时需确认产品规格。SM9 需要更强的计算能力,部分低端 USBKey 可能不支持。
Q2: 如何判断 USBKey 是否通过密评?
答:查看产品说明书或检测报告,确认包含以下信息:
- 检测机构名称(如中国网络安全审查技术与认证中心)
- 检测依据(GM/T 0028、GM/T 0029)
- 安全等级(安全 2 级或 3 级)
- 报告编号
Q3: USBKey 可以导出密钥吗?
答:根据 GM/T 0027-2014 和 GM/T 0028-2014 的要求,私钥不得以明文形式导出。USBKey 只允许在内部完成密码运算,外部只能获取运算结果(签名值、密文等)。任何声称可以导出私钥的 USBKey 都不符合国密标准。
参考标准与文献
- GM/T 0027-2014《智能密码钥匙技术规范》——国家密码管理局
- GM/T 0016-2023《智能密码钥匙密码应用接口规范》——接口标准
- GM/T 0028-2014《密码模块安全技术要求》——安全等级标准
- GM/T 0029-2014《密码模块安全检测要求》——检测方法标准
- GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》——合规要求
相关实践链接
- GM/T 0016-2023 智能密码钥匙接口规范 —— USBKey 的软件接口
- GM/T 0028-2014 密码模块安全技术要求 —— 安全等级要求
- GM/T 0029-2014 密码模块安全检测要求 —— 检测方法