SM2 - 数字签名算法
符号
A,B:使用公钥密码系统的两个用户。
\(a,b\):\(F_q\)中的元素,他们定义\(F_q\)上的一条椭圆曲线\(E\)。
\(d_A\):用户A的私钥。
\(E(F_q )\):\(F_q\)上椭圆曲线\(E\)的所有有理点(包括无穷远点\(O\))组成的集合。
\(e\):密码杂凑函数作用于消息\(M\)的输出值。
\(e'\):密码杂凑函数作用于消息\(M'\)的输出值。
\(F_q\):包含\(q\)个元素的有限域。
\(G\):椭圆曲线的一个基点,其阶为素数。
\(H_v()\):消息摘要长度为\(v\)比特的密码杂凑函数。
\(ID_A\):用户A的可辩别标识。
\(M\):待签名消息。
\(M'\):待验证消息
\(\mbox{mod }n\):模\(n\)元素。例如,\(23\mbox{ mod }7=2\)。
\(n\):基点\(G\)的阶(\(n\)是\(♯E(F_q )\)的素因子)。
\(O\):椭圆曲线上的一个特殊点,称为无穷远点或零点,是椭圆曲线加法群的单位元。
\(P_A\):用户A的公钥。
\(q\):有限域\(F_q\)中元素的数目。
\(x‖y\):\(x\)与\(y\)的拼接,其中\(x\)和\(y\)是比特串或字节串。
\(Z_A\):关于用户A的可辨识标识、部分椭圆曲线系统参数和用户A公钥的杂凑值。
\((r,s)\):发送的签名。
\((r',s')\):收到的签名。
\([k]P\):椭圆曲线上点\(P\)的\(k\)倍点,即:\(\lbrack k\rbrack P = \underset{k\text{个}}{\underbrace{P + P + \cdots + P}}\),其中\(k\)是正整数。
\([x,y]\):大于或等于\(x\)且小于或等于\(y\)的整数的集合。
\(⌈x⌉\):顶函数,大于或等于\(x\)的最小整数。例如,\(⌈7⌉=7\),\(⌈8.3⌉=9\)。
\(⌊x⌋\):底函数,小于或等于\(y\)的最大整数。例如,\(⌊7⌋=7\),\(⌊8.3⌋=8\)。
\(♯E(F_q )\):\(E(F_q )\)上点的数目,称为椭圆曲线\(E(F_q )\)的阶。
用户密码对
用户A的密钥对包括其私钥\(d_A\)和公钥\(P_A=[d_A ]G=(x_A,y_A )\)。
用户其他信息
用户A具有长度为\(entlen_A\)比特的可辨识标识\(ID_A\),记\(ENTL_A\)是由整数\(entlen_A\)转换而成的两个字节。将椭圆曲线方程参数\(a\)、\(b\)、\(G\)的坐标\(x_G\)、\(y_G\)和\(P_A\)的坐标\(x_A\)、\(y_A\)的数据类型转换为比特串,\(Z_A=H_{256}(ENTL_A ‖ID_A ‖a‖b‖x_G ‖y_G ‖x_A ‖y_A )\)。
数字签名的生成算法
设待签名的消息为\(M\),为了获取消息\(M\)的数字签名\((r,s)\),作为签名者的用户A应实现以下运算步骤:
A1.置\(\overline{M}=Z_A‖M\);
A2.计算\(e=H_v(\overline{M})\);
A3.用随机数发生器产生随机数\(k∈[1,n-1]\);
A4.计算椭圆曲线点\((x_1,y_1 )=[k]G\);
A5.计算\(r=(e+x_1 )\mod{n}\),若\(r=0\)或\(r+k=n\)则返回A3;
A6.计算\(s=((1+d_A )^{-1}⋅(k-r⋅d_A ))\mod{n}\),若\(s=0\)则返回A3;
A7.消息\(M\)的签名为\((r,s)\)。
数字签名的验证算法
为了检验收到的消息\(M'\)及其数字签名\((r',s')\),作为验证者的用户B应实现以下运算步骤:
B1.检验\(r'∈[1,n-1]\)是否成立,若不成立则验证不通过;
B2.检验\(s'∈[1,n-1]\)是否成立,若不成立则验证不通过;
B3.置\(\overline{M}'=Z_A ‖M'\);
B4.计算\(e'=H_v(\overline{M}')\);
B5.计算\(t=(r'+s')\mod{n}\),若\(t=0\),则验证不通过;
B6.计算椭圆曲线点\((x_1',y_1')=[s']G+[t]P_A\);
B7.计算\(R=(e'+x_1')\mod{n}\),检验\(R=r'\)是否成立,若成立则验证通过;否则验证不通过。
注:假定收到的待验证消息\(M'\)及其数字签名\((r',s')\)与待签名消息\(M\)及其数字签名\((r,s)\)无误,则步骤B3计算\(\overline{M}'=\overline{M}\),进而\(e'=e\)。在步骤B6中考虑\(P_A=[d_A ]G\),有
参考 GM/T 0003.2—2012