摘 要:AES是新一代的數據加密標準。本文對AES的性能進行了分析、算法進行了介紹,并給出C++語言實現的代碼。
關鍵詞:AES;對稱分組密碼
中圖分類號:TP311.11 文獻標識碼:A 文章編號:1674-7712 (2014) 18-0179-01
一、AES簡介
隨著對稱密碼的發展,3 DES用軟件實現速度相對較慢,它使用的64位分組長度顯得不夠高效和安全的缺點,使得需要一種新的高級加密標準來替代它。AES的全稱是Advanced Encr yption Standard,即高級加密標準。2000年10月2日,NIST對Rijndael做出了最終評估。如表1所示:
表1 NIST對Pdjndael作出最終評估
一般安全性它用s盒作為非線性組件,表現出足夠的安全性能,沒有已知的攻擊方法能攻擊Rijndael
軟件執行Rijndael的密鑰速度非常快,它固有的分布至行機制能充分有效的利用處理器資源,甚至在不能分布執行的模型下仍能達到很好的軟件執行能力
受限空聞環境Rijndael非常適合在受限空間環境中執行加密或解g操作,它對RAM和ROM的要求很低,其缺點是:當既要執行加密操作又要執行解密操作時,需要更大的R0M間
硬件執行當算法的密鑰長度為192位和256位時,因輪次增加,其執行速度變得很慢,當用完全流水線實現時,算法需要更多的存儲空間,但不影響執行速度
對執行的攻擊Rijndael利用掩碼技術很利于防止能量攻擊和計時攻擊,并末顯著降低它的執行性能,同時對RAM的需求在合理的范圍之內
加密與解密Rijndael的加密函數與解密函數不同,同時實現加密和解密算法比僅實現加密算法所占用的存儲空間要多60%,Rijndael中加密和解密的速度差不多
密精靈活性Rijndael支持加密中的快速子密鑰計算,要求在加密前產生所有的子密鑰,給Rijndael的密鑰靈活性增加了一些資源負擔
ES是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192和256位密鑰,并且用128位(16字節)分組加密和解密數據。與公共密鑰密碼使用密鑰對不同,對稱密鑰密碼使用相同的密鑰加密和解密數據。通過分組密碼返回的加密數據的位數與輸入數據相同。迭代加密使用一個循環結構,在該循環中重復置換(permutations)和替換(substitutions)輸入數據。
二、AES加密算法
AES中的操作均是以字節作為基礎的,用到的變量也都是以字節為基礎。State可以用4×4的矩陣表示。AES算法結構對加密和解密的操作,算法由輪密鑰開始,并用Nr表示對一個數據分組加密的輪數(加密輪數與密鑰長度的關系如表2所示)。AES算法的主循環State矩陣執行Nr一1輪迭代運算,每輪都包括所有4個階段的代換分別是在規范中被稱為SubBytes(字節替換)、ShiftRows(行位移變換)、MixColumns(列混合變換)和AddRoundKey,(由于外部輸入的加密密鑰K長度有限,所以在算法中要用一個密鑰擴展程序(Keyexpansion)把外部密鑰K擴展成更長的比特串,以生成各輪的加密和解密密鑰)。最后執行只包括3個階段(省略MixColumns變換)的最后一輪運算。
(一)字節替換(SubBytes)
AES定義了一個S盒,State中每個字節按照如下方式映射為一個新的字節:把該字節的高4位作為行值,低4位作為列值,然后取出S盒中對應行和列的元素作為輸出。例如,十六進制數{84}。對應S盒的行是8列是4,S盒中該位置對應的值是{5F}。S盒是一個由16×16字節組成的矩陣,包含了8位值所能表達的256種可能的變換。S盒按照以下方式構造:
(1)逐行按照升序排列的字節值初始化S盒。第一行是{00},{01},{02},…,{0F};第二行是{10},{l1},…,{1F}等。在行X和列y的字節值是{x,y}。
(2)把S盒中的每個字節映射為它在有限域GF(28)中的逆。GF代表伽羅瓦域,GF(28)由一組從0×00到0×ff的256個值組成,加上加法和乘法。GF(2)=Z2[X]/(X8+x4+x3+x+1)。{00}被映射為它自身{00}。
(二)行位移變換(ShiftRows)
State的第一行字節保持不變,State的第二行字節循環左移一個字節,State的第三行字節循環左移兩個字節,State的第四行循環左移三個字節。
參考文獻:
[1]龍冬陽,王常吉,吳丹.應用編碼與計算機密碼學[M].北京:清華大學出版社,2005.
[2]William.Stallings.網絡安全基礎應用與標準(第二版)[M].張英,王景新,譯.中國電力出版社,2004.
[作者簡介]廖慶濤(1981.11-),男,重慶人,中級職稱,講師,碩士,研究方向:數字媒體制作、計算機網絡。