椭圆曲线密码的高速点加运算方法和装置与流程

文档序号:19149140发布日期:2019-11-15 23:52阅读:282来源:国知局
椭圆曲线密码的高速点加运算方法和装置与流程

本发明涉及椭圆曲线密码系统技术领域,具体涉及一种椭圆曲线密码倍点运算的高性能集成电路方法和装置。



背景技术:

信息的安全保障基于安全算法,安全算法有一类是非对称密钥算法。非对称密钥算法的优点是安全性高,缺点是加密速度比分组密码慢很多,所以人们一直在研究如何提升非对称密钥算法的运算速度。目前,非对称密钥算法主要有两种,一是rsa,二是椭圆曲线密码ecc(ellipticcurvecryptography)。

椭圆曲线密码(ecc)是1985年由n.koblitz和v.miller提出的,其利用有限域上的椭圆曲线有限群代替离散对数问题中的有限循环群后得到的一类密码体制。由于椭圆曲线密码具有安全性能高、处理速度快、带宽要求低和存储空间小等特点,与rsa相比,ecc在密钥长度和运算速度上具有优越性。

素域上的椭圆曲线e(fp)上所有点q=(x,y)由weierstrass方程定义为

e:y2=x3+ax+b(modp)

其中p是素数,a、b为两个小于p的非负整数(0<a,b<p),且满足

4a3+27b2(modp)≠0

为避免求逆运算,椭圆曲线上的点通常用其他坐标系来表示。在雅可比坐标系中,雅可比投影坐标q=(x,y,z)与仿射坐标q’=(x,y)=(x/z2,y/z3)相对应,并且要求z≠0。所以在雅可比坐标系下椭圆曲线方程变为

e:y2=x3+axz4+bz6(modp)。

在椭圆曲线密码系统中,核心运算是点乘(k*q),其中q为椭圆曲线上的一点,k为一标量值。可以将点乘分解为两种基本运算:点加(ecpadd)以及倍点(ecpdbl)。

输入:点q;r位的标量k

输出:k*q

t=q

s=0

让i从0到r-1递增

如果ki=1

s=ecpadd(s,t)

t=ecpdbl(t)

返回s

点加运算使得两个不同点相加的结果仍为该椭圆曲线上的一点。倍点运算使得两个相同点相加的结果仍为该椭圆曲线上的一点。与普通运算不同,点加只有在两个点不同时使用。

在雅可比投影坐标下,点架的算法如下:

输入:两点(x1,y1,z1),(x2,y2,z2)

输出:点加结果(x3,y3,z3)

u1=x1z22;u2=x2z12;s1=y1z23;s2=y2z13

h=u2-u1;r=s2-s1

x3=r2-h3-2u1h2

y3=r(u1h2-x3)-s1h3

z3=hz1z2

返回(x3,y3,z3)

上述算法中的“+、-、*”都不是普通运算,而是求模运算。在倍点运算中,最耗时的运算是模乘运算。模乘运算算法中效率高、便于实现的算法是蒙哥马利模乘算法。蒙哥马利模乘在使用过程中需要把普通数a转换成蒙哥马利数a’=a*rmodn。为了使两个蒙哥马利数a’=a*rmodn和b’=b*rmodn相乘的结果为(a*b)’=(a*b)*rmodn,蒙哥马利模乘运算定义为mm(a’,b’)=(a’*b’)*r-1modn。r通常为一个便于约减的整数,比如232或264等。

如果点加运算的输入和输出都是蒙哥马利数,则它们内部的相应模乘运算都可以被替换为蒙哥马利模乘mm。

常用的椭圆曲线密码系统中通常使用位数很大(比如256或者512)的整数来保证系统的安全性。这些系统的整体性能提升往往是通过提升其点加运算获得的。通常的做法是使用更多的硬件资源来提高它们的运算速度。

在雅可比投影坐标下,一个点加运算需要执行16个模乘运算。通过使用多个模乘运算电路,充分利用上述模乘运算之间的并行性质,可以提升点加运算的性能。但是这种方法也有它的局限性,因为很多模乘运算都有一定的数据依赖关系,并不能把它们完全并行运算。同时这种方法每提升一倍的性能需要使用超过一倍的硬件资源,造成系统性价比的下降以及能耗的上升。传统的非流水线型的点加硬件时序如图1所示。



技术实现要素:

本发明针对现有技术的缺陷,提供一种主要基于流水线型蒙哥马利模乘器实现倍点运算电路同时具有高性能和低资源使用特点的椭圆曲线密码的高速点加运算方法和装置。

为解决上述技术问题,本发明采用如下技术方案:一种椭圆曲线密码的高速点加运算方法,其特征在于:采用流水线型蒙哥马利模乘器配合模加器来实现,运算流程如下,

以一个流水线型蒙哥马利模乘器执行n个时钟周期来获得一个结果,在连续的n个时钟周期里向该模乘器发送n个不同的运算;

在第一个运算结果出来的前一时钟周期,第n个运算的输入被送进该模乘器里,其中n个连续的运算为一个批次;

