探索安全-- AES加密演算法
最近收到訊息在加密演算法領域具有一定地位的 AES加密演算法(256位) 面臨著被破解的境遇,所以呢,簡單來聊一聊
AES 設計有三個金鑰長度:128,192,256位,相對而言,AES的128金鑰比DES的56金鑰強1021倍[2]。AES演算法主要包括三個方面:輪變化、圈數和金鑰擴充套件。本文以128為例,介紹演算法的基本原理;結合AVR組合語言,實現高階資料加密演算法AES。
AES是分組金鑰,演算法輸入128位資料,金鑰長度也是128位。用Nr表示對一個數據分組加密的輪數(加密輪數與金鑰長度的關係如表1所列)。每一輪都需要一個與輸入分組具有相同長度的擴充套件金鑰Expandedkey(i)的參與。由於外部輸入的加密金鑰K長度有限,所以在演算法中要用一個金鑰擴充套件程式(Keyexpansion)把外部金鑰K擴充套件成更長的位元串,以生成各輪的加密和解密金鑰。
圈層變化
AES每一個圈變換由以下三個層組成:
非線性層——進行Subbyte變換;
線行混合層——進行ShiftRow和MixColumn運算;
金鑰加層——進行AddRoundKey運算。
① Subbyte變換是作用在狀態中每個位元組上的一種非線性位元組轉換,可以通過計算出來的S盒進行對映。
② ShiftRow是一個位元組換位。它將狀態中的行按照不同的偏移量進行迴圈移位,而這個偏移量也是根據Nb的不同而選擇的[3]。
③ 在MixColumn變換中,把狀態中的每一列看作GF(28)上的多項式a(x)與固定多項式c(x)相乘的結果。 b(x)=c(x)*a(x)的係數這樣計算:
*運算不是普通的乘法運算,而是特殊的運算,即 b(x)=c(x)·a(x)(mod x4+1) 對於這個運算 b0=02。a0+03。a1+a2+a3 令xtime(a0)=02。a0
其中,符號“。”表示模一個八次不可約多項式的同餘乘法[3]。
對於逆變化,其矩陣C要改變成相應的D,即b(x)=d(x)*a(x)。
④ 金鑰加層運算(addround)是將圈金鑰狀態中的對應位元組按位“異或”。
⑤ 根據線性變化的性質[1],解密運算是加密變化的逆變化。這裡不再詳細敘述。
型別
金鑰擴充套件
AES演算法利用外部輸入金鑰K(金鑰串的字數為Nk),通過金鑰的擴充套件程式得到共計4(Nr+1)字的擴充套件金鑰。它涉及如下三個模組:
① 位置變換(rotword)——把一個4位元組的序列[A,B,C,D]變化成[B,C,D,A];
② S盒變換(subword)——對一個4位元組進行S盒代替;
③ 變換Rcon[i]——Rcon[i]表示32位位元字[xi-1,00,00,00]。
這裡的x是(02),如 Rcon[1]=[01000000];Rcon[2]=[02000000];Rcon[3]=[04000000]……
擴充套件金鑰的生成:擴充套件金鑰的前Nk個字就是外部金鑰K;以後的字W[[i]]等於它前一個字W[[i-1]]與前第Nk個字W[[i-Nk]]的“異或”,即W[[i]]=W[[i-1]]W[[i- Nk]]。但是若i為Nk的倍數,則W[i]=W[i-Nk]Subword(Rotword(W[[i-1]]))Rcon[i/Nk]。
AES的加密與解密流程如圖1所示。