摘 要:隨著現場可編程門陣列(FPGA)芯片在安全領域上的廣泛應用,有關FPGA密碼芯片的抗(DPA)研究也越來越受關注,但目前的研究成果大多針對智能卡的安全防護。在研究各種電路級安全防護技術的基礎上,采用硬件宏的方法將雙軌和預充電技術應用于FPGA芯片的數據加密標準算法(DES)硬件結構,通過DPA攻擊實驗后發現,未加防護措施的DES加密系統難以抵御DPA攻擊,而加防護措施的加密系統具有抗DPA攻擊的能力。
關鍵詞:FPGA; 差分功耗分析; 數據加密標準; 雙軌; 預充電
中圖分類號:TP309.7 文獻標識碼:A
文章編號:1004-373X(2010)09-0001-03
Pretection Technique of Anti DPA-attack Circuit Based on FPGA Platform
WANG Chuang-wei, YUAN Liang,DING Guo-liang, YIN Wen-long, CHANG Xiao-long
(Department of Computer Engineering, Ordnance Engineering College, Shijiazhuang 050003, China)
Abstract: With the widespeard application of field programmable gate array(FPGA) chip in the securtity field, theanti DPA-attack research of FPGA ciphering chip are getting much more attention, but most of the present research achievements focus on the security of smart cards. Based on the protection technique research of circuit, the dual-rail and pre-charge technique is applied in the data encryption standard(DES) hardware structure of the FPGA chip with the hard macros method. The attacking experiment of DPA demonstrates that without pretecting measure DES enciphering system can′t defend DPA, but enciphering system using pretecting measure has the ability to resist DPA-attack.
Keywords: FPGA; differential power analysis; DES; dual-rail; precharge
0 引 言
近年來,現場可編程門陣列(Field Programmable Gate Array, FPGA)由于其高性能、低價格、高開發速度、方便的編程方式等特點得到了廣泛的應用。但對FPGA進行DPA(Differential Power Analysis,差分功耗分析)[1]攻擊已經成為FPGA應用中信息安全的主要威脅之一,受到了廣泛的關注。
DPA是SCA(Side Channel Attacks,旁路攻擊)[2]技術的一種, 其攻擊思想為:以電路的功耗特性為基礎,利用功耗與內部密鑰的關系,將大量采樣到的包含該內部密鑰運算的功耗波形數據根據所猜測的密鑰進行劃分,使得所劃分的兩部分具有不同的功耗特性。最后,對兩部分的功耗數據相減得到功耗差分曲線,如果猜測正確,差分曲線將出現明顯的尖峰[2]。
因此,進行DPA攻擊的根本原因是電路邏輯表示的不對稱性引起的。本文將應用FPGA的自身結構特點,結合目前常用的抗DPA攻擊的電路級防護技術,深入研究與分析在FPGA平臺上實現針對DPA攻擊的電路級防護技術。
1 FPGA上的電路防護技術
1.1 FPGA的底層結構
FPGA的簡化結構如圖1所示。FPGA內部最主要的、設計工程中最需關注的部件是CLB(Configurable Logic Block,可配置邏輯塊),IOB(Input/Output Block,輸入/輸出塊),Block RAM(塊RAM)、DCM(Digital Clock Manager,數字時鐘管理器)和Multiplier(乘法器)。其中CLB是FPGA具有可編程能力的主要承擔者,Virtex-5的一個slice的主要組成單元包括4個6輸入查找表、4個觸發器和若干個選擇器。
1.2 雙軌電路技術的實現
雙軌電路技術是指無論是輸入還是輸出都是用兩根線來表示的。由圖2可見,在SDDL與門[3]中,信號A就由A和A共同表示,而輸出Z也由Z和Z表示。在這種表示下,一個變量可以有4種不同的邏輯值(0,0),(0,1),(1,0)以及(1,1)。SDDL將(0,1)和(1,0)分別用來表示邏輯0和邏輯1。這樣電路內部的邏輯0和邏輯1就變成了對稱的,從而使得各自的功耗相同。另外,邏輯門還引入了一個prch預充電信號。在prch有效的情況下,輸出是(0,0),這個值也就是變量為預充電時在電路中的表示方式。電路的工作分為兩個狀態:運算狀態和預充電狀態。這兩個狀態交替更換,也就是在prch上加載一個固定周期的脈沖。如此一來,電路中變量值的變化就是(0,0)到(0,1)或(1,0),或者是(0,1)或(1,0)到(0,0),每次翻轉都是只有一根信號線進行翻轉。邏輯0和邏輯1達到了完全的平衡。
圖1 FPGA結構圖
圖2 SDDL與門
1.3 預充電技術的實現
普通邏輯門不能提供持續轉換活動,邏輯門的輸入不變將導致門的數據獨立。解決這個問題要通過增加預充電電路來提供變換。當時鐘為高時,連接預充電電路輸入一個預充電相位,連接點變化到邏輯0;當時鐘為低時,電路輸入計算相位,實際計算完成。在FPGA上采用預充電邏輯的目的是要求在預充電相位期間slice的輸出必須是邏輯0,有兩種方式來完成[4]。在一個Xilinx的slice中,每個LUT后跟著專門的多路選擇器和內存單元,可配置為寄存器或鎖存器。這里考慮使用多路復用器和內存單元來實現預充電,每種方法各有優點和缺點:
(1) 使用時鐘控制的多路復用器來實現預充電功能。 將每個片子中單獨的內存單元作為寄存器,但是除了寄存器的普通時鐘還要分配一個反向時鐘。這種方法的缺點是復制一個時鐘信號并生成直接和互補信號將明顯增加功耗和電路面積,布線也將復雜化。
(2) 使用內存單元作為帶有反向使能輸入的異步清零鎖存器來實現預充電功能。只需要一個單獨信號給寄存器和預充電鎖存器,預充電功能由連接反向使能輸入和鎖存器的清零輸入實現,使用這種方法的缺點是專門設計的寄存器存儲器需要一個單獨的slice。
2 DES加密模塊的實現
要在FPGA上實現安全防護結構來確保關鍵部件的功耗恒定。這里選擇從雙軌和預充電技術在FPGA上實現旁路安全防護邏輯。當前的技術水平需要在FPGA上進行精確控制布局和布線[5]。下面從S盒硬件宏的實現和DES加密核的實現來介紹基于FPGA的DES加密模塊實現。
2.1 S盒硬件宏的實現
S盒的設計是DES算法關鍵部分,S盒設計的優劣將影響整個算法性能。在采用FPGA實現時,應從資源和速度的角度出發,有效利用FPGA可配置屬性,充分考慮器件內部結構,盡可能使兩者都達到最優。在設計中,由于綜合工具的介入,所輸出的網表很難被設計者所理解,同時要找到一種更好的方法來控制組合電路,因此要建立硬件宏模塊[6],簡稱硬宏。這與傳統的設計流程不同之處是要充分利用FPGA Editor的功能,目的是從FPGA底層結構的配置上實現雙軌和預充電技術。
通過Xilinx提供的FPGA Editor工具,首先讀入布局布線后輸出的NCD文件,并將其轉化為新的NVD文件,再送往BitGen軟件,進行布局布線的優化,最終在FPGA內部來建立目標電路,把它存為一個宏文件便于在上層進行調用。要注意兩個問題:建立硬宏需要進入到slice內部,準確控制Slice內部的器件選擇和器件之間的連線,防止設計出錯;宏的功能驗證要建立仿真模型,直接編寫一個行為仿真模型后在上層設計中調用這個仿真模型,要確保仿真模型和宏之間的一致性。
2.2 DES加密核的實現
DES算法的基本流程如下:首先,輸入明文通過初始置換,將其分成左、右各為32位的兩個部分,然后進行16輪完全相同的運算。經過16輪運算后,左、右半部分合并在一起經過一個末置換(初始置換的逆置換),于是整個算法結束。在每一輪運算中,密鑰位移位,然后再從密鑰的56位中選取48位。通過一個擴展置換,將數據的右半部分擴展為48位,并通過一個異或操作與一個48位密鑰結合,通過8個S盒將這48位替代成新的32位數據,再通過一級置換操作,這四步操作即為函數f。
S盒是DES中的非線性模塊,直接決定DES算法的安全性。在函數f的實現中,采用上面的思路,使用例化調用了S盒。DES加密核的VHDL設計思路如下:首先調用庫函數構造ROM,然后使用VHDL語句進行行為描述。這種方法要結合器件的內部結構,對于小容量的ROM采用數組描述,大容量的ROM應采用元件的方式來實現[7]。在VHDL設計中,庫函數、子程序的調用以及元件的調用和使用間接變量,都是影響速度的主要因素。由此得到 DES Core的接口定義如下:
ENTITY des56 IS
PORT(
indata:IN std_logic_vector(0 TO 63);
inkey :IN std_logic_vector(0 TO 63);
outdata:OUT std_logic_vector(0 TO 63);
decipher:IN std_logic
ds:INstd_logic
clk:INstd_logic
rst:INstd_logic
rdy_next_next_cycle :OUT std_logic
rdy_next _cycle:OUT std_logic
rdy :OUT std_logic
);
END des56;
3 攻擊實驗的對比與分析
3.1 FPGA加密芯片攻擊試驗平臺建立
目前FPGA的種類很多,但其中有大于50%的份額被Xilinx公司搶占,在此選用Xilinx公司的Virtex-5(ML501),對其他種類的FPGA的攻擊和此類似。ML501在工作時需要3個工作電壓:內核電壓(12 V)、輔助電壓(25 V)、I/O電壓(33 V),而ML501芯片的所有地線是并結在一起的。對FPGA攻擊的實驗的原理圖如圖3所示,示波器(Tektronix DPO4104,1 GHz BW, 5 Gsample/s)的2通道接收Virtex-5(ML501)加密模塊的觸發信號,在內核電壓和芯片之間置一個電流探針(Tektronix CT-2,12 kHz~200 MHz),1通道用電流探針測試內核的功耗變化。攻擊過程如下:在PC機上生成64位隨機明文,通過串口發送至FPGA。FPGA收到明文后利用存儲在其中的密鑰對明文進行DES加密,并在第16輪加密操作時對示波器產生數據采集的觸發信號。在進行數據采集時其實質是要采集內核電流所引起的功耗變化,并將數據通過USB總線送至PC機,最后在PC機上運行分析程序攻擊出64位的密鑰。
3.2 對FPGA加密芯片的攻擊
設定明文輸入和電流數據采樣為500組,采樣深度100 000點,采樣頻率為500 MSPS。在相同的試驗環境下,對帶有防護結構和不帶防護結構的兩種DES的加密結構進行功耗測量,同時根據密鑰的推測將明文分類,計算各類的平均功耗,然后相減,可以得到差分功耗分析曲線。
圖3 DPA實驗電路原理圖
試驗后發現對不帶防護結構的ML501 FPGA芯片進行攻擊時,當子密鑰塊猜測正確時,功率差分曲線出現明顯的尖峰,采用相同的方法可以攻擊出其他子密鑰塊,由此可以獲取第16輪的子密鑰K16(48位),攻擊成功。對帶防護結構的芯片攻擊時,功率差分曲線基本是平緩的,波動非常小,也沒有明顯的尖峰存在,可見DPA攻擊對帶有防護結構的FPGA無效。
4 結 語
由以上DPA攻擊試驗表明了FPGA實現DES加密算法對DPA的脆弱性,而采用雙軌和預充電防護技術的FPGA加密芯片具有較好的抗DPA攻擊能力。這也說明利用FPGA底層開發工具通過硬件宏方法能在FPGA硬件上實現安全防護技術的拓展,對開展芯片的安全防護工作的研究具有重要意義。
參 考 文 獻
[1]KOCHER P, JAFFEJ, JUN B. Introduction to differential power analysis and related attacks[J]. IEEE Trans. on Electron Devices, 1998, 50(2): 462-470.
[2]曹建國,王丹,王威.基于RSA公鑰密碼安全性的研究[J].計算機技術與發展,2007,17(1):172-172,176.
[3]CLAVIER C, CORON J, DABBOUS N. Differential power analysis in the presence of hardware countermeasures[J]. CHES 2000, Lect. Notes Comput.Sci., 1965,21(13): 252-263.
[4]TIRI K, VERBAUWHEDE I. A Logic Level Design Me-thodology for a Secure DPA Resistant ASIC or FPGA Implementation\\[C\\]// Proc. of Design Automation and Test in Europe Conference.\\[S.l.\\]:DATE. 2004: 246-251.
[5]王簡瑜,張魯國.基于FPGA實現DES算法的性能分析[J].微計算機信息,2007,23(8):217-218.
[6]李永彬,雷菁.DES加密算法的高速FPGA實現[J].電子工程師,2005,31(7):39-41.
[7]王峰,周學海,陳艾,等.基于部分重構技術的加密算法實現研究[J].電子學報,2007,35(5):959-964.