# Implementing Aes Encryption For Data At REST

> AES（高级加密标准）是由 NIST（FIPS 197）标准化的对称分组密码，用于保护机密和敏感数据。本技能涵盖在 GCM 模式下实现 AES-256 加密，用于加密静态文件和数据存储，包括正确的密钥派生、IV/nonce 管理和认证加密。

- Skill: `killvxk/implementing-aes-encryption-for-data-at-rest` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add killvxk/implementing-aes-encryption-for-data-at-rest`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/implementing-aes-encryption-for-data-at-rest/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/implementing-aes-encryption-for-data-at-rest

---

# 为静态数据实现 AES 加密

## 概述

AES（高级加密标准，Advanced Encryption Standard）是由 NIST（FIPS 197）标准化的对称分组密码（symmetric block cipher），用于保护机密和敏感数据。本技能涵盖在 GCM 模式下实现 AES-256 加密，用于加密静态文件和数据存储，包括正确的密钥派生（key derivation）、IV/nonce 管理和认证加密（authenticated encryption）。

## 目标

- 实现针对文件的 AES-256-GCM 加密和解密
- 使用 PBKDF2 和 Argon2 从密码派生加密密钥
- 安全管理初始化向量（IV，Initialization Vector）和 nonce
- 对整个目录树进行加密和解密
- 实现认证加密以检测篡改
- 使用流式加密处理大型文件

## 核心概念

### AES 操作模式

| 模式 | 认证 | 可并行 | 使用场景 |
|------|------|--------|---------|
| GCM  | 是（AEAD）| 是 | 网络数据、文件加密 |
| CBC  | 否 | 仅解密 | 遗留系统、磁盘加密 |
| CTR  | 否 | 是 | 流式加密 |
| CCM  | 是（AEAD）| 否 | IoT、受约束环境 |

### 密钥派生

永远不要将原始密码用作加密密钥。始终使用以下方式派生密钥：
- **PBKDF2**：NIST 批准，广泛支持（截至 2024 年最少 600,000 次迭代）
- **Argon2id**：密码哈希竞赛冠军，内存密集型
- **scrypt**：内存密集型，Argon2 的良好替代方案

### Nonce/IV 管理

- GCM 需要 96 位（12 字节）的 nonce，绝对不能在同一密钥下重复使用
- 使用 `os.urandom()` 生成 nonce（密码安全伪随机数生成器，CSPRNG）
- 将 nonce 与密文一起存储（nonce 不是秘密）

## 实现步骤

1. 安装 `cryptography` 库：`pip install cryptography`
2. 生成或派生加密密钥
3. 为每次加密操作创建随机 nonce
4. 使用密钥和 nonce 通过 AES-256-GCM 加密数据
5. 将 nonce + 密文 + 认证标签一起存储
6. 解密时，提取 nonce，验证标签，然后解密

## 加密文件格式

```
[salt: 16 字节][nonce: 12 字节][密文: 可变长度][标签: 16 字节]
```

## 安全注意事项

- 始终使用认证加密（GCM、CCM）以防止篡改
- 永远不要对同一密钥重复使用 nonce（在 GCM 中会造成灾难性后果）
- 对长期数据保护使用至少 256 位密钥
- 在可能的情况下，使用后安全清除内存中的密钥
- 根据组织策略定期轮换加密密钥
- 对于磁盘级加密，考虑使用 XTS 模式（AES-XTS）

## 验证标准

- [ ] AES-256-GCM 加密产生有效密文
- [ ] 解密能精确恢复原始明文
- [ ] 认证标签能检测任何密文修改
- [ ] 密钥派生使用足够的迭代次数/参数
- [ ] 同一密钥的 nonce 从不重复使用
- [ ] 大型文件（>1GB）可通过流式处理
- [ ] 加密文件格式包含所有必要的元数据

