楊文勇,黃 鷺,吳孔程,曹春暉,趙稟睿,李曉潮*
(1.廈門城市職業(yè)學(xué)院電子與信息工程系,福建 廈門 361008; 2.廈門大學(xué)信息科學(xué)與技術(shù)學(xué)院,福建 廈門 361005)
Linux統(tǒng)一加密設(shè)置(LUKS)是Linux系統(tǒng)的標(biāo)準(zhǔn)磁盤加密認(rèn)證規(guī)范,適用于各種不同的Linux發(fā)行版本和Android操作系統(tǒng).LUKS的認(rèn)證算法采用兩層的密鑰結(jié)構(gòu),即用戶密鑰和主密鑰.主密鑰加密數(shù)據(jù),用戶密鑰對(duì)主密鑰進(jìn)行加密.LUKS首先通過(guò)基于密碼的密鑰派生函數(shù)(PBKDF2)來(lái)生成用戶密鑰,使用生成的用戶密鑰加密得到主密鑰后,采用數(shù)據(jù)分割在存儲(chǔ)前對(duì)主密鑰進(jìn)行擴(kuò)展和分割,以提高安全性.LUKS認(rèn)證算法包含哈希算法、對(duì)稱加解密算法以及基于哈希消息驗(yàn)證代碼(HMAC)導(dǎo)出的PBKDF2,其復(fù)雜度較高,所需要的硬件資源較多.
Malvoni等[1]提供了LUKS具體實(shí)現(xiàn)平臺(tái)選擇的依據(jù),從在中央處理器(CPU)、圖像處理器(GPU)和現(xiàn)場(chǎng)可編程門陣列(FPGA)計(jì)算平臺(tái)上運(yùn)行同一個(gè)認(rèn)證機(jī)制所得到的能效比結(jié)果來(lái)看,FPGA的能效比最高.目前,在FPGA上實(shí)現(xiàn)認(rèn)證算法的相關(guān)研究較少,如何在有限資源的FPGA中實(shí)現(xiàn)LUKS算法并獲得較高吞吐率是基于FPGA兌現(xiàn)工作的研究重點(diǎn),需要兼顧吞吐率、占用資源大小、資源利用率和功耗等因素.
Lee等[2]通過(guò)對(duì)高級(jí)加密標(biāo)準(zhǔn)(AES)的優(yōu)化和四級(jí)流水線架構(gòu)的實(shí)現(xiàn),使AES算法吞吐率達(dá)到了3.8 Gbit/s;Michail等[3]運(yùn)用諸如循環(huán)展開、預(yù)計(jì)算、重定時(shí)等多種技術(shù)來(lái)實(shí)現(xiàn)安全散列算法(SHA)-1,其優(yōu)化后的架構(gòu)在Virtex-4器件(xc4vlx100-12FF1148)上實(shí)現(xiàn)了8.05 Gbit/s的吞吐率,占用的Slice數(shù)為2 390.可以看出,通過(guò)對(duì)AES和SHA-1進(jìn)行優(yōu)化能夠在有限資源的FPGA平臺(tái)上達(dá)到較高吞吐率.Li等[4]首次在FPGA平臺(tái)上采用PBKDF2-SHA1和AES-128算法,實(shí)現(xiàn)了生成用戶密鑰模塊的LUKS流水線架構(gòu),SHA-1的吞吐率達(dá)到了1 786 Mbit/s,使用1 033個(gè)Slice中的查找表(LUT)在實(shí)現(xiàn)平臺(tái)Picozed 7030上的密鑰恢復(fù)速度為20.6 s-1.由于Li等[4]僅在LUKS的較高層級(jí)采用了流水線架構(gòu),沒(méi)有對(duì)SHA-1等關(guān)鍵基礎(chǔ)模塊采用流水線,實(shí)驗(yàn)數(shù)據(jù)表明這些模塊的吞吐率還有很大的提升空間.王文功等[5]在多片F(xiàn)PGA上實(shí)現(xiàn)了SHA-1的并行運(yùn)算,但因?yàn)闆](méi)有對(duì)算法的底層實(shí)現(xiàn)進(jìn)行流水線優(yōu)化,吞吐率只有3.2 Gbit/s.劉恒等[6]將MD5、SHA-1、SHA-2等7種哈希算法設(shè)計(jì)為一個(gè)可重構(gòu)IP,實(shí)現(xiàn)了一種高效可配的哈希算法硬件架構(gòu),但其中SHA-1的吞吐率較低,只有640 Mbit/s.龔向東等[7]采用了流水線架構(gòu)優(yōu)化AES的關(guān)鍵路徑-密鑰擴(kuò)展,占用資源1 139 個(gè)Slice、308個(gè)塊隨機(jī)存取存儲(chǔ)器(BRAM)時(shí)吞吐率達(dá)到了56.83 Gbit/s;但如果考慮BRAM資源,其實(shí)際的單位Slice資源吞吐率權(quán)為1.40 Mbit/s.
基于以上分析,本研究設(shè)計(jì)了一種基于FPGA的高吞吐率LUKS認(rèn)證算法片上系統(tǒng):1) 對(duì)關(guān)鍵的PBKDF2-HMAC-SHA-1.算法采用流水線結(jié)構(gòu),并且基于預(yù)計(jì)算和回路展開等技術(shù)實(shí)現(xiàn)了SHA-1流水線結(jié)構(gòu);2) 充分利用FPGA內(nèi)部的BRAM資源實(shí)現(xiàn)基于S盒和T盒(ST-box)映射表的AES算法,節(jié)省片內(nèi)Slice資源給其他的流水線結(jié)構(gòu),并提升AES算法所對(duì)應(yīng)電路的工作頻率;3) 對(duì)主要模塊進(jìn)行合理分割,平衡了各模塊之間的運(yùn)算時(shí)鐘數(shù),以提高整體架構(gòu)的工作頻率.
LUKS認(rèn)證算法流程如圖1所示.由圖1可知,雖然LUKS加密的最后階段對(duì)主密鑰進(jìn)行了銷毀,但是可以在被加密硬盤上的密鑰數(shù)據(jù)區(qū)獲取到與主密鑰有關(guān)的數(shù)據(jù),進(jìn)而完成解密.PBKDF2所需的主密鑰鹽值和迭代次數(shù),加密LUKS盤所使用的哈希算法和對(duì)稱加解密算法的類型都能夠從LUKS加密卷的卷頭(PHDR)上獲得[8].
圖1 LUKS認(rèn)證算法的密碼驗(yàn)證過(guò)程Fig.1 Password verification process of LUKS authentication algorithm
本設(shè)計(jì)的整體架構(gòu)分為兩個(gè)部分,即主控處理器部分和LUKS硬件協(xié)處理器部分,分別基于FPGA的硬件處理器(PS)和可編程邏輯(PL)資源實(shí)現(xiàn).兩者之間采用先進(jìn)可擴(kuò)展接口(AXI)進(jìn)行通信,主控處理器通過(guò)AXI與片內(nèi)BRAM和LUKS電路模塊相連,輸入數(shù)據(jù)并獲得LUKS協(xié)處理器的運(yùn)算結(jié)果.在BRAM中,儲(chǔ)存有主密鑰的相關(guān)數(shù)據(jù),作為AES解密模塊的輸入.其他LUKS模塊所需要的數(shù)據(jù)可以從AXI相關(guān)的寄存器中獲取.
表1 流水線結(jié)構(gòu)LUKS中IP核各模塊的時(shí)延
Tab.1 Amount of delayed for each module of IP core in LUKS pipeline architecture
模塊時(shí)延/clock 密碼生成器 16 PBKDF2第一級(jí)3 600 960 PBKDF2第二級(jí)3 600 960 PBKDF2第三級(jí)3 601 048 PBKDF2第四級(jí)3 601 048 AES AF-Merge1 631 672 PBKDF2校驗(yàn)哈希值生成3 619 000 哈希值比較1
圖2 LUKS硬件協(xié)處理器架構(gòu)Fig.2 Hardware coprocessor architecture of LUKS
基于以上各模塊運(yùn)算時(shí)鐘數(shù)的分析,本研究設(shè)計(jì)了如圖2所示的硬件協(xié)處理器架構(gòu),包括1個(gè)密碼產(chǎn)生模塊、5個(gè)PBKDF2模塊、1個(gè)AES AF-Merge模塊、1個(gè)主密鑰校驗(yàn)哈希值比較模塊和1個(gè)頂層AXI控制模塊,模塊之間通過(guò)緩存進(jìn)行連接.接到主控處理器給出的控制指令后,開始認(rèn)證算法的密鑰驗(yàn)證過(guò)程:1) 由密碼產(chǎn)生模塊生成用戶密鑰并輸入到密鑰緩沖區(qū);2) 第1~4級(jí)流水線的PBKDF2模塊從前一級(jí)緩沖區(qū)中取得輸入并將處理后的數(shù)據(jù)輸入到后一級(jí)的緩沖區(qū);3) AES AF-Merge模塊用前面生成的用戶密鑰去解密和重新組合保存在BRAM中被分割加密的主密鑰數(shù)據(jù),恢復(fù)出主密鑰并將其存入主密鑰緩沖區(qū)中;4) PBKDF2模塊利用輸入的主密鑰生成校驗(yàn)哈希值并存入哈希值緩沖區(qū);5) 哈希值比較模塊對(duì)比哈希值緩沖區(qū)中待校驗(yàn)哈希值與輸入的主密鑰校驗(yàn)哈希值,兩者相等則向控制模塊返回認(rèn)證通過(guò)的信號(hào),不相等則繼續(xù)密碼認(rèn)證過(guò)程.
SHA-1算法以512 bit為單位進(jìn)行處理,并輸出長(zhǎng)度為160 bit的散列值.計(jì)算過(guò)程中,用寄存器A、B、C、D、E分別存儲(chǔ)一輪運(yùn)算的中間結(jié)果,即5個(gè)狀態(tài)變量HA、HB、HC、HD、HE.第1組分組數(shù)據(jù)為SHA-1算法規(guī)定的初始常量值H0~H5,在其余分組計(jì)算中,HA~HE為上一分組計(jì)算出的摘要值.每個(gè)狀態(tài)變量的大小為32 bit,以容納160 bit的數(shù)據(jù)[10].圖3(a)給出了SHA-1其中一輪操作的示意圖.圖中:Ki是常量,fi是非線性函數(shù),具體的取值根據(jù)80輪中的輪數(shù)i有所不同;Wi為由輸入數(shù)據(jù)分組計(jì)算所得的變量[10],RotLx表示將數(shù)據(jù)循環(huán)左移x位.
如果使用最基礎(chǔ)的SHA-1硬件,一個(gè)clock使用SHA-1的1輪運(yùn)算,那么執(zhí)行整個(gè)SHA-1算法就需要80個(gè)clock,這樣的設(shè)計(jì)性能不佳.因此,本文中對(duì)SHA-1的運(yùn)算進(jìn)行組合,使用了2輪展開,將80輪運(yùn)算的每2輪運(yùn)算合并在一起變?yōu)?輪運(yùn)算,新的1輪運(yùn)算能夠在一個(gè)clock內(nèi)完成[11].同時(shí)還采用了預(yù)計(jì)算的手段,提前計(jì)算出下1輪所要用到的值,并寫入R1~R4這4個(gè)寄存器中,等待下1輪使用.由于每輪的中間運(yùn)算結(jié)果HA(i),HB(i),HC(i),HD(i),HE(i),可以由HR1(i-1),HR2(i-1),HR3(i-1),HR4(i-1),HA(i-1),HB(i-1)和HC(i-1)得出,所以在一輪計(jì)算的過(guò)程中,中間值HD(i)和HE(i)無(wú)需用寄存器存儲(chǔ),只在最后一輪才需要引出,因此在中間運(yùn)算電路實(shí)現(xiàn)時(shí),將寄存器D和E移除,以進(jìn)一步節(jié)省資源,如圖3(b)所示.在首輪中對(duì)R1,R2,R3,R4這4個(gè)寄存器初始化公式如下.
圖3 SHA-1輪操作示意圖Fig.3 Round operation implementation of SHA-1
圖4 4級(jí)流水線SHA-1Fig.4 Four-stage pipeline SHA-1
(2)
其中,K0和K1分別為SHA-1中的常量.即便如此,SHA-1的1輪操作也需要花費(fèi)大量的時(shí)間.因此將SHA-1的模塊設(shè)計(jì)為4級(jí)流水線結(jié)構(gòu),每級(jí)流水線完成20輪的計(jì)算,如圖4所示.SHA-1的4個(gè)核分別處理4級(jí)流水線的4個(gè)階段.因?yàn)榈谝惠喰枰A(yù)計(jì)算,因此第一個(gè)核需要經(jīng)過(guò)11個(gè)clock才能夠計(jì)算出結(jié)果,至于其他核,則分別只需要10個(gè)clock.每2個(gè)核間的寄存器用于存放前一個(gè)核的輸出(即10輪運(yùn)算結(jié)束后的狀態(tài)變量值),而這些值將作為下一個(gè)核的狀態(tài)變量輸入.在最后一個(gè)核中,還需要將運(yùn)算結(jié)果與前一分組數(shù)據(jù)塊的摘要值HA、HB、HC、HD、HE相加,以得到最后的摘要值.
表2列出了本研究與其他文獻(xiàn)數(shù)據(jù)的吞吐率對(duì)比,吞吐率TP的計(jì)算公式如下:
(3)
其中,P代表流水線的級(jí)數(shù),B表示進(jìn)入一級(jí)流水線的數(shù)據(jù)塊的長(zhǎng)度,f表示系統(tǒng)所能達(dá)到的最大工作頻率,L表示一個(gè)數(shù)據(jù)塊從輸入到計(jì)算完畢總共需要經(jīng)過(guò)的時(shí)延.對(duì)比文獻(xiàn)[12]和[13],本研究的設(shè)計(jì)有著較大的工作頻率、吞吐率和TPS,并且所使用的資源較少.由表2可知,采用基于28 nm工藝的Zynq系列7030 FPGA可以實(shí)現(xiàn)比基于40 nm工藝的Virtex 6更高的吞吐率和單位資源吞吐率.本研究設(shè)計(jì)的工作頻率達(dá)到了301 MHz,TPS達(dá)到了17.52 Mbit/s.
本研究的流水線PBKDF2的導(dǎo)出密鑰值
DK=PBKDF2(PRF,P,salt,iteration,dklen).
(4)
表2 4級(jí)流水線的SHA-1實(shí)現(xiàn)結(jié)果比較
Tab. 2 Result comparison of four-stage pipelined SHA-1 implementation
器件時(shí)延/clockSlicesf/MHzTP/(Mbit·s -1)TPS/(Mbit·s-1) 參考文獻(xiàn)Virtext-6411 230172.3208 607.66.99 [12]Virtext-641113.5605 672.4[13]Virtext-6411 221196.7449 827.68.05 本研究Zynq 703041858301.00415 035.517.52本研究
圖5 算法流程Fig.5 Flow of algorithm
注:TPS是單位Slices資源的吞吐率,下同.其中:PRF表示偽隨機(jī)函數(shù),本研究選用HMAC-SHA-1;P代表密碼;salt是隨機(jī)生成的鹽值,長(zhǎng)度為32 bit;iteration表示偽隨機(jī)函數(shù)循環(huán)的次數(shù);dklen是導(dǎo)出密鑰DK的長(zhǎng)度.導(dǎo)出密鑰被分為多個(gè)塊計(jì)算,每一塊的結(jié)果值Tn由PRF函數(shù)經(jīng)過(guò)循環(huán)迭代計(jì)算得出,最后得到的DK由T1…Tn連接而成.
PBKDF2及其HMAC的底層函數(shù)框圖如圖5所示,圖中ipad和opad表示兩個(gè)固定常量,int(n)表示整數(shù)n的4字節(jié)十六進(jìn)制數(shù).圖5(b)給出了HMAC-SHA-1函數(shù)所進(jìn)行的具體計(jì)算步驟,其中的H函數(shù)表示SHA-1運(yùn)算,K0與圖5(a)中的P相對(duì)應(yīng),M則表示圖5(a)中的Salt‖int(n)(第n次迭代)或者是上一個(gè)PRF函數(shù)的輸出.HMAC函數(shù)中的摘要h0和h1會(huì)分別被計(jì)算iteration次,考慮到HMAC函數(shù)的輸入不變,每次h0和h1的計(jì)算結(jié)果均不變,故只需計(jì)算一次h0和h1,并存于寄存器中,即可將PBKDF2中SHA-1的執(zhí)行次數(shù)從4×iteration次下降到2+2×iteration次.
考慮到在LUKS認(rèn)證算法中需要大量的PBKDF2算法迭代,在此采用流水線架構(gòu)來(lái)實(shí)現(xiàn)[14],其架構(gòu)如圖6所示.每個(gè)PBKDF2中包含2個(gè)SHA-1的模塊,而每個(gè)SHA-1模塊采用4級(jí)流水線架構(gòu),所以整個(gè)PBKDF2-HMAC-SHA-1采用8級(jí)流水線的架構(gòu),需要82個(gè)clock完成一次迭代.其中寄存器1~8存放8個(gè)不同的h1值,而寄存器9~16存放8個(gè)不同的h0值.HMAC摘要寄存器用于累計(jì)每次HMAC-SHA-1函數(shù)的輸出摘要h3,經(jīng)iteration次迭代后,該寄存器內(nèi)的值即為PBKDF2函數(shù)的輸出密鑰.
圖6 PBKDF2-HMAC-SHA-1架構(gòu)Fig.6 PBKDF2-HMAC-SHA-1 architecture
表3 PBKDF2占用資源及其性能對(duì)比
Tab. 3 Resource utilization and performance in PBKDF2
實(shí)現(xiàn)架構(gòu)器件Slice時(shí)延/clockf/MHzTP/(Mbit·s-1)TPS/(Mbit·s-1) 8級(jí)流水線(本研究)Virtex-53 800881506 9821.84 20級(jí)流水線[15]Virtex-56 3813841504 6800.74
將本研究流水線架構(gòu)實(shí)現(xiàn)的和文獻(xiàn)[15]中恢復(fù)WiFi保護(hù)訪問(wèn)(WPA)/WPA2密鑰的PBKDF2-HMAC-SHA-1性能進(jìn)行比較,如表3所示.本研究的8級(jí)流水線PBKDF架構(gòu)僅使用3 800個(gè)Slice資源,而文獻(xiàn)[15]的20級(jí)流水線結(jié)構(gòu)使用了6 381個(gè)Slice資源.并且本研究的PBKDF2構(gòu)架完成8級(jí)流水只需88個(gè)clock,而文獻(xiàn)[15]完成20級(jí)流水需要384個(gè)clock,可見本研究的構(gòu)架在完成每級(jí)流水平均所需的clock數(shù)上占優(yōu)勢(shì).在相同時(shí)鐘頻率的條件下,本研究的吞吐率高達(dá)6 982 Mbit/s,而文獻(xiàn)[15]的吞吐率為4 680 Mbit/s,可見本研究的8級(jí)流水線架構(gòu)比20級(jí)流水架構(gòu)的吞吐率還要高出許多.從資源利用率的角度看,本研究的TPS參數(shù)為1.84 Mbit/s,而文獻(xiàn)[15]中僅為0.74 Mbit/s.
由于SHA-1和PBKDF2算法實(shí)現(xiàn)中采用流水線結(jié)構(gòu),占用了較多的LUT資源,因此在實(shí)現(xiàn)AES算法時(shí),采用ST-box映射表的架構(gòu),并利用FPGA片內(nèi)BRAM資源來(lái)實(shí)現(xiàn).通過(guò)對(duì)AES輪運(yùn)算(前9輪)的變換,可以得出以下公式:
(5)
根據(jù)式(5),本設(shè)計(jì)將AES-128解密算法的一輪操作分為3個(gè)部分:前端行移位部分、中部ST-box表部分和后端輪密鑰加密部分.AES-128解密算法的輸入為16 B的數(shù)據(jù),分別對(duì)應(yīng)于式(5)中狀態(tài)矩陣ai,j,存放在16個(gè)寄存器中.將這些寄存器依據(jù)行移位規(guī)則連接到中部ST-box表部分的BRAM上,寄存器中的值就可以作為BRAM的地址,BRAM的輸出端則輸出對(duì)應(yīng)地址的內(nèi)容,完成式(5)中的行移位和逆T-box的代換.最后,再將狀態(tài)矩陣中的1列所需的4個(gè)逆T-box代換的值與該列對(duì)應(yīng)的輪密鑰一同進(jìn)行異或操作,就可以得到新的狀態(tài)矩陣中所對(duì)應(yīng)的列.
表4列出了本研究設(shè)計(jì)的AES架構(gòu)的數(shù)據(jù)與其他文獻(xiàn)的對(duì)比.文獻(xiàn)[16]和[17]在時(shí)延(每處理一個(gè)數(shù)據(jù)塊所需clock數(shù))方面與本研究相同,但是本研究的AES架構(gòu)在各平臺(tái)都能達(dá)到較高的工作頻率,在Virtex-7平臺(tái)中,本研究的工作頻率接近文獻(xiàn)[16]中的2倍,且獲得了最高的吞吐率8.346 Gbit/s.另外,本研究架構(gòu)在7030平臺(tái)上實(shí)現(xiàn)所需Slice數(shù)最少.在各種平臺(tái)下,文獻(xiàn)[16]和[17]分別使用了2和4個(gè)BRAM資源,而本研究使用了8個(gè)BRAM,可以節(jié)約Slice資源,不搶占PBKDF2模塊的Slice資源,并且工作頻率高,整體的LUKS認(rèn)證算法電路的頻率并不會(huì)因AES模塊受到限制.綜上所述,8個(gè) BRAM的AES架構(gòu)兼顧了時(shí)序和資源的需求,適合本研究的LUKS認(rèn)證算法設(shè)計(jì).
表4 AES算法不同實(shí)現(xiàn)之間的數(shù)據(jù)對(duì)比
Tab. 4 Comparison between different implementations of the AES algorithm
器件SlicesBRAM時(shí)延/clockf/MHzTP/(Gbit·s-1) 文獻(xiàn)Virtex-52032103334.262[16]Virtex-71392103574.569 [16]Virtex-51934103504.480 [17]Virtex-62104103003.840 [17]Virtex-73324102513.218 [17]Virtex-51318105166.605 本研究Virtex-61638105416.925 本研究Virtex-71318106528.346 本研究Picozed 70301008106398.179本研究
本研究的LUKS認(rèn)證系統(tǒng)基于Xilinx的Picozed開發(fā)板,該開發(fā)板搭載的主芯片為ZYNQ 7030,使用的軟件開發(fā)環(huán)境為Xilinx Vivado 2014.4,測(cè)試程序基于FreeRTOS操作系統(tǒng),通過(guò)板級(jí)支持包來(lái)驅(qū)動(dòng)LUKS協(xié)處理器完成認(rèn)證計(jì)算和測(cè)試.板級(jí)支持包中包含有LUKS IP核的驅(qū)動(dòng)、BRAM的驅(qū)動(dòng)、串口驅(qū)動(dòng)和以太網(wǎng)驅(qū)動(dòng)等.本研究的設(shè)計(jì)占用了78.3%的Slice LUT資源,62.45%的Slice寄存器資源和15.47%的BRAM資源,如圖7所示.此處沒(méi)有列出用于連接不同模塊和組成AXI總線控制器的Slice LUT和Slice寄存器資源的利用率,但是它們已經(jīng)被計(jì)入整個(gè)設(shè)計(jì)的利用率.用來(lái)生成用戶密鑰的PBKDF2算法使用了整個(gè)芯片約一半的資源(55.3%).此外,還有12.08%的BRAM資源用于保存密鑰數(shù)據(jù)區(qū)(這部分資源沒(méi)有列入圖7中).
1~4表示PBKDF2第1~4級(jí),5表示AES AF-Merge,6表示PBKDF2檢驗(yàn)哈希值生成,7表示整個(gè)設(shè)計(jì).圖7 流水線結(jié)構(gòu)各模塊資源占用率Fig.7 Resource utilization rate of each module in Pipeline architecture
表5 各平臺(tái)LUKS密碼恢復(fù)速度和功耗對(duì)比(AES-128-ECB)
Tab.5 LUKS password recovery speed and power consumption of each platform(AES-128-ECB)
器件密碼遍歷速度/s-1功耗/W每密碼所需能量/J 文獻(xiàn) Intel(R) Core(TM) i7-6500U(2核4線程)522.254.450本研究 Intel Core i7 920(4核8線程)732.184.597 本研究 Nvidia GeForce GTX 48031762.520.200 本研究 Picozed 7030 (迭代)1786.130.034 本研究 Picozed 7030 (流水線)3425.270.015 本研究 Picozed 703020.62.440.118[4]
注:在用戶密鑰迭代次數(shù)163 682,校驗(yàn)哈希值迭代次數(shù)41 125的條件下測(cè)試得到.
表5給出了針對(duì)密碼組合AES-128-ECB和SHA-1在各平臺(tái)中LUKS密碼恢復(fù)速度和功耗的對(duì)比.此處功耗為運(yùn)行LUKS認(rèn)證算法的動(dòng)態(tài)功耗,即運(yùn)行時(shí)功耗減去待機(jī)時(shí)功耗的結(jié)果.從表5中可以看出,基于Picozed 7030平臺(tái),本研究的密碼恢復(fù)速度是迭代結(jié)構(gòu)LUKS算法的2倍,因此密碼恢復(fù)不僅占用了較少的資源,而且得到較高的密碼遍歷速度,達(dá)342 s-1;而迭代結(jié)構(gòu)的LUKS算法即使耗費(fèi)了更多的資源,但是密碼遍歷速度僅為178 s-1.另外,本研究的流水線架構(gòu)所實(shí)現(xiàn)的密碼遍歷速度是文獻(xiàn)[4]的16.6倍且已經(jīng)超過(guò)了Nvidia GeForce GTX 480平臺(tái)的LUKS密碼遍歷速度.
在功耗方面,基于迭代結(jié)構(gòu)的設(shè)計(jì)在恢復(fù)一個(gè)密碼時(shí)所要消耗的能量是0.034 J,而流水線架構(gòu)僅需0.015 J,不到迭代結(jié)構(gòu)的一半.在CPU和GPU平臺(tái)上,恢復(fù)一個(gè)密鑰所需要的能量則遠(yuǎn)遠(yuǎn)大于FPGA平臺(tái).在Nvidia GeForce GTX 480平臺(tái)上,每個(gè)密鑰所需能量為0.200 J,是流水線方法的13.3倍,而在Intel Core i7 920(4核8線程)平臺(tái)上,每個(gè)密鑰所需能量(4.597 J)是流水線方法的306.5倍.本研究實(shí)現(xiàn)的功耗僅為文獻(xiàn)[4]中功耗的12.7%.因此,流水線架構(gòu)的實(shí)現(xiàn)在密碼恢復(fù)速度,資源利用和能效比方面都優(yōu)于迭代結(jié)構(gòu)的設(shè)計(jì).
本研究基于FPGA研究和實(shí)現(xiàn)了一種LUKS認(rèn)證算法的流水線架構(gòu),為了充分利用FPGA的有限資源,分析了整體架構(gòu)以及所涉及的密碼算法,進(jìn)行了優(yōu)化設(shè)計(jì),并且采用流水線和查表的實(shí)現(xiàn)方式來(lái)達(dá)到吞吐率和資源利用率的平衡.通過(guò)對(duì)總體結(jié)構(gòu)設(shè)計(jì)和底層算法的優(yōu)化,系統(tǒng)的整體吞吐率、資源利用率和功耗等指標(biāo)都得到較大的改善,主要體現(xiàn)在:1) 對(duì)關(guān)鍵的PBKDF2-HMAC-SHA1算法采用8級(jí)流水線結(jié)構(gòu),通過(guò)優(yōu)化降低了其迭代次數(shù);并且基于預(yù)計(jì)算和回路展開實(shí)現(xiàn)了4級(jí)流水SHA-1結(jié)構(gòu),并在具體實(shí)現(xiàn)時(shí)優(yōu)化移除了部分寄存器.2) 考慮到PBKDF2的流水線結(jié)構(gòu)占用了較多的LUT資源,因此在實(shí)現(xiàn)AES算法時(shí)采用基于ST-box結(jié)構(gòu)的AES算法,充分利用FPGA內(nèi)部的BRAM資源實(shí)現(xiàn)ST-box映射表,通過(guò)使用8個(gè)雙端口的BRAM資源,提升了AES算法部分的工作頻率.3) 對(duì)模塊進(jìn)行合理分割,平衡了各級(jí)之間的運(yùn)算clock數(shù),以實(shí)現(xiàn)流水線結(jié)構(gòu)的較高工作頻率;并基于Picozed 7030 FPGA開發(fā)板實(shí)現(xiàn)了LUKS認(rèn)證片上系統(tǒng),包括LUKS硬件協(xié)處理器、軟件驅(qū)動(dòng)以及基于FreeRTOS操作系統(tǒng)的測(cè)試軟件開發(fā).系統(tǒng)運(yùn)行結(jié)果顯示本設(shè)計(jì)的密碼遍歷速度達(dá)到了342 s-1,而功耗只有5.27 W,每個(gè)密鑰所需能量為0.015 J.工作在195 MHz的系統(tǒng)口令恢復(fù)速度超過(guò)了工作頻率為700 MHz、流處理器數(shù)量為480的GTX 480 GPU,同時(shí)其能耗指標(biāo)僅為GPU的1/13.
廈門大學(xué)學(xué)報(bào)(自然科學(xué)版)2018年4期