【问题标题】:Does this look like a strong salt for a password这看起来像密码的强盐吗
【发布时间】:2011-05-13 13:19:59
【问题描述】:

这看起来像是与密码一起使用的安全盐吗?有任何改进或建议或明显的缺陷吗?

$salt = '';
for ($i = 0; $i < 50; $i++) {
   $salt .= chr(rand(33, 126));
}

【问题讨论】:

  • 你必须知道盐!这不仅仅是单向哈希,它是一次性哈希!这是没用的。

标签: php security hash salt


【解决方案1】:

我会使用mt_rand,因为它更快,但这对于盐来说绝对足够了。

【讨论】:

    【解决方案2】:

    我不认为rand 是一个好的 PRNG。如果我没记错的话,它直接映射到 c PRNG,在许多实现中,它的内部状态非常小(比如 32 位)。

    而且它也没有很好地播种。但是由于盐的最重要作用是防止预先计算的彩虹表,这段代码就是这样做的,它应该就足够了。

    我通常将我的盐分成两部分:

    1. 每个用户的每个随机部分,与哈希一起存储在数据库中
    2. 存储在配置文件中的每个应用程序的盐。

    这样攻击者只能访问数据库而不能访问配置文件(如果攻击使用 SQL 注入,很可能是这种情况),那么他仍然无法破解密码。

    【讨论】:

      【解决方案3】:

      长度是使盐安全的主要因素。随机性并不是非常重要,只要它对每个用户都不同。无论如何,您最终都会以纯文本形式存储它,以便您可以在散列期间使用它。

      【讨论】:

        【解决方案4】:

        您不需要将盐做得很长,而且它们的加密安全并不重要。盐的目的只是让彩虹表攻击更难,因为你不再有密码和哈希之间的一对一映射。 (他们还让目光迷离的管理员无法在数据库中看到 482c811da5d5b4bc6d497ffa98491e38 并知道 Joe 的密码是“password123”。)

        即使是 4 字节的盐也绰绰有余,因为您现在有 232 &approx;任何密码都有 40 亿个潜在哈希值。

        【讨论】:

        • It's worth pointing out that those 4 billion different hashes of the same password depend on the appropriate choice of hashing algorithm.
        • 管理员没有访问源代码的权限吗?他不能只将纯文本记录到文件中吗?
        • @Graham Lee,我使用的是 SHA512。
        • @Rook - 是的。我说的是更随意的妥协,比如打开 /etc/shadow 并看到多个用户具有相同的哈希值和相同的密码。或者以出现在 Google 结果中的哈希值结尾 (google.com/search?q=482c811da5d5b4bc6d497ffa98491e38)。
        猜你喜欢
        • 2019-11-20
        • 1970-01-01
        • 2021-03-20
        • 2020-05-26
        • 2019-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-09
        相关资源
        最近更新 更多