AES加密解密原理
AESFPGAAES加密
AES是一个对称密码,它的存在是为了取代被证明不安全的DES算法。
一、AES加密过程
![](./images/1668158509548.png)
上图为128位的加密过程,如果长度为192位,则要经过12轮加密运算,同理,256位的需要经过14轮加密。
![](./images/1668159051493.png)
以128位为例,其中9轮为循环运算,最后一轮只有步骤1,2,4,没有列混合。
明文长度固定为128位(16字节)
密钥长度可以是128、192、256位
二、初始变换
AES和DES一样是分组加密的
所以,把明文划分成若干个等长的明文块,分块进行加密、
将数据按照下图的方式进行排列,得到一个4 * 4的矩阵
将明文的4 * 4矩阵以及密钥的4 * 4矩阵进行异或操作。(按字节异或)
具体例子如下:
三、循环运算
3.1字节代换
将输入的矩阵通过这个S表,完成从一个字节到另一个字节的映射。
代换完成后如下:
3.2行移位
这个矩阵的第一行保持不变,第二行向左移动一个字节,第三行向左移动两个字节。第四行向左移动三个字节。
3.3列混合
列混合就是将输入的一个4x4的矩阵左乘一个给定的4x4矩阵。
![enter description here enter description here](./images/1668160398195.png)
enter description here
![enter description here enter description here](./images/1668171926499.png)
注意,这里的举证点乘与数学中的点成有些不同,这里的加法变成了异或运算,
![enter description here enter description here](./images/1668172036696.png)
普通的乘法变成了X乘,也就是 x-time算法
具体细节如下,
01
01与一个数相乘还是那个数本身。
02
将两个数都转为2进制,a7如果等于1,则去掉a7,左移一位,在右侧补0,然后异或00011011;a7如果等于0,则直接去掉a7,左移一位,在右侧补0。
03
对于03来说,要拆成02与01的异或,然后分别相乘,如上,最后在异或。
3.4轮密钥加
将矩阵与一个子密钥的没一列进行逐个异或,得到一个新的矩阵。
3.5子密钥扩展
一开始只有一个子密钥,需要经过循环扩展生成10轮的轮密钥。
1.如果i不是4的倍数,那么第i列由如下等式确定:
W5 = W1 W4
W6 = W2 W5
2.如果i是4的倍数,那么第i列由如下等式确定︰
这个T函数由3部分组成:字循环、字节代换和轮常量异或。
a.字循环:将1个字中的4个字节循环左移1个字节。即将输⼊字[b0, b1, b2, b3]变换成
[b1,b2,b3,b0]。
b.字节代换:对字循环的结果使⽤S盒进⾏字节代换。
c.轮常量异或:将前两步的结果同轮常量Rcon[j]进⾏异或,其中j表示轮数。
![](./images/1668162475482.png)
蓝色代表W(i-4),橙色代表字节变换后的,黄色代表轮常量里的数R(J)。
![](./images/1668161505240.png)
以此类推,得到10轮变换所需要的轮密钥。