# 国密算法概述:SM2/SM3/SM4 简介与发展历史

国密密码服务接口设计与开发 - 第1节

1. 国密算法到底是什么?

说起国密算法,很多刚入行的朋友第一反应就是——「哦,国家定的密码标准」。这话没错,但不够具体。

说白了,国密算法就是咱们国家自主研发的一套密码算法体系。跟国际上的 RSA、AES、SHA 这些算法对标,但底层逻辑和数学原理完全不同。

我记得 2018 年帮一家银行做等保整改时,对方技术总监问我:「国密到底安全么?」我的回答很直接——数学上没毛病,关键看你怎么实现。

目前最核心的三个算法是:SM2(公钥密码)、SM3(密码杂凑)、SM4(分组密码)。它们分别对应国际算法的 RSA、SHA-256 和 AES。

核心概念速览:

  • SM2 — 非对称加密,用于数字签名、密钥交换
  • SM3 — 哈希算法,用于消息摘要、完整性校验
  • SM4 — 对称加密,用于数据加解密

2. 发展历史:从「能用」到「必须用」

2.1 为什么要搞自己的算法?

你可能会问:国际算法用得好好的,为什么非要另起炉灶?

原因其实很简单——密码主权。2000 年代初期,我国重要信息系统大量使用国外密码产品。一旦出现断供或后门,后果不堪设想。

举个例子:2013 年斯诺登事件后,很多国家开始重新评估密码算法依赖。国密算法从那时起加速推进,从「推荐使用」变成了「强制合规」。

我个人觉得,这种「底线思维」非常明智。你想想,金融、政务、能源这些核心系统的密钥掌握在别人手里,那跟裸奔有什么区别?

2.2 三个算法的时间线

算法 公布时间 标准编号 对应国际算法 主要用途
SM2 2010 年 GM/T 0003-2012 RSA / ECDSA 签名、密钥交换、加密
SM3 2010 年 GM/T 0004-2012 SHA-256 消息摘要、HMAC
SM4 2006 年 GM/T 0002-2012 AES 数据加解密

看到这个表你可能会发现:SM4 居然比 SM2、SM3 还早四年发布。没错,SM4 最早是用于无线局域网标准(WAPI),后来才被纳入国密体系。

2.3 关键里程碑

  • 2006 年:SM4 算法随 WAPI 标准首次亮相
  • 2010 年:SM2、SM3 标准草案公布
  • 2012 年:三个算法的 GM/T 行业标准正式发布
  • 2017 年:SM2/SM3/SM4 成为 ISO/IEC 国际标准部分
  • 2020 年:《密码法》实施,国密算法成为法定合规要求

嗯,这里要注意一个关键点——国密算法从「行业标准」升级为「国际标准」是在 2017 年。这意味着全球范围内都可以合规使用国密算法了。

避坑提示:我曾经遇到一个团队,代码里同时混用了 SM2 和 RSA,结果在等保测评时被判定为「不合规」。记住:一旦决定使用国密,就全线替换,不要混用。

3. 三个算法的核心差异

很多人刚开始接触时会把这三个算法搞混。我建议用一张图来理解它们的关系:

一句话总结:

  • SM2 — 解决「你是谁」和「密钥怎么安全传给对方」
  • SM3 — 解决「数据有没有被改过」
  • SM4 — 解决「数据怎么加锁解锁」

打个比方:你要给朋友寄一个保险箱。

  • SM2 是保险箱的锁和钥匙(公钥/私钥对)
  • SM4 是你用来锁住重要文件的密码锁(对称密钥)
  • SM3 是贴在保险箱上的封条(防止被调包)

实际操作中,这三个算法经常配合使用。比如 SSL/TLS 握手过程,先用 SM2 交换 SM4 的密钥,然后用 SM4 加密数据传输,最后用 SM3 校验数据完整性。

4. 算法选型思路

我记得 2021 年帮一家互联网公司做国密改造时,他们最纠结的问题就是——「到底用哪个算法加密?」

我的建议很明确:

  • 需要公开传输密钥? → 用 SM2(非对称)
  • 需要大量加密数据? → 用 SM4(对称加密速度快)
  • 需要校验文件完整性? → 用 SM3(哈希不可逆)

重要提醒:SM3 是哈希算法,不可逆。也就是说你不能从 SM3 摘要还原出原始数据。如果有人说「SM3 加密后可以解密」,那是在忽悠你。

5. 知识体系总览

下面这张图可以帮你快速建立国密算法的整体认知框架:

国密算法知识体系总览 国密算法体系 SM2 公钥密码 / 椭圆曲线 SM3 密码杂凑 / 256位摘要 SM4 分组加密 / 128位密钥 主要用途 数字签名 密钥交换 主要用途 消息摘要 完整性校验 主要用途 数据加密 通信加密 典型应用场景 电子政务 / 金融交易 / 物联网安全 / 数据合规 2010年公布 · 2012年标准化 2020年《密码法》强制合规 核心数学:椭圆曲线 分组密码+杂凑函数

6. 实际项目中的选择建议

说实话,很多开发者对国密算法有误解。觉得「国密就是国产版的 RSA+AES+SHA」。其实没那么简单。

  • SM2 和 RSA 的最大区别:SM2 基于椭圆曲线,同等安全强度下密钥更短(SM2 256位 ≈ RSA 3072位)
  • SM3 和 SHA-256 的核心差异:SM3 输出也是 256 位,但内部结构不同,抗碰撞攻击能力有差异
  • SM4 和 AES 的实现区别:SM4 的 S 盒是固定的,AES 的 S 盒基于有限域逆元运算

我个人习惯的做法:在项目初期就确定好算法选型,然后用 SM2 做签名、SM4 做加密、SM3 做校验。三个算法配合使用,不要混入国际算法。这样后面改造时能省 60% 的工作量。

7. 本章小结

好,我们来快速回顾一下:

  • 国密算法是国家密码管理局发布的标准密码算法体系
  • 三大核心算法是 SM2(公钥)、SM3(哈希)、SM4(对称加密)
  • 发展历程从 2006 年 SM4 首发,到 2020 年《密码法》强制合规
  • 每个算法有明确的定位和适用场景,不能混用

你想想看,做密码相关开发,最怕的不是算法本身难,而是选错算法或者用错场景。后面的章节里,我们会深入到每个算法的接口实现和调试技巧。到那时候,你就能真正上手写出合规的国密代码了。

最后提醒一句:如果你现在正在做新项目,建议直接把国密算法作为默认选项。不要等到验收时发现不合规再回头改——那种痛,我经历过,真的不想再看别人经历一次。