信息安全密码学:AES算法

AES与DES一样都是迭代型分组密码算法,也是对称密码体制。事实上,AES的产生就是为了取代DES的。

事 实 上 , A E S 是 高 级 加 密 标 准 , 用 到 了 R i j n d a e l 密 码 算 法 \color{skyblue}事实上,AES是高级加密标准,用到了Rijndael密码算法 AESRijndael

分 组 长 度 : 128 b i t ( 16 b y t e ) 、 192 b i t ( 24 b y t e ) 、 256 b i t ( 32 b y t e ) 分组长度:128bit(16byte)、192bit(24byte)、256bit(32byte) 128bit16byte192bit24byte256bit32byte
密 钥 长 度 : 128 b i t 、 192 b i t 、 256 b i t 密钥长度:128bit、192bit、256bit 128bit192bit256bit
迭 代 圈 数 : 根 据 分 组 长 度 和 密 钥 长 度 的 不 同 组 合 , 圈 数 也 会 有 所 不 同 迭代圈数:根据分组长度和密钥长度的不同组合,圈数也会有所不同

迭 代 圈 数 迭代圈数 N b = 128 b i t N_b=128bit Nb=128bit N b = 192 b i t N_b=192bit Nb=192bit N b = 256 b i t N_b=256bit Nb=256bit
N k = 128 b i t N_k=128bit Nk=128bit 10 圈 \color{blue}10圈 10 12 圈 \color{blue}12圈 12 14 圈 \color{blue}14圈 14
N k = 192 b i t N_k=192bit Nk=192bit 12 圈 \color{blue}12圈 12 12 圈 \color{blue}12圈 12 14 圈 \color{blue}14圈 14
N k = 256 b i t N_k=256bit Nk=256bit 14 圈 \color{blue}14圈 14 14 圈 \color{blue}14圈 14 14 圈 \color{blue}14圈 14

N b : 表 示 分 组 长 度 N k : 表 示 密 钥 长 度 \color{gray}N_b:表示分组长度\\N_k:表示密钥长度 NbNk

A E S 的 核 心 主 要 围 绕 着 以 下 三 个 方 面 进 行 设 计 的 : \color{gray}AES的核心主要围绕着以下三个方面进行设计的: AES

  • 加密算法
  • 密钥生成算法
  • 脱密算法

加 密 框 图 : ( 圈 数 由 分 组 长 度 和 密 钥 长 度 决 定 ) \color{gray}加密框图:(圈数由分组长度和密钥长度决定) ()

^^^
^^^
明文
+
R1
R2
R3
Ri
R10
密文
k0
k1
k2
k3
ki
k10

加密算法(圈函数)

R r 表 示 圈 函 数 , 除 了 最 后 一 圈 , 其 余 各 圈 都 包 含 : R_r表示圈函数,除了最后一圈,其余各圈都包含: Rr

  • 字节代替 (唯一的非线性变换,非线性层)
  • 位移位 (线性混合层)
  • 列混合 (线性混合层)
  • ⨁ K i \bigoplus K_i Ki (与密钥进行模二加(异或)运算)

字 节 代 替 变 换 ( S 盒 ) \color{red}字节代替变换(S盒) S

表 达 式 为 : B y t e S u b ( S t a t e )      其 中 s t a t e 表 示 一 个 矩 阵    \color{blue}表达式为:ByteSub(State)\ \ \ \ \color{gray}其中state表示一个矩阵\\\; ByteSub(State)    state
128 b i t 为 16 个 字 节 ( 用 a 1 、 a 2 、 . . . 、 a 16 表 示 ) , 对 每 个 字 节 进 行 S 盒 变 换 128bit为16个字节(用a_1、a_2、...、a_{16}表示),对每个字节进行S盒变换 128bit16(a1a2...a16)S

以 矩 阵 [ a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 a 10 a 11 a 12 a 13 a 14 a 15 a 16 ] 排 列 , 按 照 一 定 规 律 进 行 变 换 以矩阵\begin{bmatrix} a_1 & a_2 & a_3 & a_4 \\ a_5 & a_6 & a_7 & a_8 \\ a_9 & a_{10} & a_{11} & a_{12} \\ a_{13} & a_{14} & a_{15} & a_{16} \\ \end{bmatrix}排列,按照一定规律进行变换 a1a5a9a13a2a6a10a14a3a7a11a15a4a8a12a16

