【问题标题】:Is it a good idea to store two hashes for each password in a database?在数据库中为每个密码存储两个哈希值是个好主意吗?
【发布时间】:2017-10-05 02:43:38
【问题描述】:

在数据库中为每个密码存储两个哈希值(例如 SHA-1 和 MD5)并在登录脚本中检查这两个哈希值以防止冲突是个好主意吗?另一方面,从两个哈希计算密码不是更容易吗(例如,如果黑客访问了数据库)?

【问题讨论】:

  • See this answer at crypto stackexchange。总结一下,发生碰撞的几率约为 2^64,假设您有两个相同的哈希值,它们是不同的帐户,那么任何人怎么知道?
  • 我投票结束这个问题,因为它属于 crypto.se.com

标签: hash cryptography passwords


【解决方案1】:

这可能没有用。

您使用的任何哈希函数都可以防止意外碰撞——它们几乎不可能发生。因此,您唯一关心的冲突是黑客已经破坏了您的数据库,并获取了您的哈希值,并试图找出生成目标哈希值的密码。

这被称为“二次原像攻击”,难度极高。任何相对较新的算法都没有已知的第二原像攻击,甚至可以追溯到 MD4。这不应该是一个严重的问题。

但是,如果您使用的是通用哈希函数,那么人们暴力破解您的破解哈希 是一个现实问题。 您不应该使用像 SHA-2 这样的通用散列函数,即使使用盐。您应该使用密码哈希函数,例如 bcrypt,它可以抵抗暴力破解。如果您使用的是普通哈希函数,那么正如您所指出的,存储两个意味着它们只需要暴力破解较弱的一个 - 这是另外一件可能出错的事情。

不要打扰。请改用密码哈希函数。会更安全、更简单。

【讨论】:

    【解决方案2】:

    我真的不明白存储 2 个哈希作为密码然后检查两者有什么好处。您在这里所做的只是让您的应用有更多的工作要做,并且在我看来并没有提供任何额外的安全级别,因为他们仍在输入相同的密码。

    【讨论】:

    • 它会阻止这种攻击,Shattered SHA1,因为 md5 仍然无法匹配。
    猜你喜欢
    • 1970-01-01
    • 2019-07-19
    • 2010-10-30
    • 2018-08-26
    • 2018-11-18
    • 2010-11-10
    • 2010-12-03
    • 1970-01-01
    • 2012-12-01
    相关资源
    最近更新 更多