保存验证记录而不是取回原口令
系统按所选方案把口令、盐及成本参数变成记录。用户下次输入口令时,用记录中的相应参数重新计算并比较;这个流程需要判断候选是否匹配,不要求系统保存一把可随时解出全部原口令的解密钥匙。
验证记录仍是敏感数据。拿到它的攻击者可以离线尝试候选,不再受网站每秒允许登录几次的直接限制;不保存明文有价值,却不能解释成数据库泄露后口令就绝对安全。
参考:[1]
有意增加每次猜测的成本
普通摘要通常追求快速处理数据,密码方案却需要给每次候选计算设置适当成本。Argon2等内存困难设计可调节内存量、运行轮数及并行度,不能只比较最终输出有多少位,或机械重复一次快速哈希就声称获得相同性质。
成本也不能无限增大:合法验证的延迟、并发需求和服务器内存会限制可用设置。NIST指南要求在实际验证性能可承受的范围内选择并逐步调整成本,同时保存算法和参数以支持迁移;这是风险与资源的协调,不是一个永远固定的数字。
盐、输入熵与额外秘密分工不同
不同验证记录使用适当盐,可减少相同口令产生相同记录和跨账户复用预计算的机会;盐通常与结果一起保存,并不承担保密口令本身的职责。它没有增加用户原先口令可供选择的秘密空间,攻击者仍可针对每条记录逐一尝试。
某些系统再把独立保存的验证者秘密用于附加保护,它与公开保存的盐不同。无论采用何种方案,输入规范化、记录版本、参数读取及在线尝试限制仍需定义;HKDF这类为其他密钥材料设计的派生函数,也不能不加分析地代替专门的密码硬化。