AES 加密算法(理解篇)

AES加密算法

截图出处来自b站可厉害的土豆

白盒AES算法详解(一)-密码应用-看雪-安全社区|安全招聘|kanxue.com

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

(其他的)

AES是分组加密算法

名为长度固定为128位,密钥长度可以是128(16字节),192,256位

每增加64位会多增加2次循环,128位循环10轮,192为12轮,256为14轮

整个过程大约为如下操作

3999375b71c52c0925f9af151cb62be4

初始变化:

3be645923792fb3b86f8e8737725f994

字节代换

先把明文按照上图排列以后与相同排列的子密钥局长分别异或

3219846cd15427629a5e07d7820e6cb8

根据异或以后表中的数字对照S盒进行字节替换(读取方法类似 一 九)

9dfb8af5578099a3791fe3b064530355

得到替换完的结果

fc557d1cd044181416765ab15d406489

行移位

c6d4fd8290501fd28c321ebe76eb4614

得到效果

image-20240412222130185

列混合

这是一种很特殊的运算,就是把我们经过上面一系列变换得到的矩阵再左乘一个固定的矩阵得到结果

image-20240412222334494

image-20240412222558319

轮密钥加

将列混合得到的矩阵和子密钥矩阵进行异或得到结果

image-20240412222653862

子密钥矩阵得到方式:

将最开始的16个字节的子密钥矩阵经过密钥扩展可以得到10个轮密钥

密钥扩展(补充)

非4倍数

如果不是4的倍数直接经过异或就可以了

a06a43bb71a6c7f51df2548ebd3ea169

如果是4的倍数就有点麻烦了

4的倍数

要将w[i-1]经过字循环,字节代换和轮常量异或三次变换,得到的结果再和w[i-4]进行异或

85e9008a773c352095a84b219a88bbbd

字循环

e9f2da7d31b54ffe973a029e85ffe1e3

字节替换

8a4b847c1332b353a2a048a839d953d5

轮常量异或

1
rcon ``=` `[``0x01``, ``0x02``, ``0x04``, ``0x08``, ``0x10``, ``0x20``, ``0x40``, ``0x80``, ``0x1B``, ``0x36``]

image-20240412225225621

注意这个轮常量的表是固定的,每一次循环就对应选择其中的第i列进行异或,这样就

最终得到结果如下

image-20240412230848349

但貌似有更简单点的做法

image-20240413000526193

列混合运算(补充)

此处符号为异或操作(原来矩阵相乘后应该是进行相加,而这里是异或)

2578b479d2f125b78ed41a2f0cba77ab

举例(up主幸苦实操)

c08224ecc41886d423273cd4c04e369f

8363b539dfbd8e70db59fb503bd4d781

a1be524df9e064e12bc8344f21bd01a2

60ce64028144f4f12680974aeca83eb7

而最终轮就是将上面的9次循环过程中去掉列混合再执行一次


AES 加密算法(理解篇)
http://example.com/2024/04/13/AES加密算法/
作者
John Doe
发布于
2024年4月13日
许可协议