← [ BACK_TO_NOTES ]

PBKDF2

PBKDF2 用 PRF(通常 HMAC)对 password、salt 与 iteration count 进行重复派生,是广泛支持的 password-based KDF;其核心成本来自迭代次数而非 memory hardness,适合兼容/FIPS 生态但参数必须持续提高。

#concept #evergreen #crypto #auth

[!info] related notes

PBKDF2

一句话定义

PBKDF2 是标准 password-based KDF:

password + salt + iteration count + PRF → derived key

它的主要目标是:

让每一次 password guess 比普通 hash 更昂贵。

PRF

PBKDF2 内部使用 pseudorandom function。

现代常见:

HMAC-SHA-256

所以常看到:

PBKDF2-HMAC-SHA256

这不是“SHA-256 算 N 次”那么简单,而是标准化 HMAC-based construction。

Iteration Count

PBKDF2 的主要 work factor 是:

iteration count

iteration 越高:

  • legit verification 越慢;
  • attacker 每个 guess 也越慢。

但 PBKDF2 主要增加 CPU work,不像 Argon2id 那样显式增加 memory cost。

Salt

PBKDF2 同样需要 unique salt。

Salt:

  • 和 verifier 一起存;
  • 不需要 secret;
  • 防止预计算;
  • 防止相同 password 得到相同 verifier。

Output Length

PBKDF2 可以派生指定长度 output。

用于 password verification 时,output 长度应按标准/库默认和目标安全强度设置。

用于 encryption key derivation 时,还必须考虑:

  • target key size;
  • domain separation;
  • protocol。

当前工程定位

OWASP 当前建议:

新系统优先 Argon2id。

如果:

  • Argon2id 不可用;
  • 特定 FIPS-140 validated implementation / compliance 要求;

PBKDF2 仍然是重要选择。

OWASP 当前给 PBKDF2-HMAC-SHA256 的基线是 600,000 iterations 或更高。

这个数字应理解为:

当前基线快照,不是永恒常数。

NIST 同样要求 cost factor 随计算能力提高而增长。

PBKDF2 vs Argon2id

PBKDF2:

  • mature;
  • ubiquitous;
  • FIPS ecosystem;
  • CPU-cost focused。

Argon2id:

  • memory-hard;
  • 更针对现代并行 cracking hardware。

所以选择不仅是“谁迭代次数更高”。

Password Verification

stored:

algorithm = PBKDF2-HMAC-SHA256
iterations = N
salt = S
hash = H

登录:

candidate password

  • stored salt/iterations
    → PBKDF2
    → compare

不应该把 iteration count 写在代码常量里却不和 stored verifier version 绑定。

Derived Encryption Key

PBKDF2 也经常用于:

password
→ encryption key

例如老式 encrypted file/container。

这种场景与 password login verifier 的目标不同:

  • login:yes/no;
  • encryption:必须得到实际 key material。

Long Password DoS

某些低质量 PBKDF2/HMAC implementation 对超长 password 处理可能导致异常高成本。

成熟实现会做正确 pre-hashing。

应用层仍应避免无界输入导致资源滥用,但不要随意截断用户密码造成 entropy 损失。

Migration

PBKDF2 verifier 可以在登录成功后迁移:

old iteration
→ verify
→ new policy
→ rehash

或者:

PBKDF2
→ verify
→ Argon2id rehash

只要用户本次提供了正确 plaintext password。

常见错误

PBKDF2 = SHA256 循环

不准确。它是标准 PRF-based KDF。

iteration 数越大越好

还必须满足服务器 latency/concurrency budget。

所有用户一个 salt

错误。

FIPS 要求 PBKDF2,所以算法永远不用升级

错误。参数和规范仍会演进。

学习检查

  1. PBKDF2 的核心输入有哪些?
  2. iteration count 解决什么问题?
  3. PBKDF2-HMAC-SHA256 与直接重复 SHA-256 有什么不同?
  4. PBKDF2 与 Argon2id 的主要成本模型有什么差异?
  5. 为什么 600,000 iterations 只能理解成当前基线而不是永恒常数?
  6. verifier 为什么要保存 iteration count?
  7. PBKDF2 verifier 怎样渐进迁移到 Argon2id?
创建于 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
关闭浮层 / 取消命令;输入框内清空文本