掌桥专利:专业的专利平台
掌桥专利
首页

基于多标量乘快速计算的椭圆曲线验签方法及系统

文献发布时间:2024-01-17 01:19:37


基于多标量乘快速计算的椭圆曲线验签方法及系统

技术领域

本发明涉及数字签名技术领域,特别是涉及基于多标量乘快速计算的椭圆曲线验签方法及系统。

背景技术

本部分的陈述仅仅是提到了与本发明相关的背景技术,并不必然构成现有技术。

椭圆曲线密码(ECC)是一种公钥密码学算法,是近年来发展迅速的密码学分支,它基于数论中的椭圆曲线理论,能够在比基于离散对数问题的密码系统(如ElGamal密码系统或DSA、RSA密码系统)的更小的有限域上构建椭圆曲线密码系统。在保持相同安全强度的情况下,ECC所需的密钥长度远小于基于离散对数问题的密码系统。因此,ECC相比于其他密码系统可以大大减少所需计算量、储存空间和数据流量等方面的开销。椭圆曲线算法是身份认证、密钥协商、区块链等应用的核心基础算法。

近年来,优化ECC中的标量乘法运算是许多学者研究的重要方向之一。目前有许多主流算法,例如倍点-点加二进制方法、非邻接表示形、带窗口的非邻接表示形等。这些算法的核心思想都是通过降低单标量的平均汉明密度来减少ECC中的额外运算。对于多标量乘法,联合稀疏形式JSF具有较低的汉明密度,且预计算量较非相邻格式NAF小,如JSF-3的汉明重量约为0.54,JSF-5的汉明重量约为0.4,但是因为NAF方法可以采用较大的窗口宽度,进一步减少总计算量,整体效率优于JSF方法。

提高公钥密码算法的计算速度是公钥密码算法的研究热点,椭圆曲线的多标量乘运算是椭圆曲线密码签名验签协议的基础构件,也是最耗时的部分。数字签名算法在实现数字签名和验签的过程中效率低下,浪费了计算机内部大量的计算资源,现有的数字签名算法的计算方式提高了时间的复杂度,数字签名算法在芯片上运行时,对芯片的功耗较大,数字签名过程速度慢,影响用户的使用体验。

发明内容

为了解决现有技术的不足,本发明提供了基于多标量乘快速计算的椭圆曲线验签方法及系统;通过对数字签名算法中遇到的多标量乘运算进行优化,大大降低了数字签名和数字验签过程的时间复杂度,数字签名算法在芯片上运行时,功耗较小,提升数字签名的运算速度,提升系统的整体性能,提升用户体验。

第一方面,本发明提供了基于多标量乘快速计算的椭圆曲线验签方法;

基于多标量乘快速计算的椭圆曲线验签方法,包括:椭圆曲线数字签名步骤和椭圆曲线签名验签步骤;所述椭圆曲线数字签名步骤和椭圆曲线签名验签步骤中的多标量乘计算过程包括:

获取椭圆曲线上基点P、点Q以及基点P的三倍点仿射坐标3P,对获取的数据进行预计算处理,得到参数表;

获取标量系数K和标量系数L;对标量系数K和标量系数L进行处理得到系数表;

对参数表和系数表进行逐位计算,对逐位计算结果进行坐标还原处理得到多标量乘结果。

第二方面,本发明提供了基于多标量乘快速计算的椭圆曲线验签系统;

基于多标量乘快速计算的椭圆曲线验签系统,包括:椭圆曲线数字签名模块和椭圆曲线签名验签模块;所述椭圆曲线数字签名模块和椭圆曲线签名验签模块中的多标量乘计算过程包括:

预计算单元,其被配置为:获取椭圆曲线上基点P、点Q以及基点P的三倍点仿射坐标3P,对获取的数据进行预计算处理,得到参数表;

处理单元,其被配置为:获取标量系数K和标量系数L;对标量系数K和标量系数L进行处理得到系数表;

逐位计算单元,其被配置为:对参数表和系数表进行逐位计算,对逐位计算结果进行坐标还原处理得到多标量乘结果。

