高效模乘方法及装置的制作方法

文档序号:6562060阅读:172来源:国知局
专利名称:高效模乘方法及装置的制作方法
技术领域
本发明涉及公钥密码技术,是改进的蒙哥马利模乘方法及其电路结构。
背景技术
1.公钥密码技术在专利“密码设备和方法”(“CRYPTOGRAPHIC APPARATUSAND METHOD”,专利号US4200770)中给出了一个可以在公开信道中交换密钥的方法,称为Diffie-Hellman密钥交换方法。该专利使得通信双方使用一个模幂函数协商和传递他们的秘密信息,攻击者要想获得传递的秘密信息,必须解决离散对数问题,而如果通信双方使用的参数足够大,则离散对数问题在计算上是不可解的。该专利奠定了公钥密码学的基本原理。
公钥密码,又称非对称密码,与只使用一个密钥的对称密码不同,它使用两个独立但又存在着某种数学联系的密钥公钥和私钥。通信的各方保密各自的私钥,公开其公钥,发送者使用接收者的公钥加密,接收者使用只有自己知道的私钥解密。公钥密码还可以解决数字签名的问题,签名者使用只有自己知道的私钥对消息签名,验证者使用签名者的公钥可以验证签名的合法性。
专利“密码通信系统和方法”(“CRYPTOGRAPHICCOMMNICATION SYSTEM AND METHOD”,专利号US4405829)提出了Rivest、Shamir和Adleman发明的一种公钥密码方法-RSA。RSA公钥密码方法的安全性基于大整数因子分解问题的难解性,伴随着应用对安全性要求的不断提高,RSA密钥的长度在不断增加。
椭圆曲线密码系统(Elliptic Curve Cryptosystems,简称ECC)自1985年由Neal Koblitz和Victor Miller提出以来,由于其相对于RSA的全方面的优势(更强的安全性、更高的实现效率、更省的实现代价),吸引了大批密码学工作者就其安全性和实现方法作了大量的研究,并已逐渐被国际各大标准组织采纳作为公钥密码标准(IEEEP1363、ANSI X9、ISO/IEC和IETF等),成为主流应用的公钥密码之一。
在RSA中,存在着一个大整数的模幂运算Xemod M,这个运算造成了RSA加/解密和签名/验证的巨大运算量;在ECC中,存在一个大整数k乘以椭圆曲线点P(称为“点乘”)的运算kP,这个运算造成了ECC加/解密和签名/验证的巨大运算量。
2.大整数模幂运算和椭圆曲线点乘运算的分解大整数模幂运算Xemod M可以分解为大整数模乘运算XY mod M和模平方运算X2mod M。设e的二进制形式为e=(en-1en-2……e1e0),其中n为e的二进制长度。分解形式为输入X,e,M输出为C=Xemod M1)if en-1=1 then C=X else C=12)for i=n-2 downto 02a.C=C·C mod M2b.if ei=1 then C=C·X mod M3)return C椭圆曲线点乘运算kP可以分解为椭圆曲线点加运算(P+Q)和椭圆曲线点倍运算(P+P=2P),其中k为大整数,k=(kn-1kn-2......k1k0),其中n为k的二进制长度,P,Q为椭圆曲线上的整数点。分解形式为输入k=(kn-1kn-2......k1k0),P
输出kP1)Q=O(O为无穷远点)2)for i from n-1 downto 0 do2a Q=2Q2b if ki=1 then Q=Q+P3)return Q椭圆曲线点P1=(x1,y1),P2=(x2,y2),其中P1≠-P2。设P3=P1+P2=(x3,y3)。其中x3=λ2-x1-x2y3=λ(x1-x3)-y1当P1≠P2时λ=(y2-y1)/(x2-x1) 当P1=P2时λ=(3x12-3)/(2y1)从上述公式可以看出椭圆曲线点加(P1≠P2)运算需1次模乘运算和1次模平方运算。椭圆曲线点倍(P1=P2)运算需2次模乘运算和2次模平方运算。
从大整数模幂运算和椭圆曲线点乘运算的分解可以看出,都存在着两种基本的运算——模乘运算XY mod M和模平方运算X2mod M。
3.蒙哥马利模乘算法蒙哥马利给出了一种非常有效的模乘方法,该方法的优点是利用简单的移位操作代替除法运算。设M为模数,M>1,M的二进制位长为n位,即2n-1≤M<2n,令R=2n,M与R互素。R-1和M′满足0<R-1<M,0<M′<R,R R-1-M M′=1。
Montgomery模乘算法描述1)T=X·Y2)m=T·M′mod R3)u=(T+m·R)/R4)ifu≥M then return u-Melse return u
上述算法需要用到大整数的乘法,这对软件和硬件都很难实现。基于这个原因,Koc等人提出了基于字的蒙哥马利算法,FIOS(finelyintegrated operand scanning method)就是其中的一种。
FIOS算法描述其中w为每次处理的字长,l=n/w。
输入X,Y,MC,M输出ResultResult=0(C,S)=0for i=0 to l-1 do(C,S)=Result
+X
*Y[i]Result[1]=Result[1]+CK=S*MC(mod 2w)(C,S)=S+K*M
for j=1 to l-1 do(C,S)=Result[j]+X[j]*Y[i]+CResult[j+1]=Result[j+1]+C(C,S)=S+K*M[j]Result[j-1]=S(C,S)=Result[1]+CResult[l-1]=SResult[1]=Result[l+1]+CResult[l+1]=0目前,在模乘器的设计中大多都采用蒙哥马利算法及其变形。现有模乘器的设计是对中间结果进行(C,S)进行储存,下一循环需要用到时再读取(C,S),需要对存储设备进行频繁的读写。而对存储设备的读写是需要花费时钟周期,从而影响了模乘器的工作效率。

