秘密盐;为什么他们比我更能减慢攻击者的速度?

信息安全 密码 哈希 密码管理 密码破解
2021-08-23 12:00:31

在研究 Dan Boneh 的“会话管理和用户身份验证”幻灯片(2011 年)时,他在“进一步防御”幻灯片(58 张中的第 48 张幻灯片)中提到了“秘密盐”。

他建议存储在数据库中:

Alice|SA|H(pwA , SA , rA)

其中Alice是用户名、SA与 Alice 关联的盐以及将 Alice 的密码与盐和一个小的随机值一起H(pwA , SA , rA)散列的结果pwArA

我不明白为什么添加一个短随机值r(8 位)会使验证速度降低 128 倍,而攻击者则降低 256 倍。

3个回答

这可能会在这些幻灯片随附的听觉讲座中得到解释。

我的猜测是,他是在假设用户通常输入正确密码的情况下计算的。您只需要在选项中循环,r直到找到产生正确哈希的选项。

如果您获得了正确的密码,那么您将遇到一个r产生正确哈希值的密码;确切发生这种情况的时间会有所不同(因为它是随机的),但平均而言,在找到它之前,您将经历一半的选项(2**8 = 256, 256/2 = 128)。

但是,攻击者通常会尝试使用不正确的密码。这意味着他们必须尝试r256 的每一个选项。

只是为熊的回答添加更多内容:

如果数据库遭到破坏,攻击者将尝试恢复所有密码(或者至少是最有趣的密码),这意味着他需要使用每个可能的“秘密盐”尝试每个候选密码,这非常昂贵

同时,服务器只需要使用用户输入的密码遍历可能的“秘密盐”。不仅密码可能是正确的,而且每个用户登录只有一个

除上述内容外:

防止彩虹表和(分布式)蛮力攻击。

彩虹表保存任何给定散列的结果,这意味着如果您有一个给定散列类型(例如 sha1)。您只需查找结果并相当容易地“解密”一组哈希。如果您有散列块或每个单独的散列本身都是盐渍的,那么这不起作用。

分布式蛮力攻击也是如此。如果您尝试对哈希结果进行逆向工程/反向猜测(使用哈希算法中的安全漏洞),您可以使用这些来加速类似的哈希。使用多台机器(分布式部分)开始寻找进一步的偏移量,大大增加了命中的机会。如果命中可以发生在给定范围内的任何位置,那么如果您同时从多个偏移处开始,命中的机会就会大大增加。此外,任何发现的哈希都可以再次针对您尝试暴力破解的集合中的其他哈希进行测试。

当您对哈希进行加盐时,这一切都变得毫无用处,因为结果不再是线性的、可预测的或可搜索的。