《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > AES算法的可配置硬件結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn)
AES算法的可配置硬件結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn)
賈 旭1, 李 興2
(1. 66083部隊(duì), 北京 102488; 2. 65571部隊(duì), 吉林 四平 136000)
摘要: 在分析AES算法的基礎(chǔ)上,,介紹了該算法各模塊的設(shè)計(jì)實(shí)現(xiàn)方法,,并將加解密運(yùn)算結(jié)構(gòu)設(shè)計(jì)為1個(gè)統(tǒng)一的結(jié)構(gòu)。通過對(duì)密鑰生成算法的分析,,將3種密鑰長度的密鑰生成算法進(jìn)行了可配置設(shè)計(jì),,使該設(shè)計(jì)能夠?qū)崿F(xiàn)加解密功能,。該設(shè)計(jì)通過了FPGA仿真驗(yàn)證,與傳統(tǒng)設(shè)計(jì)方案相比大大減小了硬件資源的消耗,。
Abstract:
Key words :

摘 要: 在分析AES算法的基礎(chǔ)上,,介紹了該算法各模塊的設(shè)計(jì)實(shí)現(xiàn)方法,并將加解密運(yùn)算結(jié)構(gòu)設(shè)計(jì)為1個(gè)統(tǒng)一的結(jié)構(gòu),。通過對(duì)密鑰生成算法的分析,,將3種密鑰長度的密鑰生成算法進(jìn)行了可配置設(shè)計(jì),使該設(shè)計(jì)能夠?qū)崿F(xiàn)加解密功能,。該設(shè)計(jì)通過了FPGA仿真驗(yàn)證,,與傳統(tǒng)設(shè)計(jì)方案相比大大減小了硬件資源的消耗。
關(guān)鍵詞: 高級(jí)加密標(biāo)準(zhǔn),; 統(tǒng)一加解密結(jié)構(gòu),; 可配置密鑰生成結(jié)構(gòu); 現(xiàn)場可編程門陣列

    在信息安全領(lǐng)域,,數(shù)據(jù)加密是一種常用且行之有效的方法,。高級(jí)加密標(biāo)準(zhǔn)AES[1]算法設(shè)計(jì)簡單,便于硬件實(shí)現(xiàn),,是新一代的主流對(duì)稱加密算法,。相對(duì)于軟件實(shí)現(xiàn),硬件實(shí)現(xiàn)加密算法安全性好,、計(jì)算速度快,。本文基于FPGA提出了一種AES算法的可配置設(shè)計(jì)方法,對(duì)數(shù)據(jù)分組長度為128 bit,,密鑰長度為128 bit,、192 bit和256 bit的加解密運(yùn)算進(jìn)行了可配置結(jié)構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)。
1 AES算法介紹
 AES為迭代分組密碼算法,,對(duì)待加密的明文先分組后再加密,。明文長度和密鑰長度均可以為128 bit、192 bit和256 bit,。根據(jù)明文長度及密鑰長度的不同組合,,加密的輪數(shù)可以不同[1]。AES算法由加密,、解密算法和密鑰擴(kuò)展算法3個(gè)部分組成,。
1.1 加/解密算法
 加密算法的每一輪由4個(gè)變換組成,,依次為字節(jié)代替、行移位,、列混合以及輪密鑰加,。最后一輪變換與其他輪略有不同,主要是少了列混合變換,。解密算法與加密算法相反,,每一輪的4個(gè)變換為相應(yīng)加密變換的逆變換,依次為逆字節(jié)替代變換,、逆行移位變換,、逆列混合變換、逆輪密鑰加,。加解密算法所用子密鑰相同,,只是使用的順序剛好相反。
