AES加密算法工作原理

密碼學博大精深,這裏所說的AES加密算法原理可以理解爲AES工作流程,至於爲什麼這麼設計,這麼設計爲什麼是安全的,有待今後的學習與思考。

分組密碼設計的兩個原則

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

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

在後面的AES算法設計的過程中可以看到其核心步驟符合這兩個原則。

AES的構造方法

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

主要分如下幾個過程:

  1. KeyExpansion: 密鑰擴展,每一輪輪密鑰都是不同的,需要依據密鑰擴展爲不同輪次的128bit輪密鑰。
  2. Initial round key addition: 初始輪密鑰加
    1. AddRoundKey
  3. 9,11 or 13round: (密鑰長度不同,輪數不同)
    1. SubBytes
    2. ShiftRows
    3. MixColumns
    4. AddRoundKey
  4. Final round(making 10,12 or 14 rounds in total):
    1. SubBytes
    2. ShiftRows
    3. AddRoundKey

AES128算法流程如下圖所示:
在這裏插入圖片描述

KeyExpansion(密鑰擴展)

每一輪使用的密鑰都是根據上一輪的密鑰變換而來的,由密鑰生成不同輪次輪密鑰的算法過程可參考AES key schedule,這裏不再細述。

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]

image

參考資料:
Advanced Encryption Standard
FIPS 197, Advanced Encryption Standard (AES)


最後應用AES加密算法時,遇到了性能瓶頸,需要提高AES加密算法的吞吐量,目前有2個思路,一個是硬件加速,AES-NI,但這個加速目前測的最多能提升10倍左右,吞吐量還是不夠,還有一個思路是GPU加速,在CTR模式下進行並行計算加速,這個目前還沒有實現並進行測試,可參考這篇GPU accelerated AES in counter mode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章