27 lines
2.2 KiB
Markdown
27 lines
2.2 KiB
Markdown
### AES 算法原理
|
||
|
||
**AES 的核心概念**
|
||
|
||
在深入原理之前,需要先了解 AES 的几个基本概念:
|
||
|
||
- **分组加密**:AES 是一种分组密码,它将明文数据分割成固定大小的**数据块**(block)进行加密。AES 的数据块大小固定为 **128 位**
|
||
- **密钥长度**:AES 支持三种密钥长度:**128 位、192 位和 256 位**。密钥长度越长,加密强度越高,但计算量也会相应增加
|
||
- **加密轮数**:加密过程由一系列重复的“轮”(rounds)组成。不同的密钥长度对应不同的轮数:
|
||
- 128 位密钥:10 轮
|
||
- 192 位密钥:12 轮
|
||
- 256 位密钥:14 轮
|
||
|
||
**加密过程的四大步骤**
|
||
|
||
每一次加密轮都由四个基本操作构成,这些操作保证了加密过程的复杂性
|
||
|
||
1. **字节替换(SubBytes)** 这是**代换**操作。AES 使用一个预先定义好的 **S-Box**(Substitution-Box),将数据块中的每个字节替换成 S-Box 中对应的另一个字节。这个操作是非线性的,目的是为了隐藏明文和密文之间的直接代数关系
|
||
2. **行移位(ShiftRows)** 这是**置换**操作。它将数据块中的每一行进行循环左移。具体来说:
|
||
- 第 0 行保持不变
|
||
- 第 1 行循环左移 1 个字节
|
||
- 第 2 行循环左移 2 个字节
|
||
- 第 3 行循环左移 3 个字节。 这个操作实现了数据字节在不同列之间的扩散,增加了密码的混淆程度
|
||
3. **列混淆(MixColumns)** 这也是**置换**操作。这个步骤对每一列进行矩阵乘法运算。通过这个操作,每一列中的每个字节都会影响到该列中其他字节的值。这进一步加大了数据的扩散,确保了明文中的微小变化能够导致密文的巨大变化
|
||
4. **轮密钥加(AddRoundKey)** 这是**异或**(XOR)操作。在每一轮开始时,都会将当前数据块与**本轮的密钥**进行异或运算。这个操作将密钥信息注入到数据中,是整个加密过程的关键步骤。每一轮使用的密钥都是由初始密钥经过**密钥扩展**算法生成的
|
||
|
||
这四个步骤按顺序重复执行多次,最后**在最后一轮会省略列混淆步骤**。解密过程则反向执行这四个步骤 |