sha512能保护您免受极易破解的密码吗?

10 浏览
0 Comments

sha512能保护您免受极易破解的密码吗?

我想询问一下,如果一个网络用户选择了一个非常容易猜到的密码,盐加密还有效吗?我已经阅读了以下网页(并且反复阅读),但我觉得我对此还不是100%清楚。

从上面的第二个URL中,可以找到以下内容(由用户“Ross”提供):

要理解第一个问题,想象一下一个包含数百个用户名和密码的密码文件。如果没有盐,我可以计算“md5(attempt[0])”,然后扫描文件,看看该哈希是否出现在任何地方。如果有盐存在,那么我必须计算“md5(salt[a] . attempt[0])”,与记录A进行比较,然后计算“md5(salt[b] . attempt[0])”,与记录B进行比较,依此类推。现在,我需要做n倍的工作,其中n是文件中包含的用户名和密码的数量。

现在,我明白在表中的每条记录引入一个唯一的盐,可以使黑客破解密码变得n倍困难。但是,如果一个网络用户天真到将"password"、"dog"或"cat"作为密码,会怎么样呢?如果我正确理解了StackOverflow上的回答,数据库表中每条记录的唯一盐并不保密。黑客成功入侵数据库后,很容易获取到这些盐。盐的作用是让黑客变慢,因为黑客需要n个彩虹表,而不是一个彩虹表。但是,如果一个网络用户的密码是"cat",并且这个网络用户恰好是一个包含10000条记录的表中的第一条、第二条或第三条记录,那么

               $hash = sha512($salt.cat)

将无法保护这个天真的网络用户免受黑客攻击,对吗?因为黑客知道盐,他可能会将盐附加到一个简单的密码前面或后面,然后他将知道哈希值。然后,他将使用彩虹表,而网络用户的数据就会被泄露。我对此的理解是否正确,即一个网络用户记录在表中的位置和所选择的密码的简单性,甚至可以破坏最巧妙的哈希算法,因为黑客可以访问到盐?

0
0 Comments

在给定一个哈希密码数据库的情况下,密码可以通过以下步骤被破解出来:(1)使用一个包含所有可能密码的字典;(2)为每个可能密码生成哈希值;(3)将给定数据库中的每个哈希值与刚刚生成的所有哈希值进行匹配。

因此,破解一个密码的成本 = 生成所有哈希值的成本 + 匹配所有哈希值的成本

=> 破解1000个密码的成本 = 1000 x 破解一个密码的成本 ,看起来是这样的。但是,

如果没有使用盐(salt),则生成所有哈希值的成本是恒定的,只需要进行一次。那么我们可以说破解整个数据库的成本破解一个密码的成本大致相同。从这个角度来看,在没有盐的情况下,如果黑客得到一个密码数据库,那么黑客肯定会去破解整个数据库,而不是针对单个密码进行破解。通过这种方式,他肯定会得到至少几个正确的哈希值。

被引入来防止这种行为。现在对于一个包含1000个盐值哈希的数据库,破解1000个密码的成本 = 1000 x 破解一个密码的成本。请注意,即使如此,破解一个密码的成本仍然与之前的生成所有哈希值的成本 + 匹配所有哈希值的成本相同。

TLDR;

盐并不能保护单个密码。相反,它是对黑客破解整个数据库采取行动的一种威慑手段。

0
0 Comments

SHA512是一种密码哈希算法,但它并不能保护我们免受弱密码的攻击。通过使用hashcat软件和八张AMD R9 290X图形卡,可以每秒破解797亿个SHA512哈希。这使得我们可以轻松地用一个弱密码字典来检查密码。即使我们使用PBKDF2算法结合SHA512和2万次迭代,我们仍然可以每秒处理39000个哈希,这意味着那些出现在所有密码字典中的弱密码仍然有被攻击的风险。因此,最好的方法是强制用户不使用标准字典中的密码。即使是使用7位字母数字组合的非字典密码,在这样的机器上进行穷举破解也需要17年的时间。

然而,实际上,大多数应用程序需要一种相对高效的方法来验证密码。即使是所有的密码哈希/加密方法也可以以不慢于用户登录速度的速度进行“试错”攻击。虽然加盐可以增加使用彩虹表和哈希表的难度,但遗憾的是,密码需要变得越来越复杂。我们已经接近大多数人能够记住的极限了。因此,我们需要更普及的两步验证系统,以提高安全性。

总之,SHA512并不能保护我们免受弱密码的攻击。为了增强密码的安全性,我们需要教育用户使用更复杂的密码,并推广使用双因素认证系统。

0