与现有技术相比,本发明的有益效果是:

通过对数字签名算法中遇到的多标量乘运算进行优化,大大降低了数字签名和数字验签过程的时间复杂度,数字签名算法在芯片上运行时,功耗较小,提升数字签名的运算速度,提升系统的整体性能,提升用户体验。

本发明提出了一种基于JSF和模逆的多标量乘法坐标预计算实现方法,近年来椭圆曲线模逆算法发展迅速,算法实现速度已经减少到了数千个时钟周期,因此可以利用五元联合稀疏表示JSF-5算法预计算量较少且汉明重量较低的特点,通过将预计算曲线点坐标从Jacobian加重射影坐标系(x,y,z)转换到仿射坐标系(x,y),大幅度降低多标量乘法执行过程中点加ADD的运算量,由12个模乘法M、4个模乘方S和7个简单模运算A,减少为8个模乘法M、3个模乘方S和7个简单模运算A。此外与倍点运算DOUBLE组合,进一步降低计算复杂度,与现有技术相比,本发明具有速度快、内存和存储占用少等优势。

附图说明

构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。

图1为实施例一的方法流程图。

具体实施方式

应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。

实施例一

本实施例提供了基于多标量乘快速计算的椭圆曲线验签方法;

如图1所示,基于多标量乘快速计算的椭圆曲线验签方法,包括:椭圆曲线数字签名步骤和椭圆曲线签名验签步骤;所述椭圆曲线数字签名步骤和椭圆曲线签名验签步骤中的多标量乘计算过程包括:

S101:获取椭圆曲线上基点P、点Q以及基点P的三倍点仿射坐标3P,对获取的数据进行预计算处理,得到参数表;

S102:获取标量系数K和标量系数L;对标量系数K和标量系数L进行处理得到系数表;

S103:对参数表和系数表进行逐位计算,对逐位计算结果进行坐标还原处理得到多标量乘结果。

进一步地,所述S101:获取椭圆曲线上基点P、点Q以及基点P的三倍点仿射坐标3P,对获取的数据进行预计算处理,得到参数表,具体包括:

S101-1:设定坐标索引;

S101-2:基于坐标索引,计算基点P和点Q的倍点和点加坐标;

S101-3:基于基点P和点Q的倍点和点加坐标,进行模逆运算;

S101-4:基于模逆运算结果,将各点坐标恢复到仿射坐标系。

进一步地,所述S101-1:设定坐标索引,是根据五元联合稀疏表示算法JSF-5,设定若干个不重复的常数,用于定位和辅助运算;

若干个不重复的常数,包括:P坐标索引_p_P、Q坐标索引_p_Q、3P坐标索引_p_3P、3Q坐标索引_p_3Q、Q+P坐标索引_p_QaP、Q-P坐标索引_p_QmP、Q+3P坐标索引_p_Qa3P、Q-3P坐标索引_p_Qm3P、3Q+P坐标索引_p_3QaP、3Q-P坐标索引_p_3QmP、3Q+3P坐标索引_p_3Qa3P和3Q-3P坐标索引_p_3Qm3P。

3Q表示Q的三倍点,Q+P表示Q和P的点加,Q-P表示Q和P的点减,Q+3P表示Q和3P的点加,Q-3P表示Q和3P的点减,3Q+P表示3Q和P的点加,3Q-P表示3Q和P的点减,3Q+3P表示3Q和3P的点加,3Q-3P表示3Q和3P的点减。

进一步地,所述S101-2:基于坐标索引,计算基点P和点Q的倍点和点加坐标,包括:

将P坐标中的512比特复制到Pix数组中_p_P所在的位置Pix[_p_P];

将Q坐标保存到Pix[_p_Q]开始的8个64比特无符号整形数,Pix[_p_Q]表示Pix数组中_p_Q对应的位置;

将3P坐标保存到Pix[_p_3P]开始的8个64比特无符号整形数,Pix[_p_3P]表示Pix数组中_p_3P对应的位置;

通过共Z坐标Co-Z算法,计算3Q得到一个雅可比Jacobian加重射影坐标系坐标((3Q)x,(3Q)y,(3Q)z);

