李 菁,李林森
(1.上海交通大學信息安全工程學院,上海 201203;2.上海市信息安全測評認證中心,上海 200011)
數據加密是安全保密領域的重要手段,相應的,密碼破解就成為密碼學研究領域以及惡意用戶嘗試攻擊破解的熱點問題。目前破解密碼主要有 2種途徑:傳統的數學分析攻擊和旁路密碼分析攻擊。傳統的建立在數學分析基礎上的密碼分析學主要針對數學模型,它一般在數學算法的層面上進行分析,力求找出加密算法或協議設計上的缺陷,但由于密碼算法或協議的數學基礎比較牢固,因此在對IC卡芯片的加密協處理模塊進行傳統的數學分析時會非常困難,目前IC卡芯片的加密破解運用較多的攻擊方式為旁路攻擊方式。
本文研究差分功耗分析(Differential Power Analysis,DPA)攻擊的原理和方法,并在此基礎上分析IC卡芯片工作時功率消耗與密碼處理的關系,通過Risure公司的Inspector旁路攻擊平臺完成對某款商業芯片DES加密模塊的DPA攻擊,以破解DES運算的加密密鑰。
旁路攻擊又稱側信道分析(Side-channel Analysis,SCA),它無需對密碼算法進行繁瑣的數學分析,是一種新型密碼分析技術[1]。它突破了傳統密碼分析的思維模式,利用加密器件在加解密過程中產生的物理泄露(溫度、聲波、電磁輻射、執行時間、功率消耗等)獲取密鑰信息。與傳統的密碼分析方法相比,旁路攻擊具有較小的密鑰搜索空間和較高的分析效率。常見的旁路攻擊方法包括簡單旁路攻擊、差分旁路攻擊、高階差分旁路攻擊和模板攻擊。1996年Cryptography Research公司的Kocher P等人提出功率攻擊的概念。
功耗攻擊又稱為能量分析,是旁路攻擊中的一種,它通過分析密碼設備操作時的功率消耗,推導出加密系統所進行的操作中涉及到的秘密參量。根據對功率消耗的不同分析方法,可將其分為簡單功耗分析(Simple Power Analysis,SPA)和DPA。SPA是一種直接解釋功率消耗測定值的技術,SPA能夠給出關于一個設備的運行信息以及密鑰信息。在SPA攻擊中,攻擊者直接觀察一個系統的功率消耗,利用加密操作實現細節與功耗之間的關系,直接從一次測量的功耗軌跡獲取密鑰信息。而DPA通過對大量的密文和功耗軌跡的統計分析獲取密鑰信息,而不須了解加密的具體實現技術細節[1],此種方法的攻擊力要比 SPA強得多,而且更加難以預防,甚至一個完全不懂得智能卡技術的編程人員也可以利用專用程序對沒有DPA防范的智能卡芯片實現攻擊。
國際上,自從Kocher P發現密碼芯片運算時泄漏的執行時間信息能被用于密碼分析后,旁路攻擊技術引起了業內的廣泛關注,一系列新的攻擊方法和解決方案層出不窮。從攻擊技術方面來看,幾乎每一種加密算法(如常見的DES、AES、RSA等)實現都已經有了相應的攻擊方法,并且攻擊方法的可操作性也在不斷地改進和優化,近年來又出現了模板攻擊等新型的攻擊方法。Mangard S等人所著的Power Analysis Attack一書,詳細地介紹了芯片功耗分析的基本原理、技術方法和防御對策,特別是對于DES差分能量分析有著詳盡的分析和實踐舉例,此外,對于隱藏技術和掩碼技術的攻擊也有獨到的見解。國際上著名的 CC檢測實驗室,如 Brightsight等,也基于上述理論針對芯片旁路攻擊研制了相應攻擊分析工具或檢測設備。
目前多數加密器件是由晶體管組成的半導體邏輯門實現的,當對邏輯門進行充電或放電時,電子流過半導體襯底,產生功耗和電磁輻射。芯片電路門接通和斷開時產生功率消耗,功率消耗軌跡同密鑰信息相互密切關聯。當集成電路內部處理的數據發生變化時,反映在CMOS電路上即為狀態的變化,這種狀態的變化導致CMOS電路的功率消耗,通過儀器可在電源端或接地端測量到,即導致芯片功耗泄漏。
以CMOS電路為例,CMOS電路為壓控型電路,只在動態下才消耗電流,靜態電流為泄漏電流,理想情況下靜態電流為0??紤]到CMOS電路中存在PN結漏電和MOS晶體管的亞閾值漏電,因此,實際的CMOS電路的靜態功耗并不為0。電路在開關操作過程中,對負載電容的充放電所消耗的動態功耗是主要功耗。隨著負載電容增大和工作頻率的提高,動態功耗將迅速增大。在柵極電壓的施加或釋放的同時,電流從晶體管的襯底流過,并將電荷傳輸到其他晶體管、連接線以及電路負載。電荷的充放電表現為功耗的變化并產生電磁輻射,這兩者均可被外界探測到。
功耗分析是指通過分析密碼運算過程中呈現的電流/電源變化,從而引起消耗能量的變化,獲得密鑰信息。功耗分析技術從最初的簡單功耗分析技術,發展為差分功耗分析技術,這是一種以能量消耗曲線為基礎,再以統計分析和誤差修正方式推演密鑰的攻擊技術[2]。該攻擊利用密碼設備能量消耗的數據依賴性,通過使用大量的能量跡來分析密碼設備的能量消耗,并將能量消耗視作被處理數據的函數,其優點就是無須知道關于密碼設備的詳細知識,測試人員完全可以利用專用設備對沒有DPA防范的IC卡芯片的加密算法實現攻擊[3]。
本文使用均差測試方法[4]。在均差測試中用S表示加密操作過程中的中間預測值。對于一組足夠數量的功耗采樣軌跡 Trace,通過數學模型對捕捉到的功耗曲線分別按照相應位為 0或l進行分類,得到集合 S0與S1,T0和 T1分別表示猜測位分別為0或1時的功耗,然后計算2個集合對應元素的均差,記如果猜測的密鑰正確,那么會有差值出現;反之,則沒有差值出現。對集合進行分類等同于用一個隨機函數對集合進行分類,由數理統計理論可知,當用一個隨機函數將集合一分為二后,當這2個集合中的元素趨于無窮大時,2個子集合的平均值之差將趨于0。如果功耗分析曲線的樣本空間足夠大,模型選擇合適,采樣噪聲的影響足夠小,經過上述差分統計方法可以獲得帶有尖峰的差分功耗曲線,尖峰位置即為猜測的密鑰位置。
DPA攻擊的常規策略如下:(1)選擇被攻擊密碼設備所執行密碼算法的一個中間值;(2)測量密碼設備在加密或解密不同數據分組時的能量消耗;(3)對每個可能的k值,計算對應的假設中間值;(4)將中間值映射為能量消耗值;(5)比較假設能量消耗值和能量跡[5]。
DPA攻擊主要利用了密碼運算中中間值的信息泄露。典型DPA攻擊的實現方法如下:首先進行N次密碼運算,獲取N個隨機輸入的明文PTi(1≤i≤ N); Si[j]為對第i次密碼運算產生的功耗進行離散采樣形成的功耗數組[6],其中,1≤ i≤ N;j表示采樣的時間點;對應PTi的相應密文輸出CTi(1≤ i≤ N)。定義與密鑰相關的功耗區分函數 D(C Ti,K b),D(C Ti,K b)=SBOX1(C TiKb)[7],其中,CTi取密文擴展48 bit后的前6 bit,Kb為第16輪子密鑰的前6 bit,SBOX1為第1個k盒函數前4 bit輸出中的1 bit。猜測令Kb=000000,將基于采樣時間點j的信號數組集合{Si[j] |1≤ i≤ N}分成2個子集合,SBOX1為0的功耗曲線劃分到集合S0,SBOX1為 1的功耗曲線劃分到集合S1:

