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