0

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

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

还是这些都是过时的散列算法,我们应该使用其他算法?

谁可以帮我这个事?

4

1 回答 1

6

当你提到“加密的安全标准”时,我假设你在谈论存储密码,所以我会写关于使用“SHA”、“BCRYPT”和“ARGON2I”来保护密码,我会提到缺点以及“SHA”和“BCRYPT/ARGON2I”算法之间的优势。

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

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

如果要对密码进行哈希处理,建议使用慢速哈希算法,如果要对长文件进行哈希处理,建议使用快速哈希算法。

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

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

这些是来自慢速算法 Wikipedia 和 GitHub 中的源代码的链接。

bcrypt 的维基百科

argon2 维基百科

bcrypt 的 GitHub

argon2的GitHub

于 2021-05-12T13:57:56.800 回答