用verilog實現AES密碼算法1---一些理論準備

用verilog實現AES密碼算法1—一些理論準備

這兩週做了一個課程設計,是AES密碼算法的加解密,用verilog實現的,因爲從原理到設計花了一些時間,筆記本上記錄了一堆厚厚的分析資料,俗話說好記性不如爛筆頭,我覺得有必要記錄這些工作。

AES算法總體介紹

AES算法的分組長度和密鑰長度均能被獨立指定爲128位、192位或256位,密鑰長度不同,則加密輪數不同。本次實驗以密鑰長度128位,加密10輪爲例,算法中16字節的明文、密文和輪密鑰都以一個4x4的矩陣表示。下圖爲AES算法加解密的流程圖:
 AES加解密流程圖
AES加密過程涉及到4種操作:分別是字節替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和輪密鑰加(AddRoundKey)。解密過程分別爲對應的逆操作。由於每一步操作都是可逆的,按照相反的順序進行解密即可恢復明文。加解密中每輪的密鑰分別由初始密鑰擴展得到。下面是AES一輪加密的過程。
AES一輪加密

字節代換

字節代換的主要功能是通過S盒完成一個字節到另外一個字節的映射,也可以簡化爲一個簡單的查表操作。S盒用於加密查表,逆S盒用於解密查表。它們都是由1616字節組成的矩陣,即矩陣共有256元素,每元素的內容是一個1個字節(8bit)的值,且每個元素各不相同。狀態矩陣中的元素按照下面的方式映射爲一個新的字節;把該字節的高4位作爲行值,低四位作爲列值,取出S盒或者逆S盒中對應行列的元素作爲輸出。AES定義了一個S盒和一個逆S盒,下圖AES算法的S盒和逆S盒表格。
AES的s盒

行移位

行移位的功能是實現一個4x4矩陣內部字節之間的置換。它分爲正向行移位和行移位逆變換。
正向行移位(左移)
這是一個簡單的左循環移位操作。128bit時,狀態矩陣的第0行左移0字節,第一行左移1字節,第2行左移2字節…正向行移位的原理圖如下:
行移位(左移)
行移位逆變換(右移)
這是一個簡單的右循環移位操作。當密鑰長度爲128bit時,狀態矩陣的第0行右移0字節,第一行右移1字節,第2行右移2字節
行移位逆變換(右移)

列混淆

列混淆變換是通過矩陣相乘來實現的,分爲正向列混淆和列混淆逆變換,經行移位後的狀態矩陣與固定的矩陣相乘,得到混淆後的狀態矩陣。正向列混淆的原理圖如下:
正向列混淆
根據矩陣的乘法可知,在列混淆的過程中,每個字節對應的值只與該列的4個值有關係。此處的乘法和加法都是定義在GF(28)上的,需要注意如下幾點:
(1) 將某個字節所對應的值乘以2,其結果就是將該值的二進制位左移一位,如果該值的最高位爲1(表示該數值不小於128),則還需要將移位後的結果異或00011011;
(2) 此處的矩陣乘法與一般意義上矩陣的乘法有所不同,各個值在相加時使用的是模2加法(相當於是異或運算)。
下面是列混淆逆運算的矩陣乘法定義:
列混淆逆運算

密鑰擴展

AES首先將初始密鑰輸入到一個4*4矩陣中,如圖3所示,這個44矩陣的每一列的4個字節組成一個字,矩陣4列的4個字依次命名爲ω[0]、ω[1]、ω[2]、ω[3].它們構成了一個以字爲單位的數組ω。
由初始密鑰得到擴展密鑰的前4項
接着,對ω數組擴充40個新列,構成總共44列的擴展密鑰數組,新列以如下的遞歸方式產生:
(1) 若i不是4的倍數,那麼第i列由 這裏寫圖片描述確定;
(2) 若i是4的倍數,那麼第i列由這裏寫圖片描述 確定。
其中g是一個複雜的函數,其組成如下圖4所示
 g函數結構圖  g函數結構圖
由圖4看出,g函數由字循環、字節代換和輪常量異或三部分組成,這三部分的作用分別如下:
(1) 字循環:將1個字中的4個字節循環左移1個字節;
(2) 字節代換:對字循環的結果使用S盒(參照圖1)進行字節代換;
(3) 輪常量異或:對前兩步的結果同輪常量Rcon[j](其值見表5)進行異或,其中j代表輪數。
輪常量Rcon[j]是一個字,其值見表。

j 1 2 3 4 5 6 7 8 9 10
Rcon[j] 01000000 02000000 04000000 08000000 10000000 20000000 40000000 80000000 1B000000 36000000

輪密鑰加

輪密鑰加是將128位輪密鑰Ki同狀態中的數據進行逐位的異或操作,輪密鑰由密鑰擴展所得。

總結一下

今天總結了AES的結構和各模塊的劃分,下面幾章就要分模塊寫出verilog的代碼。

第一次使用CSDN的這個markdown做筆記還有一些不熟悉的地方,排版這些以後寫多了慢慢再改的好看一些。
keep calm and carry on.

Bruce李
西安電子科技大學
2017年6月6日

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