PBKDF2 密钥派生
从密码生成安全的加密密钥
PBKDF2 文档
PBKDF2 (基于密码的密钥派生函数 2) 是 RFC 8018 定义的加密标准。它通过迭代哈希将密码转换为安全的加密密钥,使暴力破解攻击的计算成本极其昂贵。
PBKDF2 被广泛应用于安全协议中,包括 WPA2 WiFi 加密、iOS 数据保护、macOS FileVault 以及众多企业级密码存储系统。其 NIST 认证地位使其成为合规敏感应用的首选方案。
PBKDF2 工作原理
PBKDF2 通过迭代应用伪随机函数 (默认为 HMAC-SHA256) 来生成派生密钥:
- 以密码、盐值、迭代次数和期望密钥长度作为输入
- 以密码为密钥、盐值+计数器为消息执行 HMAC 运算
- 重复 HMAC 操作指定的迭代次数
- 连接中间结果生成最终派生密钥
OWASP 推荐迭代次数 (2023)
开放 Web 应用程序安全项目 (OWASP) 根据哈希算法强度提供最低迭代次数指导。这些数值经过校准,确保能够充分抵御现代硬件攻击:
| 哈希算法 | 最低迭代次数 | 推荐值 |
|---|---|---|
| PBKDF2-SHA256 | 310,000 | 600,000+ |
| PBKDF2-SHA384 | 210,000 | 500,000+ |
| PBKDF2-SHA512 | 120,000 | 210,000+ |
| PBKDF2-SHA1 | 1,300,000 | 不推荐 |
常见使用场景
- 从用户密码派生 AES/ChaCha20 加密密钥
- 认证系统中的密码存储和验证
- 从主密码生成确定性密钥 (密码管理器)
- 磁盘加密和安全容器的密钥派生
KDF 对比:PBKDF2 vs Bcrypt vs Argon2
| 特性 | PBKDF2 | Bcrypt | Argon2 |
|---|---|---|---|
| 标准 | RFC 8018 | OpenBSD | RFC 9106 |
| 内存硬化 | 否 | 有限 (4KB) | 是 |
| GPU 抗性 | 低 | 中等 | 高 |
| 最佳使用场景 | FIPS/NIST 合规 | 旧系统 | 新应用 |
安全最佳实践
- 始终使用至少 16 字节 (128 位) 的加密随机盐值
- 盐值与派生密钥一起存储 - 它不是秘密
- 每年增加迭代次数以跟上硬件进步的步伐
- 对于需要内存硬化以防御 GPU 攻击的新系统,考虑使用 Argon2id