SM2签名算法简介及安全性分析

本文深入探讨SM2签名算法的基础理论,包括椭圆曲线运算和素域Fp上的基本计算,详细阐述SM2数字签名过程中的安全性问题,分析了可能的攻击方法,如差分功耗攻击和随机数安全性问题。

  本文主要论述SM2算法的基本理论,着重分析SM2的数字签名过程中存在的不安全步骤,分析其安全性原因。

椭圆曲线算数理论

  著名的维尔斯方程定义了椭圆曲线 EEE 在域 KKK 上的表现形式如下:
E:y2+a1xy+a3y=x3+a2x2+a4x+a6(1)E:y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6 \tag{1}E:y2+a1xy+a3y=x3+a2x2+a4x+a6(1)
其中,
Δ=−d22d8−8d43−27d62+9d2d4d8\Delta = -d_2^2d_8-8d_4^3-27d_6^2+9d_2d_4d_8Δ=d22d88d4327d62+9d2d4d8
d2=a12+4a2d_2 = a_1^2 + 4a_2d2=a12+4a2
d4=2a4+a1a3d_4 = 2a_4+a_1a_3d4=2a4+a1a3
d6=a32+4a6d_6 = a_3^2 + 4a_6d6=a32+4a6
d8=a12a6+a2a6−a1a3a4+a2a32−a42d_8 = a_1^2a_6 + a_2a_6 - a_1a_3a_4 + a_2a_3^2 - a_4^2d8=a12a6+a2a6a1a3a4+a2a32a42
系数 a1,a2,a3,a4,a6∈Ka_1,a_2,a_3,a_4,a_6 \in Ka1,a2,a3,a4,a6K, Δ≠0\Delta \neq 0Δ=0, 保证曲线上点的切线至多2个,公式(1)称为Weierstrass方程,可以利用相容性变换进行简化,如,存在u,r,s,t∈Eu,r,s,t\in Eu,r,s,tE, 且 u≠0u \neq 0u=0,使得公式(2)满足,E1E_1E1就可以变换成E2E_2E2:
E1:y2+a1xy+a3y=x3+a2x2+a4x+a6E_1:y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6E1:y2+a1xy+a3y=x3+a2x2+a4x+a6
E2:y2+a1ˉxy+a3ˉy=x3+a2ˉx2+a4ˉx+a6ˉE_2:y^2+\bar{a_1}xy+\bar{a_3}y=x^3+\bar{a_2}x^2+\bar{a_4}x+\bar{a_6}E2:y2+a1ˉxy+a3ˉy=x3+a2ˉx2+a4ˉx+a6ˉ
(x,y)→(ux+r,u3y+u2sx+t)(2)(x,y)\rightarrow (u^x + r, u^3y+u^2sx+t)\tag{2}(x,y)(ux+r,u3y+u2sx+t)(2)
E1E_1E1E2E_2E2 称为域 KKK 上的同构曲线。
  SM2依赖于椭圆曲线上点的运算,又依赖于域的运算,域的选择可以使素数域也可以是二元域,接下来进行素数域 FpF_pFp 进行研究,其中 ppp 代表大素数。

素域FpF_pFp上的基本计算

(1) 加法 ⊕\oplus 的单位元为0
(2) 乘法 ⊗\otimes 的单位元为1
(3) 域上的加法要模上素数 ppp,存在 a,b∈Fpa,b\in F_pa,bFp,即, a+b=(a+b)mod  pa + b = (a+b) \mod pa+b=(a+b)modp
(4) 域上的乘法要模上素数 ppp,存在 a,b∈Fpa,b\in F_pa,bFp,即,a⋅b=(a⋅b)mod  pa \cdot b = (a \cdot b) \mod pab=(ab)modp

素域FpF_pFp上的群运算法则

   对椭圆曲线上 E(Fp)E(F_p)E(Fp) 的点制定运算规则使其构成一个交换群,如在仿射坐标下的运算规则:
1)两个无穷远点 OOO 相加:O+O=OO+O=OO+O=O
2)点 P=(x,y)∈E(Fp))\{ O}P=(x,y)\in E(F_p))\backslash \{O\}P=(x,y)E(Fp))\{ O}, P+O=O+P=PP+O=O+P=PP+O=O+P=P
3)点 P=(x,y)∈E(Fp))\{ O}P=(x,y)\in E(F_p))\backslash \{O\}P=(x,y)E(Fp))\{ O}PPP的逆元−P=(x,−y)-P = (x,-y)P=(x,y), P+(−P)=OP+(-P)=OP+(P)=O
4) 点加运算:
不同点 P1∈(x1,y1)∈E(Fp))\{ O},P2∈(x2,y2)∈E(Fp))\{ O}P_1\in (x_1,y_1)\in E(F_p))\backslash \{O\}, P_2\in (x_2,y_2)\in E(F_p))\backslash \{O\}P1(x1,y1)E(Fp))\{ O},P2(x2,y2)E(Fp))\{ O}P1≠±P2P_1 \neq \pm P_2P1=±P2, 则P1+P2=(x3,y3)P_1+P_2=(x_3,y_3)P1+P2=(x3,y3),其中
x3=(y2−y1x2−x1)2−x1−x2x_3 = (\frac{y_2-y_1}{x_2-x_1})^2-x_1-x_2x3=(x2x1y2y1)2x1x2
y3=(y2−y1x2−x1)(x1−x3)−y1y_3 = (\frac{y_2-y_1}{x_2-x_1})(x_1-x_3)-y_1y3=(x2x1y2y1)(x1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_74043383

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值