摘要:隨著國際空間任務的交叉合作以及互聯網在空間任務中的應用,空間數據安全性受到威脅,空間數據的加密日益受到設計人員的重視。CCSDS于2004年推薦AES算法作為空間數據系統的加密標準。本文根據高速數據處理的實際需求,采用了在FPGA上實現AES算法的數據加密方案,仿真結果表明,AES是一種優(yōu)選的加密算法,能夠滿足高保密性、加密速率快、硬件資源占用少等任務要求。
1. 引言
隨著國際空間任務交叉合作增加,應用地面公共數據網絡進行空間任務控制和數據監(jiān) 測越來越多,空間飛行器迫切需要數據安全保護機制[1]。隨著計算機技術的迅速發(fā)展,原 來衛(wèi)星(如SPOT 衛(wèi)星)上使用的DES 加密算法已能夠被窮舉法破譯。為此,美國國家標準 和技術協會(NIST)于2000 年10 月2 日宣布采用Rijndael 作為下一代先進加密標準(AES) 的正式算法[2]。2004 年,CCSDS(國際空間數據系統咨詢委員會)建議將AES 作為空間 數據加密算法標準[3][4]。目前,AES 加密算法已在NASA、FBI、CCSDS 等機構得到廣泛 應用。
隨著我國空間技術的快速發(fā)展,未來需要考慮空間數據安全性設計。傳統的星上加密 需要一個專門的裝置,占用的體積、功耗等資源均較大。AES 算法適用于軟硬件資源有限 的應用中,同時與軟件加密相比,采用FPGA 進行物理加密具有很好的防攻擊性,實時性好, 可實現高速數據處理,資源占用非常小,是空間數據加密的重要發(fā)展方向。
本文對AES 算法進行了研究,并在一片FPGA 上進行了仿真分析,確定了適合空間應 用的AES 算法。
2. AES 加密算法及優(yōu)化實現
2.1. AES 加密算法
AES 是一種可變密鑰長度的迭代分組加密算法,明文被分成以128bit 為一塊進行加密, 密鑰長度可分別為128bit、192bit、256bit。
AES 加密算法包括密鑰擴展過程和加密過程。加密過程又包括一個作為初始輪的初始密鑰加法(AddRoundKey),接著進行若干次輪變換(Round),最后再使用一個輪變換(FinalRound),如圖2.1.1 所示。
明文可以表示為4*4B 的狀態(tài)矩陣,加密的每一輪是對狀態(tài)矩陣進行操作,得到中間結 果狀態(tài)矩陣。初始變換指的是狀態(tài)矩陣中每一列與初始密鑰進行加運算。輪變換的每一輪 包括字節(jié)替換(SubBytes)、行移位(Shiftrows)、列混合(Mixcolumns)、輪密鑰加 (AddRoundKey)。最后一輪變換不包括列混合(Mixcolumns)。經過最后一輪變換,中間狀 態(tài)矩陣將輸出4*4B 的密文。
密鑰擴展是對給定初始密鑰進行運算,得到每個輪變換的輪密鑰。主要包括三步:字 替換(Subword)、周期置換(Rotword)、圈常數字序列加運算[2]。AES-128 與AES-192 密 鑰擴展的每一輪都包括三個步驟,對于AES-256,并不是每一輪都包括三個步驟,當密鑰 替換循環(huán)次數小于Nb*(Nr+1)(Nb 數據塊長度、Nr 圈數),同時循環(huán)次數對Nk(密鑰長度) 取模的結果為4 時,只進行字替換(Subword)。
表 2.1.1 給出了三種AES 加密的明文塊長度,密鑰長度,加密輪變換次數之間的關系。
2.2. AES 算法優(yōu)化實現
2.2.1. 字節(jié)替換(SubBytes)
SubBytes 主要通過兩步來完成,一步是在GF(28)中取乘法逆,另外一步是通過特別 定義的GF(2)上的仿射作用。為了避免復雜的乘法運算,在FPGA 上具體實現時,構造了 16*16B 的置換表,通過查表完成了字節(jié)替換,節(jié)省了運算時間。
2.2.2. 行移變換(shiftrows)
ShiftRows 與列混合運算相互影響,在多輪變換后,使密碼信息達到充分的混亂。行變 換是在狀態(tài)的每個行間進行的,是狀態(tài)中的行按不同的偏移量進行循環(huán)左移運算[10]。通過 對每個字節(jié)的行移位實現該變換。
2.2.3. 列混合(MixColumns)
假設列混合運算輸入為a,輸出為b,加密的列混合運算可做如下表示:
式2.1 所示的矩陣運算是伽羅華域上常數乘法運算。伽羅華域上乘以任何常數的乘法 都可以通過反復的乘以02 和異或運算來實現[5]。將GF(28)域中的每一個元素與02 的乘積 存儲在一張16*16 B 查找表中,通過異或運算和查表即可實現列混合運算。
2.2.4. 密鑰加法(AddRoundKey)
AddRoundKey 是將輪密鑰中的各個字節(jié)與狀態(tài)中的各個字節(jié)進行逐位異或運算,實現 密碼和密鑰的混合[10]。輪密鑰是由初始密鑰通過密鑰擴展得到的。
2.2.5. 密鑰擴展(KeyExpansion)
初始密鑰和擴展后的整個密鑰表可以看作是一個字(word)序列。密鑰擴展是針對字進 行的,為此又引入了兩個對字進行處理的函數:字替代(Subword)和字旋轉(RotWord)。字 旋轉將字的4 個字節(jié)循環(huán)右移一個單位。密鑰擴展還包括引入輪常數Rcon。字替換和引入 輪常數均可使用查表法完成。字旋轉可以用簡單的交換字的順序實現。
在FPGA 的實現過程中,若不進行上述諸如查表法的優(yōu)化,將會造成資源占用過度,運 行速率低下的情況。 3. AES 算法實現與仿真
3.1. AES 算法實現方案
圖3.1 為AES 加密算法實現框圖,其中明文有效標志和密鑰有效標志輸入給控制模塊, 初始密鑰送給密鑰擴展模塊,明文輸入到初始變換模塊。控制模塊輸出加密完成標志,最 終變換模塊輸出密文[7]。其中粗箭頭為數據線,細箭頭為控制線。為滿足加密過程的時序 要求,控制模塊對輸入的明文有效信號及密鑰有效信號進行控制。密鑰擴展模塊在不同輪 數下產生的擴展密鑰分別送給初始變換模塊,輪變換模塊以及最終變換模塊。初始變換模 塊對明文加了初始輪密鑰;輪變換模塊進行了四個變換步驟。最終變換模塊與輪變換模塊 不同在于沒有進行混合列操作。
3.2. 仿真結果
本設計采用VHDL 語言,在Xilinx 公司的一款FPGA 上實現了AES 算法。分別對AES-128、 AES-192、AES-256 加密算法實現進行仿真,在FPGA 資源占用率、數據處理速率等方面進 行了對比分析。
(1) 仿真結果
圖3.2.1、3.2.2、3.2.3 分別是AES-256、AES-192、AES-128 的FPGA 實現仿真結果, 從圖中可以看出AES-256 可以在15 個時鐘周期內完成,AES-192 可以在13 個周期實現加 密算法,AES-128 可以在12 個時鐘周期內實現加密算法。
(2) 性能分析
在Xilinx 公司的一款X2V 系列FPGA 上所占用的資源情況對比如表3.1.1。
根據密碼學理論,密鑰長度越長,其安全性能越好。AES-256 占用硬件資源較AES-128、 AES-192 多,但AES-256 可以提供最好的安全性。三種加密算法占用的資源數相當,數據 吞吐率隨著密鑰長度加長而變小。
4. 結論
本文對AES 算法進行了研究,提出了面向空間應用的AES 算法的FPGA 實現方案。通過 仿真分析,表明利用FPGA 進行AES 進行數據加密具有占用硬件資源較少,數據吞吐率高, 安全性好的特點,門數在10 萬左右的小型FPGA 即可實現該算法??紤]到安全性,在實際 應用中,AES-256 算法是最適合的。
來源:xinxin0次