← [ BACK_TO_NOTES ]

Advanced Encryption Standard(AES)

AES 是固定 128-bit block size、支持 128/192/256-bit key 的现代对称分组密码;AES 本体只提供可逆 block transform,真正消息保护还需要安全的 mode/AEAD、nonce 与 key-management。

#concept #evergreen #crypto #algorithm

[!info] related notes

Advanced Encryption Standard(AES)

一句话定义

AES 是现代主流 symmetric block cipher。

三个标准实例:

  • AES-128
  • AES-192
  • AES-256

三者的 block size 都是 128 bit;后缀表示 key length,而不是 block size。

AES 本体做什么

AES 接收:

  • 一个 128-bit plaintext block;
  • 一个 128/192/256-bit key;

产生一个 128-bit ciphertext block。

解密执行逆变换。

因此:

AES 本身只定义 block transformation,不直接定义“怎样安全加密任意长度文件/消息”。

Rijndael 与 AES

AES 来自 Rijndael family,但标准只选定了固定 128-bit block size 的三个 key-size 版本。

所以不要把所有 Rijndael 参数组合都称为 AES。

Round Structure

AES 不是 Feistel network。

它采用 substitution-permutation network 风格的 round structure,核心包括:

  • SubBytes;
  • ShiftRows;
  • MixColumns;
  • AddRoundKey。

Key size 不同,round 数也不同:

  • AES-128:10 rounds;
  • AES-192:12 rounds;
  • AES-256:14 rounds。

理解这些结构有助于学习算法,但工程中不应自行实现 production AES。

AES 不等于安全消息加密

如果只说:

“我们用了 AES,所以安全”

信息是不完整的。

还必须知道:

  • mode;
  • nonce / IV;
  • authentication;
  • key origin;
  • key rotation;
  • serialization;
  • replay policy。

例如:

  • AES-ECB 泄露重复 block pattern;
  • AES-CBC 只提供 confidentiality,仍需独立 authentication;
  • AES-GCM 提供 AEAD,但 nonce reuse 会严重破坏安全性。

AES-GCM

现代应用常见:

AES

  • GCM mode
    → authenticated encryption

即同时保护:

  • confidentiality;
  • ciphertext integrity/authenticity;

并可认证不加密的 AAD。

完整模型见 AEAD。

Key Size

AES-128、192、256 都是标准化算法。

不能用:

AES-256 的数字更大,所以所有场景都必然“更好”

作为统一选型结论。

实际还需要考虑:

  • security policy;
  • performance;
  • hardware acceleration;
  • protocol requirement;
  • key-management quality。

Hardware Acceleration

现代 CPU 常提供 AES acceleration,例如 AES-NI 或平台等价能力。

因此 AES 在很多服务端/桌面/移动环境都具有很高吞吐。

但具体性能仍取决于:

  • mode;
  • library;
  • CPU;
  • message size;
  • parallelization。

Key Management 比算法名字更重要

安全系统还需要处理:

  • key generation;
  • secure storage;
  • KMS/HSM;
  • rotation;
  • access control;
  • destruction;
  • key version。

一个硬编码在源码里的 AES-256 key,并不会因为 key length 是 256 bit 就变安全。

不要自己实现 AES

Production 应使用成熟 cryptographic library / platform API。

原因包括:

  • side-channel;
  • constant-time;
  • padding/mode;
  • nonce management;
  • hardware backend;
  • implementation validation。

当前标准状态

NIST FIPS 197 在 2023 年进行了编辑性更新,没有改变 AES 算法本身。

AES-128、AES-192、AES-256 仍是标准中的三个 AES 实例。

学习检查

  1. AES-128 的 128 表示 key size 还是 block size?
  2. AES-256 的 block size 是多少?
  3. 为什么 AES 本体不能直接回答“任意长度消息如何安全加密”?
  4. AES-CBC 与 AES-GCM 的安全目标有什么差异?
  5. 为什么 nonce/IV 管理属于 AES 系统安全的一部分?
  6. 为什么 AES-256 key 写死在源码里仍然是严重设计问题?
  7. production 为什么不应该手写 AES 实现?
创建于 2026/9/30 更新于 2026/9/30
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本