??? 摘?? 要: 提出一種可重構" title="可重構">可重構AES硬件架構,對加/解密運算模塊和密鑰擴展模塊進行了可重構設計,使其能夠適配" title="適配">適配128bit、192bit、256bit三種" title="三種">三種密鑰長度的AES算法,并針對列混合模塊進行了結構優化" title="結構優化">結構優化。在FPGA上進行了驗證與測試,并在0.18μm SMIC工藝下進行了邏輯綜合" title="邏輯綜合">邏輯綜合及布局布線。結果表明其核心時鐘頻率為270MHz, 吞吐量達到3.4Gb/s,能夠滿足高性能的密碼處理要求。?
??? 關鍵詞: 可重構; AES; 密鑰擴展;列混合
?
??? 隨著信息化和網絡化的飛速發展,計算機之間傳輸數據的安全性已愈發重要。對數據進行加密是保護秘密信息的一種重要手段,然而,隨著計算機運算速度、密碼分析技術和芯片處理能力的不斷發展,一些傳統的加密算法的安全強度已經很難適應新的安全需要。因此,AES應運而生。2000年10月,美國國家標準技術研究所(NIST)通過公開征集和討論最終宣布將Rijndael算法作為新的高級加密標準[1]。Rijndael具有抗攻擊能力強、密鑰建立時間短、靈敏性好和內存需求小的特點。?
??? 本文在設計AES算法IP核時,綜合考慮速度和面積等因素對硬件實現的影響,一方面對列混合模塊進行了結構優化,另一方面對密鑰擴展模塊進行了可重構[2]設計,使其能夠適配密鑰長度為128bit、192bit和256bit的三種AES算法,從而既提高了處理速度,又有效節省了硬件資源。本設計在經過FPGA驗證后,采用Synopsys邏輯綜合工具Design Compiler進行邏輯綜合和優化。結果表明,該設計能夠滿足高性能密碼處理要求,可以作為CPU核的外圍模塊。?
1 AES算法介紹?
??? AES算法是一個迭代型分組密碼。其明文分組長度為128bit,密鑰分組長度可以分別指定為128bit、192bit、256bit,即AES-128、AES-192和AES-256。它們的加/解密圈數分別為10、12和14。AES加/解密算法的輸入是一個128bit的數據塊,此數據塊被編排為一個被稱作狀態矩陣的4×4矩陣,AES的所有變換都是基于該狀態矩陣的。類似地,種子密鑰也用一個以字節為元素的矩陣陣列表示,該陣列有4行,列數記為Nk,對應三種密鑰長度,Nk分別為4、6、8。AES算法流程如圖1所示。?
?
?
??? 算法的操作步驟為:初始的密鑰加、(Nr-1)輪迭代以及一個結尾輪。其中,輪迭代又分為四步,即字節替代(ByteSub)、行移位(ShiftRow)、列混合(MixColumn)、密鑰加(AddRoundKey)。在結尾輪運算中不進行列混合變換。?
??? AES解密算法有兩種實現方案[3],其一是直接使用加密算法的逆算法,在這種實現方案中,解密算法所使用的基本運算都是加密算法的逆運算,但所使用的子密鑰與加密算法相同,只是使用順序與加密算法相反。其二是采用等效解密算法,其架構與加密算法非常類似,但所使用的子密鑰與加密算法不同。本文在硬件實現時,為減少資源占用,將加密和解密模塊整合到一個模塊中實現,故采用等效的解密流程。?
2 可重構AES算法的設計與實現?
2.1 整體架構?
??? AES算法結構簡單,只需要邏輯運算和查找表運算,易于實現,靈活性強。它不需要大量復雜的乘法運算,加解密速度快,且輪函數具有良好的統計特性,并行執行度高,十分有利于硬件設計與實現。本設計從節約資源角度出發,將加密和解密算法整合到一個模塊中實現。圖2所示是可重構AES算法的整體電路架構。電路由輸入輸出模塊、可重構運算模塊、可重構密鑰擴展模塊和控制模塊四部分組成。?
?
?
??? Start為啟動信號。當LoadData信號或LoadKey信號有效時,外部明/密文或種子密鑰通過In/Out端口分別注入到可重構加/解密運算模塊或可重構密鑰擴展模塊中進行相應變換。KeySize信號用來選擇該模塊被重構成哪種密鑰長度的AES算法。當其為“00”時,該模塊重構成AES-128;當為“01”時重構成AES-192;為“10”時重構成AES-256。Enc_Dec為加/解密信號,用來指示加密或解密操作。當Busy信號有效時,表示內部正在進行加/解密處理或密鑰擴展運算。?
??? 在可重構加/解密運算模塊中,ByteSub所使用的S-box和InvS-box主要有三種實現方法,即查找表法、多項式法以及ROM替代法。本文采用存儲器資源來進行實現,不占用其他硬件資源,而且可以減少延時。AddRoundKey采用簡單的異或邏輯實現。?
2.2 關鍵模塊的設計實現?
2.2.1 密鑰擴展模塊?
??? 密鑰擴展是以4字節字為元素的一維陣列,表示為W[Nb×(Nr+1)],其中前一個字取為種子密鑰,以后每個字按遞歸方式定義。本文針對密鑰擴展模塊進行了可重構設計,其單元結構如圖3所示。?
?
?
??? 在圖3中,對C1、C2、C3進行相應配置就能使該單元分別適配三種密鑰長度的密鑰擴展算法。具體的配置參數如表1所示。
?
?
??? 在加/解密過程中每一輪需要128位的輪子密鑰,子密鑰的生成可以與密碼處理并行進行,采用這種方式擴展密鑰可以節省存儲空間,但會增加芯片的動態功耗,并且由于解密運算所使用的子密鑰是由加密子密鑰經過列混合運算得到,故解密時的密鑰擴展比加密時的密鑰擴展要多用一倍的時鐘,這將使運算模塊長期處于等待狀態,制約解密過程的實現,導致處理性能降低。通常,在實際應用中種子密鑰不會頻繁改變,所以本文采用外部擴展方式,即通過預計算將擴展出的子密鑰保存在RAM中,進行密碼處理時再從RAM中讀出各輪子密鑰參與運算。這種方式靈活性強,對提高整體性能有很大幫助。?
2.2.2 行移位模塊?
??? 行移位只是完成信號在不同輸入輸出之間的切換,不占用任何觸發器、門陣列資源,只占用布線資源。本文采用硬連線方式實現該模塊,延時小且實現簡單。通過配置,該模塊能夠分別實現三種密鑰長度所對應的行移位。該模塊結構如圖4所示。?
?
?
2.2.3 列混合模塊?
??? 列混合變換被定義為系數在有限域GF(28)上的四次多項式矩陣乘法[1],加密過程是在GF(28)上乘01、02、03,解密過程相對復雜,是在GF(28)上乘09、0E、0B、0D。為了簡化實現,將矩陣乘法展開并整理。以加密過程為例可得:對解密過程也進行相應整理,經比較可以得知加密和解密兩種操作函數中存在可共享的部分,于是將兩種操作函數整合在一起,從而簡化了列混合模塊的實現過程,節約了硬件資源。?
??? 圖5給出了以字為單位的硬件電路模型。在以字節為單位的列混合模塊中,x乘法電路是最重要的單元。對于任意給定的輸入數據b(7:0),當執行x乘運算時,首先將b(7:0)左移1位得到數據b(6:0)&‘0’;其次判斷數據最高位b(7)的值。若b(7)=0,則輸出數據為b(6:0),否則,輸出數據為b(6:4)&(“11011”xor (b(3:0) &‘0’))。因此,x乘法可以用字節內左移一位和緊接著的一個與0x1b的條件位異或來實現。本文對其進行了優化設計,如圖6所示。?
?
?
?
3 性能評價?
3.1 密碼處理性能?
??? 整個設計是在Quartus Ⅱ開發平臺上采用Verilog語言實現的,并將設計文件在Quartus軟件下進行編譯、仿真和FPGA下載驗證。表2給出了采用FPGA實現時的性能和資源占用情況。
?
?
??? 本設計在經過FPGA驗證后,采用0.18μm CMOS標準單元庫編寫約束文件,使用Synopsys Design Compiler工具進行邏輯綜合、優化,在ModelSim工具上仿真,其綜合結果如表3所示。
?
?
3.2 與其他實現方案的比較?
??? 在不考慮初始配置時間和數據輸入/輸出時間并假定數據、子密鑰已經準備完畢的情況下,在參考文獻[4]中提出的方案其速率為1.83Gb/s,參考文獻[5]中提出的方案速率為0.61Gb/s。AES算法基于SP網絡結構設計,數據處理并行度高,本文是按照其基本結構實現該算法時選取的數據。如前所述,本設計能夠較好地適配AES算法,加/解密速率達3.4Gb/s。由此可見,本方案在速度上具有明顯的優勢,同時對系統資源的消耗很少,具有很好的性價比。?
??? 本文對AES算法的運算模塊和密鑰擴展模塊進行了可重構設計,對輪結構中的列混合模塊進行了結構優化,并給出了AES算法在ECB模式下的設計方案。在該方案基礎上做進一步改進便能實現AES算法的CBC、OFB、CFB模式。此外,本文在分析AES算法基礎上,分別用FPGA和ASIC對本文提出的方案進行了高速硬件實現。該方案同樣適用于Altera公司的其他FPGA芯片及Xinlinx公司的FPGA器件等,具有很好的通用性。?
參考文獻?
[1]?DANMEN J, RIIJMEN V. AES Proposal : Rijndael.AES?algorithm submission, AES home page: http://www.nist.gov/aes, 1999-09.?
[2] SIGH H, LEE M H, LU G, et a1.An integerated reconfigurable system for data-parallel and computation-intensive?applications[J]. IEEE Transcations on Computer, 2000,49?(5):465-481.?
[3]?朱信賢.全功能AES密碼引擎之超大型積體電路架構設計[D].臺灣:臺灣國立云林科技大學,2002.?
[4]?KUO H, VERBAUWHEDE I, SCHAUMONT P. A 2.29?Gbits/sec, 56 mW Non-pipelined Rijndael AES Encryption JC in a 1.8V, 0.18 mm CMOS Technology. Electrical Engineering Department, University of California Los Angeles,Los Angeles, CA.?
[5] MROCZKOWSKI P. Implemetation of the block cipher?Rijndael using Altera FPGA. Military University of Technology.