标题说明了一切。我不明白:为什么你不应该像密码一样保密你的盐。或者我误解了什么?
盐被视为公开的主要是因为没有必要保密。
盐的目的主要是使字典攻击变得更加困难/不太实用。在字典攻击中,攻击者对字典中的常用单词进行哈希处理,并(如果他是认真的)用常用名称等内容来补充这些单词。有了这个,如果他能得到你的散列密码列表,他就可以看看其中是否有任何一个与他列表中的散列相匹配。假设您有大量用户,他很有可能找到至少一个。当他这样做时,他会在列表中查找产生该哈希值的单词,然后他现在可以使用它来登录并模拟该用户。
添加盐意味着他必须对每个可能的盐值都执行一次,而不是执行一次。例如,如果使用 24 位盐,他必须对字典中的每个单词进行约 1600 万次哈希,并存储所有约 1600 万次哈希的结果。
为了便于论证,我们假设在没有 salt 的情况下,攻击者需要 8 小时来对所有候选单词进行哈希处理,并需要 16 MB 来存储结果(哈希值和生成每个单词的单词)。我们将进一步假设存储在哈希值本身和单词/名称/产生它们的任何内容之间平均分配。
使用相同的 24 位盐,这意味着他的时间乘以相同的系数约 1600 万。他对产生哈希值的单词的存储保持不变,但哈希值本身(再次)乘以约 1600 万。计算一下,大约需要 15,000 年的计算和 128 TB 的存储空间。
简而言之,如果没有盐,几乎任何人都可以轻松进行字典攻击。我很容易相信(例如)有人会让他们的计算机整夜运行来进行哈希处理,只是为了对他的一些同事开一个愚人节玩笑(很容易相信,因为我已经看到它完成了)。
当你认真对待它时,这都是一个数字游戏:字典攻击并不是赌注every用户将有一个很容易猜到的密码,仅此而已enough会让他们找到至少几个开放的洞。同样,公开盐确实允许一种更简单的攻击,方法是下载每个哈希的盐,并对每个哈希使用已知的盐进行单独的字典攻击。假设系统的用户数量少于可能的哈希值,这是一种更实际的攻击。尽管如此,他现在仍然坚持单独攻击每个密码,而不是不仅对整个系统使用单个字典,而且实际上对他可能想要攻击的所有使用相同哈希算法的系统使用单个字典。
总而言之:即使是公开的,盐也能完美地发挥其作用。几乎所有安全系统的目标之一都是最大限度地减少需要保密的信息量。由于盐即使是公共的也可以发挥作用,因此通常认为它是公共知识。在实际系统中,你当然不会try将其发布给攻击者,但您也不(无论如何也不应该)依赖它仍然是秘密。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)