BCrypt vs Argon2及其哈希算法

问题描述

我在一家提供软件服务的初创公司中工作,最近我们为加密设定了安全标准。对于散列,设置的标准是我们应该使用SHA-512或SHA-256。

对于Java,我们正在考虑使用Spring或Argon2的Bcrypt。实际阅读他们的文档,如果他们的基础算法使用SHA-512或SHA-256或其他方法,找不到任何信息?

或者这两个都是过时的哈希算法,我们应该使用其他东西吗?

有人可以帮我吗?

解决方法

“SHA”算法都不是为散列密码而设计的,它们是快速算法,易于计算。 例如:它们用于加密货币,因为它们不加密单个单词或字符的短组合,它们加密包含货币的大文件,因此很难猜测散列文件。

另一方面,像“BCRYPT”和“ARGON2I”这样的散列方法是用于存储密码的,与“SHA”的一个主要区别是它们是慢算法,这意味着为了散列一个单词,它可能需要一个如果配置正确,整整一秒(因为散列的成本)。 这意味着攻击者必须投入对试图比较的单词进行散列的时间与被散列的单词相同(在本例中,我为每个散列提供 1 秒)。这大大增加了攻击者为了匹配哈希值而必须投入的时间,从而使您存储的文件更加安全。

如果你想对密码进行散列,建议使用慢速散列算法,如果你想对长文件进行散列,建议使用快速散列算法。

回答你的最后一个问题......“BCRYPT”和“ARGON2I”都不是过时的散列方法。在我看来,BCRYPT 更可靠,因为它已经上市了,它于 1999 年发布,编程它的开发人员一直在更新它直到今天。 “ARGON2I”也会发生同样的情况,但它是一种较新的算法(它创建于 2015 年),这意味着它不像“BCRYPT”那样经过测试,但据说“ARGON2I”比“BCRYPT”更安全,但漏洞可能在不久的将来被发现。

如果您注意到我说的是“ARGON2I”而不是“ARGON2”,那是因为该算法有多种版本,而“ARGON2I”是专为散列密码而设计的。

这些是来自慢算法维基百科和 GitHub 源代码的链接。

Wikipedia of bcrypt

Wikipedia of argon2

GitHub of bcrypt

GitHub of argon2