1.2 密鑰擴(kuò)展算法
    圈子密鑰是通過密鑰擴(kuò)展算法從初始密鑰中獲得的,,其長度等于分組長度,。AES的密鑰擴(kuò)展算法由密鑰擴(kuò)展和密鑰選取兩部分構(gòu)成。
    初始密鑰經(jīng)密鑰擴(kuò)展過程產(chǎn)生32Nb(Nr+1) bit的擴(kuò)展密鑰,,共包含Nb(Nr+1)=t個(gè)4字節(jié)的密鑰字(其中Nr代表迭代輪數(shù),,Nb代表數(shù)據(jù)分組數(shù),Nk代表密鑰分組數(shù),,數(shù)據(jù)和密鑰每個(gè)分組為32  bit),。擴(kuò)展后得到的全部密鑰字為:w0 w1…wt-1,前Nk個(gè)密鑰字直接由外部密鑰獲得,,后續(xù)密鑰字根據(jù)初始密鑰的長度分為2種情況得到。當(dāng)密鑰長度為128  bit或192  bit時(shí),,后續(xù)密鑰字wi等于其前1個(gè)字wi-1與Nk個(gè)位置之前的字wi-Nk的“異或”,。對(duì)于Nk的整數(shù)倍位置的字,在“異或”之前,,要對(duì)wi-1進(jìn)行1次G變換,。G變換的步驟為先進(jìn)行1次字節(jié)循環(huán)移位,然后再做1次字節(jié)替代變換,,最后再“異或”1個(gè)輪常數(shù),。當(dāng)密鑰長度為256位時(shí),如果Nk=8且i-4是Nk的整數(shù)倍,,則“異或”之前對(duì)wi-1要做1次字節(jié)替代變換,。
2 AES算法各模塊的設(shè)計(jì)
2.1 S盒的設(shè)計(jì)

    字節(jié)替代變換是關(guān)于字節(jié)的非線性變換,它將狀態(tài)中每1個(gè)字節(jié)非線性地變換為另1個(gè)字節(jié),,替代(S盒)是可逆的,。S盒的傳統(tǒng)設(shè)計(jì)方法是使用VHDL語言中的CASE語句進(jìn)行描述,,但這樣實(shí)現(xiàn)的S盒將占用大量的邏輯資源,且速度較低,,F(xiàn)PGA內(nèi)部的存儲(chǔ)器資源得不到充分利用,。為了充分利用FPGA芯片內(nèi)部的存儲(chǔ)器資源,提高運(yùn)行速度,,可將替代的內(nèi)容存儲(chǔ)到FPGA內(nèi)部的存儲(chǔ)器中,,根據(jù)輸入字節(jié)的數(shù)值進(jìn)行快速的查表操作。即把輸入的8 bit待處理數(shù)據(jù)作為地址,,對(duì)應(yīng)的地址空間中存放字節(jié)替代后輸出的8 bit數(shù)據(jù),。對(duì)于逆S盒,可以用同樣的方法來實(shí)現(xiàn),。
2.2 行移位的設(shè)計(jì)
    行移位是以字節(jié)為單位進(jìn)行的循環(huán)移位,。由于移位位數(shù)是固定的,故可采用直接連線的方式來實(shí)現(xiàn),。這樣只會(huì)占用連線資源,,時(shí)間僅為線上傳輸延遲,速度非???。對(duì)于逆行移位,可以采用同樣的方法來實(shí)現(xiàn),。
2.3 列混合的設(shè)計(jì)
    由AES列混合變換的原理可知,,列混合變換就是輸入狀態(tài)矩陣與1個(gè)系數(shù)矩陣相乘,此系數(shù)矩陣中的元素有3種,,分別為16進(jìn)制數(shù)01,、02、03,。由參考文獻(xiàn)[2]可知,,可以利用xf(x)算法對(duì)其進(jìn)行快速實(shí)現(xiàn)。逆列混合變換的原理類似,,其系數(shù)矩陣中的元素有4種,,分別為16進(jìn)制數(shù)09、0e,、0b,、0d。同樣可利用xf(x)算法對(duì)其進(jìn)行實(shí)現(xiàn),,只是乘數(shù)較大,,需多次使用xf(x)算法,因此逆列混合較之列混合在資源消耗和運(yùn)算時(shí)間上都有所增加,。
2.4 密鑰加的設(shè)計(jì)
    由于本設(shè)計(jì)采用128 bit的數(shù)據(jù)分組長度,,所以密鑰加的設(shè)計(jì)是將2個(gè)128 bit數(shù)作“異或”運(yùn)算,。因?yàn)?ldquo;異或”的逆運(yùn)算也為“異或”,所以解密變換的密鑰加也為2個(gè)128 bit數(shù)的“異或”,。