[ a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 a 10 a 11 a 12 a 13 a 14 a 15 a 16 ]    ⟹    S 盒 变 换    ⟹    [ a 1 ′ a 2 ′ a 3 ′ a 4 ′ a 5 ′ a 6 ′ a 7 ′ a 8 ′ a 9 ′ a 10 ′ a 11 ′ a 12 ′ a 13 ′ a 14 ′ a 15 ′ a 16 ′ ]    \begin{bmatrix} a_1 & a_2 & a_3 & a_4 \\ a_5 & a_6 & a_7 & a_8 \\ a_9 & a_{10} & a_{11} & a_{12} \\ a_{13} & a_{14} & a_{15} & a_{16} \\ \end{bmatrix}\implies {\color{blue}S盒变换}\implies \begin{bmatrix} {a_1}^{'} & {a_2}^{'} & {a_3}^{'}& {a_4}^{'}\\ {a_5}^{'}& {a_6}^{'}& {a_7}^{'}& {a_8}^{'} \\ {a_9}^{'}& {a_{10}}^{'} & {a_{11}}^{'} & {a_{12}}^{'} \\ {a_{13}}^{'} & {a_{14}}^{'} & {a_{15}}^{'} & {a_{16}}^{'} \\ \end{bmatrix}\\\; a1a5a9a13a2a6a10a14a3a7a11a15a4a8a12a16Sa1a5a9a13a2a6a10a14a3a7a11a15a4a8a12a16
位 置 并 没 有 发 生 改 变 \color{red}位置并没有发生改变

S盒变换的底层细节(怎样由一个字节经过数学运算后得到变换后的字节)【一般可以通过查表找到对应的值】

S 盒 变 换 就 是 由 一 个 b y t e 的 数 据 ( 8 位 ) 转 换 为 另 一 个 b y t e 的 数 据 ( 8 位 ) \color{olive}S盒变换就是由一个byte的数据(8位)转换为另一个byte的数据(8位) Sbyte(8)byte8

这 里 提 供 一 个 算 法 , 用 来 表 示 字 节 变 换 的 过 程 , 平 时 也 可 以 直 接 通 过 以 查 表 的 方 式 找 到 变 换 后 的 字 节 。 这里提供一个算法,用来表示字节变换的过程,\\平时也可以直接通过以查表的方式找到变换后的字节。
所 以 对 这 个 变 换 过 程 没 有 太 大 兴 趣 的 话 , 可 以 直 接 跳 过 这 一 个 片 段 , 也 不 会 影 响 对 后 面 内 容 的 理 解 \color{gray}所以对这个变换过程没有太大兴趣的话,可以直接跳过这一个片段,也不会影响对后面内容的理解

