Vlsi用的蒙格玛丽模乘算法及智能卡模乘器的vlsi结构的制作方法

文档序号:6583283阅读:266来源:国知局
专利名称:Vlsi用的蒙格玛丽模乘算法及智能卡模乘器的vlsi结构的制作方法
技术领域
VLSI用的蒙格玛丽(montgomery)模乘算法及智能卡模乘器VLSI结构属于智能卡加/解密现代密码学用密钥解决了加密问题,密钥用K表示。K可以是很多数值。密钥K的可能值的范围叫做密钥空间(keyspace)。加密和解密运算都使用这个密钥(即运算都依赖于密钥,并用K作为下标表示),这样,加解密函数变为Ek1(M)=CDk2(C)=M其中,Ek1是依赖于密钥k1的加密函数,M(Message)是被加密的明文Dk2是依赖于密钥k2的解密函数,C(Crypto)是加密后的密文其加密过程,具有如

图1所示的特性实现公钥密码体制的算法很多,比较典型的是RSA算法和椭圆曲线算法。RSA算法是1978年2月,由美国麻省里工学院(MIT)的研究小组成员Riverst,Shamir和Adleman三位专家提出,并用他们名字的头字母命名为RSA算法。它既能用于加密也能用于数字签名。RSA的安全是基于大素数分解的难度,其公开密钥和私人密钥是一对大素数(100到200个大素数或更大)的函数。关于RSA硬件实现目前已经制造出了许多RSA加密的芯片,RSA算法的正确性已被实践和理论所证明。
在公钥加/解密体制中,存在着一个大数模幂乘运算Pemod N,这个运算造成了公钥加解密运算的巨大运算量。大数模幂乘运算速度决定了公钥加解密的应用性能。从国内外的研究现状来看,由于公钥加解密的安全性强,使得大数模幂乘运算应用非常广泛。
2大数模幂乘Pemod N的分解公钥密码体制加解密就是进行大数模幂乘运算,大数模幂乘运算(Pemod N)速度决定公钥加密的可用性。大数模幂乘运算(Pemod N)可分解为大数模乘运算AB mod N,它的分解形式为<pre listing-type="program-listing">begin  C=1;//C先赋值常数1  for i=0 to u-1 do   {  if(ei=1) C=X·C(mod N) //第一个AB mod N的形式   X=X·X(mod N) //第二个AB mod N的形式   }  return C  end</pre>其中,e=(enen-1...ei.....e0),从求Xemod N分解的算法中,可以看出存在着一种基本的运算形式AB mod N。因为AB的运算是一种普通两数相乘运算。有关相乘算法的研究较为成熟和普遍,这样在获得AB之积X时,求模运算X mod N就变成基本的操作。通常,在已知X值时,通过X-N的循环递减运算,而最终获得X mod N。这种运算通常称为模减运算。一般实际应用中,令X=AB,所以在进行模减运算前,先进行乘运算AB,再进行减运算,这种模运算称之为模乘运算。因此,模乘运算AB mod N就成为一个值的研究的问题。
3 Montgomery的模乘算法RSA加密算法是目前在理论和实际应用中较为成功的一种公钥密码体制,它的安全性是基于数论中大整数分解为素数因子的困难性上。它有一对密钥,即公钥或加密密钥(e,N)和私钥或解密密钥(d,N)。
对明文m,其加密过程c≡E(m)=memod N式中c表示密文而解密过程m≡D(c)=cdmod N m表示明文由Euler定理可以证明加/解密过程的一致性。RSA算法加密/解密过程实质上就是一个计算模幂memod N或cdmod N的过程。但是由于m,e,c,d,N等操作数大于1024比特,直接的模幂运算已不可能,必须先将其分解为基本的大数模乘运算AB mod N。Montgomery算法正是为解决大数模乘运算AB mod N而提出的。
原始的Montgomey模乘算法设N为模数且N>1,R是与N互素的一个基,通常,R=2u,u是N的位数;R-1和N满足0<R-1<N,0<N′<R,R R-1-N N′=1,即RR-1(mod N)=1或N N′(mod R)=-1;对给定大整数T,且0≤T<RNMontgomery算法如下function REDC(T)m←(T mod R)N′mod Rt←(T+mN)/Rif t≥N then t-N else return t上述算法从表面上看仅有两次大数乘法TN′和mN,但由于模乘运算时T=AB,0≤A<N,0≤B<N,所以算法共进行三次大数乘法运算。当A,B和N都为1024位以上的大整数时,大数相乘给硬件实现带来了困难,因此必须对大数进行分解。另外,由于算法的返回结果是Montgomery积ABR-1mod N,而不是模乘积AB mod N,所以使用时还应消除Montgomery积的常数项R-1而变为模乘积。
目前,申请大数模乘的专利国外较多,国内较少。国内有关大数模乘的专利有两项。这两项专利分别是“高速模乘方法及装置(96109838.4)”,“模乘法的电路及装置(99808871.4)”。这两项专利与我们要申请专利相比,我们的专利先进于这两项专利,并且适合于大规模集成电路VLSI实现。
随着智能卡的日益普及,智能卡交易中的数据安全变得越来越重要。由于公钥密码体制RSA(Rivest,Shamir,Adleman)解决了数字签名、信息验证和身份认证,因此智能卡采用公钥密码体制的RSA实施数据加密越来越必要。但是,智能卡采用公钥密码体制RSA进行加密目前存在两个主要问题1)RSA密码协处理器的VLSI(Very Large Scale Integration)实现面积过大2)RSA密码协处理器的模幂乘运算速度较低。本申请分析和改进大数模乘的Montgomery算法,提出了一种新的高基模乘器结构。这种结构不仅降低了芯片面积,而且还减少了模幂乘运算的时钟周期数,适合于智能卡应用。
本发明所提出的Montgomery模乘算法其特征在于它是一种适合于VLSI实现的高并行度算法,其实质在于把原始的三次大数乘法运算分解为2s2+s次小整数乘,它依次含有以下步骤设A,B分别为s位r进制整数;A=(as-1as-2…a1a0), B=(bs-1bs-2…b1b0)模N也为s位r进制整数,N=(ns-1ns-2…n1n0),且R=rs则有N<R,n0n0′mod r=-1,并使A<N,B<N,S=0,n′=-n
-1mod r //求n0的模逆有(A)用s2-s次乘法计算乘积结果的低位S个,可用中间结果m[i]表示A.1 i=0,......s-1A.2 j=0,......i-1A.2.1 S=S+a[j]b[i-j]+m[j]n[i-j]A.3 S=S+a[i]b
A.4 m[i]=S n′
mod rA.5 S=S+m[i]n
A.6 S=S/r//右移一个r进制位(B)用s2-s次乘法计算乘积结果的高S位,用存储变量m表示B.1 i=s,...,2 s-1B.2 j=i-s+1,...,s-1B.2.1 S=S+a[j]b[i-j]+m[j]n[i-j]B.3 m[i-s]=S mod rB.4 S=S/r//右移一个r进制位(C)用s次加法把蒙格玛丽(Montgomery)模乘积由
)=m[j]+not(n[j])+Cy//Cy为进位位,随进位而变t0=t0+not
+Cy
C.4 若t0=0则 返回(b[s-1]b[s-2]…b[1]b
)否则 返回(m[s-1]m[s-2]…m[1]m
)本发明所提出的智能卡模乘器的VLSI结构,其特征在于它是一种用32位乘法器来实现1024位模乘运算且数据通路采用三级流水结构的高基模乘器,其第一级由两个输入分别为a,b和m,n的32位乘法器,以及输入端分别与上述两个乘法器的输出端相连的两个64位寄存器组成;第二级由累加两个64位的积并产生一个进位Cy的64位加法器和与该64位加法器输出端相连的65位寄存器构成。第三级由输入端与上述65位寄存器的输出端相连以求总的累加和的76位加法器以及与该76位加法器交互相连而输出端输出乘积结果的76位寄存器构成。
使用证明它已达到了预期的目的。
图2,s=3时改进的FIPS模乘方法图3~图5,本发明提出的VLSI目的Montgomery模乘算法的计算机流程框图。
图6,RSA模乘器Monpro的结构示意7,R=rs=2ks下模幂Memod N的计算机流程框8,RSA加密处理器的结构示意图上述算法的计算瓶颈是乘法的次数。
A需要进行s2+2s次乘法,B需要进行s2-s次乘法,共进行2s2+s次乘法。C需要进行s次加法以调整模乘积由


