高階加密標準

進階加密標準，又稱Rijndael加密法於2001年11月26日釋出於FIPS PUB 197，並在2002年5月26日成為有效的標準。現在，進階加密標準已然成為對稱金鑰加密中最流行的演演算法之一。該演演算法為比利時密碼學家Joan Daemen和Vincent Rijmen所設計，結合兩位作者的名字，以Rijndael為名投稿進階加密標準的甄選流程。沿革.Rijndael是由Daemen和Rijmen早期所設計的改良而來；而Square則是由SHARK發展而來。不同於它的前任標準DES，Rijndael使用的是代換-置換網路，而非Feistel架構。密碼說明.嚴格地說，AES和Rijndael加密法並不完全一樣，因為Rijndael加密法可以支援更大範圍的區塊和金鑰長度：AES的區塊長度固定為128位元，金鑰長度則可以是128，192或256位元；而Rijndael使用的金鑰和區塊長度均可以是128，192或256位元。加密過程中使用的金鑰是由Rijndael金鑰生成方案產生。大多數AES計算是在一個特別的有限域完成的。AES加密過程是在一個4×4的位元組矩陣上運作，這個矩陣又稱為「體均包含4個步驟：AddRoundKey步驟.AddRoundKey步驟，回合金鑰將會與原矩陣合併。在每次的加密迴圈中，都會由主金鑰產生一把回合金鑰加法。SubBytes步驟.在SubBytes步驟中，矩陣中的各位元組透過一個8位元的S-box進行轉換。這個步驟提供了加密法非線性的變換能力。S-box與formula_1上的乘法反元素有關，已知具有良好的非線性特性。為了避免簡單代數性質的攻擊，S-box結合了乘法反元素及一個可逆的仿射變換矩陣建構而成。此外在建構S-box時，刻意避開了不動點與，即以S-box替換位元組的結果會相當於錯排的結果。條目有針對S-box的詳細描述。ShiftRows步驟.ShiftRows描述矩陣的行操作。在此步驟中，每一行都向左迴圈位移某個偏移量。在AES中，第一行維持不變，第二行裡的每個位元組都向左迴圈移動一格。同理，第三行及第四行向左迴圈位移的偏移量就分別是2和3。128位元和192位元的區塊在此步驟的迴圈位移的模式相同。經過ShiftRows之後，矩陣中每一豎列，都是由輸入矩陣中的每個不同列中的元素組成。Rijndael演演算法的版本中，偏移量和AES有少許不同；對於長度256位元的區塊，第一行仍然維持不變，第二行、第三行、第四行的偏移量分別是1位元組、2位元組、3位元組。除此之外，ShiftRows操作步驟在Rijndael和AES中完全相同。MixColumns步驟.在MixColumns步驟，每一列的四個位元組透過線性變換互相結合。每一列的四個元素分別當作formula_2的係數，合併即為formula_1中的一個多項式，接著將此多項式和一個固定的多項式formula_4在模formula_5下相乘。此步驟亦可視為之下的矩陣乘法。MixColumns函式接受4個位元組的輸入，輸出4個位元組，每一個輸入的位元組都會對輸出的四個位元組造成影響。因此ShiftRows和MixColumns兩步驟為這個密碼系統提供了。以下條目有對MixColumns更加詳細的描述：加密演演算法最佳化.使用32或更多位元定址的系統，可以事先對所有可能的輸入建立對應表，利用查表來實作SubBytes，ShiftRows和MixColumns步驟以達到加速的效果。這麼作需要產生4個表，每個表都有256個格子，一個格子記載32位元的輸出；約佔去4KB記憶體空間，即每個表佔去1KB的記憶體空間。如此一來，在每個加密迴圈中，只需要查16次表，作12次32位元的XOR運算，以及AddRoundKey步驟中4次32位元XOR運算。若使用的平臺記憶體空間不足4KB，也可以利用迴圈交換的方式一次查一個256格32位元的表。然而，實際實作中應避免使用這樣的對應表，否則可能因為產生快取命中與否的差別而使旁道攻擊成為可能。安全性.截至2006年，針對AES唯一的成功攻擊是旁道攻擊或社會工程學攻擊。美國國家安全域性稽核了所有的參與競選AES的最終入圍者，認為他們均能夠滿足美國政府傳遞非機密檔案的安全需要。2003年6月，美國政府宣佈AES可以用於加密機密檔案：The design and strength of all key lengths of the AES algorithmare sufficient to protect classified information up to the SECRET level. TOP SECRET information will require use of either the 192 or 256 key lengths. The implementation of AES in products intended to protect national security systems and/or information must be reviewed and certified by NSA prior to their acquisition and use.這標誌著，由美國國家安全域性NSA批准在最高機密資訊上使用的加密系統首次可以被公開使用。許多大眾化產品只使用128位元金鑰當作預設值；由於最高機密檔案的加密系統必須保證數十年以上的安全性，故推測NSA可能認為128位元太短，才以更長的金鑰長度為最高機密的加密保留了安全空間。通常破解一個區塊加密系統最常見的方式，是先對其較弱版本嘗試各種攻擊。AES中128位元金鑰版本有10個加密迴圈，192位元金鑰版本有12個加密迴圈，256位元金鑰版本則有14個加密迴圈。至2006年為止，最著名的攻擊是針對AES 7次加密迴圈的128位元金鑰版本，8次加密迴圈的192位元金鑰版本，和9次加密迴圈的256位元金鑰版本所作的攻擊。由於已遭破解的弱版的AES，其加密迴圈數和原本的加密迴圈數相差無幾，有些密碼學家開始擔心AES的安全性：要是有人能將該著名的攻擊加以改進，這個區塊加密系統就會被破解。在密碼學的意義上，只要存在一個方法，比窮舉法還要更有效率，就能被視為一種「破解」。故一個針對AES 128位元金鑰的攻擊若「只」需要2120計算複雜度，128位元金鑰的AES就算被破解了；即便該方法在目前還不實用。從應用的角度來看，這種程度的破解依然太不切實際。最著名的暴力攻擊法是針對64位元金鑰RC5所作的攻擊。其他的爭議則著重於AES的數學結構。不像其他區塊加密系統，AES具有相當井然有序的代數結構。雖然相關的代數攻擊尚未出現，但有許多學者認為，把安全性建立於未經透徹研究過的結構上是有風險的。Ferguson，Schroeppel和Whiting因此寫道：「...我們很擔心Rijndael演演算法應用在機密系統上的安全性。」2002年，和發表名為的理論性攻擊，試圖展示AES一個潛在的弱點。但該攻擊的數學分析有點問題，推測應是作者的計算有誤。因此，這種攻擊法是否對AES奏效，仍是未解之謎。就現階段而言，XSL攻擊AES的效果不十分顯著，故將之應用於實際情況的可能性並不高。旁道攻擊.旁道攻擊，又稱旁路攻擊、側通道攻擊，是一種基於從密碼系統的物理實現中獲取的資訊的攻擊方式。它不攻擊加密演算法本身，而是攻擊那些基於不安全系統上的加密系統。2005年4月，公佈了一種快取時序攻擊法，他以此破解了一個裝載OpenSSL AES加密系統的客戶伺服器。為了設計使該伺服器公佈所有的時序資訊，攻擊演算法使用了2億多條篩選過的明碼。對於需要多個跳躍的國際網際網路而言，這樣的攻擊方法並不實用。Bruce Schneier稱此攻擊為「好的時序攻擊法」。2005年10月，Eran Tromer 和另外兩個研究員發表了一篇論文，展示了數種針對AES的快取時序攻擊法。