【现代密码学原理】——高级加密标准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)=a2​x2+a1​x+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} a2​a1​a0​000001010011100101110111​f(x)=a2​x2+a1​x+a0​01xx+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)内的每一个多项式,可以用它的系数 𝒂 𝟐 𝒂 𝟏 𝒂 𝟎 𝒂_𝟐 𝒂_𝟏 𝒂_𝟎 a2​a1​a0​来唯一表示
  • 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)=a7​x7+a6​x6+a5​x5+a4​x4+a3​x3+a2​x2+a1​x+a0​

AES 使用的是 有限域𝑮𝑭(𝟐𝟖) 内的算术

🕤 3.2.1 加法运算

元素 𝐀 = 𝒂 𝟕 𝒂 𝟔 … 𝒂 𝟏 𝒂 𝟎 𝐀=𝒂_𝟕 𝒂_𝟔…𝒂_𝟏 𝒂_𝟎 A=a7​a6​…a1​a0​, 𝐁 = 𝒃 𝟕 𝒃 𝟔 … 𝒃 𝟏 𝒃 𝟎 𝐁=𝒃_𝟕 𝒃_𝟔…𝒃_𝟏 𝒃_𝟎 B=b7​b6​…b1​b0​
定义: A + B = ( c 7 c 6 . . . c 1 c 0 ) A + B = (c_7c_6 ... c_1c_0) A+B=(c7​c6​...c1​c0​)
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=?

解答:

  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/176​6/24/1924/16/128124/16/12852/208​8/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} 473794ED​40D4E4A5​ A3703AA6​4C9F42BC​​
答案: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]​101​202​304​408​510​620​740​880​91B​1036​​

  • 输入的密钥字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
博客链接:🔎 作者博客主页

对称密码学之现代密码学-AES算法分析 AES算法分析 1.AES的结构 AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。 明文分组的长度为128位即16个字节,密钥长度可以是128位(16字节)、192位(24字节)、256位(32字节)。密钥长度不同,加密轮数也不相同。根据密钥的长度,算法被称为AES-128、AES-192或AES-256。具体关系如表1所示: 表1 本...... 阅读详情

相关推荐

现代密码学 | 高级加密标准(AES)

接下来我们将讨论目前大多数计算机和硬件基础设施所使用的最重要的加密算法,例如高级加密标准(AES)、里弗斯特-沙米尔-阿德曼算法(RSA)、椭圆曲线加密(ECC)、基于格的加密、(环)带错学习、同态加密。2.2.3.1 高级加密标准 Advanced Encryption Standard(AES)现代密码学围绕高级加密标准(AES)构建,在数字安全至关重要的时代,它至关重要。AES 旨在取代过时的数据加密标准(DES),如今已成为金融、电信和政府等多个行业数据加密的行业标准。

Turbo学习笔记 890

30.密码学思维导图

1.密码学思维导图

boss2967的博客 4584

56、密码学中的数学之美与高级加密标准AES

本文深入探讨了高级加密标准AES的数学原理与设计之美,介绍了其诞生背景、核心操作(SubBytes、ShiftRows、MixColumns和AddRoundKey)以及加密流程。同时回顾了相关数学家如Koblitz和Victor Miller的有趣故事,展现了密码学中数学与艺术的交融。文章还分析了AES的安全性与性能优势,并讨论了实际应用中的密钥管理和加密模式选择等关键问题,全面呈现AES作为现代主流加密标准的重要地位。

xray4的博客 175

857_(1)密码学基本理论_思维导图

qq_34424028的博客 736

RN7213是ARM Cortex-M0内核的电表SOC芯片带LCD驱动 采样速度快,开发例程齐全,有参考方案-RN821x_RN831x_RN721x应用笔记003-库函数使用说明v1.1.zip

RN7213是ARM Cortex-M0内核的电表SOC芯片带LCD驱动 采样速度快,开发例程齐全,有参考方案-RN821x_RN831x_RN721x应用笔记003-库函数使用说明v1.1.zip

现代密码学杨波课后习题讲解PPT课件.pptx

现代密码学杨波课后习题讲解,现代密码学杨波课后习题讲解课件,现代密码学杨波课后习题讲解PPT

AES算法实例

AES算法实例 AES是常用的对称加密算法,采用相同秘钥对明文进行加解密,他的速度比RSA算法要快很多,一般在数据加解密和文件加解密过程中使用,而RSA则更多用于密钥传输,常见密钥长度为128、192,256位。 AES加密是一种分组算法,若明文超过128位,则讲其分成多个128位的块再进行加密,密钥生成时会讲秘钥扩展成128位(以128位为例) 加密过程 在密钥长度为128位时,要进行1...

生活就是不断学习 8710

实测338MB/s!FPGA与CYUSB3014的Slave FIFO模式实战避坑(附完整固件与源码)

本文详细介绍了FPGA与CYUSB3014在Slave FIFO模式下实现338MB/s高速数据传输的实战经验。通过优化硬件设计、固件配置和GPIF II接口设置,解决了USB3.0双向通信中的关键性能瓶颈,并提供了完整的固件与源码参考。

weixin_30570101的博客 458

密码学期末计算题复习

主要三大块 目录1.古典密码移位密码:代换密码欧拉函数:乘法逆元用拓展欧几里得求解详细过程:群Zm内所有元素关于模26的乘法逆元如下:仿射密码:希尔密码:定义在Zm上的矩阵求逆 :2.对称密码体制AES加密的工作模式3.非对称密码体制拓展欧几里得求解同余方程组RSA算法过程ElGamal加密算法 1.古典密码 移位密码: E(x)= (x + K) mod 26 D(x)= (x - K) mod 26 代换密码 是指先建立一个替换表,加密时将需要加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换

