当盐值存储在哈希值旁边时,你能够破解加密密码吗?

8

好的,所以我一直在阅读(很多!)有关安全和散列、盐、加密等方面的内容,但是有一件事情一直困扰着我。看起来很多非常懂行的人都说,在数据库中存储散列密码时,将盐值与其一起存储是可以的。

我不禁想问,为什么呢?如果您的数据库被导出,那么黑客就可以访问到所有信息,他们可以查看任何一个记录,然后就能够轻松获得散列密码和明文盐值。这会为他们使用彩虹表和/或字典攻击提供所需的信息,不是吗?

我一定是漏了什么(是的,这以前从未发生过!!),真的很希望对此事有所启示。

1个回答

14

彩虹表无法有效破解具有不同盐值的密码集合,即使已知盐值;如果要对每个盐值构建一个不同的表,那么就会打败整个彩虹表的目的。攻击者单独暴力破解每个密码会更快。这就是拥有每个用户盐值的目的。

换句话说,只有在尝试破解多个密码时,这些密码都使用相同的摘要算法进行处理,彩虹表才能发挥作用。为每个密码添加不同的盐意味着这些密码使用相同的摘要算法进行处理。


1
啊,我懂了!但是暴力破解呢?我的意思是为什么要把盐留在那里让别人使用?再说一遍,我知道我一定漏掉了什么。 - 86Stang
1
如果给定一个足够长度的密码,暴力破解密码可能需要很多年的时间。添加salt的目的是防止攻击者能够在几分钟甚至几秒钟内获取您的100,000用户数据库并发现其中1,000个用户的密码。但是使用每个用户salt的同一数据库很可能需要攻击者数年才能破解第一个密码。攻击者不太可能花费那么长时间来获取一个密码。对每个密码进行不同的加盐基本上可以防止攻击者有效地重复使用工作。 - cdhowie
1
请注意,一些系统使用单个站点范围的盐。如果攻击者能够获取该盐,则可以构建特定于该盐的彩虹表,然后有效地尝试攻击您的密码列表。这就是为什么推荐使用随机的每个用户盐。这不是为了防止发现用户凭据(没有任何东西可以在所有数据被泄露的情况下做到这一点),而是为了使攻击者花费极其耗时的时间,以至于他甚至不会尝试。(或者,如果他愚蠢到尝试,会浪费大量时间却毫无结果。) - cdhowie
1
现在这样就有意义了。所以听起来更像是作为防范全局数据库攻击的威慑力量,迫使黑客集中攻击个别账户,对吗?编辑:你已经回答了,非常感谢! - 86Stang
1
基本上是这样的。一些网站甚至实现了多轮摘要。如果您进行100次摘要函数(将输出反馈到函数中),则不会增加站点负载,因为认证很可能不会成为您站点的瓶颈。(通常是磁盘I/O或内存。)但是,这将导致暴力攻击所需时间增加100倍。甚至有一些设计专门用于此目的的摘要算法,非常消耗CPU和内存。 - cdhowie
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接