参考:
AES加密算法的详细介绍与实现_TimeShatter的博客-CSDN博客_aes加密
https://blog.csdn.net/u012470144/article/details/81259115
https://blog.csdn.net/guidao13/article/details/84135099
AES算法
高级加密标准(AES,Advanced Encryption Standard)为分组密码,明密文分组长度都是128位(16字节),密钥的长度可以使用128位、192位或256位。在设计上,AES未采用DES算法的Feistel结构,而是采用了SP结构。
AES算法产生
尽管DES算法本身并无设计缺陷,但由于计算硬件的飞速发展,DES的56位密钥空间已经无法经受住高速密钥穷举攻击。为扩展密钥空间,168位密钥空间的三重DES后来被广泛应用,但三次DES串行加密也有明显的弊端,那就是加解密效率的降低。
鉴于DES可以被破解和加密效率不高的缺陷,美国的NIST(National Institute of Standards and Technology,国家标准技术研究所)在2000年通过选拔,从多个候选算法中确认了Rijndael算法为最新的AES算法,成为联邦信息处理标准(FIPS)。Rijndael是由比利时密码学家Joan Daemen和Vincent Rijmen设计的分组密码算法。
加密流程简述:
1.明文分块:把明文块按照128bit拆分成若干个明文块,按照选择的填充方式来填充最后一个明文块;
2.密钥扩展:使用密钥扩展算法将128位用户主密钥扩展成R个轮密钥;
3.加密:每一个明文块利用AES加密器和密钥,加密成密文块:
- 初始轮密钥加
- Nr-1圈标准轮函数:字节替换、行移位、列混合、轮密钥加;
- 最终圈非标准轮函数:字节替换、行移位、、轮密钥加;
4.拼接所有的密文块,输出密文。
注意:
1、明文、密文128位,密钥可为128、192、256位;本文以密钥为128位为例!
2、作为DES的替代算法,AES在设计上满足以下标准:
- 和DES一样,能有效抵御所有已知攻击;
- 加密算法易于现有软硬件平台的实现,且加解密过程效率优于DES;
- 具有典型的对称分组加密算法特性,以快速混淆和扩散为设计原则,本质是轮函数过程的循环。
AES算法流程
一、确定加密轮数->算法迭代圈数->子密钥数
AES的处理单位是字节,明文分组长度和密钥长度不同,加密轮数不同(10~14轮),以明文长度128位,密钥长度128位为例,128位的输入明文分组P和输入密钥K都被分成16个字节。加密轮数确定方法如下。 ----数据表示:按列优先
1、明密文块分组:128位
将明文块、密钥分组,分别记为P = P0 P1 … P15 和 K = K0 K1 … K15。如:明文块分组为P = abcdefghijklmnop,其中的字符a对应P0,p对应P15。
明文块分组:
确定Nb:状态分为四行,Nb列(AES中Nb=128位/32=4)
密钥分组:
确定Nk:方法同上,密钥也可分为四行、Nk列(Nk=密钥长度/32);
2、确定Nr:迭代圈数Nr由Nb和Nk共同决定:
Rijndael 算法的数据块长度和密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立的选定为大于等于128且小于等于256位的32位的任意倍数。
实际应用的AES,明文块为128位,Nr确定如下:
从分组的角度看加密过程,明文分组以字节为单位的正方形矩阵描述,称为状态矩阵S。在算法的每一轮中,状态矩阵的内容不断发生变化,最后的结果作为密文输出。该矩阵中字节的排列顺序为从上到下、从左至右依次排列,如下图所示:
二、密钥扩展->圈密钥产生
将密钥扩展为44个圈密钥:初始轮密钥4个+加密10轮迭代40个圈密钥。128位密钥用字节为单位的矩阵表示,矩阵的每一列被称为1个32位比特字,通过密钥编排函数该密钥矩阵被扩展成一个44个字组成的序列W[0],W[1], … ,W[43]。
该序列的前4个元素W[0],W[1],W[2],W[3]是原始密钥,用于加密运算中的初始轮密钥加;
后面40个字分为10组,每组4个字(128比特)分别用于10轮加密运算中的轮密钥加。
1、扩展方法
将初始密钥输入到一个4*4的状态矩阵中,如图所示:
4*4矩阵的每一列的4个字节组成一个字,矩阵4列的4个字依次命名为W[0]、W[1]、W[2]和W[3],它们构成一个以字为单位的数组W。例如,设密钥K为"abcdefghijklmnop",则K0 = ‘a’,K1 = ‘b’, K2 = ‘c’,K3 = ‘d’,W[0] = “abcd”,依次得到W[1]、W[2]和W[3]。接着,对W数组扩充40个新列,构成总共44列的扩展密钥数组。新列以如下的递归方式产生:
a.如果i不是4的倍数,那么第i列由如下等式确定:W[i]=W[i-4]⨁W[i-1]
b.如果i是4的倍数,那么第i列由如下等式确定:W[i]=W[i-4]⨁T(W[i-1])
其中,T是一个有点复杂的函数,函数T由3部分组成:字循环、字节代换和轮常量异或,其作用分别如下:
a.字循环:将1个字中的4个字节循环左移1个字节。即将输入字[b0, b1, b2, b3]变换成[b1,b2,b3,b0];
b.字节代换:对字循环的结果使用S盒进行字节代换;
c.轮常量异或:将前两步的结果同轮常量Rcon[j]进行异或,其中j表示轮数。轮常量Rcon[j]是一个字,其值见下表。
j | 1 | 2 | 3 | 4 | 5 |
Rcon[j] | 01 00 00 00 | 02 00 00 00 | 04 00 00 00 | 08 00 00 00 | 10 00 00 00 |
j | 6 | 7 | 8 | 9 | 10 |
Rcon[j] | 20 00 00 00 | 40 00 00 00 | 80 00 00 00 | 1B 00 0000 | 36 00 00 00 |
2、密钥扩展总结如下:
a)字转化:将初始密钥以列为主,转化为4个32 bits的字,分别记为w[0…3];
b)密钥扩展:用户将密钥扩展为一个扩展密钥。
若i%4=0,则w[i]=w[i-4]⊕T(w[i-1]),否则w[i]=w[i-4]⊕w[i-1];
c)圈密钥选择:从扩展密钥中选出圈密钥,第一个圈密钥由扩展密钥中的前Nb个字节组成,第二个圈密钥由接下来的Nb个字节组成,以此类推。按照如下方式,依次求解w[i],其中i是整数并且属于[4,43];
注意:
1、圈密钥的比特总数为数据块长度与圈数加1的积。
2、密钥扩展另一种说法:
a.当Nk<=6时:1) W[0],W[1]...W[Nk]依次填充;2) 扩展:若I%Nk==0,Temp=T(w[i-1]),w[i]=w[i-Nk]⊕Temp;否则,w[i]=w[i-Nk]⊕w[i-1]。
b.当Nk>6时:1) W[0],W[1]...W[Nk]依次填充;2) 扩展:若I%Nk==0,Temp=T(w[i-1]),若I%Nk==4,Temp=S(Temp),w[i]=w[i-Nk]⊕Temp;否则,w[i]=w[i-Nk]⊕w[i-1]。
三、加密解密
AES加密过程涉及到4种操作:字节替代、行移位、列混淆和轮密钥加。
1、初始轮密钥加(AddRoundKey):将明文矩阵与子密钥矩阵的对应字节进行逐比特异或,明文矩阵⊕(W[0],W[1],W[2],W[3])
得到初始圈密钥加后状态矩阵S:
2、Nr-1圈标准轮函数f
a.S盒变换(ByteSub):按字节进行;高行低列,查表可得。
举例说明如下:
b.行移位变换(ShiftRows):将每行进行循环左移;0行不移,i行左移i个字节。
举例说明如下:
c.列混合变换(MixColumns):将State乘以一个固定的矩阵A,对State进行逐列进行变换,直到4列都变换完毕。
举例说明如下:
d.圈密钥加:将状态矩阵与子密钥矩阵的对应字节进行逐比特异或
e.循环进行Nr-1轮。
3、最后一圈非标准轮函数:不进行列混合变换
解密
AES解密过程,解密过程仍为10轮,每一轮的操作是加密操作的逆操作。由于AES的4个轮操作都是可逆的,因此,解密操作的一轮就是顺序执行逆行移位、逆字节代换、轮密钥加和逆列混合。同加密操作类似,最后一轮不执行逆列混合,在第1轮解密之前,要执行1次密钥加操作。
AES算法相关
1、AES算法特点
- 分组算法:分组长度128位;
- 安全性:不存在弱密钥:对密钥的选择无限制,未发现弱密钥以及半弱密钥;抗攻击能力强:可以抵抗穷举攻击、线性攻击、差分攻击;
- 适应性强:密钥长度可变,128、192、256位;;
- 采用SP结构:
2、AES算法应用
- 无线网络:IEEE802.11i在数据加密方面定义的CCMP、WRAP和TKIP三种加密机制;
- SSL/TSL;
- 语音、视频信息加密:微信小程序;
- 车辆啊远程无钥进入(RKE)系统、数据库加密、收费系统、PLC等多项领域。
注意:
如有错误、侵权,请联系笔者更改删除!!!