【问题标题】:Storing salt+password hash in DB and protecting against password attack在数据库中存储盐+密码哈希并防止密码攻击
【发布时间】:2012-04-03 17:18:57
【问题描述】:

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

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

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

【问题讨论】:

  • 我的意见,fwiw:如果您只存储加盐密码,并且尽您所能保护服务器,那么您已经完成了自己的工作。用户有责任选择不易受到字典攻击的密码。
  • 同意jcomeau_ictx,但仍然没有向用户发送盐,可以做些什么来使字典攻击更加困难。

标签: security hash cryptography dictionary-attack


【解决方案1】:

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

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

【讨论】:

  • 同意,但是当我们不向用户发送盐时,如何阻止字典攻击。
  • 问题不同,你的答案是关于盐的使用,这是众所周知的。问题是盐本身隐藏在数据库中,那么如何强制用户每次发送不同的数据进行验证。
  • salt 可以是用户名,这取决于你使用什么盐。如果你使用盐用户名,用户名和普通密码混合,然后MD5加密完成。这就是盐的用途。盐用于避免字典攻击。阅读答案中提到的链接。它在那里给出。
  • 没有必要将用户名设为盐(SO 上有很多帖子),用户名是已知的东西,对于该用户来说不是随机的。我不记得了,但是几年前雅虎过去常常在登录时发送随机盐,我想要同样的方式,但我的问题是我没有存储密码,我存储的是加盐哈希。
【解决方案2】:

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

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

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

【讨论】:

  • 对不起,又是错误的答案,这是已知的。请阅读其他答案和我的cmets。我对盐如何以及是否在基于字典的攻击中提供任何好处感兴趣。这里的攻击者不是从彩虹表生成密码,他可能正在使用一些字典攻击。我认为有些网站会向用户发送一个盐,以便与密码一起进行哈希处理,然后发送哈希值进行验证。我想知道它是如何工作的,如果网站不是首先存储密码本身,而是密码的哈希值。
【解决方案3】:

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

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

【讨论】:

  • 这就是我的理解。我的问题是我知道一些网站会发送一个随机的盐/令牌以使用密码进行哈希处理并发送回服务器进行身份验证。如果您不想将实际密码本身存储在服务器上,这是如何工作的。
  • @PriyankBolia 您需要更具体一些 - 这听起来与您提出的问题不同,因此您应该单独发布。
【解决方案4】:

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

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

这一切归结为,如果您对密码进行哈希处理,您应该使用 bcrypt。它旨在结合盐,是一种自适应散列系统。欲了解更多信息,请参阅this article on security.stackexchange.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2012-03-06
    • 2012-11-07
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2015-05-27
    相关资源
    最近更新 更多