Pioo_的博客 1万+

React项目实战:用AntV G6打造可折叠组织架构图(附完整代码)

本文详细介绍了如何在React项目中使用AntV G6库构建一个功能完整的可折叠组织架构图。通过实战代码演示了从环境搭建、自定义节点、折叠状态管理到性能优化的全流程,重点解决了企业级应用中处理复杂树形数据、实现流畅交互等核心问题,并提供了可直接复用的组件代码。

weixin_29016315的博客 312

踩坑记录:Clawdbot 对接 Minimax 报错 “401 token is unusable (1004)“ 的终极解决方案

如果你也在配置 Clawdbot 对接 Minimax 模型时,明明 API Key 是新申请的,却死活报错 `401 Unauthorized`,错误码 `1004`,提示 `token is unusable`——那么恭喜你,来对地方了。

hampeter的博客 2001

Istio思维导图总结

 自己学习总结了一些思维导图(持续更新中),后面附有GitHub链接 ,分享给大家。https://github.com/panjianlong13/MindMapSummary          

panjianlongWUHAN的专栏 1480

AI基础入门(大模型基础篇)——技术视角:你应该知道的LLM基础知识

本文从技术视角解析了大模型的工作原理,主要介绍了三个核心概念:Token、温度和Embedding。首先,大模型通过逐个添加Token来生成文本,Token数量直接影响上下文窗口大小和计费标准。其次,通过引入温度参数控制随机性,温度越高输出越多样化。最后,解释了字符串如何通过One-Hot编码和神经网络压缩转化为向量形式的Embedding,这是AI处理各类输入的基础。这些概念对理解大模型应用开发至关重要,Token决定处理能力,温度影响输出风格,Embedding则是信息转换的关键步骤。

小志的博客 1506

AES加密——AES加密原理与C++实现AES加密

AES-256 密钥长度为 256 位,提供了极高的安全性。由于其密钥长度更长,因此具有更大的密钥空间,从而增加了破解的难度,即使是通过蛮力攻击也是很不好破解。

知来者逆的博客 9427

使用Xpath语法爬取豆瓣读书Top250

使用Xpath语法爬取豆瓣读书Top250 使用的软件是Spyder 网页地址:https://book.douban.com/top250?start=0 直接上代码: # -*- coding: utf-8 -*- """ Created on Thu Apr 30 18:35:17 2020 @author: ASUS """ import requests import csv fr...

weixin_43987253的博客 2082

GitLab社区版vs企业版:本地部署性能对比与选型建议(含实测数据)

本文深入对比GitLab社区版(CE)与企业版(EE)在本地部署中的性能差异与功能特性,提供实测数据与选型建议。测试显示EE版在并发克隆、CI流水线启动等场景性能提升显著,尤其适合需要高级安全合规与CI/CD功能的团队。文章还包含硬件配置指南与成本效益分析,帮助技术决策者做出明智选择。

weixin_28828243的博客 295

【密码学基础】06 高级加密标准AES

密码学基础系列课程第六弹:高级加密标准AES

Stu_Yang的博客 1658

保姆级教程:在紫光同创Titan2 FPGA上实现PCIe DMA,实测带宽接近理论极限

本文详细介绍了在紫光同创Titan2 FPGA上实现PCIe DMA性能调优的全过程,通过参数优化和架构设计,实测带宽达到6.91GB/s,接近理论极限。涵盖开发环境搭建、PCIe IP核定制、DMA引擎设计、驱动开发及性能调优等关键步骤,为FPGA开发者提供实用指南。

weixin_30954817的博客 336

AES(高级加密标准)

AES(高级加密标准) AES 简介 高级加密标准(英语Advanced Encryption Standard**,缩写AES)在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于 2001 年 11 月 26 日发布于 FIPS ...

描绘自己的王国…… 4957

嵌入式下载故障排查:ST-LINK与GD32 Programmer典型问题解决

嵌入式固件烧录是MCU开发的关键环节,其本质依赖于调试器(如ST-LINK、GD-Link)与目标芯片间的协议通信、驱动加载及硬件接口协同。原理上,SWD/JTAG协议需在正确时序、电平与供电条件下完成设备枚举、ID读取与Flash编程;技术价值在于保障量产烧录稳定性与调试可重复性;典型应用场景涵盖STM32/GD32教学开发、工业控制板量产调试及Windows 11新系统适配。本文聚焦ST-LINK-V2在Keil MDK中的下载失败和GD32 All In One Programmer的DLL加载异常两

weixin_35006125的博客 154

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

高级加密标准AES

aes加密 结构 变换 扩展 伪代码

qzhqbb的博客 1143

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

什么是AES加密?详解AES加密算法原理流程

AES是高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,目前已经被全世界广泛使用,同时AES已经成为对称密钥加密中最流行的算法之一。AES支持三种长度的密钥:128位,192位,256位。

xnxqwzy的博客 7342

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

高级加密标准(AES)解析

高级加密标准(Advanced Encryption Standard, AES)是美国国家标准与技术研究院(NIST)于2001年颁布的对称分组密码算法,取代了过时的DES算法。AES基于Rijndael算法设计,具有**安全性高、效率优异、实现灵活**等特点,已成为全球应用最广泛的加密标准。AES支持128位、192位和256位三种密钥长度,分别对应10轮、12轮和14轮加密操作。

spinage的博客 1779

AES算法 —— 原理以及实现

高级加密标准(Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。200...

vergilben的学习日记 7981
上一篇: 【数据库原理及应用】——关系操作、关系完整性、关系代数(学习笔记)
下一篇: 【现代密码学原理】——分组加密的工作模式(学习笔记)
HinsCoder
博客等级 码龄5年 1万+粉丝 220原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值