面向多椭圆曲线标量乘法器的实现方法、装置及存储介质与流程

文档序号:23014895发布日期:2020-11-20 12:19阅读:344来源:国知局
面向多椭圆曲线标量乘法器的实现方法、装置及存储介质与流程

本发明涉及密码学领域,尤其涉及一种面向多椭圆曲线标量乘法器的实现方法、装置及存储介质。



背景技术:

随着计算机处理器的运算能力不断增强,传统加密算法的安全性正受到日益严峻的考验,需要更加复杂的加密算法来保证数据的安全性。椭圆曲线加密算法是近年来比较活跃的一种非对称加密算法,在最新的传输层安全性协议1.3版(thetransportlayersecurity(tls)protocolversion1.3)中,使用了多种椭圆曲线用于数据加密,无论是在数量上还是在实际使用频率上,都凸显了椭圆曲线加密日益重要的地位。

标量乘运算的性能是衡量椭圆曲线加密性能的一个重要的指标,为了得到更快的加密速度,需要尽可能快速的完成标量乘运算。现有技术中标量乘运算改进的主要方法分为三类:优化标量乘算法、转换坐标系和优化模运算算法。

第一类优化标量乘算法是改变标量乘kg的运算过程,降低总体运算量。使用较早的有自左向右和自右向左的算法,对于n位的k值,需要计算n次倍点和n/2次点加,自左向右算法的点加和倍点可以并行运算,但是需要额外的模运算单元;可以把k做相对简单的预处理,实现非相邻形式(non-adjacent-form,naf)算法,进一步把点加的次数降低为n/3次;可以对k做m位的分段处理,实现窗口naf法,预计算需要计算窗口内的2m个点运算结果,预计算量较大;可以使用comb算法来快速完成标量乘运算,但需要的预计算量庞大;以及适用于多标量乘的shamir算法,可以用一次标量乘的时间完成两个标量乘的相加;还可以采用多基链算法,增加三倍点、五倍点形成多基链来加速标量乘运算。

第二类方法转换坐标系算法是优化标量乘中的点加和倍点操作。原本的曲线方程使用二元坐标系,点加运算需要1次模逆和3次模乘,倍点运算需要1次模逆和4次模乘,而模逆操作需要消耗大量时钟周期。可以通过坐标系的转换改变点加和倍点运算公式,消除模逆操作,例如仿射坐标系,把坐标(x,y)按转换公式x=x/z,y=y/z转换为(x,y,z),点加运算需要14次模乘,倍点运算需要12次模乘;雅克比坐标系使用比较普遍,转换公式为x=x/z2,y=y/z3,需要16次模乘来完成点加运算,10次模乘完成倍点运算。此外还有修正的雅克比坐标系、混合坐标系等变换,上述方法都是在开始时做一次变换,随后计算点加和倍点过程中消除模逆操作,最后的计算结果再转换为二元坐标,整个标量乘只使用一次模逆操作即可。

第三类优化方法是从基本的模运算入手,提高模运算的速度,主要是模乘和模逆运算。模乘运算使用较多的是蒙哥马利模乘算法,通过将多位的模乘分解为2m位的模乘,利用二进制的特点,多次迭代运算得到最后的模乘结果。模逆运算的理论公式一般会采用费马小定理,也可以采用专门的模逆模块来完成模逆运算,可以与蒙哥马利模乘配合使用蒙哥马利模逆算法,无需经过转换即可完成模逆运算,也可以使用二进制右移算法,通过多次简单比较和加减来计算模逆,资源开销较小,独立设计模逆操作主要是为了释放模乘单元,达到并行的目的,同时减少计算周期数。

上述现有技术主要存在有如下的不足之处:

1.无法兼容多类曲线。现有标量乘法器多数只适用于单个椭圆曲线,或多个域(例如素数域和2m域),或同类曲线的多条,不能支持多类曲线。例如要完成tls1.3协议的硬件加密,就需要设置weierstrass曲线和montgomery曲线两类曲线的标量乘法器。

2.运算速度较慢。由于现有加密多用于物联网设备,要求面积较小,同时由于蒙哥马利模乘等模乘算法多会将模乘分为多次短位宽乘法迭代运算,导致运算速度下降,运算速度上无法达到服务器端使用的要求。

