国密标准号速查:GM/T 0004、GB/T 32907 与 RFC 8998 到底是什么关系
第一次看到"标准号墙"的都懂
对接需求书第一次写上「按 GB/T 32907 用 SM4 加密报文、SM2 签名、按 GM/T 0004 取摘要、支持 RFC 8998 国密 TLS」时,像四份不相干的文档。其实不是——它们是同一套算法的四个年代版本,看懂一个规律就全部打通:
GM/T 是 2012 年的行业标准,GB/T 是 2016 年升级的国家标准,ISO/IEC 在 2017-2018 年收录进国际标准,RFC 8998 是把三件套绑定进 TLS 1.3 的协议轮廓。
对应表(收藏这一张就够了)
| 算法 | 角色 | 行业标准(2012) | 国家标准(2016) | 国际标准 | 在线工具 | |---|---|---|---|---|---| | SM2 | 公钥:签名、密钥交换、加密 | GM/T 0003-2012 | GB/T 32918-2016 | ISO/IEC 14888-3(签名部分) | SM2 工具 | | SM3 | 哈希摘要,256 位 | GM/T 0004-2012 | GB/T 32905-2016 | ISO/IEC 10118-3:2018 | SM3 工具 | | SM4 | 分组密码,128 位 | GM/T 0002-2012 | GB/T 32907-2016 | ISO/IEC 18033-3:2017 | SM4 工具 |
读国密需求时养成两个习惯:
- 看年份后缀。引「GM/T 0004-2012」和引「GB/T 32905-2016」指的是同一个算法(SM3)的不同年代版本。如果有厂商坚称两者是不同的东西,红旗的指向是厂商,不是标准。
- 按角色对号入座。「摘要」永远落到 SM3,「签名或密钥交换」落到 SM2,「数据加密」落到 SM4。需求里出现「用 SM2 加密大段报文」,多半是翻译走样了——SM2 只管短报文和密钥运输,大报文加密归 SM4。
升级路径,以及为什么它有商业含义
每个 SM 算法走的都是同一条路:2000 年代中叶由密码主管部门公布(SM4 在 2006 年解密公开),2012 年定为行业标准(GM/T,「密码行业标准」),2016 年升级为国家标准(GB/T,「推荐性国家标准」),2017-2018 年进入对应的 ISO/IEC 部分。
升级不是走形式——它改变的是哪些标书能引用它。早年写「按 GM/T 0002」的采购文件陆续改写成「按 GB/T 32907」,等保测评和密评的检查清单也同步换用 GB/T 号。今天做国内市场,自己的文档里引用 GB/T 号;GM/T 名字仍流通在旧版规范和厂商 datasheet 里,这正是两个号都同时出现在野外的缘故。
RFC 8998:三件套在 TLS 里会师
2021 年 3 月 IETF 发布 RFC 8998,定义了 TLS 1.3 的 ShangMi(SM)密码套件:TLS_SM4_GCM_SM3 和 TLS_SM4_CCM_SM3。一行套件名把整个家族塞进了熟悉的 TLS 角色:
- 握手签名:SM2(SM2 曲线,SM3 作其哈希)
- 密钥编排 / 握手转录哈希:SM3
- 报文加密:SM4 的 GCM 或 CCM 模式(注意:是 GCM/CCM,不是多数 SM4 对接起步用的 CBC)
「国密 HTTPS」网关背后就是这份文档:TLS 1.3 栈里每个原语都换成 SM 对应物,全路径无 AES、无 SHA-256。国内厂商问你的客户端「支不支持国密 SSL / ShangMi 套件」,问的就是 RFC 8998 支持——需要看网关实际协商了什么时,抓一次握手 HAR 用 HAR 查看器 打开,协商套件名一目了然。
项目里每个文档引用的会是什么
- 架构文档:引 GB/T 号(32918 / 32905 / 32907)——照着引回去。
- 厂商 SDK datasheet:常常还引 GM/T 0003/0004/0002——同算法旧版本。
- 合规报告:等保或密评文书——GB/T 号加上测评体系自身的号(测评过程在 GM/T 0115 系列)。
- 网关 / TLS 要求:RFC 8998,通常表述为「国密 SSL」「GM TLS」。
动手前先验证
三个算法都能在浏览器本地跑通——无账号、无上传:SM2 加解密签名、SM3 哈希、SM4 ECB/CBC。写集成代码之前,先各跑一组已知测试向量:它会把所有格式分歧(hex 还是 base64、C1C3C2 顺序、PKCS#7 padding)从两天的联调会战变成和对接方两分钟的对话。
更深一层的选型与排查——三件套什么时候用哪个、密文对不上时的排查顺序、密钥处理的边界——见姊妹篇《SM2/SM3/SM4 实战:选型、集成与排查》。