盐渍哈希 - 为什么夏娃已知文献中的盐?

时间:2011-07-01 19:44:06

标签: security

标题说明了一切。我不明白:为什么你不应该像密码一样保密你的盐。或者我误解了什么?

5 个答案:

答案 0 :(得分:2)

盐被公开对待主要是因为保密是不必要的。

盐的观点主要是使字典攻击更难/更不实用。在字典攻击中,攻击者从字典中挖出常用词,并且(如果他是严肃的话)补充那些具有常见名称的东西。有了这个,如果他可以获得你的哈希密码列表,他可以看到他们中的任何一个是否匹配列表中的哈希值。假设您拥有大量用户,他很有可能找到至少一个用户。当他这样做时,他会在他的列表中查找产生该哈希的单词,现在他可以使用它来登录并冒充该用户。

添加盐意味着不必这样做一次,他必须为每个可能的盐值做一次。例如,如果你使用24位盐,他必须散列字典中的每个单词〜1600万次,并存储所有~1600万个哈希的结果。

仅仅为了争论,让我们假设没有盐,攻击者需要花费8个小时来散列所有候选词,并且需要16兆来存储结果(哈希和生成每个词的哈希值)。我们将进一步假设存储在散列本身和单词/名称列表/产生它们之间平均分配。

使用相同的24位盐,这意味着他的时间乘以相同的~1600万的因子。他对产生哈希词的存储仍然是相同的,但是对于哈希本身来说(再次)乘以约1600万。计算出数学,计算出来的时间约为15,000年,存储量为128TB。

简而言之,没有盐,几乎任何人都可以轻松地进行字典攻击。我可以很容易地相信(例如)有人会让他们的电脑在一夜之间进行散列只是为了给他的几个同事拉一个好的愚人节玩笑(很容易相信,因为我已经看过它了)。

当你开始使用它时,它就是一个数字游戏:字典攻击并不认为每个用户都会有一个容易猜到的密码,只有足够

总结:即使盐公之于众,盐也能完美地发挥作用。几乎任何安全系统的目标之一是尽量减少需要保密的信息量。由于盐即使是公共的也可以起作用,因此通常认为它是公共知识。在一个实际的系统中,你当然不会尝试将它发布给攻击者,但你不会(不应该)依赖它剩下的秘密。

答案 1 :(得分:1)

salt的目的是同时攻击几个加密密码更难。它不会对单个加密密码造成攻击。

对于盐,攻击者必须为每种不同的盐测试每个候选明文密码一次。

答案 2 :(得分:1)

found in this article的原因是,您实际上需要使用salt来检查数据库中的salted和散列密码。

答案 3 :(得分:0)

你应该保守你的盐,因为你首先要加盐。

黑客可以创建Rainbow Tables,然后使用(md5,sha1,sha256,sha512等)散列大约1000个最常见密码的列表。

如果一个黑客设法控制你的数据库......你的密码被散列很好,但是如果他们进行快速比较并找到与他们列表中的密码相匹配的哈希,他们就会知道密码是什么就是那个帐户。

他们做黑客攻击的关键是让彩虹桌得心应手。如果你添加了盐,他们的彩虹表是无用的...但是如果你向东找盐或者你与他人分享,那么黑客可以用你的盐重新建造一个新的彩虹表。(*)例如你让他们更容易入侵。

(*)注意这是比描述的更难,因为黑客可能不知道你是否添加了盐作为前缀,后缀,两者等等。

答案 4 :(得分:0)

如上所述,每个密码的唯一秘密盐将阻止任何人预先计算彩虹表中的哈希值;这是独特盐的唯一目的。