改进FIPS算法的实质是把原始的Montgomery算法的3次大数乘分解为2s2+s次小整数乘,以利于VLSI实现。图3~图5是其计算机实现时的流程框图。
模乘器是RSA密码协处理器核心运算部件。模乘运算AB mod N速度取决于模乘运算的时钟周期数,所以模乘器设计目标应在规定的面积下尽可能降低模乘运算的时钟周期数。在VLSI实现算法中,由于A,B,N都是r进制整数,因此称r为基,而通常取r=2k。若r=2k且k≥16,则称r为高基。基于高基的模乘器就为高基模乘器。在本设计中,大数A,B,N各为u个二进制位,从数据的安全考虑,我们确定取u=1024比特。这样A,B,N就可以表示成由s=u/k个字组成的多精度数,A=(as-1,as-2,...ai...a1a0)r,而ai=(ak-1,ak-2,...,a1a0).即每个ai(0≤i<s)可表示k个二进制位。k值越大,硬件的VLSI实现规模也就越大。
在VLSI实现算法中,当s=u/k时,总乘法次数2s2+s就变为2(u/k)2+u/k。当u固定时,乘法次数2(u/k)2+u/k将随着k的增大而减少,相应的运算时间也就越少,这是我们所希望的。但是,由于k值与VLSI的硬件实现规模成正比,k值过大会导致VLSI的实现面积和时延较大。因此,k的取值应在面积的约束下尽可能的降低运算的时钟数。
选取k= 那么2(u/k)2+u/k就变为2u+ 取u的平方根的理由是在忽略 时(当u≥1024时, 与u相比很小),乘法次数就从非线性的u2变为线性的u,这种变化对降低运算时钟数很有利。当k= 时,基于TSMC的0.35μm的标准单元库进行综合,结果表明密码协处理器硬件面积约为38K门。若再增加k的取值,在相同的实验条件下进行综合,密码协处理器模乘器硬件面积将变得更大。因此,设计中我们确定k= 由于确定了u=1024比特,k= =32,那么基r=2k=232,所以用32位的乘法器来实现1024位的模乘运算。在VLSI实现算法中,Part A和Part B各含有共同的乘积项a[j]b[i-j]和m[j]n[i-j],由于这两个乘积项无数据相关,因此,可用两个32位乘法器同时并行地进行乘法运算如图6所示,于是在一个时钟周期内可完成两次乘法运算。
在VLSI实现算法Part A中,由于a[j]b[i-j]和m[j]n[i-j]两项可并行执行,这样,完成a[j]b[i-j]和m[j]n[i-j]的s2-s次乘仅需(s2-s)/2个时钟周期。而其它三个乘积项a[i]b
、Sn′
和m[i]n
之间存在两次数据相关,即a[i]b
相关Sn′
和Sn′
相关m[i]n
,依据图6的三级流水结构,每次相关需要等待3个时钟周期,故两次相关共需6个时钟周期。又由于a[i]b
、Sn
和m[i]n
需要循环s次,所以完成这三个乘积项的累加需要6s个时钟周期。简言之,Part A的乘加运算需要6s+(s2-s)/2个时钟周期,即(s2+11s)/2个时钟周期。
在VLSI实现算法Part B中,仅存在可并行执行的乘积项a[j]b[i-j]和m[j]n[i-j],所以,(s2-s)次乘仅需(s2-s)/2个时钟周期。而在Part C中,将模乘积调整到[0,N)应进行s次加法,还需s个时钟周期。因此,算法中的Part A,B,C三项所耗的时钟数之和为s2+6s或者u+6 个时钟周期。(将s=u/k,k= 代入式s2+6s得u+6 )在VLSI实现算法Part A中,由于Sn′
这s次乘积并没有计入累加和S中,累加和应为2s2+s-s=2s2次乘积之和,因此,用作累加的加法器位宽至少应大于log2(2s2264),而s=u/k= =32,所以,log2(2s2264)=75,于是选择用于累加的加法器位宽为76位。见图6。
模乘器的数据通路采用三级流水结构,以增强模乘器的并行性。即mul32=>adder64=>adder76,第一级为两个32乘法器并行执行,第二级一个64位的加法器累加两个64位的积并产生一位进位Cy,第三级一个76位的加法器求总的累加和。模乘器的控制通路采用状态机模型控制循环叠代以及模乘器与存储器之间的数据交换。总之,模乘器完成一次模乘运算需要u+6 个时钟周期。当u=1024比特时,一次模乘运算需要1216个时钟周期。
根据本发明提出的RSA模乘器Monpro,基于此模乘器实现的模幂Memod N硬件实现算法如下;R=rs=2ksfunction MonExp(M,e,N,R)/*N是奇数*/步骤1 M=M·R mod N步骤2 x=1·R mod N步骤3 for i=u-1 downto 0步骤4 x=MonPro(x,x)步骤5 if(ei=1)then x=MonPro(M,x)步骤6 x=MonPro(x,1)步骤7 return x相应的计算机实现的程序流程图见图7,而其RSA加幂处理器的结构示意图见图8。图8中的mux表示2选1的多路器,Monpro表示图6的模乘器结构。(e,N)为加密密钥。模幂算法从左到右扫描e=(eu-1…ei…e0)来调用图6中的RSA模乘器MonPro,由于Montgomery积不是模乘积,因此步骤1、2、6用来消去Montgomery积中的R-1乘积项使之变为模乘积。模幂算法的VLSI实现就是RSA密码协处理器,如图8所示。模幂算法中的ei和图8中的ei′关系是当ei=0时,ei′=0,即只进行一次模乘运算,当ei=1时,ei′=01,进行两次模乘运算。
在平均的情况下,对任意的i,ei=1或ei=0的概率各半,所以平均需进行1.5次模乘运算,则完成模幂运算所需的时钟周期数1.5u(s2+6s)=1.5u2+9u 在最坏的情况下,对任意的i,所有的ei=1,全都进行2次模乘运算,则完成模幂运算所需的时钟周期数2u(s2+6s)=2u2+12u (s=u/k,k= )。基于5MHz的工作时钟,加密u=1024位,平均执行时间为1.5×1024×(s2+6s)/(5×106)=1.5×1024×(u+6 )/(5×106)=374ms最坏执行时间为2×1024×(s2+6s)/(5×106)=2×1024×(u+6 )/(5×106)=498ms1024位RSA密码协处理器,用Cadence工具Verilog-XL进行仿真,验证了加/解密M≡MedmodN的一致性和正确性。基于0.35μm TSMC标准单元库,用Synopsys工具进行综合,实验结果表明RSA密码协处理器共用38K门,它完成一次1024位模乘运算需要1216个时钟周期。它的最大时延为32位乘法器的组合逻辑时延,其值为15ns,所以RSA密码协处理器最高可允许65MHz,满足智能卡20MHz的工作频率。在基于外部5MHz的工作时钟下,RSA密码协处理器加密1024位的明文平均需要374ms。
权利要求
1.VLSI用的蒙格玛丽(montgomery)模乘算法,其特征在于它是一种适合于VLSI实现的高并行度算法,其实质在于把原始的三次大数乘法运算分解为2s2+s次小整数乘,它依次含有以下步骤设A,B分别为s位r进制整数;A=(as-1as-2…a1a0),B=(bs-1bs-2…b1b0)模N也为s位r进制整数,N=(ns-1ns-2…n1n0),且R=rs则有N<R,n0n0′mod r=-1,并使A<N,B<N,S=0,n′=-n
-1mod r //求n0的模逆有(A)用s2-s次乘法计算乘积结果的低位S个,可用中间结果m[i]表示A.1i=0......s-1A.2j=0......i-1A.2.1 S=S+a[j]b[i-j]+m[j]n[i-j]A.3S=S+a[i]b
A.4m[i]=S n′
mod rA.5S=S+m[i]n
A.6S=S/r//右移一个r进制位(B)用s2-s次乘法计算乘积结果的高S位,用存储变量m表示B.1i=s,...,2 s-1B.2j=i-s+1,...,s-1B.2.1 S=S+a[j]b[i-j]+m[j]n[i-j]B.3m[i-s]=S mod rB.4S=S/r//右移一个r进制位(C)用s次加法把蒙格玛丽(Montgomery)模乘积由
)=m[j]+not(n[j])+Cy//Cy为进位位,随进位而变t0=t0+not
+CyC.4若t0=0则 返回(b[s-1]b[s-2]…b[1]b
)否则返回(m[s-1]m[s-2]…m[1]m
)
2.根据权利要求1所述的VLSI用的蒙格玛丽模乘算法而提出的智能卡模乘器结构,其特征在于 它是一种用32位乘法器来实现1024位模乘运算且数据通路采用三级流水结构的高基模乘器,其第一级由两个输入分别为a,b和m,n的32位乘法器,以及输入端分别与上述两个乘法器的输出端相连的两个64位寄存器组成;第二级由累加两个64位的积并产生一个进位Cy的64位加法器和与该64位加法器输出端相连的65位寄存器构成。第三级由输入端与上述65位寄存器的输出端相连以求总的累加和的76位加法器以及与该76位加法器交互相连而输出端输出乘积结果的76位寄存器构成。
全文摘要
VLSI用的蒙格玛丽(Montgomery)模乘算法及智能卡模乘器VLSI实现结构,适用于智能卡加/解密技术领域。其特征在于它是一种适合于VLSI实现的高并性度算法,它把原始的Montgomery模乘算法的3次大数乘分解为2s
文档编号G06F7/552GK1392472SQ02125399
公开日2003年1月22日 申请日期2002年7月31日 优先权日2002年7月31日
发明者李树国, 周润德, 孙义和 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1