在雅可比投影坐标下,一个点加运算执行16个模乘运算;一个使用一个或者多个流水线型蒙哥马利模乘器的点加电路,通过利用其流水特性,每一个模乘运算执行一个批次的运算请求,在不增加或者略微增加单个运算计算时间的情况下,系统可同时计算n个运算,使得系统整体性能提升n倍。

采用双流水线型蒙哥马利模乘器和四个流水线型模加器,该点加器每次可以连续接受多个运算请求,每个请求在不同的时钟周期,直到该批次的第一个请求结果输出前,点加器不会再接受新的运算请求,运算方法的步骤都是串行的,具体步骤如下:

s0:空闲,直到获得输入数据(x1,y1,z1,x2,y2,z2);

s1:在第一个运算周期,各步计算同时进行,模乘器1计算rr=z1*z1,模乘器2计算hh=z2*z2;

s2:在第二个运算周期,各步计算同时进行,模乘器1计算u2=x2*rr,模乘器2计算u1=x1*hh;

s3:在第三个运算周期,模乘器1计算t1=y1*z2,模乘器2计算t2=y2*z1;

s4:在第四个运算周期,模乘器1计算s1=t1*hh,模乘器2计算s2=t2*rr;

s5:在第五个运算周期,模加器2计算h=u2-u1,模加器1计算r=s2–s1,模加器1和模加器2的计算结果出来后,模乘器1计算z3=z1*z2,模乘器2计算hh=h*h;

s6:在第六个运算周期,模乘器1计算z3=z3*h,模乘器2计算t1=u1*hh;

s7:在第七个运算周期,模乘器1计算t2=h*hh,模乘器2计算rr=r*r;

s8:在第八个运算周期,首先由模加器2计算v=t1+t1,模加器1计算x3=rr-t2;两者的结果出来后,由模加器3计算x3=x3-v,结果出来后,由模加器4计算v=t1-x3;模加器4的计算结果出来后,模乘器1计算u1=r*v,模乘器2计算u2=s1*t2;

s9:在第九个运算周期,模加器1计算y3=u1-u2;

s10:输出倍点结果(x3,y3,z3),然后返回状态s0;

各步骤中*为蒙哥马利模乘运算,+/-为模加/模减运算。

假设蒙哥马利模乘器需要n个时钟周期,模加器需要m个时钟周期,为了提高性能,该点加器中批处理的个数一般选择为等于或者略小于模乘时钟周期n。这样可以尽量提高流水线型模乘器的利用率,当前一个步骤中模乘器里第一个运算结果出现时,可以立刻进入下一个步骤开始运算。

每一个步骤均执行多个时钟周期,并且长度不等,步骤s1、步骤s2、步骤s3、步骤s4、步骤s6、步骤s7需要n个时钟周期,步骤s5需要n+m个周期,步骤s8需要3*m+n个周期,而步骤s9需要m个周期;步骤s0由于包含一个等待数据的循环,其周期不固定;步骤s10需要1-2个时钟周期将数据传送出去。由于模加时间m要比模乘时钟周期短很多,上述方式保证了在使用批处理提高性能的同时,尽量降低每一个点加运算的时延。

一种椭圆曲线密码的高速点加运算装置,其特征在于:该运算装置包括有存储单元、控制单元、至少一个流水线型蒙哥马利模乘器以及至少一个流水线型模加器,模乘器用于进行蒙哥马利模乘运算,模加器用于进行模加/模减运算。

该运算装置包括有两个流水线型蒙哥马利模乘器以及四个流水线型模加器,其模加器4、模加器3、模加器2、模加器1及模乘器1、模乘器2依次设置为可进行同步运算的结构。

本发明利用流水线型蒙哥马利模乘器(本申请人另案申请的发明专利)的流水特性,通过创新的架构设计,使得基于上述流水线型蒙哥马利模乘器的点加运算电路同时具有高性能和低资源使用的优点。通过巧妙地复用底层流水线型的硬件电路,以批处理的方式同时执行多个点加运算。使用这种方式,尽管单个运算的执行时间并没有减少,但是整个系统的吞吐量获得几个数量级的提升,避免以往的点加硬件电路都是通过降低单个运算的时间来提升性能的缺陷。这使得本发明的性能/硬件资源比以及性能/能耗比都比以往的技术有数倍甚至数十倍的提升。同时本发明还通过分析点加算法的特性,选择最优的蒙哥马利模乘器和模加器的个数,通过并行执行多个运算来提升系统性能,达到性能和资源使用的最佳配置。

附图说明

图1为多时钟非批处理点加示意图,图中示例一个模乘需要10个时钟周期,一个点加需要执行4个模乘,但其只是示例,并不代表硬件实现的真正数据;

图2为本发明多时钟批处理点架示意图,运算周期中间有停顿;

图3为本发明优化后的多时钟批处理点架示意图,运算周期中间无停顿,同样图中4个模乘运算周期只是示例,并不代表其内部真正模乘运算周期;

图4为本发明使用双流水线型模乘器以及四个流水线型模加器的批处理点加运算状态图。

具体实施方式

下面结合具体实施例对本发明做进一步描述:

