Files
Sec-Interview/Chapter28/28-2.md
T
2025-09-25 04:06:06 +08:00

27 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 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)操作。在每一轮开始时,都会将当前数据块与**本轮的密钥**进行异或运算。这个操作将密钥信息注入到数据中,是整个加密过程的关键步骤。每一轮使用的密钥都是由初始密钥经过**密钥扩展**算法生成的
这四个步骤按顺序重复执行多次,最后**在最后一轮会省略列混淆步骤**。解密过程则反向执行这四个步骤