利用共Z坐标Co-Z算法,同步计算Q+P和Q-P得到2个雅可比Jacobian加重射影坐标系坐标((Q+P)x,(Q+P)y,(Q+P)z)和((Q-P)x,(Q-P)y,(Q+P)z),将(Q+P)x,(Q+P)y保存到Pix数组中_p_QaP对应的位置Pix[_p_QaP]开始的8个64比特无符号整形数,将(Q-P)x,(Q-P)y保存到Pix数组中_p_QaP对应的位置Pix[_p_QmP]开始的8个64比特无符号整形数,将(Q+P)z保存到Z1;其中,(Q+P)x表示Q+P点的横坐标,(Q+P)y表示Q+P点的纵坐标,(Q+P)z表示Q+P点的竖坐标,(Q-P)x表示Q-P点的横坐标,(Q-P)y表示Q-P点的纵坐标;Z1用于存储中间数据的一个64比特无符号整形数组,数组长度为8;

利用Co-Z方法,同步计算Q+3P和Q-3P得到2个雅可比Jacobian加重射影坐标系坐标((Q+3P)x,(Q+3P)y,(Q+3P)z)和((Q-3P)x,(Q-3P)y,(Q+3P)z),将(Q+3P)x,(Q+3P)y保存到Pix[_p_Qa3P]开始的8个64比特无符号整形数,将(Q-3P)y,(Q-3P)y保存到Pix[_p_Qm3P]开始的8个64比特无符号整形数,将(Q+3P)z保存到Z2;Z2用于存储中间数据的一个64比特无符号整形数组,数组长度为8;其中,(Q+3P)x表示Q+3P点的横坐标,(Q+3P)y表示Q+3P点的纵坐标,(Q+3P)z表示Q+3P点的竖坐标,(Q-3P)x表示Q-3P点的横坐标,(Q-3P)y表示Q-3P点的纵坐标;

利用Co-Z方法,同步计算3Q+P和3Q-P得到2个Jacobian加重射影坐标系坐标((3Q+P)x,(3Q+P)y,(3Q+P)z)和((3Q-P)x,(3Q-P)y,(3Q+P)z),将(3Q+P)x,(3Q+P)y保存到Pix数组中_p_3QaP对应的位置Pix[_p_3QaP]开始的8个64比特无符号整形数,将(3Q-P)x,(3Q-P)y保存到Pix数组中_p_3QmP对应的位置Pix[_p_3QmP]开始的8个64比特无符号整形数,将(3Q+P)z保存到Z3;Z3用于存储中间数据的一个64比特无符号整形数组,数组长度为8;其中,(3Q+P)x表示3Q+P点的横坐标,(3Q+P)y表示3Q+P点的纵坐标,(3Q+P)z表示3Q+P点的竖坐标,(3Q-P)x表示3Q-P点的横坐标,(3Q-P)y表示3Q-P点的纵坐标;

利用Co-Z方法,同步计算3Q+3P和3Q+3P得到2个Jacobian加重射影坐标系坐标((3Q+3P)x,(3Q+3P)y,3Q+3P)z)和((3Q-3P)x,(3Q-3P)y,(3Q+3P)z),将(3Q+3P)x,(3Q+3P)y保存到Pix数组中_p_3Qa3P对应的位置Pix[_p_3Qa3P]开始的4个64比特无符号整形数,将(3Q-3P)x,(3Q-3P)y保存到Pix数组中_p_3Qm3P对应的位置Pix[_p_3Qm3P]开始的4个64比特无符号整形数,将(3Q+3P)z保存到Z4;Z4用于存储中间数据的一个64比特无符号整形数组,数组长度为8;其中,(3Q+3P)x表示3Q+3P点的横坐标,(3Q+3P)y表示3Q+3P点的纵坐标,(3Q+3P)z表示3Q+3P点的竖坐标,(3Q-3P)x表示3Q-3P点的横坐标,(3Q-3P)y表示3Q-3P点的纵坐标。

