【问题标题】:BCrypt vs Argon2 and their hashing algorithmsBCrypt vs Argon2 及其散列算法
【发布时间】:2021-01-21 01:05:10
【问题描述】:

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

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

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

谁能帮我解决这个问题?

【问题讨论】:

  • 苹果和橙子。 Bcrypt 和 argon2 是为一个目的而设计的哈希,而 sha-512 和 sha-256 是为不同的目的而设计的。

标签: spring-security hash bcrypt java-security argon2-ffi


【解决方案1】:

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

“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

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 2022-12-19
    • 2019-07-17
    • 2021-08-14
    • 2014-08-02
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多