2021SC@SDUSC sm2算法加解密过程

2021SC@SDUSC
1SM2 加密算法

假设要发送的消息为比特串M ,len为M的比特长度。为了对明文M进行加密,作为加密者的用户A应进行以下运算步骤。

(1)用随机数发生器产生随机数k∈[1,n-1],其中n是椭圆曲线基点G的阶次。

(2)计算椭圆曲线点 C 1 = [ k ] G = ( x 1 , y 1 ) C1=[k]G=(x_1,y_1) C1=[k]G=(x1,y1)

(3)计算椭圆曲线上的点 S = [ h ] P B S=[h]P_B S=[h]PB其中S不能为无穷远点O。
(4)计算椭圆曲线点 [ k ] P B = ( x 2 , y 2 ) [k]P_B=(x_2,y_2) [k]PB=(x2,y2)

(5)计算 t = K D F ( x 2 ‖ y 2 , l e n ) t=KDF(x_2‖y_2,len) t=KDF(x2y2,len),KDF是密钥派生函数,输出长度是len的比特串,且密钥派生函数的结果不能为全0。若结果为全0,则需要重新选择随机数k。

(6)计算 C 2 = M ⊕ t C_2=M⊕t C2=Mt

(7)计算 C 3 = H a s h ( x 2 ∣ ∣ M ∣ ∣ y 2 ) C_3=Hash (x_2 ||M||y_2 ) C3=Hash(x2My2),是密码杂凑函数。

(8)输出密文 C = C 1 ∣ ∣ C 2 ∣ ∣ C 3 C=C_1 ||C_2 ||C_3 C=C1C2C3
2SM2 解密算法

​ 由上述加密过程可知,密文中c**2的比特长度为len,解密者B对密文 c = c 1 ∥ c 2 ∥ c 3 c=c_1∥c_2∥c_3 c=c1c2c3进行解密,要完成以下运算

(1)从C中取出比特串 ,验证是否满足椭圆曲线方程,若不满足则解密错误。

(2)计算椭圆曲线点 ,验证是否为无穷远点若为无穷远点则解密错误。

(3)计算 [ d B ] C 1 = ( x 2 , y 2 ) [d_B]C1=(x_2,y_2) [dB]C1=(x2,y2)

(4)计算 t = K D F ( x 2 ‖ y 2 , l e n ) t=KDF(x_2‖y_2,len) t=KDF(x2y2,len)验证t是否为全0比特串,若为全0则解密错误。

(5)从C中取出比特串 C 2 C_2 C2计算 M ’ = C 2 ⊕ t M’=C_2⊕t M=C2t

计算 u = H a s h ( x 2 ‖ M ’ ‖ y 2 ) u=Hash(x_2‖M’‖y_2) u=Hash(x2My2)从c中取出比特串 C 3 C_3 C3 u ≠ C 3 u≠C_3 u=C3则解密错误。

(6)M’即为解密后的明文。

你可能感兴趣的:(2021SC@SDUSC,算法,密码学)