应理解地,预计算方法得到仿射坐标系下的P和Q的12个倍点和点加组合坐标。

进一步地,所述S101-3:基于基点P和点Q的倍点和点加坐标,进行模逆运算,具体包括:

设定6个256比特数T、T0、T1、T2、T3和T4用于存储中间变量;

T0=Z2.Z1;

T1=Z3.Z4;

T2=T0.T1;

其中,“.”表示2个256比特数在椭圆曲线域上的模乘运算,结果为256比特数;

使用快速模逆算法safegcd,计算T2模逆:

InvZ=ModInv(T2);

其中,InvZ表示T2的模逆,ModInv表示模逆运算。

进一步地,所述S101-4:基于模逆运算结果,将各点坐标恢复到仿射坐标系,包括:

T1=T2.T1;T4=T1.Z2;T3=T1.Z1;T0=T2.T0;

T1=Z4.T0;T2=Z3.T0;Z1=T4.T4;Z2=Z1.T4;

其中,“.”表示2个256比特数在椭圆曲线域上的模乘运算,结果为256比特数;

将Pix数组中_p_QaP对应的位置Pix[_p_QaP]开始的4个64比特无符号整形数复制到T,T=T.Z1,将T保存到Pix[_p_QaP]开始的4个64比特无符号整形数;

将Pix数组中_p_QaP+4对应的位置Pix[_p_QaP+4]开始的4个64比特无符号整形数复制到T,T=T.Z2,将T保存到Pix[_p_QaP+4]开始的4个64比特无符号整形数;

将Pix数组中_p_QmP对应的位置Pix[_p_QmP]开始的4个64比特无符号整形数复制到T,T=T.Z1,将T保存到Pix[_p_QmP]开始的4个64比特无符号整形数;

将Pix数组中_p_QmP+4对应的位置Pix[_p_QmP+4]开始的4个64比特无符号整形数复制到T,T=T.Z2,将T保存到Pix数组中_p_QmP+4对应的位置Pix[_p_QmP+4]开始的4个64比特无符号整形数;

Z1=T3.T3;Z2=Z1.T3;

将Pix数组中_p_Qa3P对应的位置Pix[_p_Qa3P]开始的4个64比特无符号整形数复制到T,T=T.Z1,将T保存到Pix[_p_Qa3P]开始的4个64比特无符号整形数;

将Pix数组中_p_Qa3P+4对应的位置Pix[_p_Qa3P+4]开始的4个64比特无符号整形数复制到T,T=T.Z2,将T保存到Pix[_p_Qa3P+4]开始的4个64比特无符号整形数;

将Pix数组中_p_Qm3P对应的位置Pix[_p_Qm3P]开始的4个64比特无符号整形数复制到T,T=T.Z1,将T保存到Pix[_p_Qm3P]开始的4个64比特无符号整形数;

将Pix数组中_p_Qm3P+4对应的位置Pix[_p_Qm3P+4]开始的4个64比特无符号整形数复制到T,T=T.Z2,将T保存到Pix[_p_Qm3P+4]开始的4个64比特无符号整形数;

Z1=T1.T1;Z2=Z1.T1;

将Pix数组中_p_3QaP对应的位置Pix[_p_3QaP]开始的4个64比特无符号整形数复制到T,T=T.Z1,将T保存到Pix[_p_3QaP]开始的4个64比特无符号整形数;

将Pix数组中_p_3QaP+4对应的位置Pix[_p_3QaP+4]开始的4个64比特无符号整形数复制到T,T=T.Z2,将T保存到Pix[_p_3QaP+4]开始的4个64比特无符号整形数;

将Pix数组中_p_3QmP对应的位置Pix[_p_3QmP]开始的4个64比特无符号整形数复制到T,T=T.Z1,将T保存到Pix[_p_3QmP]开始的4个64比特无符号整形数;

将Pix数组中_p_3QmP+4对应的位置Pix[_p_3QmP+4]开始的4个64比特无符号整形数复制到T,T=T.Z2,将T保存到Pix[_p_3QmP+4]开始的4个64比特无符号整形数;

Z1=T2.T2;Z2=Z1.T2;

