国密密码服务接口设计与开发 - 第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. 知识体系总览
下面这张图可以帮你快速建立国密算法的整体认知框架:
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 年《密码法》强制合规
- 每个算法有明确的定位和适用场景,不能混用
你想想看,做密码相关开发,最怕的不是算法本身难,而是选错算法或者用错场景。后面的章节里,我们会深入到每个算法的接口实现和调试技巧。到那时候,你就能真正上手写出合规的国密代码了。
最后提醒一句:如果你现在正在做新项目,建议直接把国密算法作为默认选项。不要等到验收时发现不合规再回头改——那种痛,我经历过,真的不想再看别人经历一次。