崔小樂 李修遠(yuǎn) 李 浩 張 興*
①(北京大學(xué)深圳研究生院集成微系統(tǒng)重點(diǎn)實(shí)驗(yàn)室 深圳 518055)
②(鵬城實(shí)驗(yàn)室 深圳 518055)
側(cè)信道攻擊能夠從設(shè)備的側(cè)信道信號(hào)中提取加密操作使用的密鑰,給加密系統(tǒng)帶來了嚴(yán)重的威脅。差分功耗分析 (Differential Power Analysis,DPA)是側(cè)信道攻擊方法之一。它通過大量收集電路的功耗跡線,利用加密算法的中間值和設(shè)備運(yùn)行過程中泄露的功耗信息之間的關(guān)系來獲取密鑰[1]。DPA是一種非侵入式的攻擊方法,因此相對(duì)而言容易實(shí)施。
密碼算法功能可基于硬件形式和軟件形式實(shí)現(xiàn)。硬件形式即在專用硬件電路上實(shí)現(xiàn)密碼算法功能,而軟件形式則是將密碼算法作為軟件程序運(yùn)行在通用處理器上。目前研究表明,許多密碼硬件已經(jīng)被DPA成功攻擊。例如,文獻(xiàn)[2,3]成功攻擊了AES (Advanced Encryption Standard)專用加密電路,Den Boer等人[4]成功攻擊了RSA (Rivset-Shamir-Adleman)硬件電路,F(xiàn)an等人[5]成功破解了ECC (Elliptic Curve Cryptography)電路。另一方面,DPA攻擊對(duì)運(yùn)行在通用處理器上的加密程序同樣具有威脅。Mpalane等人[6]對(duì)運(yùn)行AES程序的PIC MCU成功進(jìn)行了比特級(jí)的DPA攻擊,Petrvalsky等人[7,8]分別攻擊了運(yùn)行在8 051 MCU和ARM核心上的AES軟件。對(duì)于基于開源指令集RISC-V的各種處理器,DPA攻擊也具有嚴(yán)重的威脅[9]。
因此,針對(duì)DPA攻擊的防御措施引起了學(xué)術(shù)界和工業(yè)界的極大關(guān)注。目前研究者提出的DPA防御措施主要分為兩類:掩蔽和隱藏。掩蔽措施對(duì)密碼算法的中間值進(jìn)行混淆。例如,Akkar等人[10]將掩碼應(yīng)用于AES和DES專用加密電路上。他使用一個(gè)固定的掩碼對(duì)明文進(jìn)行XOR操作,從而實(shí)現(xiàn)了對(duì)這兩種加密電路的保護(hù)。Lu等人[11]在SM4電路加密的每一輪中注入一個(gè)隨機(jī)狀態(tài)來混淆中間值,從而達(dá)到抵抗DPA的目的。隱藏措施的基本思想與掩蔽措施不同,該類技術(shù)是通過改變電路運(yùn)行期間的功耗或時(shí)序等特性,從而減少泄露信息。隱藏措施中較為常見的是構(gòu)造安全的邏輯單元門,例如,Tiri等人[12]提出了WDDL (Wave Dynamic Differential Logic),Bucci等人[13]提出了TDPL(Three-phase Dual-rail Precharge Logic),Bellizia等人[14]進(jìn)一步提出了SC-DDPL (Standard-Cell Delay based Dual-rail Precharge Logic)來抵抗DPA攻擊。
近年來,面向CPU的可抵抗DPA攻擊的防御技術(shù)也是研究熱點(diǎn)。Bayrak等人[15]通過隨機(jī)化處理器中獨(dú)立指令的執(zhí)行順序和隨機(jī)化指令的調(diào)度來抵抗DPA攻擊。Bruguier等人[16]的工作中,將中間值進(jìn)行掩碼操作的同時(shí)加入隨機(jī)延時(shí),通過產(chǎn)生隨機(jī)噪聲來保護(hù)通用處理器。針對(duì)RISC-V指令集的處理器芯核,研究人員也提出了一些抵抗DPA攻擊的措施。例如,De Mulder等人[9]應(yīng)用了基于掩碼閾值實(shí)現(xiàn)的掩蔽技術(shù)來保護(hù)RISC-V CPU芯核。Dao等人[17]提出了一種隨機(jī)動(dòng)態(tài)頻率縮放(Random Dynamic Frequency Scaling, RDFS)技術(shù),在每次加密/解密后隨機(jī)改變AES協(xié)處理器的時(shí)鐘頻率,從而在提高了RISC-V SOC的DPA防御能力的同時(shí)保持了較低的功耗。Antognazza等人[18]提出了代碼變形方法。該方法依賴于指令語義將密碼算法的源碼進(jìn)行動(dòng)態(tài)重編譯,從而產(chǎn)生一組相同語義的指令片段。在程序運(yùn)行期間隨機(jī)選擇指令片段代替原來的指令進(jìn)行運(yùn)行。Leplus等人[19]提出了一種隨機(jī)插入偽指令來增加隨機(jī)延遲的方法。該偽指令的構(gòu)造依據(jù)于處理器中運(yùn)行的真實(shí)指令,因此攻擊者不易區(qū)分該指令與真實(shí)指令。Stangherlin等人[20]設(shè)計(jì)了一個(gè)位串行的RISC-V微處理器。它在邏輯級(jí)別上使用布爾掩碼將所有的數(shù)據(jù)進(jìn)行保護(hù),并且在晶體管級(jí)上使用動(dòng)態(tài)多米諾邏輯有效地防御DPA攻擊。
掩蔽措施雖然在一定程度上可以提高硬件的抗DPA攻擊能力,但是由于大部分掩碼方法需要考慮密碼算法的具體實(shí)現(xiàn)方式,因此許多掩碼方案不具有普適性。當(dāng)多個(gè)算法集成在通用處理器中時(shí),每個(gè)掩蔽措施的代價(jià)將會(huì)累加在一起,造成處理器性能的大幅下降。而隱藏措施中的抗DPA邏輯單元改變了電路運(yùn)行時(shí)的功耗特性,因此從根本上阻斷了功耗信息的泄露窗口,并且與算法的實(shí)現(xiàn)形式無關(guān),所以相比于掩蔽措施來說,隱藏措施更加通用。文獻(xiàn)[21]中比較了不同的抗DPA邏輯單元。有些邏輯單元雖然抗DPA的能力更好,但是需要在晶體管級(jí)進(jìn)行全定制的設(shè)計(jì),不適用于處理器之類的大規(guī)模集成電路設(shè)計(jì)。同時(shí)邏輯單元在保證一定安全性的前提下,面積和功耗的開銷要盡可能的小?;谝陨系目紤],本文選擇波動(dòng)動(dòng)態(tài)差分邏輯(Wave Dynamic Differential Logic, WDDL)應(yīng)用在處理器的芯核上。
WDDL由Tiri在2004年提出,是經(jīng)典的雙軌預(yù)充電(Dual-Rail Precharge, DRP)邏輯[12]。它能夠在不同的電路輸入下使加密電路的功耗跡線平坦化,從而防止信息的泄露。WDDL是支持標(biāo)準(zhǔn)單元庫(kù)的DRP邏輯,可以使用EDA工具進(jìn)行自動(dòng)化設(shè)計(jì),更適合應(yīng)用于大規(guī)模集成電路設(shè)計(jì)中。但是WDDL的預(yù)充電行為會(huì)帶來更多的功耗開銷。為了能使基于WDDL的防御措施更具有實(shí)用性,本文針對(duì)基于WDDL的抗DPA攻擊的RISC-V處理器芯核提出兩種功耗抑制技術(shù)。
本文的剩余部分安排如下:第2節(jié)回顧了WDDL邏輯電路的基本特征,并介紹了基于WDDL單元的RISC-V處理器芯核。第3節(jié)提出了兩種輕量級(jí)的電路功耗抑制的方法:隨機(jī)預(yù)充電使能技術(shù)和預(yù)充電使能指令技術(shù)。第4節(jié)討論仿真結(jié)果,第5節(jié)得出論文結(jié)論。
圖1(a)顯示了一個(gè)標(biāo)準(zhǔn)CMOS電路的輸出信號(hào)和其功耗跡線之間的關(guān)系。當(dāng)輸出端信號(hào)的翻轉(zhuǎn)情況不同時(shí),該電路的功耗信息也不同,因此可以根據(jù)功耗的變化來分辨輸出信號(hào)的翻轉(zhuǎn)情況。而WDDL邏輯的基本思想是通過預(yù)充電-求值的動(dòng)態(tài)操作,使電路在每個(gè)周期內(nèi)的功耗均勻化。圖1(b)為WDDL邏輯的與/或門結(jié)構(gòu)示意圖。一個(gè)WDDL單元由原始邏輯門和其互補(bǔ)邏輯門組成。WDDL中使用的預(yù)充電邏輯門如圖1(d)所示。使用時(shí)鐘信號(hào)clock作為預(yù)充電控制信號(hào),可以保證在每次求值操作前都進(jìn)行預(yù)充電。在圖1(c)中,每個(gè)周期內(nèi)電路的功耗分為預(yù)充電功耗和求值功耗。WDDL單元保證了在不同的信號(hào)翻轉(zhuǎn)情況下電路每周期的總功耗保持相同。WDDL單元被證明能夠有效地防御DPA攻擊。
圖1 標(biāo)準(zhǔn)CMOS電路與WDDL電路單元對(duì)比
Rocket Core是加州大學(xué)伯克利分校開發(fā)的一款開源RISC-V處理器芯核,本文配置了一款支持RV64G指令集的64位Rocket芯核作為實(shí)驗(yàn)對(duì)象。該芯核由5個(gè)模塊組成:ALU, BreakpointUnit,CSRFile, Ibuf和MulDiv。ALU模塊實(shí)現(xiàn)算術(shù)運(yùn)算和邏輯運(yùn)算功能;BreakpointUnit模塊實(shí)現(xiàn)硬件斷點(diǎn)功能;CSRFile模塊實(shí)現(xiàn)控制和狀態(tài)寄存器組;Ibuf模塊實(shí)現(xiàn)讀取/緩存執(zhí)行指令;MulDIV模塊實(shí)現(xiàn)乘法除法功能。對(duì)于AES, DES, RSA等加密程序,圖2統(tǒng)計(jì)了程序主函數(shù)中各類指令的數(shù)目。從圖2(a)中得出,在3個(gè)程序的全部指令中,邏輯算術(shù)類指令所占比例最大,超過了60%;而從圖2(b)中可知,對(duì)于每個(gè)程序,邏輯算術(shù)類指令所占比例均超過50%。圖2表明這些加密程序所使用的主要指令屬于邏輯算術(shù)類,這些指令都是由Rocket芯核的ALU模塊處理的。WDDL電路相比于標(biāo)準(zhǔn)CMOS電路具有更大的功耗和面積開銷,把整個(gè)Rocket芯核都替換為WDDL單元的成本非常高,因此本文只將ALU模塊的CMOS單元替換為WDDL單元。本文將使用了WDDL-ALU的Rocket芯核稱為“sw-Rocket”,把所有模塊都用標(biāo)準(zhǔn)CMOS單元綜合的Rocket芯核稱為“sc-Rocket”。圖3顯示,WDDLALU模塊的面積比標(biāo)準(zhǔn)CMOS-ALU模塊增加了2.7倍;而與sc-Rocket芯核相比,sw-Rocket芯核的整體面積增加了15%。
圖2 密碼程序的匯編指令比例分析
圖3 sw-Rocket芯核的面積開銷
本文使用這兩種芯核進(jìn)行了Helloworld, AES,DES和RSA等程序的仿真,并進(jìn)行了功耗分析,結(jié)果如表1所示。在運(yùn)行AES加密程序時(shí), WDDLALU模塊的功耗是CMOS-ALU模塊的37.4倍,并且sw-Rocket芯核的整體功耗是sc-Rocket芯核的3.1倍。這是因?yàn)轭A(yù)充電-求值機(jī)制使得所有WDDL單元在每個(gè)時(shí)鐘周期內(nèi)都產(chǎn)生兩次信號(hào)翻轉(zhuǎn),然而CMOS單元在每個(gè)周期內(nèi)最多產(chǎn)生1次翻轉(zhuǎn)。此外,sc-Rocket內(nèi)部的CMOS-ALU模塊只有當(dāng)被程序調(diào)用時(shí)才會(huì)產(chǎn)生動(dòng)態(tài)功耗,然而sw-Rocket內(nèi)部的WDDL-ALU模塊則在從上電到斷電的完整運(yùn)行時(shí)間內(nèi)均在產(chǎn)生動(dòng)態(tài)功耗。因此,需要功耗抑制技術(shù)來使sw-Rocket芯核更具有實(shí)用性。
表1 不同程序的功耗比較(mW)
WDDL的預(yù)充電行為帶來了大量的功耗開銷,本節(jié)提出了兩種技術(shù)對(duì)其進(jìn)行控制從而降低功耗。
基于預(yù)充電行為的隨機(jī)化思想,可通過一個(gè)隨機(jī)預(yù)充電使能發(fā)生模塊來控制預(yù)充電的行為。隨機(jī)預(yù)充電使能發(fā)生器模塊的結(jié)構(gòu)如圖4所示。它由分頻器Divider、偽隨機(jī)數(shù)發(fā)生器(Pseudo Random Number Generator, PRNG)和預(yù)充電信號(hào)產(chǎn)生器Counter等3個(gè)子模塊組成。分頻器的兩個(gè)輸入信號(hào)分別為Rocket芯核的全局時(shí)鐘信號(hào)和全局復(fù)位信號(hào)。該分頻器可根據(jù)配置參數(shù)NC的取值,產(chǎn)生1個(gè)周期是clock的NC倍的新的時(shí)鐘信號(hào)clock_div,以驅(qū)動(dòng)下一級(jí)子模塊PRNG。如圖5所示,PRNG子模塊主要由LFSR(Linear Feedback Shift Register)和值偏置電路組成。該LFSR每周期可以生成1個(gè)16 bit的偽隨機(jī)數(shù)Rd。值偏置電路通過取模和加法操作,可對(duì)原始隨機(jī)數(shù)Rd進(jìn)行計(jì)算處理,從而得到最終輸出Rp。該隨機(jī)數(shù)會(huì)發(fā)送到PRNG子模塊的輸出端口rand_val。Rd和Rp之間滿足關(guān)系式(1)
圖4 隨機(jī)預(yù)充電使能發(fā)生器電路結(jié)構(gòu)示意圖
圖5 PRNG電路示意圖
其中NC和PC為配置參數(shù),NC和PC共同決定了隨機(jī)數(shù)的范圍為[NC-PC-1,NC-1]。
預(yù)充電信號(hào)發(fā)生器是一個(gè)由全局時(shí)鐘驅(qū)動(dòng)的循環(huán)計(jì)數(shù)器,計(jì)數(shù)范圍為[0,NC-1]。在每個(gè)周期內(nèi),計(jì)數(shù)值都會(huì)與輸入信號(hào)rand_val進(jìn)行比較。如果計(jì)數(shù)值大于或等于rand_val,則將輸出信號(hào)pre_en置為1,否則置為0。
引入隨機(jī)化前后的預(yù)充電邏輯如圖6所示。圖6(a)是加入隨機(jī)化前的原始預(yù)充電邏輯,圖6(b)則是加入了隨機(jī)化的預(yù)充電邏輯,隨機(jī)預(yù)充電使能發(fā)生模塊的輸出和時(shí)鐘信號(hào)、復(fù)位信號(hào)共同控制預(yù)充電的行為,從而驅(qū)動(dòng)sw-Rocket芯核內(nèi)部的WDDL單元工作。隨機(jī)化的預(yù)充電使能信號(hào)可減少WDDL-ALU模塊的預(yù)充電行為數(shù)量,從而降低了它的功耗。
圖6 預(yù)充電邏輯單元電路結(jié)構(gòu)
本文提出的隨機(jī)預(yù)充電使能發(fā)生器的兩個(gè)參數(shù)(NC,PC)均是可以配置的。本文對(duì)不同配置情況下的隨機(jī)預(yù)充電使能發(fā)生器的面積開銷和功耗開銷進(jìn)行了分析,結(jié)果如表2所示。表2的第3~5列分別列出了分頻器Divider,隨機(jī)數(shù)發(fā)生器PRNG和隨機(jī)預(yù)充電使能發(fā)生器的頂層模塊Generator的面積開銷。從表中可以發(fā)現(xiàn),3個(gè)模塊的面積都隨著NC的增加而增加,而只有PRNG和counter的面積隨著PC的增加而增加。在表2中最大面積開銷由最大配置參數(shù)對(duì)(NC,PC)=(64, 64)帶來。在此配置下,頂層模塊隨機(jī)預(yù)充電使能發(fā)生器的面積開銷為709.6 μm2,該面積僅為WDDL-ALU面積的4.6%。表2的第6列是隨機(jī)預(yù)充電使能發(fā)生器在不同配置下的功耗開銷。從表中可以發(fā)現(xiàn),電路的功耗隨著NC,PC的增加輕微地上升。隨機(jī)預(yù)充電使能發(fā)生器所帶來的功耗僅在μW量級(jí),而WDDL-ALU的功耗為mW量級(jí)。這意味著本文所提出的預(yù)充電使能技術(shù)是一個(gè)輕量級(jí)的解決方法,并且這種技術(shù)在不同架構(gòu)的CPU中均有應(yīng)用潛力。
表2 隨機(jī)預(yù)充電發(fā)生器的面積和功耗開銷
RISC-V指令集允許使用者進(jìn)行自定義指令的擴(kuò)展,它啟發(fā)我們?cè)O(shè)計(jì)新的指令來控制WDDL-ALU的預(yù)充電行為。RISC-V指令集支持的指令擴(kuò)展方式主要有兩種:第1種是使用操作碼opcode在自定義空間(custom空間)進(jìn)行指令拓展。例如Rocket芯核會(huì)將custom指令通過Rocket自定義協(xié)處理器接口發(fā)送到協(xié)處理器中進(jìn)行處理,協(xié)處理器處理完成后會(huì)將結(jié)果返回Rocket核心內(nèi)部。然而,這個(gè)方法不適用于預(yù)充電控制,因?yàn)閃DDL-ALU模塊位于Rocket芯核內(nèi)部,而不是作為協(xié)處理器掛載在其外部。第2種指令的拓展方法是使用操作碼opcode的保留空間(reserved空間)來定義全新的指令。此拓展方法需要修改硬件的每一級(jí)流水線來實(shí)現(xiàn)該新指令所定義的功能,同時(shí)還需要修改編譯器來支持該新指令,實(shí)現(xiàn)十分不便。
本文提出一種自定義指令擴(kuò)展方法,該方法利用了RISC-V基本指令集中的CSR類指令。這一類指令提供了一個(gè)軟件和控制狀態(tài)寄存器(Control and Status Register, CSR)之間交互的接口。通過CSR指令,軟件可以控制和觀察CSR寄存器的狀態(tài)。RISC-V指令集架構(gòu)規(guī)定地址空間0x000-0xFFF為控制狀態(tài)寄存器的地址空間,同時(shí)支持設(shè)計(jì)者在允許的地址空間內(nèi)擴(kuò)展新的CSR寄存器。本文首先在地址0x800處擴(kuò)展了一個(gè)預(yù)充電使能CSR寄存器Reg_enPre,該地址被允許進(jìn)行自定義讀寫操作。擴(kuò)展CSR寄存器后,硬件的預(yù)充電行為可由Reg_enPre寄存器直接控制。此時(shí)預(yù)充電行為如圖7所示。使能信號(hào)enpre,即CSR寄存器Reg_enPre的第0 bit,控制WDDL-ALU預(yù)充電的開啟和關(guān)斷:當(dāng)調(diào)用指令“csrwi 0x800, 0x1”將1寫入Reg_enPre時(shí),會(huì)使ALU開啟預(yù)充電;當(dāng)調(diào)用指令“csrwi 0x800,0x0”將0寫入Reg_enPre時(shí),會(huì)使ALU關(guān)閉預(yù)充電。該寄存器Reg_enPre的位寬與Rokcet處理器芯核的通用寄存器位寬相同,都是64 bit,因此若有需求,可以使寄存器的每一位來控制不同模塊預(yù)充電的開啟和關(guān)閉。
圖7 預(yù)充電使能指令通過CSR Reg_enPre控制預(yù)充電
通過擴(kuò)展CSR寄存器的實(shí)例和調(diào)用csrwi指令,對(duì)擴(kuò)展后CSR寄存器狀態(tài)的控制相當(dāng)于擴(kuò)展了自定義的預(yù)充電使能指令,從而可達(dá)到由指令直接控制硬件預(yù)充電行為的目的。Rocket處理器芯核的流水線不需要修改。由于CSR指令已經(jīng)是RISC-V指令集的標(biāo)準(zhǔn)指令,編譯器也不需要修改。以“csrwi addr, value”形式實(shí)現(xiàn)的預(yù)充電使能指令可以在匯編程序的任意位置調(diào)用,因此該指令理論上可以控制密碼算法程序的任意代碼段。在UMC 55 nm的工藝庫(kù)下,新擴(kuò)展的CSR寄存器的面積僅有631.8 μm2,面積開銷幾乎可以忽略。只有當(dāng)CSR中的數(shù)據(jù)發(fā)生翻轉(zhuǎn)時(shí),該新擴(kuò)展的CSR寄存器才會(huì)產(chǎn)生動(dòng)態(tài)功耗,因此功耗開銷也可以忽略不計(jì)。
本文使用Design Compiler工具在UMC 55 nm工藝庫(kù)下對(duì)Rocket芯核的源碼進(jìn)行綜合。得到網(wǎng)表后,使用VCS將Rocket門級(jí)網(wǎng)表和相關(guān)接口文件編譯,得到基于VCS的Rocket硬件仿真器。然后使用該硬件仿真器運(yùn)行AES加密程序的可執(zhí)行文件,得到波形文件。最后使用PrimeTimePX在time_based模式下對(duì)波形文件進(jìn)行功耗分析,得到功耗跡線。具體流程如圖8所示。
圖8 功能仿真及功耗分析流程
本文將第3節(jié)提出的兩種功耗抑制技術(shù)應(yīng)用在不同的Rocket處理器芯核上進(jìn)行仿真并分析結(jié)果。應(yīng)用了隨機(jī)預(yù)充電使能技術(shù)的Rocket芯核稱為rw-Rocket (random based WDDL-ALU Rocket),而應(yīng)用了預(yù)充電使能指令技術(shù)的Rocket芯核稱為iw-Rocket (instruction based WDDL-ALU Rocket)。對(duì)于rw-Rocket芯核,根據(jù)表2中各參數(shù)配置下隨機(jī)預(yù)充電使能發(fā)生器的面積和功耗開銷,選擇了參數(shù)對(duì)(NC,PC)=(32,5)進(jìn)行配置以獲得平均水平。表3比較了不同Rocket芯核的面積開銷。與sw-Rocket芯核相比,rw-Rocket和iw-Rocket的面積分別只增加了0.5%和0.7%左右。
表3 不同Rocket核心的面積開銷(μm2)
用C語言編寫的AES-128加密程序分別運(yùn)行在不同的Rocket芯核上。AES-128的密鑰長(zhǎng)16 Byte,它每次只加密16 Byte長(zhǎng)度的明文。對(duì)于在iw-Rocket芯核上運(yùn)行的AES-128程序,需要在程序源碼中插入預(yù)充電使能指令。由于riscv-gcc內(nèi)聯(lián)匯編的支持,可以直接在C語言代碼中插入“asm volatile (“csrwi 0x800, 0x1”)”和“asm volatile(“csrwi 0x800, 0x0”)”來控制預(yù)充電的開啟和關(guān)閉。文獻(xiàn)[8]對(duì)ARM核心的DPA攻擊是在AES-128算法的字節(jié)替換過程中進(jìn)行的。因此本文以最易受到攻擊的字節(jié)替換代碼段為示例,在該程序段開始時(shí)開啟硬件預(yù)充電,當(dāng)字節(jié)替換結(jié)束時(shí)關(guān)閉硬件預(yù)充電。
圖9顯示了不同的Rocket芯核運(yùn)行AES-128程序時(shí)的ALU模塊功耗跡線。圖9(a)是sc-Rocket芯核中的ALU模塊功耗跡線。圖9(b)是sw-Rocket芯核中ALU模塊的功耗跡線。它表明在運(yùn)行AES-128程序時(shí),WDDL-ALU模塊的功耗在每個(gè)周期內(nèi)幾乎相同。
圖9 AES-128程序運(yùn)行在不同的Rocket芯核上ALU模塊部分功耗跡線
圖9(c)是rw-Rocket芯核的內(nèi)部ALU模塊功耗跡線。隨機(jī)預(yù)充電使能技術(shù)已經(jīng)把功耗跡線隨機(jī)化,并且破壞了AES算法的中間值和實(shí)時(shí)功耗之間的相關(guān)性。由于時(shí)間分辨率的原因,在圖9(c)的功耗跡線中所表現(xiàn)出的預(yù)充電行為并不明顯。但是放大其中的一段后可以發(fā)現(xiàn),ALU模塊中的預(yù)充電行為已經(jīng)由使能信號(hào)進(jìn)行了隨機(jī)化控制。在使能信號(hào)有效期間,ALU模塊在進(jìn)行預(yù)充電操作,硬件得到了功耗平均化方式的保護(hù)。而實(shí)際上,rw-Rocket芯核的抗DPA能力歸因于預(yù)充電的隨機(jī)性。根據(jù)式(1),參數(shù)NC越 大隨機(jī)性越好,因?yàn)镹C決定了產(chǎn)生的隨機(jī)數(shù)Rp的上限;而參數(shù)PC越接近NC時(shí)隨機(jī)性越好。因?yàn)樵贜C一定時(shí),PC決定了隨機(jī)數(shù)Rp的下限。也就是說,當(dāng)NC越大,且PC越接近NC時(shí),隨機(jī)數(shù)Rp的范圍越寬,從而可使預(yù)充電使能信號(hào)的隨機(jī)性越好。
圖9(d)是iw-Rocket芯核中ALU模塊的功耗跡線。預(yù)充電使能指令應(yīng)用于字節(jié)替換程序段。從圖9(d)可以看出預(yù)充電的行為準(zhǔn)確地發(fā)生在了字節(jié)替換的操作過程中,并且ALU模塊的功耗在AES-128程序的字節(jié)替換過程中始終保持相同。
表4列出了AES-128程序運(yùn)行在不同Rocket芯核上的功耗。rw-Rocket芯核中ALU模塊的功耗約為sw-Rocket芯核中ALU功耗的16%,而整個(gè)rw-Rocket芯核的功耗是sw-Rocket功耗的42%。iw-Rocket核心中ALU模塊的功耗只有sw-Rocket芯核中ALU功耗的8%,整個(gè)iw-Rocket芯核的功耗是sw-Rocket功耗的36.4%。這表明提出的兩種技術(shù)都能夠抑制使用了WDDL-ALU的Rocket芯核的功耗。
表4 不同Rocket核心運(yùn)行AES-128程序的功耗開銷(mW)
在rw-Rocket芯核和iw-Rocket芯核上運(yùn)行AES-128程序的功耗分別為2.49 mW和2.16 mW,相比于sc-Rocket的功耗分別上升了28.3%和11.3%。但是,在可接受的電路功耗開銷下,RISC-V處理器芯核防御DPA攻擊的能力得到了明顯增強(qiáng)。
本文提出隨機(jī)預(yù)充電使能技術(shù)和預(yù)充電使能指令技術(shù)具有兩大明顯的優(yōu)勢(shì)。其一是對(duì)任意加密算法都具有通用性。應(yīng)用了隨機(jī)預(yù)充電使能技術(shù)的rw-Rocket芯核和應(yīng)用了預(yù)充電使能指令技術(shù)的iw-Rocket芯核理論上可以對(duì)所有加密算法提供抗DPA攻擊的保護(hù)。當(dāng)使用rw-Rocket芯核時(shí),密碼算法的源碼完全不需要修改;當(dāng)使用iw-Rocket芯核時(shí),可以在源碼中插入自定義的預(yù)充電使能指令來精確地保護(hù)關(guān)鍵的程序段。相比于文獻(xiàn)[17]中使用的僅對(duì)AES算法提供保護(hù)的協(xié)處理器方案,本文提出的兩種方法對(duì)密碼算法具有通用性。本文方法的另一大優(yōu)勢(shì)在于較高的安全性。文獻(xiàn)[16]中使用插入隨機(jī)延時(shí)的方法。但是由于彈性對(duì)齊算法和機(jī)器學(xué)習(xí)的引入,DPA攻擊也可以對(duì)非對(duì)齊的功耗跡線產(chǎn)生威脅。因此該方案存在被攻破的風(fēng)險(xiǎn)。而文獻(xiàn)[9]中曾使用了掩碼的方案來防御DPA攻擊,但是該方案只能防御一階的DPA攻擊。高階的DPA攻擊可以對(duì)多個(gè)采樣點(diǎn)進(jìn)行聯(lián)合分析,從而破解掩碼的作用。本文提出的兩種方案都是基于安全的邏輯單元WDDL,它從根本上改變了電路運(yùn)行時(shí)的功耗特征,從而阻斷了信息泄露的途徑。因此本方案能夠有效地防御使用了彈性對(duì)齊算法的DPA攻擊以及高階的DPA攻擊,具有較高的安全性。
同時(shí)本文也存在一些不足之處。用WDDL邏輯單元將ALU模塊的CMOS單元替換后會(huì)增加關(guān)鍵路徑的延時(shí),從而降低處理器的性能。但是從仿真結(jié)果來看,在可接受的性能開銷范圍內(nèi),處理器防御DPA攻擊的能力得到了明顯增強(qiáng)。目前我們針對(duì)兩種方案的安全性驗(yàn)證都是基于實(shí)驗(yàn)原理以及仿真結(jié)果的,未能在流片后的芯片上進(jìn)行DPA攻擊。后續(xù)我們將在條件允許的情況下進(jìn)一步完善這方面的工作。
本文針對(duì)基于WDDL-ALU的抗DPA攻擊的RISC-V處理器芯核提出了兩種功耗抑制方法。隨機(jī)預(yù)充電使能技術(shù)與CPU架構(gòu)無關(guān),它通過隨機(jī)化預(yù)充電的行為改善了RISC-V芯核的抗DPA攻擊能力。預(yù)充電信號(hào)的隨機(jī)性由隨機(jī)預(yù)充電使能產(chǎn)生器的參數(shù)對(duì)(NC,PC)共同控制。預(yù)充電使能指令技術(shù)使用了一種新的指令拓展方法,它不需要對(duì)處理器的硬件以及編譯器進(jìn)行修改。這個(gè)方法也是通過控制WDDL預(yù)充電的行為來保護(hù)RISC-V芯核。該方法的靈活性在于它是通過重用CSR指令來實(shí)現(xiàn)的,而且新的預(yù)充電控制指令可以在程序的任何地方調(diào)用。仿真結(jié)果表明,本文提出的兩種技術(shù)都能夠保護(hù)RISC-V芯核免受DPA攻擊。在本文的AES-128程序仿真中,隨機(jī)預(yù)充電使能技術(shù)和預(yù)充電使能指令技術(shù)分別把rw-Rocket和iw-Rocket中ALU模塊的功耗降低到了sw-Rocket芯核中ALU模塊功耗的16%和8%,rw-Rocket芯核和iw-Rocket芯核的整體功耗分別降低至sw-Rocket芯核功耗的42%和36.4%。這兩種技術(shù)都是輕量級(jí)的解決方案,因?yàn)楣暮兔娣e開銷相比基于WDDL-ALU的Rocket芯核只略有增加。這兩種技術(shù)使WDDL成為RISCV芯核抵抗DPA攻擊的實(shí)用方法,因?yàn)榕c原始的RISC-V芯核相比,其功耗只分別增加了28.3%和11.3%。