面向空間應用的AES加密算法如何在FPGA上的實現(xiàn)
隨著國際空間任務的交叉合作以及互聯(lián)網(wǎng)在空間任務中的應用,空間數(shù)據(jù)安全性受到威脅,空間數(shù)據(jù)文件加密日益受到設計人員的重視。國際空間數(shù)據(jù)系統(tǒng)咨詢委員會已于2004年推薦AES加密算法作為空間數(shù)據(jù)系統(tǒng)的加密標準。那么我們今天就給大家講講面向空間應用的AES加密算法是如何在FPGA上的實現(xiàn)的。
一、AES加密算法及優(yōu)化實現(xiàn)
1、AES加密算法
AES是一種可變密鑰長度的迭代分組加密算法,明文被分成以128bit為一塊進行加密,密鑰長度可分別為128bit、192bit、256bit。
AES加密算法包括密鑰擴展過程和加密過程。
加密過程又包括一個作為初始輪的初始密鑰加法(AddRoundKey),接著進行若干次輪變換(Round),最后再使用一個輪變換(FinalRound),如下圖所示。

明文可以表示為4*4B的狀態(tài)矩陣,加密的每一輪是對狀態(tài)矩陣進行操作,得到中間結(jié)果狀態(tài)矩陣。初始變換指的是狀態(tài)矩陣中每一列與初始密鑰進行加運算。輪變換的每一輪包括字節(jié)替換(SubBytes)、行移位(Shiftrows)、列混合(Mixcolumns)、輪密鑰加(AddRoundKey)。最后一輪變換不包括列混合(Mixcolumns)。經(jīng)過最后一輪變換,中間狀態(tài)矩陣將輸出4*4B的密文。
密鑰擴展是對給定初始密鑰進行運算,得到每個輪變換的輪密鑰。主要包括三步:字替換(Subword)、周期置換(Rotword)、圈常數(shù)字序列加運算。AES-128與AES-192密鑰擴展的每一輪都包括三個步驟,對于AES-256,并不是每一輪都包括三個步驟,當密鑰替換循環(huán)次數(shù)小于Nb*(Nr+1)(Nb數(shù)據(jù)塊長度、Nr圈數(shù)),同時循環(huán)次數(shù)對Nk(密鑰長度)取模的結(jié)果為4時,只進行字替換(Subword)。
下表給出了三種AES加密的明文塊長度,密鑰長度,加密輪變換次數(shù)之間的關系。

2、AES加密算法優(yōu)化實現(xiàn)
(1)字節(jié)替換(SubBytes)
SubBytes主要通過兩步來完成,一步是在GF(28)中取乘法逆,另外一步是通過特別定義的GF(2)上的仿射作用。為了避免復雜的乘法運算,在FPGA上具體實現(xiàn)時,構(gòu)造了16*16B的置換表,通過查表完成了字節(jié)替換,節(jié)省了運算時間。
(2)行移變換(shiftrows)
ShiftRows與列混合運算相互影響,在多輪變換后,使密碼信息達到充分的混亂。行變換是在狀態(tài)的每個行間進行的,是狀態(tài)中的行按不同的偏移量進行循環(huán)左移運算。通過對每個字節(jié)的行移位實現(xiàn)該變換。
(3)列混合(MixColumns)
假設列混合運算輸入為a,輸出為b,加密的列混合運算可做如下表示:

式中所示的矩陣運算是伽羅華域上常數(shù)乘法運算。伽羅華域上乘以任何常數(shù)的乘法都可以通過反復的乘以02和異或運算來實現(xiàn)。將GF(28)域中的每一個元素與02的乘積存儲在一張16*16B查找表中,通過異或運算和查表即可實現(xiàn)列混合運算。
(4)密鑰加法(AddRoundKey)
AddRoundKey是將輪密鑰中的各個字節(jié)與狀態(tài)中的各個字節(jié)進行逐位異或運算,實現(xiàn)密碼和密鑰的混合。輪密鑰是由初始密鑰通過密鑰擴展得到的。
(5)密鑰擴展(KeyExpansion)
初始密鑰和擴展后的整個密鑰表可以看作是一個字(word)序列。密鑰擴展是針對字進行的,為此又引入了兩個對字進行處理的函數(shù):字替代(Subword)和字旋轉(zhuǎn)(RotWord)。字旋轉(zhuǎn)將字的4個字節(jié)循環(huán)右移一個單位。密鑰擴展還包括引入輪常數(shù)Rcon。字替換和引入輪常數(shù)均可使用查表法完成。字旋轉(zhuǎn)可以用簡單的交換字的順序?qū)崿F(xiàn)。
在FPGA的實現(xiàn)過程中,若不進行上述諸如查表法的優(yōu)化,將會造成資源占用過度,運行速率低下的情況。
二、面向空間應用的AES加密算法在FPGA上的實現(xiàn)與仿真
1、面向空間應用的AES加密算法在FPGA上的實現(xiàn)方案
下圖為面向空間應用的AES加密算法在FPGA上的實現(xiàn)框圖,其中明文有效標志和密鑰有效標志輸入給控制模塊,初始密鑰送給密鑰擴展模塊,明文輸入到初始變換模塊??刂颇K輸出加密完成標志,最終變換模塊輸出密文。其中粗箭頭為數(shù)據(jù)線,細箭頭為控制線。為滿足加密過程的時序要求,控制模塊對輸入的明文有效信號及密鑰有效信號進行控制。密鑰擴展模塊在不同輪數(shù)下產(chǎn)生的擴展密鑰分別送給初始變換模塊,輪變換模塊以及最終變換模塊。初始變換模塊對明文加了初始輪密鑰;輪變換模塊進行了四個變換步驟。最終變換模塊與輪變換模塊不同在于沒有進行混合列操作。

2、仿真結(jié)果
本設計采用VHDL語言,在Xilinx公司的一款FPGA上實現(xiàn)了AES加密算法。分別對AES-128、AES-192、AES-256加密算法實現(xiàn)進行仿真,在FPGA資源占用率、數(shù)據(jù)處理速率等方面進行了對比分析。
(1)仿真結(jié)果
下面幾個圖分別是AES-256、AES-192、AES-128的FPGA實現(xiàn)仿真結(jié)果,從圖中可以看出AES-256可以在15個時鐘周期內(nèi)完成,AES-192可以在13個周期實現(xiàn)加密算法,AES-128可以在12個時鐘周期內(nèi)實現(xiàn)加密算法。

(2)性能分析
在Xilinx公司的一款X2V系列FPGA上所占用的資源情況對比如下表所示。

根據(jù)密碼學理論,密鑰長度越長,其安全性能越好。AES-256占用硬件資源較AES-128、AES-192多,但AES-256可以提供最好的安全性。
三種加密算法占用的資源數(shù)相當,數(shù)據(jù)吞吐率隨著密鑰長度加長而變小。
本文對AES加密算法進行了研究,提出了面向空間應用的AES加密算法的FPGA實現(xiàn)方案。通過仿真分析,表明利用FPGA進行AES進行數(shù)據(jù)文件加密具有占用硬件資源較少,數(shù)據(jù)吞吐率高,安全性好的特點,門數(shù)在10萬左右的小型FPGA即可實現(xiàn)該加密算法??紤]到安全性,在實際應用中,AES-256加密算法是最適合的。
小知識之FPGA
FPGA(Field-Programmable Gate Array),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎上進一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點。










