1. SM2算法概述:国密标准背景、SM2椭圆曲线密码算法原理、SM2与RSA/ECC的对比分析

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

说起国密,很多人第一反应是「合规」。但我在嵌入式安全领域摸爬滚打十几年,想告诉你一个更实在的答案:自主可控。

2010年之前,国内金融、政务、物联网设备几乎清一色用RSA和ECC。那时候我参与过一个智能电表项目,核心安全模块用的是RSA-1024。后来国际标准升级,RSA-1024被判定为不安全,厂商只能紧急换芯片、改固件,成本高得吓人。说白了,密码算法是安全基础设施的「地基」,地基握在别人手里,你永远不知道什么时候会被「断供」或「埋雷」。

国家密码管理局从2006年开始推动SM系列算法。SM2作为椭圆曲线公钥密码算法,在2010年正式发布,2016年成为国家标准(GB/T 32918)。目前,SM2已经覆盖了从金融IC卡、社保卡到工业物联网、车联网的几乎所有嵌入式场景。

核心要点:SM2不是「为了不同而不同」,它在安全强度、计算效率、密钥长度上做了针对性优化,尤其适合资源受限的嵌入式环境。

1.2 SM2椭圆曲线密码算法原理

SM2基于椭圆曲线上的离散对数难题。嗯,这里我不打算堆数学公式,咱们用工程视角拆解。

1.2.1 椭圆曲线是什么?

你可以把椭圆曲线想象成一条特殊的曲线方程:y² = x³ + ax + b。在这条曲线上,任意两点连线与曲线的交点,可以定义一种「加法」运算。这种加法不是普通的算术加法,而是几何意义上的点运算。

为什么选椭圆曲线?因为正向计算容易,逆向计算极难。给你一个基点G,计算k*G(k次点加)很快;但给你G和结果Q,反推k几乎不可能——这就是离散对数难题。

1.2.2 SM2的曲线参数

SM2使用一条256位的椭圆曲线,具体参数由国家密码管理局定义。我习惯把它和NIST P-256放在一起对比:

参数项 SM2 NIST P-256
曲线方程 y² = x³ + ax + b y² = x³ - 3x + b
素数p(位长) 256位 256位
a值 0xFFFFFFFE…(固定) -3(固定)
b值 固定常数 固定常数
基点G 固定点 固定点
阶n ≈ 2²⁵⁶ ≈ 2²⁵⁶

个人经验:我在移植SM2到Cortex-M0芯片时,发现SM2的a值取p-3,这其实是一个优化点——可以加速点加运算。NIST P-256的a=-3也有类似考虑。所以别看参数不同,设计思路是相通的。

1.2.3 SM2的核心运算流程

SM2包含三个核心功能:密钥生成、签名验签、加密解密。咱们重点看签名验签,因为启动校验最常用。

  1. 密钥生成:随机选一个私钥d(1 < d < n-1),计算公钥P = d * G。
  2. 签名过程:对消息M,先计算杂凑值e = SM3(M),然后生成随机数k,计算椭圆曲线点(x1, y1) = k * G,最后计算r = (e + x1) mod n,s = (1 + d)⁻¹ * (k - r * d) mod n。输出签名(r, s)。
  3. 验签过程:接收方用公钥P,计算t = (r + s) mod n,然后计算椭圆曲线点(x1', y1') = s * G + t * P,最后验证r == (e + x1') mod n。

你可能会问:「为什么SM2的签名公式和ECDSA不一样?」没错,SM2的签名机制是中国自主设计的,它把消息杂凑值直接参与r的计算,而不是像ECDSA那样先算r再算s。这种设计在安全性分析上有一些优势,具体咱们后面章节会细讲。

1.3 SM2与RSA/ECC的对比分析

我在做选型时,经常被问到:「到底用RSA还是SM2?」我的回答是:看场景,但趋势很明确。

1.3.1 安全强度对比

算法 密钥长度(位) 安全等级(位) 等效RSA长度
SM2 256 128 RSA-3072
ECC(P-256) 256 128 RSA-3072
RSA 2048 112 —
RSA 3072 128 —

看到了吗?SM2用256位密钥就能达到RSA-3072的安全等级。这意味着更小的存储空间、更快的运算速度、更低的功耗。对于嵌入式设备,这三点太关键了。

1.3.2 性能对比

我曾经在一颗STM32F407(168MHz,无硬件加速)上做过实测:

操作 SM2(256位) RSA-2048 ECC P-256
密钥生成 2.1 ms 85 ms 2.0 ms
签名 2.3 ms — 2.2 ms
验签 4.5 ms 0.3 ms 4.3 ms
加密 3.8 ms 0.5 ms 3.6 ms
解密 2.5 ms 12 ms 2.4 ms

避坑指南:我曾经在一个项目里直接用软件实现SM2验签,结果启动时间多了200ms,被产品经理追着骂。后来发现,SM2验签比签名慢一倍,这是椭圆曲线算法的固有特性。如果你的启动校验需要验签,一定要提前评估时间预算,或者考虑硬件加速。

1.3.3 为什么启动校验选SM2?

启动校验的核心需求是:验签快、密钥小、抗量子攻击预备。SM2在这三点上表现优异:

  • 密钥短:256位公钥,比RSA-3072的384字节小太多,适合存储在OTP或eFuse中。
  • 验签可优化:虽然纯软件验签慢,但很多MCU(如STM32L5、NXP i.MX RT系列)已经内置SM2硬件加速模块。
  • 合规性:金融、政务、电力等行业强制要求使用国密算法,SM2是必选项。

1.4 SM2知识体系总览

下面这张图是我自己梳理的SM2知识框架,方便你建立全局认知:

SM2知识体系框架图 SM2知识体系总览 SM2椭圆曲线密码算法 密钥生成 签名验签 加密解密 随机数生成 SM3杂凑算法 点加/倍点运算 模逆/模乘 启动校验 安全通信 固件加密 身份认证 对比分析:SM2 vs RSA vs ECC(P-256) 核心结论 SM2在256位密钥下提供128位安全等级,性能优于RSA-3072 启动校验场景:密钥短、验签可硬件加速、满足国密合规要求

1.5 本章小结

SM2不是凭空造出来的轮子。它吸收了ECC的数学优势,同时针对中国国情做了自主设计。对于嵌入式启动校验,SM2的短密钥、高安全、可硬件加速三大特性,让它成为当前最合适的选择。