專利名稱:一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法
技術(shù)領(lǐng)域:
本發(fā)明涉及公鑰密碼體制的安全執(zhí)行領(lǐng)域,具體涉及一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法。
背景技術(shù):
隨著信息技術(shù)的發(fā)展與應(yīng)用,網(wǎng)上交易如網(wǎng)上銀行、電子政務(wù)和電子商務(wù)也變得越來越普遍,隨之帶來的安全問題也越來越嚴(yán)重,這就需要對(duì)在網(wǎng)絡(luò)上傳輸?shù)男畔⑦M(jìn)行加密。傳統(tǒng)的加密算法采用的是對(duì)稱密碼體制,通信雙方共享同一密鑰,它的優(yōu)點(diǎn)是加密易于用硬件實(shí)現(xiàn),加解密速度都很快,但是存在安全隱患,密鑰在交換的時(shí)候容易被人竊取。而現(xiàn)代公鑰密碼體制是非對(duì)稱密碼體制,僅要求密鑰的交換是保真的,而不要求其是保密的。每個(gè)實(shí)體選擇一個(gè)密鑰對(duì)(e,d),其中e是公鑰,而d是私鑰,私鑰是需要保密。由公鑰并不能計(jì)算出私鑰。目 前,公鑰密碼算法主要有兩種,一種是RSA,另外一種就是橢圓曲線密碼ECC(Elliptic Curve Cryptography)0上述兩種公鑰密碼算法都需要使用模冪計(jì)算(MEmod N)。在某些模冪計(jì)算中,比如涉及到私鑰的模冪運(yùn)算時(shí),冪指數(shù)E是需要保護(hù),不能被泄露的。為了提聞速度,現(xiàn)在模幕算法基本上都是用集成電路芯片實(shí)現(xiàn)。而芯片都是由晶體管門電路組成,電路在執(zhí)行不同的操作時(shí),所需要時(shí)間和能量不同,這個(gè)能夠通過示波器被觀察到,進(jìn)而可以通過這些泄露的信息來攻擊模冪運(yùn)算,從而獲得私鑰。目前比較常見的攻擊方法包括時(shí)間分析攻擊法、電磁輻射法、能量分析攻擊法和錯(cuò)誤注入攻擊法,其中能量分析攻擊和錯(cuò)誤注入攻擊是最為有效的攻擊方法。自從1996年Kocher等人提出簡(jiǎn)單能量分析(SPA)和差分能量分析(DPA)以來,人們就用這兩種方法成功地對(duì)一些模冪算法進(jìn)行攻擊。并且隨著能量分析技術(shù)的提高,一些現(xiàn)有的模冪算法已不能抵抗能量分析。在1997年,Boneh等人又提出一種新的攻擊方法:錯(cuò)誤注入攻擊。通過注入一個(gè)錯(cuò)誤,得到一個(gè)錯(cuò)誤結(jié)果,然后利用錯(cuò)誤結(jié)果和正確結(jié)果的內(nèi)在聯(lián)系從而分解模數(shù)N,進(jìn)而獲取私鑰。這個(gè)攻擊方法主要是針對(duì)于用中國(guó)剩余定理CRT方式來實(shí)現(xiàn)的模冪算法。隨著技術(shù)的發(fā)展,錯(cuò)誤注入攻擊范圍也越來越廣,從隨機(jī)注入錯(cuò)誤發(fā)展到對(duì)密鑰本身注入錯(cuò)誤以及對(duì)模數(shù)N注入錯(cuò)誤。通過注入錯(cuò)誤得到錯(cuò)誤數(shù)據(jù),然后再經(jīng)過一些運(yùn)算,從而最終獲取私鑰。而現(xiàn)有很多的模冪運(yùn)算往往只考慮抵抗能量分析,而忽略了抵抗錯(cuò)誤注入攻擊,或者相反,因此安全性不高。
發(fā)明內(nèi)容
基于上述問題,本發(fā)明提供了一種既能抵抗能量分析,又能抵抗錯(cuò)誤攻擊的安全模冪算法,并且具有較快的計(jì)算速度,因此特別適合在智能卡,USBKey等嵌入式設(shè)備上應(yīng)用。為了實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案是提供一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法,該方法包含以下步驟:步驟1、讀取底數(shù)M,指數(shù)E,模數(shù)N;
步驟 2、設(shè)中間變量 TmpM = M, TmpE =E, TmpR = I ;
步驟3、設(shè)置5塊64X32位大小的SRAM,分別命名為A,B, N, R, T SRAM ;向N SRAM寫入模數(shù)N并啟動(dòng)預(yù)計(jì)算,得到參數(shù)Nacc和R2 mod N的結(jié)果,接下來向A SRAM寫入中間變量TmpM和向B SRAM寫入中間變量TmpR,并啟動(dòng)將中間變量TmpM和TmpR轉(zhuǎn)化為Montgomery數(shù)的命令。步驟4、隨機(jī)選擇一個(gè)除數(shù)D,并更新中間變量TmpE = TmpE/D,以及計(jì)算中間變量Rem = TmpE mod D ;進(jìn)一步包含:
步驟4.1、設(shè)中間變量D = O ;
步驟4.2、產(chǎn)生一個(gè)32位的真隨機(jī)數(shù)并賦值給中間變量temp,如果temp小于OxDfffffff,則轉(zhuǎn)到步驟4.3,否則轉(zhuǎn)到4.6 ;
步驟4.3、設(shè)t = TmpE mod 2,計(jì)算t的值,判斷t的值是否等于O ;
若t = 0,表示TmpE能被2整除,則賦值D=2,Rem = O,并轉(zhuǎn)到步驟4.6 ;
若t古O,表示TmpE不能被2整除,則轉(zhuǎn)到步驟4.4 ;
步驟4.4、設(shè)t = TmpE mod 5,計(jì)算t的值,判斷t的值是否等于O ;
若t = O,表示TmpE能被5整除,則賦值D=5, Rem = O,并轉(zhuǎn)到步驟4.6 ;
若t古O,表示TmpE不能被5整除,則轉(zhuǎn)到步驟4.5 ;
步驟4.5、設(shè)t = TmpE mod 3,計(jì)算t的值,判斷t的值是否等于O ;
若t = O,表示TmpE能被3整除,則賦值D=3, Rem = O,并轉(zhuǎn)到步驟4.6 ;
若t古O,表示TmpE不能被3整除,則轉(zhuǎn)到步驟4.6。步驟4.6、判斷中間變量D的值,如果D的值等于0,則轉(zhuǎn)到步驟4.7,否則轉(zhuǎn)到步驟4.9 ;
步驟4.7、產(chǎn)生一個(gè)32位的真隨機(jī)數(shù)并賦值給中間變量temp,
如果temp小于OxBfffffff,則賦值D=2 ;
如果temp小于OxDfffffff,則賦值D=3 ;
如果temp大于等于OxDffTfTfT,則賦值D=5 ;
轉(zhuǎn)到步驟4.8。步驟4.8、計(jì)算中間變量Rem = TmpE mod D,轉(zhuǎn)到步驟4.9;
步驟 4.9、更新 TmpE = TmpE/D ο步驟5、判斷中間變量TmpE的值,若TmpE =0,則跳轉(zhuǎn)到步驟7,若TmpE 0,則跳轉(zhuǎn)到步驟6 ;
步驟6、根據(jù)除數(shù)余數(shù)對(duì)(D, Rem)更新相應(yīng)的中間變量:TmpR = TmpM" (Rem) * TmpRmod N, TmpM = TmpM' (D) mod N,并轉(zhuǎn)到步驟 4 ;
步驟7、根據(jù)余數(shù)Rem計(jì)算中間變量TmpRl = TmpM' (Rem) * TmpR mod N ;
步驟8、重新裝載模數(shù)N到N SRAM中,并根據(jù)余數(shù)Rem更新中間變量TmpR = TmpM" (Rem)* TmpR mod N ; 步驟9、比較中間變量TmpRl和TmpR,如果相等則轉(zhuǎn)到步驟10,如果不相等則轉(zhuǎn)到步驟
11 ;
步驟10、啟動(dòng)將TmpR轉(zhuǎn)化為普通數(shù)的命令,并輸出結(jié)果;步驟11、結(jié)束本次運(yùn)算。和現(xiàn)有技術(shù)相比,本發(fā)明一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法,其優(yōu)點(diǎn)在于:第一,本發(fā)明在計(jì)算結(jié)束前重新裝載模數(shù)N,并重新計(jì)算了最后一步,并將重新計(jì)算的結(jié)果與之前計(jì)算的結(jié)果進(jìn)行比較,這樣就可以抵御錯(cuò)誤注入攻擊;第二,采用隨機(jī)算法選擇除數(shù)D,使得可以更強(qiáng)抵抗SPA和DPA;第三,本發(fā)明的模乘模平方及其它模操作使用硬件的Montgomery算法實(shí)現(xiàn),以及隨機(jī)數(shù),除法以及數(shù)據(jù)搬運(yùn)也是用硬件實(shí)現(xiàn),提高了算法性能;四、本發(fā)明的步驟4和步驟6可以同時(shí)運(yùn)行,以提高算法性能。
圖1為本發(fā)明一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法的總流程 圖2為本發(fā)明一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法中隨機(jī)選擇D以及計(jì)算商和余數(shù)的流程圖。
具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明的實(shí)施例作進(jìn)一步詳細(xì)描述,但本實(shí)施例并不用于限制本發(fā)明,凡是采用本發(fā)明的相似結(jié)構(gòu)、方法及其相似變化,均應(yīng)列入本發(fā)明的保護(hù)范圍。如圖1所示,本發(fā)明公開了一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法,該方法包含以下步驟:
步驟1、讀取底數(shù)M,指數(shù)E,模數(shù)N;
步驟 2、設(shè)中間變量 TmpM = M, TmpE =E, TmpR = I ;
步驟3、設(shè)置了相 應(yīng)的硬件來實(shí)現(xiàn)本步驟3,所述硬件中包含有5塊64X32位大小的SRAM,分別命名為 A, B, N, R, T SRAM ;
向N SRAM寫入模數(shù)N并啟動(dòng)預(yù)計(jì)算(其目的是計(jì)算參數(shù)Nacc和R2 mod N),接下來向A SRAM寫入中間變量TmpM和向B SRAM寫入中間變量TmpR并啟動(dòng)轉(zhuǎn)化為Montgomery數(shù)的命令(其目的是將TmpM和TmpR轉(zhuǎn)化為Montgomery數(shù))。步驟4、隨機(jī)選擇一個(gè)除數(shù)D,并更新中間變量TmpE = TmpE/D,以及計(jì)算中間變量Rem = TmpE mod D ;其進(jìn)一步包含如圖2所示的以下步驟:
步驟4.1、設(shè)中間變量D = O ;
步驟4.2、產(chǎn)生一個(gè)32位的真隨機(jī)數(shù)并賦值給中間變量temp,如果temp小于OxDfffffff,則轉(zhuǎn)到步驟4.3,否則轉(zhuǎn)到4.6 ;
步驟4.3、設(shè)t = TmpE mod 2,計(jì)算t的值,判斷t的值是否等于O ;
若t = 0,表示TmpE能被2整除,則賦值D=2,Rem = O,并轉(zhuǎn)到步驟4.6 ;
若t古O,表示TmpE不能被2整除,則轉(zhuǎn)到步驟4.4 ;
步驟4.4、設(shè)t = TmpE mod 5,計(jì)算t的值,判斷t的值是否等于O ;
若t = O,表示TmpE能被5整除,則賦值D=5, Rem = O,并轉(zhuǎn)到步驟4.6 ;
若t古O,表示TmpE不能被5整除,則轉(zhuǎn)到步驟4.5 ;
步驟4.5、設(shè)t = TmpE mod 3,計(jì)算t的值,判斷t的值是否等于O ;
若t = O,表示TmpE能被3整除,則賦值D=3, Rem = O,并轉(zhuǎn)到步驟4.6 ;
若t古O,表示TmpE不能被3整除,則轉(zhuǎn)到步驟4.6。
步驟4.6、判斷中間變量D的值,如果D的值等于O,則轉(zhuǎn)到步驟4.7,否則轉(zhuǎn)到步驟4.9 ;
步驟4.7、產(chǎn)生一個(gè)32位的真隨機(jī)數(shù)并賦值給中間變量temp,
如果temp小于OxBfffffff,則賦值D=2 ;
如果temp小于OxDfffffff,則賦值D=3 ;
如果temp大于等于OxDffTfTfT,則賦值D=5 ;
轉(zhuǎn)到步驟4.8。步驟4.8、計(jì)算中間變量Rem = TmpE mod D,轉(zhuǎn)到步驟4.9;
步驟 4.9、更新 TmpE = TmpE/D ο步驟5、判斷TmpE的值,若TmpE =0,則跳轉(zhuǎn)到步驟7,若TmpE O,則跳轉(zhuǎn)到步驟6 ;
步驟6、根據(jù)除數(shù)余數(shù)對(duì)(D, Rem)更新以下的中間變量:TmpR = TmpM" (Rem) * TmpRmod N, TmpM = TmpM' (D) mod N,并轉(zhuǎn)到步驟 4。所述步驟6中,除數(shù)余數(shù)對(duì)(D,Rem)及其對(duì)應(yīng)的計(jì)算見下表;
權(quán)利要求
1.一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法,其特征在于,該方法包含以下步驟: 步驟1、讀取底數(shù)M,指數(shù)E,模數(shù)N; 步驟 2、設(shè)中間變量 TmpM = M, TmpE =E, TmpR = I ; 步驟3、設(shè)置5塊64X32位大小的SRAM,分別命名為A,B, N, R, T SRAM ;向N SRAM寫入模數(shù)N并啟動(dòng)預(yù)計(jì)算,得到參數(shù)Nacc和R2 mod N的結(jié)果,接下來向A SRAM寫入中間變量TmpM和向B SRAM寫入中間變量TmpR,并啟動(dòng)將中間變量TmpM和TmpR轉(zhuǎn)化為Montgomery數(shù)的命令; 步驟4、隨機(jī)選擇一個(gè)除數(shù)D,并更新中間變量TmpE = TmpE/D,以及計(jì)算中間變量Rem=TmpE mod D ; 步驟5、判斷中間變量TmpE的值,若TmpE =0,則跳轉(zhuǎn)到步驟7,若TmpE Φ 0,則跳轉(zhuǎn)到步驟6 ; 步驟6、根據(jù)除數(shù)余數(shù)對(duì)(D, Rem)更新相應(yīng)的中間變量:TmpR = TmpM" (Rem) * TmpRmod N, TmpM = TmpM' (D) mod N,并轉(zhuǎn)到步驟 4 ; 步驟7、根據(jù)余數(shù) Rem計(jì)算中間變量TmpRl = TmpM' (Rem) * TmpR mod N ; 步驟8、重新裝載模數(shù)N到N SRAM中,并根據(jù)余數(shù)Rem更新中間變量TmpR = TmpM" (Rem)* TmpR mod N ; 步驟9、比較中間變量TmpRl和TmpR,如果相等則轉(zhuǎn)到步驟10,如果不相等則轉(zhuǎn)到步驟11 ; 步驟10、啟動(dòng)將TmpR轉(zhuǎn)化為普通數(shù)的命令,并輸出結(jié)果; 步驟11、結(jié)束本次運(yùn)算。
2.如權(quán)利要求1所述的一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法,其特征在于,所述的步驟3中涉及到5塊SRAM的運(yùn)算都是用硬件實(shí)現(xiàn)。
3.如權(quán)利要求1所述的一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法,其特征在于,所述的步驟4中進(jìn)一步包含以下步驟: 步驟4.1、設(shè)中間變量D = O ; 步驟4.2、產(chǎn)生一個(gè)32位的真隨機(jī)數(shù)并賦值給中間變量temp,如果temp小于OxDfffffff,則轉(zhuǎn)到步驟4.3,否則轉(zhuǎn)到4.6 ; 步驟4.3、設(shè)t = TmpE mod 2,計(jì)算t的值,判斷t的值是否等于O ; 若t = 0,表示TmpE能被2整除,則賦值D=2,Rem = O,并轉(zhuǎn)到步驟4.6 ; 若t古O,表示TmpE不能被2整除,則轉(zhuǎn)到步驟4.4 ; 步驟4.4、設(shè)t = TmpE mod 5,計(jì)算t的值,判斷t的值是否等于O ; 若t = O,表示TmpE能被5整除,則賦值D=5, Rem = O,并轉(zhuǎn)到步驟4.6 ; 若t古O,表示TmpE不能被5整除,則轉(zhuǎn)到步驟4.5 ;步驟4.5、設(shè)t = TmpE mod 3,計(jì)算t的值,判斷t的值是否等于O ; 若t = O,表示TmpE能被3整除,則賦值D=3, Rem = O,并轉(zhuǎn)到步驟4.6 ; 若t古O,表示TmpE不能被3整除,則轉(zhuǎn)到步驟4.6 ; 步驟4.6、判斷中間變量D的值,如果D的值等于0,則轉(zhuǎn)到步驟4.7,否則轉(zhuǎn)到步驟·4.9 ;步驟4.7、產(chǎn)生一個(gè)32位的真隨機(jī)數(shù)并賦值給中間變量temp, 如果temp小于OxBfffffff,則賦值D=2 ; 如果temp小于OxDfffffff,則賦值D=3 ; 如果temp大于等于OxDffTfTfT,則賦值D=5 ; 轉(zhuǎn)到步驟4.8 ; 步驟4.8、計(jì)算中間變量Rem = TmpE mod D,轉(zhuǎn)到步驟4.9 ;步驟 4.9、更新 TmpE = TmpE/D ο
4.如權(quán)利要求3所述的一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法,其特征在于,所述的步驟4中涉及到的真隨機(jī)數(shù)是用硬件實(shí)現(xiàn)。
5.如權(quán)利要求3所述的一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法,其特征在于,所述的步驟4中涉及到的模運(yùn)算和除法運(yùn)算是用硬件實(shí)現(xiàn)。
6.如權(quán)利要求3所述的一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法,其特征在于, 所述步驟6中,除數(shù)余數(shù)對(duì)(D, Rem)及其對(duì)應(yīng)的計(jì)算見下表;
7.如權(quán)利要求6所述的方法,其特征在于,所述步驟6中,除數(shù)余數(shù)對(duì)(D,Rem)的模乘,模平方,數(shù)據(jù)搬運(yùn)操作計(jì)算都是 用硬件實(shí)現(xiàn)。
全文摘要
本發(fā)明公開了一種抵抗能量分析和錯(cuò)誤攻擊的安全模冪計(jì)算方法,其步驟包含讀取底數(shù)M,指數(shù)E,模數(shù)N;設(shè)中間變量TmpM=M,TmpE=E,TmpR=1;向NSRAM寫入模數(shù)N并啟動(dòng)預(yù)計(jì)算,利用ASRAM和BSRAM將TmpM和TmpR轉(zhuǎn)化為Montgomery數(shù);隨機(jī)選擇一個(gè)除數(shù)D,并更新TmpE=TmpE/D,以及計(jì)算中間變量Rem=TmpEmodD;若TmpE≠0,則根據(jù)除數(shù)余數(shù)對(duì)(D,Rem)更新TmpR=TmpM^(Rem)*TmpRmodN,TmpM=TmpM^(D)modN,并轉(zhuǎn)到上述選擇除數(shù)的步驟;若TmpE=0,則根據(jù)余數(shù)Rem計(jì)算中間變量TmpR1=TmpM^(Rem)*TmpRmodN;重新裝載模數(shù)N到NSRAM中,并根據(jù)余數(shù)Rem更新TmpR=TmpM^(Rem)*TmpRmodN;比較TmpR1和TmpR,如果相等則啟動(dòng)將TmpR轉(zhuǎn)化為普通數(shù)命令并輸出結(jié)果;如果不相等則結(jié)束本次運(yùn)算。本發(fā)明提供的計(jì)算方法不僅能抵抗能量攻擊,也能抵抗錯(cuò)誤攻擊。
文檔編號(hào)G06F7/72GK103246494SQ20131019949
公開日2013年8月14日 申請(qǐng)日期2013年5月27日 優(yōu)先權(quán)日2013年5月27日
發(fā)明者劉紅明, 周玉潔 申請(qǐng)人:上海愛信諾航芯電子科技有限公司