发明内容
本发明针对Koc提出的蒙哥马利算法FIOS(finely integrated operandscanning method),提出了一种改进的适合集成电路设计的FIOS方法。本发明针对集成电路设计中模乘器的设计提出一种新的模乘器的结构。本发明的优点是通过改变乘法的计算顺序从而将K写入RAM而不是C,S,减少了中间结果写入RAM中的次数。该结构不仅降低了芯片面积,而且还减少了模乘运算的时钟周期数。
根据本发明的一个方面,提供一种适合硬件实现的多字高基的蒙哥马利模乘方法,其特征在于乘数X、被乘数Y和模数M均为n位的二进制数,w为算法每次处理的字长,MC为w位的常数,中间变量K为n位的二进制数,中间变量C,S均为w位的二进制数,Carrybit为一位的二进制数,最终结果Result为n位的二进制数,i,j为循环变量,l=n/w,运算前变量C,S,Carrybit,Result均赋零值,其运算步骤如下(a)将X的第0个字与Y的第0个字相乘,乘积的低w位赋给S,高w位赋给C;(b)将S与MC相乘后,求其对模2w的余数,结果赋给K的第0个字;(c)将K的第0个字与M的第0个字相乘,乘积结果与C,S相加后,低w位赋给S,高w位赋给C;进位赋给Carrybit;(d)将C的值赋给S,Carrybit赋给C的最低一位,其余位均置0,Carrybit位置0;(e)令j为1开始外循环;(f)令i为1开始内循环;(g)将K的第i-1个字与M的第j+1-i个字相乘,乘积结果与Carrybit,C,S组成的2w+1位的二进制数相加,结果的低w位赋给S,高w位赋给C;进位赋给Carrybit,循环变量i加1,重复内循环直至i等于j,退出内循环;(h)令i为0开始内循环;(i)将X的第i个字与Y的第j-i个字相乘,乘积结果与Carrybit,C,S组成的2w+1位的二进制数相加,结果的低w位赋给S,高w位赋给C;进位赋给Carrybit,循环变量i加1,重复内循环直至i等于j,退出内循环;(j)将S与MC相乘后,求其对模2w的余数,结果赋给K的第j个字;(k)将K的第j个字与M的第0个字相乘,乘积结果与Carrybit,C,S组成的2w+1位的二进制数相加后,低w位赋给S,高w位赋给C;进位赋给Carrybit;(1)将C的值赋给S,Carrybit赋给C的最低一位,其余位均置0,Carrybit位置0;(m)循环变量j加1,重复外循环直至j等于l-1,退出外循环;(n)令j为l-2开始外循环;(o)令i为0开始内循环;(p)将K的第l-1-j+i个字与M的第l-1-i个字相乘,乘积结果与Carrybit,C,S组成的2w+1位的二进制数相加,结果的低w位赋给S,高w位赋给C;进位赋给Carrybit,循环变量i加1,重复内循环直至i等于j,退出内循环;(q)令i为0开始内循环;(r)将X的第l-1-j+i个字与Y的第l-1-i个字相乘,乘积结果与Carrybit,C,S组成的2w+1位的二进制数相加,结果的低w位赋给S,高w位赋给C;进位赋给Carrybit,循环变量i加1,重复内循环直至i等于j,退出内循环;(s)将S的值赋给Result的第l-2-j个字;(t)将C的值赋给S,Carrybit赋给C的最低一位,其余位均置0,Carrybit位置0;(u)循环变量j加1,重复外循环直至j等于0,退出外循环;(v)将S的值赋给Result的第l-1个字根据本发明的另一个方面,提供一种基于多字高基的蒙哥马利的模乘器,其特征在于包含双端口RAM(110)、第一至第五锁存器(101、102、103、104和105)、乘法器(109)和第一、第二和第三加法器(106、107、108),其特征在于存储单元双端口RAM(110)用来存储数据,包括输入乘数X、被乘数Y、初始常数MC、模数M、中间结果K和最后结果Result;双端口RAM(110)和第一至第三锁存器(103、104和105)、第三加法器(108)通过内部线路相连,控制电路控制RAM向第四和第五锁存器(104和105)读入计算所需要的字,包括乘数X、被乘数Y、初始常数MC、模数M、中间结果K;控制第三锁存器(103)和第三加法器(108)向RAM写入需要存储的字,包括中间结果K和最后结果Result;第一至第五锁存器(101、102、103、104和105)用来锁存临时结果,其中第一锁存器(101)是w+1位锁存器和第二锁存器(102)是w位锁存器,用来存储加法单元输出的进位、高w位和低w位,第三锁存器(103)用来存储输出到存储单元的最终结果的部分字,第四和第五锁存器(104和105)用来对从存储单元的输入进行锁存;第一和第二加法器(106、107)用来对乘法器(109)的输出结果和第一和第二锁存器(101、102)中锁存的结果进行加法运算,最后结果Result的字输出到锁存器(103),其它中间结果锁存在第一和第二锁存器(101和102)中;第三加法器(108)对乘法单元的输出结果相加得到中间结果K;乘法器(109)用来计算w*w位的乘法,输出为C、S结果;乘法器(109)用来对锁存器(104和105)的输入进行乘法运算,当计算中间结果K时,乘法器结果输出给加法器(108),除此之外乘法器结果输出给第一和第二加法器(106和107),其中乘法结果的C输出到第一加法器(106),S输出到第二加法器(107)。
从上述过程可以看出,对RAM共进行了21次写操作,分别是写入中间结果K的1个字和最后结果Result的1个字。同时减少了读RAM的次数,在上述步骤的(b)->(c)和步骤(j)->(k)过程中,不用从RAM中读出K
和K[j],j从1到l-1,同时在这一过程中可以向RAM写入K[j],j从0到l-1,从而提高了RAM的访问效率。
模乘器是RSA和ECC密码协处理器核心运算部件,模乘运算的速度取决于模乘运算的周期数。而模乘运算的周期数则取决于模乘器中各部件特别是乘法器的利用效率。本发明的模乘器的特征在于最大程度的提高了模乘器中的各部件特别是乘法器的利用效率和RAM的访问效率。


