AES加密演算法詳解
阿新 • • 發佈:2018-11-28
AES 是一個對稱密碼分組演算法,分組長度為128bit,金鑰長度為128、192 和 256 bit。
整個加密過程如下圖所示。
1.金鑰生成演算法
金鑰擴充套件過程:
1) 將種子金鑰按下圖所示的格式排列,然後每32bit分別記為w[0]、w[1]、w[2]、w[3];
2)依次取問w[5],w[6].......w[43],記為w[j]
若j%4=0,則w[j]=w[j-4]⊕g(w[j-1]),否則w[j]=w[j-4]⊕w[j-1];
函式g的流程說明:
a) 將w迴圈左移8位元;
b) 分別對每個位元組做S盒置換;
c) 與32位元的常量(RC[j/4],0,0,0)進行異或,RC是一個一維陣列,RC = {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B}
2.位元組替代(SubBytes)
將狀態矩陣中的元素通過S盒對映為一個新的位元組:把該位元組的高4位作為行值,低4位作為列值,取出S盒對應的元素作為輸出。
下圖(a)為S盒,圖(b)為S-1(S盒的逆)
S盒內部計算方法:
y=Ax-1+b
其中x*x-1=1mod(x8+x4+x3+x2+1),則x為輸入元素,y為S盒輸出元素。
3.行移位(ShiftRows)
將狀態矩陣的第0行左移0位元組,第1行左移1位元組,第2行左移2位元組,第3行左移3位元組
4.列混合(MixColumns)
將每列的元素乘以一個行列式進行替換。
5.輪金鑰加(AddRoundKey)
輪金鑰加是將128位輪金鑰Ki同狀態矩陣中的資料進行逐位異或操作