【现代密码学原理】——高级加密标准AES(学习笔记)

📖 前言:美国国家标准和技术协会(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=a7a6a1a0 𝐁 = 𝒃 𝟕 𝒃 𝟔 … 𝒃 𝟏 𝒃 𝟎 𝐁=𝒃_𝟕 𝒃_𝟔…𝒃_𝟏 𝒃_𝟎 B=b7b6b1b0
定义 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=aibi
即将两个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=

解答:

  1. 将多项式表示为 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

  2. 按代数规则相乘后,若最高次幂 小于8
    𝒇(𝒙)·𝒙 就是将𝒇(𝒙)左移1位,后面填0
    在这里插入图片描述

  3. 将多项式表示为 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

  4. 乘积最高次幂 ≥8
    𝒇(𝒙)·𝒙𝟐就是将𝒇(𝒙)·𝒙左移1位后面填0,再与 𝒎(𝒙)进行异或
    在这里插入图片描述

  5. 乘积最高次幂 <8
    𝒇(𝒙)·𝒙𝟑就是将𝒇(𝒙)·𝒙𝟑左移1位后面填0
    在这里插入图片描述

  6. 重复以下操作,计算出了 𝒇(𝒙)·𝒙𝒊,𝟏≤𝒊≤𝟕的值
    ( 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)

  7. 𝒇(𝒙)·(𝒙𝟕+𝒙+𝟏)=[𝒇(𝒙)·𝒙𝟕]⨁[𝒇(𝒙)·𝒙] ⨁𝒇(𝒙)
    =𝟎𝟎𝟏𝟏𝟏𝟎𝟎𝟎⨁𝟏𝟎𝟏𝟎𝟏𝟏𝟏𝟎⨁𝟎𝟏𝟎𝟏𝟎𝟏𝟏𝟏
    ( 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}=0000111000011011=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}=1101110001101110=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[i1] RotWord ( temp) (字循环后) SubWord ( RotWord ( temp ))(字代替后) Rcon (9) SubWord ( RotWord ( temp )) Rcon (9)(与Rcon异或后)w[i4]w[i]=w[i4] 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]=SubWordRotword(w[i1]))Rcon[i/4]w[i4]
  • 否则, w [ i ] = w [ i − 1 ] ⊕ w [ i − 4 ] w[i]=w[i-1] ⊕ w[i-4] w[i]=w[i1]w[i4]

🕒 8. 一个AES的例子

Plaintext: 0123456789abcdeffedcba9876543210
Key: 0f1571c947d9e8590cb7add6af7f6798
Ciphertext: ff0b844a0853bf7c6934ab4364148fb9
在这里插入图片描述
在这里插入图片描述

🕘 8.1 AES雪崩

明文改变
在这里插入图片描述

密钥改变
在这里插入图片描述

🕒 9. AES的实现

🕘 9.1 等价的逆算法

在这里插入图片描述

在32位处理器上,AES各个变换可描述如下

在这里插入图片描述

🕒 10. 中英文对照表

在这里插入图片描述


OK,以上就是本期知识点“高级加密标准AES”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值