我花了2个小时阅读盐渍密码,确保我理解了这个想法。我希望你们中的一些人可以分享你对我的结论的了解。
<小时/> 如果我是攻击者,并且我可以访问用户数据库,那么我可以使用表中存在的所有用户盐并使用它们来创建我的彩虹表。对于大桌子,这可能需要很长时间。如果我可以将列表缩小到感兴趣的用户(管理员,模组),我可以使用更大的字典列表来创建彩虹表,提高我的命中率......
如果这是真的那么腌制似乎并没有那么多帮助。它只会轻微减慢攻击者的速度。
我知道理想情况下你会强制使用复杂的密码并用独特的随机字符串加密它们,但强制使用复杂的密码会让用户烦恼(我知道这让我很烦),所以很多网站都不这样做。看起来网站对他们的用户造成了伤害,强制复杂的密码比一个好的腌制方法更重要。
我想这不是一个问题,而是要求其他人了解情况。
答案 0 :(得分:14)
盐的一点是,攻击者无法再使用预先存在的字典来攻击系统中的任何用户。他们必须使用该用户的盐为每个用户创建一个全新的字典,这需要时间和精力。如果您在为系统的所有用户创建词典之前了解了违规行为,那么您就有时间采取行动。 (警告用户必须更改其登录凭据 ,这应生成新的随机盐。)
我会说你应该使用一个盐和最复杂的密码(通过短语,真的),你的用户将容忍。即便如此,腌制是一项基本的安全措施,如果没有盐腌,你就无法承受。
答案 1 :(得分:6)
保持适当的水分比呼吸更重要吗?
答案 2 :(得分:5)
对于大多数网络,我倾向于采用一种方法,即每个用户使用一个盐,全局盐(每个算法的盐)和适度的密码复杂性规则(8个字符,其中包含至少2个大写/数字/标点字符的组合)站点。使用盐需要为每个要破解的帐户生成彩虹表 - 假设每个用户使用独特的盐。使用全局salt要求您同时破坏数据库和应用程序服务器。就我而言,这些总是两个独立的系统。使用密码复杂性规则有助于防止使用简单,易于猜测的密码。
对于具有更多权限的帐户,您可能希望强制实施更高的密码复杂性。例如,我们的AD林中的管理员必须至少具有15个字符的密码。它实际上比短密码更容易,因为它几乎迫使你使用密码短语而不是密码。
您还希望指导您的用户如何创建正确的密码,或者更好地传递短语,并了解各种社会工程攻击,这些攻击会绕过您保护数据的所有技术手段。
答案 3 :(得分:4)
好的,让我们来看看实际数据:
单个Nvidia 9800GTX可以计算3.5亿MD5哈希/秒。按此速率,小写和小写字母数字字符的整个键空间将在7天内完成。 7个字符,两个小时。根据您的算法,应用salting只会使这些时间增加一倍或三倍。
廉价的现代GPU很容易拥有10亿MD5哈希/秒。确定的人通常连接其中的大约6个,并获得60亿/秒,使得9个字符的密钥空间在26天内过时。
请注意,我在这里谈论的是蛮力,因为在这种复杂程度之后,preimage攻击可能适用也可能不适用。
现在,如果你想要防御专业攻击者,他们没有理由不能获得1万亿哈希/秒,他们只是使用专门的硬件或一些廉价GPU机器的农场,哪个更便宜。
繁荣,你的10个字符键空间在9.7天内完成,但是11个字符的密码需要602天。请注意,此时,在允许的字符列表中添加10或20个特殊字符只会使10个字符的密钥空间的破解时间分别为43或159天。
查看密码散列的问题是它只会缩短你的徒劳无益的时间。如果你想要真正强大的东西,但仍然像存储的散列密码那样天真,那就选择PBKDF2。
然后还有一个问题,用户是否会使用这个“强”密码,强迫他在其他所有网站上使用?如果他不将它们保存在主密码文件中,他肯定会。而其他网站不会使用您使用的相同强哈希算法,从而破坏了系统的用途。如果不阻止用户在多个站点上使用相同的密码,我真的看不到为什么你希望你的哈希是超强的;如果攻击者可以访问您的哈希值,那么您很可能已经丢失了。
另一方面,就像我将重复并再次向人们询问有关他们的哈希计划是如何“安全”的问题一样,只需使用客户证书,您的所有问题都会得到解决。用户无法在多个站点上使用相同的凭据,攻击者无法在不修改凭据的情况下破坏您的凭据,如果用户将凭据存储在智能卡上等,则用户无法轻易将其凭据窃取等。
天真地回答你的问题:强密码只有强哈希算法支持。
答案 4 :(得分:3)
除了需要长字符串之外,每个约束都会减少密码阶段空间的大小。约束导致复杂性降低,而不是增加。
如果这看似违反直觉,请考虑您为破解者提供了一系列可靠的假设。让我用我错过的青年的真实故事来说明这一点:
在双素数加密的早期,加密处理器的速度非常慢,人们倾向于使用int32算法来提高速度。这让我可以假设素数在0到40亿之间。人们总是选择大型素数,因为传统智慧认为更大更好。因此,我使用了一个预先计算的素数字典,并从一个已知的天花板下来,知道人们通常选择接近该天花板的键。这通常允许我在大约30秒内破解他们的密钥。
坚持使用长句,并使用腌制,没有其他限制。
当人们说“复杂”技术时,他们通常意味着复杂。转换可能非常复杂而且是可交换的,不幸的是,如果您不知道这意味着什么,那么您就无法评估该技术的优点。算法的复杂性只能通过默默无闻提供安全性,这有点像让房子出城而不是锁门。
答案 5 :(得分:1)
使用像salthash这样的复杂技术来保护用户的私人信息安全。
但请勿妨碍您的用户。提供建议,但不要妨碍他们。
由您的用户选择好的密码。由你来建议如何选择好的密码,并接受任何密码,并保持用户的信息与给定的密码一样安全。
答案 6 :(得分:1)
盐渍密码和复杂密码都是真正安全所必需的。通常情况下,彩虹表不会动态创建以攻击特定站点,而是预先计算好的。简单地强制使用密码比根据特定的盐值生成查找表要高效得多。
这就是说哈希的目的,以确保攻击者无法在数据库被泄露时恢复密码。它不会阻止攻击者猜测一个简单的密码。
要求密码复杂性实际上取决于您要保护的网站/数据类型。它会惹恼一些用户,并导致其他人在帖子上写下密码并将其粘贴到他们的显示器上。我要说在你的最后使用强大的哈希和盐是绝对必要的 - 忽略这样做不仅暴露你的网站,而且完全妥协每个回收用户名/密码组合的用户。
所以在我看来,无论您网站的安全级别如何,都必须进行腌制。强制密码复杂性对于高安全性站点很有用 - 但肯定更具有情境性。它不能保证用户方面的良好安全措施。我还要补充一点,要求一个不需要它的网站的安全密码可能弊大于利,因为用户更有可能回收他们在其他更重要的网站上使用的高安全性密码。 / p>