彭景斌 譚敏生
摘要:詳細(xì)闡述了AES算法的硬件語(yǔ)言實(shí)現(xiàn)過程,并提出了一種優(yōu)化方法,在對(duì)AES算法優(yōu)化的實(shí)現(xiàn)過程中,將密鑰擴(kuò)展模塊與輪加模塊合并實(shí)現(xiàn),并結(jié)合SDK平臺(tái)的控制來(lái)完成加密算法,最后,進(jìn)行了FPGA硬件實(shí)現(xiàn)與資源利用對(duì)比實(shí)驗(yàn),驗(yàn)證了算法的正確性和優(yōu)越性。
關(guān)鍵詞: AES算法; FPGA實(shí)現(xiàn);SDK
中圖分類號(hào): TP309.7 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)35-8434-03
FPGA Optimal Implementation of AES
PENG Jing-bin 1,TAN Min-sheng 1
(1.Schoole of Computer Science and Technology, Nanhua University, Hengyang 421002;2.The central Blood Station of Hengyang, Hengyang 421002,China)
Abstract: The process of AES algorithm was described in detail with hardware description language, and a kind of optimal method was proposed. During the implemental process of AES algorithm, merging the KeyExpansion module and the AddRoundKey module,and combining with the control of the SDK platform to complete the encryption algorithm; finally, the implementation and superiority was verified, the resource was contrasted by FPGA.
Key words: Advanced Encryption Standard Algorithm; FPGA Implementation; SDK
通常某一個(gè)加密算法公布開始,研究人員對(duì)其的研究工作按時(shí)間劃分可大致分為三個(gè)階段[1]:
第一階段主要是對(duì)各個(gè)算法的性能測(cè)試和分析;
第二階段主要是對(duì)算法的應(yīng)用模式設(shè)計(jì)和研究;
第三階段主要是對(duì)算法的應(yīng)用場(chǎng)合和實(shí)現(xiàn)平臺(tái)以及算法安全性進(jìn)行研究。
AES(Advanced Encryption Standard)于2001年提出,用于取代早期DES加密算法,并逐漸成為對(duì)稱密碼算法中最流行的一種[2]。目前國(guó)內(nèi)外對(duì)于AES算法的研究主要集中在算法的分析和實(shí)現(xiàn)兩個(gè)領(lǐng)域,特別是對(duì)于算法的實(shí)現(xiàn)方式的研究比較多。
本文正是從硬件實(shí)現(xiàn)的角度出發(fā),基于對(duì)AES算法中各子模塊的硬件實(shí)現(xiàn)及優(yōu)化,從而最終實(shí)現(xiàn)硬件資源利用最優(yōu)化的問題展開研究,并作詳細(xì)的闡述。
1 AES算法簡(jiǎn)介
AES(The Advanced Encryption Standard)是美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究所用于加密電子數(shù)據(jù)的規(guī)范。它被預(yù)期能成為人們公認(rèn)的加密包括金融、電信和政府?dāng)?shù)字信息的方法。
AES 是一個(gè)新的可以用于保護(hù)電子數(shù)據(jù)的加密算法。AES 是一個(gè)迭代的、對(duì)稱密鑰分組的密碼,它可以使用128、192 和 256 位密鑰,并且用 128 位(16字節(jié))分組加密和解密數(shù)據(jù)。與公共密鑰密碼使用密鑰對(duì)不同,對(duì)稱密鑰密碼使用相同的密鑰加密和解密數(shù)據(jù)。通過分組密碼返回的加密數(shù)據(jù)的位數(shù)與輸入數(shù)據(jù)相同。迭代加密使用一個(gè)循環(huán)結(jié)構(gòu),在該循環(huán)中重復(fù)置換(permutations )和替換(substitutions)輸入數(shù)據(jù)。AES 算法是基于置換和代替的。置換是數(shù)據(jù)的重新排列,而代替是用一個(gè)單元數(shù)據(jù)替換另一個(gè)。AES 使用了幾種不同的技術(shù)來(lái)實(shí)現(xiàn)置換和替換。
本文設(shè)計(jì)實(shí)現(xiàn)的密鑰長(zhǎng)度為128比特。AES加密有很多輪的重復(fù)和變換,大致步驟如下:
1)密鑰擴(kuò)展(KeyExpansion);
2)初始輪(Initial Round),加密原文與密鑰直接異或加;
3)重復(fù)輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey;
4)最終輪(Final Round),最終輪沒有MixColumns。
2 AES算法具體實(shí)現(xiàn)
從AES算法的實(shí)現(xiàn)步驟可知,主要是四個(gè)模塊的實(shí)現(xiàn):字節(jié)替換(SubBytes),行移位(ShiftRows),列混合(MixColumns),密鑰擴(kuò)展(KeyExpansion)。該文分別采用兩種不同的方法來(lái)實(shí)現(xiàn)AES加密,一種按照算法本身的定義進(jìn)行硬件實(shí)現(xiàn),另一種方法是在算法硬件實(shí)現(xiàn)的基礎(chǔ)上將密鑰擴(kuò)展與輪加(AddRoundKey)兩個(gè)部分合并,并通過在SDK平臺(tái)下對(duì)模塊進(jìn)行控制,來(lái)完成加密。下面分別介紹兩種方法中主要模塊的具體實(shí)現(xiàn)。
1) 字節(jié)替換(SubBytes)
字節(jié)替換是作用在狀態(tài)中每個(gè)字節(jié)上的一種非線性字節(jié)轉(zhuǎn)換,通過從AES算法給定的S-Box(16行16列的矩陣)中進(jìn)行映射。如輸入矩陣的任一元素A=00000000時(shí),將其看作一個(gè)8位的二進(jìn)制數(shù),前四位X=0,后四位Y=0,從給定的S-Box中找出S[A]=S[X,Y]=S[0,0]的值進(jìn)行替換。如:S[00000000]=S[X,Y]=S[0,0]= 01100011。
sbox module具體實(shí)現(xiàn):
always@(state)
case(state)
8'h00:dout=8'h63;
8'h01:dout=8'h7c;
…
8'hfe:dout=8'hbb;
8'hff:dout=8'h16;
endcase
2)行移位(ShiftRows)
ShiftRow是一個(gè)字節(jié)換位。它將狀態(tài)中的行按照不同的偏移量進(jìn)行循環(huán)移位,而這個(gè)偏移量也是根據(jù)加密塊長(zhǎng)Nb的不同而選擇的。偏移量大小與加密塊長(zhǎng)Nb的關(guān)系[3]如表1所示。
表1 偏移量大小與Nb的關(guān)系
[Nb\&C1\&C2\&C3\&4\&1\&2\&3\&6\&1\&2\&3\&8\&1\&3\&3\&]
shift module具體實(shí)現(xiàn):
sbox u0 (.state (aesin[1:8] ), .dout (aa[1:8]));
…
sbox uf (.state (aesin[121:128]),.dout(aa[121:128]));
assign { bb[1:8],bb[33:40],bb[65:72],bb[97:104]}={ aa[1:8],aa[33:40],aa[65:72],aa[97:104]};
…
assign { bb[25:32],bb[57:64],bb[89:96],bb[121:128]}={ aa[121:128],aa[25:32],aa[57:64],aa[89:96]};
3) 列混合(MixColumns)
在列混合變換中,給定一個(gè)狀態(tài),逐列進(jìn)行變換。它將狀態(tài)矩陣中的每個(gè)列視為系數(shù)在[GF(28)]上的一個(gè)次數(shù)小于4的多項(xiàng)式。并與一固定的多項(xiàng)式c(x)進(jìn)行模x4+1相乘。其中c(x)為模x4+1可逆的多項(xiàng)式(系數(shù)為16進(jìn)制):
[c(x)={03}x3+{01}x2+{01}x+{02}]
列混合運(yùn)算可以表示為[GF(28)]上的可逆線性變換,即:
S0i={02}S0i⊕{03}S1i⊕S2i⊕S3i
S1i=S0i⊕{02}S1i⊕{03}S2i⊕S3i
S2i=S0i⊕S1i⊕{02}S2i⊕{03}S3i
S3i={03}S0i⊕S1i⊕S2i⊕{02}S3i
mix module具體實(shí)現(xiàn):
assign
out[1:8]=((bb[1]==1)?(bb[1:8]<<1)^8'h1b:(bb[1:8]<<1))^((bb[9]==1)?(bb[9:16]<<1)^bb[9:16]^8'h1b:(bb[9:16]<<1)^bb[9:16])^bb[17:24]^bb[25:32];
assign
out[33:40]=((bb[33]==1)?(bb[33:40]<<1)^8'h1b:(bb[33:40]<<1))^((bb[41]==1)?(bb[41:48]<<1)^bb[41:48]^8'h1b:(bb[41:48]<<1)^bb[41:48])^bb[49:56]^bb[57:64];
…
assign out[89:96]=((bb[65]==1)?(bb[65:72]<<1)^bb[65:72]^8'h1b:(bb[65:72]<<1)^bb[65:72])^bb[73:80]^bb[81:88]^((bb[89]==1)?(bb[89:96]<<1)^8'h1b:(bb[89:96]<<1));
assign out[121:128]=((bb[97]==1)?(bb[97:104]<<1)^bb[97:104]^8'h1b:(bb[97:104]<<1)^bb[97:104])^bb[105:112]^bb[113:120]^((bb[121]==1)?(bb[121:128]<<1)^8'h1b:(bb[121:128]<<1));
4) 密鑰擴(kuò)展(KeyExpansion)
在加密算法的十輪變換過程中,每輪變換結(jié)果都將與一輪新的密鑰進(jìn)行異或運(yùn)算,該文稱之為擴(kuò)展密鑰。擴(kuò)展密鑰是按矩陣的列進(jìn)行分組的,每四列組成一輪擴(kuò)展密鑰進(jìn)行輪變換。密鑰擴(kuò)展將在變換中產(chǎn)生十一輪擴(kuò)展密鑰,為方便下載到實(shí)驗(yàn)板驗(yàn)證,在實(shí)現(xiàn)時(shí)將這個(gè)過程與密鑰輪加合并為aes頂層模塊,再在SDK環(huán)境下實(shí)現(xiàn)對(duì)模塊的循環(huán)調(diào)用完成整個(gè)加密。
Aes module 實(shí)現(xiàn)關(guān)鍵代碼:
shift s(.aesin(temp), .bb(aa));
mix m(.bb(aa), .out(s_mix));//每輪加密的結(jié)果
Assign ekey={{key[1:32] ^sub^rcon},{key[1:32]^key[33:64]^sub^rcon},
{key[1:32]^key[65:96]^key[33:64]^sub^rcon},
{key[1:32]^key[97:128]^key[65:96]^key[33:64]^sub^rcon}};//擴(kuò)展密鑰
assign result=s_mix^ekey;//密鑰加
3 基于EDK的FPGA實(shí)現(xiàn)平臺(tái)及驗(yàn)證
嵌入式開發(fā)套件(EDK)是用于設(shè)計(jì)嵌入式可編程系統(tǒng)的全面解決方案。該套件包括嵌入式軟件工具(Platform Studio)以及嵌入式IBM PowerPC硬件處理器核和/或Xilinx MicroBlaze軟處理器核進(jìn)行Xilinx平臺(tái)FPGA設(shè)計(jì)時(shí)所需的技術(shù)文檔和IP。EDK自帶了許多工具和IP,可以用來(lái)設(shè)計(jì)完整的嵌入式處理器系統(tǒng),主要包括Xilinx 平臺(tái)工作室XPS和軟件開發(fā)套件SDK。
本設(shè)計(jì)選用的FPGA器件是XILINX VIRTEX 5 XC5VLX50T ,首先,完成AES加密算法的硬件描述;然后利用Modelsim仿真,驗(yàn)證通過;最后,在EDK 13.2平臺(tái)下完成硬件平臺(tái)的搭建和下載,并通過SDK13.2驗(yàn)證其正確性。
實(shí)驗(yàn)中用于加密驗(yàn)證的數(shù)據(jù)如下:
原文(state):3243f6a8 885a308d 313198a2 e0370734
密鑰(key): 2b7e1516 28aed2a6 abf71588 09cf4f3c
密文(result):3925841d 2dc09fb dc118597 196a0b32
利用Modelsim 仿真的結(jié)果如圖1所示:
通過添加自定義IP核,并下載至FPGA運(yùn)行,在超級(jí)終端顯示的輸出結(jié)果如圖2所示,由圖中數(shù)據(jù),可得出代碼描述與實(shí)現(xiàn)結(jié)果正確。
為了驗(yàn)證本文采用的AES實(shí)現(xiàn)方法在資源利用方面的情況,實(shí)驗(yàn)中采用兩種方式完成對(duì)AES的下載,一種是按照算法各模塊原有的調(diào)用順序,另一種是按照本文所使用的優(yōu)化方法,兩種方式的主要邏輯資源消耗情況對(duì)比,如圖3所示。由圖中數(shù)據(jù)比較可知,第二種方式實(shí)現(xiàn)所需的資源數(shù)更少,與同類加密算法實(shí)現(xiàn)所需的資源數(shù)對(duì)比有一定的優(yōu)勢(shì),進(jìn)一步驗(yàn)證了本文提出的AES密碼算法優(yōu)化的優(yōu)越性,更能有效滿足較小芯片面積的應(yīng)用需求。
4 總結(jié)
隨著時(shí)代與技術(shù)的進(jìn)步,在信息安全領(lǐng)域也同樣需要有相應(yīng)的改進(jìn),以滿足用戶的需求。目前,軟件和硬件同時(shí)作為實(shí)現(xiàn)AES的有效手段而在不同的領(lǐng)域中存在,但以前可以采用軟件實(shí)現(xiàn)的加密技術(shù),如今已遠(yuǎn)遠(yuǎn)不能滿足要求,硬件實(shí)現(xiàn)方案則表現(xiàn)出巨大的優(yōu)勢(shì)。因此本文設(shè)計(jì)的基于FPGA實(shí)現(xiàn)的AES加密算法正是順應(yīng)當(dāng)前信息產(chǎn)業(yè)發(fā)展的需要。
未來(lái)的工作將在已有工作基礎(chǔ)上繼續(xù)針對(duì)于低功耗和抗攻擊兩個(gè)方面進(jìn)行,從而使AES密碼算法在小型芯片上的使用能夠達(dá)到國(guó)際標(biāo)準(zhǔn)要求的抗攻擊安全性。
參考文獻(xiàn):
[1] 黃卡爾.AES加密算法的FPGA實(shí)現(xiàn)[M].太原:中北大學(xué), 2011.
[2] Daemen J, Rijmen V. 高級(jí)加密標(biāo)準(zhǔn)(AES)算法—Rijndael的設(shè)計(jì)[M].谷大武, 徐勝波, 譯. 北京: 清華大學(xué)出版社, 2003.
[3] 曹進(jìn)才. 基于FPGA的AES算法快速小面積實(shí)現(xiàn)[D].天津:天津大學(xué), 2008.