当从这个网站http://codahale.com/how-to-safely-store-a-password/盐没有帮助:为什么采用字典攻击
需要注意的是盐是无用的,以防止字典攻击或蛮力攻击是非常重要的。
如果盐没有用来防止字典攻击,为什么要用盐?
当从这个网站http://codahale.com/how-to-safely-store-a-password/盐没有帮助:为什么采用字典攻击
需要注意的是盐是无用的,以防止字典攻击或蛮力攻击是非常重要的。
如果盐没有用来防止字典攻击,为什么要用盐?
盐使加密更强。然而,字典攻击不会尝试解密密码哈希,因此无论是否加盐,都无关紧要,他们只会尝试很多密码,直到有效。
如果'攻击者'有你的站点/应用程序使用的密码哈希(和盐),他们将只是蛮力“盐”+“密码”。
但是,使用盐对彩虹表(预先计算的散列表)提供更多保护,因此它们仍值得使用。
但是攻击者在发现匹配后如何知道哪一部分是盐,哪一部分是真正的密码? – 2012-02-09 23:28:21
如果您的站点/数据库已经被攻击者足够的入侵以获取用户散列密码,他们可能也会访问salt。 – pjumble 2012-02-09 23:35:28
这属于上security.stackexchange.com
的问题是结合散列算法的速度计算能力之一。基本上,他正在投入慢速的bcrypt。
如果黑客同时使用哈希和盐,并知道用于哈希密码的算法,那么破解它只是时间问题。
如果使用非常快速的算法,那么这段时间很短。如果使用非常慢的算法,那么显然,找到命中的时间要长得多。
这给我们带来了首要原因:我们首先散列/盐的东西:买时间。可以使用这些时间来更改列出的所有密码,并有时间与所有用户联系,以便在需要更改其他系统上的密码时通知他们。
我们使用盐的原因是迫使黑客建立彩虹表每个盐值。这样一张表不能用来破解你的所有密码。这样做的唯一理由是花时间,并希望阻止普通黑客投入更多资源来破解所有这些资源。
无论使用何种机制,哈希密码在大多数人都接受这个词的意义上是不安全的。安全并不意味着“永远不会被破解”。相反,这意味着“在时间/努力破解方面这将是昂贵的”。对于大多数黑客来说,他们只需要清晰的文字等低挂水果。对于一些人来说,他们会去任何需要的极端,比如按照盐的价值建造大量的彩虹桌子,以获得全部的彩虹。
而且,当然,支撑这一点的是在用户表中是否容易识别任何“超级”用户帐户。对于大多数系统来说,破解系统管理员帐户类型就足够了,因此每个用户使用不同盐值的事实并不重要。聪明的人只会为这个帐户感到困扰。
这不完全准确,因为大部分事情取决于您的假设。
主要假设是:
盐通过彩虹桌防止从字典中即时破解;该文章和后续文章指出,CPU /存储器的折衷现在是彩虹表没有意义,因此盐不能帮助你。当然,他们从来没有帮助过暴力攻击。
-1腌制对抗彩虹餐桌上的暴力攻击同样有效!但盐必须是未知的。为了防止重复密码哈希,许多系统使用独特的盐。然后将其包含在数据库中。如果一个数据库泄漏了,那么这个盐几乎是无用的。添加第三个应用程序特定盐。是一种有效的解决方案,但不能将其存储在数据库中或其无用的代码中。当然,如果黑客有权访问文件系统,那么您又有困难 – DeveloperChris 2013-05-28 03:43:47
现在,这似乎是一个编程的问题不对,所以我只给你腌制和加密一些信息:
腌制的目的是在像哈希,这是单向的功能,以帮助在密码学中广泛使用,由于难以猜测密码常常使用密码,而其他攻击(如暴力破解攻击)则需要时间来破解密码。
如果你想安全地存储密码,最好的方法就是加密。在Wikipedia上查找加密以获取更多信息。
两点意见:
常规的哈希算法可以重复。仅仅因为你想增加工作因子就不需要使用非标准算法。
即使使用慢散列方法,也建议使用盐。它可能不一定会增加最佳攻击的工作负载,但在用户选择与另一用户,另一个帐户或旧密码相同的密码时,它将停止微不足道的攻击。
对于单个密码,它没有多大区别。暴力破解密码与暴力破解密码一样困难。你只需要尝试按键,直到你受到打击。
当存在大量密码时(例如在泄漏的数据库中)时,会出现差异。基本思想是,在破解很多密码时,可以重新使用部分必要的计算。这是通过构建彩虹桌完成的。这样做的计算成本很高,但一旦完成,攻击者就可以相对快速地破解大量密码。用彩虹表破解N
密码要比单独强制密码更加快速。
如果每个密码都与单个salt进行散列,则不能以相同的方式重新使用信息。您仍然可以构建彩虹表,但它们只能用于数据库中的一个密码,这使得它们无用。所以为了破解密码,你必须单独强制所有的密码,这对攻击者来说通常是不实际的。
此外,对于无盐密码和流行的哈希算法,您可以简单地从互联网上下载预先计算的彩虹表。所以攻击者甚至不需要自己计算它们。他可以下载一个表并查找特定散列的密码。盐可以防止这种情况。
无信号哈希也有缺点,即具有相同密码的两个用户的密码哈希是相同的。因此,如果攻击者发现具有相同密码散列的多个用户,他只需要破解该密码一次。
为了说明的目的,假设你正在使用的盐2字符串可以是一个随机元素从该组
salts = {'00', '01', '02'...... '99'}
您使用的公式是:
salt = salts[rnd(100)] # gets a random element from the set above, say '87'
password_hash = MD5(password + salt) # say the hash is 'dai480hgld0'
此后你会保存散列和盐在数据库中,像
+---------------------------+ | password_hash | salt| +---------------------------+ | dai480hgld0 | 87 | | sjknigu2948 | 23 | | . | . | | . | . | +--------------------+------+
我们假设一个COM承诺的系统攻击者可以访问你的代码 - 所以他知道你是如何计算你的哈希值的。
攻击者也可以访问你的数据库,所以他拥有所有的密码哈希和盐。
鉴于这一信息,为了做破解您的密码(其中有一个哈希:“dai480hgld0”),他就必须做到以下几点:
for word in dictionary_words #iterate over all the words in dictionary
for salt in salts #iterate over all possible salts (100 iterations)
password_hash = MD5(word + salt)
if password_hash == 'dai480hgld0'
print "The password is " + word
exit()
endif
next
next
请注意,如果你有不使用任何盐可言,算法将一直
for word in dictionary_words #iterate over all the words in dictionary
password_hash = MD5(word)
if password_hash == 'dai480hgld0'
print "The password is " + word
exit()
endif
next
从以上两个代码示例,它明显地增加了盐的密码增加了暴力攻击尝试的次数。在我们的例子中,因为有100种可能的盐,所以你已经让攻击者用100种盐来尝试每个单词。
因此,得出结论:
盐是不错的。他们让你的密码难以破解。即使你的用户输入了弱密码,盐也会确保所产生的哈希不可用。例如,它很容易谷歌一个散列'3cc31cd246149aec68079241e71e98f6'这实际上是一个相当复杂的密码,并将满足几乎所有的密码策略。仍然破解它不需要一行代码!
盐不是万能的。它们只会增加黑客破解密码所需的时间。但是,如果你的salt地址空间相当大,那么你很好。例如,如果你有32个字符的字母数字字符串作为盐 - 蛮力真的需要很长时间。
这是不正确的。首先,我认为你的意思是盐让哈希更强。大多没有理由使用Salt加密。盐被用作单向函数的输入之一,以使它更难破解密码或密码数据库。另外,如果您使用盐进行字典式攻击,这一点很重要。如果你不使用salt,黑客只需要对每个密码猜测进行一次散列,并将其与所有散列进行比较,而在使用盐的情况下(每个密码都有一个单独的盐),你不能这样做。 – Rutix 2012-02-11 15:47:02