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