1. SM2算法概述:国密标准背景、椭圆曲线密码基础、SM2与ECDSA/RSA的对比

1.1 国密标准背景——为什么要有自己的密码算法?

说起SM2,得先聊聊国密标准的来龙去脉。我最早接触国密是2012年,那时候很多金融系统还在用RSA 1024。说实话,当时觉得RSA挺成熟的,干嘛要折腾一套新算法?后来参与了一个政务云项目,才真正理解——密码算法这东西,不能全指望别人。

国密标准,全称是“国家商用密码算法标准”。SM2是其中的公钥密码算法部分,2010年发布,2012年成为国家标准(GB/T 32918)。你想想看,如果所有关键系统都用国外的RSA或ECDSA,万一哪天人家不给你更新了,或者留个后门,那麻烦就大了。

核心要点:SM2不是凭空造出来的,它基于椭圆曲线密码(ECC),但做了很多针对中国国情的优化。说白了,就是要有自己的“密码主权”。

我记得有一次给银行做安全审计,发现他们核心交易系统还在用RSA 1024。我跟他们解释:RSA 1024的安全强度现在也就相当于80位对称密钥,而SM2能达到128位。他们当场就决定升级。嗯,这就是国密的价值所在。

1.2 椭圆曲线密码基础——SM2的数学根基

椭圆曲线密码,英文叫Elliptic Curve Cryptography,简称ECC。它不是什么高深莫测的东西,其实就是利用椭圆曲线上的点构成一个群,然后在这个群上做离散对数运算。

一条椭圆曲线的标准方程长这样:

y² = x³ + ax + b   (其中4a³ + 27b² ≠ 0)

SM2选用的曲线参数是固定的,由国家密码管理局指定。我习惯把这条曲线叫做“SM2标准曲线”,它的参数包括p、a、b、G、n、h。其中G是基点,n是阶,h是余因子。

避坑指南:我曾经在移植SM2到ARM Cortex-M4时,发现曲线参数写错了——把p的字节序搞反了。结果签名验证一直失败,查了两天才找到问题。所以,曲线参数一定要逐字节核对,别偷懒。

椭圆曲线密码的核心优势是什么?密钥短、速度快、安全性高。举个例子:

安全强度(对称密钥等价) RSA密钥长度 ECC/SM2密钥长度
80位 1024位 160位
112位 2048位 224位
128位 3072位 256位
256位 15360位 512位

看到没?SM2用256位密钥就能达到RSA 3072位的安全强度。这在嵌入式设备上简直是天大的优势——存储空间省了,传输带宽省了,计算量也小了。

1.3 SM2与ECDSA/RSA的对比——谁更适合你的场景?

很多刚接触国密的人会问:SM2和ECDSA到底有什么区别?说白了,SM2就是中国版的ECDSA,但细节上有很多不同。

我整理了一个对比表,方便你快速理解:

对比维度 SM2 ECDSA RSA
数学基础 椭圆曲线 椭圆曲线 大整数分解
密钥长度(推荐) 256位 256位 3072位
签名速度 快 快 慢
验签速度 快 快 较快
加密速度 快 N/A 慢
解密速度 快 N/A 慢
标准制定者 中国国密局 ANSI/NIST RSA实验室
国内合规性 强制要求 不推荐 不推荐

这里有个关键点:SM2的签名算法和ECDSA虽然都基于椭圆曲线,但签名生成过程不一样。SM2的签名值是一个(r, s)对,但r的计算方式、s的生成公式都和ECDSA有差异。我曾经在项目中遇到过把SM2签名直接当ECDSA签名用的坑——验签当然过不了。

注意:SM2和ECDSA的密钥格式也不一样。SM2的公钥是64字节(未压缩),而ECDSA的公钥通常是65字节(带前缀)。如果你在做密钥格式转换,一定要搞清楚对方用的是哪种标准。

再说说RSA。RSA的优势在于实现简单,理解门槛低。但它的劣势也很明显:密钥太长,计算太慢。尤其是在嵌入式设备上,RSA 3072的签名操作可能要几百毫秒,而SM2只需要几十毫秒。你想想看,如果是一个需要频繁签名的物联网设备,这个差距就很要命了。

1.4 SM2的知识体系结构

为了让你对SM2有个整体认识,我画了一张结构图。它展示了SM2算法的核心组成和它们之间的关系。

SM2算法知识体系结构 SM2 国密算法 数字签名 密钥交换 公钥加密 椭圆曲线参数 有限域运算 点乘/点加 大数运算优化 预计算/查表 硬件加速接口 物联网 / 金融IC卡 / 电子政务 / 区块链 / 车联网 说明:SM2算法体系从数学基础到应用场景共五层,每一层都依赖下一层的支撑。 本课程将重点讲解第三层(数学基础)和第四层(实现优化)的性能平衡策略。

从这张图你能看到,SM2不是孤立的算法。它包含数字签名、密钥交换、公钥加密三大功能。底层依赖椭圆曲线参数、有限域运算、点乘点加这些数学基础。再往下,就是性能优化的关键——大数运算、预计算、硬件加速。最后落地到各种应用场景。

我个人习惯把SM2的学习路径分成三步:先理解数学原理,再掌握标准接口,最后才是性能优化。很多工程师一上来就扎进优化细节,结果连签名验签流程都没搞清楚,反而走了弯路。

我的建议:如果你是第一次接触SM2,先别急着看优化。把椭圆曲线的基本概念搞懂,把SM2的签名和验签流程走一遍,用OpenSSL或GmSSL跑几个例子。等你有感觉了,再来看后面的性能优化章节。