将Pix数组中_p_3Qa3P对应的位置Pix[_p_3Qa3P]开始的4个64比特无符号整形数复制到T,T=T.Z1,将T保存到Pix[_p_3Qa3P]开始的4个64比特无符号整形数;

将Pix数组中_p_3Qa3P+4对应的位置Pix[_p_3Qa3P+4]开始的4个64比特无符号整形数复制到T,T=T.Z2,将T保存到Pix[_p_3Qa3P+4]开始的4个64比特无符号整形数;

将Pix数组中_p_3Qm3P对应的位置Pix[_p_3Qm3P]开始的4个64比特无符号整形数复制到T,T=T.Z1,将T保存到Pix[_p_3Qm3P]开始的4个64比特无符号整形数;

将Pix数组中_p_3Qm3P+4对应的位置Pix[_p_3Qm3P+4]开始的4个64比特无符号整形数复制到T,T=T.Z2,将T保存到Pix[_p_3Qm3P+4]开始的4个64比特无符号整形数;

T=(3Q)x.Z1,将T保存到Pix数组中_p_3Q对应的位置Pix[_p_3Q]开始的4个64比特无符号整形数;(3Q)x表示点3Q的横坐标;

T=(3Q)y.Z2,将T保存到Pix数组中_p_3Q对应的位置Pix[_p_3Q+4]开始的4个64比特无符号整形数;(3Q)y表示点3Q的纵坐标;

将Pix数组中存储的结果存入参数表Pix[104];参数表Pix[104]的数据类型为64比特无符号整形数。

各点坐标,包括:3Q点、P+Q点、P-Q点、3P+3Q点、3P-3Q点、P+3Q点、P-3Q点、3P+Q点和3P-Q点。

应理解地,所述S101-4,计算得到各点的Z坐标的模逆,然后计算Z坐标模逆的乘方和三次方,用X坐标与Z坐标模逆的乘方相乘得到仿射坐标X,用Y坐标与模逆的三次方相乘得到仿射坐标Y,完成仿射坐标系恢复。

进一步地,所述S102:获取标量系数K和标量系数L;对标量系数K和标量系数L进行处理得到系数表,具体包括:

采用联合稀疏表示算法JSF,对标量系数K和标量系数L进行处理得到系数表。

JSF方法同时考察系数K,L相同位上的值,并进行编码,使得编码后的系数表相邻的三位中至少有一位为0。

具体地,调用JSF-5编码函数,生成标量系数K和标量系数L的联合稀疏形式,用j保存生成的稀疏形式的长度,稀疏形式保存到nafa[257]中。

如果JSF-5编码函数生成2组系数,则将2组系数转化为1组系数,生成的系数无重复。

示例性地,如K编码后保存在u[257],L编码后保存在v[257],第i组系数分别为u[i]和v[i],且u[i],v[i]取值范围为{-3,-1,0,1,3},0≤i

应理解地,联合表示稀疏算法JSF可以得到较低的汉明重量。

进一步地,所述S103:对参数表和系数表进行逐位计算,对逐位计算结果进行坐标还原处理得到多标量乘结果,具体包括:

S103-1:计算KP+LQ;

S103-2:将计算结果由Jacobian加重射影坐标系,转换为仿射坐标系。

进一步地,所述S103-1:计算KP+LQ,包括:

数组Q[12],数据类型为64比特无符号整形数;

设数组Q的第8个成员为1:Q[8]=1;

设数组Q的第9、10和11个成员为0:Q[9]=0;Q[10]=0;Q[11]=0;

将Pix[nafa[j-1]*8]保存到数组Q第0个成员对应的位置Q[0]开始的8个64比特无符号整形数;Pix[nafa[j-1]*8]表示Pix数组中第nafa[j-1]中的数值乘8后得到的值对应的位置;

令i从nafa数组nafa[257]的第j-2个数组元素开始,一直遍历到nafa数组的第0个成员nafa[0],根据读取出的不同数值对Q[12]进行操作:

