【问题标题】:Salted Hash Password Authentication加盐哈希密码认证
【发布时间】:2020-09-16 14:56:00
【问题描述】:

我一直在阅读关于 OWASP 10 的内容,并且发现了存储信息的最佳实践。 盐渍哈希。您为每个密码生成一个随机盐并将其组合并散列并存储它。 我的疑问是,如果盐是随机生成的,当用户键入密码时如何验证密码? 盐是否与用户名一起保存? 如果是这样,这种做法仍然是脆弱的。 或者他们是怎么做到的?

【问题讨论】:

    标签: security hash password-hash saltedhash


    【解决方案1】:

    盐与用户名一起保存。盐不是秘密。加盐的目的是确保如果两个人有相同的密码,他们不会有相同的散列密码。这可以防止预先计算的哈希攻击(彩虹表),并防止泄露数据库中的两个用户具有相同的密码。

    虽然每个用户的随机盐是理想的,但通过确定性但独特的盐也可以实现加盐的好处。例如,您可以为您的数据库使用一些固定字符串并将其与用户 ID (com.example.mygreatsystem:user1@example.com) 连接起来,并将其用作盐。由于它对每个用户都是唯一的(不仅在这个系统内,而且在全球范围内),它实现了与随机盐相同的目标,而不需要额外的数据库查找。与随机盐一样,该方案不需要保密。盐的重要部分是它是独一无二的。但在实际可行的情况下,最佳做法是与用户记录一起存储足够长度(通常为 8 个随机字节)的每个用户随机盐。

    【讨论】:

    • 感谢您的解释。我的疑问是,如果盐不是秘密并且黑客掌握了盐以及用户名和密码列表,那么他很容易破解密码吗?
    • 不,这是盐的重点。 salt 可以防止预先计算哈希值,因此攻击者必须一次破解一个密码。没有有效的方法来反转哈希,因此他们必须猜测许多密码。如果您只对密码+哈希进行 SHA-2,攻击者可以合理地破解一个非常弱的密码,但如果您使用 PBKDF2(或其他密钥延伸器)作为您的哈希,则只有非常弱的密码容易受到攻击,并且 PBKDF2 可以调整为尽可能慢地猜测。
    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2010-11-30
    • 2012-01-31
    • 1970-01-01
    相关资源
    最近更新 更多