在DPA分析測試中,本文嘗試破解的算法是DES加密算法。DES算法采用16輪迭代,每一輪由8個S盒完成,每個S盒有6 bit輸入、4 bit輸出,這樣48 bit的輸入被分為 8個6 bit的分組,每一個分組對應一個 S盒操作。這48 bit的輸入與明文和子密鑰有關。
對于DES分組加密算法,如果攻擊者猜對某一輪進入S盒的子密鑰時,那么按一定規則進行差分處理后,相關曲線將顯示出一些很突出的尖峰。DPA攻擊測試中DES密鑰的破解在一般是通過先破解第一輪子密鑰 K1或第 16輪子密鑰K16,進而破解整個DES密鑰[8]。由于48位的子密鑰K16有248個組合,很難破解,因此把48 bit的子密鑰K16以6 bit為一組成分成8組[9],K16={K16S1,K16S2,K16S3,K16S4,K16S5,K16S6,K16S7,K16S8},其中,KiSj(j=1,2,…,8)為子密鑰塊。若一次破解一組,那么一次僅有 26=64個組合,要破解就相對簡單。
差分功耗分析就是先嘗試破解K16S1,本文使用功耗區分函數D函數,取S盒輸出的第2位進行0/1集合分類,功耗區分函數D函數如圖1所示。