3.过分讲求算法通用性。忽略了实际使用时易遇到特殊情况,签名和验签是椭圆曲线的主要两个功能,对于签名操作,使用的是对基点g的标量乘,是固定值的点,在现有技术的算法中对此类特殊情况往往未进行单独考虑。



技术实现要素:

基于上述存在的问题,本发明提供一种面向多椭圆曲线标量乘法器的实现方法、装置及存储介质,用以解决现有技术中的标量乘法器的无法兼容多类曲线、运算速度较慢、讲求算法通用性未考虑特殊情况的问题。

本发明实施例公开一种面向多椭圆曲线标量乘法器实现方法,其特征在于,包括:

预计算secp256r1曲线基点g的16个点坐标,存入寄存器堆的comb预存点坐标部分,将secp256r1曲线的特征值p1,curve25519曲线的特征值p2,以及其五倍特征值5p1和5p2一并存入寄存器堆中;

根据椭圆曲线形式,通过模运算单元计算2p1~4p2或2p2~4p2,若有p点的坐标则一起存入寄存器堆中;

判断椭圆曲线形式及功能运算需求;

若椭圆曲线形式为secp256r1并要进行签名运算,则计算基点g的标量乘μg,结合预计算的secp256r1曲线的基点g的坐标循环迭代,每次迭代执行一次倍点和一次点加1操作,循环迭代64次完成标量乘运算;

若椭圆曲线形式为secp256r1并要进行秘钥交换运算,则计算一般点p的标量乘λp,进行倍点和点加运算,预计算出2p和3p两个点的坐标,并将其存入寄存器堆的shamir预计算点坐标区域,结合预计算的secp256r1曲线的一般点p的2p和3p两个点坐标循环迭代,每次迭代执行两次倍点和一次点加1操作,循环迭代128次完成标量乘运算;

若椭圆曲线形式为secp256r1并且要进行验签运算,则计算基点g和一般点p的多标量乘λp+μg,进行倍点和点加运算循环5次预计算出13个预计算点坐标,并将其存至寄存器堆的shamir预计算点坐标区域,结合预计算的secp256r1曲线的13个预计算点坐标循环迭代,每次迭代执行两次倍点和一次点加z操作,循环迭代128次完成标量乘运算;

若椭圆曲线形式为curve25519并且要进行秘钥交换运算,则计算标量乘λp,进行阶梯运算255次,每次阶梯运算前后做一次cswap运算,根据标志位情况来交换两组坐标点;

根据获得的标量乘结果进行数据后处理,将计算所得的三元坐标还原回二元坐标,完成标量乘计算并输出最终结果。

进一步地,所述预计算预计算secp256r1曲线基点g的16个点坐标,具体为:

预计算{0000}g至{1111}g的16个坐标点,其中:

{0000}g计算:(0×2192+0×2128+0×264+0×20)g;

{0001}g计算:(0×2192+0×2128+0×264+1×20)g;

{0010}g计算:(0×2192+0×2128+1×264+0×20)g;

{0011}g计算:(0×2192+0×2128+1×264+1×20)g;

{0100}g计算:(0×2192+1×2128+0×264+0×20)g;

{0101}g计算:(0×2192+1×2128+0×264+1×20)g;

{0110}g计算:(0×2192+1×2128+1×264+0×20)g;

{0111}g计算:(0×2192+1×2128+1×264+1×20)g;

{1000}g计算:(1×2192+0×2128+0×264+0×20)g;

{1001}g计算:(1×2192+0×2128+0×264+1×20)g;

{1010}g计算:(1×2192+0×2128+1×264+0×20)g;

{1011}g计算:(1×2192+0×2128+1×264+1×20)g;

{1100}g计算:(1×2192+1×2128+0×264+0×20)g;

{1101}g计算:(1×2192+1×2128+0×264+1×20)g;

{1110}g计算:(1×2192+1×2128+1×264+0×20)g;

{1111}g计算:(1×2192+1×2128+1×264+1×20)g。

