当前位置: > 财经>正文

AES加密算法详解(图文解释)

2023-07-15 12:11:14 互联网 未知 财经

AES加密算法详解(图文解释)

由于DES加密算法被破解了,3DES加密算法虽然没有被破解,但是3DES算法的加解密效率低,所有现在都使用AES算法。 AES加密算法是密码学中的高级加密标准,AES为分组加密法,把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文,在AES标准规范中,分组长度只能是128位,AES是按照字节进行加密的,也就是说每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。这导致密钥长度不同,推荐加密的轮数也不同。

AES算法思想: 1)设计简单; 2)在多个平台上速度快,编码紧凑; 3)抵抗所有已知攻击; 4)没有采用Feistel结构,轮函数由3个不同的可逆均匀变换构成:非线性层、线性混合层和密钥加层。

明文P需要分组,称为状态,状态用以字节为元素的矩阵阵列表示,如图所示: 16字节明文按照此顺序放入矩阵,规则为:从上到下,从左到右,依次进行。

同样的,密钥K也需要分组,原理与明文P相同,下图为128位密钥矩阵:

下图为AES加密流程: 加密过程:C=E(K,P),其中C为加密后的密文,K为密钥,P为明文,E为加密函数。 解密过程:P=D(K,P),其中D为解密函数,解密过程为加密过程的逆运算。 AES的具体加密流程如下图所示: AES加密过程通过四个步骤实现:字节替换、行移位、列混淆和轮密钥加。 注意: 根据密钥长度不同,加密的轮数也不同,在第一轮之前要进行轮密钥加,最后一轮没有进行列混淆操作。

我们来解释一下这四个步骤的具体含义: 字节替换: 属于非线性替换,具体原理就是通过一个替换表(S盒)对每个字节进行替换,实际上就是一个查表操作,并且此过程可逆,将每一个字节的前4位作为行值,后4位作为列值,去S盒查找,进行输出。 下图为S盒(x表示行,y表示列),例如字节为0x14,那么前四位的16进制为1,后四位的16进制为4,去查找s盒中的第1行第4列的值,可以看出为0xfa,就把原先的字节0x14替换为0xfa。 解密过程与此相同,唯一就是采用的是逆S盒。

接下来是行位移操作 对于4*4的矩阵,操作为: 第0行:保持不动; 第1行:循环左移1个字节; 第2行:循环左移2个字节; 第3行:循环左移3个字节。 解密过程变为循环右移,每行移动字节数与加密过程相同,下图为列位移示意图。

接下来是列混淆操作 实际上为44的矩阵与另一个44矩阵异或相乘(注意为右乘操作),重新得到一个4*4的矩阵,如下图所示。 解密过程为重新与此矩阵异或,因为两次异或得到的值为原数据本身。 最后为轮密钥加操作 轮密钥与状态矩阵进行逐比特异或操作。 这个轮密钥是由种子密钥通过密钥编排算法得到的,并且轮密钥长度与分组长度相同。 解密过程与之相同,两次异或得到原始数据。

密钥编排算法基本原则 1)轮密钥的比特数等于分组长度乘以轮数加1; 例如:将128位比特明文进行加密,总共需要(10+1)*128=1408比特密钥。 2)种子密钥扩展为扩展密钥; 3)轮密钥从扩展密钥中取,第一轮取扩展密钥的第0~3列,依次类推。 过程为: 定义:w[0]~w[3]为初始密钥

如果i=4的倍数,即i为每组的第一列,则执行以下3个步骤 1)将w[i-1]循环左移一个字节:

w[0]w[1]w[2]w[3]w[4]2b28ab09cf7eaef74f4f15d2154f3c16a6883c09

w’[i]=w[i-1]左移一个字节得到。 w’[4]=w[3]左移一个字节得到={09,cf,4f,3c}左移一个字节={cf,4f,3c,09} 2)分别对w’[i]的每个字节进行S盒替换,本质上就是查表,再替换为另一个字节。 即查表后为w’’[i]。 例如,w’[4]查表后的w’’[4]={8a,84,eb,01},需s盒的自行查看。 3)将前两步的结果同轮常量Rcon[j]进行异或,j表示轮数,Rcon[j]如下图所示

j12345Rcon[j]01 00 00 0002 00 00 0004 00 00 0008 00 00 0010 00 00 00j678910Rcon[j]20 00 00 0040 00 00 0080 00 00 001B 00 00 0036 00 00 00

那么w[i]=w[i-4]⊕w’[i]⊕Rcon[j],此时j=1,因为为第一轮。 即w[4]=w[0]⊕w’’[4]⊕Rcon[1], 那么w[8]=w[4]⊕w’’[8]⊕Rcon[2],……

如果i≠4的倍数,即i为每组的第二、三、四列,则执行以下一个步骤 即w[i]=w[i-4]⊕w[i-1] 例如w[5]=w[1]⊕w[4],w[6]=w[2]⊕[5],……

最终的到一个扩展密钥:{w[4],w[5],w[6],w[7]},之后的每一轮密钥都是在前一轮基础上形成的。

可能说的不是很明白,后续将会补充。

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。