某系统为每个用户生成独立随机盐,并准备保存 `KDF(password, salt)`。与直接使用一次快速 SHA-256 相比,选择带可调工作因子的密码 KDF,主要是为了()。
随机盐主要阻止彩虹表复用,并让相同密码产生不同结果;密码 KDF 的迭代次数或内存成本则用于拖慢每一次猜测。两者配合,才能更好抵抗数据库泄露后的离线穷举。
选项分析
错误。盐通常与摘要一起保存,验证密码时仍需要使用。
正确。可调时间和内存成本用于降低大规模离线猜测速度。
错误。独立随机盐就是要让相同密码得到不同结果。
错误。密码 KDF 是单向派生,不用于恢复明文密码。
本题为什么容易错
只写“加盐哈希”还不够。快速哈希即使带盐,攻击者仍可针对每个账户高速枚举常见密码;盐不负责把单次计算变慢。
简短答案
密码已经加盐,为什么还要使用 Argon2、scrypt 或 PBKDF2,正确答案是 B(提高攻击者每次离线猜测密码的时间或内存成本)。随机盐主要阻止彩虹表复用,并让相同密码产生不同结果;密码 KDF 的迭代次数或内存成本则用于拖慢每一次猜测。两者配合,才能更好抵抗数据库泄露后的离线穷举。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 让服务器无需保存盐值 | 本题干扰项 | 错误。盐通常与摘要一起保存,验证密码时仍需要使用。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 提高攻击者每次离线猜测密码的时间或内存成本 | 本题正确答案 | 正确。可调时间和内存成本用于降低大规模离线猜测速度。 | 看到题干核心场景时优先联想到它 |
| 保证相同密码在任何系统中都生成相同摘要 | 本题干扰项 | 错误。独立随机盐就是要让相同密码得到不同结果。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 把用户密码变成可以解密恢复的密文 | 本题干扰项 | 错误。密码 KDF 是单向派生,不用于恢复明文密码。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 让服务器无需保存盐值:错误。盐通常与摘要一起保存,验证密码时仍需要使用。
- 保证相同密码在任何系统中都生成相同摘要:错误。独立随机盐就是要让相同密码得到不同结果。
- 把用户密码变成可以解密恢复的密文:错误。密码 KDF 是单向派生,不用于恢复明文密码。
知识点详解
Argon2、scrypt、bcrypt 和 PBKDF2 都可用于密码派生,但成本模型不同。现代系统通常优先考虑具有内存成本的方案,并为每个账户保存算法版本和参数,以便用户下次登录时逐步升级旧摘要。登录限速仍然必要,因为它防的是在线猜测,与 KDF 的离线防护互补。
备考速记
盐让每个目标不同,KDF 让每一猜都更贵。
KDF 在离线破解场景中的作用
KDF在本题中的核心价值,是解决“某系统为每个用户生成独立随机盐,并准备保存 `KDF(password, salt)`。与直接使用一次快速 SHA-256 相比,选择带可调工作因子的密码 KDF,主要是为了()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 比较普通哈希、加盐哈希和密码 KDF。
- 分析数据库泄露后彩虹表与离线暴力破解风险。
KDF 在信息安全工程师软考中的考法
软考选择题通常不会只考概念定义,还会把KDF放到离线破解场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
这题要把两道防线分开。盐像每个用户独有的题号,让攻击者不能拿一张现成彩虹表通吃所有账号;KDF 的工作因子则把每次试密码变贵。数据库一旦泄露,攻击者可以在自己机器上反复猜,不受登录限速约束,所以一次极快的 SHA-256 恰恰方便了他。
考点定位
盐值不需要保密,工作因子也不是加密密钥。盐解决预计算复用,慢哈希或内存困难算法提高单次猜测成本。
易错提醒
- 所有用户共用一个固定盐,失去跨账户隔离效果。
- 把盐当成秘密,一旦盐泄露就认为摘要完全失效。
- 长期不调整工作因子,忽略硬件性能增长。
备考提示
- 把盐、Pepper、工作因子分开记:盐公开且每用户不同,Pepper由服务端另行保护,工作因子控制成本。
- 算法选择和参数应根据当前硬件压测,并保留未来升级方案。
你可能还想了解
- 盐值需要保密吗?
- 密码为什么不能只做一次 SHA-256?
- Argon2 工作因子应该怎样选择?
本文小结
随机盐让相同密码产生不同摘要,防止预计算结果跨账户复用;密码KDF通过时间或内存工作因子抬高每次猜测成本。两者作用不同,必须配合。