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