3、AES算法

参考:

 AES加密算法的详细介绍与实现_TimeShatter的博客-CSDN博客_aes加密 

https://blog.csdn.net/u012470144/article/details/81259115

https://blog.csdn.net/guidao13/article/details/84135099


AES算法

AES算法产生

AES算法流程

AES算法相关


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等多项领域。

注意:

如有错误、侵权,请联系笔者更改删除!!!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三九笔墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值