进一步地,所述将secp256r1曲线的特征值p1,curve25519曲线的特征值p2,以及其五倍特征值5p1和5p2一并存入寄存器堆中,包括:特征值p1、特征值p2分别为secp256r1曲线和curve25519曲线的固定参数值,p1=2224(232-1)+2192+296-1,p2=2255–19。

进一步地,所述若椭圆曲线形式为secp256r1并且要进行签名运算,则计算基点g的标量乘μg,结合预计算的secp256r1曲线的基点g的坐标循环迭代,每次迭代执行一次倍点和一次点加1操作,循环迭代64次完成标量乘运算,具体为:

输入256位二进制数μ={μ255μ254μ253…μ1μ0}以及椭圆曲线secp256r1的基点g;

计算标量乘q=μg;

构造梳状算法预计算表:预计算{0000}g至{1111}g,16个预计算坐标点;

提取梳状算法编码系数αi={μi+192,μi+128,μi+64,μi};

赋初值q=0,为无穷远点;

令i=63~0,循环进行下述计算;

q=2q;

q=q+αig;

关于g坐标点的选择,采用以下方法:在第i次循环计算时,选择μg中μ的第192+i,128+i,64+i,i这四位数值组成一个四位二进制数,与采用构造梳状算法预计算表:{0000}g至{1111}g16个预计算坐标点中的{0000}至{1111}比较,相同则选择该预计算点坐标参与点加运算;

直至计算至i=0,结束运算,输出最终标量乘结果q。

进一步地,所述若椭圆曲线形式为secp256r1并且要进行验签运算,则计算基点g和一般点p的多标量乘λp+μg,具体为:

输入256位二进制数λ={λ255λ254λ253…λ1λ0},μ={μ255μ254μ253…μ1μ0},以及椭圆曲线secp256r1上的任意点p和基点g;

计算标量乘q=λp+μg;

构造预计算表(00)p+(00)g至(11)p+(11)g,共16个点坐标,其中,(00)p+(00)g、(01)p+(00)g、(00)p+(01)g无需计算;

令q=0,为无穷远点;

令i=127~0,循环进行下述计算:

q=4q;

q=q+{(λ2i+1λ2i)p+(μ2i+1μ2i)g};

直至计算至i=0,结束运算,输出最终标量乘结果q。

进一步地,所述若椭圆曲线形式为secp256r1并要进行秘钥交换运算,则计算一般点p的标量乘λp,具体为:

输入256位二进制数λ={λ255λ254λ253…λ1λ0},以及椭圆曲线secp256r1上的任意点p;

计算标量乘q=λp;

构造预计算表(00)p至(11)p,共16个点坐标,其中,(00)p无需计算;

令q=0,为无穷远点;

令i=127~0,循环进行下述计算:

q=4q;

q=q+{(λ2i+1λ2i)p};

直至计算至i=0,结束运算,输出最终标量乘结果q。

进一步地,所述若椭圆曲线形式为curve25519并要进行秘钥交换运算,则计算标量乘λp,进行阶梯运算255次,每次阶梯运算前后做一次cswap运算,根据标志位情况来交换两组坐标点,具体为:

输入255位二进制数k=(k255k254……k0),点坐标p1=(x1,y1)的横坐标x1;

计算标量乘结果kp1=(x2,y2)的横坐标x2;

令x1=x1;x2=x1;z2=0;x3=x1;z3=1;标志位swap=0;

令i=254~0,循环进行下述计算:

swap=swap^k[i];

(x2,x3)=cswap(swap,x2,x3);

(z2,z3)=cswap(swap,z2,z3);

swap=k[i];

采用阶梯算法计算:(x2,z2,x3,z3)=ladderstep(x1,x2,z2,x3,z3);

(x2,x3)=cswap(swap,x2,x3);

(z2,z3)=cswap(swap,z2,z3);

直至计算至i=0,结束运算,输出x2=x2/z2;

所述每次阶梯运算前后做一次cswap运算,根据swap标志位情况来交换两组坐标点,具体为:当swap标志位为1时,交换两组坐标点;当swap标志位为0时,不做交换。

进一步地,所述根据获得的标量乘结果进行数据后处理,将计算所得的三元坐标还原回二元坐标,完成标量乘计算并输出最终结果,具体为:

