AES加密算法
概念
AES(Advanced Encryption Standard)
DES(Data Encryption Standard)
AES 是迭代型算法,它是输入和输出反复迭代多轮计算
分组长度128bit 16Byte 密钥长度 128/192/256 轮数 10/12/14
常用填充算法:PKCS7
常用分组工作模式:GCM
AES的三种密钥长度:
AES密钥长度
AES的加密步骤:
把明文按照128bit(16字节)拆分成若干个明文块,每个明文块是4*4矩阵
按照选择的填充方式来填充最后一个明文块
每一个明文块利用AES加密器和密钥,加密成密文块
拼接所有的密文块,成为最终的密文结果
AES加密流程
AES加密流程1)AddRoundKey步骤
image.png这里的密钥并不是原始的密钥,是做过密钥扩展算法的
image.png密钥扩展是把每一轮使用的密钥生成下一轮使用的不同的新密钥
每一轮密钥是一个4*4 16字节的矩阵,先把每四个字节构成一个字,每个字4字节,把矩阵变成了4个元素的数组,基于g函数和异或生成下一轮的密钥
2)SubBytes步骤
image.png3)ShiftRows步骤
image.png4)MixColumns步骤
image.png字节代换
image.pngAES的S盒
image.png image.png image.png image.png上述S-盒对状态的所有字节所做的变换记为ByteSub (State)
image.png逆字节代换与逆S盒
逆字节替代变换是字节替代变换的逆变换,记为InvSubBytes(),在状态的每个字节上应用逆S盒。这是通过应用字节替代变换中的仿射变换的逆变换,再对所得结果应用 有限域的乘法逆运算得到的,即
image.pngAES的逆S盒:
image.png行移位
将状态阵列的各行进行循环移位,不同行的移位量不同,记为 ShiftRow(State)
第0行:保持不变
第1行:循环左移C1个字节
第2行:循环左移C2个字节
第3行:循环左移C3个字节
逆行移位
逆行移位变换是行移位变换的逆变换,记为InvShiftRows(),它对状态的每一行进行循环右移
第0行:保持不变
第1行:循环右移C1个字节
第2行:循环右移C2个字节
第3行:循环右移C3个字节
列混淆
image.png image.png逆列混淆
image.png轮密钥加
轮密钥与状态进行逐比特异或,表示为AddRoundKey(State,RoundKey)。轮密钥由种子密钥通过密钥编排算法得到,轮密钥长度与分组长度相同。
数学基础
image.png乘法操作
image.png参考:
https://blog.csdn.net/qq_40378034/article/details/114222341
《Web协议详解与抓包实战》:https://time.geekbang.org/course/intro/100026801
《HTTPS协议:点外卖的过程原来这么复杂》:https://time.geekbang.org/column/article/9492
现代密码学0x10|AES的轮函数
https://zhuanlan.zhihu.com/p/535728030
AES加密算法原理
https://blog.csdn.net/qq_43065505/article/details/104140158