1. SM2算法概述:国密标准背景、算法家族、与其他公钥算法对比
做密码开发这些年,我经常被问到:「SM2到底是什么?」嗯,这个问题其实挺基础的,但真要讲透还真得花点功夫。今天我们就从国密标准背景、算法家族和横向对比这三个角度,把SM2的来龙去脉理清楚。
1.1 国密标准背景
中国为什么要搞自己的密码标准?说白了,信息安全是国家的命门。早年国内广泛使用RSA、ECC等国际算法,核心专利和技术都握在别人手里。一旦出现贸易封锁或地缘政治纠纷,卡脖子风险极高。
2010年,国家密码管理局正式发布了SM2椭圆曲线公钥密码算法标准(GM/T 0003-2012)。我记得当时刚入行,看到这个标准的第一反应是:终于有自家的算法可以用了。SM2基于椭圆曲线密码学(ECC),安全性等价于RSA-2048,但密钥长度更短、计算效率更高。
国密标准是一个体系,SM2只是其中的公钥密码部分。它和SM3(哈希)、SM4(对称加密)共同构成了国家商用密码的基础设施。目前,金融、政务、电力、交通等关键领域都已强制要求使用国密算法。
1.2 SM2算法家族
SM2不只是「一个」算法,它是一族公钥密码算法的统称,主要包含三个子功能:加密、数字签名、密钥交换。我们一个一个来看。
1.2.1 加密 / 解密
加密是为了保证数据的机密性。SM2采用了椭圆曲线集成加密方案(ECIES)的变体,具体来说是基于椭圆曲线上的离散对数难题。加密时使用接收方的公钥,解密时使用私钥。
我刚开始实现SM2加密时踩过一个坑:SM2加密结果不是单纯的密文,它还包含了椭圆曲线上的一个点(C1)、对称加密的密文(C2)以及校验码(C3)。所以封装接口时千万要注意数据格式,不能直接当字节数组拼起来。
1.2.2 数字签名 / 验签
签名用于保证数据的完整性和不可否认性。SM2签名算法基于椭圆曲线上的离散对数问题,类似于ECDSA但有自己的参数和哈希处理方式。签名时使用私钥,验签时使用公钥。
SM2签名有一个独特的地方:它内部使用了SM3哈希算法。也就是说,签名前先对消息算SM3摘要,再对摘要进行签名运算。这和ECDSA使用SHA-256不同。
1.2.3 密钥交换
密钥交换允许两方在不安全的信道上协商出一个对称密钥。SM2的密钥交换协议类似ECDH(椭圆曲线Diffie-Hellman),但增加了身份认证和密钥确认步骤。
我在做端到端加密通信时就用过SM2密钥交换。双方各自生成临时密钥对,交换公钥后计算出共享的秘密点,再通过密钥派生函数得到最终的对称密钥。整个过程不需要传输私钥,安全性很高。
1.3 与其他公钥算法的对比
为了让你更直观地理解SM2的位置,我整理了一个对比表格。表格主要从安全性、性能、密钥长度、签名长度和标准化程度五个维度出发。
| 算法 | 安全级别 (比特) | 密钥长度 (位) | 签名长度 (字节) | 加密速度 | 标准化 |
|---|---|---|---|---|---|
| SM2 | 128 | 256 | ~64 | 较快 | 国标GM/T 0003 |
| RSA-2048 | 112 | 2048 | 256 | 慢 (解密) | PKCS#1 |
| ECDSA (secp256k1) | 128 | 256 | ~64 | 快 | ANSI X9.62 |
| Ed25519 | 128 | 256 | 64 | 非常快 | RFC 8032 |
- 安全性:SM2提供128比特安全级别,与256位密钥的ECDSA相当,高于RSA-2048的112比特。你想想看,用更短的密钥获得更高的安全性,这是椭圆曲线算法的核心优势。
- 性能:SM2的加密和签名速度都优于RSA。我在一次压测中对比过,SM2签名一次大约0.5ms,而RSA-2048签名约2ms。解密场景下差距更大,SM2解密比RSA快接近一个数量级。
- 密钥长度:SM2私钥只有32字节,公钥64字节(未压缩)。RSA的私钥动辄上千字节,存储和传输成本高很多。
- 签名长度:SM2签名结果约64字节,和ECDSA、Ed25519相当。但RSA签名固定256字节,带宽开销大。
- 标准化:SM2是中国国家标准,在国内必须使用;ECDSA是国际标准,国际互认度高;Ed25519是新兴算法,速度极快但尚未进入国标体系。
1.4 知识框架总览
下面这张流程图展示了SM2算法家族的整体结构以及它们之间的依赖关系。你可以看到,SM3哈希作为底层基础设施,被签名和密钥交换复用;而加密、签名、密钥交换共同构成了SM2公钥密码体系。
我个人觉得,理解SM2的关键在于把握「椭圆曲线密码学」这条主线。无论是加密、签名还是密钥交换,本质上都是在椭圆曲线群上做标量乘法。只要把这一点想通,后面学习接口封装时就会轻松很多。
1.5 本章小结
我们快速回顾一下:
- SM2是为了实现自主可控而诞生的国标公钥密码算法,对标国际ECC算法。
- 算法家族包含加密、签名、密钥交换三大功能,它们共享同一个椭圆曲线参数。
- 与RSA、ECDSA等国际算法相比,SM2在安全等级、密钥长度、性能方面都有明显优势。
- 国内做商用密码应用,SM2是绕不开的基石。