算法3_AES(对称加密算法之高级加密算法)
AES的种类
AES种类 | 密钥长度(bit) | 分组长度(bit) | 加密轮数 | 明文长度(bit) | 密文长度(bit) |
---|---|---|---|---|---|
AES-128 | 128 | 128 | 10 | 128 | 128 |
AES-192 | 192 | 128 | 12 | 128 | 128 |
AES-256 | 256 | 128 | 14 | 128 | 128 |
分组长度和明文长度是一样。对于明文以128位为一个分组作为AES对称加密算法的输入.
FabricV2.2中AES的密钥长度为32Bytes即256位,所以以下研究256位的AES-256
AES-256
AES算法主要有四种操作处理:分别是(Add Round Key)、(Sub Byte)、(Shift Rows)、(Mix Column)
明文和密钥矩阵的形式排列
128位明文从上到下,从左到右进行排列成4*4的字节矩阵
256位密钥从上到下,从左到右进行排列成4*8的字节矩阵
AES基本原理图![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4e2bcb41b65313128949c98018f68f8f.png)
对于AES256的上图解释:
上图引用自“于松林. 基于FPGA的AES算法设计与实现[D].解放军信息工程大学,2017.”
- 初始密钥就是256位的主密钥
- 轮密钥加就是Add Round Key
- 字节替换就是Sub Byte
- 行变换就是Shift Rows
- 列混合就是Mix Column
- Nr=14
回合密钥和主密钥(密钥扩展)
AES256对称加密算法中,256位是主密钥(初始密钥),但是AES256是循环加密的一种对称加密算法
通过密钥扩展算法事先生成每个回合需要的128位回合密钥
基本过程是:
- 输入一个密钥矩阵128位生成128位的子密钥
- 循环Nr+1=15次所以一共生成4*(Nr+1)字的密钥,
Add Round Key
当前分组与回合密钥进行异或运算
Sub Byte
分组矩阵中每个字节通过一个8位的S-盒进行转换
AES中加密盒S-盒采用的是16*16的二维矩阵,将分组数据的每个字节高4位作为行号,低4位作为列号
上图摘自密码学基础:AES加密算法
基本过程:
对
于
分
组
矩
阵
中
的
每
个
字
节
A
i
,
j
=
[
a
7
,
a
6
,
a
5
,
a
4
,
a
3
,
a
2
,
a
1
,
a
0
]
对于分组矩阵中的每个字节A_{i,j}=[a_7,a_6,a_5,a_4,a_3,a_2,a_1,a_0]
对于分组矩阵中的每个字节Ai,j=[a7,a6,a5,a4,a3,a2,a1,a0]
取 a 0 , a 1 , a 2 , a 3 组 成 的 值 作 为 列 号 ; 取 a 4 , a 5 , a 6 , a 7 的 值 作 为 行 号 . 查 S 表 得 到 变 换 值 B i , j 取a_0,a_1,a_2,a_3组成的值作为列号;取a_4,a_5,a_6,a_7的值作为行号.查S表得到变换值B_{i,j} 取a0,a1,a2,a3组成的值作为列号;取a4,a5,a6,a7的值作为行号.查S表得到变换值Bi,j
最 终 可 以 获 得 由 B i , j 1 ≤ i ≤ 16 1 ≤ j ≤ 16 组 成 的 4 × 4 的 字 节 转 换 矩 阵 最终可以获得由B_{i,j}\quad 1\leq i \leq 16 \quad 1\leq j \leq 16 \quad 组成的4\times 4的字节转换矩阵 最终可以获得由Bi,j1≤i≤161≤j≤16组成的4×4的字节转换矩阵
Shift Rows
矩阵中的每一行的各个字节循环向左方位移,位移量按照行标号递增而递增
Mix Column
基本过程如下:
取
分
组
矩
阵
中
的
某
列
[
a
1
,
i
,
a
2
,
i
,
a
3
,
i
,
a
4
,
i
]
分
别
作
为
1
,
x
,
x
2
,
x
3
的
系
数
取分组矩阵中的某列 [a_{1,i},a_{2,i},a_{3,i},a_{4,i}] 分别作为1,x,x^2,x^3的系数
取分组矩阵中的某列[a1,i,a2,i,a3,i,a4,i]分别作为1,x,x2,x3的系数
即 A ( x ) = ( a 4 , i × x 3 + a 3 , i × x 2 + a 2 , i × x + a 1 , i ) 即A(x)=(a_{4,i}\times x^3+a_{3,i} \times x^2+a_{2,i}\times x+a_{1,i}) 即A(x)=(a4,i×x3+a3,i×x2+a2,i×x+a1,i)
C ( x ) = 3 × x 3 + x 2 + x + 2 C(x)=3\times x^3+x^2+x+2 C(x)=3×x3+x2+x+2
生 成 的 结 果 每 一 列 为 [ b 1 , i , b 2 , i , b 3 , i , b 4 , i ] , B = ( A ( x ) × C ( x ) ) m o d ( x 4 + 1 ) m o d 为 多 项 式 模 运 算 生成的结果每一列为[b_{1,i},b_{2,i},b_{3,i},b_{4,i}],B=(A(x)\times C(x))mod(x^4+1) \quad mod为多项式模运算 生成的结果每一列为[b1,i,b2,i,b3,i,b4,i],B=(A(x)×C(x))mod(x4+1)mod为多项式模运算
总结:
- AES高级加密算法根据主密钥的长度可以分为AES128,AES192以及AES256.
- 无论哪种AES高级加密算法明文长度都是128位,密文长度都是128位.
- 明文和密钥都是在加密过程中都是以矩阵的形式.
- 无论那种AES高级加密算法都是回合循环加密算法,主要由4种基本操作组合而成.
- 4种基本操作:轮密钥加(Add Round Key)、字节替换(Sub Byte)、行变换(Shift Rows)、列混合(Mix Column).
参考文献:
[1]于松林. 基于FPGA的AES算法设计与实现[D].解放军信息工程大学,2017.