11

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

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

有人可以解释最后一句话:

不过,对于像散列用户密码这样的事情,设计慢的函数是首选:一个很棒的函数是 bcrypt。

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

为什么散列用户密码首选使用慢速函数?

4

4 回答 4

19

在您这边,密码哈希很少需要计算。但是,试图从被盗散列中暴力破解密码的攻击者依赖于计算尽可能多的散列。

因此,如果您的登录现在需要 100 毫秒而不是 0.1 毫秒(可能更少),那对您来说并不是问题。但是,如果攻击者需要 2000 天而不是 2 天来破解密码,这对攻击者来说意义重大。

bcrypt 的设计速度很慢,不允许任何捷径。

于 2013-04-02T11:43:56.580 回答
19

因为如果哈希值需要更多时间,那么暴力破解密码也需要更长的时间。

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

于 2013-04-02T11:44:25.940 回答
2

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

于 2013-04-02T11:44:51.493 回答
-1

暴力破解哈希密码?说起来容易做起来难。

如果密码没有使用 SALT,那么无论采用何种加密方式,都可以破解它(因为我们可以使用字典/预先计算的哈希攻击)。

算法的速度没有任何意义,这只是一些人出于错误原因传播的神话。

例如下一个例子:

我们的哈希是用下一个公式生成的:

 MD5(SALT+MD5(SALT+VALUE))

即使我们可以在一秒钟内生成所有可能的 md5 组合,我们如何知道我们是否找到了正确的值?. 答案是否定的,这是不可能的。MD5(或sha)不检查值是否正确,它只是生成一个值序列,仅此而已。

当且仅当我们有办法确定我们生成的哈希值是否符合某些标准时,我们才能尝试强制暴力攻击。这些标准可以是一个字典,它也意味着一个缓慢的过程,只有当我们能找到一些标准时。

于 2019-07-20T15:08:48.843 回答