AES加密算法|密码学|网络空间安全

算法简介

AES的全称是Advanced Encryption Standard,意思是高级加密标准。

他的出现是为了取代DES加密算法的,DES算法的密钥长度是56bit,所以算法的理论安全强度是2的56次方,现已不能满足人类对安全性的需求,所以AES诞生了

AES和DES都是分组密码,但是组的大小不一样,DES是64bit一组,AES是128bit一组,密钥长度DES是56位。但AES的密钥长度可以是128、192、256,密钥长度每多64位只会增加两次轮函数的运用,128长度是10轮,192是12轮,256是14轮。

DES是基于Feistel的机构进行加密,每一轮加密的是64位的一半,也就是32位。

而AES不具有Feistel结构,每次迭代中就加密了所有的128位,所以一般情况下,AES的轮数会比DES少

需要理解的是AES算法是面向字节的加密算法,1字节有8位,也就是8位二进制,AES这里写成16进制

算法流程图

image-20230309105529442

结构比DES看起来更简单明了一些

只有密钥生成和轮函数两部分,这里不介绍密钥生成函数,只介绍轮函数

密钥加法层

密钥K先生成K0,和明文按位异或

轮函数

字节代换

如果不考虑S盒的生成过程,那字节代换就是一个查表的过程

img

对于输入的128位,分成16个8位的二进制串,每个二进制串分成前后两个4位2进制,转换成对应的十六进制,作为查表用的行和列,找到表中对应的数就行

但是S盒是怎么产生的呢?

img

其实是经过两部分操作后得到的,首先把一个字节的数换算成10进制,就会得到0-255的一个十进制数,计算一下他在模256下的逆元,由于0没有逆元,这里规定为0是0的逆元。然后将刚刚的逆元以2进制的方法写出来,进行以下的仿射变换(本质就是一个矩阵乘法)

img

得到的就是一个字节对应的值,0到255共256种不同的字节,S盒就是打表提前计算出来所有的数的值,便于直接利用,节约时间

行位移

行位移操作很简单,就是将输入的数据竖着写为一个个规定大小的矩阵,进行位置上的变化

比如 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16记做:

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

规定的大小要看你的密钥长度是128还是192还是256,这三个分别对应4 * 4、4 * 6、4 * 8的矩阵

再根据位移表来位移就行,这三个对应的位移表不同,这里就只介绍128的

C0 C1 C2 C3
位移大小 0 1 2 3

上述表经过左移后得到的如下:

1 5 9 13
6 10 14 2
11 15 3 7
16 4 8 12

列混合

列混淆子层是AES算法中最为复杂的部分,属于扩散层,列混淆操作是AES算法中主要的扩散元素,它混淆了输入矩阵的每一列,使输入的每个字节都会影响到4个输出字节。行位移子层和列混淆子层的组合使得经过三轮处理以后,矩阵的每个字节都依赖于16个明文字节成可能。其中包含了矩阵乘法、伽罗瓦域内加法和乘法的相关知识。

主要是在扩展域GF(28)的矩阵加法与乘法,这里暂不仔细介绍

密钥加

就是异或上此轮的密钥Ki

 

博客内容均系原创,未经允许严禁转载!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