專利名稱:一種rsa算法數(shù)字簽名方法
技術(shù)領(lǐng)域:
本發(fā)明主要應(yīng)用于智能卡安全計(jì)算領(lǐng)域。
背景技術(shù):
RSA私鑰運(yùn)算主要涉及到兩個(gè)關(guān)鍵技術(shù)1.使用蒙哥馬利模乘算法記蒙哥馬利模乘為MonMul (a, b,m),則MonMul (a, b, m) = a*b*R_1mod m,其中 a, b, m 的位長為 L, R = 2L, IT1 滿足 mo dm = 1, mod為取娛運(yùn)算。2.使用中國剰余定理進(jìn)行加速記RSA私鑰運(yùn)算的輸入數(shù)據(jù)為C,RSA的私鑰參數(shù)為p,q,d和n,其中ρ和q的位長為L/2,d和η的位長為L,則RSA私鑰運(yùn)算Cd mod n,通過中國剰余定義可以轉(zhuǎn)化為關(guān)于 P和q的模冪運(yùn)算,提高運(yùn)行速度。以下是使用中國剰余定理進(jìn)行RSA私鑰運(yùn)算的簡要說明,本發(fā)明主要是對(duì)其中的參數(shù)Cp和Cq計(jì)算方法的改進(jìn)。準(zhǔn)備計(jì)算參數(shù) dp = d mod(p-l), dq = d mod(q-l)禾ロ qlnv,qlnv 滿足 qlnv*q modp = 1。當(dāng)RSA體系中的密鑰固定吋,這些參數(shù)可以作為常數(shù)預(yù)先計(jì)算出來,不必在毎次進(jìn)行RSA私鑰運(yùn)算時(shí)進(jìn)行計(jì)算,因此計(jì)算上述參數(shù)不占用RSA私鑰運(yùn)算的時(shí)間,只是為了敘述方便,在這里簡單介紹上述參數(shù)的來由。1.計(jì)算Cp和Cq,Cp = C mod p,Cq = C mod q,其中C為RSA私鑰運(yùn)算的輸入數(shù)據(jù)。2.計(jì)算 Mp 和 Mq,其中 Mp = Cpdp mod ρ, Mq = Cpdq mod q3.計(jì)算 Mpq, Mpq= (Mp-Mq)氺qlnv mod ρ4.計(jì)算 Res = Mpq*q+Mq。在步驟1中的取模運(yùn)算中,由于軟件取模函數(shù)計(jì)算效率低下,所以一般情況下使用硬件蒙哥馬利模乘計(jì)算器計(jì)算。但是在實(shí)際應(yīng)用中,上述中國剰余定理的計(jì)算過程中,步驟2和3中使用L/2位長的蒙哥馬利模乘器可以滿足需求,而在步驟1和4中,需使用L位長的硬件蒙哥馬利模乘器。
發(fā)明內(nèi)容
本發(fā)明在步驟1和步驟4中使用L/2位長的蒙哥馬利模乘器進(jìn)行計(jì)算,因此可以在只需RSA私鑰運(yùn)算的芯片中采用小位長的模乘器,實(shí)現(xiàn)大于模乘器位長的公鑰運(yùn)算,以這種方式運(yùn)算,對(duì)硬件的要求就減少一半位數(shù),不考慮其他資源,小位長硬件協(xié)處理器可支持大于模乘器位長的私鑰運(yùn)算,同時(shí),增添的軟件開銷也可以在應(yīng)用接受的范圍內(nèi)。從而降低芯片成本,或者使用現(xiàn)有的有限資源應(yīng)對(duì)市場(chǎng)變化,有助于產(chǎn)品快速上市。步驟1中計(jì)算C mod P時(shí)使用以下方法1.將C分為等長度的兩個(gè)部分,記CH為高L/2部分,CL為低L/2部分,這樣,L長度的C被拆分為兩個(gè)L/2長度的數(shù)據(jù),并且C = CH << L/2+CL,其中“ << ”為向左平移操作。2.進(jìn)ー步分析CH<< L/2,L/2長度的CH向左平移L/2后,還是L長度,超出了蒙哥馬利模乘器計(jì)算長度,因此此處還需要將轉(zhuǎn)換,其實(shí),CH << L/2 = CH*2レ2。我們可以看到這里的2リ2是L/2位長的蒙哥馬利模乘算法中的常數(shù)R。3.那么C mod P可表示為(CH*R+CL)mod P,將括號(hào)展開后,可得到CH*R mod P+CL mod P。其中CL和P的長度一祥,其取模操作可以用減法實(shí)現(xiàn),記為CLP。4.由于 MonMul (a,b,m) = a*b*R_1mod m,那么只需計(jì)算 MonMul (CH, R2,ρ),就可以得到 CH*R mod P,也即 CH << L/2mod P,記為 CHP。5.最后計(jì)算CHP+CLP即所需的C mod P,用同樣的方法,計(jì)算C mod Q。步驟4中使用蒙哥馬利算法計(jì)算乘法,由于最終結(jié)果是L長度,因此需要將Mpq和 q的高位補(bǔ)“O”填充至L長,然后使用L位長的蒙哥馬利模乘器計(jì)算乘法,此時(shí),MonMul (a, b,m)中!11 = 2^1,長度為し改進(jìn)的方法如下1.將Mpq和Q作為的輸入數(shù)據(jù),將L/2位長的a和b拆分為等長度的兩部分, 其中aH表示a的高L/4部分,aL表示a的低L/4部分,bH表示b的高L/4部分,bL表示b 的低L/4部分。2.將aL用“O”填充至L/2長,記為aLO,將bL用“O”填充至L/2長,記為bLO,其實(shí)aL = aLO, bL = bLO。記L/2長的OxFF為m,用蒙哥馬利模乘器計(jì)算MonMul (aLO, bLO, m) = aL0*bL0*R_1 mod m,由于 m 為 2L_1,那么 IT1 = 1,實(shí)際上,ali^bliM^mod m = aL*bL。3.用同樣的步驟計(jì)算 aH*bL,bH*aL, bH*aH,最后計(jì)算 aLbL+aHbL < < (L/4) +bHaL くく (L/2) +bHaH くく (3L/4),即可得到 a*b。
圖1是計(jì)算C mod P的改進(jìn)方法示意圖。圖2是使用小位長蒙哥馬利模乘器計(jì)算L位長的乘法的示意圖。
具體實(shí)施例方式使用本發(fā)明可以使L/2位長的模乘器計(jì)算L位長的RSA私鑰運(yùn)算,以便降低芯片成本,或者利用有限資源滿足市場(chǎng)的變化,有助于產(chǎn)品的快速開發(fā)和上市。當(dāng)需要使用小位長的模乘器來實(shí)現(xiàn)大位長的RSA私鑰運(yùn)算時(shí)可以采用本算法。具體步驟如下計(jì)算C mod P時(shí)使用以下方法1.將C分為等長度的兩個(gè)部分,記CH為高L/2部分,CL為低L/2部分,這樣,L長度的C被拆分為兩個(gè)L/2長度的數(shù)據(jù),并且C = CH << L/2+CL,其中“ << ”為向左平移操作。2.進(jìn)ー步分析CH<< L/2,L/2長度的CH向左平移L/2后,還是L長度,超出了蒙哥馬利模乘器計(jì)算長度,因此此處還需要將轉(zhuǎn)換,其實(shí),CH << L/2 = CH*2L/2。我們可以看到這里的2L/2是L/2位長的蒙哥馬利模乘算法中的常數(shù)R。3.那么C mod P可表示為(CH*R+CL)mod P,將括號(hào)展開后,可得到CH*R mod P+CL mod P。其中CL和P的長度一祥,其取模操作可以用減法實(shí)現(xiàn),記為CLP。
4.由于 MonMul (a, b, m) = a*b*R_lmod m,那么只需計(jì)算 MonMul (CH, R2,ρ),就可以得至Ij CH*R mod P,也即 CH << L/2mod P,記為 CHP。5.最后計(jì)算CHP+CLP即所需的C mod P,用同樣的方法,計(jì)算C mod Q。步驟4中使用蒙哥馬利算法計(jì)算乘法,由于最終結(jié)果是L長度,因此需要將Mpq和 q的高位補(bǔ)“O”填充至L長,然后使用L位長的蒙哥馬利模乘器計(jì)算乘法,此時(shí),MonMul (a, b,m)中!11 = 2^1,長度為し改進(jìn)的方法如下1.將Mpq和Q作為^b的輸入數(shù)據(jù),將L/2位長的a和b拆分為等長度的兩部分, 其中aH表示a的高L/4部分,aL表示a的低L/4部分,bH表示b的高L/4部分,bL表示b 的低L/4部分。2.將aL用“O”填充至L/2長,記為aLO,將bL用“O”填充至L/2長,記為bLO,其實(shí)aL = aL0,bL = bLO。記L/2長的OxFF為m,用蒙哥馬利模乘器計(jì)算MonMul (aLO, bLO,m) =aL0*bL0*R-lmod m,由于 m 為 2L-1,那么 R-I = 1,實(shí)際上,aL0*bL0*R_lmod m = aL*bL。3.用同樣的步驟計(jì)算 aH*bL,bH*aL, bH*aH,最后計(jì)算 aLbL+aHbL < < (L/4) +bHaL くく (L/2) +bHaH くく (3L/4),即可得到 a*b。
權(quán)利要求
1. ー種RSA算法數(shù)字簽名方法,其特征在于步驟如下(1)計(jì)算Cp和Cq,其中Cp= C mod P,Cq = C mod Q,C為RSA私鑰運(yùn)算的輸入數(shù)據(jù); P,Q,d和η為RSA的私鑰參數(shù),P和Q的位長為L/2,d和η的位長為L,mod為取模運(yùn)算;(2)將C分為等長度的兩個(gè)部分,記CH為高L/2部分,CL為低L/2部分,并且C= CH くく L/2+CL,其中“ << ”為向左平移操作;CH << L/2 = CH*2L/2,記 R = 2L/2 ;(3)C mod P = (CH*R+CL)mod P,將括號(hào)展開后,得到 CH*R mod P+CL modP,其中 CL 和 P的長度一祥,取模操作用減法實(shí)現(xiàn),記為CLP ;(4)計(jì)算MonMul (CH, R2,P),得到 CH*R mod P,即 CH < < L/2mod P,記為 CHP ;(5)最后計(jì)算CHP+CLP得到Cmod P,用同樣的方法,計(jì)算C mod Q;(6)計(jì)算Mp 禾ロ Mq,其中 Mp = Cpdp mod P, Mq = Cpdq mod Q ;(7)計(jì)算Mpq, Mpq= (Mp-Mq) *qlnv mod Q ;(8)計(jì)算Res= Mpq*Q+Mq ;將Mpq和Q的高位補(bǔ)“O”填充至L長,使用L位長的蒙哥馬利模乘器計(jì)算乘法,將Mpq和Q作為的輸入數(shù)據(jù),將L/2位長的a和b拆分為等長度的兩部分,其中aH表示a的高L/4部分,aL表示a的低L/4部分,bH表示b的高L/4部分, bL表示b的低L/4部分;(9)將aL用“O”填充至L/2長,記為aLO,將bL用“O”填充至L/2長,記為bLO,記L/2 長的 OxFF 為 m,用蒙哥馬利模乘器計(jì)算 MonMul (aLO, bLO, m) = aL0*bL0*R_l mod m ;(10)用同樣的步驟計(jì)算aH*bL,bH*aL,bWaH,最后計(jì)算 aLbL+aHbL < < (L/4) +bHaL くく (L/2) +bHaH << (3L/4),即可得到 a*b。
全文摘要
本發(fā)明設(shè)計(jì)一種RSA算法數(shù)字簽名方法,基于1024位的硬件協(xié)處理器實(shí)現(xiàn)1408位的RSA私鑰運(yùn)算技術(shù),主要應(yīng)用于智能卡安全計(jì)算領(lǐng)域,是利用小位長的模乘器計(jì)算大位長的RSA私鑰運(yùn)算中的參數(shù),例如利用1024位的模乘器計(jì)算1408位或者2048位RSA私鑰運(yùn)算中的參數(shù)。RSA的私鑰運(yùn)算利用中國剩余定理,可以將其主要運(yùn)算——模冪運(yùn)算的運(yùn)算長度降低,但是其中關(guān)鍵參數(shù)的運(yùn)算,例如C mod P、C mod Q和乘法運(yùn)算。其中C表示明文,長度是P和Q的兩倍。而乘法運(yùn)算是利用模乘器進(jìn)行了加速,其最終結(jié)果也超出了模乘器的運(yùn)算能力。技術(shù)中主要是利用模運(yùn)算算法變形,將C拆分成兩個(gè)小位長的數(shù),計(jì)算C mod P;通過四次乘法運(yùn)算計(jì)算大于模乘器長度的乘法運(yùn)算。
文檔編號(hào)H04L9/08GK102571342SQ20101062231
公開日2012年7月11日 申請(qǐng)日期2010年12月27日 優(yōu)先權(quán)日2010年12月27日
發(fā)明者汪濤, 范楠迪, 馬寧 申請(qǐng)人:北京中電華大電子設(shè)計(jì)有限責(zé)任公司