圖1 功耗區分函數
依據 3.2節中闡述的工作原理,如果T[ j]代表的差分功耗曲線出現明顯的尖峰,則表示子輪密鑰 K16S1猜測成功,否則繼續猜測,6 bit子輪密鑰K16S1最多猜測26次。破解了 K16S1,再破 K16S2,依此類推,最后把子密鑰 K16破解。
當獲取DES第16輪子密鑰K16后,根據DES子密鑰生成算法,可逆推獲取DES 56 bit有效密鑰Key中的48 bit。Key中剩余的8 bit密鑰可通過窮舉搜索獲得,這樣通過K16可以推算出整個DES的Key。
差分功耗分析DPA最重要的點在于選擇與密鑰相關的功耗分類D函數,針對不同的算法和不同的實現,所選的攻擊D函數有所不同。
但DPA也有它的局限性,即D函數只選取1 bit的輸出,沒有考慮其他 S盒輸出位數的影響,在實際測試工作中,也可采用Correlation相關性分析的方式,即D函數取S盒輸出的多位,并計算猜測子密鑰輸出多位的漢明重量(Harming Weight,HW),然后通過統計分析方法與實際功耗曲線的HW進行相關性分析。與DPA方式類似,相關性分析方式猜測子密鑰也從000000開始,如果計算結果表明猜測值與實際值有明顯的相關性,則猜測子密鑰正確,反之繼續猜測直到111111,后續其他步驟與DPA相同。這種分析方法的優點是效果更顯著,受噪聲干擾的影響更小。
針對密碼芯片的典型能量攻擊的測試平臺包括以下組件:被測對象,密碼芯片,時鐘信號源,電源(讀卡器),能量測試電路,數字采樣示波器,信號處理和攻擊分析設備。
在本文中開展密碼芯片DPA攻擊測試所使用的工具平臺是Riscure公司的SCA Inspector平臺。該平臺由Power Tracer(功耗分析測試工具)、Oscilloscope(示波器)以及控制控制臺(包含Inspector軟件)等部件構成,如圖2所示。

