斯诺登的 MargaretThatcheris110%SEXY 密码有多安全?

信息安全 密码
2021-08-31 02:38:17

爱德华·斯诺登对约翰·奥利弗的采访中,斯诺登建议使用一个好的密码,例如MargaretThatcheris110%SEXY..

此外,在Errata Security 博客上,Robert Graham 就此事说

NSA 泄密者 Edward Snowden 最近建议强密码看起来像“MargaretThatcheris110%SEXY”。他为此受到了批评,但实际上,它确实很强大。是的,有很多字典和马尔可夫的弱点,但它们被长度弥补了。在其他条件相同的情况下,时间越长越好。事实上,无论你现在有什么密码,只要在它的末尾加上“xxxxxxxxxxx”就可以让它牢不可破,而且你很容易记住。像“MaThis110%SX”这样的密码是一个 12 个字符的密码,如果它是您的 Lastpass 密码,即使是 NSA 也不太可能破解它——斯诺登的较长形式不会让情况变得更糟。(注意,有些人声称这个斯诺登的例子不是那么安全,但他们错了)。

现在,在之前的讨论中,我们了解到人脑不擅长随机化我们也知道密码熵不是基于实际密码中的内容,而是密码是如何生成的例如,乍一看以下密码可能被认为是强密码:

zTzG5rUev2fBBkp6dEMJHNEQWWmFTSjBBn26cQCgkVXSydep3nUx6pF4uf6Pu59RYKDEwkwnTdFJht2n

但是,假设 Bob 总是通过将他的密码生成文本文件中的以下单词以随机顺序组合在一起来生成他的密码,并且攻击者知道,那么密码不是那么强。

kVXSydep3nUx6pF4uf6P
zTzG5rUev2fBBkp6dEMJ
HNEQWWmFTSjBBn26cQCg
u59RYKDEwkwnTdFJht2n

连线文章的评论之一是:

如果我试图破解哈希,我不会从一开始就假设所有密码都遵循一个 female_names+surnames+english_word+english_word+known_passwords 模式,然后等待长达 7 天,看看我是否正确。如果我知道是这种模式,那么斯诺登的密码将有 33.041 位的熵。否则,熵会相当高(>100 位)。

这描述了我的问题的症结所在。如果我输入了这样的密码, zxcvbnMargaretThatcheris110%SEXY.之类的“强度计”给出的熵为 39.6(包括句号)。然而,没有人知道我生成的方式将其分解。即使他们确实知道我过去使用过这种方法,我也可能会为下一个密码使用不同的方法(例如)。zxcvbnmale_name+number+english_word+french_word+known_password+diceword

正如tylerl在另一个答案中指出的那样:

我们可以猜测攻击者可以使用哪些字典,但我们无法确定。因此,作为字典大小的代理,我们改为使用熵。这是一个糟糕的替代品,因为它不能反映实际的攻击机制,但它可能总比没有好。

如果攻击者知道我可能使用“人脑组成”的序列定义,可能使用“人脑组成”的值来填充这些序列,那么这实际上对他们有什么实际意义吗?我的意思是 39.6 的熵值并不意味着它可以被充满该密钥空间的蛮力攻击攻击,因为攻击者不知道结构。我意识到在安全方面唯一应该保密的是密码和密钥,这些机制本身应该被认为是已知的和公开的。但是,密码的生成方式可以被认为是私密的,因为知道其他人知道确切的密码方法。显然,斯诺登已经公开透露了这一点,但对于他的下一个密码,他的做法会略有不同。这就是格雷厄姆不同意斯诺登的例子比熵分析表明的更安全的原因吗?

还相关:人类产生的熵曾经是一个真正的问题吗?

4个回答

正如tylerl 所指出的,熵并不是真正衡量密码强度的指标,但它是我们所拥有的最好的:

密码复杂性的目的是抵御暴力攻击。包含密码的最小可用字典的大小决定了破解密码所需的时间。我们可以猜测攻击者可以使用哪些字典,但我们无法确定。因此,作为字典大小的代理,我们改为使用熵。这是一个糟糕的替代品,因为它不能反映实际的攻击机制,但它可能总比没有好。

基于熵计算的密码比较可能是富有成效的,但你应该小心避免将太多的价值归于一个数字,这最终只是间接地与密码的承受能力有关。

尽管MargaretThatcheris110%SEXY.密码在分析时具有 39.6 位的熵,但生成方法随机的(尽管是人脑)。这使得很难衡量它的实际实力。这种虚假的随机化也会使攻击者难以在不知道该特定密码结构本身的情况下将单词表放在一起。除非最终用户对多个密码使用相同的结构(如果他们生成的密码足够他们需要记住,这可能会意外发生),那么这种熵的缺乏并不能真正帮助攻击者。这就是为什么格雷厄姆不同意斯诺登的密码很弱的原因。

无法判断任何给定的单个密码是“弱”还是“强”。

DyZ29ZQ8JswmeKutXHDHh77YqpkmD

可能是安全密码,但如果它在攻击者的字典中,则不是。像zxcvbn这样的密码“强度”计量器可以详细说明您的密码是如何构造的,如果它属于一个常见的序列,那么这可能会提示您选择另一个密码。

