2021SC@SDUSC
1.参数与密钥产生
参数的产生、密钥的产生与SM2加密解密算法相同。
2.数字签名生成验证过程
1.SM2数字签名生成算法
假设待签名的消息为M,为了获取消息M的数字签名(r,s),作为签名者的用户A应实现以下运算步骤:
(1)置
M
‾
=
Z
A
∣
∣
M
\overline{M}=Z_A ||MM=ZA∣∣M其中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,n−1]
(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⋅(k−rdA))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′=ZA∣∣M′,其中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’是否成立,若不成立则验证不通过;否则验证通过。