圖2 Riscure SCA Inspector測試平臺
Riscure Inspector平臺開放了常見智能卡旁路攻擊和信號處理方法的源代碼,提供超過60種包括對齊、濾波,各類加解密算法的模塊。
DPA攻擊測試主要分為3個階段:數據采集,數據處理和數據分析。
(1)數據采集處理階段對功耗曲線進行采樣形成功耗能量跡。
(2)數據處理階段通過濾波、重采樣、對齊和相關性分析等步驟對功耗能量跡的原始波形進行一系列信號數據處理,從而在功耗能量跡上找出加密執行位置。
(3)數據分析階段針對加密位置調用加密破解模塊嘗試進行破解,以獲取芯片加密密鑰。
相關操作如下:
(1)采樣:在Inspector PowerTracer工具中調用預先編制好的芯片初始化腳本,執行DES加密,并對功耗波形進行采樣。
(2)濾波:根據采樣的 Trace信號選取大致的加密運算范圍,進行頻譜分析,找出芯片精確工作頻率和 Power Tracer讀卡器工作頻率,對采樣信號進行濾波處理。
(3)重采樣:依據芯片工作頻率對 Trace信號進行重采樣。
(4)對齊:對重采樣后的Trace信號選取基準trace進行對齊處理,以便去掉差異較大的trace信號。
(5)相關性分析:分析波形的相關性,更精確確定DES的運算位置。
(6)密鑰分析:即密碼模塊破解,選中加密執行位置,調用相應的DES加密分析模塊,設置相應的參數,嘗試對芯片密鑰進行破解。
本文針對某款芯片DES加密算法進行DPA攻擊測試。
(1)芯片功耗采集
通過編寫測試腳本將工具與被測芯片建立通信,進一步采集芯片運行時的功耗特征。根據芯片DES運算過程,編寫DPA功耗采集腳本:

該腳本產生隨機明文發送給芯片,用同樣的密鑰進行加密后,存取明文和密文結果。對功耗波形進行采樣(采集200000條左右的trace),Sample frequency為1 GSamples/s,采樣點為1 MSamples。因為考慮到采集200000條功耗波形的時間較長,先采集 100條 DES運算功耗曲線,使用Inspector的Verify工具對DES運算的正確性進行驗證。驗證通過后,再進行200000條功耗波形的采集。采集到的芯片加密功耗曲線如圖3所示。

圖3 采集到的芯片加密功耗曲線
(2)功耗曲線頻譜分析和濾波
通過頻譜分析找出讀卡器的工作頻率,并將讀卡器工作頻率的波形過濾。
對部分功耗曲線(選擇其中幾百條左右)做傅里葉變換,得到頻譜曲線,對頻譜曲線作平均,在這條平均的頻譜曲線上觀察出智能卡芯片的工作頻率和讀卡器的頻率。功耗曲線頻譜分析結果如圖4所示。

圖4 功耗曲線頻譜分析結果
頻域曲線在4 MHz及4 M倍頻位置有明顯的尖峰,是因為讀卡工具Power Tracer的工作頻率為4MHz,使用菜單中的Harmonics工具將Power Tracer 4M頻率及其倍頻進行濾除。
(3)重采樣Resample
依據芯片工作頻率對Trace信號進行重采樣,重采樣的目的就是根據工作頻率,把工作頻率上的工作點都重采樣下來,實現對初始采樣信號的壓縮。此時可采集10000條左右的trace,以便分析。重采樣功耗曲線如圖5所示。

圖5 重采樣功耗曲線
(4)對齊Alighment
將重采樣到的所有波形位置與基準波形進行靜態對齊,去除差異較大的波形,以提高相關性分析的準確性。對齊的目的一方面確保在分析波形時比較的是相同的點和相同的操作,另一方面使信號泄露在較小的分布區間。本文采用的是靜態對齊,先在波形上選擇一段參考波形,設置對齊偏離閾值 Threshold 0.6~0.8(數值越高,對齊精度越高,拋棄的trace數會越多)。對齊后再將波形overlap進行觀察,如果發現對齊的質量不好,可以選擇后面一點的波形作為基準波形重新對齊。功耗曲線對齊結果如圖6所示。

