AES 加密算法详解

内容分享3周前发布
0 0 0

1. 基础概念

AES(Advanced Encryption Standard,高级加密标准)是一种 对称加密算法,由美国国家标准与技术研究院(NIST)于2001年正式发布,取代了旧的 DES 算法。它被广泛应用于政府、金融、物联网等领域,是目前全球公认最安全的加密算法之一。


2. 核心特性

特性

说明

对称加密

加密和解密使用 同一个密钥

分组加密

数据被分割为固定长度的 128位(16字节) 块进行处理

密钥长度

支持 128位、192位、256位 三种密钥长度(安全性递增)

加密轮数

根据密钥长度自动确定:128位(10轮)、192位(12轮)、256位(14轮)


3. 加密过程(以 AES-128 为例)

3.1 整体流程

明文输入  初始轮密钥加  10轮加密变换  最终密文输出

3.2 每轮操作的 4 个关键步骤

  1. SubBytes(字节替换)
    使用
    S-Box(替换盒)对每个字节进行非线性替换,增强混淆性。

AES 加密算法详解

  1. ShiftRows(行位移)
    对数据块的
    每一行 进行循环左移:
  • 第1行不移位
  • 第2行左移1字节
  • 第3行左移2字节
  • 第4行左移3字节

AES 加密算法详解

  1. MixColumns(列混淆)
    通过矩阵乘法对
    每一列 进行线性变换,增强扩散性。
  2. AddRoundKey(轮密钥加)
    将当前轮次的
    扩展密钥 与数据块进行异或(XOR)操作。

4. 密钥扩展(Key Expansion)

将初始密钥扩展为 11组轮密钥(AES-128 需要 10 轮加密 + 1 次初始轮密钥加):

  • 通过 RotWord(字循环)、SubWord(字替换)、Rcon(轮常数异或)生成新密钥
  • 确保每轮使用的密钥唯一且不可预测

5. 工作模式(Modes of Operation)

模式

全称

特点

适用场景

ECB

Electronic Codebook

简单快速,但一样明文生成一样密文(易被攻击)

❌ 不推荐使用

CBC

Cipher Block Chaining

引入 IV(初始化向量),前一块密文影响后一块

文件加密、TLS

CTR

Counter

将块加密转换为流加密,支持并行计算

实时流数据加密

GCM

Galois/Counter Mode

提供加密 + 完整性校验(MAC),性能高效

网络通信、物联网


6. 安全性

  • 理论安全性:目前没有已知的 多项式时间算法 能破解 AES(暴力破解需 2^128 次操作,宇宙寿命内无法完成)。
  • 实际风险:主要来自 实现错误(如弱密钥、IV 重用)或 侧信道攻击(功耗分析、计时攻击)。

最佳实践:

  1. 优先选择 256位密钥
  2. 使用 CBC/CTR/GCM 模式,避免 ECB
  3. IV 必须随机且不可预测(每次加密生成新 IV)
  4. 结合 HMACAEAD(如 GCM)保证数据完整性

7. 代码示例(伪代码)

dart
// 使用 Flutter 的 `encrypt` 库实现 AES-CBC 加密
import 'package:encrypt/encrypt.dart';

void main() {
  final plainText = 'Secret Message';
  final key = Key.fromUtf8('32-byte-long-encryption-key-1234567890'); // AES-256
  final iv = IV.fromSecureRandom(16); // 生成随机 IV

  final encrypter = Encrypter(AES(key, mode: AESMode.cbc));
  final encrypted = encrypter.encrypt(plainText, iv: iv);
  
  print('密文: ${encrypted.base64}');
  print('解密: ${encrypter.decrypt(encrypted, iv: iv)}');
}

8. 常见问题

  • Q: AES 会被量子计算机破解吗?
    A: 理论上 Grover 算法可将暴力破解时间开平方(如 AES-256 → 等效安全性 128位),但仍是长期安全的。
  • Q: 为什么要避免 ECB 模式?
    A: ECB 会暴露明文结构(如图像加密后仍可见轮廓):
    https://i.imgur.com/4u7TcbT.png
  • Q: 如何安全存储密钥?
    A: 使用硬件安全模块(HSM)、Android Keystore/iOS Keychain,或基于口令的密钥派生(PBKDF2)。
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...