專利名稱: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日
發明者李樹國, 周潤德, 孫義和 申請人:清華大學