牛世權(quán)
(國防科技大學(xué)計(jì)算機(jī)學(xué)院,湖南 長沙 410073)
近年來,針對嵌入式設(shè)備中硬件的新型攻擊不斷出現(xiàn),嚴(yán)重威脅嵌入式設(shè)備的安全。特別是2018年曝出的Spectre[1]和Melt-down[2]針對微處理器硬件的攻擊,使人們意識到信息安全不僅僅只是軟件層面的安全,硬件層面的安全也同樣重要。
一方面,微處理器設(shè)計(jì)者們的目標(biāo)總是越來越高的性能,缺乏對安全性的考量。這一現(xiàn)狀在硬件安全問題頻發(fā)的今天需要改變。特別是嵌入式微處理器,由于其應(yīng)用領(lǐng)域通常較專一,對安全性與功耗、面積等方面的開銷要求更高。如何在提升嵌入式微處理器安全性的同時(shí)保證合理的性能與開銷,成為嵌入式微處理器安全設(shè)計(jì)的一個(gè)難點(diǎn)。另一方面,隨著非易失性存儲(chǔ)器被配備到了嵌入式設(shè)備中,就需要考慮如何保護(hù)配備非易失性存儲(chǔ)器的嵌入式設(shè)備。非易失性存儲(chǔ)器的特點(diǎn)是設(shè)備掉電后數(shù)據(jù)不會(huì)消失,存儲(chǔ)在非易失性存儲(chǔ)器中的敏感數(shù)據(jù)容易被獲取[3]。因此,有必要針對配備非易失性存儲(chǔ)器的嵌入式設(shè)備設(shè)計(jì)一種輕量級、低開銷的安全內(nèi)存加密引擎來保證其安全。此外,觀察到以往對安全內(nèi)存的研究大都針對通用微處理器[4,5],且集中于性能的提高[6 - 8],本文則針對嵌入式微處理器的特點(diǎn),綜合平衡安全性、面積開銷和訪存延時(shí)等因素來設(shè)計(jì)安全內(nèi)存加密引擎。
本文的主要貢獻(xiàn):首先是針對嵌入式微處理器設(shè)計(jì)了一種輕量級、低開銷的安全內(nèi)存加密引擎;其次,將該安全內(nèi)存加密引擎集成到了RISC-V嵌入式微處理器中;最后,對該安全內(nèi)存加密引擎進(jìn)行了評估。
RISC-V是加州大學(xué)伯克利分校設(shè)計(jì)并發(fā)布的一種開源指令集架構(gòu)。RlSC-V開源指令架構(gòu)的特點(diǎn)在于簡潔、模塊化和可擴(kuò)展,通過將這種模塊化的指令集進(jìn)行組合或者擴(kuò)展,幾乎可以構(gòu)建適用于任何一個(gè)領(lǐng)域的微處理器?;赗lSC-V開源指令架構(gòu)的特點(diǎn),選擇基于RISC-V開源指令集架構(gòu)實(shí)現(xiàn)的開源微處理器Ariane[9]作為本文的安全內(nèi)存設(shè)計(jì)平臺(tái)。Ariane是瑞士蘇黎世聯(lián)邦理工大學(xué)設(shè)計(jì)開發(fā)的一款RISC-V開源微處理器核。它擁有完整的6級流水線且是單發(fā)射順序執(zhí)行的,主要實(shí)現(xiàn)了64位的I、M、A、C指令[10]以及M、S、U 3個(gè)特權(quán)級別的擴(kuò)展[11]。此外,它還支持進(jìn)行FPGA驗(yàn)證,方便本文在FPGA上進(jìn)行評估。
2.2.1 安全模型
在本文的設(shè)計(jì)中,將嵌入式系統(tǒng)劃分為2個(gè)部分。一個(gè)部分是安全區(qū)域,包括嵌入式微處理器核、高速緩存、安全內(nèi)存加密引擎等這些片內(nèi)模塊。它們都被認(rèn)為是可信的和受保護(hù)的,因?yàn)榍度胧轿⑻幚砥餍酒瑑?nèi)部的狀態(tài)很難通過物理手段來進(jìn)行篡改或破壞。另一個(gè)部分是不安全區(qū)域,包括片外內(nèi)存和各種外圍設(shè)備。與傳統(tǒng)片外內(nèi)存相比使用了非易失性存儲(chǔ)器的片外內(nèi)存,在設(shè)備掉電后數(shù)據(jù)不消失,物理攻擊者能夠輕易地對其中的敏感數(shù)據(jù)進(jìn)行訪問或者對其中的敏感數(shù)據(jù)進(jìn)行修改[3]。
2.2.2 加密方式比較
安全內(nèi)存加密的一種直接方式就是利用只有全局密鑰Key的塊密碼算法AES(Advanced Encryption Standard)直接對數(shù)據(jù)進(jìn)行加密[12],如圖1所示。在這種加密方式中,由于所有的數(shù)據(jù)都使用相同的密鑰進(jìn)行加密,相同的明文產(chǎn)生相同的密文,攻擊者只需對比加密后的數(shù)據(jù)就能知道哪些數(shù)據(jù)內(nèi)容相同。這就使得該種加密方式容易受到字典攻擊和重放攻擊[13]。
Figure 1 Encryption method using only Key圖1 只使用全局密鑰的加密方式
為了增強(qiáng)加密方式的安全性,可以同時(shí)利用全局密鑰和地址來對數(shù)據(jù)進(jìn)行加密,這樣就可以保證不同地址中的數(shù)據(jù)加密后不相同。但是,只要觀察該地址的連續(xù)寫回,攻擊者依然能夠發(fā)起字典攻擊。如圖2所示,為了進(jìn)一步增強(qiáng)加密方式的安全性,本文在利用全局密鑰和地址的同時(shí),加入計(jì)數(shù)器來對數(shù)據(jù)進(jìn)行加密,每一次將數(shù)據(jù)寫回內(nèi)存時(shí)計(jì)數(shù)器執(zhí)行加一操作。這樣即便是同一地址的連續(xù)寫回操作,數(shù)據(jù)加密后也不相同。該加密方式相比于利用全局密鑰和地址的加密方式安全性更強(qiáng)。
Figure 2 Encryption method using Key, Addr and Ctr圖2 Key+Addr+Ctr的加密方式
2.2.3 計(jì)數(shù)器模式的加密
安全內(nèi)存加密在使嵌入式微處理器獲得更高安全性的同時(shí),也會(huì)影響嵌入式微處理器的訪存性能。其原因在于,在加入了安全內(nèi)存加密引擎后,每一次訪存都需要對數(shù)據(jù)進(jìn)行加解密操作。如果這些加解密操作是串行執(zhí)行的,那勢必會(huì)帶來很大的延時(shí)開銷。
為了降低加解密操作所帶來的延時(shí)開銷,本文選用計(jì)數(shù)器模式的加密方式[14]。在計(jì)數(shù)器模式的加密方式中,一種被稱為一次性填充OTP(One Time Pad)的技術(shù)能夠減少嵌入式微處理器在訪存過程中的延時(shí)開銷[15]。如圖3所示,一次性填充技術(shù)將訪存過程和計(jì)算一次性填充的過程并行化。通過在訪存的同時(shí)計(jì)算一次性填充,之后再將一次性填充與訪存時(shí)的明文或密文進(jìn)行異或操作來進(jìn)行加解密,能夠大大降低加解密操作所帶來的訪存延時(shí)。
Figure 3 Process of reducing latency in counter mode encryption圖3 計(jì)數(shù)器模式加密減少訪存延時(shí)的過程
利用計(jì)數(shù)器模式對內(nèi)存數(shù)據(jù)進(jìn)行加解密的具體過程則如圖4所示。當(dāng)要將數(shù)據(jù)寫回內(nèi)存時(shí),首先利用密鑰、地址和計(jì)數(shù)器來生成一次性填充,然后再將該一次性填充與要寫回內(nèi)存的明文進(jìn)行異或操作,以實(shí)現(xiàn)加密。當(dāng)要從內(nèi)存中讀取數(shù)據(jù)時(shí),同樣也需要計(jì)算一次性填充,然后再將一次性填充與從內(nèi)存中取到的密文進(jìn)行異或操作,以實(shí)現(xiàn)解密??傊?,計(jì)數(shù)器模式的加密在兼顧安全性的同時(shí)能降低加解密操作所帶來的訪存延時(shí)。
Figure 4 Counter mode encryption圖4 計(jì)數(shù)器模式加密
安全內(nèi)存加密引擎SME(Secure Memory Encryption Engine)的總體架構(gòu)如圖5所示。從圖5中可以看出,安全內(nèi)存加密引擎由3個(gè)主要的模塊組成,分別是PUF(Physically Unclonable Function)[16]模塊、計(jì)數(shù)器緩存模塊和AES加密模塊。其中,PUF模塊為整個(gè)安全內(nèi)存加密引擎提供全局密鑰。計(jì)數(shù)器緩存模塊則用來緩存計(jì)數(shù)器值。在片上緩存計(jì)數(shù)器值可加快安全內(nèi)存加密引擎的加解密速度,減小訪存延時(shí)開銷。AES加密模塊則利用PUF模塊產(chǎn)生的全局密鑰、訪存地址以及計(jì)數(shù)器緩存模塊提供的計(jì)數(shù)器值來生成一次性填充。生成的一次性填充再與明文或密文進(jìn)行異或操作,從而完成加解密工作。
Figure 5 Secure memory encryption engine architecture圖5 安全內(nèi)存加密引擎架構(gòu)
當(dāng)高速緩存中的數(shù)據(jù)被寫回內(nèi)存時(shí),安全內(nèi)存加密引擎首先從計(jì)數(shù)器緩存單元中查找相應(yīng)的計(jì)數(shù)器值。如果查找到相應(yīng)的計(jì)數(shù)器值,則直接取出該計(jì)數(shù)器值。然后對該計(jì)數(shù)器值執(zhí)行加一操作,并用這個(gè)新的計(jì)數(shù)器值來對即將要寫回的數(shù)據(jù)進(jìn)行加密,同時(shí)更新計(jì)數(shù)器緩存模塊中的計(jì)數(shù)器值。當(dāng)加密完成后就將加密后的數(shù)據(jù)和新的計(jì)數(shù)器值寫回內(nèi)存。當(dāng)高速緩存向內(nèi)存發(fā)出讀數(shù)據(jù)請求時(shí),安全內(nèi)存加密引擎首先從計(jì)數(shù)器緩存中查找相應(yīng)的計(jì)數(shù)器值,找到相應(yīng)的計(jì)數(shù)器值則直接用該計(jì)數(shù)器值對數(shù)據(jù)進(jìn)行解密。解密后再送入高速緩存中。
PUF全稱為物理不可克隆函數(shù),可以從硬件復(fù)雜的物理特性中動(dòng)態(tài)地生成密鑰,而不需要使用片上存儲(chǔ)器來保存密鑰。與傳統(tǒng)的密鑰生成和存儲(chǔ)方式相比,基于 PUF 生成的密鑰具有不用保存、防篡改和防克隆等優(yōu)點(diǎn),能夠?yàn)楸疚牡那度胧轿⑻幚砥魈峁┌踩詮?qiáng)、開銷低的全局密鑰[17]。
本文使用FPGA類型的Anderson PUF[18]來生成128位密鑰。Anderson PUF利用FPGA切片(Slice)中可配置為移位寄存器的查找表單元LUT(Look Up Table)和進(jìn)位邏輯中的級聯(lián)二選一開關(guān)搭建出互相競爭的2路延時(shí)通路,并使用Slice內(nèi)部的一個(gè)觸發(fā)器進(jìn)行輸出值的判斷,從而實(shí)現(xiàn)1位邏輯0或邏輯1的響應(yīng)輸出。PUF模塊中,生成1位PUF響應(yīng)需要4個(gè)Slice,生成128位的PUF響應(yīng)需要512個(gè)Slice。
Table 1 AES encryption standard表1 AES不同加密標(biāo)準(zhǔn)
Table 2 Area overhead after synthesis表2 綜合后面積開銷
AES[19]全稱為高級加密標(biāo)準(zhǔn),它由美國國家標(biāo)準(zhǔn)技術(shù)研究所于2001年發(fā)布,目前已成為對稱密鑰加密中最流行的算法之一。AES算法是一種對稱分組密碼算法,通過多輪置換迭代操作得到密文。在AES標(biāo)準(zhǔn)規(guī)范中,分組長度只能是128 bit,而密鑰的長度可以使用128 bit、192 bit或256 bit。密鑰的長度不同,推薦加密輪數(shù)也不同。表1列出了不同的AES加密標(biāo)準(zhǔn)。
AES加密過程是在一個(gè)4×4的字節(jié)矩陣上進(jìn)行的,其初值就是一個(gè)明文塊。各輪AES加密循環(huán)(除最后一輪外)均包含4個(gè)步驟:字節(jié)替換(SubBytes)、行移位(ShiftRows)、列混合(MixColumns)和輪密鑰加(AddRoundKey)。其中,字節(jié)替換(SubBytes),是通過非線性的替換函數(shù),用查找表的方式把每個(gè)字節(jié)替換成對應(yīng)的字節(jié)。行移位(ShiftRows),是將矩陣中的每個(gè)橫列進(jìn)行循環(huán)式移位。列混合(MixColumns),是為了充分混合矩陣中各個(gè)列的操作,這個(gè)步驟使用線性轉(zhuǎn)換來混合每列的4個(gè)字節(jié)。輪密鑰加(AddRound- Key),則是將矩陣中的每一個(gè)字節(jié)都與該次輪密鑰做異或運(yùn)算。
本文的設(shè)計(jì)選用了AES-128作為加解密模塊。AES模塊利用PUF模塊產(chǎn)生的128 bit的密鑰對由數(shù)據(jù)地址和數(shù)據(jù)計(jì)數(shù)器組成的128 bit的種子值進(jìn)行加密,從而生成一次性填充。該一次性填充再與數(shù)據(jù)明文或密文進(jìn)行異或,完成對數(shù)據(jù)的加解密操作。
由于數(shù)據(jù)所對應(yīng)的計(jì)數(shù)器值與數(shù)據(jù)一起存放在內(nèi)存中,導(dǎo)致每次加解密時(shí)都需要先訪存來得到計(jì)數(shù)器值,然后才能對數(shù)據(jù)進(jìn)行加解密,這樣勢必會(huì)造成很大的訪存延時(shí)[5]。為了降低該訪存延時(shí),本文在安全內(nèi)存加密引擎中加入一個(gè)計(jì)數(shù)器高速緩存,將計(jì)數(shù)器值緩存在計(jì)數(shù)器高速緩存中,從而減少數(shù)據(jù)加解密時(shí)的訪存次數(shù),大大提高加解密速度。
結(jié)合RISC-V嵌入式微處理器Ariane的特點(diǎn),將設(shè)計(jì)的安全內(nèi)存加密引擎集成到了Ariane的高速緩存和內(nèi)存控制器之間,如圖6所示。從Ariane核發(fā)出的有效訪存請求都會(huì)首先經(jīng)過安全內(nèi)存加密引擎。安全內(nèi)存加密引擎會(huì)對訪存的數(shù)據(jù)進(jìn)行加解密操作,完成加解密操作后再將數(shù)據(jù)送往內(nèi)存控制器或者Ariane的高速緩存。Ariane的高速緩存一次性讀寫128 bit的數(shù)據(jù),能夠與使用AES模塊加密生成的128 bit的一次性填充進(jìn)行異或操作來進(jìn)行加解密。生成一次性填充時(shí),使用到了該數(shù)據(jù)的地址以及該數(shù)據(jù)的計(jì)數(shù)器值。
Figure 6 Secure memory encryption engine location圖6 安全內(nèi)存加密引擎位置
本文使用SystemVerilog設(shè)計(jì)的安全內(nèi)存加密引擎,并使用Vivado 2018.2在Genesys2 FPGA開發(fā)板上進(jìn)行了綜合實(shí)現(xiàn),以評估安全內(nèi)存加密引擎對RISC-V嵌入式微處理器訪存性能方面的影響和面積方面的影響。
(1)訪存性能方面。安全內(nèi)存加密引擎在Genesys2 FPGA開發(fā)板上的時(shí)鐘頻率和RISC-V內(nèi)核的一致,RISC-V內(nèi)核訪存一次平均需要110個(gè)時(shí)鐘周期,AES模塊加密一次需要21個(gè)時(shí)鐘周期。在PUF模塊生成密鑰且計(jì)數(shù)器高速緩存命中的情況下,只需要11個(gè)時(shí)鐘周期就能生成一次性填充。生成的一次性填充再與訪存得到的數(shù)據(jù)進(jìn)行異或操作就能完成加解密。由于加密生成一次性填充的過程與訪存的過程可以并行進(jìn)行,一次性填充能夠提前完成,這種情況下只需等待訪存獲得數(shù)據(jù)后再進(jìn)行異或操作就能完成加解密,其訪存延時(shí)還是110個(gè)時(shí)鐘周期。而如果采用直接加密的方式來設(shè)計(jì)安全內(nèi)存加密引擎,由于其直接使用AES來對訪存數(shù)據(jù)進(jìn)行加解密,AES模塊的加解密延時(shí)將會(huì)附加到訪存延時(shí)上,其訪存延時(shí)將變?yōu)?11個(gè)時(shí)鐘周期。相比于直接加密,本文設(shè)計(jì)的計(jì)數(shù)器模式的安全內(nèi)存加密引擎對訪存性能的影響更小。
(2)面積方面。使用Vivado 2018.2在Genesys2 FPGA開發(fā)板上對集成了安全內(nèi)存加密引擎的RISC-V嵌入式微處理器進(jìn)行了綜合。綜合后的面積開銷情況如表2所示。從表2中可以看出,在總的LUT單元使用情況方面,安全內(nèi)存加密引擎只占到了整個(gè)RISC-V嵌入式微處理器的13%,其中計(jì)數(shù)器高速緩存所占用的LUT單元數(shù)較多,達(dá)到了7%。在FF單元使用情況方面,安全內(nèi)存加密引擎只占到了整個(gè)RISC-V嵌入式微處理器的11%,其中AES加密單元所使用的FF單元數(shù)較多,達(dá)到了7.8%??梢钥闯?,安全內(nèi)存加密引擎的面積開銷相對于整個(gè)RISC-V嵌入式微處理器來說是比較小的,對整個(gè)RISC-V嵌入式微處理器的面積影響較小。
本文主要利用PUF和計(jì)數(shù)器模式的AES加密技術(shù),設(shè)計(jì)了一種適用于嵌入式微處理器的輕量級、低開銷的安全內(nèi)存加密引擎,不僅將其集成到了RISC-V嵌入式微處理器中,而且還通過Genesys 2 FPGA開發(fā)板對其進(jìn)行了評估。評估結(jié)果表明,安全內(nèi)存加密引擎能夠在提升RISC-V嵌入式微處理器安全性的同時(shí),保證其合理的訪存性能,以及較小的面積開銷。