随机词和brainflayer的密码强度

信息安全 密码
2021-09-08 00:03:01

我从多个来源读到过,由几个随机单词组成的密码可能会更好,因为这比随机字符序列更容易记住。例如Thomas Baekdal 的这篇文章我什至经常看到这个 xkcd 漫画。

现在,我读到了一篇关于名为 Brainflayer 的新工具的文章,该工具目前针对比特币钱包,每秒可以猜出 130000 个密码。这使得比特币脑钱包毫无用处。我想知道是否可以对所有密码使用类似的工具,并且诸如“这很有趣”之类的密码真的像 Thomas Baekdal 声称的那样安全吗?

4个回答

我写了brainflayer,并在DEFCON 上做了一次演讲。Thomas Baekdal 的文章和 XKCD 的漫画都不适用于现代离线攻击。我阅读了 Thomas 的文章和他关于它的常见问题解答,当他写这篇文章时,这可能有点合理,但现在不再如此。一个关键点是,从那时起,密码破解攻击变得更好了

Q:如果我因为空格不能写“this is fun”,我可以不写“thisisfun”吗?

答:绝对不是!“这很有趣”之所以安全 10 倍,仅仅是因为它更长(11 个字符)。通过删除空格,您可以大大减少长度和复杂性。空格实际上是特殊字符,这本身就使密码更加安全。

改用“这很有趣”。

密码破解者不会尝试长时间的蛮力攻击——这一切都是为了破解投资回报率。一个聪明的破解者会尝试使用各种分隔符的单词组合,因此使用空格、连字符、下划线或什么都不用最终提供大致相同的安全性。今天的破解方法使用单词表——其中可以包括短语——以及大量先前被泄露的密码以及流行度。这与基于规则的排列和统计模型相结合。Ars Technica 发表了一篇很棒的文章,详细介绍了 2013 年中期的现代技术,并且攻击只会变得更好。

我也有一个(可能有争议的)观点,即谈论离线攻击的每秒猜测是没有意义的。一个更好的思考方式是每美元的猜测如果你想学究气,你可以增加每美元成本每秒一次的猜测,但运营成本往往占主导地位。Brainflayer 的运营成本上限是每美元 5.6 亿次猜测,基于 EC2 现货实例基准 - 一次性成本为零。使用“更硬”的哈希函数(如bcryptscryptPBKDF2或最终确定的Argon2)可以使这些成本高出许多数量级

根据defcon talk ,您谈论的特定攻击具有某些特定特征,这意味着相同的攻击并不真正适用于所有密码。

首先也是最重要的,brainwallets 有效地将密码哈希放在公共位置。通常,防止密码散列破解的第一道防线是尝试保护散列本身。

其次,brainwallet 没有使用任何常见的密码存储算法(例如 PBKDF2 或 bcrypt)来保护哈希值。在攻击者可以访问散列的情况下,尝试尽可能减慢他们的攻击是很重要的。密码存储算法通过使从密码创建密码散列变得“计算困难”来实现这一点,从而减慢了攻击速度。这里有更多关于这些的详细信息

有趣的问题。@RoryMcCune 很好地解决了关于brainflyer 的问题,所以我想解决您更开放的问题:

诸如“这很有趣”之类的密码真的像 Thomas Baekdal 声称的那样安全吗?

不,不,不是。

我的第一个想法是 1)Thomas Baekdal 没有解释他是如何计算他的时间估计的,这让我内心的科学家怀疑,2)他的文章没有考虑摩尔定律——我们的计算能力正在增加的想法以惊人的速度。这篇文章写于 2007 年,从那时起,我们首当其冲的每美元计算能力和有效使用并行处理器(尤其是 GPGPU)的能力都突飞猛进。

我不同意他的说法:“100 年——这对大多数人来说确实是极限。谁在乎他们的密码在他们死后被黑客入侵?”。这是一个谬误;这个数字是基于当今计算机的速度,并假设技术在这 100 年内不会增长。

在我看来,密码是一项垂死的技术,因为它们不会随着 CPU 速度而扩展(即,我们破解密码的能力呈指数级增长,但我们记住更长密码的能力却没有)。不幸的是,还没有一种技术可以取代它们。我想到了解决缩放问题的两个很好的尝试:

  1. 基于私钥的身份验证。这可以扩展,因为随着 CPU 速度的提高,我们可以不断增加密钥大小。

  2. 工作量证明方案。这个想法是要求登录过程涉及需要大量计算的东西。密码拉伸/散列函数如PBKDF2orbcrypt是示例,以及质询-响应身份验证方案,其中包括要求客户端进行很长的计算,服务器可以轻松验证(如因式分解:“这是一个非常大的数字n,发回给我p,q这样p*q = n"). 随着处理器变得更快,您只需增加您要求的工作量。

这两者都有很好的理论特性,但对最终用户来说很不方便,这阻碍了它们被广泛采用。

离线攻击与在线攻击略有不同。

在在线攻击中,速率限制和网络传输的开销意味着极快的密码尝试是不切实际的。

在离线攻击中,当您拥有散列密码时,通常可以获得更快的攻击率。并且您可以以广泛的方式(通过使用云计算)扩大规模(这在没有机器人军队的情况下很难在线进行)。

尽管如此,每秒 130,000 次尝试的速度,或每美元 5.6 亿次猜测的速度,并不难打败。Thomas 假设 100 次尝试/秒:达到 100,000 次/秒只会使密码安全性降低 1000 倍。5个生僻字密码破解时间为5000亿年:1000倍速度后,破解时间为50亿年。

XKCD 方法可以更轻松地分析密码成本。假设您的攻击者每花费 1 美元就可以尝试 10 亿个密码(每美元密码熵“30 位”)(效率是 Brainflayer 的两倍)。

然后从最常见的 1000 个英文单词中挑选 4 个随机单词(一个 4*1k XKCD 密码)有 40 位熵,因此“离线”破解密码需要 40-30 = 10 位美元,或大约 1000 美元.

从最常见的 4k 英文单词中最多 4 个随机单词(一个 4*4k XKCD 密码),破解密码需要 48-30=18 位美元,即 250,000 美元。

最常见的 8k 个英文单词(6*8k)中的 6 个随机单词是 78 位。今天打败它需要花费 48 美元,或者 250,000,000,000,000 美元,或者是整个世界年 GDP 的 2-4 倍。

现在,如果我们假设摩尔定律在密码破解方面将继续成立(每 2 年,破解密码的成本减半),并且我们想知道“我们的密码能保证 100 万美元的安全多久),我们可以做这个:

30(当前比特/美元)+ 20(100 万美元)= 50。

取密码熵位数,减去 50。

摩尔定律指出,计算成本每 2 年降低一半。因此,剩余的位数增加一倍,这就是您的密码应该能够抵御 100 万美元攻击的年限。

4*1k 是 40 位,小于 50,因此今天它对离线攻击并不安全。

5*4k 是 60 位,因此它在 20 年内可以安全抵御离线攻击。

6*8k 是 78 位,因此在 56 年内可以安全抵御离线攻击。

所有这一切都假设您让一个优质、安全的系统为您选择密码(如果您尝试以这种方式选择密码,您几乎肯定会获得更少的熵)。