Bcrypt用于密码哈希,因为它很慢?

时间:2013-04-02 11:35:29

标签: security hash

我今天在not-implemented.com上阅读:

  

在大多数需要高速散列函数的情况下,应选择Sha-256。它被认为是安全的,没有已知的理论漏洞,并且它具有32字节的合理摘要大小。但是,对于像哈希用户密码这样的东西,首选一个设计得很慢的函数:一个很棒的函数是bcrypt。

有人可以解释最后一句:

  

对于像哈希用户密码这样的东西,首选一个设计得很慢的函数:一个很棒的函数是bcrypt。

我不是说这不正确,我的问题很简单:

为什么散列用户密码首选使用慢速功能?

4 个答案:

答案 0 :(得分:11)

在您这边,密码哈希需要很少计算。但是一个试图从被盗的哈希强制密码的攻击者依赖于计算尽可能多的哈希值。

所以,如果您的登录现在需要100毫秒而不是0.1(可能更少),这对您来说并不是真正的问题。但是如果攻击者需要2000天来破解密码而不是2天,那么这对攻击者来说会产生巨大的影响。

bcrypt设计得很慢,不允许任何快捷方式。

答案 1 :(得分:9)

因为如果需要更多时间来散列值,那么brute-force密码也需要更长的时间。

请记住,慢意味着它需要更多的计算能力。当潜在的黑客试图暴力破解密码时也是如此。

答案 2 :(得分:1)

暴力攻击密码需要付出更多努力。算法越慢,每秒猜测的次数就越少。系统用户不会注意到额外的时间,但会使密码破解变得更加困难。

答案 3 :(得分:0)

蛮力强制输入哈希密码?。说起来容易做起来难。

如果密码未使用SALT,则无论采用哪种加密方式都可以将其破解(因为我们可以使用字典/预先计算的哈希攻击)。

算法的速度无济于事,这是一些人出于错误原因而传播的神话。

例如下一个例子:

我们的哈希是通过以下公式生成的:

 MD5(SALT+MD5(SALT+VALUE))

即使我们能够在一瞬间生成md5的所有可能组合,我们如何知道是否找到正确的值?。答案是否定的,这是不可能的。 MD5(或sha)不会检查该值是否正确,它只是生成一个值序列而已。

只有当我们有办法确定生成的哈希值是否符合某些条件时,我们才能尝试强制蛮力攻击。这些条件可能只是字典,也意味着过程很缓慢,而且只有在我们找到一些条件的情况下。