趙 亮,李 斌,周清雷,陳曉杰
1(鄭州大學(xué) 計(jì)算機(jī)與人工智能學(xué)院,鄭州 450001)
2(數(shù)學(xué)工程與先進(jìn)計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室,鄭州 450001)
AES_GCM可視為AES算法的特殊工作模式,該模式提供加密和認(rèn)證兩種操作.常見(jiàn)的工作模式如AES-EAX和AES-CCM等模式因?yàn)橹荒懿捎么械姆绞綄?shí)現(xiàn),所以只適用于中低速網(wǎng)絡(luò)的場(chǎng)景;AES-CWC雖然適用于高速網(wǎng)絡(luò),但其包含127bit整數(shù)乘法,電路開(kāi)銷(xiāo)過(guò)大;AES-ECB模式在安全性方面存在泄漏明文的風(fēng)險(xiǎn)等.AES_GCM是一種可以保證數(shù)據(jù)保密性和信息完整性的算法模式[1],并且其加密過(guò)程可以基于并行或流水線(xiàn)技術(shù)實(shí)現(xiàn),由于其出色的性能和較低的計(jì)算時(shí)延,可以被廣泛應(yīng)用于無(wú)線(xiàn)網(wǎng)絡(luò)、光纖通信等領(lǐng)域.
當(dāng)下,隨著高速以太網(wǎng)的不斷發(fā)展.高速通信網(wǎng)絡(luò)的所面臨的安全問(wèn)題及需求日益凸顯,不僅需要保護(hù)傳統(tǒng)通信數(shù)據(jù)安全,更需要在100G網(wǎng)絡(luò)的特點(diǎn)及背景下,確保在云端存儲(chǔ)與傳遞、含有大量隱私信息數(shù)據(jù)的安全[2].
因此為了保證高速網(wǎng)絡(luò)服務(wù)對(duì)于速度與高安全性的需求,同時(shí)對(duì)信息的來(lái)源進(jìn)行認(rèn)證,本文提出了一種全流水線(xiàn)架構(gòu)優(yōu)化的AES_GCM高速加密電路,利用FPGA可重構(gòu)的特點(diǎn)[3],以流水線(xiàn)技術(shù)實(shí)現(xiàn)AES算法,以Karatsuba乘法器和快速求余優(yōu)化GHash算法,并設(shè)計(jì)了具有較高自安全性的SBox模塊,從而進(jìn)一步滿(mǎn)足100G網(wǎng)絡(luò)的安全需求.
隨著網(wǎng)絡(luò)業(yè)務(wù)流量增速、用戶(hù)需求的不斷加快和增長(zhǎng),其已經(jīng)超出萬(wàn)兆以太網(wǎng)的能力范圍,這不得不使研究者們加速推進(jìn)100G以太網(wǎng)絡(luò)的相關(guān)研究進(jìn)程.針對(duì)100G以太網(wǎng)的應(yīng)用環(huán)境及面臨的安全問(wèn)題,以及高速通信網(wǎng)絡(luò)以高效可靠為目標(biāo)的特點(diǎn),需要對(duì)AES_GCM算法進(jìn)行優(yōu)化.
AES_GCM算法中P代表明文,Key表示密鑰,IV表示初始向量,A為附加認(rèn)證數(shù)據(jù);輸出為密文C和認(rèn)證標(biāo)簽T.首先,對(duì)128bit的0加密得到哈希算子H存在寄存器.然后,利用哈希算子對(duì)A進(jìn)行乘加運(yùn)算,運(yùn)算結(jié)束后,AES對(duì)初始向量IV加密,然后,加密的結(jié)果與明文P異或得到C;中間變量X,通過(guò)附加數(shù)據(jù)A乘加運(yùn)算后再和密文進(jìn)行乘加運(yùn)算得到;X與IV加密結(jié)果異或,最后得到認(rèn)證標(biāo)簽T.
對(duì)于AES算法,Chi-Jeng Chang等人[4]采用循環(huán)結(jié)構(gòu)的32bitAES加密電路,吞吐率為876Mbps,資源消耗156個(gè)Slices,性能為5.16Mbps/slices,但吞吐率低于10Gbps,不適合高速接入網(wǎng)應(yīng)用;M.Vanitha等人[5]采用展開(kāi)結(jié)構(gòu)對(duì)AES電路輪變換的內(nèi)部進(jìn)行流水線(xiàn)劃分,吞吐率為22.89Gbps,資源消耗為14.522K個(gè)Slices,但電路性能僅為1.58 Mbps/slices;Harshali Zodpe[6]等提出了一種利用PN序列生成器生成SBox值和加密所需初始密鑰的新方法,在XC6SLX150設(shè)備實(shí)現(xiàn)的最高頻率為237.45MHz,吞吐量為30.39Gbps,但電路復(fù)雜度較高.
Karatsuba等人首次提出在實(shí)現(xiàn)有限域乘法器上有著較高效率的KOA算法,之后,Deepak Kapoor等人[7]結(jié)合KOA和移位相乘,設(shè)計(jì)了一種混合乘法器,有效降低了運(yùn)算復(fù)雜度; Karim M等[8]從電路效率出發(fā),提出基于流水線(xiàn)的GHash電路,吞吐率可達(dá)36.92Gbps,資源消耗7.74Mbps/Slices;Kavund等[9]提出針對(duì)DSP片和BRAM塊優(yōu)化的AES-GCM架構(gòu).
由上,可以結(jié)合FPGA的靈活性、并行性和集成性[10],對(duì)GHash結(jié)構(gòu)進(jìn)行優(yōu)化,以減少電路資源消耗,保證電路吞吐率和效率.此外,對(duì)FPGA進(jìn)行區(qū)域優(yōu)化劃分,從而使流水線(xiàn)的效果盡可能達(dá)到最優(yōu),滿(mǎn)足高速網(wǎng)絡(luò)的需要,保證高速網(wǎng)絡(luò)安全、完整的傳輸數(shù)據(jù).
AES加密算法的流水線(xiàn)實(shí)現(xiàn),主要包含密鑰擴(kuò)展(Key extension)和輪變換(Round transformation).其中,以初始密鑰作為基礎(chǔ)的密鑰擴(kuò)展生成每一輪所需的輪密鑰;輪變換包括字節(jié)代換、行移變換、列混合變換和密鑰加法.
3.1.1 密鑰擴(kuò)展
將輸入的128bit的key,經(jīng)循環(huán)左移、字節(jié)替換、異或、緩存結(jié)果4級(jí)流水運(yùn)算后,產(chǎn)生本輪的輸出,并作為下一輪的輸入,具體步驟如表1所示,其是以密鑰矩陣的一列為單位進(jìn)行運(yùn)算,包括10輪迭代計(jì)算,每一輪運(yùn)算劃分為一個(gè)模塊,模塊內(nèi)以流水線(xiàn)方式并按照算法流程實(shí)現(xiàn)相應(yīng)運(yùn)算,模塊間以時(shí)鐘控制數(shù)據(jù)賦值和輸出,數(shù)據(jù)在相鄰模塊依次傳遞.
表1 密鑰擴(kuò)展流程
表1中T的表達(dá)式為T(mén)=SubBytes(CycShift(key[i])⊕Rcx[i]),SubBytes為字節(jié)代換,CycShift為循環(huán)移位,Rcx為輪常數(shù),下同.CycShift對(duì)key[i]左移一個(gè)字節(jié),然后進(jìn)行SubBytes,最后,SubBytes的結(jié)果和Rcx異或,其中輪常數(shù)Rcx[i]=01000000,02000000,04000000,08000000,10000000,20000000,4000000080000000,1B000000,36000000,輪數(shù)i∈0…9.密鑰擴(kuò)展模塊的單輪時(shí)鐘周期為4,在每個(gè)時(shí)鐘周期,將當(dāng)前輪密鑰輸出,并傳值給10組128bit的key數(shù)組,作為每輪加密模塊的密鑰輸入.密鑰擴(kuò)展的具體實(shí)現(xiàn)過(guò)程如式(1)所示.
next_key[127:96] =key[127:96]^SubByte(CycShift(W[31:0]))^Rcx[i]
next_key[95:64]=key[95:64]^key[127:96],
next_key[63:32]=key[63:32]^key[95:64],
next_key[31:0]=key[31:0]^key[63:32]
(1)
3.1.2 輪加密
輪加密運(yùn)算同樣包括10輪迭代,每一輪運(yùn)算劃分為一個(gè)模塊,各個(gè)模塊之間并行運(yùn)算,當(dāng)數(shù)據(jù)連續(xù)輸入運(yùn)算模塊中,在44個(gè)時(shí)鐘之后,每個(gè)時(shí)鐘可產(chǎn)生一個(gè)輸出.其流程組成如表2所示.
表2 輪加密流程
首先,字節(jié)代換子模塊采用16個(gè)SBox并行計(jì)算,1個(gè)時(shí)鐘周期輸出結(jié)果,其運(yùn)算過(guò)程如式(2)所示,其中,0≤i≤15,data_in表示128bit的輸入,data_sub2shift表示128bit的輸出.
data_sub2shitf[(i×8)+7:(i×8)]=SBox(data_in)[(i×8)+7:(i×8)]
(2)
然后,SubBytes的結(jié)果傳遞至ShiftRows,并在一個(gè)時(shí)鐘周期內(nèi)完成行移位置換操作.ShiftRows在狀態(tài)矩陣的每個(gè)行間進(jìn)行并且是線(xiàn)性的,按照一定規(guī)律的偏移量循環(huán)左移運(yùn)算,MixColumns與其相互影響,多輪變換后的密碼得到充分?jǐn)U散.第i行第j列的字節(jié)移動(dòng)如式(3)所示,偏移量Oi依賴(lài)于Nb的取值.
(i,k)→(i,(j-Oi)modNb)
(3)
其置換具體實(shí)現(xiàn)過(guò)程如式(4)所示,其中State為8bit的狀態(tài)矩陣,data_shitf2mix表示128bit的輸出.
State[i]=data_sub2shift[(((15-i)×8+7]:((15-i)×8)],0≤i≤15,data_shift2mix[(15×8)+7:(12×8)={State[0],State[5],State[10],State[15]},data_shift2mix[(11×8)+7:(8×8)={State[4],State[9],State[14],State[3]},data_shift2mix[(7×8)+7:(4×8)={State[8],State[13],State[2],State[7]},data_shift2mix[(3×8)+7:(0×8)={State[12],State[1],State[6],State[11]}
(4)
然后,行移變換的結(jié)果傳遞至列混合子模塊,在1個(gè)時(shí)鐘周期內(nèi)完成域GF(28)上的MixColumns.
(5)
列混合變換同樣是線(xiàn)性變換,首先,把狀態(tài)矩陣的列看做有限域G(28)上的多項(xiàng)式;然后,在模x4+1下與一個(gè)給定的多項(xiàng)式c(x)相乘;然后,b(x)=c(x)·a(x)mod(x4+1)(假設(shè)輸入為a,輸出為b);最后,利用有限域G(28)上的算術(shù)特性代換,表達(dá)式如式(5)所示.
列混合域乘0x02和0x03的過(guò)程如式(6)所示,其中,State_mulx2、State_mulx3分別表示域乘0x02、0x03后的結(jié)果.
State[i]=data_shift2mix[(((15-)×8+7):((15-i)×8)],
State_Mulx2[i]=(State[i]<<1)(8h1b&{8{State[i][7]}}),
State_Mulx3[i]=(State_Mulx2[i])^(State[i])
(6)
那么對(duì)于其第1列的操作如式(7)所示,其中data_mix2key表示128bit的輸出.第2~第4列操作相同.
最后,對(duì)于AddRoundKey子模塊,中間加密結(jié)果與Key
data_mix2key[(15×8)+7:(15×8)=State_Mulx2[0]^State_Mulx3[1]^State[2]^State[3],data_mix2key[(14×8)+7:(14×8)=State[0]^State_Mulx2[1]^State_Mulx3[2]^State[3],data_mix2key[(13×8)+7:(13×8)=State[0]^State[1]^State_Mulx2[1]^State_Mulx3[3],data_mix2key[(12×8)+7:(12×8)=State_Mulx3[0]^State[1]^State[2]^State_Mulx2[3]
(7)
extension的結(jié)果,在1個(gè)時(shí)鐘周期內(nèi)輸出且完成異或操作.AES單輪加密的結(jié)構(gòu)如圖1所示,其過(guò)程為4級(jí)流水線(xiàn).
圖1 AES單輪加密結(jié)構(gòu)
密鑰拓展和加密模塊采用并行處理,單輪內(nèi)部均為4級(jí)流水線(xiàn),整個(gè)AES流水線(xiàn)結(jié)構(gòu)為42級(jí),如圖2所示.第1輪~9輪的操作完全相同,每輪使用其上一輪的結(jié)果.對(duì)于第10輪,沒(méi)有中間的MixColumns操作.解密算法與加密算法類(lèi)似,需要增加輪密鑰緩存寄存器用于存儲(chǔ)產(chǎn)生的輪密鑰.
圖2 AES加密流水線(xiàn)結(jié)構(gòu)
GHash函數(shù)是一個(gè)基于伽羅華域128bit的GF(2128)乘法器的Hash操作.在GF(2128)域中不可約多項(xiàng)式為:f(x)=x128+x7+x2+x+1,GHash函數(shù)運(yùn)算的結(jié)果記為,其中Xi(x=0,1,…,m+n+1)的定義如式(8)所示.在前m個(gè)周期,將附加的認(rèn)證數(shù)據(jù)A作為輸入,進(jìn)行相應(yīng)的運(yùn)算操作;接下來(lái)的n個(gè)時(shí)鐘周期內(nèi),將加密密文C作為輸入進(jìn)行運(yùn)算操作;在最后一個(gè)時(shí)鐘周期,輸入len(A)‖len(C)進(jìn)行相應(yīng)運(yùn)算.
(8)
GCM電路結(jié)構(gòu)及效率主要取決于GHash電路計(jì)算Xi時(shí)所采用的計(jì)算方法,其中變量Xi是GHash函數(shù)中附加數(shù)據(jù)或密文與哈希算子的乘加結(jié)果,它的串行計(jì)算公式如式(8)所示.
其中,變量Xi有迭代式、展開(kāi)式和并行式3種計(jì)算方法,典型的AES_GCM密碼電路結(jié)構(gòu)主要有并行式和串行式兩種,本文選擇采用并行式的流水線(xiàn)型AES_GCM電路結(jié)構(gòu),并在此基礎(chǔ)上采用Karatsuba算法和快速求余來(lái)提高Xi的計(jì)算速度從而提升電路性能.
在GF(2128)域上進(jìn)行的所有運(yùn)算是可逆的、能夠還原的,且結(jié)果都在域中,不會(huì)溢出.假設(shè)A、B、C是GF(2m)域上的元素,它們的表達(dá)式如式(9)所示:
(9)
根據(jù)式(9),針對(duì)GHash模塊設(shè)計(jì)了4級(jí)流水線(xiàn)結(jié)構(gòu)的電路,其電路結(jié)構(gòu)如圖3所示.由于AES加密端的計(jì)算頻率和GHash認(rèn)證端的計(jì)算頻率不同,因此采用FIFO作為數(shù)據(jù)緩沖.
圖3 有限域乘法運(yùn)算電路結(jié)構(gòu)
采用流水線(xiàn)方式計(jì)算GHash的結(jié)果,計(jì)算速率可達(dá)每4個(gè)時(shí)鐘周期計(jì)算3個(gè)密文,具體方式如表3及表4所示.表3的輸出結(jié)果如式(10)所示,前4組數(shù)據(jù)可以連續(xù)輸入,第2輪的前3個(gè)數(shù)據(jù)是密文輸入,Q1作為第2輪的最后一個(gè)輸入;從第2輪至最后一輪,每4個(gè)時(shí)鐘周期計(jì)算3個(gè)結(jié)果.
q1=(l0H4)⊕(l1H3)⊕(l2H2)⊕(l3H) (10)
表3 第1輪運(yùn)算
表4 第2輪運(yùn)算
對(duì)于M組加密結(jié)果,有M=m+1組數(shù)據(jù)傳入GHash中;當(dāng)M值很大時(shí),其計(jì)算出所有結(jié)果并輸出所需要的時(shí)鐘周期數(shù)如式(11)所示:
(11)
3.2.1 Karatsuba乘法器
因?yàn)镚Hash內(nèi)部進(jìn)行著大量的比特相乘,所以導(dǎo)致大量的資源消耗,而Karatsuba乘法器的性能對(duì)GHash模塊的性能有著關(guān)鍵性影響,所以可以通過(guò)降低Karatsuba乘法器的復(fù)雜度來(lái)減少資源的消耗,以提升AES_GCM電路的整體性能.
Karatsuba算法是基于分解相乘思想來(lái)進(jìn)行設(shè)計(jì)的,將兩個(gè)比特位數(shù)較大的二進(jìn)制數(shù)乘法分解為幾個(gè)位寬較小的二進(jìn)制數(shù)的乘法,然后,在此基礎(chǔ)上進(jìn)行移位運(yùn)算、加法運(yùn)算,進(jìn)而完成兩個(gè)原有位寬較大的二進(jìn)制數(shù)的乘法運(yùn)算.例如,兩個(gè)大整數(shù)X和Y相乘,其中X和Y分別為nbit,已知X=AB,Y=CD,對(duì)于AD+BC部分,兩個(gè)乘法的時(shí)間復(fù)雜度為O(n2/4),一個(gè)加法的時(shí)間復(fù)雜度O(n),然后對(duì)AD,BC進(jìn)行分解,如式(12)所示,從而降低復(fù)雜度.
AD+BC=AC+AD+BC+BD-AC-D=(A+B)(C+D)-AC-BD
(12)
最終整體算法只需要計(jì)算乘法AC,BD和(A+B)(C+D),以及6次時(shí)間復(fù)雜度為O(n)的加法或減法即可.
Karatsuba算法,其每層包括3次乘法,時(shí)間復(fù)雜度為O(n2/4);另外,括號(hào)外層需要兩次加法,括號(hào)內(nèi)部包括若干次加法,乘法規(guī)模隨著Karatsuba算法的使用次數(shù)依次下降(n/2).所以,使用Karatsuba設(shè)計(jì)的乘法器能夠有效降低電路的硬件復(fù)雜度.
當(dāng)n較大時(shí),在電路資源的利用上,Karatsuba乘法器的優(yōu)勢(shì)凸顯.但當(dāng)分解次數(shù)進(jìn)一步增加時(shí),電路的整體資源開(kāi)銷(xiāo)、延時(shí)會(huì)出現(xiàn)增加,所以需要找到一個(gè)平衡點(diǎn),以平衡資源開(kāi)銷(xiāo)和延時(shí),從而能更好的提升電路效率.數(shù)據(jù)分解流程如表5所示.
表5 數(shù)據(jù)分解流程示意
將KOA乘法器劃分為KOA64、KOA32、KOA16、MOD這4種操作.對(duì)于KOA乘法器讀取N組數(shù)據(jù)的計(jì)算,經(jīng)過(guò)N+3個(gè)時(shí)鐘周期即可得到其計(jì)算結(jié)果.由式(13)可知,當(dāng)N值很大時(shí),認(rèn)為該流水線(xiàn)的吞吐量趨近于128f.
(13)
由公式(14)可知,當(dāng)N值很大時(shí),認(rèn)為該流水線(xiàn)的加速比趨近于4.
(14)
隨著分解次數(shù)r的增加,AES_GCM整體電路所需要的面積功耗也在不斷變化,發(fā)現(xiàn)當(dāng)選擇3層KOA(Karatsuba-Offman-Algorithm,KOA)時(shí),將數(shù)據(jù)從128bit分解到16bit時(shí),相比于其他r-KOA所需的面積功耗更低,所以本文選擇3層KOA進(jìn)行全流水線(xiàn)AES_GCM電路設(shè)計(jì).
3.2.2 快速求余
在經(jīng)過(guò)Karatsuba優(yōu)化之后,兩個(gè)128bit的數(shù)據(jù)相乘得到一個(gè)256bit的中間結(jié)果,但前面提到,在GF(2128)域上進(jìn)行的運(yùn)算,得到的結(jié)果必須仍然屬于這個(gè)域中,所以需要對(duì)256bit的中間結(jié)果進(jìn)行求余運(yùn)算.
傳統(tǒng)的求余方法是讓得到的256bit的中間結(jié)果的第254bit到第128bit和簡(jiǎn)化矩陣Q進(jìn)行相乘操作,進(jìn)而得到128bit的有限域乘法結(jié)果.
但是由于傳統(tǒng)運(yùn)算的矩陣乘法存在著大量的資源及時(shí)間消耗,且其無(wú)法利用流水線(xiàn)進(jìn)行優(yōu)化.所以采用Gueron S等[12]所提到的,舍棄了矩陣相乘的快速求余方法,對(duì)于余數(shù)的計(jì)算,其是通過(guò)一系列移位異或運(yùn)算進(jìn)行的,算法具體流程如表6所示.
表6 快速求余算法流程
由上,利用快速求余法來(lái)計(jì)算余數(shù)不僅能夠減少電路上門(mén)的開(kāi)銷(xiāo),而且還可以采用流水線(xiàn)技術(shù)以進(jìn)一步提高電路效率.
多級(jí)緩存技術(shù)是實(shí)現(xiàn)高性能算法的重要方法之一.一方面,將多級(jí)緩存技術(shù)用于模塊之間的通信數(shù)據(jù),可以減少計(jì)算模塊之間的耦合度,通過(guò)增加緩存寄存器或者存儲(chǔ)器,建立模塊之間的路由中斷,增加布線(xiàn)的成功率;另一方面,將多級(jí)緩存技術(shù)用于數(shù)據(jù)信號(hào)對(duì)應(yīng)的控制信號(hào),使數(shù)據(jù)與控制分離,能夠在數(shù)據(jù)處理后正確捕捉到對(duì)應(yīng)的控制信號(hào),增加算法運(yùn)行時(shí)的可靠性.時(shí)鐘域不同的模塊之間的數(shù)據(jù)傳輸使用FIFO(First In First Out)進(jìn)行,采用數(shù)據(jù)緩存匹配不同模塊間的速率,提高運(yùn)行速度.同時(shí),FIFO仲裁控制簡(jiǎn)單,所以引入FIFO以完成數(shù)據(jù)緩存和突發(fā)傳送數(shù)據(jù).
將0128、Y0Y1…Yn依次輸入到AES模塊中,每輸入一個(gè)數(shù)據(jù)消耗一個(gè)時(shí)鐘周期,每個(gè)數(shù)據(jù)花費(fèi)44個(gè)時(shí)鐘用于加密,獲取H并存儲(chǔ),由于明文P0P1…Pn需要與相應(yīng)的Y0Y1…Yn異或,因此采用多級(jí)緩存技術(shù)存儲(chǔ)明文有效信號(hào)及相應(yīng)數(shù)據(jù)P0P1…Pn,這些數(shù)據(jù)在緩存中等待44個(gè)時(shí)鐘后與相應(yīng)的E(Yi)進(jìn)行異或運(yùn)算,得到密文C,如圖4所示.
圖4 多級(jí)數(shù)據(jù)緩存
通常,碰撞攻擊的實(shí)施常選擇距離檢測(cè)法和相關(guān)系數(shù)檢測(cè)法[13].對(duì)于基于距離檢測(cè)的相關(guān)碰撞攻擊,為降低噪聲的影響,首先,對(duì)兩組能量曲線(xiàn)進(jìn)行平均操作,得到兩條平均功耗曲線(xiàn);然后,計(jì)算n個(gè)關(guān)鍵點(diǎn)之間的距離;最后,對(duì)上一步進(jìn)行判斷,如小于提前設(shè)定的閾值,則認(rèn)為出現(xiàn)碰撞,否則沒(méi)有發(fā)生.對(duì)于基于相關(guān)系數(shù)的碰撞攻擊,通常是對(duì)于能量跡的獲取,然后根據(jù)預(yù)先設(shè)計(jì)的計(jì)算公式,計(jì)算正確的碰撞關(guān)系數(shù)值.
所以本文考慮設(shè)計(jì)一種SBox結(jié)構(gòu),以能夠?qū)ζ涔那€(xiàn)的相關(guān)性及一致性產(chǎn)生影響,使其無(wú)法準(zhǔn)確計(jì)算出正確的關(guān)鍵點(diǎn)間的距離,從而使判定和閾值的準(zhǔn)確性隨之受到影響,對(duì)碰撞攻擊具有防御能力.如圖5所示,為基于隨機(jī)矩陣和時(shí)延的SBox加密電路.
圖5 隨機(jī)矩陣和時(shí)延的SBox加密電路
(b0,b1,b2,b3)=nl(A)=(SBox(a0),SBox(a1),SBox(a2),SBox(a3))
(15)
結(jié)合式(15),進(jìn)一步將步驟1的過(guò)程轉(zhuǎn)換為符號(hào)表示,設(shè)nr為當(dāng)前的輪數(shù),icx、icy為字節(jié)替換在4×4矩陣中選取的初始行列坐標(biāo),ocx、ocy為字節(jié)替換在4×4矩陣中選取的輸出時(shí)行列坐標(biāo),如式(16)所示,系統(tǒng)最初最多生成16×16組這樣的數(shù)據(jù).因?yàn)檩啍?shù)nr的差別,不同的行列坐標(biāo)值可以對(duì)應(yīng)相同的變換過(guò)程,所以很多值對(duì)應(yīng)的相同變換過(guò)程都可以歸并,進(jìn)而能夠進(jìn)一步降低電路復(fù)雜性.
SubBytes原始輸入值→{nr,icx,icy,ocx,ocy}→nl(A)→SBox實(shí)際值
(16)
對(duì)于表7中步驟1及式(16),例如原本SBox替換值′0x9E′對(duì)應(yīng)′0xb1′,而現(xiàn)在引入了隨機(jī)變換矩陣后,則可以把其中的一種變換過(guò)程稱(chēng)為′0xb1′,更為詳細(xì)地:例如一個(gè)4×4矩陣的第2行第1列先左移7次,然后上移15次,最后下移3次,變換后的位置在第2行第2列,根據(jù)本文的設(shè)計(jì),把這個(gè)過(guò)程取名叫′0xb1′,也就是′0x9E′的對(duì)應(yīng)值,原先的值′0x9E′不再直接與SBox表相應(yīng)值對(duì)應(yīng),而是對(duì)應(yīng)于這個(gè)變換過(guò)程,同理,其他生成的隨機(jī)變換也是以這樣的方式與原始SBox值一一對(duì)應(yīng),最后簡(jiǎn)化為優(yōu)R4生成的如式(16)所示的一串?dāng)?shù)據(jù),其中nr受R5產(chǎn)生的隨機(jī)數(shù)限制.
表7 基于隨機(jī)矩陣和時(shí)延的加密電路流程
對(duì)于表7中步驟2,詳細(xì)地:
1)4×4矩陣從上至下從左至右分別標(biāo)號(hào)0~15,對(duì)應(yīng)的坐標(biāo)值為(0,0)~(3,3),所以R3生成的隨機(jī)數(shù)的作用是隨機(jī)選擇矩陣的位置標(biāo)號(hào)以對(duì)應(yīng)坐標(biāo);
2)時(shí)延總和設(shè)為16,R1隨機(jī)生成總和為16的10個(gè)隨機(jī)數(shù),每輪中,根據(jù)R10的隨機(jī)值,從R6~R9中選取一個(gè)數(shù)(或不執(zhí)行),隨機(jī)對(duì)SBox進(jìn)行時(shí)延操作;
3)R2用于選擇哪些SBox執(zhí)行隨機(jī)變換操作,生成的隨機(jī)數(shù)需剔除已確定執(zhí)行時(shí)延的SBox編號(hào),然后根據(jù)在限定范圍內(nèi)的隨機(jī)數(shù),相應(yīng)SBox執(zhí)行預(yù)先設(shè)置的隨機(jī)變換操作;
解密過(guò)程與加密類(lèi)似,需要增加緩存寄存器用于存儲(chǔ)產(chǎn)生的隨機(jī)坐標(biāo)值{nr,icx,icy,ocx,ocy}.
如圖6所示,其為一個(gè)模塊的基于GHash優(yōu)化的全流水線(xiàn)AES_GCM結(jié)構(gòu).采用松耦合架構(gòu),將整個(gè)程序優(yōu)化為3大模塊:AES模塊、GHash模塊和控制邏輯模塊.其中AES模塊用于加解密運(yùn)算,GHash模塊用于生成認(rèn)證標(biāo)簽,兩模塊之間的調(diào)度優(yōu)化由控制邏輯模塊實(shí)現(xiàn),各模塊依賴(lài)程度低,可擴(kuò)展性強(qiáng).
圖6 基于GHash結(jié)構(gòu)優(yōu)化的全流水線(xiàn)AES_GCM結(jié)構(gòu)
在松耦合架構(gòu)的基礎(chǔ)上,采用FIFO技術(shù)來(lái)匹配AES模塊和GHash模塊的計(jì)算頻率,并采用AES_GCM控制模塊作為頂端控制,協(xié)調(diào)兩模塊的運(yùn)算.控制邏輯模塊的初始化控制模塊首先對(duì)AES模塊和GHash模塊進(jìn)行復(fù)位,AES_GCM模塊將初始化向量0128和Y0Y1…Yn連續(xù)傳送給AES模塊,并保存E(Y0),然后將密文C、哈希算子H和附加數(shù)據(jù)A傳入GHash模塊,GHash模塊會(huì)將密文C和附加數(shù)據(jù)A傳入緩沖器FIFO中,避免因速率不匹配造成數(shù)據(jù)丟失,待GHash完成計(jì)算后獲取其結(jié)果Xm+n+1,并傳送至結(jié)果輸出模塊.結(jié)果輸出模塊將Xm+n+1和E(Y0)異或得到認(rèn)證標(biāo)簽T并將其輸出.
Xm+n+1=M1⊕M2⊕M3⊕M4
M1=(I1H16⊕I5H12⊕I9H8⊕I13H4…)H4
M2=(M1H12⊕I17H12⊕I21H8⊕I25H4…)H4
M3=(M2H12⊕I29H12⊕I33H8⊕I37H4…)H4
M4=(M3H12⊕I41H12⊕I45H8⊕I49H4…)H4
(17)
因?yàn)樵O(shè)計(jì)的電路結(jié)構(gòu)需要滿(mǎn)足高速網(wǎng)絡(luò)場(chǎng)景,所以本文采用4個(gè)AES_GCM模塊并行的方式進(jìn)行進(jìn)一步優(yōu)化設(shè)計(jì),如圖7所示.首先,FPGA模塊對(duì)接收來(lái)的數(shù)據(jù)進(jìn)行一個(gè)預(yù)處理,仲裁器I對(duì)傳入的數(shù)據(jù)進(jìn)行分組,分組策略即按照模塊順序由上至下進(jìn)行平均循環(huán)分配.因?yàn)镚Hash算法的特殊性,同時(shí)本文采用的是四模塊并行的加密認(rèn)證方式,所以需要對(duì)原有GHash計(jì)算公式進(jìn)行改進(jìn),根據(jù)文獻(xiàn)[14]的GHash運(yùn)算公式并結(jié)合本文優(yōu)化后的公式(10),得到式(8)中Xm+n+1新的計(jì)算公式,如式(17)所示,其中M1~M4分別代表4個(gè)模塊.對(duì)于每次新的加密任務(wù),H4、H8、H12、H16可以預(yù)先初始化好,從而進(jìn)一步減少時(shí)間消耗.最后,仲裁器II對(duì)加密認(rèn)證后的數(shù)據(jù)進(jìn)行排序整合,按照數(shù)據(jù)的輸入順序輸出,進(jìn)而滿(mǎn)足100G高速網(wǎng)絡(luò)數(shù)據(jù)的加密認(rèn)證需求.
圖7 4模塊并行的的全流水線(xiàn)AES_GCM結(jié)構(gòu)圖
本實(shí)驗(yàn)的硬件平臺(tái)為FPGA加速卡,芯片型號(hào)為Xilinx公司的ZYNQ XC7Z035-FFG676-2,使用Verilog語(yǔ)言實(shí)現(xiàn)AES_GCM算法,軟件平臺(tái)使用Vivado 2019.2.通過(guò)對(duì)算法的各個(gè)模塊進(jìn)行優(yōu)化設(shè)計(jì),給出了資源占用情況,如表8所示.并與其他實(shí)驗(yàn)進(jìn)行對(duì)比分析,最后結(jié)合實(shí)驗(yàn)情況,對(duì)實(shí)驗(yàn)做出整體的分析評(píng)價(jià).
表8 AES_GCM資源占用
由表9可知,本文實(shí)現(xiàn)的AES算法與文獻(xiàn)[14]和文獻(xiàn)[15]相比,具有較高的頻率和吞吐率;文獻(xiàn)[16]吞吐率為79.70Gbps,但與本文相比較,其電路設(shè)計(jì)并未進(jìn)行安全方面的考慮.
表9 AES與其他方案對(duì)比
從表10可以看出,本文FPGA上實(shí)現(xiàn)的GHash算法較文獻(xiàn)[1]具有較高的頻率和吞吐量;文獻(xiàn)[17]吞吐量為40Gbps,但是其每次固定加密8組數(shù)據(jù),而本文方案可以處理任意大小數(shù)據(jù),具有靈活性.
表10 GHash與其他方案對(duì)比
使用R表示占用資源數(shù)量取值為Slices,PE表示性能,使用PR代表性能資源比,則性能資源比的計(jì)算公式如式(18)所示:
(18)
根據(jù)表11可看出,本文方案與文獻(xiàn)[14]相比具有較高的吞吐量和頻率;文獻(xiàn)[18]采用的是Arria10 FPGA,無(wú)論其基礎(chǔ)性能還是造價(jià)都遠(yuǎn)高于本文所采用的板卡,從資源、性能及功耗等多方面綜合來(lái)看,本文方案較其具有更高的性?xún)r(jià)比,同時(shí),本文的性能資源比PR與其比較也有比較大的優(yōu)勢(shì).
表11 AES_GCM與其他方案對(duì)比
在算法實(shí)現(xiàn)以后,為滿(mǎn)足面積和功耗最優(yōu),選擇不同策略的多種組合進(jìn)行編譯測(cè)試,在滿(mǎn)足布線(xiàn)時(shí)序的情況下,選擇面積和功耗最優(yōu)的策略組合:Flow_AlternateRoutability和Performance_ExtraTimingOpt,從而通過(guò)綜合策略的選擇進(jìn)一步實(shí)現(xiàn)面積和功耗優(yōu)化.
基于GHash結(jié)構(gòu)優(yōu)化的全流水線(xiàn)AES_GCM實(shí)現(xiàn)在300MHz時(shí)鐘下,每秒可以處理約300×96bit數(shù)據(jù).關(guān)于面積功耗優(yōu)化,利用Karatsuba設(shè)計(jì)的乘法電路達(dá)到了降低AES_GCM消耗資源、減少整體電路的硬件復(fù)雜度的目的,實(shí)現(xiàn)了對(duì)AES_GCM的整體優(yōu)化.對(duì)于本文所設(shè)計(jì)的方案,當(dāng)密鑰不發(fā)生變換時(shí),其綜合性能可以更高;當(dāng)加密數(shù)據(jù)量較大時(shí),具有更好的性能.
(19)
(20)
(21)
最后,對(duì)本文設(shè)計(jì)的加密電路進(jìn)行碰撞攻擊測(cè)試,得到的功耗曲線(xiàn)距離如圖8所示,計(jì)算得到的閾值Tv為0.14,圖中虛線(xiàn)為閾值Tv.
圖8 SBox功耗距離圖
由圖8可知,對(duì)其進(jìn)行碰撞攻擊測(cè)試后,因?yàn)槌霈F(xiàn)了多個(gè)小于閾值的點(diǎn),這些點(diǎn)即是發(fā)生碰撞的值,所以表明其未能正確的檢測(cè)出碰撞,進(jìn)而說(shuō)明了本文所設(shè)計(jì)的加密電路具有一定的碰撞防御能力.另外,加密過(guò)程中每輪都可能存在隨機(jī)時(shí)延,但它是依據(jù)加密時(shí)的環(huán)境安全情況由初始變量控制其是否開(kāi)啟的,關(guān)閉時(shí)對(duì)電路整體性能沒(méi)有影響;開(kāi)啟時(shí),十輪總時(shí)延最多16個(gè)時(shí)鐘,根據(jù)設(shè)計(jì),每輪都有時(shí)延的概率為8.59%,平均情況下,電路性能降低約2.37%.
本文采用流水線(xiàn)和并行技術(shù)實(shí)現(xiàn)AES_GCM算法的優(yōu)化,并在此基礎(chǔ)上采用Karatsuba算法和快速求余來(lái)提高GHash函數(shù)運(yùn)算結(jié)果Xi的計(jì)算時(shí)間,從而進(jìn)一步提高電路性能,以及考慮到電路自身的安全性,并提出相應(yīng)設(shè)計(jì).在AES_GCM優(yōu)化中采用了松耦合架構(gòu)和多級(jí)緩存技術(shù)等.本文實(shí)現(xiàn)方案的吞吐量達(dá)到了115Gbps,能夠滿(mǎn)足100G高速網(wǎng)絡(luò)加密認(rèn)證需求.對(duì)于本文所設(shè)計(jì)的架構(gòu)可以進(jìn)行相應(yīng)調(diào)度調(diào)整來(lái)滿(mǎn)足更高速率的數(shù)據(jù)處理要求.同時(shí),本文設(shè)計(jì)的AES_GCM算法可通過(guò)PCIe與計(jì)算機(jī)配合使用,可應(yīng)用在如物聯(lián)網(wǎng)等場(chǎng)合,具有實(shí)際的應(yīng)用價(jià)值.
高速網(wǎng)絡(luò)的設(shè)備及服務(wù)等隨時(shí)可能發(fā)生巨大的變化,應(yīng)用場(chǎng)景多樣且繁雜,網(wǎng)絡(luò)發(fā)展趨向邊緣化,所以傳統(tǒng)的安全方法可能難以適用,網(wǎng)絡(luò)可能存在著更多的漏洞可以被攻擊.為解決這些問(wèn)題,不僅需要設(shè)計(jì)更高效的通信數(shù)據(jù)加密算法及更優(yōu)的硬件架構(gòu),同時(shí)也更需要從各個(gè)方面著手設(shè)計(jì)更加安全的方案及安全體系,以保證高速網(wǎng)絡(luò)的高安全性和高可信度.