内容参考书:
深入浅出密码学——常用加密技术原理与应用 清华大学出版社
第四章 高级加密标准

AES的内部结构

AES是面向字节的密码:

AEs深度学习 aes分析深度_AEs深度学习

假设状态A是由16个字节按照矩阵方式组成:

AEs深度学习 aes分析深度_AEs深度学习_02

密钥K对应的矩阵是一样的形式。

字节代换层

如4-3图所示,每一轮的第一层都是字节代换层。

字节代换层可以看做是16个并行的s盒,每个s盒的输入和输出都是8位。

值得注意的是,AES使用的16个s盒是完全相同的

在这一层中,每个状态字节Ai都被替换为另一个字节Bi:S(Ai)=Bi

s盒代换是一个双向映射,即256个可能的输入(8位)都与唯一的输出一一对应,这个属性允许我们唯一地逆转s盒,这也是解密操作所需要的。

s盒的数学描述:

AES的s盒具有非常强的代数结构,可以看做一个两步的数学变换。

AEs深度学习 aes分析深度_递归_03


因为这部分和理解AES的实现关系不大,有兴趣可以看看原书,讲得很清楚。

在s盒的硬件实现部分,到底是用查找表来实现好,还是按部就班的计算好,这个问题先搁置,原书内容为:

AEs深度学习 aes分析深度_状态字_04

扩散层

AES的扩散层由行移位和列混淆两个子层组成。扩散指的是将单个位的影响扩散到整个状态中。是线性操作。

行移位子层

行移位变换循环往复地将状态矩阵的第二行向右移动三个字节,将第三行向右移动两个字节,将第四行向右移动一个字节,第一行保持不变

AEs深度学习 aes分析深度_AEs深度学习_05

列混淆子层

如果将行移位之后的状态表示为B,列混淆后的输出状态表示为C,即MixColumn(B)=C。

开始四个输出字节的计算方式,4*4的矩阵是固定的:

AEs深度学习 aes分析深度_状态字_06

密钥加法层

密钥加法层的两个输入分别是16字节的当前状态矩阵和长度为16字节的子密钥。

这两个输入通过按位异或操作组合在一起。

128位AES有十轮需要11个子密钥,长度也是128位。

子密钥的计算是递归的,即为了得到子密钥ki,必须要知道ki-1

128位AES子密钥的编排,K是原始密钥:

AEs深度学习 aes分析深度_按位异或_07


最左边字的计算方式:i=1,...,10

AEs深度学习 aes分析深度_递归_08


其余三个字:i=1,...,10,j=1,2,3

AEs深度学习 aes分析深度_AEs深度学习_09


g()函数首先将四个输入字节翻转(?),并执行一个按字节的s盒代换,最后与轮系数RC相加。增加非线性,消除对称性。

轮系数每轮都会改变,规则为:

AEs深度学习 aes分析深度_状态字_10