国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

AES加密算法的FPGA優(yōu)化實現

2014-12-31 03:42:54彭景斌譚敏生
電腦知識與技術 2014年35期

彭景斌 譚敏生

摘要:詳細闡述了AES算法的硬件語言實現過程,并提出了一種優(yōu)化方法,在對AES算法優(yōu)化的實現過程中,將密鑰擴展模塊與輪加模塊合并實現,并結合SDK平臺的控制來完成加密算法,最后,進行了FPGA硬件實現與資源利用對比實驗,驗證了算法的正確性和優(yōu)越性。

關鍵詞: AES算法; FPGA實現;SDK

中圖分類號: TP309.7 文獻標識碼:A 文章編號: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

通常某一個加密算法公布開始,研究人員對其的研究工作按時間劃分可大致分為三個階段[1]:

第一階段主要是對各個算法的性能測試和分析;

第二階段主要是對算法的應用模式設計和研究;

第三階段主要是對算法的應用場合和實現平臺以及算法安全性進行研究。

AES(Advanced Encryption Standard)于2001年提出,用于取代早期DES加密算法,并逐漸成為對稱密碼算法中最流行的一種[2]。目前國內外對于AES算法的研究主要集中在算法的分析和實現兩個領域,特別是對于算法的實現方式的研究比較多。

本文正是從硬件實現的角度出發(fā),基于對AES算法中各子模塊的硬件實現及優(yōu)化,從而最終實現硬件資源利用最優(yōu)化的問題展開研究,并作詳細的闡述。

1 AES算法簡介

AES(The Advanced Encryption Standard)是美國國家標準與技術研究所用于加密電子數據的規(guī)范。它被預期能成為人們公認的加密包括金融、電信和政府數字信息的方法。

AES 是一個新的可以用于保護電子數據的加密算法。AES 是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192 和 256 位密鑰,并且用 128 位(16字節(jié))分組加密和解密數據。與公共密鑰密碼使用密鑰對不同,對稱密鑰密碼使用相同的密鑰加密和解密數據。通過分組密碼返回的加密數據的位數與輸入數據相同。迭代加密使用一個循環(huán)結構,在該循環(huán)中重復置換(permutations )和替換(substitutions)輸入數據。AES 算法是基于置換和代替的。置換是數據的重新排列,而代替是用一個單元數據替換另一個。AES 使用了幾種不同的技術來實現置換和替換。

本文設計實現的密鑰長度為128比特。AES加密有很多輪的重復和變換,大致步驟如下:

1)密鑰擴展(KeyExpansion);

2)初始輪(Initial Round),加密原文與密鑰直接異或加;

3)重復輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey;

4)最終輪(Final Round),最終輪沒有MixColumns。

2 AES算法具體實現

從AES算法的實現步驟可知,主要是四個模塊的實現:字節(jié)替換(SubBytes),行移位(ShiftRows),列混合(MixColumns),密鑰擴展(KeyExpansion)。該文分別采用兩種不同的方法來實現AES加密,一種按照算法本身的定義進行硬件實現,另一種方法是在算法硬件實現的基礎上將密鑰擴展與輪加(AddRoundKey)兩個部分合并,并通過在SDK平臺下對模塊進行控制,來完成加密。下面分別介紹兩種方法中主要模塊的具體實現。

1) 字節(jié)替換(SubBytes)

字節(jié)替換是作用在狀態(tài)中每個字節(jié)上的一種非線性字節(jié)轉換,通過從AES算法給定的S-Box(16行16列的矩陣)中進行映射。如輸入矩陣的任一元素A=00000000時,將其看作一個8位的二進制數,前四位X=0,后四位Y=0,從給定的S-Box中找出S[A]=S[X,Y]=S[0,0]的值進行替換。如:S[00000000]=S[X,Y]=S[0,0]= 01100011。

sbox module具體實現:

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是一個字節(jié)換位。它將狀態(tài)中的行按照不同的偏移量進行循環(huán)移位,而這個偏移量也是根據加密塊長Nb的不同而選擇的。偏移量大小與加密塊長Nb的關系[3]如表1所示。

表1 偏移量大小與Nb的關系

[Nb\&C1\&C2\&C3\&4\&1\&2\&3\&6\&1\&2\&3\&8\&1\&3\&3\&]

shift module具體實現:

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)

在列混合變換中,給定一個狀態(tài),逐列進行變換。它將狀態(tài)矩陣中的每個列視為系數在[GF(28)]上的一個次數小于4的多項式。并與一固定的多項式c(x)進行模x4+1相乘。其中c(x)為模x4+1可逆的多項式(系數為16進制):