3 加/解密運(yùn)算的統(tǒng)一結(jié)構(gòu)設(shè)計(jì)
    AES算法加/解密運(yùn)算過程的相似性是進(jìn)行統(tǒng)一結(jié)構(gòu)設(shè)計(jì)的基礎(chǔ),。通過分析可知,加/解密運(yùn)算的變換環(huán)節(jié)也存在相同或相似性,,如S盒變換,、行移位變換、密鑰加以及密鑰生成,,這些都可作為統(tǒng)一結(jié)構(gòu)設(shè)計(jì)的組件,。
    S盒變換是該算法硬件實(shí)現(xiàn)時(shí)最重要的環(huán)節(jié),其所占資源在整個(gè)算法中的比重很大,,對(duì)于S盒和逆S盒,,它們的輸入輸出端口都為8進(jìn)8出,占用的存儲(chǔ)資源相同,,不同的只是存儲(chǔ)空間中的內(nèi)容,。因此在設(shè)計(jì)中,可讓加/解密共用同一個(gè)S盒模塊,,只是在實(shí)現(xiàn)加/解密運(yùn)算時(shí),,對(duì)S盒中的存儲(chǔ)內(nèi)容進(jìn)行重新配置即可。S盒的重用可使消耗的硬件資源大為減少,。
    對(duì)于行移位和逆行移位,,其實(shí)現(xiàn)僅需占用連線資源,所以兩者的單獨(dú)設(shè)計(jì)不會(huì)造成邏輯資源消耗的增加,。且行移位只是以字節(jié)為單位進(jìn)行移位,,與字節(jié)的值無關(guān)。而S盒變換只是改變字節(jié)的值,與字節(jié)的位置無關(guān),。所以兩者的執(zhí)行順序可以交換,。在本設(shè)計(jì)中,為了使加/解密流程更趨于相同,,把解密的逆S盒與逆行移位的位置進(jìn)行了交換。
    對(duì)于“異或”運(yùn)算,,因其逆運(yùn)算就是它本身,,所以在加/解密過程中,2種密鑰加運(yùn)算可以用同一硬件資源來實(shí)現(xiàn),。
    在增加了相應(yīng)的控制信號(hào)和選擇器之后,,加/解密算法可歸結(jié)為同一個(gè)計(jì)算流程,如圖1所示,。


    由于加/解密被歸結(jié)為同一個(gè)計(jì)算流程,,因此在實(shí)現(xiàn)時(shí),,兩者可共用相同的控制資源。相對(duì)于單純的加密結(jié)構(gòu),,本設(shè)計(jì)僅增加了逆列混合單元和部分控制資源即實(shí)現(xiàn)了加/解密運(yùn)算的雙重功能,。
4 密鑰擴(kuò)展算法的可配置設(shè)計(jì)
    由算法原理可知,128 bit,,192 bit及256 bit 3種密鑰長度的密鑰生成算法各不相同,。128 bit密鑰長度的密鑰生成算法的每1圈流程[3]如圖2所示。192 bit密鑰長度的密鑰生成算法與之類似,,只須把每輪的輸入輸出改為6路即可,。


    256 bit密鑰長度的密鑰生成算法與128 bit和192 bit略有不同,即把第4路輸出經(jīng)過了1個(gè)S盒變換,,S盒變換的結(jié)果再與第5路“異或”,,其每1圈的流程如圖3所示。


     通過對(duì)3種密鑰生成算法的分析可知,,3種算法的圈函數(shù)結(jié)構(gòu)存在很大的相似性,,128 bit、192 bit的密鑰生成圈函數(shù)都可視為256 bit密鑰生成圈函數(shù)的一部分,。因此可以通過對(duì)后者進(jìn)行適當(dāng)?shù)淖冃?,從而?shí)現(xiàn)128 bit、192 bit密鑰長度的密鑰生成算法,。本文通過在256 bit密鑰生成算法圈函數(shù)的基礎(chǔ)上添加2個(gè)必要的數(shù)據(jù)選擇器來實(shí)現(xiàn)128 bit與192 bit的密鑰生成算法,,具體實(shí)現(xiàn)結(jié)構(gòu)如圖4所示。


    圖中,,第3路輸出和第5路輸出作為選擇器A的輸入,,其輸出與第6路輸入“異或”。同理,,第3路輸出與第7路輸出作為選擇器B的輸入,,其輸出與最后1路輸入“異或”。選擇器A,、B為32  bit的二選一多路選擇器,。只須對(duì)選擇器A、B進(jìn)行控制,,便可靈活實(shí)現(xiàn)3種密鑰生成算法,。若要實(shí)現(xiàn)256  bit密鑰生成算法,使選擇器的輸出均為上一路的輸入即可,。若要實(shí)現(xiàn)192  bit密鑰生成算法,,須使A選擇器的輸出為下一路,B選擇器的輸出為上一路,。同時(shí),,圈函數(shù)的輸入與輸出應(yīng)分別選取除第4路與第5路之外的其他路,;若要實(shí)現(xiàn)128 bit密鑰生成算法,只需使B選擇器的輸出為下一路,。同時(shí)圈函數(shù)的輸入與輸出分別選取第1,、2、3路和最后一路,。
 由以上分析可知,,僅通過添加2個(gè)數(shù)據(jù)選擇器、3種密鑰生成算法便可成為1個(gè)算法,,易于實(shí)現(xiàn)且3種算法還可共用中間結(jié)構(gòu)寄存器資源,、控制資源。所以相對(duì)于3種密鑰生成算法的單獨(dú)硬件結(jié)構(gòu)設(shè)計(jì),,本設(shè)計(jì)所消耗的硬件資源將大大減少,。
