本文主要论述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Δ=−d22d8−8d43−27d62+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+a2a6−a1a3a4+a2a32−a42。
系数 a1,a2,a3,a4,a6∈Ka_1,a_2,a_3,a_4,a_6 \in Ka1,a2,a3,a4,a6∈K, Δ≠0\Delta \neq 0Δ=0, 保证曲线上点的切线至多2个,公式(1)称为Weierstrass方程,可以利用相容性变换进行简化,如,存在u,r,s,t∈Eu,r,s,t\in Eu,r,s,t∈E, 且 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_1E1 和 E2E_2E2 称为域 KKK 上的同构曲线。
SM2依赖于椭圆曲线上点的运算,又依赖于域的运算,域的选择可以使素数域也可以是二元域,接下来进行素数域 FpF_pFp 进行研究,其中 ppp 代表大素数。
素域FpF_pFp上的基本计算
(1) 加法 ⊕\oplus⊕ 的单位元为0
(2) 乘法 ⊗\otimes⊗ 的单位元为1
(3) 域上的加法要模上素数 ppp,存在 a,b∈Fpa,b\in F_pa,b∈Fp,即, a+b=(a+b)mod pa + b = (a+b) \mod pa+b=(a+b)modp
(4) 域上的乘法要模上素数 ppp,存在 a,b∈Fpa,b\in F_pa,b∈Fp,即,a⋅b=(a⋅b)mod pa \cdot b = (a \cdot b) \mod pa⋅b=(a⋅b)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=(x2−x1y2−y1)2−x1−x2
y3=(y2−y1x2−x1)(x1−x3)−y1y_3 = (\frac{y_2-y_1}{x_2-x_1})(x_1-x_3)-y_1y3=(x2−x1y2−y1)(x1−

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

被折叠的 条评论
为什么被折叠?



