AES内部结构(加密部分)
作者:互联网
内容参考书:
深入浅出密码学——常用加密技术原理与应用 清华大学出版社
第四章 高级加密标准
AES的内部结构
AES是面向字节的密码:
假设状态A是由16个字节按照矩阵方式组成:
密钥K对应的矩阵是一样的形式。
字节代换层
如4-3图所示,每一轮的第一层都是字节代换层。
字节代换层可以看做是16个并行的s盒,每个s盒的输入和输出都是8位。
值得注意的是,AES使用的16个s盒是完全相同的
在这一层中,每个状态字节Ai都被替换为另一个字节Bi:S(Ai)=Bi
s盒代换是一个双向映射,即256个可能的输入(8位)都与唯一的输出一一对应,这个属性允许我们唯一地逆转s盒,这也是解密操作所需要的。
s盒的数学描述:
AES的s盒具有非常强的代数结构,可以看做一个两步的数学变换。
因为这部分和理解AES的实现关系不大,有兴趣可以看看原书,讲得很清楚。
在s盒的硬件实现部分,到底是用查找表来实现好,还是按部就班的计算好,这个问题先搁置,原书内容为:
扩散层
AES的扩散层由行移位和列混淆两个子层组成。扩散指的是将单个位的影响扩散到整个状态中。是线性操作。
行移位子层
行移位变换循环往复地将状态矩阵的第二行向右移动三个字节,将第三行向右移动两个字节,将第四行向右移动一个字节,第一行保持不变
列混淆子层
如果将行移位之后的状态表示为B,列混淆后的输出状态表示为C,即MixColumn(B)=C。
开始四个输出字节的计算方式,4*4的矩阵是固定的:
密钥加法层
密钥加法层的两个输入分别是16字节的当前状态矩阵和长度为16字节的子密钥。
这两个输入通过按位异或操作组合在一起。
128位AES有十轮需要11个子密钥,长度也是128位。
子密钥的计算是递归的,即为了得到子密钥ki,必须要知道ki-1
128位AES子密钥的编排,K是原始密钥:
最左边字的计算方式:i=1,...,10
其余三个字:i=1,...,10,j=1,2,3
g()函数首先将四个输入字节翻转(?),并执行一个按字节的s盒代换,最后与轮系数RC相加。增加非线性,消除对称性。
轮系数每轮都会改变,规则为:
标签:AES,加密,字节,16,代换,矩阵,内部结构,密钥 来源: https://www.cnblogs.com/zhanghaha-zzz/p/11716571.html