盐是无用的,安全的,如果攻击者知道他们呢?(Are salts useless for securi

2019-07-29 20:51发布

比方说,我已经建立了这样的用户表:

CREATE TABLE `users` (
    `id` INTEGER PRIMARY KEY,
    `name` TEXT,
    `hashed_password` TEXT,
    `salt` TEXT
)

当创建一个用户,一个随机生成的盐产生并存储在数据库中的旁边类似的结果get_hash(salt + plaintext_password)

我想知道,如果恶意用户获得他们的手在这个数据,他们会能够用它来破解用户的密码? 如果是这样,什么是一种方式,它可以预防?

Answer 1:

不,他们不是无用的。

只要你使用一个独特的盐的每一行,那么盐可以防止减缓攻击。 攻击者将需要安装一个强力攻击,而不是使用彩虹表对密码哈希值。

正如在评论中提到的,你应该确保食盐是明智的大小。



Answer 2:

盐析被引入(或至少由流行)在UNIX / etc / passwd文件,这是世界可读。 它通常假定盐以及加密的密码是已知的裂化。 该盐的目的是裂化过程的减速(因为相同的密码将不映射到相同的加密的字符串); 它本身不是一个秘密。



Answer 3:

知道了盐能够做蛮力攻击,但不会使之无用。 盐可以防止攻击者使用一个已经生成的彩虹表(您可以在网络上找到)。

最好的办法,以防止暴力破解就是使用长而复杂的密码。



Answer 4:

如果攻击者知道盐,哈希密码和散列算法,那么他们可以安装一个强力字典攻击(或彩虹攻击)。



Answer 5:

这应该给你它是如何工作的想法。

比方说,你要加密一个词“秘密”。 之后,它是加密可以说,现在看起来像这样00110010。

如果黑客知道加密算法,他们可以创建单词及其对应的加密值的表。 于是他们采取了加密密码“00110010”,找到它在表上。 现在他们知道该密码用于生成“00110010”是单词“秘密”。 如果先放盐的话,那么一个普通的查找表将是无用的给黑客。 (A通用查找表是无盐的字典中的单词和其加密值的表)

如果先放盐的话(“saltsecret”),现在的加密值将有所不同,和黑客不会发现它在查找表。

然而,他们仍然可以开始使用盐从头开始创建自己的查找表,最终他们将能够反向查询密码。

因此,要回答这个问题,如果密码足够复杂,它将采取年龄为黑客以数字出来。 您每年可以改变你的盐,他们将不得不从头再来创建表。



Answer 6:

不,这不是毫无价值。

要成功地攻击一个账户,攻击者需要知道该帐户的盐(每帐户的盐应该是不同的),散列algorightm使用, 并且最终存储的密码哈希值。

鉴于所有这些信息,您可以编写不停地尝试不同的哈希密码的潜力,直到它找到一个匹配的程序。

如果它是一个糟糕的盐(太简单或短),这样可以更快地作出,因为程序可以使用彩虹查找表到最后存储的密码散列匹配到被散列,然后只减去盐的字符串。 但他们仍然需要的所有信息。

如果它是一个共享的盐,因为攻击者,并使用盐来预先生成彩虹表是很好的为你的系统上的任何帐户,这是不好的。



Answer 7:

假设MD5,SHA1,SHA256算法的强力攻击与GPU具有吞吐量超过1十亿每秒和SHA512各地300M / S的尝试。 如果您使用的这些算法中的一个,它会减慢黑客谁使用彩虹表(不太可能),但它不会黑客谁用蛮力攻击(很可能)放缓。 这将明确不能保护你,它只是增添几分对过时的彩虹表的安全性(这些算法中)。 有一点是聊胜于无。

但是,如果您使用的是最强的算法(例如bcrypt),盐明确值得的,即使储存与哈希因为香槟力不在的时间期限可行所以彩虹意义。

看看这个文章和总结:

如果你是一个用户:

确保所有的密码是12个字符以上,理想的多很多。 我建议采用密码短语,其仅仅是不低于密码容易得多要记住(如果没有输入),而且还针对暴力破解纯粹是可笑的安全,因为它们的长度。

如果你是一个开发者:

使用bcrypt或PBKDF2专门哈希您需要什么是安全的。 这些新的哈希是专门设计难以在GPU上实现。 不要使用哈希的任何其他形式。 几乎所有其他流行的散列方案是易受蛮力的商品GPU的阵列,只得到更快,更平行,更容易为每年编程强迫。

发贴者杰夫阿特伍德



文章来源: Are salts useless for security if the attacker knows them?