沿革
Rijndael是由Daemen和Rijmen早期所設計的Square改良而來;而Square則是由SHARK發展而來。
不同於它的前任標準DES,Rijndael使用的是代換-置換網路,而非Feistel架構。AES在軟體及硬體上都能快速地加解密,相對來說較易於實作,且只需要很少的存儲器。作為一個新的加密標準,目前正被部署套用到更廣大的範圍。
簡介
密碼學中的高級加密標準(AdvancedEncryptionStandard,AES),又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。經過五年的甄選流程,高級加密標準由美國國家標準與技術研究院(NIST)於2001年11月26日發布於FIPSPUB197,並在2002年5月26日成為有效的標準。2006年,高級加密標準已然成為對稱密鑰加密中最流行的算法之一。
設計者
該算法為比利時密碼學家Joan Daemen和Vincent Rijmen所設計,結合兩位作者的名字,以Rijndael之命名之,投稿高級加密標準的甄選流程。Rijdael的發音近於 "Rhinedoll,兩位設計者的名字,參考荷蘭語原發音可譯為尤安·達蒙、文森特·萊蒙。(Joan不能譯為女性化的名字“瓊”。另外,西歐的姓名很多是有相同拉丁文或希臘文源頭的,故譯成中文是可能相同)
形成過程
1997年4月15日,美國ANSI發起徵集AES(advanced encryption standard)的活
動,並為此成立了AES工作小組。
1997年9月12日,美國聯邦登記處公布了正式徵集AES候選算法的通告。對AES的基本要求是: 比三重DES快、至少與三重DES一樣安全、數據分組長度為128比特、密鑰長度為128/192/256比特。
1998年8月12日,在首屆AES候選會議(first AES candidate conference)上公布了AES的15個候選算法,任由全世界各機構和個人攻擊和評論。
1999年3月,在第2屆AES候選會議(second AES candidate conference)上經過對全球各密碼機構和個人對候選算法分析結果的討論,從15個候選算法中選出了5個。分別是RC6、Rijndael、ERPENT、Twofish和MARS。
2000年4月13日至14日,召開了第3屆AES候選會議(third AES candidate conference),繼續對最後5個候選算法進行討論。
2000年10月2日,NIST宣布Rijndael作為新的AES。經過3年多的討論,Rijndael終於脫穎而出。
Rijndael由比利時的Joan Daemen和Vincent Rijmen設計。算法的原型是Square算法,它的設計策略是寬軌跡策略(wide trail strategy)。算法有很好的抵抗差分密碼分析及線性密碼分析的能力。
設計思想
Rijndael密碼的設計力求滿足以下3條標準:
① 抵抗所有已知的攻擊。
② 在多個平台上速度快,編碼緊湊。
③ 設計簡單。
當前的大多數分組密碼,其輪函式是Feistel結構。
Rijndael沒有這種結構。
Rijndael輪函式是由3個不同的可逆均勻變換
Rijndael (State, ExpandedKey)
{
AddRoundKey (State, ExpandedKey);
for (i=1; i
Round (State, ExpandedKey+Nb* i);
FinalRound (State, ExpandedKey+Nb*Nr)
}
Round (State, RoundKey)
{
ByteSub (State);
ShiftRow (State);
MixColumn (State);
AddRoundKey (State, RoundKey)
}
FinalRound (State, RoundKey)
{
ByteSub (State);
ShiftRow (State);
AddRoundKey (State, RoundKey)
}
密碼說明
嚴格地說,AES和Rijndael加密法並不完全一樣(雖然在實際套用中二者可以互換),因為Rijndael加密法可以支持更大範圍的區塊和密鑰長度:AES的區塊長度固定為128 比特,密鑰長度則可以是128,192或256比特;而Rijndael使用的密鑰和區塊長度可以是32位的整數倍,以128位為下限,256比特為上限。加密過程中使用的密鑰是由Rijndael密鑰生成方案產生。
大多數AES計算是在一個特別的有限域完成的。
AES加密過程是在一個4×4的位元組矩陣上運作,這個矩陣又稱為“狀態(state)”,其初值就是一個明文區塊(矩陣中一個元素大小就是明文區塊中的一個Byte)。(Rijndael加密法因支持更大的區塊,其矩陣行數可視情況增加)加密時,各輪AES加密循環(除最後一輪外)均包含4個步驟:
AddRoundKey — 矩陣中的每一個位元組都與該次輪秘鑰(round key)做XOR運算;每個子密鑰由密鑰生成方案產生。
SubBytes — 通過個非線性的替換函式,用查找表的方式把每個位元組替換成對應的位元組。
ShiftRows — 將矩陣中的每個橫列進行循環式移位。
MixColumns — 為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉換來混合每列的四個位元組。
最後一個加密循環中省略MixColumns步驟,而以另一個AddRoundKey取代。
加密標準
對稱密碼體制的發展趨勢將以分組密碼為重點。分組密碼算法通常由密鑰擴展算法和加密(解密)算法兩部分組成。密鑰擴展算法將b位元組用戶主密鑰擴展成r個子密鑰。加密算法由一個密碼學上的弱函式f與r個子密鑰疊代r次組成。混亂和密鑰擴散是分組密碼算法設計的基本原則。抵禦已知明文的差分和線性攻擊,可變長密鑰和分組是該體制的設計要點。
AES是美國國家標準技術研究所NIST旨在取代DES的21世紀的加密標準。
AES的基本要求是,採用對稱分組密碼體制,密鑰長度的最少支持為128、192、256,分組長度128位,算法應易於各種硬體和軟體實現。1998年NIST開始AES第一輪分析、測試和徵集,共產生了15個候選算法。1999年3月完成了第二輪AES2的分析、測試。2000年10月2日美國政府正式宣布選中比利時密碼學家Joan Daemen 和 Vincent Rijmen 提出的一種密碼算法RIJNDAEL 作為 AES.
在套用方面,儘管DES在安全上是脆弱的,但由於快速DES晶片的大量生產,使得DES仍能暫時繼續使用,為提高安全強度,通常使用獨立密鑰的三級DES。但是DES遲早要被AES代替。流密碼體制較之分組密碼在理論上成熟且安全,但未被列入下一代加密標準。
AES加密數據塊分組長度必須為128比特,密鑰長度可以是128比特、192比特、256比特中的任意一個(如果數據塊及密鑰長度不足時,會補齊)。AES加密有很多輪的重複和變換。大致步驟如下:1、密鑰擴展(KeyExpansion),2、初始輪(Initial Round),3、重複輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最終輪(Final Round),最終輪沒有MixColumns。