一種針對(duì)sms4密碼算法的差分故障注入攻擊的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及密碼算法分析檢測(cè)領(lǐng)域,尤其涉及一種針對(duì)SMS4密碼算法的差分故障注入攻擊。
【背景技術(shù)】
[0002]—般情況下,運(yùn)行密碼算法的硬件設(shè)備或軟件程序均能正確地執(zhí)行各種密碼算法,但在有干擾的情況下,密碼運(yùn)算模塊可能會(huì)出現(xiàn)寄存器錯(cuò)誤或運(yùn)算,利用這些錯(cuò)誤行為或者信息來恢復(fù)密鑰的方法稱為密碼錯(cuò)誤分析。密碼設(shè)備大都基于電子技術(shù)實(shí)現(xiàn),接口也相對(duì)簡(jiǎn)單,較易受到外界干擾,這使得故障注入分析已經(jīng)成為最有效的旁路分析方法之一。
[0003]故障注入就是在某些合適的時(shí)間改變密碼芯片的工作條件,使得密碼芯片運(yùn)行的中間狀態(tài)發(fā)生改變,進(jìn)而產(chǎn)生錯(cuò)誤輸出或者異常的旁路泄露。密碼運(yùn)算模塊可能會(huì)出現(xiàn)寄存器錯(cuò)誤或運(yùn)算,利用這些錯(cuò)誤行為或者信息來恢復(fù)密鑰的方法稱為密碼錯(cuò)誤分析。密碼設(shè)備大都基于電子技術(shù)實(shí)現(xiàn),接口也相對(duì)簡(jiǎn)單,較易受到外界干擾,這使得錯(cuò)誤分析已經(jīng)成為最有效的旁路分析方法之一。根據(jù)攻擊者入侵密碼設(shè)備接口和運(yùn)行環(huán)境的程度,可將故障注入分為非侵入式故障注入、半侵入式故障注入和侵入式故障注入三種。非侵入式故障注入通過外界干擾的方式,如時(shí)鐘、電壓或磁場(chǎng)等,讓密碼芯片執(zhí)行出錯(cuò),相比于其他兩種方式具有較高的可行性。且非侵入式故障注入是一種簡(jiǎn)單廉價(jià)的攻擊方式,使用這種類型的攻擊只需要使用外部接口修改工作條件,通常是通過電壓、時(shí)鐘信號(hào)擾亂等進(jìn)行實(shí)施。這種攻擊方式隱蔽性較高,難以被發(fā)現(xiàn)。
[0004]差分故障攻擊(DFA)是故障注入攻擊方法和傳統(tǒng)的差分密碼分析方法相結(jié)合后產(chǎn)生的一種攻擊方法,主要是利用同一明文分別在正常情況下的正確輸出和故障注入后的錯(cuò)誤輸出之間的關(guān)系進(jìn)行密鑰破解。其具體表述如下:(1)確定一個(gè)明文,并在正確密鑰作用下取得對(duì)應(yīng)的正確密文;(2)針對(duì)同一明文,對(duì)加密過程進(jìn)行故障誘導(dǎo),并取得相應(yīng)的錯(cuò)誤密文;(3)對(duì)正確密文和錯(cuò)誤密文進(jìn)行分析,攻擊者可得到每個(gè)密鑰的候選值集合,對(duì)多個(gè)密文分析后可得到這些密鑰集合的交集,正確的密鑰肯定在交集中,通過對(duì)多個(gè)密鑰逐個(gè)分析進(jìn)而實(shí)現(xiàn)密鑰恢復(fù)。
[0005]SMS4密碼算法是我國自行設(shè)計(jì)的分組對(duì)稱密碼算法,其基本性質(zhì)有:(I)分組長(zhǎng)度和密鑰長(zhǎng)度都是128bit ; (2)加密和解密算法結(jié)構(gòu)一樣,只是輪子密鑰使用的順序相反;
(3)加密算法和密鑰擴(kuò)展算法均采用的是32輪非線性迭代結(jié)構(gòu),其重復(fù)性使得SMS4算法能理想地用在一個(gè)專用芯片上;(4) SMS4算法使用的是標(biāo)準(zhǔn)的算術(shù)和邏輯運(yùn)算,其作用數(shù)最多為32bit,因此用硬件技術(shù)很容易實(shí)現(xiàn)。下面以加密的首輪流程和密鑰編排算法為例,介紹SMS4算法。
[0006]SMS4加密算法的首輪流程如圖1所示。假設(shè)輸入明文為(?]"?,?) e (Z232) 4,輸出密文為(YqJ1J2J3) e (Z232) 4,輪密鑰為Wvrk1,…,rk31) e (Z232) 4,S盒的輸入為Sin,輸出為Sciut,線性變換L的輸出為L(zhǎng)ciut,則SMS4加密算法第一輪基本過程如下:
e (Z232) 4; 2)Sout= τ (Sin)
=(Sbox (a0),Sbox (?, Sbox (a2),Sbox (a3))
= (b0, bir b2, b3) e (Z232) 4;
3)Lout=L (Sout)
=Sout ? (S out?<2) ? (Sout?<10) ? (Sout?<18) ? (Sout?<24);
4)X4=X0 Φ Lout;
故第一輪的輸出為(X1, x2,x3,X4),其余32輪的步驟與第一輪相同,只是在最后一輪也就是第32輪還需要進(jìn)行一個(gè)反序變換,如圖2所示,最后輸出密文為:
(Y1, Y2, Y3, Y4) =R(X32, X33, X34, X35)= (X35, X34, X33, X32);
SMS4算法中加密算法的子密鑰由原始密鑰通過密鑰擴(kuò)展算法生成,其流程如圖3所示。設(shè)原始密鑰 MK= (MIVMK1, MK2,MK3),i=0,l,2,3。令 K1G Z 232, i=0,1,2,…,35,子密鑰rk,e Z 232, i=0, I, 2,…,31,則子密鑰生成方法如下所示:
I) (K0, K1, K2, K3) = ( MK。十 FK ο, MK1 十 FK !,MK2 十 FK 2,MK3 十 FK 3)
2 ) Tk1=Kp4=K1 十 T z (K 1+3 十 K 1+2 十 K 1+1 十 CK ,)
其中,T z變換與加密變換中的T變換基本相同,但線性變換必須更改為L(zhǎng) '即L ^ (B) = B ? (B?<13) ? (B?<23)。
[0007]系統(tǒng)參數(shù)FK的取值,采用16進(jìn)制表示為:
FKq=A3B1BAC6,ΡΚ^δθΑΑββδΟ, FK2=677D9197,F(xiàn)K3= B27022DC。
[0008]固定參數(shù)CK的取值方法為:設(shè)Ck1,』為CK i的第j字節(jié)(i=0,I, 2,…,31 ;j=0,1,2,3),即 CK1= (Ck1, ^ck1, !,Ck1, ^ck1,3,)e (Z232),則 Ckli j=Gi+].) X7(mod256)。32 個(gè)固定參數(shù)(^用16進(jìn)制表示為:
00070el5, Ic232a31, 383f464d, 545b6269, 70777e85, 8c939aal, a8afb6bd,c4cbd2d9,
e0e7eef5, fc030all, 181f262d, 343b4249, 50575e65, 6c737a81, 888f969d,a4abb2b9,
c0c7ced5, dce3eafl, f8ff060d, 141b2229, 30373e45, 4c535a61, 686f767d,848b9299,
a0a7aeb5, bcc3cadl, d8dfe6ed, f4fb0209,10171e25, 2c333a41, 484f565d,646b727o
[0009]根據(jù)密鑰編排算法,反推出原始密鑰的方法如下:
1)已知后四輪子密鑰rk31、rk3。、rk29、rk2S,貝Ij有:
^k31-rk35 rk30-rk34 rk29-rk33 rk28-rk32
2)由 rk31 = K31ffi T (K 3 4 Θ K 33? K 3 2 ? CK 31)可得:K31 =rk31 十 T z (rk 30 十 rk 29 十 rk 28 十(3( 31)
3)由A1=K1+4可得:rk27= K31,這就得到倒數(shù)第五輪即第28輪的子密鑰。依次類推,SP可恢復(fù)出各輪的子密鑰和原始密鑰。
[0010]在針對(duì)SMS4密碼算法的差分故障攻擊的研究中,張蕾和吳文玲于2006年最先進(jìn)行了這類研究,但是其攻擊成功的前提是在對(duì)每輪進(jìn)行攻擊前,需要在固定的位置產(chǎn)生單字節(jié)的錯(cuò)誤,且在后續(xù)眾多公開發(fā)表的文獻(xiàn)中都是以某一位置產(chǎn)生單字節(jié)故障為前提的, 而這中假設(shè)在實(shí)際攻擊中難以實(shí)現(xiàn)。
【發(fā)明內(nèi)容】
[0011]本發(fā)明的目的是提供一種針對(duì)SMS4密碼算法的差分故障攻擊方法,以解決兩個(gè)實(shí)際問題:(I)無法誘導(dǎo)某個(gè)中間狀態(tài)某些特殊字節(jié)產(chǎn)生特定故障的問題,即現(xiàn)階段的理論研究都采用面向字節(jié)的隨機(jī)故障模型,而且攻擊成功都有一個(gè)假設(shè)的前提條件,就是要求誘導(dǎo)某個(gè)中間值的某一個(gè)特定字節(jié)發(fā)生變換,而這種假設(shè)在實(shí)際的故障誘導(dǎo)中很難控制。(2)攻擊輪密鑰時(shí),必須針對(duì)每輪的要求進(jìn)行特殊的故障注入,每攻擊一輪就要重新按照要求進(jìn)行故障注入,過程繁瑣。本發(fā)明創(chuàng)造性地對(duì)SMS4加密算法后四輪進(jìn)行了任意故障注入,不需要進(jìn)行特殊故障誘導(dǎo),而且針對(duì)每輪的攻擊所采用的故障數(shù)據(jù)均相同,也無需重新注入故障,這使得在實(shí)際進(jìn)行故障注入攻擊時(shí),故障注入實(shí)施起來非常容易。
[0012]為解決上述問題,本發(fā)明提供了一種針對(duì)SMS4密碼算法的差分故障注入攻擊,具體包括以下步驟:
S1:確定一組明文X,并獲得該組明文X在正常狀態(tài)下的正確密文Y,和故障注入狀態(tài)下的錯(cuò)誤密文Y'。
[0013]Sll:確定一組明文X,并獲得該組明文X在正確密鑰K作用下的正確密文Y。
[0014]S12:輸入相同明文X,并對(duì)SMS4密碼算法加密過程的后四輪進(jìn)行任意故障注入,獲得明文X在故障注入狀態(tài)下的錯(cuò)誤密文Y'如圖4所示。
[0015]S13:利用明文X和正確密文Y,與故障狀態(tài)下的錯(cuò)誤密文Y z進(jìn)行比較,將數(shù)據(jù)返回值完整(包含明文和密文)、明文相同、密文不同的錯(cuò)誤密文選取出來,用于后續(xù)差分分析。
[0016]S2:對(duì)獲取到的正確密文Y和錯(cuò)誤密文Y ,進(jìn)行差分分析,攻擊出SMS4密碼算法第32輪的子密鑰rk32。然后利用相同的正確密文Y、錯(cuò)誤密文Y ,和第32輪的子密鑰rk32攻擊出第31輪的子密鑰rk31。同理,依次攻擊出第30輪和29輪的子密鑰rk3(^P rk 29。
[0017]S21:根據(jù)反序變換,將密文逆向計(jì)算出進(jìn)入反序變換R的輸入值,即第32輪的輸出值,其中正確輸出值記為XX4、XX3、XX2、XXI,錯(cuò)誤輸出值為Xx4、Xx3、Xx2、Xxl ;
522:計(jì)算S盒輸入的差分值和S盒輸出的差分值,分別記為Sin_differ和Sout_differ,則有:
Sin_differ=XX3 十 Xx3 十