一、前言
由于一直在实习,事情有点多,一直没更新,幸运的是,我今天终于把事情做完了,终于可以准备回家过年了;那么趁现在简单介绍一下AES算法吧;
二、AES算法流程
AES(Advanced Encryption Standard)算法是一种对称加密算法,其原理采用的是迭代分组密码算法,它由轮变换函数经过数次迭代变换而成,其迭代的次数与密钥的长度有关。如果密钥长度为128bit,则一组明文需要运算10轮即可完成加解密;如果密钥长度为192bit,一组明文需要12轮运算即可完成加解密; 如果密钥长度为256bit,一组明文需要14轮运算即可完成加解密。
AES算法属于对称算法,所以解密过程为加密过程的逆过程,AES算法有多种工作模式,包括ECB模式,CBC模式,CMAC模式等;
AES算法流程是固定的,如下图所示,以128bit数据加密流程举例,总共需要计算10轮,在前面几轮中,依次是字节代换、 行移位变换、列混合变换和轮密钥加变换。最后一轮无列混合变换,从图中也能看出解密过程为加密的逆过程;
三、轮密钥加变换
在轮密钥加变换模块中,每一轮都需要使用准备好的密钥进行异或并作为下一轮的轮密钥加的数据,然后在AES控制模块中进行密钥加变换处理;
有限域中的密钥加变换对应于数据的异或运算,而异或运算再异或正好是其本身,所以密明加的逆变换仍然是密明加变换,其硬件实现框图如下所示;
四、字节变换
在AES加解密算法中,字节代换与逆代换是唯一的非线性运算,它不仅是AES加解密中稍显麻烦的模块,还是占用资源较多的模块。
如下图所示,图为字节代换的SBOX替换表,将要进行SBOX替换的字节参照如下表格将一个字节映射为另一个字节; 在进行映射时,需要把该字节的高4位作为行值,低4位作为列值,选中的字节就是变换后的字节;以8'h23为例,根据上文所述,找到表中第2行第3列,得到字节为8'h26;可见,8'h23进行代换后映射为8'h26;
五、行移位
由于AES算法执行运算的数据分组长度为128位,所以在行移位模块的设计中, 首先将128位输入数据转换为数组表示的状态矩阵,每个矩阵为128/16=8bit,然后对状态矩阵的每一行分别进行移位长度不等的行移位操作,行移位是通过循环左移实现,而逆行移位通过循环右移实现,但每一行所移动的位数都与行数有关。该模块实现较为简单,移位操作通过循环赋值实现,行号为0的字节均保持不变,行号为1的每个字节数据往左或往右移动一位,行号为2的字节数据往左或往右移动两位,行号为3的字节数据则往左或往右移动三位。最后将移位结果进行状态矩阵输出转换,输出长度为128位的数据。行移位操作的效果如图所示:
六、列混合
对一个状态的每一列去乘一个矩阵
计算方式如图:
根据列混合运算的原理,设字节b={b7,b6,b5,b4,b3,b2,b1,b0},则系数矩阵与该字节相乘时,有如下式1.7所示换算:
由此得出列混合运算中的有限域乘法运算可化简为乘2操作与异或操作的混合运算,乘2的具体运算过程如式1.8所示。
七、AES加密流程框图
加密时,按以下步骤执行;
八、密钥扩展
密钥扩展模块采用与加解密过程并行处理的方式,即密钥生成和除轮密钥加轮运算的其他模块一起执行,该模块实现依据为AES算法中的密钥扩展产生原理。将输入的128位密钥Key分为4个32位的字段,经过密钥扩展模块的运算后,扩展输出每轮变换轮密钥加运算需要的44个密钥列。密钥扩展过程如下图所示;
首先对w[i-1]进行字循环操作,即循环左移一个字节,此过程与加密轮变换中的行移位类似。其次通过S-box对字循环后的结果进行字节代换,最后将字节代换后的结果与轮常量Rcon[j]异或,且参与异或运算的轮常量Rcon[j]的数据位宽为32位,j代表当前轮数,其中,轮常量Rcon的每轮固定值如下表5.4所示,表中的值以16进制展示:
九、加密举例
文章来源:https://www.toymoban.com/news/detail-441644.html
文章来源地址https://www.toymoban.com/news/detail-441644.html
到了这里,关于AES算法介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!