如图4,在雅可比投影坐标下,一个点加运算执行16个模乘运算;一个使用一个或者多个流水线型蒙哥马利模乘器的点加电路,通过利用其流水特性,每一个模乘运算执行一个批次的运算请求,在不增加或者略微增加单个运算计算时间的情况下,系统可同时计算n个运算,使得系统整体性能提升n倍。

采用双流水线型蒙哥马利模乘器和四个流水线型模加器,该点加器每次可以连续接受多个运算请求,每个请求在不同的时钟周期,直到该批次的第一个请求结果输出前,点加器不会再接受新的运算请求,运算方法的步骤都是串行的,从s0开始,执行完一个步骤就立刻执行下一个步骤,具体步骤如下:

s0:空闲,直到获得输入数据(x1,y1,z1,x2,y2,z2);

s1:在第一个运算周期,各步计算同时进行,模乘器1计算rr=z1*z1,模乘器2计算hh=z2*z2;

s2:在第二个运算周期,各步计算同时进行,模乘器1计算u2=x2*rr,模乘器2计算u1=x1*hh;

s3:在第三个运算周期,模乘器1计算t1=y1*z2,模乘器2计算t2=y2*z1;

s4:在第四个运算周期,模乘器1计算s1=t1*hh,模乘器2计算s2=t2*rr;

s5:在第五个运算周期,模加器2计算h=u2-u1,模加器1计算r=s2–s1,模加器1和模加器2的计算结果出来后,模乘器1计算z3=z1*z2,模乘器2计算hh=h*h;

s6:在第六个运算周期,模乘器1计算z3=z3*h,模乘器2计算t1=u1*hh;

s7:在第七个运算周期,模乘器1计算t2=h*hh,模乘器2计算rr=r*r;

s8:在第八个运算周期,首先由模加器2计算v=t1+t1,模加器1计算x3=rr-t2;两者的结果出来后,由模加器3计算x3=x3-v,结果出来后,由模加器4计算v=t1-x3;模加器4的计算结果出来后,模乘器1计算u1=r*v,模乘器2计算u2=s1*t2;

s9:在第九个运算周期,模加器1计算y3=u1-u2;

s10:输出倍点结果(x3,y3,z3),然后返回状态s0;

各步骤中*为蒙哥马利模乘运算,+/-为模加/模减运算。

假设蒙哥马利模乘器需要n个时钟周期,模加器需要m个时钟周期,为了提高性能,该点加器中批处理的个数一般选择为等于或者略小于模乘时钟周期n。这样可以尽量提高流水线型模乘器的利用率,当前一个步骤中模乘器里第一个运算结果出现时,可以立刻进入下一个步骤开始运算。

每一个步骤均执行多个时钟周期,并且长度不等,步骤s1、步骤s2、步骤s3、步骤s4、步骤s6、步骤s7需要n个时钟周期,步骤s5需要n+m个周期,步骤s8需要3*m+n个周期,而步骤s9需要m个周期;步骤s0由于包含一个等待数据的循环,其周期不固定;步骤s10需要1-2个时钟周期将数据传送出去。由于模加时间m要比模乘时钟周期短很多,上述方式保证了在使用批处理提高性能的同时,尽量降低每一个点加运算的时延。

步骤s8是唯一一个步骤需要同时用到四个模加器的,这是由模加时间m要比模乘时钟周期n短很多,以及批处理的特性所决定的。这样当s8里的某个模加小步骤,比如x3=rr-t2,中第一个运算花费m时钟出现时,它后面还有m个运算在该模加器的不同阶段,以及(n-m-1)个运算等待完成同一个步骤。因此,当这个运算需要执行下一个小步骤x3=x3-v时,它无法使用前一个小步骤的同一个模加器,而需要使用一个空闲的模加器。

如图2,一种直观的方法是一个批次里最后一个模乘运算完成,再开始下一个模乘周期。尽管使用这种方法实现的硬件状态机会比较简单,它也造成每一次运算周期切换时停顿n-1个时钟周期。因此,使用一个模乘器的点加电路会停顿(n-1)*15个时钟周期。

这些停顿可以通过进一步优化控制逻辑和模乘器的之间的握手来优化。最终效果就是每一次运算周期切换时没有任何停顿。使用了如图3所示的优化的批处理方式以减少步骤转换间的时延,提高整体性能。

使用并发双流水线型模乘器能够最大效率的利用点加运算内部模乘之间的并行性质,同时又不造成硬件资源的过度使用与空转。相对于模乘器,模加器使用的硬件资源要少很多,因此在这个设计里使用尽量多的模加器以减少相应具有数据依赖关系的模乘运算等待时间。

如果一个点加设计更注重于减少硬件资源使用,则可以只使用一个模乘器,将所有模乘运算串行处理。也可以进一步减少模加器的个数,最终减少到一个模加器,将所有模加运算串行处理。

以上已将本发明做一详细说明,以上所述,仅为本发明之较佳实施例而已,当不能限定本申请实施范围,即凡依本申请范围所作均等变化与修饰,皆应仍属本发明涵盖范围内。

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