三元坐标(x,y,z)转换为与普通的二元坐标(x,y)的方法为:x=x/z2,y=y/z3

本发明实施例还提供一种面向多椭圆曲线标量乘法器的实现装置,包括:

算法控制器、寄存器堆、运算单元,其中运算单元为一个256位标量乘法器;

所述算法控制器与运算单元进行数据运算交换;

所述寄存器堆与运算单元进行数据运算交换。

本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述权利要求1至8中任一项所述的一种面向多椭圆曲线标量乘法器的实现方法。

与现有技术相比,本发明提供的一种面向多椭圆曲线标量乘法器的实现方法、装置及存储介质,至少实现了如下的有益效果:本发明提出的一种面向多椭圆曲线标量乘法器的实现方法、装置及存储介质,该方法可同时兼容secp256r1和curve25519两种椭圆曲线,解决了现有技术中的标量乘法器多数只适用于单个椭圆曲线,或多个域(例如素数域和2m域),或同类曲线的多条,不能兼容多类椭圆曲线的问题;本方法对固定基点g进行了单独考虑,解决了现有标量乘法器的实现方法中容易忽略实际使用时易遇到特殊情况,签名和验签是椭圆曲线的主要两个功能,对于签名操作,使用的是对基点g的标量乘,是固定的基点,在现有技术的算法中对此类特殊情况往往未进行单独考虑的技术问题;本方法根据曲线和算法来调用不同的点加控制和倍点控制,使用运算单元完成所有的标量乘和模运算单元来完成对应操中间计算结果也存储在寄存器堆占用硬件资源较少,并且根据不同的曲线形式及功能运算需求进行对应算法运算,减少了硬件需求面积并提高了运算速度,解决了现有技术中用于给物联网设备加密应用场景中,要求硬件面积较小,同时现有标量乘算法多采用蒙哥马利模乘算法,会将模乘分为多次短位宽乘法迭代运算,导致运算速度下降,运算速度上无法达到服务器端使用的要求的技术问题。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的面向多椭圆曲线标量乘法器的实现方法流程图;

图2为本发明实施例提供的面向多椭圆曲线标量乘法器的实现装置结构图。

具体实施方式

为了使本发明的目的,技术方案和优点更加清楚,下面结合附图,对本发明实施例提供的一种面向多椭圆曲线标量乘法器的实现方法、装置及存储介质的具体实施方式进行详细地说明。应当理解,下面所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

为更清晰说明本案技术方案,进行如下解释:

tls1.3中的椭圆共有两类,一类是weierstrass曲线,满足曲线方程:y2=x3+ax+b。tls1.3中选用由美国国家标准与技术研究所(nationalinstituteofstandardsandtechnology,nist)提出的secp256r1、secp384r1和secp521r1三条曲线,就属于weierstrass曲线。还有一类椭圆曲线是montgomery曲线,其方程为:y2=x3+ax2+x

curve25519曲线属于montgomery曲线,由bernstein于2005年提出被tls1.3采用。

secp256r1曲线其运算数据位数为256位;curve25519曲线其运算数据位数为255位。

本发明实施例公开一种面向多椭圆曲线标量乘法器实现方法,其特征在于,包括:

预计算secp256r1曲线基点g的16个点坐标,存入寄存器堆的comb预存点坐标部分,将secp256r1曲线的特征值p1,curve25519曲线的特征值p2,以及其五倍特征值5p1和5p2一并存入寄存器堆中;

根据椭圆曲线形式,通过模运算单元计算2p1~4p2或2p2~4p2,若有p点的坐标则一起存入寄存器堆中;

判断椭圆曲线形式及功能运算需求;

若椭圆曲线形式为secp256r1并要进行签名运算,则计算基点g的标量乘μg,结合预计算的secp256r1曲线的基点g的坐标循环迭代,每次迭代执行一次倍点和一次点加1操作,循环迭代64次完成标量乘运算;

若椭圆曲线形式为secp256r1并要进行秘钥交换运算,则计算一般点p的标量乘λp,进行倍点和点加运算,预计算出2p和3p两个点的坐标,并将其存入寄存器堆的shamir预计算点坐标区域,结合预计算的secp256r1曲线的一般点p的2p和3p两个点坐标循环迭代,每次迭代执行两次倍点和一次点加1操作,循环迭代128次完成标量乘运算;

