本發(fā)明涉及一種檢測(cè)RIPEMD-160雜湊密碼算法抵御差分故障攻擊的方法,用于評(píng)測(cè)出該算法抵御差分故障攻擊的能力,主要應(yīng)用在檢驗(yàn)封裝有該算法的產(chǎn)品的安全性。
背景技術(shù):
隨著大數(shù)據(jù)時(shí)代的到來(lái),各種各樣的信息存儲(chǔ)在網(wǎng)絡(luò)服務(wù)器中,如何防止攻擊者的主動(dòng)攻擊,并保證這些信息的完整性,成為保證數(shù)據(jù)安全的核心問(wèn)題。RIPEMD-160算法是由歐洲研究學(xué)者提出的一種雜湊密碼,具有抗第一原像性、抗第二原像性和無(wú)碰撞性,是信息完整性保護(hù)的基礎(chǔ)部件。
差分故障攻擊是一種將故障攻擊與差分分析相結(jié)合密碼攻擊技術(shù)。它針對(duì)密碼算法的結(jié)構(gòu)和輪函數(shù)的特性,通過(guò)在算法執(zhí)行時(shí)導(dǎo)入故障,分析其對(duì)輸出的影響,最終獲得關(guān)鍵信息。在對(duì)RIPEMD-160算法抵御差分故障攻擊的能力評(píng)測(cè)方面,目前還沒有公開的分析方法,這就給封裝有RIPEMD-160雜湊算法的密碼設(shè)備的安全性帶來(lái)了隱患。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種評(píng)估RIPEMD-160算法抵御查分故障攻擊能力的方法。
為了達(dá)到上述目的,本發(fā)明的技術(shù)方案是提供了一種檢測(cè)RIPEMD-160算法抵御差分故障攻擊的方法,其特征在于,包括以下步驟:
步驟1:隨機(jī)生成要處理的明文消息X;
步驟2:利用RIPEMD-160算法處理明文消息X,RIPEMD-160算法對(duì)消息按512比特長(zhǎng)的分組為單位進(jìn)行處理,總共由5輪運(yùn)算組成,每一輪都對(duì)緩存區(qū)進(jìn)行16步迭代運(yùn)算,輸出為160比特的雜湊值,將得到的正確輸出Y和錯(cuò)誤輸出Y*保存于160比特的緩存區(qū)中,其中,緩存區(qū)用5個(gè)32比特長(zhǎng)的寄存器A,B,C,D,E表示;
步驟3:計(jì)算正確輸出Y和錯(cuò)誤輸出Y*的差分值ΔY,令ΔY=(ΔY0,ΔY1,ΔY2,ΔY3,ΔY4),保存于5個(gè)32比特長(zhǎng)的寄存器A,B,C,D,E表示的緩存區(qū)中,ΔY0,ΔY1,ΔY2,ΔY3,和ΔY4均為32比特,分別代表緩存區(qū)中最后一輪輸出結(jié)果的差分:
步驟4:分析差分值ΔY,判斷RIPEMD-160算法是否受到差分故障攻擊的影響,并推導(dǎo)出故障導(dǎo)入的位置,分析其有效性,令A(yù)i,Bi,Ci,Di,Ei分別為第i步迭代運(yùn)算緩存區(qū)的寄存器A,B,C,D,E中的值,i∈[1,80],則具體方法為:
(1)有效故障:
I)當(dāng)ΔY0、ΔY1、ΔY2、ΔY3≠0時(shí),故障導(dǎo)入的位置為C77;
II)當(dāng)ΔY1、ΔY2、ΔY3、ΔY4≠0時(shí),故障導(dǎo)入的位置為B77;
III)當(dāng)ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中均不為0時(shí),故障導(dǎo)入的位置為B76以及B76之前的任何位置;
(2)無(wú)效故障:
I)當(dāng)ΔY=0時(shí),說(shuō)明導(dǎo)入的故障值等于當(dāng)前位置上的原值,相當(dāng)于沒有導(dǎo)入故障,故障無(wú)效;
II)當(dāng)ΔY≠0時(shí):
(i)當(dāng)ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中有且僅有一個(gè)不為0時(shí):
a)當(dāng)ΔY0≠0時(shí),故障導(dǎo)入的位置為A80;
b)當(dāng)ΔY1≠0時(shí),故障導(dǎo)入的位置為B80或E80;
c)當(dāng)ΔY2≠0時(shí),故障導(dǎo)入的位置為C80;
d)當(dāng)ΔY3≠0時(shí),故障導(dǎo)入的位置為D80;
e)當(dāng)ΔY4≠0時(shí),故障導(dǎo)入的位置為E80。
(ii)當(dāng)ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中只有兩個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY1≠0且ΔY0≠0時(shí),故障導(dǎo)入的位置為E79;
b)當(dāng)ΔY1≠0且ΔY2≠0時(shí),故障導(dǎo)入的位置為B79;
c)當(dāng)ΔY1≠0且ΔY3≠0時(shí),故障導(dǎo)入的位置為C79;
d)當(dāng)ΔY1≠0且ΔY4≠0時(shí),故障導(dǎo)入的位置為D79;
(iii)當(dāng)ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中只有三個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0、ΔY1、ΔY2≠0時(shí),故障導(dǎo)入的位置為D78;
b)當(dāng)ΔY1、ΔY2、ΔY3≠0時(shí),故障導(dǎo)入的位置為B78;
c)當(dāng)ΔY1、ΔY2、ΔY4≠0時(shí),故障導(dǎo)入的位置為C78。
優(yōu)選地,在所述步驟2中,在用RIPEMD-160算法對(duì)明文消息X處理的過(guò)程中,使用兩種實(shí)驗(yàn)環(huán)境控制從而得到正確輸出Y和錯(cuò)誤輸出Y*,具體步驟如下:
步驟2.1:輸入明文消息X,保證實(shí)驗(yàn)環(huán)境不受其他任何不相關(guān)事物的干擾,讓RIPEMD-160算法能夠正確無(wú)誤地進(jìn)行,從而得到正確輸出Y;
步驟2.2:重新輸入明文消息X,再次用RIPEMD-160算法對(duì)其加密處理,同時(shí)借助其他物理設(shè)備改變運(yùn)行環(huán)境,誘導(dǎo)產(chǎn)生故障來(lái)干擾RIPEMD-160算法的處理過(guò)程,從而得到錯(cuò)誤輸出Y*。
優(yōu)選地,在所述步驟2.2中,改變運(yùn)行環(huán)境誘導(dǎo)產(chǎn)生故障的方法包括:改變時(shí)鐘、電壓、濕度、輻射、壓力、光和渦電流,將故障隨機(jī)地導(dǎo)入RIPEMD-160算法處理過(guò)程,以得到錯(cuò)誤輸出Y*。
本發(fā)明提供的方法簡(jiǎn)單準(zhǔn)確,易于實(shí)現(xiàn),不僅可以評(píng)估RIPEMD-160算法對(duì)差分故障攻擊的抵抗能力,還能推導(dǎo)出差分故障攻擊導(dǎo)入的位置,給使用RIPEMD-160算法封裝的產(chǎn)品的安全性測(cè)評(píng)提供了理論依據(jù)。
附圖說(shuō)明
圖1為RIPEMD-160算法抵御差分故障攻擊的方法流程圖;
圖2為RIPEMD-160算法差分故障攻擊分析路徑圖;
圖3為檢驗(yàn)RIPEMD-160抵御差分故障攻擊能力實(shí)驗(yàn)環(huán)境示意圖。
具體實(shí)施方式
為使本發(fā)明更加清晰明了,現(xiàn)列出優(yōu)選實(shí)施例,詳細(xì)的配圖說(shuō)明如下所示。
使用RIPEMD-160算法對(duì)于同一個(gè)明文消息X使用同一個(gè)密鑰進(jìn)行處理時(shí),如果實(shí)驗(yàn)環(huán)境(如時(shí)鐘、電壓、濕度、輻射、壓力、光和渦電流等)不同,攻擊者可以分別獲得正確輸出Y和錯(cuò)誤輸出Y*,通過(guò)計(jì)算出這兩個(gè)值的輸出差分值,即表示異或運(yùn)算,就可推導(dǎo)出關(guān)鍵信息。攻擊者可以在處理設(shè)備運(yùn)行RIPEMD-160算法期間誘導(dǎo)故障發(fā)生,但是不知道故障發(fā)生的具體位置以及具體的錯(cuò)誤值。在某些特定條件下,能從差分ΔY中推導(dǎo)出故障導(dǎo)入的位置,此時(shí)導(dǎo)入的故障稱為有效故障。相反,當(dāng)導(dǎo)入故障為無(wú)效故障的時(shí)候,本次導(dǎo)入的故障并不能給分析密鑰提供幫助,即通過(guò)ΔY不能得到重要的信息。
圖1為本發(fā)明提供的檢測(cè)RIPEMD-160算法抵御差分故障攻擊的方法的流程圖,所述的檢測(cè)RIPEMD-160算法抵御差分故障攻擊的方法包括如下步驟:
步驟1:隨機(jī)生成要處理的明文消息X;
步驟2:處理明文消息X,得到正確輸出Y和錯(cuò)誤輸出Y*;
步驟3:計(jì)算正確輸出Y和錯(cuò)誤輸出Y*的差分值ΔY;
步驟4:分析差分值ΔY,推斷出導(dǎo)入位置,并判斷導(dǎo)入故障是否有效。
針對(duì)步驟2,用RIPEMD-160算法對(duì)明文消息X進(jìn)行處理,實(shí)驗(yàn)過(guò)程中,對(duì)運(yùn)行環(huán)境實(shí)施兩種不同的控制,即:
(1)輸入明文消息X,控制實(shí)驗(yàn)環(huán)境不受其他任何不相關(guān)事物的干擾,使得RIPEMD-160算法能夠正確無(wú)誤地進(jìn)行,從而得到正確輸出Y;
(2)重新輸入明文消息X,再次用RIPEMD-160算法對(duì)其進(jìn)行處理,同時(shí)借助其他物理設(shè)備改變運(yùn)行環(huán)境,誘導(dǎo)產(chǎn)生故障來(lái)干擾RIPEMD-160算法的處理過(guò)程,從而得到錯(cuò)誤輸出Y*。
其中,步驟(2)中誘導(dǎo)故障產(chǎn)生的方法包括:改變時(shí)鐘、電壓、濕度、輻射、壓力、光和渦電流等;
針對(duì)步驟3,計(jì)算差分其中代表異或運(yùn)算,ΔY為160比特,令ΔY=(ΔY0,ΔY1,ΔY2,ΔY3,ΔY4),保存于160比特的緩存區(qū)中,緩存區(qū)用5個(gè)32比特長(zhǎng)的寄存器(A,B,C,D,E)表示,令ΔY=(ΔY0,ΔY1,ΔY2,ΔY3,ΔY4),ΔY0,ΔY1,ΔY2,ΔY3,和ΔY4均為32比特,分別代表緩存區(qū)中最后一輪輸出結(jié)果的差分;
針對(duì)步驟4,對(duì)ΔY的差分分析及確定故障位置的原理如下:
RIPEMD-160算法對(duì)消息按512比特長(zhǎng)的分組為單位進(jìn)行處理,總共由5輪運(yùn)算組成,每一輪都對(duì)緩存區(qū)進(jìn)行16步迭代運(yùn)算,輸出為160比特的雜湊值,RIPEMD-160的中間結(jié)果和最終結(jié)果保存于160比特的緩存區(qū)中,緩存區(qū)用5個(gè)32比特長(zhǎng)的寄存器(A,B,C,D,E)表示,如圖2所示,第i+1步的迭代公式如下:
Ai+1=Ei,
Ci+1=Bi,
Di+1=Rq(Ci),
Ei+1=Di。
其中,代表異或運(yùn)算,i是迭代的步數(shù),i∈[0,79],Ai、Bi、Ci、Di、Ei是第i步迭代運(yùn)算緩存區(qū)的寄存器(A,B,C,D,E)中的值,fi(B,C,D)是第i步迭代運(yùn)算的基本邏輯函數(shù),S是32比特的變量循環(huán)左移p位,R是32比特的變量循環(huán)左移q位,Wi是從當(dāng)前輸入的512比特的分組導(dǎo)出的32比特長(zhǎng)的字,Ki是加法常量。
RIPEMD-160算法的正確輸出Y為:
(A0,B0,C0,D0,E0)為緩存區(qū)中的初始值,將其代入上述等式即可得到最后的輸出結(jié)果(A80,B80,C80,D80,E80)。在此,我們考慮
將B79=C80,Rq(C79)=D80,D79=E80,E79=A80,代入B80得知在上述等式中,只有A79和W79是未知的,而攻擊者的目的是要恢復(fù)W79,如果A79的值是已知的,那么W79就可以由以下等式求解得到:
根據(jù)算法結(jié)構(gòu)可知A79=E78,即求得E78的值便可知道A79,這樣我們就可以推導(dǎo)出W79。
同理,我們也可以得到:
上式中要推導(dǎo)出W78,需要知道A78和E78,又因?yàn)锳78=E77,所以我們需要知道E78和E77的值,才能求得W78。
通過(guò)分析當(dāng)故障導(dǎo)入的位置在C77時(shí),可以求得E78和E77的值,進(jìn)而推導(dǎo)出W78和W79。由RIPEMD-160算法的結(jié)構(gòu)可以看出,同理當(dāng)故障導(dǎo)入在B77時(shí),與故障導(dǎo)入在C77時(shí)的作用是完全相同。因而B77或C77為有效的故障位置。
其中,對(duì)故障位置的有效性,具體分析如下:
(1)有效故障:
I)當(dāng)ΔY0、ΔY1、ΔY2、ΔY3≠0時(shí),故障導(dǎo)入的位置為C77;
II)當(dāng)ΔY1、ΔY2、ΔY3、ΔY4≠0時(shí),故障導(dǎo)入的位置為B77;
III)當(dāng)ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中均不為0時(shí),故障導(dǎo)入的位置為B76以及B76之前的任何位置;
(2)無(wú)效故障:
I)當(dāng)ΔY=0時(shí),說(shuō)明導(dǎo)入的故障值等于當(dāng)前位置上的原值,相當(dāng)于沒有導(dǎo)入故障,故障無(wú)效;
II)當(dāng)ΔY≠0時(shí):
(i)當(dāng)ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中有且僅有一個(gè)不為0時(shí),
a)當(dāng)ΔY0≠0時(shí),故障導(dǎo)入的位置為A80;
b)當(dāng)ΔY1≠0時(shí),故障導(dǎo)入的位置為B80或E80;
c)當(dāng)ΔY2≠0時(shí),故障導(dǎo)入的位置為C80;
d)當(dāng)ΔY3≠0時(shí),故障導(dǎo)入的位置為D80;
e)當(dāng)ΔY4≠0時(shí),故障導(dǎo)入的位置為E80;
(ii)當(dāng)ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中只有兩個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY1≠0且ΔY0≠0時(shí),故障導(dǎo)入的位置為E79;
b)當(dāng)ΔY1≠0且ΔY2≠0時(shí),故障導(dǎo)入的位置為B79;
c)當(dāng)ΔY1≠0且ΔY3≠0時(shí),故障導(dǎo)入的位置為C79;
d)當(dāng)ΔY1≠0且ΔY4≠0時(shí),故障導(dǎo)入的位置為D79;
(iii)當(dāng)ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中只有三個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0、ΔY1、ΔY2≠0時(shí),故障導(dǎo)入的位置為D78;
b)當(dāng)ΔY1、ΔY2、ΔY3≠0時(shí),故障導(dǎo)入的位置為B78;
c)當(dāng)ΔY1、ΔY2、ΔY4≠0時(shí),故障導(dǎo)入的位置為C78。
綜上分析,當(dāng)ΔY0、ΔY1、ΔY2、ΔY3≠0時(shí),導(dǎo)入的故障位置為C77,當(dāng)ΔY1、ΔY2、ΔY3、ΔY4≠0時(shí),導(dǎo)入的故障位置為B77,當(dāng)ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中均不為0時(shí),導(dǎo)入的故障位置為B76及B76之前的任何位置,這些位置均為有效的故障導(dǎo)入位置。
針對(duì)上述執(zhí)行步驟,選擇實(shí)驗(yàn)環(huán)境如圖3所示,其中用計(jì)算機(jī)來(lái)產(chǎn)生RIPEMD-160的輸入消息X以及分析輸出結(jié)果;封裝有RIPEMD-160算法的設(shè)備用來(lái)處理輸入的消息;產(chǎn)生故障的設(shè)備用來(lái)改變實(shí)驗(yàn)執(zhí)行環(huán)境,目的是干擾對(duì)輸入消息的處理過(guò)程,從而實(shí)現(xiàn)導(dǎo)入故障功能,產(chǎn)生錯(cuò)誤的輸出結(jié)果。
利用上述分析方法,本發(fā)明在Intel(R)Core(TM)i5-3210M CPU 2.50GHz 4GB內(nèi)存的計(jì)算機(jī)上,在Eclipse開發(fā)工具下采用Java語(yǔ)言編程來(lái)模擬故障導(dǎo)入和消息處理過(guò)程,重復(fù)執(zhí)行1000次,實(shí)驗(yàn)結(jié)果表明上述檢測(cè)方法準(zhǔn)確無(wú)誤。該方法為評(píng)估RIPEMD-160算法的安全性提供了充分的理論依據(jù),而且此方法操作簡(jiǎn)單,結(jié)果準(zhǔn)確。