專利名稱:高效模乘方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及公鑰密碼技術(shù),是改進(jìn)的蒙哥馬利模乘方法及其電路結(jié)構(gòu)。
背景技術(shù):
1.公鑰密碼技術(shù)在專利“密碼設(shè)備和方法”(“CRYPTOGRAPHIC APPARATUSAND METHOD”,專利號US4200770)中給出了一個可以在公開信道中交換密鑰的方法,稱為Diffie-Hellman密鑰交換方法。該專利使得通信雙方使用一個模冪函數(shù)協(xié)商和傳遞他們的秘密信息,攻擊者要想獲得傳遞的秘密信息,必須解決離散對數(shù)問題,而如果通信雙方使用的參數(shù)足夠大,則離散對數(shù)問題在計算上是不可解的。該專利奠定了公鑰密碼學(xué)的基本原理。
公鑰密碼,又稱非對稱密碼,與只使用一個密鑰的對稱密碼不同,它使用兩個獨立但又存在著某種數(shù)學(xué)聯(lián)系的密鑰公鑰和私鑰。通信的各方保密各自的私鑰,公開其公鑰,發(fā)送者使用接收者的公鑰加密,接收者使用只有自己知道的私鑰解密。公鑰密碼還可以解決數(shù)字簽名的問題,簽名者使用只有自己知道的私鑰對消息簽名,驗證者使用簽名者的公鑰可以驗證簽名的合法性。
專利“密碼通信系統(tǒng)和方法”(“CRYPTOGRAPHICCOMMNICATION SYSTEM AND METHOD”,專利號US4405829)提出了Rivest、Shamir和Adleman發(fā)明的一種公鑰密碼方法-RSA。RSA公鑰密碼方法的安全性基于大整數(shù)因子分解問題的難解性,伴隨著應(yīng)用對安全性要求的不斷提高,RSA密鑰的長度在不斷增加。
橢圓曲線密碼系統(tǒng)(Elliptic Curve Cryptosystems,簡稱ECC)自1985年由Neal Koblitz和Victor Miller提出以來,由于其相對于RSA的全方面的優(yōu)勢(更強(qiáng)的安全性、更高的實現(xiàn)效率、更省的實現(xiàn)代價),吸引了大批密碼學(xué)工作者就其安全性和實現(xiàn)方法作了大量的研究,并已逐漸被國際各大標(biāo)準(zhǔn)組織采納作為公鑰密碼標(biāo)準(zhǔn)(IEEEP1363、ANSI X9、ISO/IEC和IETF等),成為主流應(yīng)用的公鑰密碼之一。
在RSA中,存在著一個大整數(shù)的模冪運算Xemod M,這個運算造成了RSA加/解密和簽名/驗證的巨大運算量;在ECC中,存在一個大整數(shù)k乘以橢圓曲線點P(稱為“點乘”)的運算kP,這個運算造成了ECC加/解密和簽名/驗證的巨大運算量。
2.大整數(shù)模冪運算和橢圓曲線點乘運算的分解大整數(shù)模冪運算Xemod M可以分解為大整數(shù)模乘運算XY mod M和模平方運算X2mod M。設(shè)e的二進(jìn)制形式為e=(en-1en-2……e1e0),其中n為e的二進(jìn)制長度。分解形式為輸入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為大整數(shù),k=(kn-1kn-2......k1k0),其中n為k的二進(jìn)制長度,P,Q為橢圓曲線上的整數(shù)點。分解形式為輸入k=(kn-1kn-2......k1k0),P
輸出kP1)Q=O(O為無窮遠(yuǎn)點)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。設(shè)P3=P1+P2=(x3,y3)。其中x3=λ2-x1-x2y3=λ(x1-x3)-y1當(dāng)P1≠P2時λ=(y2-y1)/(x2-x1) 當(dāng)P1=P2時λ=(3x12-3)/(2y1)從上述公式可以看出橢圓曲線點加(P1≠P2)運算需1次模乘運算和1次模平方運算。橢圓曲線點倍(P1=P2)運算需2次模乘運算和2次模平方運算。
從大整數(shù)模冪運算和橢圓曲線點乘運算的分解可以看出,都存在著兩種基本的運算——模乘運算XY mod M和模平方運算X2mod M。
3.蒙哥馬利模乘算法蒙哥馬利給出了一種非常有效的模乘方法,該方法的優(yōu)點是利用簡單的移位操作代替除法運算。設(shè)M為模數(shù),M>1,M的二進(jìn)制位長為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
上述算法需要用到大整數(shù)的乘法,這對軟件和硬件都很難實現(xiàn)?;谶@個原因,Koc等人提出了基于字的蒙哥馬利算法,F(xiàn)IOS(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目前,在模乘器的設(shè)計中大多都采用蒙哥馬利算法及其變形?,F(xiàn)有模乘器的設(shè)計是對中間結(jié)果進(jìn)行(C,S)進(jìn)行儲存,下一循環(huán)需要用到時再讀取(C,S),需要對存儲設(shè)備進(jìn)行頻繁的讀寫。而對存儲設(shè)備的讀寫是需要花費時鐘周期,從而影響了模乘器的工作效率。
發(fā)明內(nèi)容
本發(fā)明針對Koc提出的蒙哥馬利算法FIOS(finely integrated operandscanning method),提出了一種改進(jìn)的適合集成電路設(shè)計的FIOS方法。本發(fā)明針對集成電路設(shè)計中模乘器的設(shè)計提出一種新的模乘器的結(jié)構(gòu)。本發(fā)明的優(yōu)點是通過改變乘法的計算順序從而將K寫入RAM而不是C,S,減少了中間結(jié)果寫入RAM中的次數(shù)。該結(jié)構(gòu)不僅降低了芯片面積,而且還減少了模乘運算的時鐘周期數(shù)。
根據(jù)本發(fā)明的一個方面,提供一種適合硬件實現(xiàn)的多字高基的蒙哥馬利模乘方法,其特征在于乘數(shù)X、被乘數(shù)Y和模數(shù)M均為n位的二進(jìn)制數(shù),w為算法每次處理的字長,MC為w位的常數(shù),中間變量K為n位的二進(jìn)制數(shù),中間變量C,S均為w位的二進(jìn)制數(shù),Carrybit為一位的二進(jìn)制數(shù),最終結(jié)果Result為n位的二進(jìn)制數(shù),i,j為循環(huán)變量,l=n/w,運算前變量C,S,Carrybit,Result均賦零值,其運算步驟如下(a)將X的第0個字與Y的第0個字相乘,乘積的低w位賦給S,高w位賦給C;(b)將S與MC相乘后,求其對模2w的余數(shù),結(jié)果賦給K的第0個字;(c)將K的第0個字與M的第0個字相乘,乘積結(jié)果與C,S相加后,低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit;(d)將C的值賦給S,Carrybit賦給C的最低一位,其余位均置0,Carrybit位置0;(e)令j為1開始外循環(huán);(f)令i為1開始內(nèi)循環(huán);(g)將K的第i-1個字與M的第j+1-i個字相乘,乘積結(jié)果與Carrybit,C,S組成的2w+1位的二進(jìn)制數(shù)相加,結(jié)果的低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit,循環(huán)變量i加1,重復(fù)內(nèi)循環(huán)直至i等于j,退出內(nèi)循環(huán);(h)令i為0開始內(nèi)循環(huán);(i)將X的第i個字與Y的第j-i個字相乘,乘積結(jié)果與Carrybit,C,S組成的2w+1位的二進(jìn)制數(shù)相加,結(jié)果的低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit,循環(huán)變量i加1,重復(fù)內(nèi)循環(huán)直至i等于j,退出內(nèi)循環(huán);(j)將S與MC相乘后,求其對模2w的余數(shù),結(jié)果賦給K的第j個字;(k)將K的第j個字與M的第0個字相乘,乘積結(jié)果與Carrybit,C,S組成的2w+1位的二進(jìn)制數(shù)相加后,低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit;(1)將C的值賦給S,Carrybit賦給C的最低一位,其余位均置0,Carrybit位置0;(m)循環(huán)變量j加1,重復(fù)外循環(huán)直至j等于l-1,退出外循環(huán);(n)令j為l-2開始外循環(huán);(o)令i為0開始內(nèi)循環(huán);(p)將K的第l-1-j+i個字與M的第l-1-i個字相乘,乘積結(jié)果與Carrybit,C,S組成的2w+1位的二進(jìn)制數(shù)相加,結(jié)果的低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit,循環(huán)變量i加1,重復(fù)內(nèi)循環(huán)直至i等于j,退出內(nèi)循環(huán);(q)令i為0開始內(nèi)循環(huán);(r)將X的第l-1-j+i個字與Y的第l-1-i個字相乘,乘積結(jié)果與Carrybit,C,S組成的2w+1位的二進(jìn)制數(shù)相加,結(jié)果的低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit,循環(huán)變量i加1,重復(fù)內(nèi)循環(huán)直至i等于j,退出內(nèi)循環(huán);(s)將S的值賦給Result的第l-2-j個字;(t)將C的值賦給S,Carrybit賦給C的最低一位,其余位均置0,Carrybit位置0;(u)循環(huán)變量j加1,重復(fù)外循環(huán)直至j等于0,退出外循環(huán);(v)將S的值賦給Result的第l-1個字根據(jù)本發(fā)明的另一個方面,提供一種基于多字高基的蒙哥馬利的模乘器,其特征在于包含雙端口RAM(110)、第一至第五鎖存器(101、102、103、104和105)、乘法器(109)和第一、第二和第三加法器(106、107、108),其特征在于存儲單元雙端口RAM(110)用來存儲數(shù)據(jù),包括輸入乘數(shù)X、被乘數(shù)Y、初始常數(shù)MC、模數(shù)M、中間結(jié)果K和最后結(jié)果Result;雙端口RAM(110)和第一至第三鎖存器(103、104和105)、第三加法器(108)通過內(nèi)部線路相連,控制電路控制RAM向第四和第五鎖存器(104和105)讀入計算所需要的字,包括乘數(shù)X、被乘數(shù)Y、初始常數(shù)MC、模數(shù)M、中間結(jié)果K;控制第三鎖存器(103)和第三加法器(108)向RAM寫入需要存儲的字,包括中間結(jié)果K和最后結(jié)果Result;第一至第五鎖存器(101、102、103、104和105)用來鎖存臨時結(jié)果,其中第一鎖存器(101)是w+1位鎖存器和第二鎖存器(102)是w位鎖存器,用來存儲加法單元輸出的進(jìn)位、高w位和低w位,第三鎖存器(103)用來存儲輸出到存儲單元的最終結(jié)果的部分字,第四和第五鎖存器(104和105)用來對從存儲單元的輸入進(jìn)行鎖存;第一和第二加法器(106、107)用來對乘法器(109)的輸出結(jié)果和第一和第二鎖存器(101、102)中鎖存的結(jié)果進(jìn)行加法運算,最后結(jié)果Result的字輸出到鎖存器(103),其它中間結(jié)果鎖存在第一和第二鎖存器(101和102)中;第三加法器(108)對乘法單元的輸出結(jié)果相加得到中間結(jié)果K;乘法器(109)用來計算w*w位的乘法,輸出為C、S結(jié)果;乘法器(109)用來對鎖存器(104和105)的輸入進(jìn)行乘法運算,當(dāng)計算中間結(jié)果K時,乘法器結(jié)果輸出給加法器(108),除此之外乘法器結(jié)果輸出給第一和第二加法器(106和107),其中乘法結(jié)果的C輸出到第一加法器(106),S輸出到第二加法器(107)。
從上述過程可以看出,對RAM共進(jìn)行了21次寫操作,分別是寫入中間結(jié)果K的1個字和最后結(jié)果Result的1個字。同時減少了讀RAM的次數(shù),在上述步驟的(b)->(c)和步驟(j)->(k)過程中,不用從RAM中讀出K
和K[j],j從1到l-1,同時在這一過程中可以向RAM寫入K[j],j從0到l-1,從而提高了RAM的訪問效率。
模乘器是RSA和ECC密碼協(xié)處理器核心運算部件,模乘運算的速度取決于模乘運算的周期數(shù)。而模乘運算的周期數(shù)則取決于模乘器中各部件特別是乘法器的利用效率。本發(fā)明的模乘器的特征在于最大程度的提高了模乘器中的各部件特別是乘法器的利用效率和RAM的訪問效率。
圖1是本發(fā)明的模乘器的基本結(jié)構(gòu)圖;圖2是本發(fā)明的64位模乘器的結(jié)構(gòu)圖;圖3是l=4時模乘計算順序圖;圖4是l=4時模平方計算順序圖;圖5-6是本發(fā)明的適合硬件實現(xiàn)的蒙哥馬利模乘方法的一個實施例的流程圖具體實施方式
本發(fā)明的適合硬件實現(xiàn)的蒙哥馬利模乘方法中,w為蒙哥馬利算法每次處理的字長,l=n/w,n為模數(shù)的二進(jìn)制位長,包括步驟輸入以下參數(shù)X,Y,MC,M,其中MC為參數(shù),M為模;設(shè)輸出為Result,按如下步驟計算模乘結(jié)果Result=0(C,S)=0,其中C,S中間結(jié)果,C為高w位,S是低w位(C,S)=X
*Y
K=S*MC(mod 2w),其中K
為中間結(jié)果(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)輸出模乘結(jié)果Result。
模乘器是RSA和ECC密碼協(xié)處理器核心運算部件,模乘運算的速度取決于模乘運算的周期數(shù)。而模乘運算的周期數(shù)則取決于模乘器中各部件特別是乘法器的利用效率。本發(fā)明的模乘器的特征在于最大程度的提高了模乘器中的各部件特別是乘法器的利用效率和RAM的訪問效率。
本發(fā)明的模乘器包含一個w*w位的CS乘法器,一個雙端口RAM,三個w位的加法器,五個鎖存器。
圖1示出本發(fā)明的模乘器,包括第一至第五鎖存器101、102、103、104和105,用來鎖存臨時結(jié)果,其中第一w+1位鎖存器101和第二w位鎖存器(102)用來存儲中間結(jié)果Carrybit、C和S,第三w位鎖存器(103)用來鎖存作為最終結(jié)果S的部分字,第四和第五w位鎖存器104和105用來對輸入X、Y、MC、M進(jìn)行鎖存;第一和第二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輸出結(jié)果相加得到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)用來存儲數(shù)據(jù),包括輸入X、Y、MC、M、中間結(jié)果K和最后結(jié)果Result,其中各個部件的操作為控制電路控制從雙口RAM110中輸入以下參數(shù)X,Y,MC,M,其中MC為參數(shù),M為模;設(shè)輸出為Result,按如下步驟計算模乘結(jié)果Result=0(C,S)=0,其中C,S中間結(jié)果,C為高w位,S是低w位(C,S)=X
*Y
K=S*MC(mod 2w),其中K
為中間結(jié)果(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)中輸出模乘結(jié)果Result。
圖2示出根據(jù)本發(fā)明的一個實施例的64位模乘器。裝置201、202、203、204和205為64位的鎖存器,用來鎖存臨時結(jié)果,其中裝置201和裝置202用來存儲中間結(jié)果C,S,裝置203用來鎖存作為最終結(jié)果S的部分字,裝置204和裝置205用來對輸入進(jìn)行鎖存;裝置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輸出結(jié)果相加得到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,用來存儲數(shù)據(jù),包括輸入X、Y、MC、M、中間結(jié)果K和最后結(jié)果Result。
圖3是l=4時改進(jìn)的蒙哥馬利方法計算模乘的一個實例,其中X=(X[3],X[2],X[1],X
),Y=(Y[3],Y[2],Y[1],Y
),M=(M[3],M[2],M[1],M
)。圖中的數(shù)字代表了計算乘法的先后次序,箭頭代表了運算的方向。譬如“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所示的計算順序最大的優(yōu)點是減少了向RAM寫數(shù)的次數(shù),l=4時共向RAM寫8個w位的數(shù)K
、K[1]、K[2]、K[3]和最終結(jié)果S
、S[1]、S[2]、S[3]而不是像傳統(tǒng)的模乘器把每次運算的中間結(jié)果放入RAM。同時從上圖可以看出由3->4、8->9、15->16、24->25過程轉(zhuǎn)換過程中只需從RAM中讀入M[1]即可運算,這既減少了從RAM中讀數(shù)的個數(shù),同時可利用該過程把K
、K[1]、K[2]、K[3]寫入RAM中,從而節(jié)省了時間,提高了模乘器的工作效率。
模乘器中采用流水線結(jié)構(gòu),乘法器每個時鐘周期都計算一次乘法,連續(xù)計算,因此乘法器得到了最大程度的利用,計算順序如上圖所示。從上圖中可以看出一次模乘所需的乘法數(shù)為2l2+l,考慮到讀寫周期數(shù),一次模乘所需的時鐘周期為2l2+l+4,即256位的模乘所需周期數(shù)為40個。
圖4是l=4時改進(jìn)的蒙哥馬利方法計算模平方的一個實例,其中X=(X[3],X[2],X[1],X
),M=(M[3],M[2],M[1],M
)。圖中的數(shù)字代表了計算乘法的先后次序,箭頭代表了運算的方向。譬如“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所示的計算順序最大的優(yōu)點是減少了向RAM寫數(shù)的次數(shù),l=4時共向RAM寫8個w位的數(shù)K
、K[1]、K[2]、K[3]和最終結(jié)果S
、S[1]、S[2]、S[3]而不是像傳統(tǒng)的模乘器把每次運算的中間結(jié)果放入RAM。同時從上圖可以看出由3->4、7->8、13->14、20->21過程轉(zhuǎn)換過程中只需從RAM中讀入M[1]即可運算,這既減少了從RAM中讀數(shù)的個數(shù),同時可利用該過程把K
、K[1]、K[2]、K[3]寫入RAM中,從而節(jié)省了時間,提高了模乘器的工作效率。
從上圖中可以看出一次模平方所需的乘法數(shù)為3(l2+l)/2,考慮到讀寫周期數(shù),一次模平方所需的時鐘周期為3(l2+l)/2+4,即256位的模平方所需周期數(shù)為34個。
圖5是本發(fā)明的第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是否成立,成立,執(zhí)行步驟508,否則轉(zhuǎn)圖6;在步驟508,置i=1;在步驟509,判斷i≤j是否成立;成立,執(zhí)行步驟510,否則轉(zhuǎn)步驟511;在步驟510,計算(carrybit,C,S)=(carrybit,C,S)+K[i-1]M[j+1-i],i++,轉(zhuǎn)步驟509;在步驟511,置i=0;在步驟512,判斷i≤j是否成立;成立,執(zhí)行步驟513,否則轉(zhuǎn)步驟503;在步驟513,計算(carrybit,C,S)=(carrybit,C,S)+X[i]Y[j-i],i++,轉(zhuǎn)步驟512。
圖6是本發(fā)明的第1部分的部分流程圖。
在步驟601,置j=l-2;在步驟602,判斷j≥0是否成立,成立,執(zhí)行步驟603,否則轉(zhuǎn)步驟612;在步驟603,置i=0;在步驟604,判斷i≤j是否成立;成立,執(zhí)行步驟605,否則轉(zhuǎn)步驟606;在步驟605,(carrybit,C,S)=(carrybit,C,S)+K[l-1-j+i]M[l-1-i],i++,轉(zhuǎn)步驟604;在步驟606,置i=0;在步驟607,判斷i≤j是否成立;成立,執(zhí)行步驟608,否則轉(zhuǎn)步驟609;在步驟608,(carrybit,C,S)=(carrybit,C,S)+X[l-1-j+i]Y[l-1-i],i++,轉(zhuǎn)步驟607;在步驟609,Result[l-2-j]=(carrybit,C,S)(mod 2w);在步驟610,(carrybit,C,S)>>w;在步驟611,執(zhí)行j++,轉(zhuǎn)步驟602;在步驟612,Result[l-1]=(carrybit,C,S)(mod 2w),終止;
權(quán)利要求
1.一種適合硬件實現(xiàn)的多字高基的蒙哥馬利模乘方法,其特征在于乘數(shù)X、被乘數(shù)Y和模數(shù)M均為n位的二進(jìn)制數(shù),w為算法每次處理的字長,MC為w位的常數(shù),中間變量K為n位的二進(jìn)制數(shù),中間變量C,S均為w位的二進(jìn)制數(shù),Carrybit為一位的二進(jìn)制數(shù),最終結(jié)果Result為n位的二進(jìn)制數(shù),i,j為循環(huán)變量,l=n/w,運算前變量C,S,Carrybit,Result均賦零值,其運算步驟如下(a)將X的第0個字與Y的第0個字相乘,乘積的低w位賦給S,高w位賦給C;(b)將S與MC相乘后,求其對模2w的余數(shù),結(jié)果賦給K的第0個字;(c)將K的第0個字與M的第0個字相乘,乘積結(jié)果與C,S相加后,低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit;(d)將C的值賦給S,Carrybit賦給C的最低一位,其余位均置0,Carrybit位置0;(e)令j為1開始外循環(huán);(f)令i為1開始內(nèi)循環(huán);(g)將K的第i-1個字與M的第j+1-i個字相乘,乘積結(jié)果與Carrybit,C,S組成的2w+1位的二進(jìn)制數(shù)相加,結(jié)果的低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit,循環(huán)變量i加1,重復(fù)內(nèi)循環(huán)直至i等于j,退出內(nèi)循環(huán);(h)令i為0開始內(nèi)循環(huán);(i)將X的第i個字與Y的第j-i個字相乘,乘積結(jié)果與Carrybit,C,S組成的2w+1位的二進(jìn)制數(shù)相加,結(jié)果的低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit,循環(huán)變量i加1,重復(fù)內(nèi)循環(huán)直至i等于j,退出內(nèi)循環(huán);(j)將S與MC相乘后,求其對模2w的余數(shù),結(jié)果賦給K的第j個字;(k)將K的第j個字與M的第0個字相乘,乘積結(jié)果與Carrybit,C,S組成的2w+1位的二進(jìn)制數(shù)相加后,低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit;(l)將C的值賦給S,Carrybit賦給C的最低一位,其余位均置0,Carrybit位置0;(m)循環(huán)變量j加1,重復(fù)外循環(huán)直至j等于l-1,退出外循環(huán);(n)令j為1-2開始外循環(huán);(o)令i為0開始內(nèi)循環(huán);(p)將K的第l-1-j+i個字與M的第l-1-i個字相乘,乘積結(jié)果與Carrybit,C,S組成的2w+1位的二進(jìn)制數(shù)相加,結(jié)果的低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit,循環(huán)變量i加1,重復(fù)內(nèi)循環(huán)直至i等于j,退出內(nèi)循環(huán);(q)令i為0開始內(nèi)循環(huán);(r)將X的第l-1-j+i個字與Y的第l-1-i個字相乘,乘積結(jié)果與Carrybit,C,S組成的2w+1位的二進(jìn)制數(shù)相加,結(jié)果的低w位賦給S,高w位賦給C;進(jìn)位賦給Carrybit,循環(huán)變量i加1,重復(fù)內(nèi)循環(huán)直至i等于j,退出內(nèi)循環(huán);(s)將S的值賦給Result的第l-2-j個字;(t)將C的值賦給S,Carrybit賦給C的最低一位,其余位均置0,Carrybit位置0;(u)循環(huán)變量j加1,重復(fù)外循環(huán)直至j等于0,退出外循環(huán);(v)將S的值賦給Result的第l-1個字
2.一種基于多字高基的蒙哥馬利的模乘器,其特征在于包含雙端口RAM(110)、第一至第五鎖存器(101、102、103、104和105)、乘法器(109)和第一、第二和第三加法器(106、107、108),其特征在于存儲單元雙端口RAM(110)用來存儲數(shù)據(jù),包括輸入乘數(shù)X、被乘數(shù)Y、初始常數(shù)MC、模數(shù)M、中間結(jié)果K和最后結(jié)果Result;雙端口RAM(110)和第一至第三鎖存器(103、104和105)、第三加法器(108)通過內(nèi)部線路相連,控制電路控制RAM向第四和第五鎖存器(104和105)讀入計算所需要的字,包括乘數(shù)X、被乘數(shù)Y、初始常數(shù)MC、模數(shù)M、中間結(jié)果K;控制第三鎖存器(103)和第三加法器(108)向RAM寫入需要存儲的字,包括中間結(jié)果K和最后結(jié)果Result;第一至第五鎖存器(101、102、103、104和105)用來鎖存臨時結(jié)果,其中第一鎖存器(101)是w+1位鎖存器和第二鎖存器(102)是w位鎖存器,用來存儲加法單元輸出的進(jìn)位、高w位和低w位,第三鎖存器(103)用來存儲輸出到存儲單元的最終結(jié)果的部分字,第四和第五鎖存器(104和105)用來對從存儲單元的輸入進(jìn)行鎖存;第一和第二加法器(106、107)用來對乘法器(109)的輸出結(jié)果和第一和第二鎖存器(101、102)中鎖存的結(jié)果進(jìn)行加法運算,最后結(jié)果Result的字輸出到鎖存器(103),其它中間結(jié)果鎖存在第一和第二鎖存器(101和102)中;第三加法器(108)對乘法單元的輸出結(jié)果相加得到中間結(jié)果K;乘法器(109)用來計算w*w位的乘法,輸出為C、S結(jié)果;乘法器(109)用來對鎖存器(104和105)的輸入進(jìn)行乘法運算,當(dāng)計算中間結(jié)果K時,乘法器結(jié)果輸出給加法器(108),除此之外乘法器結(jié)果輸出給第一和第二加法器(106和107),其中乘法結(jié)果的C輸出到第一加法器(106),S輸出到第二加法器(107)。
全文摘要
本發(fā)明包含一種改進(jìn)的蒙哥馬利方法及其運算電路,本發(fā)明模乘方法在現(xiàn)有FIOS基礎(chǔ)上作了改進(jìn),改變了對字的處理順序,從而對中間結(jié)果K進(jìn)行存儲,減少了訪問外部存儲的次數(shù);本發(fā)明模乘器,包含存儲單元、臨時結(jié)果存儲單元、乘法單元和加法單元,其中存儲單元為雙端口RAM(110)用來存儲數(shù)據(jù),包括輸入乘數(shù)X、被乘數(shù)Y、初始常數(shù)MC、模數(shù)M、中間結(jié)果K和最后結(jié)果Result;臨時存儲單元為鎖存器(101、102、103、104和105),用來鎖存臨時結(jié)果,其中第一w+1位鎖存器(101)和第二w位鎖存器(102)用來存儲加法單元輸出的進(jìn)位、高w位和低w位,第三w位鎖存器(103)用來存儲輸出到存儲單元的最終結(jié)果的部分字,第四和第五w位鎖存器(104和105)用來對從存儲單元的輸入進(jìn)行鎖存;加法單元第一和第二w位加法器(106、107)用來對第一w位鎖存器(101)和第二w位鎖存器(102)鎖存的臨時結(jié)果和乘法單元的輸出進(jìn)行加法運算;第三w位加法器(108)對乘法單元的輸出結(jié)果相加得到中間結(jié)果K;乘法單元w*w位乘法器(109)用來計算w*w位的乘法,輸出為C、S結(jié)果;各部件執(zhí)行本發(fā)明方法中的運算。本發(fā)明不僅降低了芯片面積,而且還減少了模乘運算的時鐘周期數(shù)。
文檔編號G06F7/72GK1967469SQ20061013665
公開日2007年5月23日 申請日期2006年11月9日 優(yōu)先權(quán)日2006年11月9日
發(fā)明者張學(xué)鵬, 胡進(jìn), 張家宏 申請人:北京華大信安科技有限公司