当前位置:   article > 正文

SM2签名与验证过程

sm2签名

1. SM2基本介绍

SM2算法定义了两条椭圆曲线,一条基于F§上的素域曲线,一条基于F(2^m)上的拓域曲线,目前使用最多的曲线为素域曲线,本文介绍的算法基于素域曲线上的运算,素域曲线方程定义如下:
y 2 − x 3 + a x + b y^2-x^3+ax+b y2x3+ax+b
SM2算法定义了5个默认参数,即有限域F§的规模p,椭圆曲线参数a,b,椭圆曲线的基点G(x,y),与G的阶n。

国密算法标准中给出了对应的默认值,默认值如下:

p:FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF
n:FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123
a:FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC
b:28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93
Gx:32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7
Gy:BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

牢记上面参数,在后续的运算过程中会使用到上面参数。

2. SM2签名与验证的参数

在SM2签名的过程除与RSA算法中私钥参与外,SM2签名还新增了公钥与用户标识(IDa),私钥我们标记为 D,公钥Pub(x,y)。

3.SM2签名过程

我们假设待签名消息为M,我们要先对消息进行预处理,处理过程如下:

Za = HASH256(ENTL||IDa||a||b||Gx||Gy||Pubx||Puby)
  • 1

ENTL是用户标识(IDa)的长度,占两个字节的长度。

A1: M' = Za || M

A2: e = Hash(M'),将e转换成一个大整数

A3:产生随机数 k , k的范围在 [1, n-1]上

A4:计算点(x1,y1) = kG,将x1转换为一个大整数

A5:计算 r = (e + x1) mod n , 若 r = 0 或 r + k = n 返回A3重新选择随机数

A6:计算 s = ((1 + D)^-1 · (k - r · D)) mod n , 若 s = 0 返回A3重新选择随机数

A7:将 r 与 s 转换成大整数,r 与 s 共同组成了签名结果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

4. SM2 签名验证

假设我们收到的消息原文为 M,签名值为(r,s),对于该签名的验证流程如下:

B1: r 的范围是否在 [1, n-1] 中,如不在,验证失败

B2: s 的范围是否在 [1, n-1] 中,如不在,验证失败

B3:M' = Za || M

B4:e = Hash(M'),将e转换成一个大整数

B5:计算 t = (r + s) mod n ,若 t = 0,验证失败

B6:计算点(x1,y1)= [s]G + [t]Pub(x,y)

B7: 计算 R = (e + x1) mod n,检验 R = r,若不相等,验证失败

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/388280
推荐阅读
相关标签
  

闽ICP备14008679号