一、SM2算法概述:国密标准背景、算法体系与对比
各位好,我是这次课程的主讲。做密码学工程落地这些年,我接触最多的就是SM2。说实话,刚接触国密那会儿,我也觉得它跟ECDSA差不多,后来踩了几个坑才明白——细节里全是魔鬼。
这一章我们先搭个框架。把SM2的背景、体系结构、以及跟RSA/ECDSA的差异理清楚。后面30章的所有实战,都建立在这个认知基础上。
1.1 国密标准背景
SM2是国家密码管理局在2010年发布的椭圆曲线公钥密码算法标准,标准号GM/T 0003-2012。说白了,这就是咱们中国自己的非对称密码体系。
为什么要搞一套自己的?我个人的理解是:
- 自主可控:RSA、ECDSA都是国外标准,万一哪天被卡脖子,整个金融、政务系统都得瘫痪。这不是杞人忧天,我在某政务云项目里就遇到过FIPS模块突然不让进口的情况。
- 安全强度更高:SM2使用256位素域椭圆曲线,安全强度相当于RSA-3072。同样的安全等级,SM2的密钥更短、计算更快。
- 法律合规:等保2.0、密评、金融行业标准都明确要求使用国密算法。不做?过不了密评,项目直接黄。
核心要点:SM2不是简单的“中国版ECDSA”。它在曲线参数、签名流程、密钥派生上都有独立设计。后面我们会逐项拆解。
1.2 SM2椭圆曲线密码算法体系
SM2不是一个算法,是一整套方案。它包含三个核心部分:
| 组件 | 功能 | 对应国际算法 |
|---|---|---|
| SM2-1 数字签名 | 签名生成与验签 | ECDSA |
| SM2-2 密钥交换 | 双方协商会话密钥 | ECDH |
| SM2-3 公钥加密 | 数据加密与解密 | ECIES |
嗯,这里要注意:SM2的签名算法跟ECDSA有个关键区别——它使用了SM3哈希,而且签名过程中引入了用户标识。什么意思?就是签名的时候会把你的ID也揉进去,防止签名被挪用到别的场景。我在做电子签章系统时,就因为这个特性,避免了用户A的签名被复制到用户B的合同上。
SM2的曲线参数是固定的,标准里直接写死了。包括:
- 素域p:0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF
- 系数a、b:固定值
- 基点G:标准点坐标
- 阶n:略小于p的大素数
为什么固定?因为曲线参数如果由用户自己生成,很容易埋后门。我记得2018年有个项目,客户非要自己生成曲线参数,我坚决反对——你想想看,如果参数生成器里藏了陷门,整个系统的安全性就是纸糊的。
我的建议:生产环境中永远使用标准曲线参数。不要自己造轮子,除非你是密码学博士且经过独立审计。
1.3 与RSA/ECDSA的对比
很多同学问我:SM2比RSA强在哪?跟ECDSA比又有什么不同?
我直接上对比表,这样最清楚:
| 维度 | SM2 | RSA | ECDSA |
|---|---|---|---|
| 基础数学 | 椭圆曲线离散对数 | 大整数分解 | 椭圆曲线离散对数 |
| 密钥长度 | 256位 | 2048~4096位 | 256位 |
| 签名速度 | 快 | 慢(私钥操作) | 快 |
| 验签速度 | 快 | 快(公钥操作) | 快 |
| 加密速度 | 中等 | 慢 | 不直接支持 |
| 哈希绑定 | SM3(强制) | SHA系列 | SHA系列 |
| 用户标识 | 签名中嵌入 | 无 | 无 |
| 标准成熟度 | 国内成熟,国际一般 | 全球成熟 | 全球成熟 |
从表里能看出几个关键点:
- 密钥长度优势明显:SM2用256位就能达到RSA 3072位的安全等级。这意味着存储、传输、计算开销都小得多。我在物联网项目里,SM2证书只有几十字节,RSA证书动不动就上千字节,差距巨大。
- 签名流程不同:SM2签名时会把用户标识Z值算进去。这个Z值由用户ID、曲线参数、公钥共同计算。我曾经遇到过一个问题:两个系统用的用户ID格式不一致,导致签名验证失败。排查了一整天,最后发现是ID末尾多了个换行符。
- 加密机制独立:SM2的公钥加密不是简单的“ECIES套壳”,它有自己的密钥派生函数KDF,而且输出格式跟国际标准不一样。做跨平台对接时,这块最容易出兼容性问题。
避坑指南:我曾经在对接某银行系统时,对方把SM2密文直接按ASN.1编码,而我这边按原始字节流解析。结果就是——解密出来的数据全是乱码。后来统一了编码格式才解决。记住:SM2密文格式标准里写得很清楚,但实现方经常自己“发挥”。
1.4 SM2算法体系结构图
下面这张图是我自己整理的SM2算法体系结构。画了这么多年架构图,我觉得这张最能说清楚SM2的全貌:
这张图我建议你保存下来。后面每一章都会对应到图中的某个模块。比如第5章讲签名实现,你就回到图里看SM2-1那块;第12章讲密钥交换,就看SM2-2那块。这样学起来不会迷路。
1.5 小结
这一章我们做了三件事:
- 搞清楚了SM2的国密背景——为什么要有它,它解决了什么问题。
- 梳理了SM2的算法体系——签名、密钥交换、加密,三个组件各司其职。
- 对比了SM2与RSA/ECDSA的差异——密钥更短、安全更高、流程更复杂。