AES 加密演算法介紹

演算法設計的兩個原則為:混淆(confusion)和擴散(diffusion),其目的是抗擊敵手對密碼系統的統計分析。

  • 混淆是使密文的統計特性與金鑰的取值之間的關係盡可能複雜化,以使金鑰和明文以及密文之間的依賴性對密碼分析者來說是無法利用的。
  • 擴散的作用則是將每一位明文的影響盡可能迅速地作用到較多的輸出密文位中,以便在大量的密文中消除明文的統計結構,並且使每一位金鑰的影響盡可能迅速地擴展到較多的密文位中,以防對金鑰進行逐段破譯。

AES區塊編碼器為128bit的分塊長度,金鑰長度為128、192、256bit,金鑰長度影響金鑰編排(即在每一輪中使用的子金鑰)和輪的次數,但是不影響每一輪中的高級結構。

主要分如下幾個過程:

  • Initial round key addition: 初始輪金鑰加 AddRoundKey
  • 9,11 or 13round: (金鑰長度不同,輪數不同)
    1. SubBytes
    2. ShiftRows
    3. MixColumns
    4. AddReoundKey
  • Final round(making 10,12 or 14 rounds in total):
    1. SubBytes
    2. ShiftRows
    3. AddRoundKey

SubBytes(位元組替代)

位元組替代,就是依據S盒(Subtitution Box)把明文塊的每一個位元組都替代成另外一個位元組,b[i,j] = S(a[i,j]), 實現時直接查表即可。

ShiftRows(行移位)

第一行不變,第二行迴圈左移1個位元組,第三行迴圈左移2個位元組,第四行迴圈左移3個位元組。

MixColumns

輸入陣列的每一列要和一個常量矩陣做矩陣相乘,得到對應的輸出列。

AddRoundKey

128bit的輪金鑰同樣被排列成4X4的矩陣,輸出值b[i,j] = a[i,j] XOR k[i,j]