檢測RIPEMD‑160算法抵禦差分故障攻擊的方法與流程
2023-08-10 20:23:21

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