说明:本内容参考B站UP主“可厉害的土豆”的视频讲解,强烈推荐一下该宝藏UP主
【AES加密算法】| AES加密过程详解| 对称加密| Rijndael-128| 密码学| 信息安全_哔哩哔哩_bilibili
本次内容讲解只针对数据加密,数据解密则是逆运算(主要是我还没整理,你先自行理解一下)
1.AES加密算法的设计流程
AES属于分组加密算法,算法规定需要将明文划分成组,每组的数据长度位128位。而密钥长度可以是128位、192位、256位。其主要区别就是加密轮数不一样,128位的是10轮,192位的是12轮,256位的是14轮。本文以128位密钥为讲解用例。
2.初始变换
1)串行转矩阵
这里是以字节位单位,所以,16个单元就对应128位(128bit的密钥矩阵是44,如果是192位的则应该是46;256位的就是4*8)。这个转换是针对明文和密钥两者的,两者都得转才能进行后面的运算。
2)初始化运算
将第一组明文矩阵与对应的密钥矩阵进行异或运算,运算规则如上图所示
3.9轮循环运算
1)字节代换(SubBytes)
初始化运算后的矩阵A,将A矩阵中的每一位对应的查找表中数据取出,替换A矩阵上的值。即用检索结果替换检索值。
① 检索表
检索表是AES算法定义的,专业称呼为S盒,解码的时候所用的叫逆S盒,
② 检索值替换
原矩阵上的数据作为索引值(index),检索到的结果作为替换后的值,如上图所示。
2)行移位(ShiftRows)
规则:第一行保持不动,第二行左移一位,第三行左移两位,第四行左移三位。注意看下图矩阵数值的位置变化。
3)列混合(MixColumns)
将输入的44矩阵左乘一个给定的44矩阵,但这里的矩阵相乘不是普通意义上的先相乘再相加。原先的相加运算更换成异或运算,原先的相乘也有相应变化,注意看下文介绍。
乘法规则介绍:
** case1:(0000 0001)**
** case2:(0000 0010)**
* 说明一下,这里异或上00011011是运算规则(跟GF(2^8)域运算有关系,后续会补充进来)。
**case3:(0000 0011)**
其他的数可以拆分成上述的情况,而后进行计算。
4)轮密钥加(AddRoundKey)
子密钥矩阵产生:由最初的轮密钥矩阵扩展得来,例如10轮加密,每轮就会产生1个子密钥。
w[i]计算规则:
●i不是4的倍数:w[i] = w[i-4] ⊕ w[i-1] (按照公式直接带入计算即可,此类情况比较简单)
● i是4的倍数:w[i] = w[i-4] ⊕ T(w[i-1])(T函数:字循环+字节替换+轮常量异或)
⑴ step1:字循环,将输入字[b0,b1,b2,b3]变换成[b1,b2,b3,b0](列操作)
⑵ step2:字节代换,查找表,对应数替换
⑶ step3:轮常量异或:上一环节所得到的结果与同轮常量R[j]进行异或,j表示轮数。而这个轮常量是给定的
4.1轮最终轮
此环节就是那个10轮加密的最后一轮,而它与前面9轮加密的不同之处在于,四个环节中少了列混合这一环节,其他的都一样。(1-字节替换;2-行移位;3-列混合;4-轮密钥加)
5.密文输出
经过前面的加密过程就完成了一组数据的完整的AES算法加密。
版权归原作者 少卿不在大理寺 所有, 如有侵权,请联系我们删除。