PBKDF2 与算法选择
比较 PBKDF2 与 bcrypt/Argon2,并为您的应用选择最合适的算法
PBKDF2 与算法选择 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
欢迎
在这最后一节初级课程中,我们将学习 PBKDF2,将其与 bcrypt 和 Argon2 进行比较,并建立选择合适密码哈希算法的决策框架。
PBKDF2 概述
PBKDF2(基于密码的密钥派生函数 2)发布于 RFC 2898(2000 年)。它会对密码和盐值反复应用伪随机函数(通常为 HMAC-SHA256)。
PBKDF2 公式
PBKDF2(PRF, password, salt, iterations, keylen)
示例:
key = PBKDF2-HMAC-SHA256(password, salt, 600000, 32)
截至 2023 年,OWASP 建议使用 SHA-256 并进行 600,000 次迭代。
Python 中的 PBKDF2
import hashlib, os
salt = os.urandom(16)
key = hashlib.pbkdf2_hmac(
'sha256',
password.encode(),
salt,
600000,
dklen=32
)
# Or using cryptography library:
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
PBKDF2 的优势
符合 FIPS 140-2/3。内置于 Python、Java 和 .NET 的标准库中。在企业和政府环境中得到广泛部署。易于正确实现。
PBKDF2 的弱点
不具备内存硬化特性。对 GPU 友好:每秒可执行数十亿次 SHA-256 迭代。即使迭代 600K 次,GPU 仍可达到约每秒 100 万个密码。bcrypt,尤其是 Argon2,显著更难进行暴力破解。
算法对比表
算法 | 内存硬化 | FIPS | 速度(GPU) | 建议
bcrypt | 否 | 否 | 50K/秒 | 可接受
PBKDF2 | 否 | 是 | 1M/秒 | 受监管环境
Argon2id | 是 | 否 | 100/秒 | 最佳选择
决策框架
使用 Argon2id:适用于没有合规限制的新应用。
使用 bcrypt:适用于无法使用 Argon2 的情况以及旧系统。
使用 PBKDF2-SHA256:需要满足 FIPS 或政府合规要求时使用。
绝不要使用:MD5、SHA-1、未进行迭代的 SHA-256,以及任何未加盐的算法。
合规说明
PCI-DSS 未指定具体算法,但要求使用“强”哈希。bcrypt 和 Argon2 符合要求。NIST SP 800-132 批准使用 PBKDF2。某些严格的 FedRAMP 系统要求使用带有 FIPS 批准 PRF 的 PBKDF2。
迭代次数的演变
OWASP PBKDF2-SHA256 迭代次数:2010 年:1000 次,2016 年:100000 次,2023 年:600000 次。硬件性能越来越快——每 2 年重新评估并提高迭代次数。bcrypt 成本因子:2010 年:10,2023 年:12,2025 年目标:13。
安全的密码重置流程
1. 生成密码学安全的随机令牌:secrets.token_urlsafe(32)
2. 使用 SHA-256 进行哈希(不要使用 bcrypt——这里只是为了存储)
3. 存储哈希值,并通过电子邮件发送令牌
4. 重置时:对提交的令牌进行哈希,比较结果,并在使用后立即使令牌失效
快速检查
尽管 PBKDF2 对 GPU 攻击的抵抗力较弱,但在哪种环境中仍应优先使用它而不是 Argon2id?
回顾
您已经完成初级密码学课程!您现在理解了哈希、对称和非对称加密、签名、PKI 以及密码哈希。接下来是中级主题——分组密码模式、流密码和密钥交换。
常见问题解答
「PBKDF2 与算法选择」课时是免费的吗?
是的 — 「PBKDF2 与算法选择」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「PBKDF2 与算法选择」这节课中我会学到什么?
比较 PBKDF2 与 bcrypt/Argon2,并为您的应用选择最合适的算法 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「PBKDF2 与算法选择」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 普通 SHA-256 为何不适合密码
- bcrypt:算法与成本因子
- Argon2:内存困难型密码哈希
- PBKDF2 与算法选择