若椭圆曲线形式为secp256r1并且要进行验签运算,则计算基点g和一般点p的多标量乘λp+μg,进行倍点和点加运算循环5次预计算出13个预计算点坐标,并将其存至寄存器堆的shamir预计算点坐标区域,结合预计算的secp256r1曲线的13个预计算点坐标循环迭代,每次迭代执行两次倍点和一次点加z操作,循环迭代128次完成标量乘运算;

若椭圆曲线形式为curve25519并且要进行秘钥交换运算,则计算标量乘λp,进行阶梯运算255次,每次阶梯运算前后做一次cswap运算,根据标志位情况来交换两组坐标点;

根据获得的标量乘结果进行数据后处理,将计算所得的三元坐标还原回二元坐标,完成标量乘计算并输出最终结果。

优选地,所述预计算预计算secp256r1曲线基点g的16个点坐标,具体为:

预计算{0000}g至{1111}g的16个坐标点,其中:

{0000}g计算:(0×2192+0×2128+0×264+0×20)g;

{0001}g计算:(0×2192+0×2128+0×264+1×20)g;

{0010}g计算:(0×2192+0×2128+1×264+0×20)g;

{0011}g计算:(0×2192+0×2128+1×264+1×20)g;

{0100}g计算:(0×2192+1×2128+0×264+0×20)g;

{0101}g计算:(0×2192+1×2128+0×264+1×20)g;

{0110}g计算:(0×2192+1×2128+1×264+0×20)g;

{0111}g计算:(0×2192+1×2128+1×264+1×20)g;

{1000}g计算:(1×2192+0×2128+0×264+0×20)g;

{1001}g计算:(1×2192+0×2128+0×264+1×20)g;

{1010}g计算:(1×2192+0×2128+1×264+0×20)g;

{1011}g计算:(1×2192+0×2128+1×264+1×20)g;

{1100}g计算:(1×2192+1×2128+0×264+0×20)g;

{1101}g计算:(1×2192+1×2128+0×264+1×20)g;

{1110}g计算:(1×2192+1×2128+1×264+0×20)g;

{1111}g计算:(1×2192+1×2128+1×264+1×20)g。

优选地,所述将secp256r1曲线的特征值p1,curve25519曲线的特征值p2,以及其五倍特征值5p1和5p2一并存入寄存器堆中,包括:特征值p1、特征值p2分别为secp256r1曲线和curve25519曲线的固定参数值,p1=2224(232-1)+2192+296-1,p2=2255–19。

优选地,所述若椭圆曲线形式为secp256r1并且要进行签名运算,则计算基点g的标量乘μg,结合预计算的secp256r1曲线的基点g的坐标循环迭代,每次迭代执行一次倍点和一次点加1操作,循环迭代64次完成标量乘运算,具体为:

输入256位二进制数μ={μ255μ254μ253…μ1μ0}以及椭圆曲线secp256r1的基点g;

计算标量乘q=μg;

构造梳状算法预计算表:预计算{0000}g至{1111}g,16个预计算坐标点;

提取梳状算法编码系数αi={μi+192,μi+128,μi+64,μi};

赋初值q=0,为无穷远点;

令i=63~0,循环进行下述计算;

q=2q;

q=q+αig;

关于g坐标点的选择,采用以下方法:在第i次循环计算时,选择μg中μ的第192+i,128+i,64+i,i这四位数值组成一个四位二进制数,与采用构造梳状算法预计算表:{0000}g至{1111}g16个预计算坐标点中的{0000}至{1111}比较,相同则选择该预计算点坐标参与点加运算;

直至计算至i=0,结束运算,输出最终标量乘结果q。

优选地,所述若椭圆曲线形式为secp256r1并且要进行验签运算,则计算基点g和一般点p的多标量乘λp+μg,具体为:

输入256位二进制数λ={λ255λ254λ253…λ1λ0},μ={μ255μ254μ253…μ1μ0},以及椭圆曲线secp256r1上的任意点p和基点g;