[c(x)={03}x3+{01}x2+{01}x+{02}]

列混合運算可以表示為[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具體實現:

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) 密鑰擴展(KeyExpansion)

在加密算法的十輪變換過程中,每輪變換結果都將與一輪新的密鑰進行異或運算,該文稱之為擴展密鑰。擴展密鑰是按矩陣的列進行分組的,每四列組成一輪擴展密鑰進行輪變換。密鑰擴展將在變換中產生十一輪擴展密鑰,為方便下載到實驗板驗證,在實現時將這個過程與密鑰輪加合并為aes頂層模塊,再在SDK環(huán)境下實現對模塊的循環(huán)調用完成整個加密。

Aes module 實現關鍵代碼:

shift s(.aesin(temp), .bb(aa));

mix m(.bb(aa), .out(s_mix));//每輪加密的結果

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}};//擴展密鑰

assign result=s_mix^ekey;//密鑰加

3 基于EDK的FPGA實現平臺及驗證

嵌入式開發(fā)套件(EDK)是用于設計嵌入式可編程系統(tǒng)的全面解決方案。該套件包括嵌入式軟件工具(Platform Studio)以及嵌入式IBM PowerPC硬件處理器核和/或Xilinx MicroBlaze軟處理器核進行Xilinx平臺FPGA設計時所需的技術文檔和IP。EDK自帶了許多工具和IP,可以用來設計完整的嵌入式處理器系統(tǒng),主要包括Xilinx 平臺工作室XPS和軟件開發(fā)套件SDK。

本設計選用的FPGA器件是XILINX VIRTEX 5 XC5VLX50T ,首先,完成AES加密算法的硬件描述;然后利用Modelsim仿真,驗證通過;最后,在EDK 13.2平臺下完成硬件平臺的搭建和下載,并通過SDK13.2驗證其正確性。

實驗中用于加密驗證的數據如下:

原文(state):3243f6a8 885a308d 313198a2 e0370734

密鑰(key): 2b7e1516 28aed2a6 abf71588 09cf4f3c

密文(result):3925841d 2dc09fb dc118597 196a0b32

利用Modelsim 仿真的結果如圖1所示:

通過添加自定義IP核,并下載至FPGA運行,在超級終端顯示的輸出結果如圖2所示,由圖中數據,可得出代碼描述與實現結果正確。

為了驗證本文采用的AES實現方法在資源利用方面的情況,實驗中采用兩種方式完成對AES的下載,一種是按照算法各模塊原有的調用順序,另一種是按照本文所使用的優(yōu)化方法,兩種方式的主要邏輯資源消耗情況對比,如圖3所示。由圖中數據比較可知,第二種方式實現所需的資源數更少,與同類加密算法實現所需的資源數對比有一定的優(yōu)勢,進一步驗證了本文提出的AES密碼算法優(yōu)化的優(yōu)越性,更能有效滿足較小芯片面積的應用需求。

4 總結

隨著時代與技術的進步,在信息安全領域也同樣需要有相應的改進,以滿足用戶的需求。目前,軟件和硬件同時作為實現AES的有效手段而在不同的領域中存在,但以前可以采用軟件實現的加密技術,如今已遠遠不能滿足要求,硬件實現方案則表現出巨大的優(yōu)勢。因此本文設計的基于FPGA實現的AES加密算法正是順應當前信息產業(yè)發(fā)展的需要。

未來的工作將在已有工作基礎上繼續(xù)針對于低功耗和抗攻擊兩個方面進行,從而使AES密碼算法在小型芯片上的使用能夠達到國際標準要求的抗攻擊安全性。

參考文獻:

[1] 黃卡爾.AES加密算法的FPGA實現[M].太原:中北大學, 2011.

[2] Daemen J, Rijmen V. 高級加密標準(AES)算法—Rijndael的設計[M].谷大武, 徐勝波, 譯. 北京: 清華大學出版社, 2003.

[3] 曹進才. 基于FPGA的AES算法快速小面積實現[D].天津:天津大學, 2008.

蒙自县| 西峡县| 铜川市| 时尚| 新津县| 泗洪县| 马边| 济源市| 辛集市| 南漳县| 张家川| 屏南县| 彭州市| 吉木乃县| 绵竹市| 湟中县| 兴和县| 娱乐| 北辰区| 虎林市| 乌审旗| 灵寿县| 广西| 青海省| 灵川县| 克东县| 镇宁| 昭平县| 伊金霍洛旗| 安吉县| 泸州市| 旅游| 珲春市| 清水县| 灵璧县| 汉源县| 镇雄县| 纳雍县| 济源市| 仙游县| 蒙阴县|