高級加密標準(AES,advanced encryption standard)是美國的商用標準。2001年11月26日公布的AES加密標準文本替代了已使用20多年的數(shù)據(jù)加密標準(DES,data encryption standard)。
一、概述
1、AES的產(chǎn)生背景:1996年美國國家標準技術(shù)協(xié)會(NIST)開始著手開發(fā)替代DES的新標準--高級加密標準AES。2000年10月2日,對DES繼承的競爭結(jié)束。NIST認為由Katholieke大學(xué)的Vincent Rijmen、比利時的Leuven和質(zhì)子世界國際性組織的Joan Daemen聯(lián)合提交的榮代爾(Rijndael)算法是高級加密標準最好的候選者。并于2001年11月26日公布了AES加密標準文本(它是在榮代爾(Rijndael)算法基礎(chǔ)上整理修改而成的)。
DES最初由IBM提出,并在1975年被美國國家標準技術(shù)協(xié)會作為標準,從1977年開始,DES已經(jīng)經(jīng)歷了每一個有抱負密碼分析專家的攻擊。隨著計算機技術(shù)的快速發(fā)展,對DES執(zhí)行一次蠻力攻擊所需要的時間也愈來愈短,并且到20世紀末,大約用5天就能把它破譯。很明顯,作為安全裝置的DES的生命已經(jīng)結(jié)束。作為延長DES使用壽命的一種方法,三倍的DES通過使用兩倍或三倍56比特密鑰稍微改進這種情況,但是三倍的DES速度非常慢。
比較DES和AES可以發(fā)現(xiàn),DES使用的密鑰長度為56比特,AES用的密鑰長度為128比特。后者提供更高的安全性,能抵御蠻力攻擊,并且存在擴充的可能,它能支持256比特的密鑰長度。AES算法是分組密碼,并且能夠在一個廣泛的應(yīng)用中使用硬件和軟件實現(xiàn),如smart卡、門陣列器件、FPGA或PC軟件。這個能力也是AES算法超過競爭者的一個特征。
對于DES的懷疑,刺激了密碼工業(yè)產(chǎn)生多種可供選擇的算法,而人們感興趣的是AES所產(chǎn)生的影響。因為新標準應(yīng)用于市場需要一段時間,所以使密碼工業(yè)處于暫時的休止狀態(tài)。無可置疑,這加劇了安全市場的競爭。高級加密標準AES的確立,使美國有了支持電子商務(wù)發(fā)展的關(guān)鍵性安全工具,其電子商務(wù)和政務(wù)將更加安全保密。
2、AES的優(yōu)勢和限制
1)AES的優(yōu)勢:由于Rijndael算法總體上存在下列優(yōu)勢,因此它成為高級加密標準AES:一是對稱和平行的結(jié)構(gòu),給實現(xiàn)者許多適應(yīng)性;不存在有效的密碼分析攻擊。二是適合現(xiàn)代計算機處理器,如奔騰、RISC和并行處理器。三是適合smart卡。四是在專用硬件中具有可塑性。下表1-2給出更為具體的說明,主要表現(xiàn)在實現(xiàn)方面、設(shè)計的簡化、可變的分組長度和可擴充性等。
表1-2:AES的優(yōu)勢
2)限制:密碼的限制主要表現(xiàn)在其逆向情況。①逆向密碼不如密碼更適合在smart卡上實現(xiàn),它需要更多的代碼和周期(盡管如此,和其他密碼相比較,逆向密碼的處理速度還是非常快的)。 ②在軟件中,密碼和它的逆向密碼使用不同的代碼和/或表。③在硬件中,逆向密碼僅僅能夠使用密碼實現(xiàn)中的一部分電路。
二、定義
1、術(shù)語和縮寫詞表:下表2-1的解釋貫穿在AES標準中。
表2-1:術(shù)語和縮寫詞及解釋
2、算法參數(shù)、符號和函數(shù):下表2-2的算法參數(shù)、符號和函數(shù)貫穿在AES標準中。
表2-2:算法參數(shù)、符號、函數(shù)及其解釋
三、符號和約定
AES標準中使用的符號和約定,包括輸入和輸出、字節(jié)、字節(jié)的數(shù)組、狀態(tài)和作為列數(shù)組的狀態(tài)。
1、輸入和輸出:AES算法的每一個輸入和輸出是由128比特(值為0或1)序列組成的。這個序列有時稱作塊或分組,它們包含的比特數(shù)目稱作分組長度。對于AES算法的密碼密鑰是含有128比特、192比特或256比特的序列。其他的輸入、輸出和密碼密鑰長度在這個標準中是不允許的。
序列中的比特編號從0開始,結(jié)尾處的編號值小于序列長度(分組長度或密鑰長度)。附加的一個比特的號碼i是它的指針,i的變化范圍依賴于分組長度和密鑰長度,即i的范圍如下:
0≤i<128,0≤i<192或0≤i<256
2、字節(jié):在AES算法中,基本的處理單位是字節(jié)(byte),一個8比特的序列作為一個單一處理的實體。上述的輸入、輸出和密碼密鑰比特序列是作為字節(jié)的數(shù)組處理的,在構(gòu)成字節(jié)的數(shù)組時(下述),把比特序列中每8個相鄰的比特分劃成一組,構(gòu)成一個字節(jié)。當一個輸入、輸出或密碼密鑰用字符a表示時,那么得到的字節(jié)數(shù)組可以表示成an或a[n],其中n的范圍詳細見下表3-2-1。
表3-2-1:密鑰長度與n的范圍
在AES算法中,所有字節(jié)值可表示在大括號內(nèi),按由高至低位次序方式排列{b7b6b5b4 b3b2b1b0}。這些字節(jié)認為是有限域的元素,因此可以用下面的多項式表示:
b7x7+b6 x6+b5x5+b4x4+b3 x3+b2 x2+b1x1+b0=∑bixi
例如,由{01100011}可以確定一個特殊的有限域的元素為x6+x5+x+1。為方便起見,用十六進制符號表示字節(jié)值,也就是把兩個4比特組分別用表3-2-2所示的單一字符表示。
表3-2-2:比特模式的十六進制表示
例如元素{01100011}能夠表示為{63},其中每一個字符表示一個4比特組。一些有限域的操作包含一個位于8比特字節(jié)左側(cè)的附加比特(b8)。當存在這個額外的比特時,可以作為‘{01}’添加到前述8比特字節(jié)的左側(cè)。例如,一個9比特序列將可表示為{01}{1b}。
3、字節(jié)的數(shù)組:字節(jié)的數(shù)組形式如下:a0a1a2…a15
字節(jié)和字節(jié)內(nèi)部的比特排序是由下面的128比特輸入序列得到的:
input0input1input2…input126 input127
按照下列順序確定字節(jié)和字節(jié)內(nèi)部的比特排序:
a0={input0input1…input7};a1={input8input9…input15};…;a15={input120input121…input127}
上述表示的模式能夠延伸到更長的序列(也就是對于192比特和256比特密鑰的情況),因而一般可表示為:
an={input8ninput8n+1…input8n+7}
根據(jù)符號和約定組合起來考慮,可以得到在每一個范圍內(nèi)比特的編號方法,如表3-3所示。
表3-3:對于字節(jié)及比特的指針
4、狀態(tài):狀態(tài)是AES密碼的中間結(jié)果,AES算法的操作都是在狀態(tài)上完成的。狀態(tài)由4行字節(jié)組成,每行包含Nb字節(jié),其中Nb等于分組長度除以32。在用符號s表示狀態(tài)數(shù)組時,每個字節(jié)有兩個指針,一個是它所在的行數(shù)r,范圍為0≤r<4;另一個是它的列數(shù)c,范圍為0≤c<Nb。狀態(tài)的每個字節(jié)可以表示為Sr,c或s[r,c]。對于這個標準,Nb=4,也就是0≤r<4。
在密碼和逆向密碼開始時,字節(jié)的輸人數(shù)組in0,in1,…in15要復(fù)制到如圖3-4所示的狀態(tài)數(shù)組中。然后,密碼或逆向密碼操作在這個狀態(tài)數(shù)組上進行,在它達到最終值后,要復(fù)制到輸出字節(jié)數(shù)組out0,out1 …out15中。因此,在密碼或逆向密碼開始時,輸入數(shù)組in按照下列形式復(fù)制到狀態(tài)數(shù)組:
s[r,c]= in[r+4c],0≤r<4和0≤c<Nb
并在密碼和逆向密碼結(jié)束時,狀態(tài)數(shù)組按照下列形式復(fù)制到輸出數(shù)組:
out[r+4c]=s[r,c],0≤r<4和0≤c<Nb
圖3-4:狀態(tài)數(shù)組的輸入和輸出
5、作為列數(shù)組的狀態(tài):狀態(tài)數(shù)組的每一列的4個字節(jié)構(gòu)成一個32比特字,在每個32比特字范圍內(nèi)的4個字節(jié)可以用其所在行數(shù)r作為指針來加以區(qū)分。因此,可以認為狀態(tài)是由32比特字(列)構(gòu)成的一維數(shù)組,即為w0,w1,w2,w3,其中列數(shù)c提供這個數(shù)組的指針。對于圖3-4所示的例子,可以認為狀態(tài)是4個字的數(shù)組,其形式如下所示:
w0=s0,0s1,0s2,0s3,0;w1=s0,1s1,1s2,1s3,1;w2=s0,2s1,2s2,2s3,2;w3=s0,3s1,3s2,3s3,3
四、關(guān)于Rijndael算法
1、Rijndael加密:Rijndael是一個密鑰迭代分組密碼,包含了輪變換對狀態(tài)的重復(fù)作用。輪數(shù)Nr 的值取決于分組和密鑰的長度。對于AES,當密鑰長度為128比特時,Nr=10;當密鑰長度為192比特時,Nr=12;當密鑰長度為256比特時,Nr =14。它包括一個初始密鑰加法,記作AddRoundKey,接著進行Nr-1次輪變換(Round),最后再使用一個輪變換(FinalRound)。輪變換由4個步驟組成:SubBytes,ShiftRows,MixColumns和AddRoundKey。最后一輪與前Nr -1次輪變換稍有不同,省掉了其中的MixColumns步驟。這四個步驟的含義詳見下表4-1。
表4-1:輪變換由4個步驟的含義
2、Rijndael解密:Rijndael解密算法有2種形式。一種是直接解密算法,即直接利用步驟InsubBytes,InvShiftRows,InvMixColumns和AddRoundKey的逆并倒置其次序?qū)?shù)據(jù)進行解密。另一種是等價解密算法。等價解密算法有利于有效實現(xiàn)良好的運算次序。
欲更多了解關(guān)于信息安全技術(shù)知識的請進入。