计算标量乘q=λp+μg;

构造预计算表(00)p+(00)g至(11)p+(11)g,共16个点坐标,其中,(00)p+(00)g、(01)p+(00)g、(00)p+(01)g无需计算;

令q=0,为无穷远点;

令i=127~0,循环进行下述计算:

q=4q;

q=q+{(λ2i+1λ2i)p+(μ2i+1μ2i)g};

直至计算至i=0,结束运算,输出最终标量乘结果q。

优选地,所述若椭圆曲线形式为secp256r1并要进行秘钥交换运算,则计算一般点p的标量乘λp,具体为:

输入256位二进制数λ={λ255λ254λ253…λ1λ0},以及椭圆曲线secp256r1上的任意点p;

计算标量乘q=λp;

构造预计算表(00)p至(11)p,共16个点坐标,其中,(00)p无需计算;

令q=0,为无穷远点;

令i=127~0,循环进行下述计算:

q=4q;

q=q+{(λ2i+1λ2i)p};

直至计算至i=0,结束运算,输出最终标量乘结果q。

优选地,所述若椭圆曲线形式为curve25519并要进行秘钥交换运算,则计算标量乘λp,进行阶梯运算255次,每次阶梯运算前后做一次cswap运算,根据标志位情况来交换两组坐标点,具体为:

输入255位二进制数k=(k255k254……k0),点坐标p1=(x1,y1)的横坐标x1;

计算标量乘结果kp1=(x2,y2)的横坐标x2;

令x1=x1;x2=x1;z2=0;x3=x1;z3=1;标志位swap=0;

令i=254~0,循环进行下述计算:

swap=swap^k[i];

(x2,x3)=cswap(swap,x2,x3);

(z2,z3)=cswap(swap,z2,z3);

swap=k[i];

采用阶梯算法计算:(x2,z2,x3,z3)=ladderstep(x1,x2,z2,x3,z3);

(x2,x3)=cswap(swap,x2,x3);

(z2,z3)=cswap(swap,z2,z3);

直至计算至i=0,结束运算,输出x2=x2/z2;

所述每次阶梯运算前后做一次cswap运算,根据swap标志位情况来交换两组坐标点,具体为:当swap标志位为1时,交换两组坐标点;当swap标志位为0时,不做交换。

优选地,所述根据获得的标量乘结果进行数据后处理,将计算所得的三元坐标还原回二元坐标,完成标量乘计算并输出最终结果,具体为:

三元坐标(x,y,z)转换为与普通的二元坐标(x,y)的方法为:x=x/z2,y=y/z3

优选地,所述倍点操作,具体为:

求解三元坐标(x3,y3,z3)=2(x1,y1,z1);预设中间变量t1,t2,t3,t4,t5,并赋初值为空;

步骤1.进行模乘运算z1·z1,并将运算结果存于中间变量t1中;

步骤2.进行模乘运算y1·y1,并将运算结果存于中间变量t2中,同时进行模加运算x1+t1并将运算结果存于中间变量t3中,计算模减运算x1-t1并将运算结果存于中间变量t4中;

步骤3.对步骤2中的中间变量t3和t4进行模乘运算t3·t4,并将运算结果更新至中间变量t1中;

步骤4.进行模乘运算y1·z1,并将运算结果更新至中间变量t3中,计算中间变量t2的8倍值8t2,并将运算结果更新至中间变量t4中;

步骤5.进行模乘运算x1·t4,并将运算结果存入中间变量t5中,计算中间变量t1的3倍值3t1,并将运算结果更新至中间变量t1中;

步骤6.对步骤5中获得的中间变量t1进行模乘运算t1·t1,并将运算结果更新至中间变量t3中,然后进行对更新后中间变量t3进行模加减运算t3+t3,并将运算结果存入z3中;

步骤7.对步骤2中获得的中间变量t2和步骤4中获得中间变量t4进行模乘运算t2·t4,并将运算结果更新至中间变量t2中,同时进行模减运算t3-t5,并将运算结果存入x3中;进行模减运算1.5t5-t3,并将运算结果更新至中间变量t4中;

步骤8.对步骤5中获得的中间变量t1和对步骤7中获得的中间变量t4进行模乘运算,并将运算结果更新至中间变量t1中;

