第3章 国密标准与合规性:不只是看文档那么简单
说到国密标准,很多人第一反应是——去官网下载几个PDF,然后对着代码实现就是了。说实话,最开始我也是这么干的。结果呢?项目评审的时候被专家问得哑口无言,人家问“你这段SM4的S盒实现依据的是GM/T哪个版本?密钥派生有没有按GM/T 0002走?”我当场就懵了。
国密标准,说白了就是一条产业链。从顶层法律到具体技术规范,你得清楚自己在哪个位置。这一章我就给你把这条路捋清楚。
3.1 国密标准体系架构
我国的商用密码标准体系,分成三个层次。我习惯叫它“金字塔结构”:
- 顶层:《中华人民共和国密码法》(2020年实施)和《商用密码管理条例》。这是法律层面的,告诉你能做什么、不能做什么。
- 中层:国家密码管理局发布的各类管理规定和技术要求,比如《商用密码产品认证规则》。
- 底层:GM/T系列标准。这是咱们工程师每天打交道的技术文档。
你想想看,如果你做KMS,至少得关注GM/T 0002(SM2)、GM/T 0004(SM3)、GM/T 0006(SM4)这几本。但光看这几本就够了吗?不够。我在做金融行业项目时,还被要求符合GM/T 0028《密码模块安全技术要求》,那才是真正头疼的地方。
关键认知:国密合规不是“用了SM2/SM4就行”,而是看你的密码产品和应用有没有踩对标准编号、用对技术参数、走对认证流程。
3.2 核心GM/T标准一览
下面是我整理的一个速查表。每次做新项目前,我都会翻一遍,确认有没有遗漏哪本标准。
| 标准编号 | 名称 | 与KMS的关系 |
|---|---|---|
| GM/T 0002-2012 | SM2椭圆曲线公钥密码算法 | 密钥生成、签名验签、密钥交换 |
| GM/T 0003-2012 | SM2椭圆曲线公钥密码算法(第二部分) | 数字签名与密钥交换规范 |
| GM/T 0004-2012 | SM3密码杂凑算法 | 哈希运算、密钥派生 |
| GM/T 0006-2012 | SM4分组密码算法 | 数据加密解密、密钥保护 |
| GM/T 0018-2012 | 密码设备应用接口规范 | KMS对接硬件密码模块 |
| GM/T 0028-2014 | 密码模块安全技术要求 | 密钥存储、生命周期安全 |
| GM/T 0044-2016 | SM9标识密码算法 | (扩展)基于身份的密钥管理 |
表格里这几本标准,我建议你至少把0002和0006通读一遍。别光看算法本身,里面的参数定义、测试向量才是关键。我有一次在验证SM2签名的时候,就因为在椭圆曲线基点参数上少看了几个字节,浪费了整整两天。
3.3 行业合规要求
不同行业对国密的要求是不一样的。我做过金融、政务、医疗三个领域的项目,差异很明显。
- 金融行业:最严。人民银行和银保监会联合发文,要求2020年起新建系统必须使用国密算法。而且你还要过《金融电子认证管理办法》那关。
- 政务行业:最急。很多政务云已经明确规定,非国密算法的不予入网。我记得有一次去做电子政务外网对接,对方直接说“SM2 SM4是硬性入网条件”。
- 医疗行业:过渡期。病历数据、健康档案已经开始推国密,但还没有一刀切。不过趋势很明确。
我的建议:如果项目涉及到以上任何一个行业,尽早让合规团队介入。不要等技术方案写完了才发现需要增加密码模块认证,那成本就大了。
3.4 实施路径:从标准到代码
好了,现在标准看完了,合规要求知道了,那怎么落地到KMS里?我总结了四个步骤,每一步都有坑。
3.4.1 合规评估
先搞清楚你的系统属于哪个级别。密码模块安全要求分四级,KMS一般要做到二级或三级。我见过有人图省事只做到一级,结果评审被打回重做。
3.4.2 标准选型
国密标准有很多版本修订。比如SM2标准在2012年发布后,2020年有更新。建议统一用最新版。
3.4.3 方案设计
这部分我单独拿出来说。在设计KMS的密钥生命周期时,每个环节都要对标标准:
- 密钥生成:用SM2密钥对,按GM/T 0003做密钥派生
- 密钥存储:用SM4加密保护,密钥文件格式参考GM/T 0006
- 密钥使用:签名验签走SM2,数据加密走SM4
- 密钥销毁:符合GM/T 0028的零化要求
3.4.4 测试验证
这一步最容易翻车。我建议你准备一套国密标准测试向量,每个函数单独测。不要觉得算法库没问题就跳过,我踩过这个坑——商用密码产品认证的专家测试比你自己跑一万次都狠。
避坑指南:我曾经因为SM4的CBC模式初始向量没按规定长度生成,被评审专家当场指出。这种细节在标准文档里写得很清楚,但日常开发时太容易忽略。
3.5 知识体系总览
下面这张图把本章的核心逻辑串起来。你可以对照着看,自己现在卡在哪一层。
画完这张图,我自己也回头看了看。其实最核心的就是一句话:标准是地图,合规是路标,实施是你一步一个脚印走过去。别嫌标准文档长,那一行行的参数定义,每一页的安全要求,背后都是无数测试失败的教训。
我刚开始带项目时,总觉得“先写了再说”。后来被专家评审怼过两次,才学会提前把标准清单贴在工位上,每条过一遍。现在的习惯是——新项目启动时,先把涉及到的GM/T标准找齐,做成一个checklist,每个阶段打勾确认。
嗯,这一章就到这里。记住:国密合规,最终拼的是细节。