密碼演算法詳解 AES

2021-07-22 12:40:02 字數 2797 閱讀 5038

美國國家標準技術研究所在2023年發布了高階加密標準(aes)。aes是乙個對稱分組密碼演算法,旨在取代des成為廣泛使用的標準。

根據使用的密碼長度,aes最常見的有3種方案,用以適應不同的場景要求,分別是aes-128、aes-192和aes-256。本文主要對aes-128進行介紹,另外兩種的思路基本一樣,只是輪數會適當增加。

aes加解密的流程圖如下:

aes加密過程涉及到4種操作:位元組替代(subbytes)、行移位(shiftrows)、列混淆(mixcolumns)和輪金鑰加(addroundkey)。解密過程分別為對應的逆操作。由於每一步操作都是可逆的,按照相反的順序進行解密即可恢復明文。加解密中每輪的金鑰分別由初始金鑰擴充套件得到。演算法中16位元組的明文、密文和輪金鑰都以乙個4x4的矩陣表示。

接下來分別對上述5種操作進行介紹。

位元組代替的主要功能是通過s盒完成乙個位元組到另外乙個位元組的對映。s盒的詳細構造方法可以參考文獻[1]。

下圖(a)為s盒,圖(b)為s-1(s盒的逆)。

s和s-1分別為16x16的矩陣。假設輸入位元組的值為a=a7a6a5a4a3a2a1a0,則輸出值為s[a7a6a5a4][a3a2a1a0],s-1的變換也同理。

例如:位元組00替換後的值為(s[0][0]=)63,再通過s-1即可得到替換前的值,(s-1 [6][3]=)00。

行移位的功能是實現乙個4x4矩陣內部位元組之間的置換。

正向行移位的原理圖如下:

實際移位的操作即是:第一行儲存不變,第二行迴圈左移1個位元組,第三行迴圈左移2個位元組,第四行迴圈左移3個位元組。假設矩陣的名字為state,用公式表示如下:state』[i][j] = state[i][(j+i)%4];其中i、j屬於[0,3]

逆向行移位即是相反的操作,用公式表示如下:state』[i][j] = state[i][(4+j-i)%4];其中i、j屬於[0,3]

列混淆:利用gf(28)域上算術特性的乙個代替。

正向列混淆的原理圖如下:

根據矩陣的乘法可知,在列混淆的過程中,每個位元組對應的值只與該列的4個值有關係。此處的乘法和加法都是定義在gf(28)上的,需要注意如下幾點:

1)將某個位元組所對應的值乘以2,其結果就是將該值的二進位制位左移一位,如果該值的最高位為1(表示該數值不小於128),則還需要將移位後的結果異或00011011;[1]

2) 乘法對加法滿足分配率,例如:07·s0,0=(01⊕02⊕04)·s0,0= s0,0⊕(02·s0,0)(04·s0,0)

3) 此處的矩陣乘法與一般意義上矩陣的乘法有所不同,各個值在相加時使用的是模2加法(相當於是異或運算)。

假設某一列的值如下圖,運算過程如下:

同理可以求出另外幾個值。

逆向列混淆的原理圖如下:

由於:

說明兩個矩陣互逆,經過一次逆向列混淆後即可恢復原文。

任何數和自身的異或結果為0。加密過程中,每輪的輸入與輪金鑰異或一次;因此,解密時再異或上該輪的金鑰即可恢復輸入。

金鑰擴充套件的原理圖如下:

金鑰擴充套件過程說明:

1)  將初始金鑰以列為主,轉化為4個32 bits的字,分別記為w[0…3];

2)  按照如下方式,依次求解w[j],其中j是整數並且屬於[4,43];

3)  若j%4=0,則w[j]=w[j-4]⊕g(w[j-1]),否則w[j]=w[j-4]⊕w[j-1];

函式g的流程說明:

4)  將w迴圈左移乙個位元組;

5)  分別對每個位元組按s盒進行對映;

6)  與32 bits的常量(rc[j/4],0,0,0)進行異或,rc是乙個一維陣列,其值如下。(rc的值只需要有10個,而此處用了11個,實際上rc[0]在運算中沒有用到,增加rc[0]是為了便於程式中用陣列表示。由於j的最小取值是4,j/4的最小取值則是1,因此不會產生錯誤。)

rc =

在github上找到的aes實現**,感覺寫得不錯。

[1] william stallings著;王張宜等譯. 密碼編碼學與網路安全——原理與實踐(第五版)[m]. 北京:電子工業出版社,2011.1.

密碼演算法詳解 AES

美國國家標準技術研究所在2001年發布了高階加密標準 aes aes是乙個對稱分組密碼演算法,旨在取代des成為廣泛使用的標準。根據使用的密碼長度,aes最常見的有3種方案,用以適應不同的場景要求,分別是aes 128 aes 192和aes 256。本文主要對aes 128進行介紹,另外兩種的思路...

AES密碼演算法

此演算法,是以金鑰128位為例,輸入輸出都是十六進製制。測試資料 明文 32 43 f6 a8 88 5a 30 8d 31 31 98 a2 e0 37 07 34 金鑰 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c 密文 39 25 84 1d ...

密碼演算法詳解 AES 高階加密演算法

美國國家標準技術研究所在2001年發布了高階加密標準 aes aes是乙個對稱分組密碼演算法,旨在取代des成為廣泛使用的標準。根據使用的密碼長度,aes最常見的有3種方案,用以適應不同的場景要求,分別是aes 128 aes 192和aes 256。本文主要對aes 128進行介紹,另外兩種的思路...