步骤9.对步骤8中获得的中间变量t1和对步骤7中获得的中间变量t2进行模减运算t1-t2,并将运算结果存入y3中。

优选地,所述点加1操作,具体为:

求解三元坐标(x3,y3,z3)=(x1,y1,z1)+(x2,y2,1);预设中间变量t1,t2,t3,t4,并赋初值为空;

步骤1.进行模乘运算z1·z1,并将运算结果更新于中间变量t1中;

步骤2.进行模乘运算y2·z1,并将运算结果更新于中间变量t2中;

步骤3.对步骤1中更新获得的中间变量t1与x2进行模乘运算t1·x2,并将运算结果更新于中间变量t3中;

步骤4.对步骤1中更新获得的中间变量t1和步骤1中更新获得的中间变量t2进行模乘运算t1·t2,并将运算结果更新于中间变量t1中;对步骤3中更新获得的t3与x1进行模减运算t3-x1,并将运算结果更新于中间变量t2中;对步骤3中更新获得的t3与x1进行模加运算t3+x1,并将运算结果更新于中间变量t3中;

步骤5.对步骤2中更新获得的中间变量t2进行模乘运算t2·t2,并将运算结果更新于中间变量t4中;对步骤4中更新获得的中间变量t1与y1进行模减运算t1-y1,并将运算结果更新于中间变量t1中;

步骤6.对步骤2中更新获得的中间变量t2与z1进行模乘运算,并将运算结果存入z3中;

步骤7.对步骤2中更新获得的中间变量t2和步骤5中更新获得的中间变量t4进行模乘运算t2·t4,并将运算结果更新于中间变量t2中;

步骤8.对步骤2中更新获得的中间变量t3和步骤5中更新获得的中间变量t4进行模乘运算t3·t4,并将运算结果更新于中间变量t3中;

步骤9.对步骤5中更新获得的中间变量t1进行模乘运算t1·t1,并将运算结果更新于中间变量t5中;

步骤10.对步骤5中更新获得的中间变量t4和x1进行模乘运算t4·t1,并将运算结果更新于中间变量t4中;对步骤8中更新获得的中间变量t3和步骤9中更新获得的中间变量t5进行模减运算t5-t3,并将运算结果存入x3中;

步骤11.对步骤7中更新获得的中间变量t2和y1进行模乘运算y1·t2,并将运算结果更新于中间变量t2中;对步骤10中更新获得的中间变量t4和x3进行模减运算,并将运算结果更新于中间变量t3中;

步骤12.对步骤5中更新获得的中间变量t1与步骤11中更新获得的中间变量t3进行模乘运算t3·t1,并将运算结果更新于中间变量t1中;

步骤13.对步骤12中更新获得的中间变量t1和步骤11中更新获得的中间变量t2进行模减运算,并将运算结果存入y3中。

优选地,所述点加z操作,具体为:

求解三元坐标(x3,y3,z3)=(x1,y1,z1)+(x2,y2,z2);预设中间变量t1,t2,t3,t4,t5,t6,并赋初值为空;

步骤1.进行模乘运算z1·z1,并将运算结果更新于中间变量t1中;

步骤2.进行模乘运算z2·z1,并将运算结果更新于中间变量t2中;

步骤3.对步骤1中更新获得的中间变量t1与x2进行模乘运算t1·x2,并将运算结果更新于x3中;

步骤4.对步骤2中更新获得的中间变量t2与x1进行模乘运算t2·x1,并将运算结果更新于中间变量t3中;

步骤5.对步骤1中更新获得的中间变量t1与z1进行模乘运算t1·z1,并将运算结果更新于中间变量t1中;对步骤3中更新获得的x3与步骤4中更新获得的中间变量t3进行模加运算t3+x3,并将运算结果更新于中间变量t6中;对步骤3中更新获得的x3与步骤4中更新获得的中间变量t3进行模减运算x3-t3,并将运算结果更新于中间变量t4中;

步骤6.对步骤5中更新获得的中间变量t4进行模乘运算t4·t4,并将运算结果更新于中间变量t5中;

