【问题标题】:Password hashing: Is this a way to avoid collisions?密码哈希:这是一种避免冲突的方法吗?
【发布时间】:2011-05-29 23:49:58
【问题描述】:

我正在考虑使用 2 个密钥对每个用户密码进行哈希处理,从而获得 2 个不同的哈希值。这样一来,除了实际密码之外,(几乎?)不可能找到有效的密码。

对吗?值得吗?

【问题讨论】:

    标签: security hash passwords


    【解决方案1】:

    要学习的一条重要规则是“永远不要尝试发明自己的密码学”。充其量只是在浪费时间,最坏的情况是引入安全漏洞。

    如果您不确定自己是否是该规则的例外,那么您不是该规则的例外。

    加密哈希的设计者已经担心冲突,所以您不必担心。只需选择一个(SHA-256 是一个不错的选择),然后将精力集中在应用程序的其余部分上。

    【讨论】:

    • 请注意,虽然 SHA-256 就大小和加密强度而言足够强大,但它不适用于纯形式的密码散列。您需要一个缓慢的、加盐的方案,例如 PBKDF2、scrypt 或 bcrypt。
    【解决方案2】:

    您可以改用 SHA256 作为散列算法。迄今为止未发现任何冲突,并且将来不太可能在 密码 上看到任何冲突。

    【讨论】:

      【解决方案3】:

      您可以使用更长的哈希值。例如,SHA-512 是 512 位,并且(假设它是统一的)远不太可能与 SHA-256 发生冲突。但就个人而言,我不会担心。大多数密码本身小于 32 字节(256 位),因此与 SHA-256 冲突的可能性极低。

      【讨论】:

      • 我不是专家,但我很确定将位长加倍只会使一个类“有可能发生冲突”。
      • @cdiggins:你能详细说明一下吗?我不明白你的意思。
      • 假设寻找冲突的最佳方法是随机猜测(据任何人所知,SHA-N 都是如此),选择哈希值与给定的 y 对于 SHA-256 是 1/2^256,对于 SHA-512 是 1/2^512。后者远远小于前者的1/2。但是,这两种情况都不会发生,因为您不会在余生中每天都赢得彩票第一名。
      • @Nemo:啊,你说得对。永远不要在凌晨 1 点做数学。我现在将编辑问题以反映这一点。
      猜你喜欢
      • 2019-04-28
      • 2012-05-06
      • 2013-10-01
      • 2012-09-16
      • 2011-10-01
      • 2012-10-09
      • 2018-08-04
      • 2014-10-28
      • 1970-01-01
      相关资源
      最近更新 更多