根据OWASP 密码存储备忘单,建议是:
- Argon2 是密码哈希竞赛的获胜者,应该被视为您新应用程序的首选;
- PBKDF2,当需要在许多平台上进行 FIPS 认证或企业支持时;
- scrypt 需要抵抗任何/所有硬件加速攻击,但不需要支持。
- bcrypt,其中 PBKDF2 或 scrypt 支持不可用。
对于大多数与安全相关的用例,MD5 和 SHA1 并不安全,因为可能会发现与这些算法的冲突。换句话说,给定一个输入及其散列值,可以推导出具有相同散列值的另一个输入。
SHA-2 散列算法组在许多安全用例中都是安全的,但对于密码散列却不是,因为与上述算法相比,它们的速度非常快。并且性能是我们不希望密码散列的东西,因为这会使攻击者更容易通过在短时间内尝试各种密码来执行暴力攻击。
因此,上述 4 种算法在内存、计算能力和时间方面都是昂贵的。这些值通常是参数化的,以便随着新技术随着时间的推移提高计算能力,它们可以调整到一个高值。因此,在使用这些算法时,正确选择工作因子值非常重要。设置一个非常低的估值可能会破坏目的。
除此之外,还应该使用盐。
再次来自同一个 OWASP 源:
盐有两个目的:
- 防止受保护的表单泄露两个相同的凭据,并且
- 在不依赖凭证复杂性的情况下,增加馈送到保护功能的熵。
第二个旨在使对个人凭证的预先计算的查找攻击和对人群的基于时间的攻击变得难以处理