📜  高级加密标准 (AES)

📅  最后修改于: 2022-05-13 01:57:03.282000             🧑  作者: Mango

高级加密标准 (AES)

高级加密标准 (AES) 是美国国家标准与技术研究院 (NIST) 在 2001 年制定的电子数据加密规范。如今,AES 被广泛使用,因为它比 DES 和三重 DES 更强大,尽管更难来实施。

要记住的要点

  • AES 是一种分组密码。
  • 密钥大小可以是 128/192/256 位。
  • 以每个 128 位的块加密数据。

这意味着它需要 128 位作为输入,并输出 128 位的加密密文作为输出。 AES 依赖于替换置换网络原理,这意味着它是使用一系列链接操作来执行的,这些操作涉及输入数据的替换和改组。

密码的工作:
AES 对数据字节而不是位执行操作。由于块大小为 128 位,因此密码一次处理 128 位(或 16 个字节)的输入数据。

轮数取决于密钥长度,如下所示:

  • 128 位密钥 – 10 轮
  • 192 位密钥 – 12 轮
  • 256 位密钥 – 14 轮

创建圆键:
密钥调度算法用于从密钥计算所有轮密钥。因此,初始密钥用于创建许多不同的轮密钥,这些密钥将用于相应的加密轮次。

加密:
AES 将每个块视为列主要排列中的 16 字节(4 字节 x 4 字节 = 128)网格。

[ b0 | b4 | b8 | b12 |
| b1 | b5 | b9 | b13 |
| b2 | b6 | b10| b14 |
| b3 | b7 | b11| b15 ]

每轮包括4个步骤:

  • 子字节
  • 移位行
  • 混合列
  • 添加圆键

最后一轮没有 MixColumns 轮。

SubBytes 执行替换,而 ShiftRows 和 MixColumns 执行算法中的置换。

子字节:
这一步实现了替换。

在此步骤中,每个字节都被另一个字节替换。它使用查找表执行,也称为 S-box。这种替换的方式是,一个字节永远不会被它自己替换,也不会被另一个字节替换,另一个字节是当前字节的补充。这一步的结果是一个 16 字节 (4 x 4 ) 的矩阵,就像以前一样。

接下来的两个步骤实现了排列。

移位行:
这一步就像听起来一样。每行移动特定次数。

  • 第一行不移位
  • 第二行向左移动一次。
  • 第三行向左移动两次。
  • 第四行向左移动三次。

(执行左循环移位。)

[ b0  | b1  | b2  | b3  ]         [ b0  | b1  | b2  | b3  ]
| b4  | b5  | b6  | b7  |    ->   | b5  | b6  | b7  | b4  |
| b8  | b9  | b10 | b11 |         | b10 | b11 | b8  | b9  |
[ b12 | b13 | b14 | b15 ]         [ b15 | b12 | b13 | b14 ]

混合列:
这一步基本上是一个矩阵乘法。每一列都与一个特定的矩阵相乘,因此列中每个字节的位置都会改变。

最后一轮跳过此步骤。

[ c0 ]         [ 2  3  1  1 ]  [ b0 ]
| c1 |  =      | 1  2  3  1 |     | b1 |
| c2 |      | 1  1  2  3 |     | b2 |
[ c3 ]      [ 3  1  1  2 ]     [ b3 ]

添加圆形键:
现在,前一阶段的结果输出与相应的轮密钥进行异或运算。在这里,这 16 个字节不被视为一个网格,而只是 128 位数据。

在所有这些回合之后,128 位加密数据作为输出返回。重复这个过程,直到所有要加密的数据都经过这个过程。

解密:
回合中的阶段可以轻松撤消,因为这些阶段与它相反,执行时会恢复更改。根据密钥大小,每 128 个块会经历 10、12 或 14 轮。

每一轮解密的阶段如下:

  • 添加圆键
  • 反向混合列
  • 移位行
  • 反向子字节

解密过程是反向完成的加密过程,因此我将解释具有显着差异的步骤。

反向混合列:
此步骤类似于加密中的 MixColumns 步骤,但用于执行操作的矩阵不同。

[ b0 ]         [ 14  11  13  9  ]  [ c0 ]
| b1 |  =      | 9   14  11  13 |     | c1 |
| b2 |      | 13  9   14  11 |     | c2 |
[ b3 ]         [ 11  13  9   14 ]     [ c3 ]

反向子字节:
逆 S-box 用作查找表,并在解密期间使用它替换字节。

概括 :
AES 指令集现已集成到 CPU 中(提供数 GB/s 的吞吐量),以提高使用 AES 进行加密和解密的应用程序的速度和安全性。尽管自它推出以来已经 20 年,但我们未能打破 AES 算法,因为即使使用当前技术也是不可行的。迄今为止,唯一的漏洞仍然存在于算法的实现中。