【问题标题】:Is bruteforcing the last character of a salt a good idea?暴力破解盐的最后一个字符是个好主意吗?
【发布时间】:2015-04-25 02:43:42
【问题描述】:

在存储盐时删除最后一个字符,然后暴力破解最后一个字符以延长创建彩虹表等所需的时间,在安全方面是否是一个好主意?这是假设使用的哈希算法是 Whirlpool。

这会使登录时间稍长一些,但它会限制暴力破解速度,无法像其他方法一样绕过。

提前谢谢你。

【问题讨论】:

标签: mysql hash salt


【解决方案1】:

不,这不是一个好主意,它没有达到盐的目的。每个密码的唯一盐值可防止攻击者使用一个彩虹表一次获取所有密码。即使盐是已知的,它也会这样做,最好不要将它与其他“改进”混为一谈。

迷你蛮力游戏所需的时间最好花在更高的成本因素上。也就是说,您应该切换到一个提供成本因素并且需要一定时间来计算哈希的算法(BCrypt、PBKDF2 或 SCrypt)。

实际上,您尝试将服务器端机密添加到哈希中(攻击者必须发现缺少一个字符并且必须强制执行)。添加这样的秘密可以以更有效的方式完成。只需使用强大的服务器端密钥加密(双向)已经计算的哈希,这样攻击者需要在开始暴力破解之前了解密钥。您可以在我的tutorial 末尾找到有关安全存储密码的更深入的说明。

【讨论】:

    【解决方案2】:

    没有。盐旨在完全改变字符串 - 如果您认为盐很容易被利用,您应该制作更长的盐或更改哈希。此外,每次使用盐时,它都会给你带来很多不必要的暴力破解。

    编辑:为了澄清,我不认为这是一个坏方法,但这里的逻辑是错误的。可以这样想——如果你可以暴力破解盐,潜在的黑客也可以这样做。你开始了一场比赛——在每一点你从盐中删除更多的字符,并试图猜测谁会更好地破解盐;比赛以你完全没有盐而告终。

    【讨论】:

    • 另外,查找单个字符的时间可以忽略不计
    【解决方案3】:

    澄清一件事:如果用户试图暴力破解一些登录数据,salt-complexity 本身并不重要。每一个微小的变化都会以足够大的方式影响哈希,所以他需要一组新的彩虹表。

    由于攻击用户对您一无所知,他不会介意您从盐中删除 1,2,3 甚至所有字符。

    混淆盐本身是没有意义的。如果攻击用户以某种方式访问​​了盐 - 您的数据库似乎已经受到损害。所以,在那种情况下,他无论如何都不会关心正确的盐。

    【讨论】:

    • 我不同意。首先,salt 可能能够保护您免受内部攻击——攻击者可能知道您的各种策略,您仍然需要受到一定程度的保护。此外,如果攻击来自外部并且他们以某种方式知道哈希算法,那么暴力破解盐实际上是一种选择 - 但是,通常不应该这样做,因为您使用安全、长、随机的盐以及可信赖的哈希。跨度>
    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多