朱文鋒,王 琴,郭 箏,2,劉軍榮,2
(1.上海交通大學(xué) 微電子學(xué)院,上海 200240; 2.智巡密碼(上海)檢測技術(shù)有限公司,上海 201100)
近年來,信息安全問題逐漸成為人們關(guān)注的焦點(diǎn)。由于密碼算法的計(jì)算依賴物理載體(如CPU和密碼芯片),在運(yùn)算過程中,物理器件總會(huì)泄露各種與密碼系統(tǒng)相關(guān)的物理信息,如運(yùn)行時(shí)間、能量消耗和電磁輻射等[1],攻擊者可以采集和利用這些旁路信息,根據(jù)它們與密鑰信息間的關(guān)聯(lián)性來進(jìn)行密鑰恢復(fù)[2]。一些先進(jìn)的攻擊手段可以繞開數(shù)學(xué)推理過程而通過其他途徑獲得秘密信息,其中的典型代表就是旁路攻擊(Side Channel Attacks,SCAs)[3]。
文獻(xiàn)[4]提出了一種旁路功耗攻擊方法,該方法通過采集密碼設(shè)備運(yùn)行時(shí)的瞬時(shí)功耗,分析它們與算法處理的數(shù)據(jù)和進(jìn)行的操作之間的關(guān)聯(lián),進(jìn)而獲取設(shè)備存儲(chǔ)的秘密信息。功耗攻擊一般分為2種,一種為簡單功耗分析(Simple Power Analysis,SPA),另一種為差分功耗分析(Differential Power Analysis,DPA)[4]。SPA通過直接觀測少量曲線形態(tài)的方式獲取與密鑰相關(guān)的信息,而DPA則采集大量功耗信息,運(yùn)用數(shù)理統(tǒng)計(jì)分析恢復(fù)密鑰,該攻擊也是目前比較流行和常見的旁路攻擊方式[5]。文獻(xiàn)[6]提出了一種模板攻擊方法,模板是描述設(shè)備能量消耗特征的最優(yōu)方法。文獻(xiàn)[7]指出基于相關(guān)性系數(shù)的差分功耗分析(CPA)相比傳統(tǒng)DPA的優(yōu)勢。文獻(xiàn)[8]討論了基于互信息和線性回歸的通用DPA(對攻擊的密鑰模板不做任何假設(shè))具有一定局限性,并提出了一種近似通用DPA的概念[8]。近年來,基于深度學(xué)習(xí)的攻擊方法也得到學(xué)者們的廣泛關(guān)注[9-11]。
由于分組密碼算法在硬件實(shí)現(xiàn)過程中存在大量的并行計(jì)算,噪聲中和中間值相關(guān)的真實(shí)功耗信息難以被區(qū)分出來?,F(xiàn)有針對硬件實(shí)現(xiàn)的分組密碼算法攻擊大多具有一定的局限性,如SPA適合信噪比很大且已知功耗模型的情況[12],DPA能利用的功耗占總功耗的比例較小,當(dāng)信噪降低到原先信噪的1/θ時(shí),攻擊成功所需的曲線數(shù)則降為原先的1/θ2,模板攻擊在噪聲特別大的情況下所描述的設(shè)備能量消耗特征也并非很準(zhǔn)確[13]。
在實(shí)際攻擊中,可以將與中間值不相關(guān)的噪聲近似看成是隨機(jī)的,并根據(jù)中間值對這一部分功耗進(jìn)行分類,使每一類的功耗平均值都近似相等。本文以充分利用與中間值相關(guān)的功耗、消除和中間值無關(guān)的功耗分量為出發(fā)點(diǎn),提出一種針對分組密碼的攻擊方法,即功耗最小分類方法。該方法通過盡可能多地利用和中間值相關(guān)的功耗分量來增大信噪比并提升攻擊效果。
能夠?qū)崿F(xiàn)旁路功耗分析的原因在于,芯片產(chǎn)生的功耗與芯片在運(yùn)算過程中進(jìn)行的操作和處理的中間值數(shù)據(jù)存在關(guān)聯(lián)[14]。
現(xiàn)代密碼設(shè)備通常由數(shù)字電路構(gòu)成,數(shù)字電路(包括ASIC和FPGA)的基本單元是邏輯元件[15]。數(shù)字電路本質(zhì)上由電子開關(guān)組成,通常通過晶體管或MOS管實(shí)現(xiàn)。CMOS晶體管的NMOS管和PMOS管不會(huì)在同一時(shí)刻一起導(dǎo)通,因此,能夠保證CMOS晶體管的輸出電壓具有穩(wěn)定的邏輯1電平或者邏輯0電平。CMOS電路能構(gòu)造出復(fù)雜的組合邏輯和時(shí)序邏輯電路,最終形成完整電路。
數(shù)字CMOS邏輯單元的功耗主要由2個(gè)部分組成,一部分為負(fù)載電容充放電時(shí)引起的功耗,稱為動(dòng)態(tài)功耗,另一部分為漏電流引起的功耗,稱為靜態(tài)功耗。動(dòng)態(tài)功耗在電路總功耗中占主要部分[16]。
在某一個(gè)固定的時(shí)刻,CMOS器件輸出端的電平會(huì)出現(xiàn)4種情況:保持原先的0不變,保持原先的1不變,發(fā)生0→1的變化,發(fā)生1→0的變化。這4種情況對應(yīng)的動(dòng)態(tài)功耗種類如圖1所示。
圖1 CMOS器件輸出端4種情況對應(yīng)的功耗種類Fig.1 Power consumption types corresponding to 4 cases of CMOS device output
由于數(shù)字電路中所用到的CMOS電路的寬長比都一樣,因此可以簡單地用輸出端是否發(fā)生翻轉(zhuǎn)來近似模擬CMOS電路的動(dòng)態(tài)功耗,若發(fā)生翻轉(zhuǎn)則將功耗記為1,否則將功耗記為0。
旁路功耗分析的主要依據(jù)是密碼芯片的瞬時(shí)功耗值與執(zhí)行的操作和處理的數(shù)據(jù)間有一定的關(guān)聯(lián)[17]。對這2種依賴性進(jìn)行細(xì)分,將功耗曲線上的每個(gè)點(diǎn)對操作的依賴分量記為Pop,對數(shù)據(jù)的依賴分量記為Pdata。另外,在現(xiàn)實(shí)中的每次功耗測量中均會(huì)存在電子噪聲,從而對功耗分析造成干擾,本文將該分量記為Pel.noise。還有一些功耗與操作和數(shù)據(jù)都無關(guān),相對于操作和數(shù)據(jù)都是隨機(jī)的,將該功耗分量記為Prandom。除此之外,每個(gè)點(diǎn)還包含一些功耗常量部分,記為Pconst。將上述分量疊加,可得到每個(gè)點(diǎn)的總功耗,如下:
Ptotal=Pop+Pdata+Pel.noise+Prandom+Pconst
(1)
電子噪聲Pel.noise服從正態(tài)分布,通過平均可以去除Pel.noise和Prandom的影響。用Pexp表示給定攻擊場景中可以利用的功耗分量,將該場景中除電子噪聲外而無法利用的功耗分量表示為Psw.noise(稱為轉(zhuǎn)換噪聲),則有:
Pdata=Pexp+Psw.noise
(2)
在數(shù)字電路中,信噪比(Signal to Noise Ratio,SNR)是一個(gè)重要的參數(shù),其表示電子系統(tǒng)中信號與噪聲的比例。信噪比的一般定義如式(3)所示。
(3)
其中,V(·)表示方差。
對于一個(gè)給定的攻擊場景,功耗曲線中某一點(diǎn)的信噪比如式(4)所示[18]。信噪比越高,攻擊者能利用的有用信息就越多。
(4)
DPA的目標(biāo)是記錄密碼設(shè)備對大量不同數(shù)據(jù)分組進(jìn)行加密或解密時(shí)的能量跡,并基于能量跡恢復(fù)出密碼設(shè)備中的密鑰。其攻擊過程描述為[19]:
1)在密碼芯片系統(tǒng)中,將N組不同的明文(密文)數(shù)據(jù)和密鑰進(jìn)行加密或解密,并獲取密碼設(shè)備的能耗,將其記為T。
2)基于猜測的密鑰和明文(密文),通過密碼算法產(chǎn)生相應(yīng)的中間值,根據(jù)功耗模型(漢明重量模型或者漢明距離模型),將中間值映射為能量消耗值H。
3)計(jì)算假設(shè)的能量消耗與實(shí)測能量跡間的線性相關(guān)系數(shù)。
一個(gè)操作數(shù)為0的乘法器往往需要很少的功耗,可以假設(shè)一個(gè)操作數(shù)為0的乘法器,其能量消耗就為0[20]。利用該特性,能夠通過類似DPA攻擊的方法攻擊出算法密鑰,這種攻擊方式稱為零值攻擊。
功耗最小分類方法具有通用的攻擊策略,與DPA攻擊的步驟類似,但兩者選取中間值時(shí)依據(jù)的功耗模型有很大差別。功耗最小分類方法分為以下5個(gè)步驟:
1)選擇算法硬件實(shí)現(xiàn)電路中的某個(gè)寄存器變化量作為中間值,要求該寄存器變化前后的值都可以通過已知的非常量數(shù)據(jù)和猜測的少量密鑰而獲得,且要求該寄存器值改變的同時(shí)能引起足夠多的組合邏輯電路中間值發(fā)生改變,產(chǎn)生盡量多的功耗,在該寄存器值不變的情況下,這些組合邏輯電路中間值也不發(fā)生改變。
2)測量密碼設(shè)備在加密或解密D個(gè)不同數(shù)據(jù)分組時(shí)產(chǎn)生的瞬時(shí)功耗。
3)對于每一個(gè)可能的密鑰k值和D次加密過程,根據(jù)密碼算法計(jì)算出假設(shè)的中間值矩陣V。
4)對于猜測密鑰kj對應(yīng)的矩陣V中的列,將中間值為0的曲線放入猜測密鑰kj對應(yīng)的曲線集合中,每一個(gè)猜測密鑰kj都得到一組曲線集合,如圖2所示。在中間值為0的情況下,寄存器沒有翻轉(zhuǎn)功耗,組合邏輯功耗也相對較小
5)對于曲線上每一個(gè)確定的位置,都存在一個(gè)曲線集合Tj,其在該位置上的功耗平均值最小(相對于其他密鑰對應(yīng)的曲線集合在該點(diǎn)上的功耗平均值),則這個(gè)平均值最小的集合對應(yīng)的密鑰就是該位置攻擊出的密鑰結(jié)果。
圖2 功耗曲線分類示意圖Fig.2 Classification diagram of power consumption curve
本文最小功耗分類方法優(yōu)勢分析如下:
1)具有足夠大的Pexp。從2.2節(jié)可以看出,在中間值不為0的情況下,有足夠大的寄存器翻轉(zhuǎn)功耗和組合邏輯電路計(jì)算功耗,而在中間值為0的情況下,這些功耗都為0,從而保證了該方法具有足夠大的Pexp,在給定攻擊場景中能利用更多的功耗分量。
2)能夠消除和中間值無關(guān)的功耗的影響。將功耗曲線組的功耗進(jìn)行平均之后,能夠消除電子噪聲Pel.noise、與操作和數(shù)據(jù)都無關(guān)的功耗Prandom、固定功耗Pconst,這些功耗和中間值沒有關(guān)聯(lián),在曲線集合中,它們的平均值近似相等。
3)正確密鑰和錯(cuò)誤密鑰之間的系數(shù)差異很大。當(dāng)中間值為非線性函數(shù)(不是密鑰)時(shí),DPA方法應(yīng)用相關(guān)性系數(shù)的方法求正確密鑰的相關(guān)系數(shù),正確密鑰和錯(cuò)誤密鑰間的區(qū)分度較小。而在最小功耗分類方法下,如果密鑰正確,寄存器和組合邏輯電路的中間值都未發(fā)生改變,變量的改變引起的功耗最小,即分類方法中可以利用到的功耗分量Pexp當(dāng)前值最小;如果密鑰錯(cuò)誤,任何一個(gè)錯(cuò)誤密鑰對應(yīng)的中間值為0曲線的Pexp值遠(yuǎn)大于正確密鑰對應(yīng)的中間值為0曲線的Pexp。
在分組密碼中,AES具有代表性且攻擊難度較高,其首輪運(yùn)算在全隨機(jī)明文的情況下很難攻擊,因此,本文選取AES進(jìn)行攻擊。
AES算法可在不同的軟硬件平臺(tái)上進(jìn)行實(shí)現(xiàn),由于FPGA具有配置硬件資源可重構(gòu)、運(yùn)算速度快等優(yōu)點(diǎn),因此,本文選擇在FPGA上實(shí)現(xiàn)AES硬件電路,如圖3所示[21],其中,陰影部分為寄存器,每一輪執(zhí)行SubBytes、ShiftRows、MixColumns及AddRoundKey后將新生成的AES狀態(tài)存入寄存器。圖3為AES硬件實(shí)現(xiàn)時(shí)的一種通用架構(gòu),能夠節(jié)省電路面積,且運(yùn)算速度較快。
圖3 AES硬件實(shí)現(xiàn)原理圖Fig.3 Schematic diagram of AES hardware implementation
AES每一輪的SubBytes、ShiftRows、MixColumns及AddRoundKey計(jì)算,可以近似拆分成16個(gè)單獨(dú)的功耗模塊。如圖4所示,每個(gè)模塊的功耗由其輸入所決定。上述功耗模塊分別用模塊1~模塊16表示,模塊1對應(yīng)AES狀態(tài)寄存器的第1個(gè)字節(jié)state[127:120]和密鑰的第1個(gè)字節(jié)key[127:120]。
圖4 一個(gè)功耗模塊對應(yīng)的硬件架構(gòu)Fig.4 Hardware architecture of a power consumption module
在應(yīng)用最小功耗分類方法時(shí),首先選擇攻擊算法的中間值。本文選擇的寄存器是AES狀態(tài)(8位)寄存器,時(shí)間節(jié)點(diǎn)為第1輪。在攻擊密鑰的第1個(gè)字節(jié)時(shí),中間值的表達(dá)式如下:
v=Ttext_out(D-1,0)⊕Ttext_in(D,0)⊕Kkey
(5)
其中,Ttext_out(D-1,0)表示第D-1條曲線的密文的第1個(gè)字節(jié),Ttext_in(D,0)表示第D條曲線的明文的第1個(gè)字節(jié),Kkey表示猜測的8位密鑰。
由圖4可以看出,該寄存器的變化也會(huì)引起中間變量表s1~s4的變化,且s1、s2、s3只會(huì)隨X的變化而變化,s4會(huì)受到X變化的影響。s1~s4的變化會(huì)引起較大的組合邏輯電路功耗,當(dāng)寄存器變化前后的值一樣,即異或值為0時(shí),寄存器翻轉(zhuǎn)功耗為0,s1~s3保持不變,此時(shí)產(chǎn)生的動(dòng)態(tài)功耗分量較小。
然后,參照2.2節(jié)的內(nèi)容完成余下步驟。選擇AES功耗曲線的第2個(gè)尖峰附近的點(diǎn)進(jìn)行分類和平均,攻擊出密鑰,中間值V引起的寄存器翻轉(zhuǎn)泄露和組合邏輯泄露都發(fā)生在該時(shí)刻附近。
針對AES的最小功耗分類方法的實(shí)現(xiàn)偽代碼如算法1所示。其中,Ttrace為二維數(shù)組,存儲(chǔ)曲線上各個(gè)點(diǎn)的功耗信息,Ddata存儲(chǔ)曲線的明密文信息。算法輸出選定位置各密鑰對應(yīng)的曲線集合的功耗平均值。
算法1最小功耗分類方法
輸入Ttrace,Ddata
輸出r4
for ti=1:tracenum
sample (ti)=trace(ti,point );
end
for byte=1:16
for k0=0:255
r2=0;
r3=0;
for ti=2:tracenum
a=data(ti,byte)⊕data(ti-1,byte +16)⊕k0;
if a==0
r2(k0+1)=r2(k0+1)+sample(ti);
r3(k0+1)=r3(k0+1)+1;
end
end
r4(k0+1)=r2(k0+1)/r3(k0+1);
end
figure:plot(r4);
end
本文通過一款專門用于研究硬件電路旁路安全的開發(fā)板SAKURA-G來模擬AES功耗曲線,以進(jìn)行實(shí)驗(yàn)對比與分析。
對不帶防護(hù)的AES算法硬件實(shí)現(xiàn)電路的首輪運(yùn)算進(jìn)行攻擊,在100萬條全隨機(jī)明文的功耗曲線數(shù)量下(功耗曲線的密鑰為0x012345789abcdef、0x012345789 abcdef),攻擊結(jié)果如圖5所示,其中,縱坐標(biāo)表示猜測密鑰對應(yīng)的曲線集合的平均功耗和全部曲線的平均功耗的差值,曲線的縱坐標(biāo)越高,表示平均功耗越小,(X,Y)為最高點(diǎn)坐標(biāo)。從圖5可以看出,各猜測密鑰對應(yīng)的曲線集合的平均功耗差異較大,且正確密鑰與錯(cuò)誤密鑰區(qū)分明顯。圖5只選取了4個(gè)字節(jié)的攻擊結(jié)果,在實(shí)際實(shí)驗(yàn)中攻擊出了AES算法的全部密鑰。
圖5 最小功耗分類方法攻擊結(jié)果Fig.5 Attack results of minimum power consumption classification method
對不帶防護(hù)的AES算法硬件實(shí)現(xiàn)電路的20萬條全隨機(jī)明文功耗曲線,分別應(yīng)用最小功耗分類方法和基于中間值的漢明重量模型DPA方法進(jìn)行首輪攻擊,密鑰第1個(gè)字節(jié)的攻擊結(jié)果對比如圖6所示,全部密鑰的攻擊結(jié)果對比如表1所示。其中,圖6(a)中的縱坐標(biāo)是猜測密鑰中間值矩陣和功耗矩陣的相關(guān)性,圖6(b)中的縱坐標(biāo)是猜測密鑰對應(yīng)的曲線集合的平均功耗。在表1中,系數(shù)差百分比為負(fù)數(shù)表示正確密鑰未排名第一,值的大小為正確密鑰相對排名第一的錯(cuò)誤密鑰的系數(shù)差百分比。從圖6和表1可以看出,最小功耗分類方法相比DPA方法具有更好的區(qū)分度,前者排名第二的錯(cuò)誤密鑰相對正確密鑰的系數(shù)差百分比大多都超過10%,平均超過20%,而DPA方法排名第二的錯(cuò)誤密鑰相對正確密鑰的系數(shù)差百分比都在0.2%以內(nèi),兩者相差100個(gè)數(shù)量級。
圖6 2種方法對密鑰第1個(gè)字節(jié)的攻擊結(jié)果對比Fig.6 Comparison of attack results of 2 methods on the first byte of key
表1 2種方法對全部密鑰的攻擊結(jié)果對比Table 1 Comparison of attack results of 2 methods on all keys
本文提出一種針對分組密碼的最小功耗分類方法。相對DPA攻擊方法,該方法能利用更多的組合邏輯功耗和寄存器翻轉(zhuǎn)功耗,提高有用功耗的比例。實(shí)驗(yàn)結(jié)果表明,最小功耗分類方法對不帶防護(hù)的AES算法硬件實(shí)現(xiàn)電路的攻擊具有有效性,可以恢復(fù)出全部密鑰,且恢復(fù)出的密鑰存在較高的區(qū)分度。由于分組密碼算法結(jié)構(gòu)類似,硬件實(shí)現(xiàn)時(shí)也存在寄存器功耗和組合邏輯功耗,因此在理論上最小功耗分類方法對其他分組密碼算法同樣有效。下一步將研究該方法對帶防護(hù)的分組密碼算法硬件實(shí)現(xiàn)電路的攻擊性能。