2012-03-19 214 views
1

请帮我理解。另外我不是在谈论SSL或DH密钥交换。 由于salt存储在数据库中,并且是攻击者保护用户原始密码(彩虹表)的秘密,所以在攻击者将他们的手放在实际的数据库本身上的情况下。那么你将如何防范基于暴力/字典的攻击。再次记录错误的请求并拒绝许多错误的请求的IP是已知的,我在这里谈论密码学。由于用户1的密码相同,攻击者从其他网站获得密码,盐在这里如何保护。我想不是,那么有什么最好的解决方案可以阻止这种攻击。假设数据非常重要,比如信用卡号+ CVV(我知道不存储CVV,但这不是问题)。在数据库中存储salt +密码哈希和防止密码攻击

编辑:顺便说一句,我想出了一些愚蠢的想法,它看起来像停止字典攻击的已知方法。阅读这个问题:High cost encryption but less cost decryption

可能是我们可以在这里讨论一些其他的方法,以防止暴力破解/词典/社会工程学密码攻击

+4

我的看法fwiw:如果您仅存储腌制密码,并且尽可能保护服务器,那么您已完成了自己的任务。用户有责任选择不易受字典攻击影响的密码。 – 2012-03-19 07:45:15

+0

同意jcomeau_ictx,但仍然不向用户发送盐,可以做些什么来使字典攻击更加困难。 – 2012-03-19 07:50:08

回答

3

对我而言,你的实际问题有点不清楚,但如果是“盐如何帮助我抵御暴力攻击?”答案是,技术上它不。没有任何关于盐会使蛮力攻击变得更加困难,盐会使难以同时暴力破解多个账户。实质上,盐会人为地夸大进行暴力攻击所需的搜索空间,因此在计算上难以预先计算每个可能的密码,然后针对整个数据库检查它们。盐可以存储在明确的,只要他们是每个密码独特的。

如果你想让暴力破解密码更加困难,你想要的是自适应哈希方案。这些方案允许您指定哈希应该花多长时间。因为诚实的客户端只需要进行数十次的认证,但攻击者需要以数百或数十亿次的次序进行认证,而较慢的散列使得攻击者几乎不可能完成任务,系统。

这一切都归结为,如果你使用密码散列,你应该使用bcrypt。它被设计成包含一个盐,并且是一个自适应哈希系统。欲了解更多信息,请参阅this article on security.stackexchange.com

2

关于盐:如果你搜索“MD5”使用搜索引擎加密后的口令像谷歌,在这里你可能会发现原始的简单密码。但是,如果您将普通密码中的盐混入,然后应用“MD5”加密,则无法找到它。如果任何黑客以任何方式侵入你的数据库,并且如果你只使用MD5加密,那么他可能会使用上述方法来破解密码。对于例如在google上搜索这个字符串:5f4dcc3b5aa765d61d8327deb882cf99,你会得到原始的密码字符串。盐主要是为了防止这种攻击而添加的。

结账here。看看这里的内容和概念来理解。这是来自Spring安全文档。

+0

同意,但当我们不向用户发送盐时,如何停止字典攻击。 – 2012-03-19 07:48:16

+0

问题是不同的,你的答案是关于使用已知的盐。问题是salt本身隐藏在DB中,那么如何强制用户每次发送不同的数据进行验证。 – 2012-03-19 07:55:37

+0

盐可以是用户名,它取决于你使用什么盐。如果您使用salt用户名,则会将用户名和普通密码混合在一起,然后完成MD5加密。这是使用盐。盐用于避免字典攻击。阅读答案中提到的链接。它在那里给出。 – 2012-03-19 08:18:52

0

无盐,攻击者可以利用离线攻击预先计算常见密码的哈希:“秘密”“QWERTY”等无盐允许攻击者当不同的用户使用相同的密码告诉,因为他们将有相同的哈希。 Salt可以防止预先计算并避免匹配散列问题。

访问数据库的攻击者也可以访问盐。由于盐类不同,她将需要分别攻击每个密码。

使用拉伸(重复散列)也会减慢攻击者的速度。您可以存储hash^n(password + salt),而不是存储hash(password + salt),其中n足够大,整个计算至少需要0.1秒。这限制了攻击者每秒大约十次试验,同时对用户没有明显的影响。

+0

对不起,但又错了答案,这是已知的。请阅读其他答案和我的评论。我对如何以及如果盐在基于字典的攻击中提供任何好处感兴趣。这里的攻击者不是从彩虹表生成密码,他可能会使用一些字典式攻击。我认为有些网站会向用户发送salt以便与密码一起散列,并发送散列以进行验证。我想知道这是如何工作的,如果网站不是首先存储密码本身,而是密码的散列。 – 2012-03-19 16:47:54

1

盐的目的不是为了防止字典攻击;这是为了防止诸如彩虹表之类的预计算攻击。有了盐之后,攻击者就可以在访问数据库后单独攻击每个密码;他们无法预先计算字典中密码的哈希值,或者在用户中重复使用此项工作。

通过增加攻击者为测试每个候选密码所做的工作量,密码延伸是一种增加字典攻击难度的方法。

+0

这就是我所理解的。我的问题是我知道一些网站发送一个随机的salt/token与密码进行散列并发送回服务器进行认证。如果你不想将实际的密码本身存储在服务器上,它是如何工作的。 – 2012-03-20 13:15:31

+0

@PriyankBolia你将需要更具体 - 这听起来像一个不同的问题,而不是你问的问题,所以你应该单独发布。 – 2012-03-21 06:42:16