SM2算法分析(国密学习 4/5)

注:SM2算法中涉及很多椭圆曲线中的运算,在代码实现上看起来有点乱,故在本文中没有具体展示源码(推荐在sagemath中进行椭圆运算)

算法基本信息

SM2算法是椭圆曲线算法,个人感觉是公开国密中算是比较难和用法较广的算法。

SM2算法主要用在:数字签名算法、密钥交换协议和公钥加密算法,在gb/t中分别是32918_2-2016、32918_4-2016、32918_5-2016。

SM2算法是相当于国内的ECC,其中:

  1. 数字签名算法是对标国外的ECDSA签名算法
  2. 密钥交换协议是对标ECDH
  3. 公钥加密是对标ECIES

数字签名算法

参数定义

先来看一下在数字签名中定义好的参数标志:
$G$:$(x_G,y_G)$ 椭圆曲线选取的一个阶为素数的基点
$d_A$: 用户A的私钥
$P_A$: $(x_A,y_A)$ 公钥,生成:$P_A= d_A*G$
$H_v(x)$: x 的消息摘要,摘要的长度为$v$,这里用的杂凑算法是SM3
$(r,s)$: 发送的签名
$a,b$: 椭圆曲线参数 $y = x^3 +ax + b$

特别说一下一个特别的参数$Z_A$:

签名者A有长度为$entlen_A$比特的可辩别标识$ID_A$,记$ENTL_A$是由整数$entlen_A$转换成的俩个字节;
($ID_A$:用户 A 的身份标识,它可能是个人的用户签名(email)、企业签名、服务器证书(域名)、设备认证(MAC地址))

$Z_A = H_{256}(ENTL_A || ID_A || a || b || x_G || y_G || x_A || y_A)$

生成算法

验证算法


SM2算法分析(国密学习 4/5)
https://baymax-fools.github.io/2026/06/12/crypto/SM2算法分析/
Author
Baymax
Posted on
June 12, 2026
Updated on
June 12, 2026
Licensed under