S 盒 变 换 由 两 个 变 换 复 合 而 成 : \color{black}S盒变换由两个变换复合而成: S:

  • 每一个字节的变换为它在 有 限 域 G F ( 2 8 ) \color{blue}有限域GF(2^8) GF(28) 中的乘法逆元,规定“0”变换到其本身( 可 逆 \color{red}可逆
  • 将以上得到的结果,经过二元域的一个仿射变换

有 限 域 ( G F ( 2 8 ) ) :    \color{red}有限域(GF(2^8)):\\\; GF(28)
如 0110    1001 表 示 为 :        0 × x 7 + 1 × x 6 + 1 × x 5 + 0 × x 4 + 1 × x 3 + 0 × x 2 + 0 × x 1 + 1 × x 0 \color{gray}如0110\;1001表示为:\\\;\;\;0×x^7+1×x^6+1×x^5+0×x^4+1×x^3+0×x^2+0×x^1+1×x^0 011010010×x7+1×x6+1×x5+0×x4+1×x3+0×x2+0×x1+1×x0
加 法 : \color{blue}加法:
       例 子 : 0101    0111 ⨁ 1000    0011 = 1101    0100 \;\;\;例子:0101\;0111\bigoplus 1000\;0011=1101\;0100 0101011110000011=11010100
乘 法 : \color{blue}乘法:
两 个 字 节 相 乘 模 二 元 域 G F ( 2 8 ) 上 的 8 次 不 可 约 多 项 式 m ( x ) , 模 m ( x ) 的 目 的 是 确 保 其 最 终 得 到 的 值 还 是 一 个 低 于 8 次 的 多 项 式 一 般 地 , 将 m ( x ) 规 定 为 固 定 的 值 : m ( x ) = x 8 ⨁ x 4 ⨁ x 3 ⨁ x ⨁ 1 \color{brown}两个字节相乘模二元域GF(2^8)上的8次不可约多项式m(x),模m(x)的目的是确保其最终得到的值还是一个低于8次的多项式\\一般地,将m(x)规定为固定的值:m(x)=x^8\bigoplus x^4\bigoplus x^3\bigoplus x\bigoplus 1 GF(28)8m(x)m(x)8m(x)m(x)=x8x4x3x1
       例 子 :    0101    0111 × 1000    0011 = ( x 6 ⨁ x 4 ⨁ x 2 ⨁ x ⨁ 1 ) × ( x 7 ⨁ x ⨁ 1 )    m o d    m ( x ) = ( x 13 ⨁ x 11 ⨁ x 9 ⨁ x 8 ⨁ x 5 ⨁ x 4 ⨁ x 3 ⨁ 1 )    m o d    m ( x ) = x 7 ⨁ x 6 ⨁ 1 = 1100    0001 \;\;\;例子:\\\;0101\;0111×1000\;0011\\=(x^6\bigoplus x^4\bigoplus x^2\bigoplus x\bigoplus 1)×(x^7\bigoplus x\bigoplus 1)\;mod\;m(x)\\=(x^{13}\bigoplus x^{11}\bigoplus x^9 \bigoplus x^8\bigoplus x^5\bigoplus x^4\bigoplus x^3\bigoplus1)\;mod\;m(x)\\=x^7\bigoplus x^6\bigoplus1\\=1100\;0001 01010111×10000011=(x6x4x2x1)×(x7x1)modm(x)=(x13x11x9x8x5x4x31)modm(x)=x7x61=11000001

求 1001    1101 的 字 节 代 替 变 换 : \color{blue}求1001\;1101的字节代替变换: 10011101:

  • 求乘法逆元
  • 作仿射变换

解 : \color{red}解:
1001    1101 → x 7 ⨁ x 3 ⨁ x 2 ⨁ 1 \color{blue}1001\;1101\to x^7\bigoplus x^3\bigoplus x^2\bigoplus 1 10011101x7x3x21
求 乘 法 逆 元 : 利 用 欧 几 里 德 算 法 , 得 到 {\color{red}求乘法逆元:}\color{gray}利用欧几里德算法,得到
( x 7 ⨁ x 3 ⨁ x 2 ⨁ 1 ) − 1 = x 即 ( 1001    1101 ) − 1 = 0000    0010 \color{blue}(x^7\bigoplus x^3\bigoplus x^2\bigoplus 1)^{-1}=x\\即(1001\;1101)^{-1}={\color{brown}0000\;0010} (x7x3x21)1=x(10011101)1=00000010
求 仿 射 变 换 : \color{red}求仿射变换: 仿
[ 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 ] × [ 0 1 0 0 0 0 0 0 ] ⨁ [ 0 1 1 0 0 0 1 1 ] = [ 1 0 1 1 1 0 1 0 ] = 0101    1101 = 5 D    \begin{bmatrix} 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 \\ 0 & 1 & 1 & 1 & 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 1 & 1 & 1 & 1 & 0 \\ 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \\ 1 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\ 1 & 1 & 0 & 0 & 0 & 1 & 1 & 1 \\ 1 & 1 & 1 & 0 & 0 & 0 & 1 & 1 \\ 1 & 1 & 1 & 1 & 0 & 0 & 0 & 1 \\ \end{bmatrix}× {\color{red}\begin{bmatrix} 0 \\ 1 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \end{bmatrix}}\bigoplus \begin{bmatrix} 0 \\ 1 \\ 1 \\ 0 \\ 0 \\ 0 \\ 1 \\ 1 \end{bmatrix}={\color{blue} \begin{bmatrix} 1 \\ 0 \\ 1 \\ 1 \\ 1 \\ 0 \\ 1 \\ 0 \end{bmatrix}=0101\;1101=5D}\\\; 1000111111000111111000111111000111111000011111000011111000011111×0100000001100011=10111010=01011101=5D
该 等 式 中 , 红 色 的 是 上 一 步 得 到 的 乘 法 逆 元 , 灰 色 的 矩 阵 为 固 定 的 , 蓝 色 的 是 最 终 要 求 的 字 节 变 换 \\该等式中,{\color{red}红色的是上一步得到的乘法逆元},灰色的矩阵为固定的,{\color{blue}蓝色的是最终要求的字节变换}

亦 或 通 过 查 表 得 到 结 果 : 亦或通过查表得到结果:

在这里插入图片描述
因 为 二 级 制 1001    1101 为 16 进 制 的 8 D , 即 , x 轴 为 8 , y 轴 为 D 。 对 应 的 数 字 正 好 为 16 进 制 的 5 D \color{red}因为二级制1001\;1101为16进制的8D,即,x轴为8,y轴为D。对应的数字正好为16进制的5D 10011101168Dx8yD165D

行 移 位 变 换 \color{red}行移位变换

表 达 式 : S h i t e R o w ( S t a t e ) , S t a t e 也 是 一 个 矩 阵    \color{blue}表达式:ShiteRow(State),State 也是一个矩阵\\\; ShiteRow(State)State
将 一 个 字 节 矩 阵 自 上 向 下 称 0 , 1 , 2 , 3 行 将一个字节矩阵自上向下称0,1,2,3行 0123
无 论 分 组 长 度 是 多 少 128 b i t , 192 b i t , 还 是 256 b i t 都 分 为 了 4 行 , 只 是 三 者 每 一 行 的 元 素 不 同 , 如 128 b i t 每 一 行 有 4 个 元 素 。 而 192 b i t 每 一 行 有 6 个 元 素 。 256 b i t 每 一 行 有 8 个 元 素 。 无论分组长度是多少128bit,192bit,还是256bit都分为了4行,只是三者每一行的元素不同,\\如128bit每一行有4个元素。\\而192bit每一行有6个元素。\\256bit每一行有8个元素。 128bit,192bit256bit4128bit4192bit6256bit8
每 一 个 元 素 是 1 个 字 节 。 拿 128 b i t 的 举 例 , 4 行 4 列 是 16 个 元 素 , 16 × 8 b i t 正 好 是 128 b i t \color{red}每一个元素是1个字节。\\{\color{blue}拿128bit的举例,4行4列是16个元素,16×8bit正好是128bit} 1128bit441616×8bit128bit

每 一 种 的 的 分 组 长 度 对 应 着 属 于 他 们 自 己 偏 移 量 。 每一种的的分组长度对应着属于他们自己偏移量。

位移量0行1行2行3行
128bit0123
192bit0123
256bit0134

如 , 拿 128 b i t 的 分 组 长 度 进 行 举 例 。 ( 其 规 律 是 将 第 i 行 左 移 i 个 字 节 )    如,拿128bit的分组长度进行举例。(其规律是将第i行左移i个字节)\\\; 128bit(ii)
[ a 0 a 4 a 8 a 12 a 1 a 5 a 9 a 13 a 2 a 6 a 10 a 14 a 3 a 7 a 11 a 15 ]    ⟹    [ a 0 a 4 a 8 a 12 a 5 a 9 a 13 a 1 a 10 a 14 a 2 a 6 a 15 a 3 a 7 a 11 ]    \begin{bmatrix} a_0 & a_4 & a_8 & a_{12} \\a_1 & a_5 & a_9 & a_{13} \\a_2 & a_6 & a_{10} & a_{14} \\a_3 & a_7 & a_{11} & a_{15} \\ \end{bmatrix}\implies\begin{bmatrix} a_0 & a_4 & a_8 & a_{12} \\a_5 & a_9 & a_{13} & a_{1} \\a_{10} & a_{14} & a_{2} & a_{6} \\a_{15} & a_3 & a_{7} & a_{11} \\ \end{bmatrix}\\\; a0a1a2a3a4a5a6a7a8a9a10a11a12a13a14a15a0a5a10a15a4a9a14a3a8a13a2a7a12a1a6a11
变 换 的 目 的 是 使 得 原 来 同 一 列 中 的 4 个 元 组 分 散 到 不 同 列 中 变换的目的是使得原来同一列中的4个元组分散到不同列中 使4

列 混 合 变 换 \color{red}列混合变换

表 达 式 : M i x C o l u m n ( S t a t e ) , S t a t e 是 一 个 矩 阵    \color{blue}表达式:MixColumn(State),State 是一个矩阵\\\; MixColumn(State)State
将 矩 阵 [ a 0 a 4 a 8 a 12 a 1 a 5 a 9 a 13 a 2 a 6 a 10 a 14 a 3 a 7 a 11 a 15 ] 的 每 一 列 依 次 同 矩 阵 C ( X ) = [ 2 3 1 1 1 2 3 1 1 1 2 3 3 1 1 2 ] 相 乘 得 到 的 另 一 个 矩 阵 [ b 0 b 4 b 8 b 12 b 1 b 5 b 9 b 13 b 2 b 6 b 10 b 14 b 3 b 7 b 11 b 15 ] 。    将矩阵\begin{bmatrix} a_0 & a_4 & a_8 & a_{12} \\a_1 & a_5 & a_9 & a_{13} \\a_2 & a_6 & a_{10} & a_{14} \\a_3 & a_7 & a_{11} & a_{15} \\ \end{bmatrix}的每一列依次同矩阵C(X)=\begin{bmatrix} 2 & 3 & 1 & 1 \\ 1 & 2 & 3 & 1 \\ 1 & 1 & 2 & 3 \\ 3 & 1 & 1 & 2 \\ \end{bmatrix}相乘得到的另一个矩阵\begin{bmatrix} b_0 & b_4 & b_8 & b_{12} \\b_1 & b_5 & b_9 & b_{13} \\b_2 & b_6 & b_{10} & b_{14} \\b_3 & b_7 & b_{11} & b_{15} \\ \end{bmatrix}。\\\; a0a1a2a3a4a5a6a7a8a9a10a11a12a13a14a15C(X)=2113321113211132b0b1b2b3b4b5b6b7b8b9b10b11b12b13b14b15
[ b 0 b 1 b 2 b 3 ] = [ 2 3 1 1 1 2 3 1 1 1 2 3 3 1 1 2 ] × [ a 0 a 1 a 2 a 3 ]    \begin{bmatrix}b_0\\b_1\\b_2\\b_3\end{bmatrix}=\begin{bmatrix} 2 & 3 & 1 & 1 \\ 1 & 2 & 3 & 1 \\ 1 & 1 & 2 & 3 \\ 3 & 1 & 1 & 2 \\ \end{bmatrix}×\begin{bmatrix}a_0\\a_1\\a_2\\a_3\end{bmatrix}\\\; b0b1b2b3=2113321113211132×a0a1a2a3
b 0 = 2 × a 0 ⨁ 3 × a 1 ⨁ 1 × a 2 ⨁ 1 × a 3 b_0=2×a_0\bigoplus 3×a_1\bigoplus 1×a_2\bigoplus 1×a_3 b0=2×a03×a11×a21×a3    ( 注 意 参 与 计 算 的 数 都 是 19 进 制 的 数 , 并 进 行 异 或 操 作 ) \color{red}\;(注意参与计算的数都是19进制的数,并进行异或操作) 19
其 中 矩 阵 中 的 各 个 元 素 都 是 16 进 制 数 \color{red}其中矩阵中的各个元素都是16进制数 16

圈 密 钥 加 \color{red}圈密钥加

表 达 式 : A d d R o u n d K e y ( S t a t e , R o u n d K e y ) , S t a t e 和 R o u n d 都 是 一 个 矩 阵    \color{blue}表达式:AddRoundKey(State,RoundKey),State和Round都是一个矩阵\\\; AddRoundKey(State,RoundKey)StateRound
R o u n d k e y 是 圈 密 钥 , S t a t e 是 进 行 了 之 前 运 算 后 得 到 的 矩 阵 。    圈 密 钥 长 度 等 于 分 组 长 度 Roundkey是圈密钥,State是进行了之前运算后得到的矩阵。\\\;圈密钥长度等于分组长度 RoundkeyState

密 钥 字 节 矩 阵 与 当 前 状 态 字 节 矩 阵 的 对 应 字 节 进 行    亦 或 运 算 “ ⨁ ”    密钥字节矩阵与当前状态字节矩阵的对应字节进行\;亦或运算“\bigoplus”\\\;

[ a 0 a 4 a 8 a 12 a 1 a 5 a 9 a 13 a 2 a 6 a 10 a 14 a 3 a 7 a 11 a 15 ] ⨁ [ k 0 k 4 k 8 k 12 k 1 k 5 k 9 k 13 k 2 k 6 k 10 k 14 k 3 k 7 k 11 k 15 ] = [ b 0 b 4 b 8 b 12 b 1 b 5 b 9 b 13 b 2 b 6 b 10 b 14 b 3 b 7 b 11 b 15 ]       k 是 密 钥 。 \begin{bmatrix} a_0 & a_4 & a_8 & a_{12} \\a_1 & a_5 & a_9 & a_{13} \\a_2 & a_6 & a_{10} & a_{14} \\a_3 & a_7 & a_{11} & a_{15} \\ \end{bmatrix}\bigoplus \begin{bmatrix} k_0 & k_4 & k_8 & k_{12} \\k_1 & k_5 & k_9 & k_{13} \\k_2 & k_6 & k_{10} & k_{14} \\k_3 & k_7 & k_{11} & k_{15} \\ \end{bmatrix}=\begin{bmatrix} b_0 & b_4 & b_8 & b_{12} \\b_1 & b_5 & b_9 & b_{13} \\b_2 & b_6 & b_{10} & b_{14} \\b_3 & b_7 & b_{11} & b_{15} \\ \end{bmatrix}\\\;\\\;k是密钥。 a0a1a2a3a4a5a6a7a8a9a10a11a12a13a14a15k0k1k2k3k4k5k6k7k8k9k10k11k12k13k14k15=b0b1b2b3b4b5b6b7b8b9b10b11b12b13b14b15k

密钥生成算法

初始密钥长度分为128bit,192bit,256bit
密钥长度等于分组长度
共 需 密 钥 总 数 = 初 始 密 钥 长 度 × ( 圈 数 + 1 ) \color{red}共需密钥总数=初始密钥长度×(圈数+1) =×(+1)
如 , 对 于 128 b i t , 对 应 着 10 圈 ( 通 过 查 找 之 前 的 表 格 得 到 ) : 需 要 的 总 密 钥 = 128 b i t × ( 10 + 1 ) = 1408 b i t 。 \color{blue}如,对于128bit,对应着10圈(通过查找之前的表格得到):\\需要的总密钥=128bit×(10+1)=1408bit。 128bit10=128bit×10+1=1408bit
所 以 对 于 需 要 进 行 10 圈 加 密 需 要 将 128 b i t 的 初 始 密 钥 扩 展 为 1408 b i t 的 密 钥 , 为 每 一 圈 提 供 不 同 的 圈 密 钥 \color{gray}所以对于需要进行10圈加密需要将128bit的初始密钥扩展为1408bit的密钥,为每一圈提供不同的圈密钥 10128bit1408bit

用 128 b i t 密 钥 进 行 举 例 : \color{red}用128bit密钥进行举例: 128bit
A E S − 128 , 初 始 密 钥 为 4 个 32 位 字 节 , 圈 数 为 10 。 则 共 需 要 4 × ( 10 + 1 ) = 44 个 32 位 字 的 扩 展 密 钥 。 因 此 我 们 需 要 将 4 个 32 b i t 的 初 始 密 钥    扩 展 为    44 个 32 b i t 的 扩 展 密 钥 N k = 初 始 密 钥 比 特 数 / 32 , 是 原 始 密 钥 可 产 生 的 32 位 的 个 数 。 AES-128,初始密钥为4个32位字节,圈数为10。则共需要4×(10+1)=44个32位字的扩展密钥。{\color{blue}因此我们需要将4个32bit的初始密钥\;扩展为\;44个32bit的扩展密钥}\\N_k=初始密钥比特数/32,是原始密钥可产生的32位的个数。 AES128432104×10+1=4432432bit4432bitNk=/3232

初始密钥长度128bit192bit256bit
N k N_k Nk468

表 格 中 的 4 , 6 , 8 。 单 位 是 32 b i t , 如 4 个 32 b i t , 6 个 32 b i t , 8 个 32 b i t \color{gray}表格中的4,6,8。单位是32bit,如4个32bit,6个32bit,8个32bit 46832bit432bit632bit832bit
密 钥 生 成 有 两 个 情 况 , 一 个 ( N k = 4 或 者 N k = 6 ) ; 一 个 N k = 8 。    密钥生成有两个情况,一个(N_k=4或者N_k=6);一个N_k=8。\\\\\; Nk=4Nk=6;Nk=8

第 一 种 : N k = 4 或 者 6 : ( 128 b i t , 192 b i t ) 第一种:\color{blue}N_k=4或者6:(128bit,192bit) Nk=46128bit192bit

现 在 要 将 4 个 32 b i t 扩 展 为 44 个 32 b i t 现在要将4个32bit扩展为44个32bit 432bit4432bit

128 b i t :    N 0 , N 1 , N 2 , N 3 → W 0 , W 1 , W 2 , W 3 , W 4 , … … , W 42 , W 43    {\color{blue}128bit:\;}N_0,N_1,N_2,N_3\to W_0,W_1,W_2,W_3,W_4,……,W_{42},W_{43}\\\; 128bit:N0,N1,N2,N3W0,W1,W2,W3,W4,,W42,W43
192 b i t :    N 0 , N 1 , N 2 , N 3 , N 4 , N 5 → W 0 , W 1 , W 2 , W 3 , W 4 , … … , W 42 , W 43    {\color{blue}192bit:\;}N_0,N_1,N_2,N_3,N_4,N_5\to W_0,W_1,W_2,W_3,W_4,……,W_{42},W_{43}\\\; 192bit:N0,N1,N2,N3,N4,N5W0,W1,W2,W3,W4,,W42,W43
其 中 前 N k 个 直 接 取 自 初 始 密 钥 , 即 , N k = W k − 1 ; 后 面 的 都 取 自 于 前 一 个 递 归 生 成 。       其中前N_k个直接取自初始密钥,即,N_k=W_{k-1};后面的都取自于前一个递归生成。\\\;\\\; NkNk=Wk1;

在这里插入图片描述
对 于 W i − 1 , 观 察 i 能 否 整 除 N k ( N k 的 值 要 么 为 4 要 么 为 6 ) 如 果 不 能 , 则 将 W i − 1 与 W i − N k 进 行 模 二 加 运 算 , 得 到 W i 。 ( 其 中 W i − N k 要 么 是 W i − 4 要 么 是 W i − 6 ) 如 果 能 , 先 进 行 循 环 左 移 一 个 字 节 ( 8 个 b i t ) , 然 后 再 进 行 字 节 代 替 , 将 得 到 的 结 果 一 个 结 果 设 为 X R c o n [ i / N k ] ⨁ W i − N k 的 结 果 设 为 Y , 计 算 X ⨁ Y , 得 到 W i 。    对于W_{i-1},观察 i 能否整除N_k(N_k的值要么为4要么为6)\\如果不能,则将W_{i-1}与W_{i-N_k}进行模二加运算,{\color{red}得到W_i}。(其中W_{i-N_k}要么是W_{i-4}要么是W_{i-6})\\如果能,先进行循环左移一个字节(8个bit),然后再进行字节代替,将得到的结果一个结果设为X\\Rcon[i/N_k]\bigoplus W_{i-N_k}的结果设为Y,\\计算X\bigoplus Y,{\color{red}得到W_i}。\\\; Wi1iNk(Nk46)Wi1WiNkWiWiNkWi4Wi68bitXRcon[i/Nk]WiNkYXYWi

其 中 就 产 生 了 一 个 疑 点 : R c o n [ i / N k ] 是 什 么 ? 其中就产生了一个疑点:Rcon[i/N_k]是什么? Rcon[i/Nk]

1. R c o n [ i / N k ] 是 什 么 ? 1.Rcon[i/N_k]是什么? 1.Rcon[i/Nk]
分析以下这个式子, R c o n [ i / N k ]    既 然 已 经 走 了 这 个 分 支 , 说 明 i / N k 肯 定 是 个 整 数 , 而 且 其 值 肯 定 是 在 1 — 10 之 间 Rcon[i/N_k]\;既然已经走了这个分支,说明i/N_k肯定是个整数,而且其值肯定是在1—10之间 Rcon[i/Nk]i/Nk110
一 般 地 , R c o n [ i / N k ] 别 设 定 为 32 b i t 的 常 数 , R c o n [ i / N k ] = 【 R C [ J ] , 00 , 00 , 00 】 ( 是 16 进 制 数 ) 一般地,Rcon[i/N_k]别设定为32bit的常数,Rcon[i/N_k]=【RC[J],00,00,00】(是16进制数) Rcon[i/Nk]32bitRcon[i/Nk]=RC[J],00,00,00(16)

J \color{blue}J J12345678910
R C [ J ] \color{blue}RC[J] RC[J]01020304082040801B36
第 二 种 : N k = 8 : ( 256 b i t ) 第二种:\color{blue}N_k=8:(256bit) Nk=8256bit

前 N k 个 ( 8 个 ) W 0 , W 1 , W 2 , W 3 , … … , W 7 , W 8 直 接 取 自 初 始 密 钥 , 同 第 一 种 ( N k = 4 或 6 是 的 情 况 相 似 ) 前N_k个(8个)W_0,W_1,W_2,W_3,……,W_7,W_8直接取自初始密钥,同第一种(N_k=4或6是的情况相似) Nk8W0,W1,W2,W3,,W7,W8Nk=46

在这里插入图片描述

  • 如图所示

脱密算法

加 、 脱 密 的 过 程 具 有 等 价 结 构 , 通 过 将 加 密 过 程 中 的 变 换 用 相 应 的 逆 变 换 代 替 , 以 及 在 密 钥 调 度 中 作 适 当 变 化 , 即 成 为 脱 密 过 程 。 过 程 如 图 所 示 。 加、脱密的过程具有等价结构,通过将加密过程中的变换用相应的逆变换代替,\\以及在密钥调度中作适当变化,即成为脱密过程。过程如图所示。

在这里插入图片描述
其中 C − 1 ( K 9 ) C^{-1}(K_9) C1(K9)是对 K9 进行列混合变换的逆变换,K9 到K1都需要进行这一逆变换。

逆 字 节 代 替 变 换 ( 逆 S 盒 ) 逆字节代替变换(逆S盒) S

  1. 先用GF(2)上的仿射变换
  2. 再取GF(28上的乘法逆)

亦或通过查表得出:
在这里插入图片描述

逆 行 移 位 变 换 : 参 照 行 移 位 变 换 的 规 则 , 只 是 将 向 左 移 位 , 变 为 向 右 移 位    逆行移位变换:\color{blue}参照行移位变换的规则,只是将向左移位,变为向{\color{red}右}移位\\\;

逆 列 混 合 变 换 : 同 列 混 合 一 样 乘 一 个 固 定 的 矩 阵 ( 1 也 是 6 进 制 ) 。 逆列混合变换:\color{blue}同列混合一样乘一个固定的矩阵(1也是6进制)。 :16

∣ 0 e 0 b 0 d 09 09 0 e 0 b 0 d 0 d 09 0 e 0 b 0 b 0 d 09 0 e ∣    \begin{vmatrix} 0e & 0b & 0d & 09 \\ 09 & 0e & 0b & 0d \\ 0d & 09 & 0e & 0b \\ 0b & 0d & 09 & 0e \\ \end{vmatrix}\\\; 0e090d0b0b0e090d0d0b0e09090d0b0e

圈 密 钥 加 : 异 或 运 算    圈密钥加:异或运算\\\;
− − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − -------------------------------------------

加密与解密的一些其他性质

加密也解密进行比较:
在这里插入图片描述
对比这两张图发现,加密和解密圈函数内的3个函数步骤尽然相同,
这是由于以下两个特性决定的。

  • 字节代替和行移位可交换(先进行什么运算对结果没有影响)

在这里插入图片描述

  • 逆列混合变换和圈密钥加广义可交换

以 上 即 为 A E S 的 全 部 内 容 。 谢 谢 大 家 ! 也 请 大 家 批 评 指 正 。 以上即为AES的全部内容。谢谢大家!也请大家批评指正。 AES

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值