2021SC@SDUSC sm2数字签名算法

2022年10月26日13:17:26

2021SC@SDUSC

数字签名

1.参数与密钥产生

参数的产生、密钥的产生与SM2加密解密算法相同。

2.数字签名生成验证过程

1.SM2数字签名生成算法

假设待签名的消息为M,为了获取消息M的数字签名(r,s),作为签名者的用户A应实现以下运算步骤:
(1)置

M

=

Z

A

M

\overline{M}=Z_A ||MM=ZAM其中ZA是用户的A的可辨标识、部分椭圆曲线系统参数和用户A公钥的杂凑值;

(2)计算,

e

=

H

v

(

M

)

e=H_v (\overline{M})e=Hv(M)并将生成e的数据类型转换成整数型;

(3)使用随机数发生器产生随机数

k

[

1

,

n

1

]

k∈[1,n-1]k[1,n1]

(4)计算椭圆曲线点

(

x

1

,

y

1

)

=

[

k

]

G

(x_1,y_1)=[k]G(x1,y1)=[k]G,其中G是椭圆曲线上的基点,

(

x

1

,

y

1

)

(x_1,y_1 )(x1,y1)在椭圆曲线上;
(5)计算

r

=

(

x

1

+

e

)

m

o

d

n

r=(x_1+e)modnr=(x1+e)modn,若r = 0或者r + k = n,就返回到步骤(3)重新生成随机数;

(6)计算

s

=

(

(

1

+

d

A

)

1

(

k

r

d

A

)

)

m

o

d

n

s=((1+d_A)^{-1}⋅(k-rd_A))modns=((1+dA)1(krdA))modn,若计算的s值为0,则返回步骤(3)重新生成随机数;

(7)将得到的(r, s)数据类型转换成字节串,则消息M的签名值为(r, s)。
3.SM2数字签名验证算法

为了检验收到的消息M ‘以及其数字签名(r’,s’),作为验证者的用户B进行以下步骤:

(1)检验r’∈[1,n-1]是否成立,若不成立则验证不通过;

(2)检验s’∈[1,n-1]是否成立,若不成立则验证不通过;

(3)置

M

=

Z

A

M

\overline{M^′}=Z_A ||M^′M=ZAM,其中Z_A是关于用户的A的可辨标识,部分椭圆曲线系统参数和用户A公钥的杂凑值;

(4)计算

e

=

H

v

(

M

)

e^′=H_v (\overline{M ^′} )e=Hv(M),将e’的数据结构类型转换成整数;
(5)将接收到的数字签名值(r’,s’ )的数据类型转换成整数,计算t=(r’+s’)modn,若t=0则验证不通过;

(6)计算椭圆曲线点

(

x

1

,

y

1

)

=

[

s

]

G

+

[

t

]

P

A

(x_1^′,y_1^′ )=[s^′ ]G+[t]P_A(x1,y1)=[s]G+[t]PA

(7)将椭圆曲线点的坐标

x

1

x_1^′x1的数据类型转换成整数,计算

R

=

(

e

+

x

1

)

m

o

d

n

R=(e^′+x_1^′)modnR=(e+x1)modn ,检验R=r’是否成立,若不成立则验证不通过;否则验证通过。

  • 作者:m0_54743939
  • 原文链接:https://blog.csdn.net/m0_54743939/article/details/121072079
    更新时间:2022年10月26日13:17:26 ,共 1122 字。