5 系統(tǒng)的實(shí)現(xiàn)與仿真
 本文采用VHDL語言對(duì)系統(tǒng)進(jìn)行描述,采用Altera公司的Stratix系列的EP1S10F484C5器件作為算法載體,,通過QuartusII 5.0對(duì)系統(tǒng)進(jìn)行綜合,、仿真并下載。根據(jù)S盒/逆S盒的內(nèi)容生成內(nèi)存初始化文件mif,,用In-System Memory Content Editor工具對(duì)S盒的內(nèi)容進(jìn)行動(dòng)態(tài)更新,。仿真測試結(jié)果表明,相對(duì)于傳統(tǒng)的設(shè)計(jì),,本設(shè)計(jì)消耗的資源大為減少,。表1為本設(shè)計(jì)與傳統(tǒng)設(shè)計(jì)在資源消耗和運(yùn)行速度的比較。因?yàn)楸驹O(shè)計(jì)在關(guān)鍵路徑上添加了必要的選擇控制單元,,所以處理速度相對(duì)于傳統(tǒng)設(shè)計(jì)有所降低,。
 本文對(duì)AES算法進(jìn)行了可配置設(shè)計(jì),在數(shù)據(jù)分組長度固定的前提下,,可以根據(jù)安全等級(jí)的需要選擇不同分組長度的密鑰進(jìn)行加密運(yùn)算,。本文設(shè)計(jì)出1個(gè)統(tǒng)一的加解密硬件結(jié)構(gòu),使資源消耗大為減少,。由于采用了3種長度規(guī)格的密鑰,,使得算法的安全級(jí)別靈活可變,用戶可根據(jù)不同的安全需求靈活選擇,。在子密鑰的生成上,,本文采用可配置的方式來實(shí)現(xiàn)3種密鑰生成算法,相對(duì)于使用不同的硬件結(jié)構(gòu)實(shí)現(xiàn)每一種密鑰生成算法,,消耗的硬件資源進(jìn)一步減少。算法中S盒的實(shí)現(xiàn)方式?jīng)Q定了其具備動(dòng)態(tài)更新的特性,,因此算法的安全性也得到進(jìn)一步增強(qiáng),。綜上所述,,本設(shè)計(jì)非常適用于硬件資源受限且有多種安全級(jí)別需要的密碼系統(tǒng)。

參考文獻(xiàn)
[1]     National Institute of standard and technology, advanced  encryption standard[S]. FIPS197, 2001,11.
[2]     韋寶典,,劉東蘇,,王新梅. 優(yōu)化實(shí)現(xiàn)研究[J].計(jì)算機(jī)工程與應(yīng)用,2002(20):4-6.
[3]     高娜娜,李占才,,王沁.一種可重構(gòu)體系結(jié)構(gòu)用于高速實(shí)現(xiàn)DES,、3DES和AES[J].電子學(xué)報(bào),2006,34(8):1386-1390.
[4]     張清華.算法的高效實(shí)現(xiàn)及其性能分析[J].計(jì)算機(jī)應(yīng)用,2004,24(2):12-14.
[5]     SHIM J H, KIM D W, KANG Y K,et al. A rijndael cryptoprocessor using shared on-the-fly key scheduler[C].  ASIC,2002. Proceedings.2002.IEEE  Asia  Pacific Conference,2002,89(92):6-8.
[6]     沈涵飛,,甘 萌. 加密算法在低成本FPGA上的實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與應(yīng)用,,2004(22):116-119.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。