李丹楓,王 飛,趙國鴻
(國防科技大學計算機學院,湖南 長沙 410073)
隨著互聯(lián)網(wǎng)普及率的提高,人類社會越來越依賴以IP為核心的互聯(lián)網(wǎng)基礎(chǔ)設(shè)施。然而,網(wǎng)絡(luò)核心架構(gòu)在設(shè)計初期未能充分考慮密碼安全問題,網(wǎng)絡(luò)IP報文通信面臨著源地址欺騙、內(nèi)容篡改、報文注入和DDoS等威脅。使用消息驗證碼MAC(Message Authentication Code)正是保證信息真實認證和完整性的一種高效解決方案[1]。
消息驗證碼是經(jīng)過特定加密算法生成的一段二進制碼。通信雙方在收發(fā)消息時,利用提前共享的密鑰通過加密算法計算出該消息的驗證碼,在共享密鑰未泄露的前提下,消息驗證碼可保證通信雙方消息來源可靠且未被篡改。計算MAC的加密算法通?;诿艽a雜湊算法[2],即基于Hash的消息驗證碼HMAC(Hash-based MAC)算法。雜湊算法可將任意長度的明文映射為固定長度的雜湊值且過程不可逆,是驗證消息完整性的通用手段。目前常用的國際標準雜湊算法包括SHA-2系列(SHA-256,SHA-384和SHA-512)和SHA-3。我國于2010年公布了具有完全自主知識產(chǎn)權(quán)的SM3密碼雜湊算法[3],可以為HMAC內(nèi)部核心算法的安全性提供有效支撐。
目前關(guān)于SHA系列算法的研究較多,而關(guān)注SM3算法的研究較少,相關(guān)研究大多停留在算法硬件實現(xiàn)效率提高上,例如通過開發(fā)SM3算法的流水化[4]進行優(yōu)化,但沒有將流水技術(shù)進一步拓展到HMAC-SM3中,更缺乏將SM3應用到自主網(wǎng)絡(luò)報文驗證的相關(guān)研究。核心網(wǎng)絡(luò)流量大、流認證密鑰維護量大、要求延遲低,需要高性能SM3加速引擎和多流報文及密鑰管理系統(tǒng)支撐。
本文首次提出并設(shè)計面向大流量網(wǎng)絡(luò)報文的HMAC-SM3實時加速引擎方案,通過大流量報文-密鑰對輸入輸出管理和SM3計算核流水處理,能夠?qū)崟r完成大流量報文HMAC計算任務。設(shè)計了基于存儲地址的報文-密鑰對快速存儲匹配技術(shù),開發(fā)了多報文亂序哈希下的有序輸出架構(gòu),并通過展開SM3的輪計算設(shè)計了流水化的SM3子模塊,可在同一時刻進行64條報文-密鑰對的HMAC-SM3計算。實驗表明,本方案在Stratix IV平臺上最高時鐘頻率為172.41 MHz,平均吞吐量為65.18 Gb/s,在相同平臺Cyclone IV上是現(xiàn)有的串行HMAC-SM3驗證方案[5]吞吐量的34.86倍。
本文第2節(jié)分析國內(nèi)外相關(guān)工作,第3節(jié)介紹HMAC算法和SM3算法,第4節(jié)闡述加速引擎設(shè)計方案,第5節(jié)為實驗分析,最后在第6節(jié)進行小結(jié)。
決定HMAC算法安全性和實現(xiàn)效率優(yōu)劣的關(guān)鍵在于雜湊函數(shù)的選擇。在安全性方面,SHA-2算法是SHA-1算法的摘要輸出加長版本,計算方式未有本質(zhì)區(qū)別,而后者已于2005年被破解[6],雖然至今尚未出現(xiàn)對SHA-2有效的攻擊,但其安全性仍不斷受到質(zhì)疑[7 - 9]。在此背景下,美國國家標準與技術(shù)研究院NIST(National Institute of Standards and Technology)于2015年批準發(fā)布了SHA-3算法,安全性得到了提高[6,10]。對標國際標準,我國自主提出SM3算法,其安全性相關(guān)數(shù)據(jù)已由文獻[11,12]量化給出。
SM3密碼雜湊算法作為中國標準,急需高效的自主可控實現(xiàn)與應用。文獻[12]在XILINX Virtex-5平臺上對比了SHA-256、SHA-512、SHA-3和SM3的實現(xiàn)效率,其中SM3的FPGA實現(xiàn)面積最小,吞吐量面積比僅次于SHA-3,總體效率與SHA-256相當。文獻[4]對SM3算法實現(xiàn)了流水化展開,并通過發(fā)掘算法計算步驟中的流水潛能,縮短了SM3單輪計算周期,實現(xiàn)了73.54 GB/s的高吞吐量。文獻[5]將SM3與HMAC相結(jié)合并在FPGA上仿真實現(xiàn),由于采用串行SM3驗證核,吞吐量僅為1.02 GB/s,無法滿足大流量的網(wǎng)絡(luò)報文驗證需求。
目前尚未有將SM3密碼雜湊算法應用到核心網(wǎng)絡(luò)多發(fā)大流量報文實時認證的研究。本文提出的帶有多流消息及其認證密鑰存儲、調(diào)度和處理設(shè)計的HMAC-SM3實時加速引擎能夠滿足大流量網(wǎng)絡(luò)環(huán)境中報文的實時認證需求。
HMAC算法是一種帶密鑰的消息鑒別碼算法,用于校驗數(shù)據(jù)完整性和來源合法性,適用于任何安全體系結(jié)構(gòu)、進程或應用的安全服務。美國聯(lián)邦信息處理標準FIPS(Federal Information Processing Standards)對HMAC算法過程的定義為:
HMAC(K0,text)=
H(K0⊕opad,H(K0⊕ipad,text))
(1)
其中,K0為通信雙方提前共享的密鑰,H為Hash函數(shù),text為待驗證數(shù)據(jù),opad和ipad為算法定義的常數(shù)。FIPS標準中給出的HMAC算法流程如圖1所示。
Figure 1 Flowchart of HMAC algorithm圖1 HMAC算法流程
SM3是我國發(fā)布的一種基于分片迭代結(jié)構(gòu)的密碼雜湊算法,它將長度l不超過264比特的消息m經(jīng)過預處理、消息拓展和迭代壓縮3個步驟,生成256比特雜湊值。
算法1SM3
輸入:長度為l的比特序列m。
輸出:256比特雜湊值。
步驟1(預處理):在消息的末尾添加一個比特“1”和k個“0”,其中k是滿足l+1+k≡448 mod 512的最小的非負整數(shù),將長度為l的二進制表示以64位比特串的格式添加至消息末尾,最后把填充后的消息m′按512比特進行分片:m′=B(0)B(1)…B(n-1),其中n=(l+k+65)/512。
步驟2(消息拓展):
(1)將消息分片B(i)劃分為16個字W0,W1,…,W15;
(2)定義置換函數(shù)
P1(X)=X⊕(X<<<15)⊕(X<<<23);
FORj=16TO67
Wj←P1(Wj-16⊕Wj-9⊕(Wj-3<<<15))⊕(Wj-13<<<7)⊕Wj-6
ENDFOR
(3)FORj=0TO63
W′j=Wj⊕Wj+4
ENDFOR
步驟3(迭代壓縮):設(shè)A、B、C、D、E、F、G、H為8個32位寄存器,迭代過程Vi+1=CF(V(i),B(i)),0≤i≤n-1,壓縮函數(shù)CF描述如下:
(A,B,C,D,E,F,G,H)←V(i);/*將V(i)的值平均分為8個部分,并按照從高到低的順序分別存入A~H中*/
FORj=0TO63
SS1←((A<<<12)+E+(Tj<< SS2←SS1⊕(A<<<12); TT1←FFj(A,B,C)+D+SS2+W′j; TT2←GGj(E,F,G)+H+SS1+Wj; D←C; C←B<<<9; B←A; A←TT1; H←G; G←F<<<19; F←E; E←P0(TT2); ENDFOR Vi+1←(A,B,C,D,E,F,G,H)⊕V(i); 其中,V(0)設(shè)置為初始值7380166f4914b2b917244 2d7da8a0600a96f30bc163138aae38dee4db0fb0e4e,置換函數(shù)P0(X)=X⊕(X<<<9)⊕(X<<<17),布爾函數(shù) FFj(X,Y,Z)= GGj(X,Y,Z)= 最終輸出的Vn即為256比特雜湊值。 加速引擎系統(tǒng)設(shè)計可分為消息緩存(Message Buffer)、輸入調(diào)度(Message Dispatch In)、SM3計算、輸出調(diào)度和輸出排序(Output Reorder)等5個模塊,整體實現(xiàn)如圖2所示,輸入報文-密鑰對,加速引擎系統(tǒng)按輸入報文順序輸出對應的HMAC計算結(jié)果。報文Data與密鑰Key經(jīng)RAM緩存后進入輸入調(diào)度模塊,該模塊按HMAC步驟生成需要進行SM3計算的參數(shù)組(Message,Abstract),同時通過控制單元生成一個包含本次HMAC執(zhí)行步驟碼、初始緩存地址的信號,與SM3計算結(jié)果一同輸入輸出調(diào)度模塊,用于同步本次計算的狀態(tài)信息。輸出調(diào)度模塊根據(jù)HMAC執(zhí)行步驟碼識別HMAC算法完成度,判斷將本輪SM3結(jié)果和初始緩存地址輸出至輸出排序模塊或回傳至輸入調(diào)度模塊準備下一輪SM3計算。輸出排序模塊根據(jù)初始緩存地址對收到的HMAC值進行排序輸出,完成計算并回收地址。 Figure 2 Structure of acceleration engine圖2 加速引擎結(jié)構(gòu) 需要說明的是,網(wǎng)絡(luò)報文進行SM3計算時需切割為若干個512比特數(shù)據(jù)包并按SM3算法要求填充,本文將切割填充放在了加速引擎系統(tǒng)外部執(zhí)行,即默認輸入的報文均為若干組帶2比特首尾標志位的共514比特的分片數(shù)據(jù)包。 緩存模塊通過FIFO(First In First Out)存儲器緩存外部輸入的認證密鑰,并由一個地址管理FIFO給出空閑的密鑰存儲RAM(Random Access Memory)地址,控制密鑰流入RAM。系統(tǒng)初始化時,向地址管理FIFO順序?qū)懭朊荑€存儲RAM的所有地址,表示全部RAM空閑。當接收到密鑰后,由地址管理FIFO彈出空閑地址,將密鑰寫入RAM的對應地址中,完成密鑰裝載。使用密鑰時,地址信息將作為本條密鑰生命周期里的唯一標識,跟隨密鑰一同傳輸。最后,輸出排序模塊輸出計算完畢的HMAC值時,表示一條密鑰已使用完畢,加速引擎系統(tǒng)會將該密鑰地址回傳至緩存模塊的地址管理FIFO,說明該地址下的密鑰已無效,完成密鑰卸載和地址釋放。 Figure 3 Schematic diagram of message storage address allocation圖3 報文存儲地址分配示意圖 存儲報文時,緩存模塊采用了(基址,拓展地址)的二維地址分配方式。如圖3所示,加速引擎系統(tǒng)分配報文存儲地址時,以報文對應的認證密鑰地址為基址,再為報文存儲RAM分配額外的5比特拓展地址,使每個報文有獨立的25*514比特的存儲空間,在滿足了TCP/IP網(wǎng)絡(luò)協(xié)議下的最大長度報文存儲的同時,通過基址比對保留了密鑰與報文的對應關(guān)系。 分析SM3算法可知,對于報文的每個分片都需要進行64輪迭代壓縮計算,并且前一個分片的最終迭代壓縮計算結(jié)果會作為參數(shù)參與下一個分片的計算,即同一報文的分片在計算SM3雜湊值時存在數(shù)據(jù)相關(guān),故只能開發(fā)不同報文之間的流水化潛能。本方案中SM3計算模塊流水結(jié)構(gòu)如圖4所示。 Figure 4 Pipeline structure of SM3 computation module圖4 SM3計算模塊流水結(jié)構(gòu)示意圖 T1周期開始時,報文Message1的第1塊分片M1_1輸入SM3計算模塊的0號計算單元Unit0,在T1周期內(nèi)進行第1輪迭代壓縮。T2周期開始時,M1_1第1輪迭代壓縮計算結(jié)果進入1號計算單元Unit1,在T2周期內(nèi)進行第2輪迭代壓縮,同時另一報文Message2的第1塊分片M2_1進入Unit0進行第1輪迭代壓縮計算。以此類推,后續(xù)T3~T64周期開始時均有不同報文的分片輸入Unit0,同時Unit(n)的計算結(jié)果輸入Unit(n+1)進行下一輪迭代壓縮計算。直至第64個周期后,M1_1分片的64輪迭代壓縮計算完畢,計算結(jié)果在下一計算周期T65與Message1的下一分片M1_2一同回傳至Unit0開始新一輪的迭代壓縮計算。 考慮到SM3算法有64輪迭代壓縮計算,本計算模塊通過對每一輪迭代壓縮設(shè)置獨立的計算單元,使得在輸入數(shù)據(jù)量足夠的前提下,SM3模塊可以同時進行64組SM3計算。除最初63個周期外,每一個計算周期結(jié)束后都有一個分片完成整個迭代壓縮計算并將結(jié)果輸出,從而讓整個SM3計算模塊的流水化性能達到飽和。 SM3計算模塊整體結(jié)構(gòu)如圖5所示。 Figure 5 Overall structure of SM3 computation module圖5 SM3計算模塊整體結(jié)構(gòu)示意圖 圖5中消息拓展邏輯Expend_n和計算邏輯SM3_n共同組成一級計算單元。計算邏輯按照SM3算法中迭代壓縮部分的算法設(shè)計,不作過多介紹。消息擴展邏輯用于生成SM3算法中的Wj和W′j。在SM3算法中,Wj生成了68次,前16次直接從輸入報文Message中截取得到,后52次需計算生成;W′j生成了64次,通過Wj與Wj+4按位異或計算得到。然而,SM3算法的第n輪迭代壓縮計算中僅用到了相對應的參數(shù)Wn與W′n,故基于本模塊的流水線結(jié)構(gòu)可對SM3算法模塊進行優(yōu)化,各級計算邏輯無需等待所有的Wj、W′j生成完畢,只需得到對應的Wj、W′j參數(shù)便可開始計算。分析SM3算法可知,在第0~11輪中,Wj、W′j可直接從輸入的Message中截取得到;自第12輪開始,Wj仍可直接從輸入的Message中截取得到,每輪僅需計算出一個新的Wj+4用于計算W′j,并將Wj+4附于Message之后,同時去除Message頭部等長的比特,輸入下一輪消息拓展邏輯,之后的消息拓展邏輯重復同樣的操作,直至循環(huán)的最后一輪。優(yōu)化后的SM3算法模塊將計算邏輯與Wj、W′j生成邏輯并列執(zhí)行,縮短了計算時間。 網(wǎng)絡(luò)報文長短不一,基于本方案的流水驗證機制,可能存在后傳入的短報文由于分片較少,會先于先傳入的多分片長報文完成HMAC計算的情況。本方案出于通用性考慮,未對HAMC輸出結(jié)果作更多標識,只將輸出順序作為輸出與輸入的唯一對應關(guān)系,故需要對HMAC計算結(jié)果進行排序處理。由前文闡述可以看出,消息緩存模塊所分配的初始緩存地址即包含了收到數(shù)據(jù)的順序信息,故可根據(jù)該地址進行排序。在輸出排序模塊中設(shè)置寄存器Current_Address,用于記錄當前應輸出HMAC值的消息對應的初始緩存地址的基址部分,該寄存器初始化時設(shè)為0。當輸出排序模塊收到上游模塊傳來的HMAC值和初始緩存地址時,將初始緩存地址的基址部分與Current_Address中的值進行比對,若相同則直接輸出,Current_Address中的值自增加1;否則以基址地址存入排序RAM,并將該地址的值有效位置1,待Current_Address中的值指向該地址時再輸出。 本節(jié)采用Verilog硬件描述語言,使用Quartus Prime與Modelsim搭建編譯仿真軟件環(huán)境,分別在Stratix IV和Cyclone IV平臺上基于本方案編譯生成仿真系統(tǒng),驗證前文所述功能。 向仿真系統(tǒng)內(nèi)依次輸入2,5,10段514 bit數(shù)據(jù)包及其對應的64 bit密鑰,以2 bit首位標志位區(qū)將其分為3個網(wǎng)絡(luò)報文包,測試多個網(wǎng)絡(luò)報文連續(xù)輸入情況下系統(tǒng)功能的正確性。仿真結(jié)果顯示,系統(tǒng)分別于第313,546和932個時鐘周期輸出正確計算結(jié)果。繼續(xù)向系統(tǒng)內(nèi)依次輸入10,2,5段514 bit數(shù)據(jù)包及其對應的64 bit密鑰,測試計算量大的長報文需先輸出結(jié)果的情況下系統(tǒng)功能的正確性。仿真結(jié)果顯示,系統(tǒng)分別于第921,924和925個時鐘周期輸出正確計算結(jié)果。上述實驗表明,本方案能夠完成實時認證和有序輸出。 為測試本方案在網(wǎng)絡(luò)環(huán)境中的延遲和吞吐量,向系統(tǒng)輸入10 000組報文,當輸入的網(wǎng)絡(luò)報文平均分片數(shù)量為1~32時,每組報文的平均延遲如圖6所示。不同平均分片情況下系統(tǒng)吞吐量變化如圖7所示。由圖6和圖7可知,網(wǎng)絡(luò)報文經(jīng)過本系統(tǒng)的平均延遲與報文平均分片數(shù)量大體呈線性關(guān)系,而吞吐量隨著報文平均分片數(shù)量增多而增大,但增長趨勢逐漸緩慢,最終趨于平穩(wěn)。 Figure 6 Packet average delay with different number of segments圖6 報文平均延遲隨分片數(shù)量變化趨勢圖 Figure 7 Average throughput with different number of segments圖7 平均吞吐量隨分片數(shù)量變化趨勢圖 經(jīng)仿真,本設(shè)計方案最高時鐘頻率達到了172.41 MHz(基于Stratix IV平臺),在此時鐘頻率下平均延遲為129.15 ns,平均吞吐量可達到65.18 Gb/s。與其他文獻中的設(shè)計實現(xiàn)結(jié)果的對比如表1所示。從表1中可以看出,通過應用流水化技術(shù),相同條件下本方案吞吐量是串行HMAC-SM3吞吐量的34.86倍。 本文提出了一種在FPGA平臺上進行大流量網(wǎng)絡(luò)報文HMAC實時認證的方案,通過SM3流水化機制、報文-密鑰對快速存儲匹配技術(shù)和有序輸出架構(gòu),實現(xiàn)了網(wǎng)絡(luò)報文的高效驗證。實驗結(jié)果表明,在大流量報文環(huán)境中,本方案的實現(xiàn)性能優(yōu)良,可在高速網(wǎng)絡(luò)HAMC認證相關(guān)應用場景發(fā)揮良好的作用。SM3計算模塊每5個時鐘周期才能輸出一個計算結(jié)果,是本方案的瓶頸,故在下一步的工作中,可設(shè)置多個SM3計算模塊,通過多核并行方式進一步提高本方案的吞吐量。 Table 1 Comparison of implementation performance 表1 實現(xiàn)性能對比4 加速引擎系統(tǒng)設(shè)計
4.1 總體結(jié)構(gòu)
4.2 報文-密鑰對快速存儲匹配
4.3 SM3計算模塊流水設(shè)計與優(yōu)化
4.4 報文輸出排序
5 功能驗證與實驗分析
6 結(jié)束語