如果当前nafa数组的第i个成员nafa[i]中的元素为0,那么对Q执行椭圆曲线倍点运算DOUBLE(Q)操作,将得出的结果保存到Q[0]开始的12个64比特无符号数;Q中存储了椭圆曲线上点Q的x,y,z坐标;Q[0]用于存储计算过程中的椭圆曲线上点的坐标;

如果当前nafa数组的第i个成员nafa[i]中的元素大于0,那么执行椭圆曲线倍点与点加联合运算DOUBLEADD(Q,Pix+nafa[i]*8),将得出的结果保存到Q[0]开始的12个64比特无符号数;

如果当前nafa数组的第i个成员nafa[i]中的元素小于0,取nafa[i]的绝对值nafv,那么执行椭圆曲线倍点与点减联合运算DOUBLESUB(Q,Pix+nafv*8),将得出的结果保存到Q[0]开始的12个64比特无符号数。

应理解地,所述椭圆曲线倍点运算DOUBLE为椭圆曲线倍点运算,用于实现2Q的计算。

应理解地,所述DOUBLEADD为椭圆曲线倍点与点加联合运算,Q=2Q+P,其实现原理为:首先计算Q+P同时更新Q点坐标为Q’,然后执行共Z坐标Co-Z计算方法,(Q+P)+Q’。

本发明DOUBLEADD计算法复杂度为:13个模乘法M、5个模乘方S和14个简单模运算A。而标准的DOULE+ADD计算复杂度为:12个模乘法M、7个模乘方S和17个简单模运算A,整体复杂度降低。

应理解地,所述DOUBLESUB为椭圆曲线倍点与点减联合运算,Q=2Q-P,其实现原理为:首先计算Q-P同时更新Q点坐标为Q’,然后执行共Z坐标Co-Z计算方法,(Q-P)+Q’。

本发明DOUBLESUB计算法复杂度为13个模乘法M、5个模乘方S和14个简单模运算A,而标准的DOULE+ADD计算复杂度为12个模乘法M、7个模乘方S和17个简单模运算A,整体复杂度降低。

进一步地,所述S103-2:将计算结果由Jacobian加重射影坐标系,转换为仿射坐标系,包括:

计算Qz的模逆Qz

计算Qz

计算Qz

Ox=Qx.(Qz

Oy=Qy.(Qz

其中,Ox表示仿射坐标系横坐标,Qz

将得出的结果Qx和Qy保存到O[0]开始的8个64比特无符号数;

从而实现将Jacobian加重射影坐标系坐标Q(Qx,Qy,Qz)转换为仿射坐标系O(Ox,Oy)。

利用仿射坐标系坐标特点将倍点运算与点加、点减运算组合,大幅降低了多标量运算的计算复杂度。

进一步地,所述椭圆曲线数字签名步骤,包括:发送端将电子文件采用第一哈希算法进行处理得到第一数字摘要;发送端采用私钥对第一数字摘要进行加密得到数字签名;发送端将电子文件、数字签名和公钥一起发送给接收端。

进一步地,所述椭圆曲线签名验签步骤,包括:接收端利用公钥对数字签名进行解密,得到第一数字摘要;接收端采用第一哈希算法对电子文件进行处理得到第二数字摘要,将第一数字摘要与第二数字摘要进行比对,如果二者匹配,说明经过数字签名的电子文件传输成功。

实施例二

本实施例提供了基于多标量乘快速计算的椭圆曲线验签系统;

基于多标量乘快速计算的椭圆曲线验签系统,包括:椭圆曲线数字签名模块和椭圆曲线签名验签模块;所述椭圆曲线数字签名模块和椭圆曲线签名验签模块中的多标量乘计算过程包括:

预计算单元,其被配置为:获取椭圆曲线上基点P、点Q以及基点P的三倍点仿射坐标3P,对获取的数据进行预计算处理,得到参数表;

处理单元,其被配置为:获取标量系数K和标量系数L;对标量系数K和标量系数L进行处理得到系数表;

逐位计算单元,其被配置为:对参数表和系数表进行逐位计算,对逐位计算结果进行坐标还原处理得到多标量乘结果。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术分类

06120116131350