为什么现在密码加密依然大多选择 pbkdf2 而不是 argon2

7 min read

参考 https://npmtrends.com/argon2-vs-pbkdf2

按照如下的分析,应该 argon2 更应该被推广使用

在项目中选择密码哈希算法时,主要考虑以下因素:安全性、性能、可用性和社区支持。以下是关于 Argon2 、bcrypt 、scrypt 和 PBKDF2 的简要比较:

  1. 安全性:

    • Argon2:目前被认为是最安全的密码哈希算法。它赢得了密码哈希竞赛( PHC ),并且具有很好的内存密集度,抵抗侧信道攻击和时间-空间权衡攻击。
    • bcrypt:也是一种安全的密码哈希算法,但相较于 Argon2 ,它的内存密集度较低,抵抗侧信道攻击和时间-空间权衡攻击的能力较弱。
    • scrypt:设计为内存密集型算法,以抵抗大规模定制硬件攻击。它的安全性优于 bcrypt ,但仍然低于 Argon2 。
    • PBKDF2:相对于其他三种算法,PBKDF2 的安全性最低,因为它没有针对 GPU 或 ASIC 攻击的内存密集特性。
  2. 性能:

    • Argon2 、bcrypt 和 scrypt 的性能可以通过调整参数(如内存、迭代次数等)来控制。你可以根据项目的需求和硬件资源调整这些参数。
    • PBKDF2 性能主要取决于迭代次数,但与其他算法相比,它在现代硬件上的性能相对较差。
  3. 可用性:

    • 大多数编程语言和框架都支持这四种哈希算法,但在某些情况下,Argon2 的支持可能不如其他算法广泛。在选择算法时,需要确保所选算法在项目使用的技术栈中可用。
  4. 社区支持:

    • Argon2 、bcrypt 和 scrypt 都拥有相对广泛的社区支持,而且这些算法已经得到了安全研究人员的审查和推荐。PBKDF2 也得到了一定的支持,但相对较弱。

综合考虑上述因素,Argon2 (尤其是 Argon2id 变体)通常是首选算法,因为它在安全性和性能方面表现最佳。如果项目中 Argon2 的支持有限,可以考虑使用 bcrypt 或 scrypt 。PBKDF2 应该作为最后的选择,仅在其他选项不可用时使用。
然而,实际情况可能比较复杂,因为每个项目的需求和限制都不同。可能有一些因素阻碍了 Argon2 的广泛使用。例如,如果项目必须与旧版软件或旧版硬件兼容,可能需要使用 PBKDF2 或其他算法。另外,如果项目需要处理大量用户数据并需要快速计算哈希,可能需要权衡一下性能和安全性。在这种情况下,可能需要使用 Scrypt 或调整 Argon2 的参数,以获得更好的性能。总之,选择密码哈希算法应该是一个评估多个因素的过程,需要权衡安全性、性能、可用性和社区支持等多个因素。