弟宇鳴,陳榮樺,左廣霞
(第二炮兵工程大學 102室,陜西 西安 710025)
隨著信息技術(shù)的日新月異,信息的安全性問題日益突出,如何確保存儲信息的安全有效越來越成為人們關(guān)心的問題。采用加密技術(shù)是解決數(shù)據(jù)存儲安全性的首選[1]。當前,密碼學理論和技術(shù)已取得了長足的發(fā)展,新一代加密算法AES算法可以抵擋目前已知的所有攻擊手段,它的產(chǎn)生與應(yīng)用,給數(shù)據(jù)加密帶來了福音。AES算法是一種迭代型分組密碼,該算法設(shè)計簡單,與公鑰密碼算法不同,沒有復(fù)雜的乘法運算,易于實現(xiàn),靈活性強,輪函數(shù)良好的并行特性有利于硬件設(shè)計與實現(xiàn)[2]。
2001年 11月,NIST宣布將比利時人 Joan Daemen和Vicent Rijinen提交的Rijndael算法作為高級加密標準(AES)。2006年,AES算法已成為對稱密鑰加密中最流行的算法之一。AES算法是一種迭代型分組密碼,其分組長度和密鑰長度均可變,各自可以獨立指定為128位、192位、256位。輪數(shù)Nr依賴于密鑰長度。如果密鑰長度為128比特,則Nr=10;如果密鑰長度為192比特,則Nr=12;如果密鑰長度為256比特,則Nr=14。文中主要討論分組長度和密鑰長度為128位的情況[3]。
AES算法可以用軟件也可以用硬件實現(xiàn),實際使用中根據(jù)具體的應(yīng)用環(huán)境兩種情況都有。軟件實現(xiàn)是靠CPU的運算來實現(xiàn)算法,易受使用條件限制,加密速度慢,易受到破壞,影響數(shù)據(jù)傳輸質(zhì)量。硬件實現(xiàn)是用專用芯片實現(xiàn)密碼算法,通過芯片對數(shù)據(jù)進行加密。專用加密芯片是實現(xiàn)信息安全與保密的核心模塊,具有保密性高,加密效率高,易于嵌入,總體成本低等優(yōu)點,因此在復(fù)雜系統(tǒng)和大數(shù)據(jù)量加密系統(tǒng)中,一般都使用硬件來實現(xiàn)AES加密[4]。
AES的加密流程為,首先將明文映射到狀態(tài)矩陣(State),進行初始密鑰加運算;然后進行Nr次輪運算,各輪都 由 字 節(jié) 替 換 (ByteSub)、 行 移 位 (RowShift)、 列 混 淆(MixColumn)、輪密鑰加(Addroundkey)4 個置換來實現(xiàn),但第Nr輪不做列混淆;最后將狀態(tài)矩陣映射為密文[5]。解密過程與加密過程類似。加密解密流程圖如圖1所示。
圖1 AES加密解密流程圖Fig.1 Flow chart of encryption and decryption
位替換是對狀態(tài)陣列的字節(jié)到字節(jié)的變換,它使用字節(jié)替換表(S盒)作用于狀態(tài)矩陣的每個字節(jié)。字節(jié)替換有正向字節(jié)替換和逆向字節(jié)替換,正向字節(jié)替換是一個簡單的查表操作。AES定義的S盒是由16×16個字節(jié)組成的矩陣,包含了8位值所能表達的256種可能的變換。State中每個字節(jié)按照如下的方式映射為一個新的字節(jié):把該字節(jié)的高4位作為行值,低4位作為列值,取出S盒中對應(yīng)行列的元素作為輸出。圖2描述ByteSub變換結(jié)果。
AES的S盒被設(shè)計成能防止已有的各種密碼分析攻擊,Rijndael開發(fā)者特別尋求輸入位和輸出位之間幾乎沒有相關(guān)性的設(shè)計,并且輸出值不能通過利用一個簡單的數(shù)學函數(shù)變換輸入值所得到。當然,S盒必須是可逆的,但S盒不是自逆的。
圖2 位替換示意圖Fig.2 Schematic diagram of ByteSub
行移位是對狀態(tài)陣列的行到行的變換,也就是將某個字節(jié)從一列移到另一列中,它的線性距離是4字節(jié)的倍數(shù)。在這里要注意到,行移位變換確保了某列的4字節(jié)被擴展到了4個不同的列。正向行移位變換,即State的第一行保持不變,把State的第2行循環(huán)左移一個字節(jié),State的第3行循環(huán)左移2個字節(jié),State的第4行循環(huán)左移3個字節(jié)。而逆向行移位變換則是將State中的第一行保持不變,后3行執(zhí)行與正向行移位相反方向的移位操作。
列混淆是對狀態(tài)陣列的列到列的變換,它作用于狀態(tài)陣列的每一列。正向列混淆變換對每列獨立地進行操作,每列中的每個字節(jié)被映射為一個新值,此值由該列中的4個字節(jié)通過函數(shù)變換得到。
輪密鑰加是輪密鑰與狀態(tài)陣列中的對應(yīng)字節(jié)按位異或的變換,輪密鑰由密鑰擴展得到。在正向輪密鑰加變換中,128位的State按位與128位的密鑰XOR把這個操作看成是基于State列的操作,即把State的一列中的4個字節(jié)與輪密鑰的一個字進行異或。逆向輪密鑰加變換與正向輪密鑰加變換相同,因為異或操作是其本身的逆。也可以說由于AddroundKey只包括一個異或操作,所以InvAddRoundKey與AddroundKey變換一致。
密鑰擴展模塊負責把輸入的初始密鑰擴展為每一輪輪變換所需要的輪密鑰。文中所設(shè)計的模塊,預(yù)先對輸入的密鑰進行擴展,一次性完成加密和解密每一輪輪變換所需要的輪密鑰。擴展所得的輪密鑰存儲于輪密鑰存儲器中,加密和解密過程直接調(diào)用輪密鑰以節(jié)省時間。密鑰擴展模塊如圖3所示。
圖3 密鑰擴展模塊Fig.3 Key extended module
文中所設(shè)計的AES加密模塊是在一片F(xiàn)PGA中實現(xiàn)的,系統(tǒng)是以在滿足時序要求的條件下,最大程度地減小芯片面積為目標。如果直接在邏輯電路上實現(xiàn)AES算法的各種運算,必然會造成芯片面積過大和資源浪費,影響加解密效果和使用環(huán)境。AES加解密模塊整體結(jié)構(gòu)如圖4所示。
圖4 AES加解密模塊整體結(jié)構(gòu)Fig.4 Structure diagram of the AESencryption and decryption module
AES加解密模塊主要由分組寄存器、輪加密/解密運算單元、明文/密文緩沖器、狀態(tài)機(控制邏輯)、密鑰寄存器、密鑰擴展單元、輪密鑰存儲器及其他單元組成。Clk表示時鐘信號,Reset表示復(fù)位信號,Start表示算法開始信號,Mode表示加密/解密模式選擇,Key1和 Key2分別表示加密/解密密鑰輸入端口,Start_key表示密鑰擴展開始信號,Data_in1和Data_in2分別表示明文/密文數(shù)據(jù)輸入端口,Done表示加/解密完成信號,Data_out1和Data_out2分別表示密文/明文數(shù)據(jù)輸出端口。
在系統(tǒng)進行加密/解密運算前,Start_key信號開始控制密鑰擴展模塊對初始密鑰進行擴展,擴展完成的各輪變換所需要的輪密鑰存儲于輪密鑰存儲器中。加密/解密過程需要輪密鑰可直接從存儲器調(diào)用。這樣,在大量數(shù)據(jù)進行運算時,可以節(jié)省時間,提高加密解密效率。
本設(shè)計的代碼輸入、仿真、綜合和實現(xiàn)過程都是在Xilinx公司開發(fā)的集成開發(fā)件ISE8.2i,Model Tech公司的Modelsim6.le中完成的,選用的是Spartan3系列的Sp3-500E型FPGA芯片。綜合工具使用ISE自帶的XST,以速度作為約束條件,對本設(shè)計進行了綜合優(yōu)化,綜合后的得到優(yōu)化結(jié)果如下:
邏輯單元:15 856 LE
存儲單元:247 416 bit
最高頻率:101.891 MHz
最短時延:9.814 ns
最大吞吐量:2.58 Gbit/s
以128比特分組數(shù)據(jù)為例,在明文分組為128比特,初始密鑰長度為128比特,利用高級加密標準提供的測試數(shù)據(jù)進行仿真。測試數(shù)據(jù)表1所示。
表1 測試數(shù)據(jù)Tab.1 Test data
在仿真系統(tǒng)中輸入128比特的密鑰和明文,仿真結(jié)果的密文為:3925 841D 02DC 09FB DC11 8597 196A0B32。仿真結(jié)果如圖5所示。
圖5 初始密鑰長度為128比特下的加密結(jié)果Fig.5 Encryption result of the key length of 128-bit
在仿真系統(tǒng)[6-7]中輸入128比特的密文和密鑰,仿真得到的明文為:3243 F6A8 885A308D 3131 98A2 E037 0734。仿真結(jié)果如圖6所示。
通過仿真結(jié)果可以知道,加密和解密得到的數(shù)據(jù)與高級加密標準資料中提供的測試數(shù)據(jù)一致。加密模塊能夠?qū)崿F(xiàn)AES算法,AES加密模塊在設(shè)計上是成功的。
文中首先介紹了AES算法的結(jié)構(gòu)和基本原理,然后提出AES加密模塊設(shè)計方案。通過用Verilog語言編寫實現(xiàn)程序,在Modelsim6.le軟件平臺上進行編譯、仿真,使得以Rijndael數(shù)據(jù)加密算法的AES高級加密標準得到很好的體現(xiàn)。實驗結(jié)果表明,文中所設(shè)計的AES加密模塊能夠?qū)Τ跏济荑€長度為128比特的明文和密文進行加密和解密,基本達到了預(yù)期的設(shè)計目標。
圖6 初始密鑰長度為128比特下的解密結(jié)果Fig.6 Decryption result of key length of 128-bit
[1]沈昌祥,張煥國,馮登國.信息安全綜述[J].中國科學E輯:信息科學,2007,37(2):129-150.SHEN Chang-xiang,ZHANG Huan-guo,F(xiàn)ENG Deng-guo.Summary of information safety[J].Science in China:Series E:Information Sciences,2007,37(2):129-150.
[2]唐金藝.AES算法FPGA實現(xiàn)分析[J].計算機安全,2007(6):14-20.TANGJin-yi.Analysis of AESs Implementation with FPGA[J].Computer Security,2007(6):14-20.
[3]吳鵬,李開成.基于FPGA的Rijndael算法實現(xiàn)的研究[J].鐵路計算機應(yīng)用,2007(120):46-48.WU Peng,LI Kai-cheng.Research on implementation of rijndael algorithm based on FPGA[J].Railway Computer Application,2007(120):46-48.
[4]儲奕鋒.AES算法的FPGA實現(xiàn)[J].電腦知識與技術(shù),2007(19):191-193.CHU Yi-feng.Implementation of AESalgorithm on FPGA[J].Computer Knowledge and Technology,2007(19):191-193.
[5]高旸,胡向東.AES算法的DSP實現(xiàn)[J].兵工自動化,2006,25(1):38-44.GAO Yang,HU Xiang-dong.Realization of AES based on DSP[J].Ordnance Industry Automation,2006,25(1):38-44.
[6]蘇國民,孫旭.基于Matlab的燃油爐溫度仿真系統(tǒng)的設(shè)計[J].工業(yè)儀表與自動化裝置,2011(3):89-90.SU Guo-min,SUN Xu.The design of fuel furnace temperature system with the Matlab[J].Industrial Instrumentation &Automation,2011(3):89-90.
[7]周艷平,胡乃平.基于Web的計算機控制技術(shù)遠程仿真系統(tǒng)開發(fā)[J].工業(yè)儀表與自動化裝置,2010(3):112-115.ZHOU Yan-ping.Development of remote simulation system for computer control technology based on Web[J].Industrial Instrumentation&Automation,2010(3):112-115.