AES 演算法

Lemuria發表於2018-10-09

名稱

Advanced Encryption Standard 即 高階加密標準,又叫做 Rijndael演算法,是一種對稱加密演算法,它已取代了原有的 DES ,在全世界被廣泛使用。

演算法流程

演算法的輸入是明文字串,它會被轉換成多個 4 * 4 的位元組矩陣,每個矩陣被稱為 體(state)。每一個體都會進行一遍 AES 演算法流程,最終輸出加密後的字串。 AES 演算法流程:

1. AddRoundKey(輪祕鑰加): 距震中的每一個位元組都與該次會和金鑰做XOR(異或)
2. SubBytes(位元組替換): 通過一個非線性的替換函式,用查詢表的方式把每個位元組替換成對應的位元組
3. ShiftRows(行移位): 將距震中的每個橫列進行迴圈式移位
4. MixColumns(列混淆): 為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉換來混合每內聯的四個位元組。最後一個加密迴圈中省略 MixColumns 步驟,用另外一個 AddRoundKey 代替
複製程式碼

AddRoundKey(輪祕鑰加)

在每一次的加密迴圈中,都會由主金鑰生成一個回合祕鑰(Rijndael 祕鑰生成方案)。該祕鑰的大小和一個體的大小相同,都是一個 4 * 4 的矩陣。將回合祕鑰與體的對應位元組做異或操作。

AES 演算法

SubBytes(位元組替換)

經過了 AddRoundKey 步驟的矩陣,在這一步中,每個位元組都會通過 S-box(S盒) 轉換成另一個位元組。S盒具有良好的非線性特性,用於提供加密演算法的混淆性。

S盒

S盒逆

S盒 和 S盒逆 都是16 * 16 的矩陣,它們記錄了一個位元組到另一個自己的轉換和逆轉換。

ShiftRows(行移位)

在這個步驟中,4 * 4 矩陣中的每一行都向左迴圈位移某個偏移量。在 AES 中, 加密時,第一行維持不變,第二行向左迴圈移動一個位元組,第三行兩個位元組,第四行三個位元組。經過 ShiftRows 之後, 矩陣中的每一個列,都由輸入的不同列組成。這個步驟提供了 AES 的擴散性。

AES 演算法

MixColumns(列混淆)

列混淆是利用了 GF(2^8) 域上算術特性的一個代替,同樣用於提供 AES 的擴散性。

AES 演算法

安全性

針對 AES 的攻擊,對於 128 位的祕鑰來說,窮舉法需要 2的128次方 的複雜度, 目前尚未出現有效的攻擊方式。

相關文章