1. 程式人生 > >用verilog實現AES密碼演算法1---一些理論準備

用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日