步骤7.对步骤2中更新获得的中间变量t2和z2进行模乘运算t2·z2,并将运算结果更新于中间变量t2中;

步骤8.对步骤5中更新获得的中间变量t1和y2进行模乘运算t1·y2,并将运算结果更新于中间变量t1中;

步骤9.对步骤7中更新获得的中间变量t2与y1进行模乘运算t2·y1,并将运算结果更新于中间变量t2中;

步骤10.对步骤5中更新获得的中间变量t6和步骤6中更新获得的中间变量t5进行模乘运算t5·t6,并将运算结果存入y3中;

步骤11.对步骤5中更新获得的中间变量t4和步骤6中更新获得的中间变量t5进行模乘运算t4·t5,并将运算结果更新于中间变量t6中;对步骤8中更新获得的中间变量t1和步骤9中更新获得的中间变量t2进行模减运算t1-t2,并将运算结果更新于中间变量t3中;对步骤8中更新获得的中间变量t1和步骤9中更新获得的中间变量t2进行模加运算t1+t2,并将运算结果更新于中间变量t2中;

步骤12.对步骤11中更新获得的中间变量t3进行模乘运算t3·t3,并将运算结果更新于中间变量t1中;

步骤13.对步骤11中更新获得的中间变量t2与中间变量t6步进行模乘运算t2·t6,并将运算结果更新于中间变量t5中;对步骤12中更新获得的中间变量t1与y3进行模减运算,并将结果存入x3中;

步骤14.对z1和z2进行模乘运算z1·z2,并将结果存入z3中;对y3和步骤13中的2x3进行模减运算y3-2x3,并将运算结果更新于中间变量t6中;

步骤15.对步骤11中更新获得的中间变量t3与步骤14中更新获得的中间变量t6进行模乘运算t3·t6,并将结果更新存入y3中;

步骤16.对步骤14中更新获得的z3与步骤5中更新获得的中间变量t4进行模乘运算z3·t4;对步骤15中更新获得的y3与步骤13中更新获得的中间变量t5进行模减运算y3-t5,并将结果更新存入y3中;

步骤17.对步骤16中更新获得的y3进行模加运算0.5·y3,并将结果更新存入y3中。

本发明实施例还提供一种面向多椭圆曲线标量乘法器的实现装置,包括:

算法控制器、寄存器堆、运算单元,其中运算单元为一个256位标量乘法器;

所述算法控制器与运算单元进行数据运算交换;

所述寄存器堆与运算单元进行数据运算交换。

本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述权利要求1至8中任一项所述的一种面向多椭圆曲线标量乘法器的实现方法。

本发明提供的一种面向多椭圆曲线标量乘法器的实现方法、装置及存储介质,至少实现了如下的有益效果:本发明提出的一种面向多椭圆曲线标量乘法器的实现方法、装置及存储介质,本发明技术方案可同时兼容secp256r1和curve25519两种椭圆曲线,解决了现有技术中的标量乘法器多数只适用于单个椭圆曲线,或多个域(例如素数域和2m域),或同类曲线的多条,不能兼容多类椭圆曲线的问题;本方法对固定基点g进行了单独考虑,解决了现有标量乘法器的实现方法中容易忽略实际使用时易遇到特殊情况,签名和验签是椭圆曲线的主要两个功能,对于签名操作,使用的是对基点g的标量乘,是固定的基点,在现有技术的算法中对此类特殊情况往往未进行单独考虑这一技术问题;本方法根据曲线和算法来调用不同的点加控制和倍点控制,使用运算单元完成所有的标量乘和模运算单元来完成对应操中间计算结果也存储在寄存器堆占用硬件资源较少,并且根据不同的曲线形式及功能运算需求进行对应算法运算,减少了硬件需求面积并提高了运算速度,解决了现有技术中用于给物联网设备加密应用场景中,要求硬件面积较小,同时现有标量乘算法多采用蒙哥马利模乘算法,会将模乘分为多次短位宽乘法迭代运算,导致运算速度下降,运算速度上无法达到服务器端使用的要求的技术问题。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明实施例可以通过硬件实现,也可以借助软件和必要的通用硬件平台结合的方式来实现。基于这样的理解,本发明实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1