的顺序

female_names + surnames + english word + english word + digits + common password + character

zxcvbn 确定的MargaretThatcheris110%SEXY.可能不是很常见,因此攻击者只有在有特定理由时才会选择攻击这个熵分布的密钥空间。正如格雷厄姆所暗示的那样,这MargaretThatcheris110%SEXY.可能就像 NSA 证明一样。

熵作为密码强度度量的问题在于它确实必须应用于输入而不是输出

如果我对“密码”这个词进行 base64 编码,我会得到一些看起来很强大的东西,但实际上并非如此。

所以测量熵位确实是最好的情况如果您查看纯随机生成,即使是相对较小的键空间,每个符号的熵实际上也没有您想象的那么糟糕。

参考:https ://en.wikipedia.org/wiki/Password_strength#Random_passwords

不区分大小写的字母是每个符号 4.7 位。所有 ascii 为每个符号 6.5。因此,只要我使用“普通字母”的密码长 50%,它就“更安全”。

但实际上 - 即使是随机生成的密码也可能不是那么随机。它看起来不错,但事实并非如此。人脑生成的密码也是类似的......不是那么随机,但有一个重要的警告 - 除非我知道你的大脑是如何工作的,否则我无法说出你可能使用的算法。

也许能猜到——事实上,这就是字典攻击的工作原理。您制作了一套字典驱动的“密码规则”,这非常简单地将符号粘在一起并试图“猜测”这些符号。这大大减少了随机字符的“最佳情况”的熵。我认为 XCKD 引用“correcthorsebatterystaple”作为大约 44 位而不是理论上的 122 位,该长度的字符串可能是。

所以......简短的回答 - 这几乎是不可能的。即使您有信心,也不要让人们暴力破解您的密码:)。

当然,斯诺登的密码“算法”现在已经为人所知,它可以将潜在的密钥空间减少到可攻击的范围。现在斯诺登足够聪明,知道这一点,我认为将来不会使用基于相同算法甚至类似算法的密码。然而,有两个问题需要考虑。

首先是共享派生秘密时的信息泄露。使用算法而不是随机词(diceware)的唯一优势是从算法中产生多个安全秘密。一个例子是导出两个密码,这比两个纯随机值更容易记住。

让我们假设在不知道算法的情况下,两个派生密码都太复杂而无法被蛮力破解。问题是还有其他方法可以获取其中一个密码,这会降低另一个密码的强度。例如,如果某人使用一个密码来加密文档,而另一个密码作为他们的 Facebook 登录名,那将是非常糟糕的。执法部门可以使用法律权力拦截 facebook 密码,并根据结果推导出算法或算法的大部分,然后将秘密文件密码的熵从 > 100 位降低到 40。泄漏。

所以是的,在抽象分析中它非常安全,但现实世界很复杂。我们必须考虑将在何处使用派生密码。当两个值被链接时,风险会更大,因为泄露信息可能会危及底层算法。如果您假设该算法将仍然是一个秘密,那么这是一个问题。如果您假设该算法不会保持秘密,那么您将需要更复杂的密码,并且您会失去算法的价值,而不是仅使用多个随机密码。

当我们将秘密传递给第三方(即登录网站)时,我们会失去对其的控制,简而言之,这就是问题所在。我使用了执法部门强制 facebook 记录下一次登录的示例,但这可能是该网站的安全性较差并将其以纯文本形式存储,或者其中一名员工存在恶意并在发生时记录所有登录,或者该网站被黑客入侵不知道,第三方(可能是一个带 3 个字母的)正在秘密记录登录信息。

如果我无法控制某个秘密的安全性,我不希望该秘密与其他秘密联系在一起。我无法控制 facebook 是否会损害该秘密的安全性,但我可以划分损害。由存储随机生成的站点密码的强密码保护的密码管理器确保没有上游链接。泄露主密码,泄露所有存储的密码,但泄露的 facebook 密码无法泄露,可以泄露机密文件密码。

仍然有一个“主密码”,虽然没有上游链接,但所有秘密和主密码都有链接,由于类似的原因,这可能是坏的。对于更高级别的安全性,通过使用算法加上存储在密码管理器中用于高级机密的随机值,将更高安全性机密与更低安全性机密隔离可能是有用的。因此,主密码的泄露会泄露所有低级机密,但不一定会泄露更高级别的机密。

我认为尝试定量分析的最重要的组成部分是

“像 zxcvbn 这样的“强度计”给出的熵为 39.6(包括句号)。但是,没有人知道我生成了 zxcvbn 分解它的方式。

因此,考虑到这一点,密码生成算法的排列需要作为熵位包含在内,因为攻击者可能在那里为每个可能的生成方案(xkcd 方案、zxcvbn 方案、 schneier 方案等,它们都交换了一些熵以方便记忆回忆)并且最终会将它们全部排列起来,并在他们有机会时将它们发射到你的哈希值上。
谷歌的一些巧妙使用可能会揭示“创建难忘密码”的前 6 或 8 种方法,如果您想提出更完整的熵分析,这将是开始的地方。