存储用户密码的哈希函数选型:安全与效率兼顾方案咨询
关于密码哈希方案的问题解答
一、Bcrypt额外添加pepper的安全性提升
- pepper是存储在应用层的额外秘密值,不会和哈希、salt一同存放在数据库中。当数据库被攻破时,黑客只能获取到Bcrypt哈希值和salt,却拿不到pepper——此时他们连正确的哈希输入都无法构造,根本没法开展暴力破解。
- 这种提升是质的飞跃:没有pepper的话,黑客可以用GPU/ASIC集群暴力枚举密码;但只要pepper未泄露(应用服务器没被攻破),哪怕是中等强度的密码,黑客也几乎没有破解的可能。只有当pepper本身泄露时,这层额外防护才会失效,但这种场景的风险远低于单纯的数据库泄露。
二、排除顶级黑客组织攻击时的哈希函数选择
优先推荐选项:
- Bcrypt(cost factor=12)
- 成熟稳定,几乎所有主流编程语言都有经过安全审计的库支持。cost=12时,单GPU每秒只能处理几百次哈希计算,普通黑客的算力根本无法在短时间内破解大量密码,完全能满足你的场景需求。
- Argon2id
- 这是密码哈希竞赛的获胜方案,比Bcrypt更现代,能更好地抵抗侧信道攻击和GPU加速破解,同时兼顾内存与CPU消耗。如果你的项目对安全性有更高追求,且使用的语言支持Argon2库,选它更优。
不推荐继续使用SHA256加盐加pepper
SHA256属于快速哈希函数,设计目标是高效计算,哪怕加了pepper,一旦pepper泄露,黑客可以用GPU每秒处理数十亿次哈希,暴力破解弱密码的速度极快,安全性远不如慢哈希函数。
内容的提问来源于stack exchange,提问作者roee
相关产品推荐
相关产品推荐