圖6 功耗曲線對齊結果
(5)相關性分析
分析對齊后波形的相關性,找出DES加密輸入和輸出的位置,以便更精確地確定DES的運算位置。因為DES分組是64 bit/8 Byte,為方便測試,本文選擇相關性分析的單位為Byte,范圍為16個Byte(輸入、輸出各8個Byte)。相關性分析結束后,將波形疊加,可以分別清楚地看到前8 Byte明文輸入的位置和后8 Byte密文輸出的位置。將對齊后的波形和Resample+Align后的波形進行坐標對齊,輸入和輸出之間的位置(即圖7左右8個尖峰中間的位置)可確定為DES運算的位置。

圖7 功耗曲線相關性分析結果
(6)DES密鑰的破解
確定 DES加密位置后,運用DES加密算法分析模塊Crypto-AdvancedDES嘗試破解DES加密密鑰,分析目標選擇S-BOX,比較位置選擇S-BOX輸出的HW,破解位置選擇DES加密第1輪和第2輪。執行破解,經過2輪破解,先破解第1輪的輪密鑰,再破解第2輪的輪密鑰,最終即可破解整個密鑰。
使用被破解的密鑰通過軟件DES算法進行驗證,與硬件算法實現一致,可以確認 DPA攻擊測試破解芯片 DES密鑰成功。
本文在分析DPA的原理和方法的基礎上,完成了某款芯片DES加密算法的DPA攻擊測試。通過攻擊測試實驗過程及結果可以看出,差分功耗分析是一種有效的分析芯片DES等加密算法的手段。同理,如后續需對3DES加密算法進行破解,則在功耗分析曲線上找到位置后,需進行密鑰 K1、K2的加密、解密、加密的破解操作,從而獲取 K1和 K2。當然本文的攻擊測試是在沒有對芯片加密算法做額外防護的情況下進行,如果對芯片進行了加大幅值噪聲水平,隨處理中斷引入時間噪聲和不同的時鐘頻率,采用隨機處理順序來減少相關的信號等干擾防護措施,采用DPA分析測試的難度將大大增加,則需要引入高階DPA分析方法[10],這也是下一步的研究方向。
[1]賴坤鋒.智能卡 SPA/DPA 攻擊[J].現代電子技術,2005,28(17): 28-29.
[2]錢思進,張凱澤,王衍波,等.DES加密算法差分能量分析的研究[J].計算機工程與應用,2007,43(32): 146-149.
[3]周開民,陳開顏,趙 強,等.DPA 方法對加密系統的FPGA旁路攻擊研究[J].軍械工程學院學報,2006,18(2):51-54.
[4]陳開顏,趙 強,褚 杰,等.差分功耗分析單片機DES加密實現的旁路攻擊[J].計算機科學,2007,34(11): 58-61.
[5]Paul K,Jaffe J,Jun B.Differential Power Analysis[C]//Proc.of CRYPTO’99.[S.l.]: IEEE Press,1999.
[6]孫海濤,趙 強,何遁來.面向 DES加密算法的差分功耗分析攻擊方法[J].網絡與信息技術,2007,26(6): 53-55.
[7]鄭建新,張翌維,沈緒榜.SPA和DPA攻擊與防御技術新進展[J].小型微型計算機系統,2009,4(4): 726-729.
[8]Canovas C,Clédière J.What Do DES S-boxes Say in Differential Side Channel Attacks[EB/OL].(2005-03-11).http://eprint.i-acr.org/2005/311.pdf.
[9]Sommer R M.Smartly Analyzing the Simplicity and the Power of Simple Power Analysis on Smart Cards[C]//Proc.of CHES’00.[S.l.]: IEEE Press,2000.
[10]Waddle J,Wagner D.Towards Efficient Second-order Power Analysis[C]//Proc.of CHES’04.[S.l.]: IEEE Press,2004.