本發(fā)明涉及一種檢測(cè)SHA-256散列函數(shù)抵御差分故障攻擊的方法,用于評(píng)測(cè)出SHA-256散列算法抵御差分故障攻擊的能力,主要應(yīng)用在檢驗(yàn)封裝有該算法的密碼設(shè)備及相關(guān)產(chǎn)品的安全性,屬于信息安全技術(shù)領(lǐng)域。
背景技術(shù):
隨著信息在軍事系統(tǒng)、政府機(jī)構(gòu)、金融系統(tǒng)、醫(yī)療保健、通信網(wǎng)絡(luò)、教育系統(tǒng)等方面的廣泛應(yīng)用,信息系統(tǒng)的安全保密已成為影響社會(huì)穩(wěn)定和國家安危的戰(zhàn)略性問題。安全保密的核心是使用現(xiàn)代密碼算法來保護(hù)信息系統(tǒng)中的關(guān)鍵信息。SHA-256算法作為美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)發(fā)布的經(jīng)典散列算法,具有抗第一原像性、抗第二原像性和無碰撞性。與SHA-1算法相比,SHA-256算法具有更加復(fù)雜的結(jié)構(gòu),安全性能更高,在電子簽名、消息認(rèn)證、身份識(shí)別等領(lǐng)域中有著廣泛的商業(yè)應(yīng)用。
差分故障攻擊憑借其出眾的攻擊能力和簡單的軟件實(shí)現(xiàn)等特點(diǎn)已經(jīng)引起國內(nèi)外的廣泛關(guān)注。這種攻擊不需要深入剖析散列算法內(nèi)部的數(shù)學(xué)結(jié)構(gòu),通過對(duì)硬件進(jìn)行特殊的物理處理,誘導(dǎo)在處理消息的過程中產(chǎn)生隨機(jī)故障,并基于差分分析,即可恢復(fù)原始消息。對(duì)SHA-256算法抵御差分故障攻擊的能力評(píng)測(cè)方面,目前還沒有公開的檢測(cè)方法,這極大地增加了封裝有SHA-256散列算法的密碼設(shè)備及相關(guān)產(chǎn)品的安全隱患。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是如何評(píng)估SHA-256散列算法抵御差分故障攻擊的能力。
為了解決上述技術(shù)問題,本發(fā)明的技術(shù)方案是提供一種SHA-256散列算法抵御差分故障攻擊的檢測(cè)方法,其特征在于:其特征在于,包括以下步驟:
步驟1:隨機(jī)生成要處理的明文消息,記為X;
步驟2:利用SHA-256算法處理消息X,得到正確輸出和錯(cuò)誤輸出,分別記為Y和Y*;
步驟3:計(jì)算Y和Y*的差分值,結(jié)果記為ΔY;
步驟4:分析ΔY,判斷SHA-256算法是否受到差分故障攻擊的影響,并推導(dǎo)出故障導(dǎo)入的位置,分析其有效性;具體方法如下:
計(jì)算正確輸出Y和錯(cuò)誤輸出Y*的差分其中代表異或運(yùn)算;ΔY為256比特,令ΔY=(ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7),保存于256比特的緩存區(qū)中,緩存區(qū)用8個(gè)32比特長的寄存器(A,B,C,D,E,F(xiàn),G,H)表示;ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6和ΔY7均為32比特,分別代表緩存區(qū)中最后一輪輸出結(jié)果的差分;記Ai、Bi、Ci、Di、Ei、Fi、Gi、Hi為第i步緩存區(qū)相應(yīng)寄存器中的值,其中i∈[0,64];
(1)有效故障:
I)當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6×ΔY7≠0時(shí),故障導(dǎo)入的位置為E61;
II)當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6≠0時(shí),故障導(dǎo)入的位置為F61;
III)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中均不為0時(shí),故障導(dǎo)入的位置為D60以及在其之前的任何位置;
(2)無效故障:
I)當(dāng)ΔY=0時(shí),說明導(dǎo)入的故障值等于當(dāng)前位置上的原值,相當(dāng)于沒有導(dǎo)
入故障,故障無效;
II)當(dāng)ΔY≠0時(shí):
(i)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中有且僅有一個(gè)不為0時(shí),
a)當(dāng)ΔY0≠0時(shí),故障導(dǎo)入的位置為A64;
b)當(dāng)ΔY1≠0時(shí),故障導(dǎo)入的位置為B64;
c)當(dāng)ΔY2≠0時(shí),故障導(dǎo)入的位置為C64;
d)當(dāng)ΔY3≠0時(shí),故障導(dǎo)入的位置為D64;
e)當(dāng)ΔY4≠0時(shí),故障導(dǎo)入的位置為E64或者D63;
f)當(dāng)ΔY5≠0時(shí),故障導(dǎo)入的位置為F64;
g)當(dāng)ΔY6≠0時(shí),故障導(dǎo)入的位置為G64;
h)當(dāng)ΔY7≠0時(shí),故障導(dǎo)入的位置為H64;
(ii)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有兩個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0×ΔY1≠0時(shí),故障導(dǎo)入的位置為A63;
b)當(dāng)ΔY0×ΔY2≠0時(shí),故障導(dǎo)入的位置為B63;
c)當(dāng)ΔY0×ΔY3≠0時(shí),故障導(dǎo)入的位置為C63;
d)當(dāng)ΔY0×ΔY4≠0時(shí),故障導(dǎo)入的位置為H63;
(iii)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有三個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0×ΔY1×ΔY2≠0時(shí),故障導(dǎo)入的位置為A62;
b)當(dāng)ΔY0×ΔY1×ΔY3≠0時(shí),故障導(dǎo)入的位置為B62;
c)當(dāng)ΔY0×ΔY1×ΔY4≠0時(shí),故障導(dǎo)入的位置為C62或者G62;
d)當(dāng)ΔY0×ΔY4×ΔY5≠0時(shí),故障導(dǎo)入的位置為D62或者E63;
f)當(dāng)ΔY0×ΔY4×ΔY6≠0時(shí),故障導(dǎo)入的位置為F63;
g)當(dāng)ΔY0×ΔY4×ΔY7≠0時(shí),故障導(dǎo)入的位置為G63;
(iv)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有四個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0×ΔY1×ΔY2×ΔY3≠0時(shí),故障導(dǎo)入的位置為A61;
b)當(dāng)ΔY0×ΔY1×ΔY4×ΔY5≠0時(shí),故障導(dǎo)入的位置為H62;
c)當(dāng)ΔY0×ΔY1×ΔY3×ΔY4≠0時(shí),故障導(dǎo)入的位置為B61;
(v)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有五個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0×ΔY1×ΔY4×ΔY5×ΔY6≠0時(shí),故障導(dǎo)入的位置為E62;
b)當(dāng)ΔY0×ΔY1×ΔY4×ΔY5×ΔY7≠0時(shí),故障導(dǎo)入的位置為F62;
c)當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY6≠0時(shí),故障導(dǎo)入的位置為D61;
d)當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY5≠0時(shí),故障導(dǎo)入的位置為C61;
(vi)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有六個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6≠0時(shí),故障導(dǎo)入的位置為G61或者H61。
優(yōu)選地,所述步驟2中,使用SHA-256算法處理消息X的過程中,控制出兩種實(shí)驗(yàn)環(huán)境,具體步驟如下:
步驟2.1:輸入消息X,控制實(shí)驗(yàn)環(huán)境不受任何不相關(guān)事物的干擾,使得SHA-256算法能夠正確無誤地進(jìn)行,從而得到正確的輸出結(jié)果,將其記為Y;
步驟2.2:重新輸入消息X,再次用SHA-256算法對(duì)其進(jìn)行處理,同時(shí)借助物理設(shè)備改變運(yùn)行環(huán)境,誘導(dǎo)產(chǎn)生故障,來干擾SHA-256算法的處理過程,將輸出結(jié)果記為Y*。
優(yōu)選地,所述步驟2.2中,改變運(yùn)行環(huán)境誘導(dǎo)產(chǎn)生故障的方法包括:改變時(shí)鐘、電壓、濕度、輻射、壓力、光和/或渦電流,將故障隨機(jī)地導(dǎo)入SHA-256算法處理流程,以得到錯(cuò)誤的輸出結(jié)果,記為Y*。
本發(fā)明提供的方法填補(bǔ)了現(xiàn)有技術(shù)的空白,簡單、準(zhǔn)確、快速,易于實(shí)現(xiàn),不僅可以評(píng)估SHA-256算法對(duì)差分故障攻擊的抵抗能力,還能推導(dǎo)出差分故障攻擊導(dǎo)入的位置,給使用SHA-256算法封裝的產(chǎn)品的安全性測(cè)評(píng)提供了理論依據(jù)。
附圖說明
圖1為SHA-256散列算法抵御差分故障攻擊的檢測(cè)方法流程圖;
圖2為SHA-256散列算法差分故障攻擊分析路徑圖;
圖3為檢驗(yàn)SHA-256散列算法抵御差分故障攻擊能力的實(shí)驗(yàn)環(huán)境示意圖。
具體實(shí)施方式
下面結(jié)合具體實(shí)施例,進(jìn)一步闡述本發(fā)明。應(yīng)理解,這些實(shí)施例僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍。此外應(yīng)理解,在閱讀了本發(fā)明講授的內(nèi)容之后,本領(lǐng)域技術(shù)人員可以對(duì)本發(fā)明作各種改動(dòng)或修改,這些等價(jià)形式同樣落于本申請(qǐng)所附權(quán)利要求書所限定的范圍。
一、基本記號(hào)和符號(hào)說明
記X為輸入的明文消息;
記Y為算法處理消息后的正確輸出;
記Y*為算法導(dǎo)入故障后的錯(cuò)誤輸出;
記ΔY為正確輸出Y與錯(cuò)誤輸出Y*之間的差分值;
記ΔY0、ΔY1、ΔY2、ΔY3、ΔY4、ΔY5、ΔY6、ΔY7為緩存區(qū)中最后一輪輸出結(jié)果的差分;
記為異或運(yùn)算;
記Ai、Bi、Ci、Di、Ei、Fi、Gi、Hi為第i步緩存區(qū)寄存器中的值,其中i∈[0,64],每個(gè)寄存器長度均為32比特。
二、SHA-256散列算法抵御差分故障攻擊的檢測(cè)方法
使用SHA-256算法對(duì)于同一個(gè)消息X使用同一個(gè)密鑰進(jìn)行處理時(shí),如果實(shí)驗(yàn)環(huán)境(如時(shí)鐘、電壓、濕度、輻射、壓力、光和渦電流等)不同,攻擊者可以分別獲得正確輸出Y和錯(cuò)誤輸出Y*,通過計(jì)算出這兩個(gè)值的輸出差分值,即就可推導(dǎo)出關(guān)鍵信息。攻擊者可以在處理設(shè)備運(yùn)行SHA-256算法期間誘導(dǎo)故障發(fā)生,但是不知道故障發(fā)生的具體位置以及具體的錯(cuò)誤值。在某些特定條件下,能從差分ΔY中推導(dǎo)出故障導(dǎo)入的位置,此時(shí)導(dǎo)入的故障稱為有效故障。相反,當(dāng)導(dǎo)入故障為無效故障的時(shí)候,本次導(dǎo)入的故障并不能給分析密鑰提供幫助,即通過ΔY不能得到重要的信息。
圖1為本發(fā)明提供的SHA-256散列算法抵御差分故障攻擊的檢測(cè)方法流程圖,所述的SHA-256散列算法抵御差分故障攻擊的檢測(cè)方法包括如下步驟:
步驟1:隨機(jī)生成要處理的消息,記為X;
步驟2:處理消息X,得到正確輸出和錯(cuò)誤輸出,分別記為Y和Y*;
步驟3:計(jì)算Y和Y*的差分值,結(jié)果記為ΔY;
步驟4:分析ΔY,推斷出導(dǎo)入位置,并判斷導(dǎo)入故障是否有效。
針對(duì)步驟2,用SHA-256算法對(duì)X進(jìn)行處理,實(shí)驗(yàn)過程中,對(duì)運(yùn)行環(huán)境實(shí)施兩種不同的控制,即:
(1)輸入消息X,控制實(shí)驗(yàn)環(huán)境不受其他任何不相關(guān)事物的干擾,使得SHA-256算法能夠正確無誤地進(jìn)行,從而得到正確的輸出結(jié)果,將其記為Y;
(2)重新輸入消息X,再次用SHA-256算法對(duì)其進(jìn)行處理,同時(shí)借助其他物理設(shè)備改變運(yùn)行環(huán)境,誘導(dǎo)產(chǎn)生故障來干擾SHA-256算法的處理過程,將輸出結(jié)果記為Y*。
其中,誘導(dǎo)故障產(chǎn)生的方法包括:改變時(shí)鐘、電壓、濕度、輻射、壓力、光和渦電流等。
針對(duì)步驟3,計(jì)算差分其中代表異或運(yùn)算,ΔY為256比特,令ΔY=(ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7),保存于256比特的緩存區(qū)中,緩存區(qū)用8個(gè)32比特長的寄存器(A,B,C,D,E,F(xiàn),G,H)表示,令ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6和ΔY7均為32比特,分別代表緩存區(qū)中最后一輪輸出結(jié)果的差分;
針對(duì)步驟4,對(duì)ΔY的差分分析及確定故障位置的原理如下:
SHA-256算法對(duì)消息按512比特長的分組為單位進(jìn)行處理,總共由4輪運(yùn)算組成,每一輪都對(duì)緩存區(qū)進(jìn)行16步迭代運(yùn)算,輸出為256比特的Hash值,SHA-256的中間結(jié)果和最終結(jié)果保存于256比特的緩存區(qū)中,緩存區(qū)用8個(gè)32比特長的寄存器(A,B,C,D,E,F(xiàn),G,H)表示,如圖2所示,第i+1步的迭代公式如下:
Bi+1=Ai,
Ci+1=Bi,
Di+1=Ci,
Fi+1=Ei,
Gi+1=Fi,
Hi+1=Gi。
其中,代表異或運(yùn)算,i是迭代的步數(shù),i∈[0,64],Ai、Bi、Ci、Di、Ei、Fi、Hi、Gi是第i步緩存區(qū)中的值,f0(Ai,Bi,Ci)與f1(Ei,F(xiàn)i,Gi)是第i步的基本邏輯算法,S0與S1是32比特的變量循環(huán)邏輯算法,Wi是從當(dāng)前輸入的512比特的分組導(dǎo)出的32比特長的字,Ki是加法常量。
SHA-256算法的正確輸出Y為:
A0、B0、C0、D0、E0、F0、G0、H0為緩存區(qū)中的初始值,將其代入上述等式即可得到最后的輸出結(jié)果A64、B64、C64、D64、E64、F64、G64、H64。在此,考慮
將A63=B64,B63=C64,C63=D64,E63=F64,F(xiàn)63=G64,G63=H64代入A64和E64得知在上述等式中,只有H63和W63是未知的,而攻擊者的目的是要恢復(fù)W63,如果H63的值是已知的,那么W63就可以由以下等式求解得到:
根據(jù)算法結(jié)構(gòu)可知H63=G62,即求得G62的值便可知道H63,這樣就可以推導(dǎo)出W63。
同理,也可以得到:
上式中,要推導(dǎo)出W62,只需要知道H62和W62,又因?yàn)镠62=G61,所以需要知道G62和G61的值,才能求得W62。
通過分析當(dāng)故障導(dǎo)入的位置在E61或者F61時(shí),可以求得G62和G61的值,進(jìn)而推導(dǎo)出W62和W63。因而E61或者F61為有效的故障位置。
其中,對(duì)故障位置的有效性,具體分析如下:
(1)有效故障:
I)當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6×ΔY7≠0時(shí),故障導(dǎo)入的位置為E61;
II)當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6≠0時(shí),故障導(dǎo)入的位置為F61;
III)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中均不為0時(shí),故障導(dǎo)入的位置為D60以及在其之前的任何位置;
(2)無效故障:
I)當(dāng)ΔY=0時(shí),說明導(dǎo)入的故障值等于當(dāng)前位置上的原值,相當(dāng)于沒有導(dǎo)入故障,故障無效;
II)當(dāng)ΔY≠0時(shí):
(i)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中有且僅有一個(gè)不為0時(shí),
a)當(dāng)ΔY0≠0時(shí),故障導(dǎo)入的位置為A64;
b)當(dāng)ΔY1≠0時(shí),故障導(dǎo)入的位置為B64;
c)當(dāng)ΔY2≠0時(shí),故障導(dǎo)入的位置為C64;
d)當(dāng)ΔY3≠0時(shí),故障導(dǎo)入的位置為D64;
e)當(dāng)ΔY4≠0時(shí),故障導(dǎo)入的位置為E64或者D63;
f)當(dāng)ΔY5≠0時(shí),故障導(dǎo)入的位置為F64;
g)當(dāng)ΔY6≠0時(shí),故障導(dǎo)入的位置為G64;
h)當(dāng)ΔY7≠0時(shí),故障導(dǎo)入的位置為H64;
(ii)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有兩個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0×ΔY1≠0時(shí),故障導(dǎo)入的位置為A63;
b)當(dāng)ΔY0×ΔY2≠0時(shí),故障導(dǎo)入的位置為B63;
c)當(dāng)ΔY0×ΔY3≠0時(shí),故障導(dǎo)入的位置為C63;
d)當(dāng)ΔY0×ΔY4≠0時(shí),故障導(dǎo)入的位置為H63;
(iii)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有三個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0×ΔY1×ΔY2≠0時(shí),故障導(dǎo)入的位置為A62;
b)當(dāng)ΔY0×ΔY1×ΔY3≠0時(shí),故障導(dǎo)入的位置為B62;
c)當(dāng)ΔY0×ΔY1×ΔY4≠0時(shí),故障導(dǎo)入的位置為C62或者G62;
d)當(dāng)ΔY0×ΔY4×ΔY5≠0時(shí),故障導(dǎo)入的位置為D62或者E63;
f)當(dāng)ΔY0×ΔY4×ΔY6≠0時(shí),故障導(dǎo)入的位置為F63;
g)當(dāng)ΔY0×ΔY4×ΔY7≠0時(shí),故障導(dǎo)入的位置為G63;
(iv)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有四個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0×ΔY1×ΔY2×ΔY3≠0時(shí),故障導(dǎo)入的位置為A61;
b)當(dāng)ΔY0×ΔY1×ΔY4×ΔY5≠0時(shí),故障導(dǎo)入的位置為H62;
c)當(dāng)ΔY0×ΔY1×ΔY3×ΔY4≠0時(shí),故障導(dǎo)入的位置為B61;
(v)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有五個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0×ΔY1×ΔY4×ΔY5×ΔY6≠0時(shí),故障導(dǎo)入的位置為E62;
b)當(dāng)ΔY0×ΔY1×ΔY4×ΔY5×ΔY7≠0時(shí),故障導(dǎo)入的位置為F62;
c)當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY6≠0時(shí),故障導(dǎo)入的位置為D61;
d)當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY5≠0時(shí),故障導(dǎo)入的位置為C61;
(vi)當(dāng)ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有六個(gè)同時(shí)不為0時(shí),
a)當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6≠0時(shí),故障導(dǎo)入的位置為G61或者H61。
綜上分析,當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6×ΔY7≠0時(shí),導(dǎo)入的故障位置為E61,當(dāng)ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6≠0時(shí),故障導(dǎo)入的位置為F61,ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中均不為0時(shí),導(dǎo)入的故障位置為D60及其之前的任何位置,這些位置均為有效的故障導(dǎo)入位置。
針對(duì)上述執(zhí)行步驟,選擇實(shí)驗(yàn)環(huán)境如圖3所示,其中用計(jì)算機(jī)來產(chǎn)生SHA-256的輸入消息X以及分析輸出結(jié)果;封裝有SHA-256算法的設(shè)備用來處理輸入的消息;產(chǎn)生故障的設(shè)備用來改變實(shí)驗(yàn)執(zhí)行環(huán)境,目的是干擾對(duì)輸入消息的處理過程,從而實(shí)現(xiàn)導(dǎo)入故障功能,產(chǎn)生錯(cuò)誤的輸出結(jié)果。
利用上述分析方法,本發(fā)明在Intel(R)Core(TM)i5-3210M CPU 2.50GHz 8GB內(nèi)存的計(jì)算機(jī)上,在Eclipse開發(fā)工具下采用Java語言編程來模擬故障導(dǎo)入和消息處理過程,重復(fù)執(zhí)行2500次,實(shí)驗(yàn)結(jié)果表明上述檢測(cè)方法準(zhǔn)確無誤。該方法為評(píng)估SHA-256算法的安全性提供了充分的理論依據(jù),而且此方法操作簡單,結(jié)果準(zhǔn)確。