1

请帮助我理解。另外,我不是在谈论 SSL 或 DH 密钥交换。由于盐存储在数据库中并且是攻击者的秘密,仅用于保护用户原始密码(彩虹表),以防攻击者获得实际数据库本身。那么你将如何防范基于暴力/字典的攻击。再一次,记录错误的请求并拒绝许多错误请求的 IP 是众所周知的,我在这里谈论的是密码学。由于user1的密码相同,攻击者是从其他网站获取的,salt在这里是如何保护的。我猜不是,那么阻止此类攻击的最佳解决方案是什么。假设数据非常重要,例如信用卡号 + CVV(我知道不存储 CVV,但这不是问题)。

编辑:顺便说一句,我想出了一些愚蠢的想法,它看起来像是一种已知的阻止字典攻击的方法。阅读更多这个问题:高成本加密,但解密成本低

也许我们可以在这里讨论一些其他方法,以防止暴力/字典/社会工程密码攻击

4

4 回答 4

3

我有点不清楚你的实际问题是什么,但如果是“盐如何帮助保护我免受暴力攻击?” 答案是从技术上讲它没有。盐并没有使蛮力攻击变得更加困难,而是盐使同时蛮力多个帐户变得困难。从本质上讲,盐人为地膨胀了进行蛮力攻击所需的搜索空间,使得预先计算每个可能的密码然后对照整个数据库检查它们在计算上变得困难。盐可以明文存储,只要它们对每个密码都是唯一的。

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

这一切归结为,如果你正在对密码进行哈希处理,你应该使用 bcrypt。它旨在结合盐,是一种自适应散列系统。有关详细信息,请参阅security.stackexchange.com 上的这篇文章

于 2012-03-20T17:48:48.240 回答
2

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

在这里查看。看看这里的内容和概念就可以理解了。这是来自 Spring 安全文档。

于 2012-03-19T07:44:09.680 回答
1

盐的目的不是防止字典攻击;是为了防止彩虹表等预计算攻击。拥有盐要求攻击者在获得对数据库的访问权限后单独攻击每个密码;他们不能预先计算字典中密码的哈希值,或者在用户之间重复使用这项工作。

密码拉伸是一种使字典攻击更加困难的方法,它增加了攻击者测试每个候选密码所需的工作量。

于 2012-03-20T11:22:19.620 回答
0

如果没有 salt,攻击者可以使用离线攻击来预先计算常用密码的哈希值:“secret”、“qwerty”等。没有 salt 允许攻击者判断不同用户何时使用相同的密码,因为他们将具有相同的哈希值。Salt 可以防止预先计算并避免匹配哈希问题。

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

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

于 2012-03-19T14:54:07.493 回答