湖南工學(xué)院電氣與信息工程學(xué)院 陳 超
高級(jí)加密標(biāo)準(zhǔn)AES(Advanced Encryption Standard)算法由于其安全性高的優(yōu)勢(shì)而應(yīng)用廣泛,再結(jié)合FPGA的優(yōu)勢(shì)可實(shí)現(xiàn)加密速度快,開發(fā)周期短且可通用性強(qiáng)的AES加密算法。多輪加密的每一輪采用復(fù)用的方式以節(jié)省資源,且通過狀態(tài)機(jī)控制加密過程。最后結(jié)合FPGA綜合仿真,資源消耗為9643,最高工作頻率為126.34MHz。
隨著通信技術(shù)及計(jì)算機(jī)的發(fā)展,人們有越來越多的信息需要通過通信設(shè)備來傳輸與交換,用戶對(duì)于數(shù)據(jù)傳輸?shù)陌踩栽絹碓街匾暎虼诵枰獙?duì)數(shù)據(jù)進(jìn)行加密傳輸來保證數(shù)據(jù)的安全性。而AES以其速度快、設(shè)計(jì)簡(jiǎn)單、安全性高、易維護(hù)等優(yōu)點(diǎn)在郵件加密、數(shù)字簽名、文檔加密中廣泛應(yīng)用。
AES算法是2001年由NIST(美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所)為取代DES而發(fā)布的新一代數(shù)據(jù)高級(jí)加密標(biāo)準(zhǔn)。AES-128算法的密鑰比DES-56的密鑰在破解的時(shí)間花費(fèi)上強(qiáng)1021倍。如果加解密采用同樣的密鑰會(huì)導(dǎo)致降低安全性。為了保證安全性,設(shè)計(jì)加解密密鑰可采用相關(guān)且不同的密鑰,即把加密模式的密鑰擴(kuò)展模塊的最后一輪子密鑰作為解密模式密鑰的初始密鑰,這樣就可以強(qiáng)化通信安全性,保密性以及出色的抗攻擊性。
AES算法是一種對(duì)稱密碼,且是屬于其中的一種分組密碼,其原理采用的是迭代分組密碼算法,它由輪變換函數(shù)經(jīng)過數(shù)次迭代變換而成。AES加密可用如下加密公式表示。
其中E表示加密函數(shù),K表示密鑰,P表示明文,C表示密文。
AES的密鑰長(zhǎng)度可分為128bit,192bit和256bit,而分組長(zhǎng)度固定為128bit。除了輪數(shù),這三種的加密過程相同。每種長(zhǎng)度對(duì)應(yīng)的變換輪數(shù)的關(guān)系如表1所示。
表1 AES算法的分組,密鑰及輪數(shù)關(guān)系
把加密數(shù)據(jù)排列成以字節(jié)為單位元素的4×4狀態(tài)矩陣,該矩陣中字節(jié)的排列順序?yàn)閺纳系较?,從左至右。加密的第一個(gè)步驟是待加密的明文與初始密鑰異或(輪密鑰加),然后根據(jù)表1的密鑰長(zhǎng)度進(jìn)行對(duì)應(yīng)的多輪變換。每一輪包含字節(jié)替換,行移位,列混淆,輪密鑰加四個(gè)過程。其中最后一輪需跳過列混淆。
AES解密是加密的逆過程,文中不再詳細(xì)闡述。圖1所示是AES加解密過程的結(jié)構(gòu)圖。
圖1 AES加解密執(zhí)行過程
由于大部分應(yīng)用采用AES-128,文中采用128bit來設(shè)計(jì),其整體實(shí)現(xiàn)結(jié)構(gòu)框圖如圖2所示,該設(shè)計(jì)的加密與解密是同一個(gè)模塊,通過mode輸入信號(hào)來控制加解密模式。該框架主要由加/解密模塊(Encrypt/Decrypt)、密鑰擴(kuò)展模塊(key_exp)、字節(jié)替換模塊(s_box)組成。其中加/解密模塊功能主要由狀態(tài)機(jī)控制,完成與字節(jié)替換/逆替換模塊的數(shù)據(jù)交互、行移位、列混淆運(yùn)算、輪密鑰加以及對(duì)密鑰擴(kuò)展模塊的控制。設(shè)計(jì)中為了節(jié)省I/O資源,128bit數(shù)據(jù)和128bit初始密鑰由32bit的data_in依次輸入,并通過k_or_d信號(hào)來區(qū)分?jǐn)?shù)據(jù)輸入還是密鑰輸入。輸入start信號(hào)為高表示輸入有效。同樣,輸出端亦為128bit密文由32bit端口依次輸出。加密數(shù)據(jù)流向?yàn)榻邮諗?shù)據(jù)后由加/解密模塊配合其他模塊進(jìn)行10輪迭代變換,最后一輪密鑰異或輸出即為密文。解密過程與其相同,把密文以相同的步驟作為數(shù)據(jù)輸入,同時(shí)設(shè)置mode=0,輸出即為明文。
圖2 設(shè)計(jì)實(shí)現(xiàn)框圖
AES采用的是密碼密鑰,不能在每一輪都是中相同的密鑰,需要根據(jù)初始密鑰去擴(kuò)展獲得每一輪需要的密鑰。十輪密鑰擴(kuò)展得到總長(zhǎng)度為W*Nb(Nr+1),其中W為密鑰矩陣每列的位數(shù),Nb分組長(zhǎng)度為4,Nr指加密輪數(shù)。矩陣的每一列密鑰元素可用Wi表示,其中i的所在范圍為0 ≤i<Nb(Nr+1)。擴(kuò)展子密鑰可由初始密鑰生成。
當(dāng)i能被4整除:
當(dāng)i不能被4整除:
其中:函數(shù)g()由三部分組成:字循環(huán)、字節(jié)替換和輪常量異或(函數(shù)g()可以增加密鑰拓展中的非線性,并且破壞AES算法的對(duì)稱性)。
(1)字循環(huán):密鑰W[i]中的4個(gè)字節(jié)循環(huán)左移一個(gè)字節(jié)。例如輸入[a0,a1,a2,a3]變換后為[a1,a2,a3,a0]。
(2)字節(jié)替換:將第一步的結(jié)果使用S盒進(jìn)行字節(jié)代換,與加密過程字節(jié)替換步驟相同。
(3)輪常量異或:將第二步的結(jié)果與輪常量Rcon[j]異或,j表示輪數(shù)。Rcon用查找表實(shí)現(xiàn),輪計(jì)數(shù)器kcnt作為查找地址。
字節(jié)替換是數(shù)據(jù)4×4狀態(tài)矩陣中,每個(gè)字節(jié)元素的高四位為S盒的行地址,低四位為列地址,用尋址后的值替換狀態(tài)矩陣的值。逆字節(jié)替換同理,只是需要查找逆S盒的行列地址即可。設(shè)計(jì)中采用查找表的方式進(jìn)行字節(jié)替換與逆字節(jié)替換操作。以下為4×4狀態(tài)矩陣的排列順序。
行移位是4×4狀態(tài)矩陣的行循環(huán)移位,第一行不變,第二行左移一個(gè)字節(jié),第二行左移兩個(gè)字節(jié),第三行左移三個(gè)字節(jié)。逆行移位為行移位反向操作,即向右循環(huán)移位即可。
列混淆運(yùn)算為位元變換,根據(jù)GF(28)有限域運(yùn)算規(guī)則,即將狀態(tài)矩陣左乘混淆矩陣,結(jié)果就是列混淆后的值。而逆列混淆運(yùn)算就是狀態(tài)矩陣左乘逆混淆矩陣。設(shè)計(jì)中的列混淆與逆列混淆采用函數(shù)的方法進(jìn)行運(yùn)算,一個(gè)時(shí)鐘周期出結(jié)果。部分代碼如下:
輪密鑰加易于實(shí)現(xiàn),只需狀態(tài)矩陣與密鑰矩陣相同的位置進(jìn)行異或運(yùn)算后,得到的就是下一輪迭代變換的起始狀態(tài)矩陣。
設(shè)計(jì)采用Verilog HDL對(duì)AES算法進(jìn)行設(shè)計(jì)以及驗(yàn)證。在十輪迭代加密、解密運(yùn)算后,得到的加密與解密結(jié)果分別如圖3、圖4所示。
圖3 AES加密數(shù)據(jù)仿真
圖4 AES解密數(shù)據(jù)仿真
表2、表3分別對(duì)應(yīng)圖3、圖4的加密和解密實(shí)例結(jié)果表。由實(shí)例數(shù)據(jù)測(cè)試結(jié)果可知,文中的AES算法設(shè)計(jì)在mode=1的加密模式下,輸入表2中的明文以及密鑰,可得到表2中的密文(如圖3所示);然后用密文作為輸入在mode=0的解密模式下,輸入表3中的密文以及密鑰,可得到表3中的明文(如圖4所示)。實(shí)驗(yàn)表明解密后的明文與加密前的明文相同。同時(shí)測(cè)試也用了多組數(shù)據(jù)進(jìn)行了設(shè)計(jì)驗(yàn)證,均證明了文中的設(shè)計(jì)可以對(duì)數(shù)據(jù)進(jìn)行正確的加密得到密文,密文也可以反過來解密出明文。
表2 AES測(cè)試加密數(shù)據(jù)實(shí)例
表3 AES測(cè)試解密數(shù)據(jù)實(shí)例
文中設(shè)計(jì)軟件基于Quartus Ⅱ13.1,仿真軟件為ModelSim 10.1d,芯片為Cyclone Ⅳ系列EP4CE10E22C8進(jìn)行驗(yàn)證,最終設(shè)計(jì)綜合出來可實(shí)現(xiàn)工作頻率最高為126.34MHz,邏輯資源消耗為9643。再通過對(duì)比占用的邏輯單元數(shù),可將中文設(shè)計(jì)與其他文獻(xiàn)的方案做比較可得到表4,可說明本方案較其他方案相比,運(yùn)行速度更快,吞吐量更高;但同時(shí)占用邏輯單元數(shù)在對(duì)比中處于適中位置,不占很大優(yōu)勢(shì),這是用面積換取速度的結(jié)果導(dǎo)致。
表4 設(shè)計(jì)與其他文獻(xiàn)方案對(duì)比
文中分析了AES算法的原理以及設(shè)計(jì)的實(shí)現(xiàn)方案,實(shí)現(xiàn)的關(guān)鍵在于狀態(tài)機(jī)的控制;再通過劃分各個(gè)模塊來分析每個(gè)模塊的實(shí)現(xiàn)方法;最后實(shí)例測(cè)試采用文中的方案而實(shí)現(xiàn)的設(shè)計(jì)模塊以及設(shè)計(jì)的性能分析。結(jié)果表明該設(shè)計(jì)方案能滿足設(shè)計(jì)要求。