GM/T 0029-2014 密码模块安全检测实战:密评合规的材料准备与常见踩坑
1. 引言:密码模块检测为何是密评的"硬骨头"?
在密评(GB/T 39786-2021 密码应用评估)中,密码模块的安全检测是最容易翻车、整改成本最高的环节之一。GM/T 0029-2014《密码模块安全检测要求》与 GM/T 0028-2014《密码模块安全技术要求》配套,构成了密码模块检测的完整框架。
但实际测评中,大量企业在这个环节卡壳:要么不清楚自己的系统里到底哪些组件属于"密码模块",要么准备了材料却发现不符合检测机构的格式要求,要么对安全等级划分理解有误导致材料全部返工。
本文基于实战经验,帮你把 GM/T 0029-2014 的检测流程、材料清单、常见坑点一次性梳理清楚。
2. GM/T 0029-2014 标准框架
2.1 标准定位
GM/T 0029-2014 规定了密码模块安全检测的方法、流程和判定准则,与 GM/T 0028-2014 配套使用:
| 标准 | 定位 | 核心内容 |
|---|---|---|
| GM/T 0028-2014 | 技术要求 | 密码模块应满足的安全要求(11个安全域、4个安全等级) |
| GM/T 0029-2014 | 检测要求 | 如何验证密码模块是否满足 GM/T 0028-2014 的要求 |
2.2 安全等级划分
GM/T 0028-2014 将密码模块分为 4 个安全等级(Security Level),等级越高要求越严格:
| 等级 | 典型场景 | 核心特征 |
|---|---|---|
| SL1 | 低成本、低风险环境 | 最低要求,无需物理安全机制 |
| SL2 | 一般商业环境 | 增加物理防拆封(tamper-evident)、基于角色的身份认证 |
| SL3 | 中高风险环境 | 物理防篡改(tamper-resistant)、基于身份的身份认证、关键物理安全参数(CSP)的零知识化 |
| SL4 | 极高风险环境 | 最高物理安全等级,模块在物理攻击下仍能保护 CSP |
2.3 11 个安全域
GM/T 0028-2014/GM/T 0029-2014 将安全要求划分为 11 个安全域(Security Domains):
- 密码模块规格:模块的类型、边界、批准的算法列表
- 密码模块接口:数据输入/输出、控制输入/输出、状态输出
- 角色、服务与身份认证:角色定义、服务提供、身份认证机制
- 软件/固件安全:软件/固件的安全运行与更新
- 操作环境:操作系统的安全性要求
- 物理安全:物理保护/防篡改机制
- 非入侵式安全:侧信道攻击防护(如功耗分析、电磁分析)
- 敏感安全参数管理:密钥等 CSP 的生成、输入、输出、存储
- 自检:上电自检、条件自检
- 寿命保证:模块的设计、开发、测试、交付、使用、废弃
- 其他:对旁路攻击的缓解措施
3. 检测流程实战拆解
3.1 检测前的自查清单
在送检或迎评前,先对照以下清单自查:
□ 模块边界是否明确(硬件/软件/固件的物理和逻辑边界)
□ 模块类型是否明确(硬件/软件/固件/混合)
□ 安全等级目标是否确定(SL1/SL2/SL3/SL4)
□ 批准的算法列表是否完整(SM2/SM3/SM4 等)
□ 接口定义是否清晰(数据/控制/状态/电源接口)
□ 角色定义是否完整(用户/管理员/维护员等)
□ 身份认证机制是否满足等级要求
□ CSP 生命周期管理是否覆盖(生成/输入/输出/存储/销毁)
□ 物理安全是否满足等级要求
□ 自检机制是否完备(上电自检/条件自检)
□ 旁路攻击缓解措施是否到位3.2 申请材料清单
GM/T 0029-2014 要求提交的检测材料通常包括:
基本文档:
- 密码模块规格说明书(模块描述、边界、算法列表)
- 接口规范(数据接口、控制接口、状态接口的详细说明)
- 角色与服务文档(每个角色可访问的服务列表)
- 敏感安全参数(CSP)管理文档
- 物理安全设计文档(外壳/涂层/封条等物理保护机制)
- 侧信道攻击防护设计文档
- 自检机制说明(自检项目、失败后的处理策略)
- 寿命保证文档(开发/测试/交付/维护流程)
- 算法正确性验证报告(每个算法的已知答案测试)
- 自检功能测试报告
- 物理安全测试报告
- 侧信道测试报告(如果适用)
3.3 检测流程
┌─────────────────────────────────────────────────────────────┐
│ 检测申请阶段 │
│ 提交申请材料 → 检测机构初审 → 材料补正 → 受理 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 文档审查阶段 │
│ 审查安全等级目标 → 审查11个安全域的符合性 → 出具审查意见 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 检测实施阶段 │
│ 算法正确性测试 → 物理安全测试 → 侧信道测试 → 功能测试 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 结论出具阶段 │
│ 检测报告 → 不符合项整改 → 复测 → 检测报告终稿 │
└─────────────────────────────────────────────────────────────┘4. 密评实战中的常见踩坑
坑1:模块边界定义不清
现象:企业送检的模块边界模糊,软件模块包含了不属于密码模块范围的通用代码(如 GUI、数据库连接等)。
后果:检测机构要求重新定义边界,所有文档返工。
解决:模块边界应严格限定在密码功能相关的硬件、软件、固件组件。通用操作系统、数据库、Web 服务器等不属于密码模块边界。
坑2:安全等级"就高不就低"的误区
现象:企业为了"更安全"直接选择 SL3 甚至 SL4,但没有对应的物理安全措施。
后果:SL3 要求物理防篡改(tamper-resistant),如果模块是纯软件实现(如 Java/Python 应用),根本无法满足。
解决:
- 软件密码模块最高只能达到 SL2(且需要安全的操作系统环境)
- 硬件密码模块可以达到 SL3 或 SL4
- 密码模块安全等级应与实际应用场景的安全需求匹配
坑3:CSP 管理文档缺失
现象:企业准备了大量的物理安全文档,但 CSP 的生成、输入、输出、存储、销毁流程描述不清。
后果:检测中 CSP 管理域(安全域8)大量不符合项。
解决:CSP(主要是密钥)的全生命周期管理必须有完整文档:
- 密钥生成:使用的随机数生成器、生成算法
- 密钥输入:密钥分量输入方式、加密传输机制
- 密钥输出:密钥输出格式、加密保护
- 密钥存储:存储介质、访问控制
- 密钥销毁:销毁方法、销毁验证
坑4:自检机制不完整
现象:只实现了上电自检(POST),遗漏了条件自检。
后果:安全域9(自检)不达标。
解决:
- 上电自检:模块上电时必须执行完整性校验(固件/软件签名验证)和算法正确性测试
- 条件自检:在特定条件下(如定期、CSP 使用前、物理安全被触发后)执行的自检
坑5:侧信道防护文档"只有标题没有内容"
现象:文档声称有侧信道防护,但没有具体的防护设计描述或测试数据。
后果:安全域7(非入侵式安全)在 SL2+ 要求下被判不符合。
解决:至少应包含以下防护措施的描述:
- 时间攻击防护:恒定时间算法、随机延迟
- 功耗分析防护:掩码技术、随机化
- 电磁分析防护:屏蔽设计
- 故障注入防护:冗余计算、环境传感器
5. 检测失败的 TOP 5 不符合项
基于大量密评案例,以下是最常见的检测失败点:
| 排名 | 安全域 | 常见不符合项 | 整改难度 |
|---|---|---|---|
| 1 | 敏感安全参数管理 | 密钥明文存储/传输 | 中 |
| 2 | 角色、服务与身份认证 | 缺少基于身份的身份认证(SL3+) | 中 |
| 3 | 物理安全 | 缺少物理防篡改证据(SL3+) | 高 |
| 4 | 自检 | 缺少条件自检机制 | 低 |
| 5 | 旁路攻击缓解 | 缺少侧信道防护文档或测试 | 中 |
6. 与国密标准体系的关联
GM/T 0029-2014 在整个国密标准体系中的位置:
┌─────────────────────────────────────────────────────────────┐
│ GB/T 39786-2021 │
│ 信息系统密码应用基本要求(密评核心) │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ GM/T 0054-2018 │
│ 信息系统密码应用基本要求(等保密码扩展) │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ GM/T 0028-2014 ← → GM/T 0029-2014 │
│ 密码模块安全技术要求 密码模块安全检测要求 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ GM/T 0024/0025-2023(SSL VPN) │
│ GM/T 0022/0023-2023(IPSec VPN) │
│ GM/T 0030-2014(服务器密码机) │
│ 具体产品技术规范 │
└─────────────────────────────────────────────────────────────┘7. 实战建议:密评准备时间线
| 阶段 | 时间 | 关键任务 |
|---|---|---|
| 摸底 | 密评前 3-6 个月 | 盘点系统中所有密码模块,明确边界和类型 |
| 定级 | 密评前 2-3 个月 | 确定每个模块的安全等级目标 |
| 材料准备 | 密评前 1-2 个月 | 编制11个安全域的符合性文档 |
| 自查 | 密评前 2-4 周 | 模拟检测,识别不符合项 |
| 整改 | 密评前 1-2 周 | 修复不符合项,准备整改报告 |
| 送检 | 密评前 | 提交材料,配合检测 |
8. 总结
GM/T 0029-2014 是密评中密码模块安全检测的"游戏规则"。提前理解标准要求、明确模块边界、准备完整的文档材料,可以避免检测中的反复整改。
核心要点:
- 模块边界要清晰,不要"越大越好"
- 安全等级要匹配实际场景,不要盲目追高
- CSP 管理是重中之重,贯穿11个安全域
- 自检和侧信道防护不能"只有标题没有内容"
- 文档准备宜早不宜迟,至少提前 3 个月启动
相关实践: