密碼學(xué)是保障信息安全的核心技術(shù),應(yīng)用涉及軍事、國防、商貿(mào)及人們?nèi)粘I畹母鱾€方面。2001 年美國標準技術(shù)研究所決定用AES 算法逐漸取代日益不安全的56 bit 密鑰長度的 數(shù)據(jù)加密標準(DES)算法。AES算法是迭代分組密碼算法,分組長度為128 bit,而密鑰長度可為128 bit、192 bit、256 bit,其對應(yīng)不同的密鑰長度相應(yīng)的迭代循環(huán)次數(shù)為10輪、12輪、14 輪?,F(xiàn)實現(xiàn)的是128 bit 的AES算法[1-2]。
一種AES 算法實現(xiàn)是采用輪展開的流水線結(jié)構(gòu)[3],吞吐量很大可達到10 Gb/s 量級,但消耗大量的邏輯面積??紤]在資源少的FPGA 上實現(xiàn)AES 算法,能滿足低端應(yīng)用的加、解密速度一般不超過100 Mb/s 的需求。現(xiàn)設(shè)計采用順序結(jié)構(gòu)[3],多輪加密共用一個輪運算結(jié)構(gòu),加密模塊和解密模塊共用一個密鑰擴展模塊,能保持較高加解密速率,同時節(jié)省了邏輯面積,在50 MHz 時鐘下加解密速率可達530 Mb/s。
1 AES 算法描述
AES 算法中的字節(jié)表示為有限域上的元素,并在有限域上定義加法和乘法兩種運算,運算的基本單位是字節(jié)和雙字(4 個字節(jié))。AES 算法將128 位的中間結(jié)果和密鑰都分成16 個字節(jié),構(gòu)成4×4 以字節(jié)為元素的狀態(tài)矩陣,AES在加解密過程中就是以狀態(tài)矩陣為操作對象的。加密算法中每一次輪操作都由字節(jié)替換、行移位、列混淆和輪密鑰加這四個函數(shù)組成,最后一次輪操作不含列混淆操作。
2 在FPGA 上實現(xiàn)AES 算法
2.1 頂層結(jié)構(gòu)圖
該設(shè)計的頂層結(jié)構(gòu)圖如圖1 所示,由控制模塊、加密模塊、解密模塊、密鑰擴展模塊、隨機存儲器(RAM)和FIFO組成。接口采用16 位并行數(shù)據(jù)總線結(jié)構(gòu)。加密數(shù)據(jù)流向為:明文數(shù)據(jù)通過數(shù)據(jù)總線寫入16 位入128 位出的FIFO 緩存;由控制模塊啟動AES 加密模塊進行一次加密運算;運算完成輸出128bit 密文存入128 位入16 位出的FIFO 中。解密過程與之相同。加密模塊和解密模塊完全獨立,保證模塊能同時進行加密和解密運算,以滿足快速雙向保密通信的需求。
?
2.2 加解密部分設(shè)計
2.2.1 加密模塊
由于輸入8 次16 位數(shù)據(jù)才能提供一個128 bit 明文,這一過程至少需要8 個時鐘,因此采用邏輯面積較大的多輪展開流水線結(jié)構(gòu)方式意義不大。該設(shè)計采用多輪運算復(fù)用一個輪操作結(jié)構(gòu)的順序方式,設(shè)計原理圖如圖2 所示。
輪運算包括輪密鑰加、字節(jié)替換、行移位和列混淆4 個部分。其中,輪密鑰加只是輪數(shù)據(jù)與輪密鑰進行異或運算,結(jié)構(gòu)比較簡單;行移位也只是簡單的邏輯連線,幾乎不產(chǎn)生時延并且?guī)缀醪缓倪壿嬞Y源。
字節(jié)替換如果采用模乘求逆運算[4]實現(xiàn),則邏輯延時較長,速度較慢。為加快速度,采用時延小的基于只讀存儲器(ROM)查找方式的S 盒結(jié)構(gòu),即輸入8bit 數(shù)據(jù)作為地址而相應(yīng)數(shù)據(jù)輸出則為字節(jié)替換后的8 bit 數(shù)據(jù)。S 盒結(jié)構(gòu)若采用基于塊存儲的查找表(LUT)來實現(xiàn),一個輪運算中16 個S 盒將占用16×128 個LUT,占用邏輯資源較大??刹捎肍PGA 內(nèi)部集成的塊 RAM 來實現(xiàn)S 盒。
列混淆是系數(shù)在有限域上的四次多項式矩陣乘法,輸入列向量(X0, X1, X2, X3),輸出列向量(Y0, Y1, Y2, Y3),加密過程是在上乘以01、02、03、01,解密過程是乘以09、0E、0B、0D。為了優(yōu)化用FPGA 邏輯實現(xiàn),采用一個xtime 函數(shù)來實現(xiàn)上的乘02 運算,對輸入的一個字節(jié)b 做以下變換[5]:xtime = { b[6:0], 1'b0 } ^ ( 8'h1b &{ 8{ b[7]} } )。則列混淆在上所有矩陣乘法就可以通過分解成有限個xtime 運算和異或運算來實現(xiàn)。
輪密鑰加、行移位和列混淆三步運算實現(xiàn)的邏輯資源較少并且邏輯時延較小,可以合并在一個寄存器傳輸層間實現(xiàn)。
2.2.2 密鑰擴展模塊
密鑰擴展模塊設(shè)計比較簡單,只需要4 個S 盒和一個輪常數(shù)字計算模塊,外加一些異或運算和邏輯連線即可完成。密鑰擴展模塊也是一個迭代運算的結(jié)構(gòu),與加密模塊的輪運算同步,即每個時鐘計算出一輪加密的密鑰。
當(dāng)解密密鑰更新時,密鑰擴展模塊計算出的各輪密鑰作為解密的輪密鑰,需要按每個時鐘存儲在RAM 中,解密運算時從RAM 中讀取。
2.3 接口設(shè)計
模塊的外部接口采用了16 位數(shù)據(jù)總線的接口。由于輸入的加密密鑰和解密密鑰各128 位, 占用地址為128×2/16=16 個。另外,加密需要一個輸入明文寄存器和一個輸出密文寄存器,解密需要一個輸入密文寄存器和一個輸出明文寄存器。因此芯片地址數(shù)總共20,即需要5 位地址線。接口讀寫時序的設(shè)計以TMS320C5509 型號數(shù)字信號處理器(DSP)總線讀寫時序作為標準。16 位數(shù)據(jù)線采用雙向三態(tài)設(shè)計。16 位三態(tài)口由片選信號CS 和讀使能信號RDE 控制,當(dāng)CS 和RDE 均有效時三態(tài)口數(shù)值為輸出數(shù)據(jù)寄存器的值以輸出數(shù)據(jù),否則三態(tài)口數(shù)值為高阻將數(shù)據(jù)輸入。
3 測試與分析
3.1 加密模塊和解密模塊功能仿真
用Xilinx ISE Simulator 分別對加密模塊和解密模塊進行信號仿真,仿真圖如圖3 和圖4 所示。
?
兩圖中text_in[127:0]為輸入數(shù)據(jù),key[127:0]為密鑰,text_in[127:0]為輸出數(shù)據(jù)。在圖4 和圖5 中,明文均為(3243,
F6A8, 885A, 308D, 3131, 98A2, E037, 0734 H),密鑰均為(2B7E, 1516, 28AE, D2A6, ABF7, 1588, 09CF, 4F3C H),密文均為(3925, 841D, 02DC, 09FB, DC11, 8597, 196A, 0B32H),證明其加密和解密正確。
3.2 功能測試
將設(shè)計的FPGA 模塊連接到TI 的5509 的DSP 開發(fā)板的總線擴展口,F(xiàn)PGA 模塊通過JTAG 線與計算機連接,DSP開發(fā)板通過仿真器與計算機連接。 通過C 程序?qū)⒚魑暮兔荑€寫入FPGA 模塊,加密后讀出密文,解密過程與之類似。通過DSP 測試,結(jié)果與3.1 仿真結(jié)果完全一致,證明AES算法在FPGA 上準確實現(xiàn)。
使用在線調(diào)試邏輯分析軟件通過JTAG 口對FPGA 總線接口的信號波形進行采樣并顯示,地址、數(shù)據(jù)和控制信號正確。通過加密或解密時連續(xù)輸出128 bit 結(jié)果間隔的時鐘數(shù)可以計算出,在50 MHz 時,數(shù)據(jù)處理能力可達530 Mb/s。
4 結(jié)語
所采用的AES 算法設(shè)計采用16 位并行總線接口,能方便的與上層處理器擴展。在算法實現(xiàn)上,采用多輪運算共用一個輪結(jié)構(gòu)的迭代結(jié)構(gòu),適用于在較少邏輯資源的FPGA 芯片上實現(xiàn),滿足了較高吞吐率和較小的芯片面積的應(yīng)用需求,能滿足當(dāng)前各種數(shù)據(jù)流的加密。算法的實現(xiàn)采用ROM 來實現(xiàn)字節(jié)替換,同時優(yōu)化實現(xiàn)列混淆運算。該設(shè)計在賽靈思(Xilinx)公司的xc3s500e 芯片上實現(xiàn),僅占用4230 個Slice,其中7222 個LUT 和1758 個觸發(fā)器,消耗的邏輯資源較少。
評論