曾 輝 , 李 飛 , 高獻(xiàn)偉 , 錢 丹
(1.成都信息工程學(xué)院 四川 成都 610225;2.北京電子科技學(xué)院 電子信息工程系,北京 100070)
近年來功耗分析技術(shù)對密碼芯片的安全產(chǎn)生了嚴(yán)重的威脅,功耗分析屬于旁路攻擊技術(shù)的一種且威脅性最高。而差分功耗分析(DPA)是功耗分析攻擊中的一種主要手段[1]。攻擊者利用通過對硬件加密設(shè)備中的CMOS電路鎖定時(shí)產(chǎn)生的動(dòng)態(tài)能量消耗曲線等邊信道信息進(jìn)行測量和分析,采用非侵入的方式提取設(shè)備的加密密鑰等秘密信息。所以攻擊者者對被攻擊器件不需要有深入地了解就能破解例如DES、AES等加密算法。與傳統(tǒng)破解加密芯片的方法相比,DPA更隱蔽性而且更難防范。密碼芯片應(yīng)用于人們生活中的各個(gè)領(lǐng)域,因而對密碼芯片有關(guān)DPA等攻擊技術(shù)的研究很有必要。
為了防范差分功耗分析,以往學(xué)者提出多種抗功耗分析的方法。大致有兩個(gè)方向:一種是從硬件條件為出發(fā)點(diǎn)對電路cell級的功耗平均和掩蓋方法進(jìn)行研究,提出相應(yīng)的措施防止有關(guān)密鑰信息的泄露。但是這些方法法大多需要較大的硬件代價(jià),也需要特殊的后端工具的支持,不易實(shí)現(xiàn)。另外一種就是從軟件條件為出發(fā)點(diǎn),也就是對加密算法本身進(jìn)行優(yōu)化。其中掩碼技術(shù)(Mask)就是一種主要的手段,在加密過程中引入與實(shí)際處理數(shù)據(jù)不相關(guān)的另外—個(gè)變量,從而使加密器件所泄漏的功耗信息與實(shí)際處理數(shù)據(jù)相關(guān)性大大降低。這種方法易于實(shí)現(xiàn)而且能夠很好的防范一階差分功耗攻擊。
文中首先以FPGA為實(shí)驗(yàn)平臺,實(shí)現(xiàn)對AES(Advanced Encryption Standard)的加密流程,然后對沒有進(jìn)行防御的AES算法進(jìn)行DPA攻擊,證明DPA等功耗分析攻擊對加密芯片進(jìn)行破解的可行性。然后對AES加密算法的各個(gè)流程通過Mask技術(shù)優(yōu)化,以達(dá)到有效地抵御一階或更高階的DPA分析。最后實(shí)驗(yàn)結(jié)果證明文中防御措施的可行性和正確性,并分析這種方法的不足之處。
差分功耗分析攻擊的基本思想是通過分析密碼設(shè)備的能量消耗來獲得密鑰[2]。本質(zhì)上這種攻擊利用了兩類能量消耗依賴性:數(shù)據(jù)依賴性和操作依賴性。功耗分析攻擊可分為簡單功耗分析(SPA)和差分功耗分析(DPA)。
簡單功耗分析(SPA)是直接簡單的對密碼算法運(yùn)算時(shí)的能量信號做分析,SPA利用對于不同的操作和不同的數(shù)據(jù),各能量跡各尖峰形狀不同這一特性進(jìn)行攻擊。差分功耗分析(DPA)則是分析能量間的差異性,并從這種差異性來尋求密鑰。DPA分析固定時(shí)刻的能量消耗與被處理數(shù)據(jù)之間的依賴關(guān)系。因此,DPA攻擊僅僅關(guān)注能量跡的數(shù)據(jù)依賴性。
差分功耗分析攻擊是最普遍的能量分析攻擊,與SPA攻擊相比實(shí)施DPA攻擊需要大量的能量跡。
首先分析一次AES加密操作的能量消耗與明文第一個(gè)字節(jié)MSB之間的依賴關(guān)系,記該比特位d(明文第一個(gè)字節(jié)的最高有效位)。為了確定d對能量消耗的影響,測量微控制器分別加密1 000個(gè)隨機(jī)明文時(shí)的能量消耗。這樣可以獲得約500條當(dāng)d=0時(shí)加密操作的能量跡,以及約500條當(dāng)d=1時(shí)的加密操作能量跡。
確定d對能量消耗影響的一個(gè)簡單方法就是計(jì)算平均值之差,即分別計(jì)算所有d=0時(shí)的能量跡的平均值(以1 μs為單位的時(shí)間點(diǎn)上對500個(gè)能量值進(jìn)行平均)與所有當(dāng)d=1的能量跡的平均值。以獲得一條d=1的平均能量跡和一條d=0的平均能量跡。將這兩條平均能量跡作減法運(yùn)算??梢缘玫綀D1。這些尖峰表明了微控制器能量消耗依賴于d的那些時(shí)間。在這些時(shí)刻,微控制器所執(zhí)行的指令要么直接對d進(jìn)行處理,要么所處理的某些數(shù)據(jù)依賴于d。
圖1 d=0和d=1時(shí)的平均能量跡之差Fig.1 The difference of average energy about d=0 and d=1
由圖1可以看出最大尖峰大概位于76 μs,檢查一下微控制器所執(zhí)行的程序代碼就可以證實(shí)在這一時(shí)刻加載了明文的第一個(gè)字節(jié),值d是該字節(jié)的MSB,加載操作的能量消耗對d有很強(qiáng)的依賴性。因此利用這一特性就可以確定微控制器使用的密鑰。
對于兩個(gè)獨(dú)立的樣本空間(X1,…,Xn)和(Y1,…,Yn),且Xi~N(μx,σ),Yi~N(μy,σ)。 對于假設(shè) μx-μy=0 和 μx-μy≠0有3種概率分布的可能性,其中一種是驗(yàn)證假設(shè)對真實(shí)值的影響大小。如假設(shè)正確,真實(shí)值和假設(shè)之間必然有一定的聯(lián)系并使用下述模型表示。樣本期望和方差是DPA攻擊的兩種假設(shè)檢驗(yàn)的方法。協(xié)方差σxy和相關(guān)度ρ(x,y)分別表示為=E(XY)-E(X)E(Y)對于獨(dú)立隨機(jī)變量X和Y,ρ(X,Y)=0。 對于普通隨機(jī)變量變量 X和 Y,使用假設(shè)H0:ρ=0和H1:ρ≠0,即被稱為計(jì)算樣本集差異的相關(guān)性方法。最常用的距估計(jì)是用樣本均值來估計(jì)總體均值E(X),即E攻擊者通常使用T測試比較H0和H1來確定,如果密鑰選擇正確,則測得的軌跡應(yīng)存在統(tǒng)計(jì)差別,具體表現(xiàn)為軌跡上有明顯的尖峰。
由上可知這種DPA攻擊利用統(tǒng)計(jì)學(xué)方法來破解密鑰是一種很強(qiáng)有力的邊道攻擊技術(shù)。
DPA攻擊存在一種一般性的攻擊策略。該策略包括5個(gè)步驟:
第一步:選擇所執(zhí)行算法的某個(gè)中間值。這個(gè)中間值必須是一個(gè)函數(shù)f(d,k),其中k是密鑰的一小部分。在大部分攻擊場景中,d不是明文就是密文(解密過程)。滿足這個(gè)條件的中間值可用于恢復(fù)k。
第二步:測量能量消耗。測量密碼設(shè)備在加密或解密時(shí)的能量消耗。
第三步:計(jì)算假設(shè)中間值。攻擊的下一步是對于每一個(gè)可能的k值,計(jì)算對應(yīng)的假設(shè)中間值。
第四步:將中間值映射為能量消耗值。v=0和v=1。
第五步:比較假設(shè)能量消耗值和能量跡。
AES是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)[3]。AES算法分組長度為128 bit,密鑰長度可分別為128 bit/192 bit/256 bit,文中以128 bit密鑰長度的AEB為例來說明。AES算法的加密和解密過程分別有10輪迭代,加密過程每一輪迭代包括字節(jié)代換(ByteSubstitute)、行移位(ShiftRow)、列混 淆(MixColumn)、輪密鑰加(RoundKey)4 個(gè)步驟,但最后一輪沒有列混合;解密過程每一輪迭代包括行移位(ShiftRow)求逆、字節(jié)代換(ByteSubstitute)求逆、輪密鑰加(RoundKey)、列混淆(MixColumn)求逆4個(gè)步驟,但最后一輪不包括列混合求逆。種子密鑰擴(kuò)展生成輪迭代所需要的10組子密鑰。AES算法的加密與解密流程如圖2所示。
圖2 AES算法加解密過程Fig.2 AES encryption algorithm process
為了下文進(jìn)行DPA攻擊測試,首先要做的就是基于FPGA的AES加密算法的實(shí)現(xiàn)。文中采用Altera公司的CycloneⅡ系列中的EP2C8Q240C8作為AES加密和DPA攻擊對象,在QuartusⅡ8.1軟件中通過使用verilog硬件描述語言編寫程序完成AES加密操作。加密平臺可具體分為5個(gè)模塊:串口接收模塊、8位數(shù)據(jù)轉(zhuǎn)32位數(shù)據(jù)模塊、AES加密模塊、32位數(shù)據(jù)轉(zhuǎn)8位數(shù)據(jù)模塊和串口發(fā)送模塊,AES加密模塊又包含S盒變化模塊、輪函數(shù)模塊和密鑰擴(kuò)展模塊。由于EP2C8Q240C8資源有限,只有8 256個(gè)邏輯資源和138個(gè)用戶可分配管腳,所以設(shè)計(jì)為用32位數(shù)據(jù)作為AES加密模塊的輸入經(jīng)4次輸入得到128位數(shù)據(jù)然后進(jìn)行加密。
5個(gè)模塊其中串口接收模塊、8位數(shù)據(jù)轉(zhuǎn)32位數(shù)據(jù)模塊、32位數(shù)據(jù)轉(zhuǎn)8位數(shù)據(jù)模塊和串口發(fā)送模塊這4個(gè)模塊數(shù)據(jù)數(shù)據(jù)通信模塊用于實(shí)現(xiàn)FPGA與計(jì)算機(jī)之間的通信,AES加密模塊是實(shí)現(xiàn)對明文加密。圖3為AES加密算法的頂層模塊原理圖。
圖3 AES加密算法頂層模塊原理圖Fig.3 AES encryption algorithm top-level module
經(jīng)編譯、綜合完成后,對此頂層模塊進(jìn)行仿真。通過QuartusⅡ8.1自帶的仿真工具可以對算法的正確性進(jìn)行驗(yàn)證。
設(shè)明文(16進(jìn)制)為00112233445566778899AABBCCDD EEFF,初始密鑰(16進(jìn)制)為 0001 0203 0405 0607 08090A0B 0C0D 0E0F,得到的密文(16進(jìn)制)是 69C4 E0D8 6A7B 0430 D8CD B780 70B4 C55A。加密仿真結(jié)果如圖4所示。
圖4 AES加密算法仿真結(jié)果Fig.4 AES encryption algorithm simulation results
從仿真圖中可以看出仿真結(jié)果完全正確,下一步下載到FPGA芯片中進(jìn)行功能實(shí)現(xiàn)。FPGA芯片通過RS一232連接到計(jì)算機(jī),再通過串口調(diào)試軟件輸入明文和密鑰,經(jīng)數(shù)據(jù)接收模塊發(fā)送到FPGA密碼芯片中,經(jīng)過加密后,密文經(jīng)數(shù)據(jù)發(fā)送模塊發(fā)送到計(jì)算機(jī)上,實(shí)現(xiàn)加密結(jié)果的輸出。如圖5功能實(shí)現(xiàn)所示。
首先,建立如圖6所示實(shí)驗(yàn)環(huán)境。
圖6為DPA攻擊系統(tǒng)的整體框圖,主要分為3個(gè)模塊:FPGA模塊、示波器模塊和PC模塊。
1)FPGA模塊 該模塊也就是3.2節(jié)中基于FPGA的AES加密實(shí)現(xiàn),可以執(zhí)行AES的加密操作。電源兩端串接一個(gè)50 Ω抗噪電阻用于數(shù)據(jù)采集過程的容性負(fù)載,用于測量FPGA在執(zhí)行加密操作時(shí)所產(chǎn)生的功耗波形。
圖5 AES加密算法功能實(shí)現(xiàn)Fig.5 AES encryption algorithm functions
圖6 DPA攻擊系統(tǒng)的整體框圖Fig.6 Block diagram of DPA attack system
2)示波器模塊 采用雙通道的數(shù)字示波器來采樣FPGA所產(chǎn)生的功耗波形,CH1接收電阻R上的電壓波形,CH2接收FPGA給出的觸發(fā)信號,作為采樣的Trigger信號。采樣得到的波形數(shù)據(jù)存儲在示波器中,通過通訊模塊與PC之間傳輸數(shù)據(jù)。
3)PC模塊 PC機(jī)主要完成對示波器的設(shè)置以及數(shù)據(jù)的傳輸,它通過RS232串口與示波器建立起數(shù)據(jù)傳輸。所有的命令與數(shù)據(jù)的傳輸都是通過Visual C++編程,并調(diào)用TekVISA的API函數(shù)完成。示波器采集得到的波形數(shù)據(jù)由PC機(jī)讀取,并以文件形式存儲。最后由Matlab完成數(shù)據(jù)的分析和后期處理。
攻擊平臺建立完成后,然后選擇攻擊模型,采用基于異或操作的DPA攻擊模型[4]。在AES的第0回合執(zhí)行輪密鑰加(S=d⊕k),其表示明文的第一個(gè)字節(jié)d與密鑰的第一個(gè)字節(jié)k進(jìn)行異或運(yùn)算后存回S,而這種執(zhí)行異或運(yùn)算所遺漏的信息。所以有DPA攻擊的弱點(diǎn)存在,我們可以此來破解密鑰k。如下DPA具體的攻擊步驟:
1)輸入明文為d。
2)設(shè)明文的第i位記為 di。
3)向FPGA加密模塊輸入明文進(jìn)行加密并返回密文給PC。
4)若di=0,則將這指令執(zhí)行時(shí)所產(chǎn)生的能量消耗信號放到集合S0;反之,若di=1,則將這指令執(zhí)行時(shí)所產(chǎn)生的能量消耗信號放到集合S1。
5)重復(fù) 1~4,輸入明文 N 次。
6)將集合S0與集合S1內(nèi)所收集到的能量跡分別做平均值計(jì)算得S0、S1。
7)計(jì)算明文差分值Δd=S0-S1,同時(shí)也會(huì)衍生密文差分值 Δs。
8)觀察 Δd與 Δs差異圖,若尖峰不同向(一正一負(fù)),則表示所猜測密鑰的第i位(bit)是1;反之,若尖峰是同向,則表示所猜測密鑰的第i位(bit)是0。
9)如此反復(fù)的做1~8步驟,直到Key長度的所有位被統(tǒng)計(jì)出來。
經(jīng)由上述描述后可以轉(zhuǎn)成算法來表達(dá),其中第07列即是上述步驟7的意思。若要繼續(xù)破解下一個(gè)bit時(shí),只要重做算法即可一一破解。我們以實(shí)驗(yàn)展示破解bit=1與bit=0的能量消耗圖的結(jié)果。
在AES算法無任何防護(hù)的情況下,根據(jù)上述步驟對AES的加密過程進(jìn)行功耗測量分析,可以得到的差分功耗分析曲線如圖7、8所示。
圖7 尖峰不同表示1Fig.7 Peak different said 1
圖8 尖峰相同表示0Fig.8 Peak different said 0
目前國內(nèi)外有關(guān)DPA的主要防御措施包括隱藏技術(shù)和掩碼技術(shù)[5]。任何防御對策的目標(biāo)都是使密碼設(shè)備的能量消耗不依賴于設(shè)備所執(zhí)行的密碼的中間值。文中主要通過掩碼技術(shù)對密碼設(shè)備進(jìn)行防御,通過隨機(jī)化密碼設(shè)備所處理的中間值來實(shí)現(xiàn)這個(gè)目標(biāo)。這種方法的其中一個(gè)優(yōu)點(diǎn)就是可以在算法級實(shí)現(xiàn),并且不必改變密碼設(shè)備的能量消耗特性。
隨機(jī)數(shù)m對每一個(gè)中間值v進(jìn)行變化,即vm=v*m.運(yùn)算*多為布爾異或運(yùn)算、模加運(yùn)算或模乘運(yùn)算,隨機(jī)數(shù)m即稱為掩碼。通常掩碼直接應(yīng)用于明文或者密鑰。一個(gè)典型的掩碼方案需要詳細(xì)說明如何對所有中間值進(jìn)行掩碼操作,以及在算法執(zhí)行過程中如何應(yīng)用、消除和改變掩碼。非常重要的一點(diǎn)就是要保持每一個(gè)中間值在計(jì)算過程中始終處于被掩碼狀態(tài)。
在布爾掩碼中,vm=v⊕m通過此式可以得出給定通vm和m就可以計(jì)算出中間值[6]v。換句話說可以用兩個(gè)共享因子(vm,m)來表示中間值v。只有同時(shí)獲得兩個(gè)共享因子,才能確定v,只給定兩個(gè)共享因子中的任何一個(gè),不會(huì)泄露關(guān)于v的任何信息;再則每一個(gè)掩碼中間值vm均與v和m相互獨(dú)立,則掩碼可抵御一階DPA攻擊的安全。因此一個(gè)掩碼能抵御一階DPA攻擊,采用n個(gè)掩碼可以抵御n階DPA攻擊。
但是多個(gè)掩碼應(yīng)用于同一個(gè)中間值,以及跟蹤多個(gè)共享因子都會(huì)增加實(shí)現(xiàn)開銷。對共享因子的存儲和計(jì)算需要更大的存儲單元以及更長的計(jì)算時(shí)間。出于對實(shí)現(xiàn)性能的考慮,對每一個(gè)中間值都采用一個(gè)新掩碼并不明智。因此,為了獲得合適的性能以及安全性,需要仔細(xì)選擇掩碼的數(shù)量。
根據(jù)實(shí)現(xiàn)算法的功能模型在2.2節(jié)中AES實(shí)現(xiàn)的5個(gè)模塊中添加隨機(jī)數(shù)產(chǎn)生模塊。該模塊產(chǎn)生的隨機(jī)數(shù)對AES輪變換的4個(gè)操作進(jìn)行掩碼操作。
在加密開始時(shí),將明文掩碼md與明文d進(jìn)行異或,將密鑰掩碼mk與第一輪子密鑰k進(jìn)行異或。
1)字節(jié)替換 由于這一操作是非線性的,即Sbox(S⊕f)≠Sbox(S)⊕Sbox(F),所以要用一個(gè)掩碼型 S盒來實(shí)現(xiàn)這一操作。 掩碼型 S 盒要滿足 Sbox(S⊕f)=Sbox(S)⊕Sbox(F)。
2)行移位 此操作就是將狀態(tài)中的各個(gè)字節(jié)移動(dòng)到不同的位置,所以此處算法狀態(tài)的所有字節(jié)都使用同一個(gè)掩碼。
3)列混合:為了確保所有的中間值都被掩碼,此處算法的每一行都采用一個(gè)單獨(dú)的掩碼[7]。
4)密鑰擴(kuò)展 用了帶掩碼的新字節(jié)替代掉密鑰擴(kuò)展中使用的字節(jié)替換,其他過程與AES加密過程相同。
掩碼處理在計(jì)算時(shí)間上開銷往往很高,約有三分之一的運(yùn)行時(shí)間消耗在掩碼預(yù)計(jì)算上。但就安全性上來講,這種典型的掩碼實(shí)現(xiàn)能有效地防范DPA的攻擊。再次用DPA攻擊經(jīng)過掩碼后的AES加密算法可以得到結(jié)果如圖9所示。
圖9 使用掩碼后的DPA攻擊Fig.9 DPA attack masked AES
文章首先對功耗分析攻擊進(jìn)行了全面綜述。然后在FPGA平臺下實(shí)現(xiàn)了DPA對AES加密算法的攻擊,最后提出了針對這一攻擊的防御措施,結(jié)果證明這一措施能有效防御DPA攻擊,但是掩碼技術(shù)勢必會(huì)降低AES加密算法的執(zhí)行效率,再則針對高階DPA攻擊還沒能做到有效防范,有待進(jìn)一步提出針對高階DPA攻擊的防范措施。
[1]Mangard S,Oswald E,Popp T.馮登國、周永彬、劉繼業(yè)等譯.能量分析攻擊[M].北京:科學(xué)出版社,2010.
[2]李超,孫兵,李瑞林.分組密碼的攻擊方法與實(shí)例分析[M].北京:科學(xué)出版社,2010.
[3]張仕斌.應(yīng)用密碼學(xué)[M].西安:西安電子科技大學(xué)出版社,2009.
[4]徐光輝,程東旭,黃如.基于FPGA的嵌入式開發(fā)與應(yīng)用[M].北京:電子工業(yè)出版社,2006.
[5]陳魯生,沈世鎰.現(xiàn)代密碼學(xué)[M].北京:科學(xué)出版社,2002.
[6]張吉天.8051單片機(jī)上實(shí)現(xiàn)dpa攻擊之a(chǎn)es加密器 [D].臺灣:臺灣國立中央大學(xué),2004.
[7]王樹東,靳雷,吳明永,等.基于PROFINET和PROFIBUS集成網(wǎng)絡(luò)的熔煉集散控制系統(tǒng)[J].工業(yè)儀表與自動(dòng)化裝置,2009(3):26-30.WANG Shu-hua,JIN Lei,WU Ming-yong,etal.Smeltery distributed control system based on profinet and profibus integrated network[J].Industrial Instrumentation&Automation,2009(3):26-30.