发明内容
本发明所要解决的技术问题是针对现有技术的不足,提供了一种SM9快速签名方法、系统及电子设备。
本发明的一种SM9快速签名方法的技术方案如下:
根据签名的主公钥Ppub-s得到第一签名加速数据g1,并根据所述第一签名加速数据g1得到第二签名加速数据g2、第三签名加速数据g4、第四签名加速数据g8,其中,g2=(g1)64,g4=(g1)128,g8=(g1)192;
生成第一随机数r,其中,Rj[j′]∈[0,1],ri∈[0,1],Rj∈[0,264-1],Rj[j′]表示Rj的第j′的位;
根据Rj、所述第一签名加速数据g1、所述第二签名加速数据g2、所述第三签名加速数据g4、所述第四签名加速数据g8和基于固定基的快速模幂算法得到第一数值gr;
根据所述第一数值gr和签名密钥得到所述待签名消息M对应的数字签名值(h,S);
其中,所述第一随机数r、所述第一数值gr均为国密SM9标准定义的第三循环群GT中的元素,所述国密SM9标准定义第一循环群G1、第二循环群G2和所述第三循环群GT,且G1×G2双线性映射至所述第三循环群GT。
本发明的一种SM9快速签名方法的有益效果如下:
根据签名的主公钥Ppub-s得到4个签名加速数据,由于预先将第一随机数r拆成4个64比特的整数即:R0、R1、R2、R3,在采用自左向右按比特移位处理时,每次移位相当于同时处理4个比特,极大提高了计算出待签名消息M对应的数字签名值(h,S)的效率,即极大提高SM9数字签名的效率。
在上述方案的基础上,本发明的一种SM9快速签名方法还可以做如下改进。
进一步,所述根据签名的主公钥Ppub-s得到第一签名加速数据g1,包括:
通过第一公式计算签名双线性对g,所述签名双线性对g即为所述第一签名加速数据g1,所述第一公式为:g=e(P1,Ppub-s);
其中,所述签名双线性对g为所述第三循环群GT中的元素,P1表示所述第一循环群G1的生成元,e(P1,Ppub-s)表示G1×G2到所述第三循环群GT的双线性对,Ppub-s表示签名的主公钥,且Ppub-s为所述第二循环群G2中的元素进一步,所述根据Rj、所述第一签名加速数据g1、所述第二签名加速数据g2、所述第三签名加速数据g4、所述第四签名加速数据g8和基于固定基的快速模幂算法得到第一数值gr,包括:
S30、设置u=1,r′=R3[j′]×23+R2[j′]×22+R1[j′]×2+R0[j′],得到u×gr′;
S31、将(u×gr′)2作为u,将j′-1作为j′,重新带入S30,直至j′=0时所得到的u×gr′即为所述第一数值gr;
其中,r′∈[0,15],g0=1,g3=g2×g1,g5=g4×g1,g6=g4×g2,g7=g4×g3,g9=g8×g1,g10=g8×g2,g11=g8×g3,g12=g8×g4,g13=g8×g5,g14=g8×g6,g15=g8×g7。
进一步,所述根据所述第一数值gr和签名密钥得到所述待签名消息M对应的数字签名值(h,S),包括:
根据第三公式得到第一签名值h,所述第三公式为:h=H2(M||gr,N);
根据第四公式得到第二签名值S,所述第四公式为:S=[l]dsA;
其中,l=(r-h)mod N,dsA表示所述签名密钥,H2(M||gr,N)表示密码杂凑函数SM3所派生的密码函数,[k]P表示椭圆曲线上的点P的k倍点,P是所述第一循环群G1中的元素,N为所述第一循环群G1、所述第二循环群G2或所述第三循环群GT的阶。
本发明的一种SM9快速签名系统的技术方案如下:
包括:获取签名加速数据模块、生成模块、获取模块和计算数字签名值模块;
所述获取签名加速数据模块用于根据签名的主公钥Ppub-s得到第一签名加速数据g1,并根据所述第一签名加速数据g1得到第二签名加速数据g2、第三签名加速数据g3、第四签名加速数据g4,其中,g2=(g1)64,g4=(g1)128,g8=(g1)192;
所述生成模块用于生成第一随机数r,其中,/>Rj[j′]∈[0,1],ri∈[0,1],Rj∈[0,264-1],Rj[j′]表示Rj的第j′的位;
所述获取模块用于根据Rj、所述第一签名加速数据g1、所述第二签名加速数据g2、所述第三签名加速数据g4、所述第四签名加速数据g8和基于固定基的快速模幂算法得到第一数值gr;
所述计算数字签名值模块用于根据所述第一数值gr和签名密钥得到所述待签名消息M对应的数字签名值(h,S);
其中,所述第一随机数r、所述第一数值gr均为国密SM9标准定义的第三循环群GT中的元素,所述国密SM9标准定义第一循环群G1、第二循环群G2和所述第三循环群GT,且G1×G2双线性映射至所述第三循环群GT。
本发明的一种SM9快速签名系统的有益效果如下:
根据签名的主公钥Ppub-s得到4个签名加速数据,由于预先将第一随机数r拆成4个64比特的整数即:R0、R1、R2、R3,在采用自左向右按比特移位处理时,每次移位相当于同时处理4个比特,极大提高了计算出待签名消息M对应的数字签名值(h,S)的效率,即极大提高SM9数字签名的效率。
在上述方案的基础上,本发明的一种SM9快速签名系统还可以做如下改进。
进一步,所述所述获取签名加速数据模块具体用于:通过第一公式计算签名双线性对g,所述签名双线性对g即为所述第一签名加速数据g1,所述第一公式为:g=e(P1,Ppub-s);
其中,所述签名双线性对g为所述第三循环群GT中的元素,P1表示所述第一循环群G1的生成元,e(P1,Ppub-s)表示G1×G2到所述第三循环群GT的双线性对,Ppub-s表示签名的主公钥,且Ppub-s为所述第二循环群G2中的元素。
进一步,所述获取模块包括设置模块和计算模块:
所述设置模块用于:设置u=1,r′=R3[j′]×23+R2[j′]×22+R1[j′]×2+R0[j′],得到u×gr′;
所述计算模块用于将(u×gr′)2作为u,将j′-1作为j′,重新调用设置模块,直至j′=0时所得到的u×gr′即为所述第一数值gr;
其中,r′∈[0,15],g0=1,g3=g2×g1,g5=g4×g1,g6=g4×g2,g7=g4×g3,g9=g8×g1,g10=g8×g2,g11=g8×g3,g12=g8×g4,g13=g8×g5,g14=g8×g6,g15=g8×g7。
进一步,所述计算数字签名值模块具体用于:
根据第三公式得到第一签名值h,所述第三公式为:h=H2(M||gr,N);
根据第四公式得到第二签名值S,所述第四公式为:S=[l]dsA;
其中,l=(r-h)mod N,dsA表示所述签名密钥,H2(M||gr,N)表示密码杂凑函数SM3所派生的密码函数,[k]P表示椭圆曲线上的点P的k倍点,P是所述第一循环群G1中的元素,N为所述第一循环群G1、所述第二循环群G2或所述第三循环群GT的阶。
本发明的一种电子设备的技术方案如下:
包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现如上述任一项所述的一种SM9快速签名方法的步骤。
本发明的一种电子设备的有益效果如下:
根据签名的主公钥Ppub-s得到4个签名加速数据,由于预先将第一随机数r拆成4个64比特的整数即:R0、R1、R2、R3,在采用自左向右按比特移位处理时,每次移位相当于同时处理4个比特,极大提高了计算出待签名消息M对应的数字签名值(h,S)的效率,即极大提高SM9数字签名的效率。
具体实施方式
如图1所示,本发明实施例的一种SM9快速签名方法,包括如下步骤:
S1、根据签名的主公钥Ppub-s得到第一签名加速数据g1,并根据所述第一签名加速数据g1得到第二签名加速数据g2、第三签名加速数据g3、第四签名加速数据g4,其中,g2=(g1)64,g4=(g1)128,g8=(g1)192;
S2、生成第一随机数r,其中,Rj[j′]∈[0,1],ri∈[0,1],Rj∈[0,264-1],Rj[j′]表示Rj的第j′的位;
S3、根据Rj、所述第一签名加速数据g1、所述第二签名加速数据g2、所述第三签名加速数据g4、所述第四签名加速数据g8和基于固定基的快速模幂算法得到第一数值gr;
S4、根据所述第一数值gr和签名密钥得到所述待签名消息M对应的数字签名值(h,S);
其中,所述第一随机数r、所述第一数值gr均为国密SM9标准定义的第三循环群GT中的元素,所述国密SM9标准定义第一循环群G1、第二循环群G2和所述第三循环群GT,且G1×G2双线性映射至所述第三循环群GT。
根据签名的主公钥Ppub-s得到4个签名加速数据,由于预先将第一随机数r拆成4个64比特的整数即:R0、R1、R2、R3,在采用自左向右按比特移位处理时,每次移位相当于同时处理4个比特,极大提高了计算出待签名消息M对应的数字签名值(h,S)的效率,即极大提高SM9数字签名的效率。
较优地,在上述技术方案中,S1中,所述根据签名的主公钥Ppub-s得到第一签名加速数据g1,包括:
S10、通过第一公式计算签名双线性对g,所述签名双线性对g即为所述第一签名加速数据g1,所述第一公式为:g=e(P1,Ppub-s);
其中,所述签名双线性对g为所述第三循环群GT中的元素,P1表示所述第一循环群G1的生成元,e(P1,Ppub-s)表示G1×G2到所述第三循环群GT的双线性对,Ppub-s表示签名的主公钥,且Ppub-s为所述第二循环群G2中的元素。由于P1为第一循环群G1的生成元,那么P1一定为所述第一循环群G1中的元素。
其中,可用e(Q1,Q2)表示G1×G2到所述第三循环群GT的双线性对,Q1为所述第一循环群G1中的生成元,Q2为所述第二循环群G2中的元素,那么:将e(Q1,Q2)中的Q1替换为P1,将e(Q1,Q2)的Q2替换为Ppub-s,即得到e(P1,Ppub-s),也就是说,e(P1,Ppub-s)是e(Q1,Q2)的一种具体实施方式。
较优地,在上述技术方案中,所述根据Rj、所述第一签名加速数据g1、所述第二签名加速数据g2、所述第三签名加速数据g3、所述第四签名加速数据g4和基于固定基的快速模幂算法得到第一数值gr,包括:
S30、设置u=1,r′=R3[j′]×23+R2[j′]×22+R1[j′]×2+R0[j′],得到u×gr′;
S31、将(u×gr′)2作为u,将j′-1作为j′,重新带入S30,直至j′=0时所得到的u×gr′即为所述第一数值gr;
其中,r′∈[0,15],g0=1,g3=g2×g1,g5=g4×g1,g6=g4×g2,g7=g4×g3,g9=g8×g1,g10=g8×g2,g11=g8×g3,g12=g8×g4,g13=g8×g5,g14=g8×g6,g15=g8×g7。
其中,将按照比特展开可以得到:
R0={R0[63],R0[62],R0[61]······R0[2],R0[1],R0[0]};
R1={R1[63],R1[62],R1[61]······R1[2],R1[1],R1[0]};
R2={R2[63],R2[62],R2[61]······R2[2],R2[1],R2[0]};
R3={R3[63],R3[62],R3[61]······R3[2],R3[1],R3[0]};
由于预先将第一随机数r拆成4个64比特的整数即:R0、R1、R2、R3,在采用自左向右按比特移位处理时,每次移位相当于同时处理4个比特,这样完成一次模幂运算即得到第一数值gr只需要64次平方运算和60次乘法运算即可;
而采用传统的二进制展开法求模幂的方式为:生成第一随机数r,r∈[1,N-1],且其中,ri∈{0,1},N为所述第一循环群G1、所述第二循环群G2或所述第三循环群GT的阶,那么:
S300、令U=1,若ri=1,则U=U×g;
S310、将(U×g)2作为u,将i-1作为i,重新带入S300,直至i=0时所得到的U×g即为所述第一数值gr;
从S300-S310可以看出,传统的二进制展开法求模幂是按二进制展开的方式从左往右处理,每次移动一个比特。完成一次模幂运算即得到第一数值gr大概需要256次平方运算和128次乘法运算,而本申请完成一次模幂运算即得到第一数值gr只需要64次平方运算和60次乘法运算即可,进而极大提高了计算出待签名消息M对应的数字签名值(h,S)的效率,即极大提高SM9数字签名的效率。
较优地,在上述技术方案中,S4中,所述根据所述第一数值gr和签名密钥得到所述待签名消息M对应的数字签名值(h,S),包括:
S40、根据第三公式得到第一签名值h,所述第三公式为:h=H2(M||gr,N);
S41、根据第四公式得到第二签名值S,所述第四公式为:S=[l]dsA;
其中,l=(r-h)mod N,dsA表示所述签名密钥,H2(M||gr,N)表示密码杂凑函数SM3所派生的密码函数,[k]P表示椭圆曲线上的点P的k倍点,P是所述第一循环群G1中的元素,N为所述第一循环群G1、所述第二循环群G2或所述第三循环群GT的阶,其中,用十六进制进行表示阶的值,阶的值为B6400000、02A3A6F1、D603AB4F、F58EC744、49F2934B、18EA8BEE、E56EE19C或D69ECF25等。
其中,其中,可用H2(Q3)表示密码杂凑函数SM3所派生的密码函数,将Q3替换为“M||gr,N”,即得到H2(M||gr,N),也就是说,H2(M||gr,N)是H2(Q3)的一种具体实施形式。
在上述各实施例中,虽然对步骤进行进行了编号S1、S2等,但只是本申请给出的具体实施例,本领域的技术人员可根据实际情况对调整S1、S2等的执行顺序,此也在本发明的保护范围内。
如图2所示,本发明实施例的一种SM9快速签名系统200,包括:获取签名加速数据模块210、生成模块220、获取模块230和计算数字签名值模块240;
所述获取签名加速数据模块210用于根据签名的主公钥Ppub-s得到第一签名加速数据g1,并根据所述第一签名加速数据g1得到第二签名加速数据g2、第三签名加速数据g3、第四签名加速数据g4,其中,g2=(g1)64,g4=(g1)128,g8=(g1)192;
所述生成模块220用于生成第一随机数r, 其中,/>Rj[j′]∈[0,1],ri∈[0,1],Rj∈[0,264-1],Rj[j′]表示Rj的第j′的位;
所述获取模块230用于根据Rj、所述第一签名加速数据g1、所述第二签名加速数据g2、所述第三签名加速数据g4、所述第四签名加速数据g8和基于固定基的快速模幂算法得到第一数值gr;
所述计算数字签名值模块240用于根据所述第一数值gr和签名密钥得到所述待签名消息M对应的数字签名值(h,S);
其中,所述第一随机数r、所述第一数值gr均为国密SM9标准定义的第三循环群GT中的元素,所述国密SM9标准定义第一循环群G1、第二循环群G2和所述第三循环群GT,且G1×G2双线性映射至所述第三循环群GT。
根据签名的主公钥Ppub-s得到4个签名加速数据,由于预先将第一随机数r拆成4个64比特的整数即:R0、R1、R2、R3,在采用自左向右按比特移位处理时,每次移位相当于同时处理4个比特,极大提高了计算出待签名消息M对应的数字签名值(h,S)的效率,即极大提高SM9数字签名的效率。
较优地,在上述技术方案中,所述所述获取签名加速数据模块210具体用于:通过第一公式计算签名双线性对g,所述签名双线性对g即为所述第一签名加速数据g1,所述第一公式为:g=e(P1,Ppub-s);
其中,所述签名双线性对g为所述第三循环群GT中的元素,P1表示所述第一循环群G1的生成元,e(P1,Ppub-s)表示G1×G2到所述第三循环群GT的双线性对,Ppub-s表示签名的主公钥,且Ppub-s为所述第二循环群G2中的元素。较优地,在上述技术方案中,所述获取模块230包括设置模块和计算模块:
所述设置模块用于:设置u=1,r′=R3[j′]×23+R2[j′]×22+R1[j′]×2+R0[j′],得到u×gr′;
所述计算模块用于将(u×gr′)2作为u,将j′-1作为j′,重新调用设置模块,直至j′=0时所得到的u×gr′即为所述第一数值gr;
其中,r′∈[0,15],g0=1,g3=g2×g1,g5=g4×g1,g6=g4×g2,g7=g4×g3,g9=g8×g1,g10=g8×g2,g11=g8×g3,g12=g8×g4,g13=g8×g5,g14=g8×g6,g15=g8×g7。
较优地,在上述技术方案中,所述计算数字签名值模块240具体用于:
根据第三公式得到第一签名值h,所述第三公式为:h=H2(M||gr,N);
根据第四公式得到第二签名值S,所述第四公式为:S=[l]dsA;
其中,l=(r-h)mod N,dsA表示所述签名密钥,H2(M||gr,N)表示密码杂凑函数SM3所派生的密码函数,[k]P表示椭圆曲线上的点P的k倍点,P是所述第一循环群G1中的元素,N为所述第一循环群G1、所述第二循环群G2或所述第三循环群GT的阶。
上述关于本发明的一种SM9快速签名系统200中的各参数和各个单元模块实现相应功能的步骤,可参考上文中关于一种SM9快速签名方法的实施例中的各参数和步骤,在此不做赘述。
如图3所示,本发明实施例的一种电子设备300,包括存储器310、处理器320及存储在所述存储器310上并在所述处理器320上运行的程序330,所述处理器320执行所述程序330时实现上述任一实施的一种SM9快速签名方法的步骤。
根据签名的主公钥Ppub-s得到4个签名加速数据,由于预先将第一随机数r拆成4个64比特的整数即:R0、R1、R2、R3,在采用自左向右按比特移位处理时,每次移位相当于同时处理4个比特,极大提高了计算出待签名消息M对应的数字签名值(h,S)的效率,即极大提高SM9数字签名的效率。
其中,电子设备300可以选用电脑、手机等,相对应地,其程序330为电脑软件或手机APP等,且上述关于本发明的一种电子设备300中的各参数和步骤,可参考上文中一种SM9快速签名方法的实施例中的各参数和步骤,在此不做赘述。
在本发明中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。