📖 前言:美国国家标准和技术协会(NIST)于2001年发布了高级加密标准(AES)。AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。
目录
🕒 0. 思维导图
🕒 1. AES的应用
无线路由器安全性能最高的认证方式WPA2-PSK
使用的加密算法正是高级加密标准AES
近距离无线通信ZigBee,为确保MAC帧的完整性、机密性、真实性和一致性,其MAC层使用AES算法进行加密
HTTPS中的安全传输层协议TLS,使用的对称加密算法也是AES
🕒 2. AES的发展史
Rijndael算法的设计力求满足以下标准:
(1)抵抗所有已知攻击
(2)在多个平台上速度快、编码紧凑
(3)设计简单、灵活
🕒 3. AES的数学基础——有限域算术
🕘 3.1 有限域GF(23)
定义:
G
F
(
2
3
)
=
f
(
x
)
GF(2^3) = {f(x)}
GF(23)=f(x)
f
(
x
)
=
a
2
x
2
+
a
1
x
+
a
0
f(x) = a_2x^2 + a_1x + a_0
f(x)=a2x2+a1x+a0
- 定义一个多项式集合 𝑮𝑭(𝟐𝟑)
- 集合共有𝟐𝟑个多项式,每个多项式形式如下
- 多项式的每个系数𝒂𝒊 取值0/1
a 2 a 1 a 0 f ( x ) = a 2 x 2 + a 1 x + a 0 000 0 001 1 010 x 011 x + 1 100 x 2 101 x 2 + 1 110 x 2 + x 111 x 2 + x + 1 \begin{array}{|c|c|} \hline a_{2} a_{1} a_{0} & f(x)=a_{2} x^{2}+a_{1} x+a_{0} \\ \hline 000 & 0 \\ \hline 001 & 1 \\ \hline 010 & x \\ \hline 011 & x+1 \\ \hline 100 & x^{2} \\ \hline 101 & x^{2}+1 \\ \hline 110 & x^{2}+x \\ \hline 111 & x^{2}+x+1 \\ \hline \end{array} a2a1a0000001010011100101110111f(x)=a2x2+a1x+a001xx+1x2x2+1x2+xx2+x+1
表示: G F ( 2 3 ) = { 000 , 001 , 010 , 011 , 100 , 101 , 110 , 111 } GF(2^3) = \{000,001,010,011,100,101,110,111\} GF(23)={000,001,010,011,100,101,110,111}
- 对于 G F ( 2 3 ) GF(2^3) GF(23)内的每一个多项式,可以用它的系数 𝒂 𝟐 𝒂 𝟏 𝒂 𝟎 𝒂_𝟐 𝒂_𝟏 𝒂_𝟎 a2a1a0来唯一表示
- G F ( 2 3 ) GF(2^3) GF(23)内的每一个多项式都与一个𝟑位数对应
- 在 G F ( 2 3 ) GF(2^3) GF(23)内,多项式可以进行加法与乘法运算,运算结果还在本集合内,因此称为 域
- 域内元素有限,因此称为 有限域
🕘 3.2 有限域GF(28)
定义:
G
F
(
2
8
)
=
f
(
x
)
GF(2^8) = {f(x)}
GF(28)=f(x)
f
(
x
)
=
a
7
x
7
+
a
6
x
6
+
a
5
x
5
+
a
4
x
4
+
a
3
x
3
+
a
2
x
2
+
a
1
x
+
a
0
f(x) = a_7x^7 + a_6x^6 + a_5x^5 + a_4x^4 + a_3x^3 + a_2x^2 + a_1x + a_0
f(x)=a7x7+a6x6+a5x5+a4x4+a3x3+a2x2+a1x+a0
AES 使用的是 有限域𝑮𝑭(𝟐𝟖) 内的算术
🕤 3.2.1 加法运算
元素
𝐀
=
𝒂
𝟕
𝒂
𝟔
…
𝒂
𝟏
𝒂
𝟎
𝐀=𝒂_𝟕 𝒂_𝟔…𝒂_𝟏 𝒂_𝟎
A=a7a6…a1a0,
𝐁
=
𝒃
𝟕
𝒃
𝟔
…
𝒃
𝟏
𝒃
𝟎
𝐁=𝒃_𝟕 𝒃_𝟔…𝒃_𝟏 𝒃_𝟎
B=b7b6…b1b0
定义:
A
+
B
=
(
c
7
c
6
.
.
.
c
1
c
0
)
A + B = (c_7c_6 ... c_1c_0)
A+B=(c7c6...c1c0)
c
i
=
a
i
⊕
b
i
c_i = a_i ⊕ b_i
ci=ai⊕bi
即将两个n位系数进行按位异或
例题:求
(
x
6
+
x
4
+
x
2
+
1
)
+
x
4
(x_6 + x_4 + x_2 + 1) + x_4
(x6+x4+x2+1)+x4
🕤 3.2.1 乘法运算
- 当𝑮𝑭(𝟐𝟖) 内的两个多项式相乘,得到的多项式次数大于8,脱离了有限域的范围
- 为𝑮𝑭(𝟐𝟖) 设定一个本原多项式(既约多项式)
m ( x ) = x 8 + x 4 + x 3 + x + 1 m(x) = x^8 + x^4 + x^3 + x + 1 m(x)=x8+x4+x3+x+1
例子:在𝑮𝑭(𝟐𝟖) 下求两个多项式的乘积
f
(
x
)
=
x
6
+
x
4
+
x
2
+
x
+
1
f(x) = x^6 + x^4 + x^2 + x + 1
f(x)=x6+x4+x2+x+1
g
(
x
)
=
x
g(x) = x
g(x)=x
f
(
x
)
⋅
x
=
?
f(x) ·x = ?
f(x)⋅x=?
解答:
-
将多项式表示为 8位系数 的形式
𝒇(𝒙)的最高次幂为6,𝒙 的最高次幂为1,二者相乘最高次幂为7 <8 \textbf {\textcolor {red}{<8}} <8
f ( x ) = 0 1 010111 f(x) = 0 \textbf{\textcolor {red}{1}}010111 f(x)=01010111
x = 000000 1 0 x = 000000 \textbf{\textcolor {red}{1}}0 x=00000010 -
按代数规则相乘后,若最高次幂 小于8
𝒇(𝒙)·𝒙 就是将𝒇(𝒙)左移1位,后面填0
-
将多项式表示为 8位系数 的形式
𝒇(𝒙)的最高次幂为7,𝒙的最高次幂为1,二者相乘最高次幂为8 ≥8 \textbf {\textcolor {red}{≥8}} ≥8
f ( x ) = 1 0101110 f(x) = \textbf{\textcolor {red}{1}}0101110 f(x)=10101110
x = 000000 1 0 x = 000000 \textbf{\textcolor {red}{1}}0 x=00000010 -
乘积最高次幂 ≥8
𝒇(𝒙)·𝒙𝟐就是将𝒇(𝒙)·𝒙左移1位后面填0,再与 𝒎(𝒙)进行异或
-
乘积最高次幂 <8
𝒇(𝒙)·𝒙𝟑就是将𝒇(𝒙)·𝒙𝟑左移1位后面填0
-
重复以下操作,计算出了 𝒇(𝒙)·𝒙𝒊,𝟏≤𝒊≤𝟕的值
( 01010111 ) × ( 00000010 ) = ( 10101110 ) ( 01010111 ) × ( 00000100 ) = ( 01011100 ) ⊕ ( 00011011 ) = ( 01000111 ) ( 01010111 ) × ( 00001000 ) = ( 10001110 ) ( 01010111 ) × ( 00010000 ) = ( 00011100 ) ⊕ ( 00011011 ) = ( 00000111 ) ( 01010111 ) × ( 00100000 ) = ( 00001110 ) ( 01010111 ) × ( 01000000 ) = ( 00011100 ) ( 01010111 ) × ( 10000000 ) = ( 00111000 ) \begin{aligned} (01010111) \times(00000010) & =(10101110) \\ (01010111) \times(00000100) & =(01011100) \oplus(00011011)=(01000111) \\ (01010111) \times(00001000) & =(10001110) \\ (01010111) \times(00010000) & =(00011100) \oplus(00011011)=(00000111) \\ (01010111) \times(00100000) & =(00001110) \\ (01010111) \times(01000000) & =(00011100) \\ (01010111) \times(10000000) & =(00111000) \end{aligned} (01010111)×(00000010)(01010111)×(00000100)(01010111)×(00001000)(01010111)×(00010000)(01010111)×(00100000)(01010111)×(01000000)(01010111)×(10000000)=(10101110)=(01011100)⊕(00011011)=(01000111)=(10001110)=(00011100)⊕(00011011)=(00000111)=(00001110)=(00011100)=(00111000) -
𝒇(𝒙)·(𝒙𝟕+𝒙+𝟏)=[𝒇(𝒙)·𝒙𝟕]⨁[𝒇(𝒙)·𝒙] ⨁𝒇(𝒙)
=𝟎𝟎𝟏𝟏𝟏𝟎𝟎𝟎⨁𝟏𝟎𝟏𝟎𝟏𝟏𝟏𝟎⨁𝟎𝟏𝟎𝟏𝟎𝟏𝟏𝟏
( 01010111 ) × ( 00000010 ) = ( 10101110 ) ( 01010111 ) × ( 00000100 ) = ( 01011100 ) ⊕ ( 00011011 ) = ( 01000111 ) ( 01010111 ) × ( 00001000 ) = ( 10001110 ) ( 01010111 ) × ( 00010000 ) = ( 00011100 ) ⊕ ( 00011011 ) = ( 00000111 ) ( 01010111 ) × ( 00100000 ) = ( 00001110 ) ( 01010111 ) × ( 01000000 ) = ( 00011100 ) ( 01010111 ) × ( 10000000 ) = ( 00111000 ) \begin{aligned} {\color{red}(01010111)} \times(00000010) & ={\color{red}(10101110)} \\ (01010111) \times(00000100) & =(01011100) \oplus(00011011)=(01000111) \\ (01010111) \times(00001000) & =(10001110) \\ (01010111) \times(00010000) & =(00011100) \oplus(00011011)=(00000111) \\ (01010111) \times(00100000) & =(00001110) \\ (01010111) \times(01000000) & =(00011100) \\ (01010111) \times(10000000) & ={\color{red}(00111000)} \end{aligned} (01010111)×(00000010)(01010111)×(00000100)(01010111)×(00001000)(01010111)×(00010000)(01010111)×(00100000)(01010111)×(01000000)(01010111)×(10000000)=(10101110)=(01011100)⊕(00011011)=(01000111)=(10001110)=(00011100)⊕(00011011)=(00000111)=(00001110)=(00011100)=(00111000)
练习题
在有限域 𝑮 𝑭 ( 𝟐 𝟖 ) 𝑮𝑭(𝟐^𝟖) GF(28)下计算:
(1) ( 𝒙 𝟓 + 𝒙 𝟐 ) × ( 𝒙 𝟕 + 𝒙 𝟓 + 𝟏 ) (𝒙^𝟓+𝒙^𝟐 )×(𝒙^𝟕+𝒙^𝟓+𝟏) (x5+x2)×(x7+x5+1)
(2) ( 𝒙 𝟒 + 𝒙 𝟕 ) × ( 𝒙 𝟐 + 𝒙 ) (𝒙^𝟒+𝒙^𝟕 )×(𝒙^𝟐+𝒙) (x4+x7)×(x2+x)
已知 𝒎 ( 𝒙 ) = 𝒙 𝟖 + 𝒙 𝟒 + 𝒙 𝟑 + 𝒙 + 𝟏 𝒎(𝒙)=𝒙^𝟖+𝒙^𝟒+𝒙^𝟑+𝒙+𝟏 m(x)=x8+x4+x3+x+1
答案:(1)01010101
(2)
🕒 4. AES的总体结构
🕘 4.1 明文分组处理
-
AES明文分组128bit,每8bit构成一个字节,表示为十六进制
-
于是将AES的明文分组表示为16个字节的形式
-
将16字节的明文分组按列填入4*4的矩阵
🕘 4.2 明文分组变化
- 将4×4的明文矩阵
input
复制到4×4的state矩阵中 - 在加密解密的各阶段被修改的是state矩阵
- 最终的state矩阵 即为AES加密产生的密文
out
🕘 4.3 密钥处理
- AES的密钥长度可以是128、192、256bit
- 以128bit、16字节的密钥为例,将其按列填入4*4的字节矩阵,把一列的4个密钥字节称为1个密钥字
🕘 4.4 密钥变化
- 1个密钥矩阵被扩展为11个,供每轮使用
- 4个字的初始密钥被扩展为11*4个字的密钥序列
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页
🕘 4.5 初始变换
- AES第1轮加密前,对当前state矩阵进行初始变换,生成新的
4*4
state - 可以看作AES加密的
第0轮
🕘 4.6 Round 10加密
- 当AES密钥为128bit,加密
共10轮
- 前9轮相同,每一轮都由
4步变换
组成 - 第10轮只由
3步变换
组成 - 每一轮变换都产生一个4*4的state矩阵
- 最后一轮的state矩阵就是最终密文
🕘 4.7 密钥参与
- 密钥扩展函数产生
(1+10)个 key
矩阵 - 它们是互不相同,大小均为
4*4
- 分别作用于
每一轮
🕘 4.8 AES的参数
密钥长度 (字/字节/位 ) 4 / 16 / 128 6 / 24 / 192 8 / 32 / 256 明文分组长度 (字/字节/位 ) 4 / 16 / 128 4 / 16 / 128 4 / 16 / 128 轮数 10 12 14 每轮的密钥长度 (字/字节/位 ) 4 / 16 / 128 4 / 16 / 128 4 / 16 / 128 拓展密钥长度 (字/字节) 44 / 176 52 / 208 60 / 240 \begin{array}{l|c|c|c} \hline \text { \textbf{密钥长度} (字/字节/位 ) } & 4 / 16 / 128 & 6 / 24 / 192 & 8 / 32 / 256 \\ \hline \text { \textbf{明文分组长度} (字/字节/位 ) } & 4 / 16 / 128 & 4 / 16 / 128 & 4 / 16 / 128 \\ \hline \text { \textbf{轮数} } & 10 & 12 & 14 \\ \hline \text { \textbf{每轮的密钥长度} (字/字节/位 }) & 4 / 16 / 128 & 4 / 16 / 128 & 4 / 16 / 128 \\ \hline \text { \textbf{拓展密钥长度} (字/字节) } & 44 / 176 & 52 / 208 & 60 / 240 \\ \hline \end{array} 密钥长度 (字/字节/位 ) 明文分组长度 (字/字节/位 ) 轮数 每轮的密钥长度 (字/字节/位 ) 拓展密钥长度 (字/字节) 4/16/1284/16/128104/16/12844/1766/24/1924/16/128124/16/12852/2088/32/2564/16/128144/16/12860/240
多选题
下列关于AES和DES的描述错误的是?
A. DES的分组长度是64位,密钥长度是64位;
B. DES和AES的加密结构和解密结构在本质上是相同的
C. AES分组长度是128位,密钥长度是128/196/256位
D. DES的加密轮数是不变的,AES的加密轮数会因密钥长度而变化。
解析:A. 64和56都对;B. 可逆;C. 不是196,应该是192;D. 10轮加密则11把密钥。因此选BC
🕒 5. AES的详细结构
- AES 不是Feistel结构,没有用分组的一半去修改另一半然后交换
- 每一轮都使用代替和置换,将整个数据分组作为一个单一矩阵进行处理
- 算法由初始变换“轮密钥加”开始,接着执行9轮加密运算,每轮都包含4个阶段
- 分别为字节代替(Substitute bytes)、行移位(ShiftRows)、列混淆(MixColumns)、轮密钥加(AddRoundKey)
🕘 5.1 AES的一轮加密
- 无论哪一轮,仅在轮密钥加阶段使用密钥
- 所以AES以轮密钥加开始,也以轮密钥加结束,以防在没有密钥的情况下计算其逆(Inverse)
- AES 各阶段均可逆,即存在解密算法
- 按逆序方式使用扩展出的密钥
- 但解密算法与加密算法不同
🕒 6. AES的变换函数
🕘 6.1 字节代替(Substitute bytes)
- AES 定义了一个S盒,由16*16个字节组成
- state的字节 𝑺 ( 𝟏 , 𝟏 ) = ( 𝒙 𝒚 ) 𝑺_{(𝟏,𝟏)}=(𝒙𝒚) S(1,1)=(xy),将𝒙作为行值,𝒚作为列值,S盒对应位置的元素就是新的 𝑺 ( 𝟏 , 𝟏 ) ′ 𝑺^′_{(𝟏,𝟏)} S(1,1)′
十六进制{95},行x=9,列y=5,经S盒被代替为{2A}
十六进制{2A},行x=2,列y=A,逆S盒将其代替为{95}
将当前state矩阵的各个字节依次输入S盒,字节代替结果如上所示
🕘 6.2 行移位(ShiftRows)
state矩阵的第一行保持不变,第二行循环左移1字节,第三行循环左移2字节,第四行左移3字节
- 明文前4个字节被复制到state的第一列,经过密钥加与S盒,字节相对位置不变
- 观察矩阵特定列字节的变换,易发现加密规律
- 因此使用行移位,将某列的4个字节打乱分布在4个不同的列
🕘 6.3 列混淆(MixColumns)
state矩阵的每一列左乘系数矩阵,相乘的结果作为新的列值
以计算第一列第一个字节为例,注意是十六进制转二进制
{
02
}
⋅
{
87
}
⨁
{
03
}
⋅
{
6
𝐸
}
⨁
{
46
}
⨁
{
𝐴
6
}
\{02\}·\{87\}⨁\{03\}·\{6𝐸\}⨁\{46\}⨁\{𝐴6\}
{02}⋅{87}⨁{03}⋅{6E}⨁{46}⨁{A6}
{
87
}
=
1
0000111
\{87\} = \textbf {\textcolor{red} {1}}0000111
{87}=10000111
{
02
}
=
000000
1
0
\{02\} = 000000 \textbf {\textcolor{red} {1}}0
{02}=00000010
{
02
}
⋅
{
87
}
=
00001110
⊕
00011011
=
00010101
\{02\} ·\{87\} = 00001110 ⊕ 00011011 = 00010101
{02}⋅{87}=00001110⊕00011011=00010101
- 将{02}和{87}分别表示为8位二进制数,在有限域上进行相乘。{02}已经是幂形式,无需分解
- 相乘后多项式次数为7+1>=8,将{87}循环左移1位后面填0,再异或常数00011011
{
6
E
}
=
01101110
\{6E\} = 01101110
{6E}=01101110
{
03
}
=
00000011
=
x
+
1
=
00000010
+
00000001
=
{
02
}
+
{
01
}
\{03\} = 00000011 = x+1 \\ = 00000010 + 00000001 = \{02\} + \{01\}
{03}=00000011=x+1=00000010+00000001={02}+{01}
- 将{03}写作8位二进制数,对应的多项式为x+1
- 将x和1这两个多项式用8位系数表示,化十六进制
- 因此{6E}·{03}需要将{03}分解为{02}+{01}再相乘
{
6
E
}
⋅
{
03
}
=
{
6
E
}
⋅
{
02
}
⊕
{
6
E
}
⋅
{
01
}
\{6E\} · \{03\} = \{6E\} · \{02\} ⊕ \{6E\} · \{01\}
{6E}⋅{03}={6E}⋅{02}⊕{6E}⋅{01}
{
6
E
}
⋅
{
02
}
=
11011100
\{6E\} · \{02\} = 11011100
{6E}⋅{02}=11011100
{
6
E
}
⋅
{
03
}
=
11011100
⊕
01101110
=
10110010
\{6E\} · \{03\} = 11011100 ⊕ 01101110 = 10110010
{6E}⋅{03}=11011100⊕01101110=10110010
- {6E}与{03}相乘,分解为{6E}·{02}+{6E}
- 按照有限域运算规则 继续计算即可
其他的依次按矩阵相乘规则运算即可
练习题
已知某时刻state矩阵如下,请给出字节{40}经过列混淆后的结果。
47 40 A 3 4 C 37 D 4 70 9 F 94 E 4 3 A 42 E D A 5 A 6 B C \begin{array}{|c|c|c|c|} \hline 47 & 40 & \mathrm{~A} 3 & 4 \mathrm{C} \\ \hline 37 & \mathrm{D} 4 & 70 & 9 \mathrm{F} \\ \hline 94 & \mathrm{E} 4 & 3 \mathrm{A} & 42 \\ \hline \mathrm{ED} & \mathrm{A} 5 & \mathrm{A} 6 & \mathrm{BC} \\ \hline \end{array} 473794ED40D4E4A5 A3703AA64C9F42BC
答案:01100111
🕘 6.4 轮密钥加(AddRoundKey)
例中第一个矩阵是状态,第二个矩阵是轮密钥
将当前state矩阵与轮密钥矩阵的各个字节进行按位异或
如state中的{3A}与 轮密钥中的{29}进行XOR
🕘 6.5 AES单轮输入
下列说法不正确的是?
A. AES加密中的轮密钥加阶段是AES中唯一用到密钥的阶段
B. AES加密中的行移位阶段实现的是明文的置换
C. AES加密中的字节替代阶段实现的是明文的替代
D. AES加密中的列混淆阶段实现的是明文的替代
答案:D(解析:是数学变换)
🕒 7. AES的密钥扩展(Key Expansion)
🕘 7.1 总体算法
- 将原密钥的第一列作为扩展密钥的第一个密钥字w0
- 依次类推,生成了扩展密钥的前4个字w0、w1、w2、w3
【生成扩展密钥的w4】
- 将上一行最右侧的w3 输入到函数g
- 将函数g产生的输出 与 w4上方的w0 进行XOR
- 得到的就是w4
【生成扩展密钥的w5】
- 将左侧的w4 与 上方的w1 进行XOR
- 得到的就是w5
注意:
- 要生成扩展密钥字wi,下标 i 是4的倍数,或者说wi处于某一行的最左侧。
生成方式较为复杂,先将它前面的w[i-1]
经过函数g
的处理,再与上方的w[i-4]
进行XOR - 要生成扩展密钥字wi,下标 i 不是4的倍数,或者说 wi不在某一行的最左侧。
生成方式较为简单,将它左侧的w[i-1]
与上方的w[i-4]
直接进行XOR
🕘 7.2 函数g
j
=
i
4
j=\frac{i}{4}
j=4i
j
1
2
3
4
5
6
7
8
9
10
R
C
[
j
]
01
02
04
08
10
20
40
80
1
B
36
\begin{array}{|c|c|c|c|c|c|c|c|c|c|c|} \hline \mathrm{j} & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\ \hline \mathrm{RC}[\mathrm{j}] & 01 & 02 & 04 & 08 & 10 & 20 & 40 & 80 & 1 \mathrm{B} & 36 \\ \hline \end{array}
jRC[j]10120230440851062074088091B1036
- 输入的密钥字w 的字节为[B0 B1 B2 B3]
- 先循环左移一个字节,变为[B1 B2 B3 B0]
- 再将各字节经过S盒处理,代替为[C1 C2 C3 C0]
- 与常量[RC[j] 0 0 0]按位XOR,得到输出w`
【已知第8轮密钥,求第9轮】
- 第0轮密钥为w0~w3
- 第1轮密钥为w4~w7
- 第2轮密钥为w8~w11
… - 第8轮密钥为w32~w35
解答:假设第八轮的轮密钥为EA D2 73 21 B5 8D BA D2 31 2B F5 60 7F 8D 29 2F
那么第九轮的轮密钥的前4个字节(第一列)如下图
Description
Value
i
(
decimal
)
36
temp
=
w
[
i
−
1
]
7
F
8
D
292
F
RotWord
(
temp) (字循环后)
8
D
292
F
7
F
SubWord
(
RotWord
(
temp
)
)
(字代替后)
5
D
A
515
D
2
Rcon
(
9
)
1
B
000000
SubWord
(
RotWord
(
temp
)
)
⊕
Rcon
(
9
)
(与
R
c
o
n
异或后)
46
A
515
D
2
w
[
i
−
4
]
EAD27321
w
[
i
]
=
w
[
i
−
4
]
⊕
SubWord
(
RotWord
(
temp
)
)
⊕
Rcon
(
9
)
AC7766F3
\begin{array}{|l|c|} \hline \text{ Description } & \text { Value } \\ \hline \text { i }(\text { decimal }) & 36 \\ \hline \text { temp }=\mathrm{w}[\mathrm{i}-1] & 7 \mathrm{F} 8 \mathrm{D} 292 \mathrm{F} \\ \hline \text { RotWord }(\text { temp) (字循环后)} & 8 \mathrm{D} 292 \mathrm{F} 7 \mathrm{F} \\ \hline \text { SubWord }(\text { RotWord }(\text { temp }))(字代替后) & 5 \mathrm{DA} 515 \mathrm{D} 2 \\ \hline \text { Rcon }(9) & 1 \mathrm{B} 000000 \\ \hline \text { SubWord }(\text { RotWord }(\text { temp })) \oplus \text { Rcon }(9)(与Rcon异或后) & 46 \mathrm{A} 515 \mathrm{D} 2 \\ \hline \mathrm{w}[\mathrm{i}-4] & \text { EAD27321 } \\ \hline \mathrm{w}[\mathrm{i}]=\mathrm{w}[\mathrm{i}-4] \oplus \text { SubWord }(\text { RotWord }(\text { temp })) \oplus \text { Rcon }(9) & \text { AC7766F3 } \\ \hline \end{array}
Description i ( decimal ) temp =w[i−1] RotWord ( temp) (字循环后) SubWord ( RotWord ( temp ))(字代替后) Rcon (9) SubWord ( RotWord ( temp ))⊕ Rcon (9)(与Rcon异或后)w[i−4]w[i]=w[i−4]⊕ SubWord ( RotWord ( temp ))⊕ Rcon (9) Value 367F8D292F8D292F7F5DA515D21B00000046A515D2 EAD27321 AC7766F3
【求w36】
- w36 下标是4的倍数
- 将w35输入函数g,得到的输出与w32进行按位XOR
【w35输入函数g】
- [57 5C 00 6A]循环左移后变为[5C 00 6A 57]
- 输入S盒后变为[4A 63 02 5B]
- 与[1B 00 00 00]按位XOR再按位XOR w[32]即可计算出w36
【总结】
- 如果i为4的倍数, w [ i ] = S u b W o r d ( R o t w o r d ( w [ i − 1 ] ) ) ⊕ R c o n [ i / 4 ] ⊕ w [ i − 4 ] w[i] = SubWord(Rotword(w[i-1]))⊕ Rcon[i/4]⊕ w[i-4] w[i]=SubWord(Rotword(w[i−1]))⊕Rcon[i/4]⊕w[i−4]
- 否则, w [ i ] = w [ i − 1 ] ⊕ w [ i − 4 ] w[i]=w[i-1] ⊕ w[i-4] w[i]=w[i−1]⊕w[i−4]
🕒 8. 一个AES的例子
Plaintext: 0123456789abcdeffedcba9876543210
Key: 0f1571c947d9e8590cb7add6af7f6798
Ciphertext: ff0b844a0853bf7c6934ab4364148fb9
🕘 8.1 AES雪崩
明文改变
密钥改变
🕒 9. AES的实现
🕘 9.1 等价的逆算法
在32位处理器上,AES各个变换可描述如下
🕒 10. 中英文对照表
OK,以上就是本期知识点“高级加密标准AES”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页