图1是本发明的模乘器的基本结构图;图2是本发明的64位模乘器的结构图;图3是l=4时模乘计算顺序图;图4是l=4时模平方计算顺序图;图5-6是本发明的适合硬件实现的蒙哥马利模乘方法的一个实施例的流程图具体实施方式
本发明的适合硬件实现的蒙哥马利模乘方法中,w为蒙哥马利算法每次处理的字长,l=n/w,n为模数的二进制位长,包括步骤输入以下参数X,Y,MC,M,其中MC为参数,M为模;设输出为Result,按如下步骤计算模乘结果Result=0(C,S)=0,其中C,S中间结果,C为高w位,S是低w位(C,S)=X
*Y
K=S*MC(mod 2w),其中K
为中间结果(carrybit,C,S)=(carrybit,C,S)+K
M
(carrybit,C,S)>>w,即右移w位Forj=1 to l-1 doFori=1 to j do(carrybit,C,S)=(carrybit,C,S)+K[i-1]M[j+1-i]Fori=0 to j do
(carrybit,C,S)=(carrybit,C,S)+X[i]Y[j-i]K[j]=S*MC(mod 2w)(carrybit,C,S)=(carrybit,C,S)+K[j]*M
(carrybit,C,S)>>wForj=l-2 to 0 doFori=0 to j do(carrybit,C,S)=(carrybit,C,S)+K[l-1-j+i]M[l-1-i]Fori=0 to j do(carrybit,C,S)=(carrybit,C,S)+X[l-1-j+i]Y[l-1-i]Result[l-2-j]=(carrybit,C,S)(mod 2w)(carrybit,C,S)>>wResult[l-1]=(carrybit,C,S)(mod 2w)输出模乘结果Result。
模乘器是RSA和ECC密码协处理器核心运算部件,模乘运算的速度取决于模乘运算的周期数。而模乘运算的周期数则取决于模乘器中各部件特别是乘法器的利用效率。本发明的模乘器的特征在于最大程度的提高了模乘器中的各部件特别是乘法器的利用效率和RAM的访问效率。
本发明的模乘器包含一个w*w位的CS乘法器,一个双端口RAM,三个w位的加法器,五个锁存器。
图1示出本发明的模乘器,包括第一至第五锁存器101、102、103、104和105,用来锁存临时结果,其中第一w+1位锁存器101和第二w位锁存器(102)用来存储中间结果Carrybit、C和S,第三w位锁存器(103)用来锁存作为最终结果S的部分字,第四和第五w位锁存器104和105用来对输入X、Y、MC、M进行锁存;第一和第二w位加法器106、107用来计算(carrybit,C,S)+K
M
、(carrybit,C,S)+K[i-1]M[j+1-i]、(carrybit,C,S)+X[i]Y[j-i]、(carrybit,C,S)+K[j]*M
、(carrybit,C,S)+K[l-1-j+i]M[l-1-i]和(carrybit,C,S)+X[l-1-j+i]Y[l-1-i]中的加法;第三w位加法器(108)用于对S*MC的C,S输出结果相加得到K[i];w*w位乘法器(109)用来计算算法中的所有乘法,包括X
Y
、K
M
、K[i-1]M[j+1-i]、X[i]Y[j-i]、K[j]*M
、K[l-1-j+i]M[l-1-i]和X[l-1-j+i]Y[l-1-i];双端口RAM(110)用来存储数据,包括输入X、Y、MC、M、中间结果K和最后结果Result,其中各个部件的操作为控制电路控制从双口RAM110中输入以下参数X,Y,MC,M,其中MC为参数,M为模;设输出为Result,按如下步骤计算模乘结果Result=0(C,S)=0,其中C,S中间结果,C为高w位,S是低w位(C,S)=X
*Y
K=S*MC(mod 2w),其中K
为中间结果(carrybit,C,S)=(carrybit,C,S)+K
M
(carrybit,C,S)>>w,即右移w位Forj=1 to l-1 doFori=1 to j do(carrybit,C,S)=(carrybit,C,S)+K[i-1]M[j+1-i]Fori=0 to j do(carrybit,C,S)=(carrybit,C,S)+X[i]Y[j-i]K[j]=S*MC(mod 2w)(carrybit,C,S)=(carrybit,C,S)+K[j]*M
(carrybit,C,S)>>wForj=l-2 to 0 doFori=0 to j do(carrybit,C,S)=(carrybit,C,S)+K[l-1-j+i]M[l-1-i]
Fori=0 to j do(carrybit,C,S)=(carrybit,C,S)+X[l-1-j+i]Y[l-1-i]Result[l-2-j]=(carrybit,C,S)(mod 2w)(carrybit,C,S)>>wResult[l-1]=(carrybit,C,S)(mod 2w)从双口RAM(110)中输出模乘结果Result。
图2示出根据本发明的一个实施例的64位模乘器。装置201、202、203、204和205为64位的锁存器,用来锁存临时结果,其中装置201和装置202用来存储中间结果C,S,装置203用来锁存作为最终结果S的部分字,装置204和装置205用来对输入进行锁存;装置206、207为64位加法器,用来计算(carrybit,C,S)+K
M
、(carrybit,C,S)+K[i-1]M[j+1-i]、(carrybjt,C,S)+X[i]Y[j-i]、(carrybit,C,S)+K[j]*M
、(carrybit,C,S)+K[l-1-j+i]M[l-1-i]和(carrybit,C,S)+X[l-1-j+i]Y[l-1-i]中的加法;装置208为64位加法器,对S*MC的C,S输出结果相加得到K[i];装置209为6r*64位CS输出乘法器,用来计算算法中的所有乘法,包括X
Y
、K
M
、K[i-1]M[j+1-i]、X[i]Y[j-i]、K[j]*M
、K[l-1-j+i]M[l-1-i]和X[l-1-j+i]Y[l-1-i];装置210为双端口RAM,用来存储数据,包括输入X、Y、MC、M、中间结果K和最后结果Result。
图3是l=4时改进的蒙哥马利方法计算模乘的一个实例,其中X=(X[3],X[2],X[1],X
),Y=(Y[3],Y[2],Y[1],Y
),M=(M[3],M[2],M[1],M
)。图中的数字代表了计算乘法的先后次序,箭头代表了运算的方向。譬如“1”为计算X
*Y
,“2”为计算K=S*MC,“3”为计算K
*M
。该模乘器的运算为(carrybit,C,S)=(carrybit,C,S)+X[i]Y[j](carrybit,C,S)=(carrybit,C,S)+K[i]M[j]
该模乘器采用图3所示的计算顺序最大的优点是减少了向RAM写数的次数,l=4时共向RAM写8个w位的数K
、K[1]、K[2]、K[3]和最终结果S
、S[1]、S[2]、S[3]而不是像传统的模乘器把每次运算的中间结果放入RAM。同时从上图可以看出由3->4、8->9、15->16、24->25过程转换过程中只需从RAM中读入M[1]即可运算,这既减少了从RAM中读数的个数,同时可利用该过程把K
、K[1]、K[2]、K[3]写入RAM中,从而节省了时间,提高了模乘器的工作效率。
模乘器中采用流水线结构,乘法器每个时钟周期都计算一次乘法,连续计算,因此乘法器得到了最大程度的利用,计算顺序如上图所示。从上图中可以看出一次模乘所需的乘法数为2l2+l,考虑到读写周期数,一次模乘所需的时钟周期为2l2+l+4,即256位的模乘所需周期数为40个。
图4是l=4时改进的蒙哥马利方法计算模平方的一个实例,其中X=(X[3],X[2],X[1],X
),M=(M[3],M[2],M[1],M
)。图中的数字代表了计算乘法的先后次序,箭头代表了运算的方向。譬如“1”为计算X
*Y
,“2”为计算K=S*MC,“3”为计算K
*M
。该模乘器的运算为(carrybit,C,S)=(carrybit,C,S)+X[i]X[i](carrybit,C,S)=(carrybit,C,S)+2X[i]X[j](carrybit,C,S)=(carrybit,C,S)+K[i]M[j]该模平方采用图4所示的计算顺序最大的优点是减少了向RAM写数的次数,l=4时共向RAM写8个w位的数K
、K[1]、K[2]、K[3]和最终结果S
、S[1]、S[2]、S[3]而不是像传统的模乘器把每次运算的中间结果放入RAM。同时从上图可以看出由3->4、7->8、13->14、20->21过程转换过程中只需从RAM中读入M[1]即可运算,这既减少了从RAM中读数的个数,同时可利用该过程把K
、K[1]、K[2]、K[3]写入RAM中,从而节省了时间,提高了模乘器的工作效率。
从上图中可以看出一次模平方所需的乘法数为3(l2+l)/2,考虑到读写周期数,一次模平方所需的时钟周期为3(l2+l)/2+4,即256位的模平方所需周期数为34个。
图5是本发明的第1部分的部分流程图。
在步骤501,计算(C,S)=X
*Y
;在步骤502,置j=0;在步骤503,计算K[j]=S*MC(mod 2w);在步骤504,计算(carrybit,C,S)=(carrybit,C,S)+K[j]M
;在步骤505,(carrybit,C,S)>>w;在步骤506,j++;在步骤507,判断j≤l-1是否成立,成立,执行步骤508,否则转图6;在步骤508,置i=1;在步骤509,判断i≤j是否成立;成立,执行步骤510,否则转步骤511;在步骤510,计算(carrybit,C,S)=(carrybit,C,S)+K[i-1]M[j+1-i],i++,转步骤509;在步骤511,置i=0;在步骤512,判断i≤j是否成立;成立,执行步骤513,否则转步骤503;在步骤513,计算(carrybit,C,S)=(carrybit,C,S)+X[i]Y[j-i],i++,转步骤512。
图6是本发明的第1部分的部分流程图。
在步骤601,置j=l-2;在步骤602,判断j≥0是否成立,成立,执行步骤603,否则转步骤612;在步骤603,置i=0;在步骤604,判断i≤j是否成立;成立,执行步骤605,否则转步骤606;在步骤605,(carrybit,C,S)=(carrybit,C,S)+K[l-1-j+i]M[l-1-i],i++,转步骤604;在步骤606,置i=0;在步骤607,判断i≤j是否成立;成立,执行步骤608,否则转步骤609;在步骤608,(carrybit,C,S)=(carrybit,C,S)+X[l-1-j+i]Y[l-1-i],i++,转步骤607;在步骤609,Result[l-2-j]=(carrybit,C,S)(mod 2w);在步骤610,(carrybit,C,S)>>w;在步骤611,执行j++,转步骤602;在步骤612,Result[l-1]=(carrybit,C,S)(mod 2w),终止;
权利要求
1.一种适合硬件实现的多字高基的蒙哥马利模乘方法,其特征在于乘数X、被乘数Y和模数M均为n位的二进制数,w为算法每次处理的字长,MC为w位的常数,中间变量K为n位的二进制数,中间变量C,S均为w位的二进制数,Carrybit为一位的二进制数,最终结果Result为n位的二进制数,i,j为循环变量,l=n/w,运算前变量C,S,Carrybit,Result均赋零值,其运算步骤如下(a)将X的第0个字与Y的第0个字相乘,乘积的低w位赋给S,高w位赋给C;(b)将S与MC相乘后,求其对模2w的余数,结果赋给K的第0个字;(c)将K的第0个字与M的第0个字相乘,乘积结果与C,S相加后,低w位赋给S,高w位赋给C;进位赋给Carrybit;(d)将C的值赋给S,Carrybit赋给C的最低一位,其余位均置0,Carrybit位置0;(e)令j为1开始外循环;(f)令i为1开始内循环;(g)将K的第i-1个字与M的第j+1-i个字相乘,乘积结果与Carrybit,C,S组成的2w+1位的二进制数相加,结果的低w位赋给S,高w位赋给C;进位赋给Carrybit,循环变量i加1,重复内循环直至i等于j,退出内循环;(h)令i为0开始内循环;(i)将X的第i个字与Y的第j-i个字相乘,乘积结果与Carrybit,C,S组成的2w+1位的二进制数相加,结果的低w位赋给S,高w位赋给C;进位赋给Carrybit,循环变量i加1,重复内循环直至i等于j,退出内循环;(j)将S与MC相乘后,求其对模2w的余数,结果赋给K的第j个字;(k)将K的第j个字与M的第0个字相乘,乘积结果与Carrybit,C,S组成的2w+1位的二进制数相加后,低w位赋给S,高w位赋给C;进位赋给Carrybit;(l)将C的值赋给S,Carrybit赋给C的最低一位,其余位均置0,Carrybit位置0;(m)循环变量j加1,重复外循环直至j等于l-1,退出外循环;(n)令j为1-2开始外循环;(o)令i为0开始内循环;(p)将K的第l-1-j+i个字与M的第l-1-i个字相乘,乘积结果与Carrybit,C,S组成的2w+1位的二进制数相加,结果的低w位赋给S,高w位赋给C;进位赋给Carrybit,循环变量i加1,重复内循环直至i等于j,退出内循环;(q)令i为0开始内循环;(r)将X的第l-1-j+i个字与Y的第l-1-i个字相乘,乘积结果与Carrybit,C,S组成的2w+1位的二进制数相加,结果的低w位赋给S,高w位赋给C;进位赋给Carrybit,循环变量i加1,重复内循环直至i等于j,退出内循环;(s)将S的值赋给Result的第l-2-j个字;(t)将C的值赋给S,Carrybit赋给C的最低一位,其余位均置0,Carrybit位置0;(u)循环变量j加1,重复外循环直至j等于0,退出外循环;(v)将S的值赋给Result的第l-1个字
2.一种基于多字高基的蒙哥马利的模乘器,其特征在于包含双端口RAM(110)、第一至第五锁存器(101、102、103、104和105)、乘法器(109)和第一、第二和第三加法器(106、107、108),其特征在于存储单元双端口RAM(110)用来存储数据,包括输入乘数X、被乘数Y、初始常数MC、模数M、中间结果K和最后结果Result;双端口RAM(110)和第一至第三锁存器(103、104和105)、第三加法器(108)通过内部线路相连,控制电路控制RAM向第四和第五锁存器(104和105)读入计算所需要的字,包括乘数X、被乘数Y、初始常数MC、模数M、中间结果K;控制第三锁存器(103)和第三加法器(108)向RAM写入需要存储的字,包括中间结果K和最后结果Result;第一至第五锁存器(101、102、103、104和105)用来锁存临时结果,其中第一锁存器(101)是w+1位锁存器和第二锁存器(102)是w位锁存器,用来存储加法单元输出的进位、高w位和低w位,第三锁存器(103)用来存储输出到存储单元的最终结果的部分字,第四和第五锁存器(104和105)用来对从存储单元的输入进行锁存;第一和第二加法器(106、107)用来对乘法器(109)的输出结果和第一和第二锁存器(101、102)中锁存的结果进行加法运算,最后结果Result的字输出到锁存器(103),其它中间结果锁存在第一和第二锁存器(101和102)中;第三加法器(108)对乘法单元的输出结果相加得到中间结果K;乘法器(109)用来计算w*w位的乘法,输出为C、S结果;乘法器(109)用来对锁存器(104和105)的输入进行乘法运算,当计算中间结果K时,乘法器结果输出给加法器(108),除此之外乘法器结果输出给第一和第二加法器(106和107),其中乘法结果的C输出到第一加法器(106),S输出到第二加法器(107)。
全文摘要
本发明包含一种改进的蒙哥马利方法及其运算电路,本发明模乘方法在现有FIOS基础上作了改进,改变了对字的处理顺序,从而对中间结果K进行存储,减少了访问外部存储的次数;本发明模乘器,包含存储单元、临时结果存储单元、乘法单元和加法单元,其中存储单元为双端口RAM(110)用来存储数据,包括输入乘数X、被乘数Y、初始常数MC、模数M、中间结果K和最后结果Result;临时存储单元为锁存器(101、102、103、104和105),用来锁存临时结果,其中第一w+1位锁存器(101)和第二w位锁存器(102)用来存储加法单元输出的进位、高w位和低w位,第三w位锁存器(103)用来存储输出到存储单元的最终结果的部分字,第四和第五w位锁存器(104和105)用来对从存储单元的输入进行锁存;加法单元第一和第二w位加法器(106、107)用来对第一w位锁存器(101)和第二w位锁存器(102)锁存的临时结果和乘法单元的输出进行加法运算;第三w位加法器(108)对乘法单元的输出结果相加得到中间结果K;乘法单元w*w位乘法器(109)用来计算w*w位的乘法,输出为C、S结果;各部件执行本发明方法中的运算。本发明不仅降低了芯片面积,而且还减少了模乘运算的时钟周期数。
文档编号G06F7/72GK1967469SQ20061013665
公开日2007年5月23日 申请日期2006年11月9日 优先权日2006年11月9日
发明者张学鹏, 胡进, 张家宏 申请人:北京华大信安科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1