0%

AES算法

算法简介

AES(Advanced Encryption Standard,高级加密标准),不同于RC4这种流加密算法,AES属于块加密算法,其分组长度固定为128位,仅支持128位、192位、256位的密钥长度(密钥长度每增加64位,算法的循环次数增加两轮,10、12、14),分别称为AES-128、AES-192、AES-256。AES是一种对称加密算法。

下面以明文和密钥都是128位来举例。

存储形式

16字节的明文以4*4矩阵的形式存储。按照从上至下从左至右的顺序存储。

加密过程

明文经过初始变化然后经过九轮的循环运算再经过一轮的最终轮运算即可得到密文。

最终轮相较于九轮循环运算少了列混合的过程,其余三个过程相同。

初始变换(Intial round)

明文和子密钥存储在矩阵按字节进行异或,这一过程称为初始变换

九轮循环运算

分为四个步骤字节代换行移位列混合轮密钥加

字节代换

简单来讲就是对初始变换后的明文进行查表替换,这个表就是S-box

比如初始矩阵为

第一个元素19,对应S表第一行第九列的元素d4,按照此规律进行全部的替换

S-box不是固定不变的,也就是说S-box部分可以被魔改,但是不能随意更改,要符合S-box的设计规范。

行移位

矩阵第一行不变,第二行左移一个字节,第三行左移两个字节,第三行左移三个字节

列混合

将输入矩阵左乘一个给定的4*4矩阵,但是这里的矩阵相乘的的规则不同于我们在线代课上接触的。

加和乘规则

简单来讲把替换为了异或操作

对于乘法,我们就将其规则记作下面的 ” · “再mod上m(x)吧!!!因为是在有限域2^8中,所以最终的结果不能存在大于等于八的次数

经过列混合得到

轮密钥加

将得到的矩阵与子密钥矩阵进行异或

密钥扩展

上述的过程所提及的密钥都是子密钥矩阵,子密钥矩阵是初始密钥矩阵通过密钥扩展得到的,密钥矩阵经密钥扩展得到十个子密钥矩阵,运用到十次加密中(九轮循环+最终轮)

前四列是初始的,后面的都是计算得来的,计算时讨论下标是不是4的倍数。

T函数 :字循环、字节代换、轮常量异或

字循环:将一列的四个字节循环左移一个字节如【b0,b1,b2,b3】–>【b1,b2,b3,b0】

字节代换:查S盒进行代换

轮常量异或:给定10列常量。将前两步得到的结果与轮常量Rcon[j]进行异或,j表示轮数。轮常量数组中的每一个元素为一个32位的双字,且低24位恒为0.高八位(1字节)按如下规则定义:Rcon[1]=1,Rcon[i]=2*Rcon[i-1]

重复扩展过程得到全部的子密钥矩阵

算法特征

128位(16字节)一组、S-box、列混合、行移位等过程

可以进行魔改的部分:S-box、列混合、轮密钥加、行移位等过程的顺序可以进行调整。