1. 国密算法概述:SM2/SM3/SM4 算法原理、国密与国际算法对比、国密合规性要求
各位好,我是老张。做密码学工程十几年了,今天咱们聊聊国密算法。
说实话,刚接触国密那会儿,我也觉得不就是把 RSA 换成 SM2、把 SHA-256 换成 SM3 嘛。后来踩了几个坑才明白——国密不是简单的算法替换,而是一整套密码体系。你想想看,从密钥生成、签名验签、加密解密到证书管理,每个环节都有自己的一套玩法。
1.1 SM2 椭圆曲线公钥密码算法
SM2 是我国自主设计的椭圆曲线公钥密码算法,2010 年发布,2016 年成为国家标准(GB/T 32918)。它主要干三件事:数字签名、密钥交换、公钥加密。
核心参数速览
- 曲线方程:y² = x³ + ax + b(素数域 256 位椭圆曲线)
- 推荐曲线:sm2p256v1
- 密钥长度:256 位(公钥 64 字节,私钥 32 字节)
- 签名长度:64 字节(r || s)
- 安全强度:128 位(与 3072 位 RSA 相当)
我个人习惯把 SM2 和 ECDSA 放在一起对比。SM2 的签名算法其实是在 ECDSA 基础上做了改进——增加了用户标识 Z 值的计算。什么意思呢?就是签名的时候把签名者的身份信息也揉进去了,防止签名被挪用到别的场景。
避坑指南
我曾经在对接某政务系统时,发现对方 SM2 签名验签总失败。查了两天才找到原因——Z 值计算时用户标识 ID 的编码方式不一致。一方用了 UTF-8,另一方用了 GBK。嗯,这种坑,你遇到了就知道有多头疼。
1.2 SM3 密码杂凑算法
SM3 是国密标准的哈希算法,2010 年发布,2016 年成为国家标准(GB/T 32905)。输出 256 位(32 字节)的杂凑值。
说白了,SM3 就是咱们国密体系里的"指纹生成器"。你给它任意长度的数据,它给你一个固定长度的摘要。SM3 的设计借鉴了 SHA-256 的框架,但做了不少改进——消息扩展更复杂、压缩函数轮数更多(64 轮 vs SHA-256 的 64 轮但结构不同)。
| 对比项 | SM3 | SHA-256 |
|---|---|---|
| 输出长度 | 256 位 | 256 位 |
| 消息分组 | 512 位 | 512 位 |
| 压缩函数轮数 | 64 轮 | 64 轮 |
| 消息扩展 | 132 字 | 64 字 |
| 安全强度 | 128 位 | 128 位 |
我在项目中做过 SM3 和 SHA-256 的性能对比。在同样的硬件环境下,SM3 比 SHA-256 慢大概 10%-15%。但说实话,对于大多数业务场景,这个差距完全可以接受。而且 SM3 在抗碰撞攻击方面表现更稳健——它的消息扩展机制让攻击者更难找到碰撞。
1.3 SM4 分组密码算法
SM4 是国密标准的分组对称加密算法,2006 年发布,2016 年成为国家标准(GB/T 32907)。密钥长度 128 位,分组长度 128 位,采用 32 轮非线性迭代结构。
我刚开始用 SM4 的时候,总觉得它跟 AES 差不多。后来仔细研究才发现——SM4 的 S 盒设计、密钥扩展算法、轮函数结构都跟 AES 完全不同。SM4 用的是 Feistel 结构变体,加解密过程基本一致,只是轮密钥的使用顺序相反。
重要提醒
SM4 有五种工作模式:ECB、CBC、CFB、OFB、CTR。我个人强烈建议:生产环境不要用 ECB 模式。我曾经审计过一个项目,对方用 SM4-ECB 加密用户身份证号,结果相同身份证号加密后密文一模一样——这跟没加密有啥区别?
1.4 国密与国际算法对比
咱们做个全面的对比,方便你理解国密算法在国际密码体系中的位置。
| 功能 | 国密算法 | 国际算法 | 关键差异 |
|---|---|---|---|
| 公钥加密/签名 | SM2 | RSA / ECDSA | SM2 基于椭圆曲线,密钥更短;签名含 Z 值防重用 |
| 哈希 | SM3 | SHA-256 | SM3 消息扩展更复杂,抗碰撞性更强 |
| 对称加密 | SM4 | AES | SM4 用 Feistel 结构,AES 用 SPN 结构 |
| 密钥长度 | SM2: 256 位 SM4: 128 位 |
RSA: 2048+ 位 AES: 128/256 位 |
SM2 密钥远短于 RSA,同等安全强度 |
你可能会问:国密算法安全吗?我的回答是:经过国家密码管理局审查和国内外密码学界的分析,SM2/SM3/SM4 目前没有发现有效的攻击方法。它们的设计都经过了严格的论证和测试。
1.5 国密合规性要求
这部分是重点,也是很多同学容易忽略的。国密合规不是技术问题,是法律问题。
根据《中华人民共和国密码法》和《商用密码管理条例》,以下场景必须使用国密算法:
- 电子政务系统:政府网站、政务服务平台、电子公文系统
- 金融核心系统:网上银行、支付清算、证券交易
- 关键信息基础设施:能源、交通、医疗、教育等领域
- 等保三级及以上系统:等保测评中密码应用安全是必测项
合规检查清单(我总结的)
- 算法合规:必须使用 SM2/SM3/SM4 等国密标准算法
- 证书合规:必须使用国密 SSL 证书(SM2 证书)
- 密钥管理合规:密钥生成、存储、分发、销毁必须符合 GM/T 0054 要求
- 密码产品合规:使用的密码机、密码卡必须具有《商用密码产品认证证书》
- 测评合规:通过商用密码应用安全性评估(密评)
我曾经帮一家银行做国密改造。他们原来用 RSA 证书做网上银行的 HTTPS,密评的时候直接被判不合格。后来我们花了三个月,把整个 TLS 握手流程从 RSA 改成 SM2,证书体系也全部重建。嗯,那段时间真是加班加到吐。
经验之谈
国密改造最容易被忽视的是密钥生命周期管理。很多团队只关注算法替换,忘了密钥的生成、存储、备份、轮换、销毁这些环节。我建议你在项目初期就规划好密钥管理方案,不然后面补起来成本极高。
1.6 国密算法知识体系总览
下面这张图是我自己整理的国密算法知识体系,涵盖了算法、证书、密钥管理和合规四个维度。你可以把它当作学习路线图。
这张图把国密体系分成了四层。咱们这门课会按照这个结构展开:先讲算法原理,再讲证书配置,然后是密钥管理实战,最后是合规落地。每一层都有对应的实操内容。
好了,第一章就到这里。记住一句话:国密不是选择题,是必答题。后面咱们会一步步把每个环节都讲透。