焦志鵬,姚 富,陳 華,王 艦,匡曉云,黃開天
(1.中國科學(xué)院軟件研究所可信計(jì)算與信息保障實(shí)驗(yàn)室,北京 100190;2.中國科學(xué)院大學(xué),北京 100049;3.南方電網(wǎng)科學(xué)研究院,廣東廣州 510663)
物聯(lián)網(wǎng)等技術(shù)的發(fā)展便利了人們各方面的生活,與此同時(shí)也使得個(gè)人隱私等秘密信息的保護(hù)面臨著巨大的挑戰(zhàn).灰盒模型攻擊的出現(xiàn)使得密碼設(shè)備的實(shí)現(xiàn)安全性受到了嚴(yán)重的威脅.側(cè)信道攻擊[1~4]和故障攻擊[5]是灰盒模型攻擊中兩種主流攻擊方法.能量分析攻擊是應(yīng)用最廣泛的側(cè)信道攻擊手段之一,其中差分能量分析[6]因其實(shí)現(xiàn)簡單、成本低廉以及功能強(qiáng)大等優(yōu)點(diǎn),被廣泛用于對(duì)實(shí)際密碼設(shè)備的攻擊過程.針對(duì)于側(cè)信道攻擊的威脅,不同的防護(hù)理論陸續(xù)被提出,其中門限實(shí)現(xiàn)防護(hù)理論[7]因其兼具可證明安全以及實(shí)現(xiàn)代價(jià)相對(duì)低廉的優(yōu)點(diǎn)得到了學(xué)術(shù)界更為廣泛的研究和應(yīng)用.除了側(cè)信道攻擊之外,故障攻擊同樣是密碼設(shè)備實(shí)現(xiàn)安全性的重要威脅,差分故障攻擊是故障攻擊中經(jīng)典的攻擊方法[8].乘法感染技術(shù)通過隨機(jī)化故障密文對(duì)于故障攻擊進(jìn)行防護(hù),其具有較好的故障攻擊防護(hù)效果,但是存在著隨機(jī)數(shù)為0時(shí)易通過功耗曲線區(qū)分的缺陷[9].僅僅添加能量攻擊防護(hù)的電路面對(duì)故障攻擊時(shí)是不安全,反之亦然.目前,針對(duì)兩類攻擊的防護(hù)方案往往是兩類防護(hù)策略的簡單疊加,不僅會(huì)帶來實(shí)現(xiàn)代價(jià)的大量增加,也可能產(chǎn)生未知的安全漏洞,因此在實(shí)現(xiàn)密碼算法時(shí)應(yīng)綜合考慮能量和故障攻擊方法,并對(duì)相應(yīng)的防護(hù)方法進(jìn)行結(jié)合.為達(dá)到綜合防護(hù)的目的,目前已有一些綜合防護(hù)方案被提出[10~14],但都存在著一定的問題.目前還沒有一種通用的兼具安全性與實(shí)現(xiàn)代價(jià)的綜合防護(hù)方案,仍需要針對(duì)具體的密碼算法以及實(shí)現(xiàn)特點(diǎn)去具體構(gòu)造防護(hù)方案.
SM4 算法是我國公布的第一個(gè)商用密碼算法標(biāo)準(zhǔn),在我國各個(gè)領(lǐng)域的信息保護(hù)中起著重要的作用[15].SM4 算法同樣面臨著能量攻擊和故障攻擊的威脅.針對(duì)能量攻擊的威脅,相應(yīng)的防護(hù)方案也隨之出現(xiàn),譚銳能等基于多路徑掩碼技術(shù)構(gòu)造了SM4 算法抗能量攻擊的防護(hù)實(shí)現(xiàn)[16],裴超等針對(duì)SM4 算法S 盒查表實(shí)現(xiàn)提出了一種掩碼方案[17],李新超等提出并實(shí)現(xiàn)了SM4 算法S-box 的門限實(shí)現(xiàn)防護(hù)[18],魏曼等提出了一種SM4 算法的門限實(shí)現(xiàn)防護(hù)方法[19].在故障攻擊防護(hù)方面,辛小霞等基于“校驗(yàn)-阻止”原理提出了SM4算法的一種故障防護(hù)方法[20].但是對(duì)于SM4 算法目前還缺乏綜合防護(hù)方案.本文基于門限實(shí)現(xiàn)與乘法感染的原理提出并實(shí)現(xiàn)了針對(duì)SM4算法的綜合防護(hù)方案,該方法可以抵抗2階差分能量攻擊,與此同時(shí)也可以抵抗差分故障攻擊,并且對(duì)于能量與故障的組合攻擊也具有對(duì)應(yīng)的抵抗能力.
本文基于門限實(shí)現(xiàn)和乘法感染的思想構(gòu)造了一種綜合防護(hù)方案并以SM4 算法為例對(duì)于綜合防護(hù)方案進(jìn)行了實(shí)現(xiàn),其整體框架如圖1 所示,對(duì)于原始SM4 進(jìn)行門限實(shí)現(xiàn),在此基礎(chǔ)上實(shí)現(xiàn)一路完全相同的冗余SM4門限實(shí)現(xiàn),最終通過乘法感染對(duì)故障密文進(jìn)行隨機(jī)化,從而實(shí)現(xiàn)對(duì)于側(cè)信道攻擊和故障攻擊的綜合防護(hù).
圖1 SM4算法綜合防護(hù)方案
為抵抗d階差分能量攻擊,需要進(jìn)行d階的門限實(shí)現(xiàn)防護(hù).關(guān)于d階門限實(shí)現(xiàn),基于不同的考慮有多重變種,其中實(shí)現(xiàn)的面積消耗與劃分的份額(share)個(gè)數(shù)正相關(guān),為了達(dá)到降低面積消耗的目的,本文選取最低的也就是d+1 個(gè)share 進(jìn)行門限實(shí)現(xiàn),具體理論可以參考文獻(xiàn)[21].d+1 share 實(shí)現(xiàn)的d階門限防護(hù)帶來實(shí)現(xiàn)面積優(yōu)化的同時(shí)也對(duì)具體的門限實(shí)現(xiàn)有一些細(xì)節(jié)性的要求,如果實(shí)現(xiàn)不當(dāng)可能會(huì)帶來一些安全隱患.
對(duì)于線性運(yùn)算來說,d+1 share的d階門限實(shí)現(xiàn)是直接的.對(duì)于非線性運(yùn)算的d+1 share 的d階門限防護(hù),其實(shí)現(xiàn)方法如下所示,單比特的乘法運(yùn)算是綜合防護(hù)實(shí)現(xiàn)的基本組成單元,因此這里以單比特乘法y=ab為例介紹d+1 share的d階門限實(shí)現(xiàn).
(1)輸入變量的分解
使用布爾掩碼將函數(shù)輸入a和b分解為d+1份;首先利用2d份隨機(jī)數(shù)生成前d份輸入:(a1,b1,…,ad,bd),第d+1份輸入可以由前d份輸入和原始輸入的異或生成,具體可以表示為(ad+1,bd+1)=最終構(gòu)成需要的輸入(a1,b1,…,ad+1,bd+1),由于隨機(jī)數(shù)的存在,d+1份輸入滿足輸入均勻性,也就是說每一種輸入掩碼都是均勻出現(xiàn)的.
(2)目標(biāo)運(yùn)算的分解
將步驟(1)中分解好的函數(shù)輸入帶入到目標(biāo)運(yùn)算y=ab中可以得到由掩碼輸入構(gòu)成的新的函數(shù)表達(dá)式,由其組成項(xiàng)aibj,1≤i,j≤d+1,構(gòu)成相應(yīng)的輸出函數(shù)需要滿足正確性:y=,其中Sout表示輸出函數(shù)的個(gè)數(shù).另外為了達(dá)到安全防護(hù)的目的,d階門限實(shí)現(xiàn)需要滿足d階不完整性,這里需要使得每個(gè)輸出函數(shù)yk只包含一個(gè)組成項(xiàng)aibj,即輸出函數(shù)的個(gè)數(shù)滿足Sout=(d+1)(d+1).待防護(hù)的密碼算法往往包含多輪的運(yùn)算,因此會(huì)出現(xiàn)本階段運(yùn)算輸出作為下一階段輸入的情況,為滿足下一階段的輸入均勻性的要求,需要對(duì)輸出函數(shù)進(jìn)行重掩碼,另外為了防止毛刺的影響需要在輸出之前用寄存器進(jìn)行存儲(chǔ);最后將(d+1)(d+1)份額的輸出通過相互異或的方式壓縮為d+1份作為下一階段門限防護(hù)的輸入.
針對(duì)故障攻擊的威脅,綜合防護(hù)方案利用乘法感染技術(shù)實(shí)現(xiàn)相應(yīng)的防護(hù).感染防護(hù)思想包括多重感染防護(hù)和只針對(duì)密文輸出的單層感染防護(hù),考慮到只針對(duì)末輪運(yùn)算進(jìn)行故障注入攻擊的情況下多重感染將會(huì)失效,因此使用單重感染技術(shù)從而實(shí)現(xiàn)更少的資源占用.具體的實(shí)現(xiàn)方法是在原始SM4門限實(shí)現(xiàn)的基礎(chǔ)上,冗余實(shí)現(xiàn)一路完全相同的SM4門限實(shí)現(xiàn),將原始實(shí)現(xiàn)的輸出和冗余實(shí)現(xiàn)的輸出相互異或,然后利用感染函數(shù)將異或結(jié)果進(jìn)行隨機(jī)化,最后將感染函數(shù)的輸出異或上原始加密的密文形成最終輸出.在感染函數(shù)中,為了達(dá)到對(duì)于故障注入位置以及傳播方式的防護(hù),采用了一個(gè)隨機(jī)數(shù)控制的置換操作以使得故障注入的錯(cuò)誤隨機(jī)擴(kuò)散,增加攻擊者的攻擊難度,然后使用乘法感染技術(shù)達(dá)到對(duì)于故障密文隨機(jī)化的目的.此外為了防止乘法感染部分側(cè)信道信息的泄露,在乘法感染部分也進(jìn)行了門限實(shí)現(xiàn)的防護(hù),這種門限實(shí)現(xiàn)的方式也有助于改善乘法感染中隨機(jī)數(shù)為0時(shí)的缺陷,達(dá)到了更好的故障防護(hù)效果,具體的更詳盡的安全性分析見2.4節(jié).
考慮到側(cè)信道攻擊技術(shù)的發(fā)展和相應(yīng)設(shè)備的更新,針對(duì)密碼算法實(shí)現(xiàn)能量分析攻擊的代價(jià)越來越低廉,一階門限實(shí)現(xiàn)的防護(hù)能力是有限的,因此本文在SM4算法綜合防護(hù)實(shí)例中采用二階門限實(shí)現(xiàn),也就是3-share 的2 階門限實(shí)現(xiàn)方案進(jìn)行側(cè)信道方面的防護(hù),在實(shí)際的應(yīng)用中可以根據(jù)不同的安全需求擴(kuò)展到更高階的門限實(shí)現(xiàn).SM4 算法的綜合防護(hù)實(shí)現(xiàn)主要由SM4 算法二階門限實(shí)現(xiàn)部分和乘法感染部分組成,下面分別進(jìn)行詳細(xì)的介紹.
SM4 算法是32 輪Feistel 結(jié)構(gòu)的分組算法,分組長度和密鑰長度都是128 bit,加密結(jié)構(gòu)和解密結(jié)構(gòu)相同,只是加密密鑰和解密密鑰逆序,并且密鑰擴(kuò)展部分和加密結(jié)構(gòu)類似,因此本文著重關(guān)注加密運(yùn)算的防護(hù)實(shí)現(xiàn),其防護(hù)實(shí)現(xiàn)可以方便地?cái)U(kuò)展到解密算法和密鑰擴(kuò)展結(jié)構(gòu).SM4以字為單位進(jìn)行加密運(yùn)算,包含32輪相同的輪運(yùn)算,首輪輸入的四個(gè)字可以表示為:(X0,X1,X2,X3);每輪迭代的輪函數(shù)可以表示為:Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki),其中rki為輪密鑰,0≤i≤31,由初始密鑰擴(kuò)展得到的,T由兩部分組成,包括非線性運(yùn)算部分和線性運(yùn)算部分,非線性部分由四個(gè)相同的S盒運(yùn)算組成,線性部分為移位操作,本實(shí)現(xiàn)中為了減少面積的消耗只實(shí)現(xiàn)一個(gè)S 盒,每輪執(zhí)行4 次S 盒運(yùn)算得到我們的輸出.SM4 算法2 階門限實(shí)現(xiàn)的步驟如下:
(1)使用隨機(jī)數(shù)將輸入明文從128 bit擴(kuò)展為128×3 bit 的輸入,分別存儲(chǔ)在3 個(gè)128 bit 的寄存器中,(X0,X1,X2,X3)代表原始輸入4 個(gè)字的3-share,也就是分別為32×3 bit,整個(gè)SM4 加密包括32 輪的運(yùn)算,每一輪的運(yùn)算需要11 個(gè)時(shí)鐘周期,下面詳細(xì)介紹第i輪運(yùn)算,0≤i≤31.
(2)第0 個(gè)時(shí)鐘周期,Xi+1,Xi+2,Xi+3與本輪的輪密鑰相互異或生成32×3 bit結(jié)果.
(3)第0 到第3 個(gè)時(shí)鐘周期將步驟(2)生成的32×3 bit 的結(jié)果構(gòu)造為本輪所需的4 個(gè)S 盒運(yùn)算的輸入賦給S 盒,每個(gè)時(shí)鐘的輸入為8×3 bit,5 個(gè)時(shí)鐘后產(chǎn)生輸出,具體的S盒實(shí)現(xiàn)在下文將詳細(xì)描述.
(4)第6 到第9 個(gè)時(shí)鐘周期依次取出4 個(gè)S 盒的輸出,每個(gè)S盒的輸出為8×3 bit.
(5)第10 個(gè)時(shí)鐘周期將得到的4 次S 盒的輸出組合為32×3 bit 的數(shù)據(jù),其中每個(gè)份額32 bit 分別執(zhí)行線性移位操作,將線性移位后的32×3 bit數(shù)據(jù)與Xi相互異或得到輪運(yùn)算結(jié)果.
(6)經(jīng)過32 輪輪運(yùn)算后,逆序輸出即可得到最終的加密結(jié)果.
本方案中基于有限域的方式實(shí)現(xiàn)SM4算法的S盒.AES算法S-box可以看作是f(x)=x8+x4+x3+x+1上的求逆運(yùn)算和仿射運(yùn)算的組合,本文同樣參考文獻(xiàn)[22]的原理將SM4算法S盒運(yùn)算看作為此不可約多項(xiàng)式上求逆運(yùn)算和仿射運(yùn)算的組合,從而可以方便地將AES S盒的構(gòu)造應(yīng)用到SM4 S 盒運(yùn)算中去,具體可以得到SM4 算法S盒的代數(shù)表達(dá)式為:S(X)=A2(A1X+C1)-1+C2)其中A1、A2是仿射矩陣,C1=(0 0 0 0 0 0 0 1),C2=(1 1 0 1 0 0 1 1),A1、A2表示如下.
通過代數(shù)表達(dá)式可以看到,S 盒的非線性運(yùn)算為GF(28)上的求逆運(yùn)算,為方便門限實(shí)現(xiàn),本文對(duì)其進(jìn)行復(fù)合域分解.參考文獻(xiàn)[23]的復(fù)合域?qū)崿F(xiàn)方式,將GF(28)上的求逆運(yùn)算轉(zhuǎn)換為GF(2)上的運(yùn)算.為結(jié)構(gòu)圖表述更加清晰,將其表示為GF(24)上的運(yùn)算,其大致結(jié)構(gòu)如圖2 所示,主體部分包含非線性的3 個(gè)GF(24)上乘法器運(yùn)算和一個(gè)GF(24)上的求逆運(yùn)算(圖中虛線部分),以及由常數(shù)乘運(yùn)算以及平方運(yùn)算組成的線性運(yùn)算L1;對(duì)于乘法運(yùn)算,最終被轉(zhuǎn)換為GF(2)上的乘法運(yùn)算;對(duì)于求逆運(yùn)算,首先將GF(24)上的求逆運(yùn)算轉(zhuǎn)換為GF(22)上的運(yùn)算,其包含3個(gè)GF(22)上的乘法運(yùn)算以及由常數(shù)乘以及平方運(yùn)算組合的線性運(yùn)算L2,GF(22)上的求逆運(yùn)算是線性運(yùn)算,表示為L3,GF(22)上的乘法運(yùn)算同樣轉(zhuǎn)換為GF(2)上的乘法運(yùn)算.M1和M2代表仿射運(yùn)算和逆仿射運(yùn)算.
本文的S盒門限實(shí)現(xiàn)在圖2復(fù)合域?qū)崿F(xiàn)的基礎(chǔ)上參考文獻(xiàn)[24]進(jìn)行防護(hù)設(shè)計(jì),為了防止毛刺的影響以及保持門限實(shí)現(xiàn)的2階不完整性,需要使用寄存器存儲(chǔ)相應(yīng)運(yùn)算的輸出結(jié)果,根據(jù)安全需要S盒的2階門限實(shí)現(xiàn)需要分為6個(gè)階段進(jìn)行處理,每個(gè)階段進(jìn)行的操作如下所述.
圖2 SM4算法S盒復(fù)合域?qū)崿F(xiàn)
階段1此階段包含兩個(gè)線性操作,首先是A1X+C1仿射操作,其次是基轉(zhuǎn)換的轉(zhuǎn)置矩陣,為了降低實(shí)現(xiàn)電路的復(fù)雜度,這里兩種線性操作合二為一,為了安全性的需要,本階段的輸出需要使用寄存器存儲(chǔ)以供下一階段運(yùn)算的使用.
階段2此階段主要包含一個(gè)GF(24)上的乘法運(yùn)算以及一個(gè)線性運(yùn)算,線性運(yùn)算包含乘以常數(shù)操作以及平方操作兩個(gè)運(yùn)算,這里將線性運(yùn)算和非線性運(yùn)算相結(jié)合以減少輸出份額的個(gè)數(shù),從而減少存儲(chǔ)所需寄存器的個(gè)數(shù);這里輸入為3-share 的,輸出是9-share,L1代表這一階段的線性運(yùn)算,以(a1,a2,a3),(b1,b2,b3)代表此階段輸入a,b的 3-share 隨機(jī)掩碼,以(c1,c2,c3,c4,c5,c6,c7,c8,c9)代表門限輸出,那么此階段的運(yùn)算可以表示為如下的表達(dá):
其中⊕代表4bit的異或運(yùn)算,?代表4bit的乘法運(yùn)算,由GF(2)上的乘法組合而成.一方面為了滿足下一階段輸入的均勻性,另一方面為了達(dá)到抵抗多變量攻擊的目的,這里對(duì)于(c1,c2,c3,c4,c5,c6,c7,c8,c9)使用隨機(jī)數(shù)(r1,…,r6)進(jìn)行重掩碼,形成輸出(O1,…,O9),掩碼方式如圖3所示,并且對(duì)于輸出使用寄存器暫存.
圖3 重掩碼
階段3此階段在GF(22)上進(jìn)行運(yùn)算,類似于階段2 的運(yùn)算,不過參與相應(yīng)運(yùn)算的數(shù)值從4bit變?yōu)榱?bit.這里需要對(duì)上一階段產(chǎn)生的9-share 輸出壓縮為3-share,這里需要小心操作,避免出現(xiàn)脫掩碼情況的出現(xiàn),本文實(shí)現(xiàn)中以O(shè)1?O4?O7,O2?O5?O8和O3?O6?O9的形式構(gòu)造3-share 的輸入,此階段的輸出同樣需要進(jìn)行類似于階段2的重掩碼,并對(duì)于輸出使用寄存器進(jìn)行暫存.
階段4此階段包含兩個(gè)GF(22)乘法運(yùn)算,首先需要將上階段的9-share 壓縮為3-share,然后經(jīng)過一個(gè)GF(22)上的求逆運(yùn)算L3,GF(22)上的求逆運(yùn)算是線性運(yùn)算只需要拉線操作計(jì)算產(chǎn)生3-share輸出作為乘法運(yùn)算的一個(gè)公共輸入,另外結(jié)合階段3 的輸入構(gòu)造兩個(gè)GF(22)乘法的其他輸入,兩個(gè)乘法運(yùn)算的9-share輸出相互結(jié)合形成9-share的4 bit輸出,對(duì)這個(gè)9-share輸出進(jìn)行與階段2相同的重掩碼,并將掩碼結(jié)果存儲(chǔ)在寄存器中.
階段5此階段類似于階段4,只不過相應(yīng)運(yùn)算從GF(22)上的乘法運(yùn)算變?yōu)镚F(24)上的乘法運(yùn)算;首先需要將上階段的9-share 按照階段3 的方式壓縮為3-share 作為兩個(gè)乘法的公共輸入,另外結(jié)合階段2 的輸入構(gòu)造兩個(gè)GF(24)上的乘法的其他輸入,兩個(gè)乘法運(yùn)算的9-share 輸出相互結(jié)合形成9-share 的8 bit 輸出,對(duì)這個(gè)9-share 輸出進(jìn)行階段2 相同的重掩碼,存儲(chǔ)在寄存器中.
階段6此階段包含三個(gè)線性運(yùn)算,首先將上階段的9-share 輸出按照階段3 的方式壓縮為3-share,其次是基的轉(zhuǎn)置矩陣,最后是SM4 算法S 盒的仿射運(yùn)算,類似于階段1,本階段同樣將轉(zhuǎn)置操作和仿射運(yùn)算相互結(jié)合以降低實(shí)現(xiàn)電路的復(fù)雜度.
在SM4 算法原始二階門限實(shí)現(xiàn)的基礎(chǔ)上實(shí)現(xiàn)一路與原始門限實(shí)現(xiàn)完全相同的冗余SM4 算法二階門限實(shí)現(xiàn),冗余實(shí)現(xiàn)的輸入和采用的隨機(jī)數(shù)與原始實(shí)現(xiàn)完全相同.將原始實(shí)現(xiàn)的輸出和冗余實(shí)現(xiàn)的輸出相互異或形成128×3 bit 的輸出.如果沒有故障注入時(shí),異或輸出為0,經(jīng)過感染結(jié)構(gòu)后的輸出為0,最后異或到原始密文形成最終輸出,不改變密文輸出結(jié)果,保證了無故障注入時(shí)算法的正確性.當(dāng)有故障注入時(shí),異或輸出不為0,然后將128×3 bit 的輸出以32×3 bit 為一組分為4 組,分別進(jìn)行感染防護(hù),其中被故障注入影響的字節(jié)表現(xiàn)為隨機(jī)數(shù),與原始實(shí)現(xiàn)的輸出相互異或形成最終的密文輸出,相應(yīng)的可被利用的故障密文也被隨機(jī)化了,從而實(shí)現(xiàn)了相應(yīng)的故障防護(hù).其中感染防護(hù)由隨機(jī)置換和乘法感染兩部分組成,具體結(jié)構(gòu)如圖4所示.
圖4 感染函數(shù)
為了隱藏故障注入的位置以及故障的傳播路徑,在進(jìn)行感染操作之前進(jìn)行一個(gè)32 bit的隨機(jī)置換操作.具體的在進(jìn)行乘法感染操作之前,先進(jìn)行32 bit 的置換操作,初始置換操作(位置標(biāo)號(hào)從0開始)如下:
此置換由一個(gè)5 bit的隨機(jī)數(shù)R控制,以此增加其隨機(jī)性,具體是在每一次感染的時(shí)候?qū)⒊跏贾脫Q進(jìn)行一個(gè)隨機(jī)的循環(huán)移位操作后作為此次感染的置換操作.
經(jīng)過置換操作后的32×3 bit 的輸出以8×3 bit 為一組和隨機(jī)數(shù)(r1,r2,r3,r4)進(jìn)行GF(28)上的以f(x)=x8+x4+x3+x+1 為不可約多項(xiàng)式的有限域乘法運(yùn)算,這里的乘法運(yùn)算為了防止側(cè)信道信息的泄露也使用了二階門限實(shí)現(xiàn)進(jìn)行防護(hù),能夠有效改善乘法感染中隨機(jī)數(shù)為0 時(shí)的缺陷.此外感染防護(hù)中的隨機(jī)置換對(duì)于故障傳播途徑進(jìn)行了隨機(jī)化,使得攻擊者無法直接進(jìn)行攻擊,從而進(jìn)一步增強(qiáng)了故障防護(hù)效果.
2.4.1 針對(duì)側(cè)信道攻擊的安全性
綜合防護(hù)方案對(duì)于側(cè)信道攻擊的防護(hù)能力繼承于門限實(shí)現(xiàn).一個(gè)d階的門限實(shí)現(xiàn)滿足輸入的均勻性,d階不完整性;d階能量攻擊可以同時(shí)利用d個(gè)綜合防護(hù)方案的中間值的能量信息進(jìn)行攻擊,而門限實(shí)現(xiàn)的d階不完整性使得這d個(gè)中間值至少和原始中間值的一個(gè)分量相互獨(dú)立,也就是和原始中間值成相互獨(dú)立的關(guān)系,使得d 階能量攻擊者能夠利用的信息與原始中間狀態(tài)相互獨(dú)立,從而實(shí)現(xiàn)了d階能量攻擊下安全性.
具體到本文的SM4 算法的綜合防護(hù)實(shí)現(xiàn),本文的綜合防護(hù)實(shí)現(xiàn)中加密部分和乘法感染部分都基于2 階門限實(shí)現(xiàn)進(jìn)行了防護(hù),其滿足2 階不完整性,一個(gè)2 階能量攻擊者可以同時(shí)利用2 個(gè)綜合防護(hù)的中間值的能量信息,這2個(gè)中間值和原始中間值呈現(xiàn)相互獨(dú)立的關(guān)系,使得2階能量攻擊者能夠利用的信息與原始中間狀態(tài)相互獨(dú)立,從而實(shí)現(xiàn)了2階能量攻擊的安全性.
2.4.2 針對(duì)故障攻擊的安全性
數(shù)值類的故障攻擊如差分故障攻擊,其攻擊條件首先是需要知道故障密文,其次需要分析故障傳播路徑,因此可以從這兩方面實(shí)現(xiàn)相應(yīng)的防護(hù).在本文綜合防護(hù)中,一方面隨機(jī)置換的添加使得故障密文擴(kuò)散呈現(xiàn)隨機(jī)性,增加了攻擊者對(duì)于故障攻擊位置以及傳播邏輯分析的難度,另一方面乘法感染技術(shù)使得輸出的故障密文呈現(xiàn)隨機(jī)性,破壞了輸出的故障密文和原始故障密文的相關(guān)性,使得需要故障密文的故障攻擊無法順利進(jìn)行,從而實(shí)現(xiàn)了對(duì)于數(shù)值類故障攻擊的防護(hù).
2.4.3 針對(duì)組合攻擊的安全性
如前文提到的乘法感染在隨機(jī)數(shù)為0 時(shí)存在缺陷,此時(shí)能耗信息較小,然后攻擊者可以依據(jù)這一點(diǎn)判斷出隨機(jī)數(shù)為0時(shí)的故障注入,篩選出故障攻擊需要的故障密文,從而實(shí)施正常的依賴故障密文的故障攻擊,此類攻擊方法屬于一種組合攻擊.普通的GF(28)的乘法運(yùn)算中,只有8 bit 的隨機(jī)數(shù)參與運(yùn)算,找到一個(gè)8 bit 的為0 隨機(jī)數(shù)的情況,相對(duì)容易,在本文的綜合防護(hù)中對(duì)于乘法感染同樣實(shí)現(xiàn)了門限實(shí)現(xiàn)防護(hù),由于進(jìn)行3-share 的門限實(shí)現(xiàn)防護(hù),只有在3×8 bit 的隨機(jī)數(shù)同時(shí)為零的情況下,功耗才容易被分辨出來,實(shí)現(xiàn)的困難性大大增加;同時(shí)即使找到了3×8 bit 隨機(jī)數(shù)為0 的情況,其故障攻擊仍然存在困難性,因?yàn)楸疚牡木C合防護(hù)的乘法感染防護(hù)中進(jìn)行了隨機(jī)置換操作,隨機(jī)化了故障傳播的路徑,使得實(shí)際的故障攻擊的邏輯分析仍然存在著困難性,因此可以實(shí)現(xiàn)對(duì)于此類組合攻擊的防護(hù).
另外本文的綜合防護(hù)方案對(duì)于故障注入-探測(cè)類型的組合攻擊同樣有著抵抗能力,在此類攻擊中,攻擊者通常先通過故障注入的方式將某些中間值置位為0,然后通過探測(cè)的方式實(shí)現(xiàn)對(duì)于原始中間值的獲取.在本文的綜合防護(hù)方案中,即使注入了對(duì)應(yīng)的故障,如將某些中間值分量置位為0,這同樣不會(huì)導(dǎo)致敏感信息的泄露,因?yàn)殚T限實(shí)現(xiàn)的d階不完整性使得d階探測(cè)的攻擊者仍然無法獲取原始中間值的有效信息.
本文在SAKURA-X 評(píng)估板上實(shí)現(xiàn)了我們的綜合防護(hù)方案,SAKURA-X 是一種專門用來進(jìn)行側(cè)信道防護(hù)方案實(shí)現(xiàn)和評(píng)估的開發(fā)板,主要包含兩個(gè)FPGA(Field Programmable Gate Array),一個(gè)是評(píng)估FPGA,用于實(shí)現(xiàn)待測(cè)方案,我們的綜合防護(hù)方案實(shí)現(xiàn)在其中;另一個(gè)是控制FPGA,用來控制評(píng)估FPGA 和上位機(jī)的通信,為避免噪聲的影響,隨機(jī)數(shù)發(fā)生器實(shí)現(xiàn)在其中,使用時(shí)傳輸相應(yīng)的隨機(jī)數(shù)到評(píng)估FPGA中.
3.2.1 側(cè)信道安全性評(píng)估實(shí)驗(yàn)
在評(píng)估環(huán)境設(shè)置方面,我們采用便于側(cè)信道攻擊的方式進(jìn)行評(píng)估實(shí)驗(yàn),比如:(1)為了降低采集到的功耗信息的噪聲,提高信噪比,本文將隨機(jī)數(shù)的產(chǎn)生邏輯和綜合防護(hù)的實(shí)現(xiàn)放在了不同的FPGA 中;(2)為了能夠使得采集到的功耗曲線更加清晰,我們使得綜合防護(hù)實(shí)現(xiàn)工作在低頻狀態(tài),具體在本文的實(shí)現(xiàn)是工作在375 kHz 的時(shí)鐘下.在如此便利于攻擊者的情況下,如果可以驗(yàn)證本文防護(hù)方案的安全性,那么在實(shí)際的攻擊環(huán)境中,綜合防護(hù)的安全性是可以得到保障的.
我們采用測(cè)試向量泄露評(píng)估技術(shù)(Test Vector Leakage Assessment,TVLA)[25]進(jìn)行側(cè)信道安全性的評(píng)估,它是一種從信息泄露角度評(píng)估防護(hù)方案安全性的一種技術(shù).其中不針對(duì)具體中間值的non-specific TVLA 評(píng)估技術(shù)是應(yīng)用最廣泛的評(píng)估技術(shù),需要收集兩組分別是固定輸入和隨機(jī)輸入的功耗曲線,當(dāng)評(píng)估高階泄露時(shí),需要進(jìn)行合適的預(yù)處理,預(yù)處理后的曲線作為TVLA 待測(cè)曲線;其通過t-test 技術(shù)評(píng)估兩組曲線分布均值的差異性,從而判斷是否有泄露的產(chǎn)生.本文選擇正負(fù)4.5 作為統(tǒng)計(jì)量的閾值,其置信度大于99.999%,當(dāng)其統(tǒng)計(jì)值低于閾值時(shí),則表明通過了測(cè)試,當(dāng)統(tǒng)計(jì)值超過閾值時(shí),則表明其存在泄露點(diǎn),相應(yīng)的防護(hù)方案可能存在易損點(diǎn),d階TVLA 與d階差分能量分析相對(duì)應(yīng),當(dāng)其通過TVLA,則可認(rèn)為相應(yīng)的防護(hù)方案是d階差分能量分析安全的.S 盒是防護(hù)方案中主要的非線性組件,S 盒的側(cè)信道安全性可以反映整個(gè)防護(hù)方案的安全性,本文主要測(cè)試S 盒的側(cè)信道安全性.
本文使用PicoScope 3206D 示波器在125 MHz 的時(shí)鐘下對(duì)于待測(cè)方案進(jìn)行功耗采集,分別在隨機(jī)數(shù)關(guān)閉(無防護(hù))和隨機(jī)數(shù)開啟(有防護(hù))狀態(tài)下采集100 萬功耗曲線進(jìn)行了TVLA 安全性評(píng)估.其一階TVLA 評(píng)估結(jié)果如圖5 所示,其二階TVLA 評(píng)估結(jié)果如圖6 所示.
圖5 一階TVLA測(cè)試結(jié)果
圖6 二階TVLA測(cè)試結(jié)果
圖中橫軸代表S 盒執(zhí)行過程中不同時(shí)刻采集到的樣本點(diǎn),縱軸代表t測(cè)試統(tǒng)計(jì)量.從實(shí)驗(yàn)結(jié)果中,我們看到未添加防護(hù)的情況下,統(tǒng)計(jì)量都超過了4.5,添加防護(hù)后統(tǒng)計(jì)量都未超過4.5,驗(yàn)證了我們的防護(hù)方案在側(cè)信道安全方面具備抵抗一階差分能量攻擊和二階差分能量攻擊的防護(hù)能力.
3.2.2 故障攻擊安全性評(píng)估
我們通過對(duì)SM4 算法的最后一輪的S-box 輸入注入故障來檢測(cè)綜合防護(hù)方案的故障防護(hù)的安全性,通過分析經(jīng)過感染結(jié)構(gòu)的故障密文的隨機(jī)性驗(yàn)證綜合防護(hù)方案的故障防護(hù)的能力.具體的,選擇SM4 算法最后一輪運(yùn)算中的任意一個(gè)S-box 運(yùn)算,在綜合防護(hù)實(shí)現(xiàn)代碼中將選定的S-box 輸入置位為常數(shù),從而實(shí)現(xiàn)對(duì)于故障注入的模擬,然后將此代碼生成的流文件下載到FPGA 中去,然后執(zhí)行100 萬次明文、密鑰相同的運(yùn)算,然后記錄密文輸出中被故障注入影響到的故障密文,也就是共400 萬字節(jié)的故障密文,最后統(tǒng)計(jì)故障密文的隨機(jī)性,如果故障密文呈現(xiàn)良好的隨機(jī)性,那么證明本文的防護(hù)方案起到了針對(duì)故障攻擊的防護(hù)效果.
對(duì)于記錄的故障密文使用NIST SP800-22 給出的項(xiàng)目和參數(shù)進(jìn)行隨機(jī)性檢測(cè),檢測(cè)中單樣本大小是20000 B,總樣本數(shù)是200,其檢測(cè)結(jié)果如表1所示.
表1 隨機(jī)性檢測(cè)的統(tǒng)計(jì)結(jié)果如下(通過檢測(cè)的百分比:閾值下限96.889)
檢測(cè)結(jié)果表明故障密文通過了隨機(jī)性檢測(cè),經(jīng)過感染后的故障密文具有良好的隨機(jī)性,可以達(dá)到相應(yīng)的防護(hù)效果,驗(yàn)證了綜合防護(hù)方案對(duì)于故障攻擊的安全性.
我們使用ISE 14.7 驗(yàn)證了SM4 算法綜合防護(hù)實(shí)現(xiàn)的功能性,使用Synopsys 2016.03 在NanGate 45 nm 公開元件庫下評(píng)估了相應(yīng)的面積消耗,無防護(hù)情況下的SM4 算法的面積消耗如表2 所示;SM4 算法綜合防護(hù)的面積消耗如表3 所示,其中“SM4 原始門限實(shí)現(xiàn)”與“SM4 冗余門限實(shí)現(xiàn)”完全相同,面積消耗完全一樣,因此只展開列出了“SM4 原始門限實(shí)現(xiàn)”組成部分的面積消耗情況.
表2 SM4算法無防護(hù)實(shí)現(xiàn)面積消耗
表3 SM4算法綜合防護(hù)實(shí)現(xiàn)面積消耗
本文中SM4算法綜合防護(hù)方案每輪使用11個(gè)時(shí)鐘周期,共32 輪,所以整個(gè)防護(hù)方案使用了352 個(gè)時(shí)鐘周期;在隨機(jī)數(shù)方面,每個(gè)S 盒運(yùn)算使用了108 bit 的隨機(jī)數(shù),感染結(jié)構(gòu)中的隨機(jī)置換部分使用了20 bit 的隨機(jī)數(shù),乘法感染部分使用了384 bit的隨機(jī)數(shù).
考慮到灰盒模型攻擊的巨大威脅,本文結(jié)合門限實(shí)現(xiàn)和感染防護(hù)的思想提出了一種綜合防護(hù)方案,通過門限實(shí)現(xiàn)彌補(bǔ)了乘法感染故障防護(hù)中隨機(jī)數(shù)為0 時(shí)的缺陷,另外通過添加隨機(jī)置換的方式掩蓋了故障注入位置和故障傳播邏輯,進(jìn)一步強(qiáng)化了對(duì)于故障攻擊的防護(hù)能力.并且本文以SM4 算法為例在FPGA 上實(shí)際實(shí)現(xiàn)了一個(gè)二階綜合防護(hù)方案,為SM4 算法針對(duì)側(cè)信道攻擊和故障攻擊的綜合防護(hù)提供了一種方案.最后本文通過安全性分析以及實(shí)際的實(shí)驗(yàn)驗(yàn)證了SM4 防護(hù)方案的有效性,并評(píng)估了相應(yīng)的實(shí)現(xiàn)代價(jià).