Why Bcrypt Can Be Unsafe for Password Hashing?
6 months ago
- #encryption
- #password-security
- #bcrypt
- 由于基于Blowfish加密算法,bcrypt会忽略前72字节之后的所有字节。
- bcrypt故意设计为速度缓慢,内置盐值机制,被广泛用于密码哈希存储。
- 代码示例表明bcrypt仅处理密码的前72字节,后续内容会被忽略。
- 72字节限制针对字节而非字符,UTF-8编码下非ASCII字符更易受影响。
- 替代方案包括使用Argon2算法,或在bcrypt前先用SHA-256/SHA-512预哈希密码。
- Python的bcrypt包(5.0.0+版本)会对超过72字节的密码抛出错误。
- 不同语言/库对72字节限制处理方式不同(如Go语言报错,OpenBSD直接截断)。
- Okta公司2024年安全事件源于bcrypt在缓存密钥哈希时的72字节限制。
- bcrypt仍适用于72字节内的常规密码,但建议未来采用更安全的替代方案。