由整个英文句子组成的密码有多安全

信息安全 密码 密码策略
2021-08-19 23:28:34

我经常阅读作为建立强密码的建议,只是想一个句子,然后取首字母。例如,像“I watch Grey's Anatomy at 9.40”这样无意义的句子给了我密码“IwG'sA@9.40”。

如果我只取整个句子(包括空格)而不是这个,它有多安全。更具体一点:

仅使用一个普通的英语句子作为密码有多安全,尤其是在以下方面

  • 复杂的目录攻击
  • 蛮力攻击

如果这样做是个好主意,我应该遵循什么规则来构建句子?(字数,是名人名言,还是一句废话都行……)

这种类型的密码与由大小写字母、数字和长度为 n 的符号组成的随机选择的密码相比如何?

我想到了应该应用此方案的四个地方:

  1. 您的家用电脑
  2. 互联网帐户(电子邮件、在线商店、社交网络……)
  3. 网上银行
  4. 存储高度敏感的数据

密码应该足够安全,以跟踪密码破解和计算机硬件的技术进步至少两年。

在这些情况下,所描述的密码构建方案有多合适,如何根据使用密码的区域来更改关于句子长度等的建议?

如果答案包含一些估计密码安全性的计算以及有关该主题的一些参考资料,那就太好了。

4个回答

如果答案包含一些估计密码安全性的计算以及有关该主题的一些参考资料,那就太好了。

我最近在这里回答了几乎完全相同的问题:Confused about (password) entropy

破解密码所需的时间完全等于测试单个密码所需的时间乘以在您之前尝试的密码数量。因为你试图预测别人的行为,所以你只能这么说。

还有其他估计试图找出在某些一般情况下这将是什么数字,但这些估计总是错误的,因为攻击者不必遵循您构建的任何数学模型。显然,如果攻击者从您的计算机上删除击键列表,密码将很快被猜到,而且如果攻击者使用的字典根本不包含您的密码,则显然永远不会猜到密码。

有时人们会使用的概念来进行这种估计,但同样,在现实世界中,这种估计是否成立?由重复 27 次的字母“a”组成的密码具有非常低的熵,但可以承受几乎所有常用的字典攻击……直到极长的单字母密码风靡一时,攻击者开始寻找它。

密码模式越常见,攻击者就越有可能寻找它。

通常,密码攻击按以下顺序尝试密码:

  1. 常用密码
  2. 简单的基于字典的密码(仅限小写字母),
  3. 更复杂的基于字典的密码(混合大小写,根据一些常见模式散布数字和标点符号)
  4. 从短密码开始到长密码,对整个密钥空间进行详尽搜索

如果您可以承受前 3 种类型并且您有一个相当长的密码,那么您几乎可以在家自由使用,因为对这种大小的密钥空间进行详尽的搜索是不可行的。大多数攻击在类型 1 之后停止,只有协同攻击甚至尝试类型 3,类型 4 是绝望。

我认为最好的参考是NIST SP 800-63 附录 A,它列出了理论和计算。NIST 假设占主导地位的防御策略是熵,并且具有最大熵的密码是最强的。 Steve Gibson 的密码干草堆挑战了这一假设,并断言长度比复杂性或熵更重要(部分原因是散列的魔力)。出于您的目的,我认为假设身份验证凭据(密码/密码/等)的强度来自长度和熵就足够了。

一个句子更强,因为它更长。诚然,英文文本是高度冗余的 大约 1 位熵/字符,大多数攻击者将无法利用该熵。我已经退出渗透测试大约五年了,但是在我最后一次进行渗透测试时,攻击工具认为密码更像是一个单词而不是一个句子。由于Henning Klevjer已经很好解释的原因,熵的密码长度不是线性函数,并且攻击工具利用了这些限制。(IIRC,Klevjer 提出的问题可能导致密码破解速度提高 100 倍)。

基于这些假设,作为密码短语的句子特别强大。正如其他人所指出的那样,研究人员已经攻击了密码短语,但我不知道现实世界的攻击者已经发布了任何信息。

但是,密码短语有很大的限制。依赖方(您要对其进行身份验证的站点)必须接受密码。以我个人的经验,很大一部分可能是大多数身份验证站点不会接受一个句子作为密码。(我会很感激任何可以指出我的硬数字的人)许多密码实现要么明确拒绝超过 16 个字符的密码,要么将较长的密码短语截断为所需的长度。

依次检查您的用例: 1) 家用计算机 - 取决于您的操作系统,但也有更强大和更简单的非密码身份验证机制。(生物识别和硬件令牌,例如Yubikey) 2) 互联网帐户(电子邮件、在线商店、社交网络……) - 我怀疑您是否能够使用句子密码。许多(如果不是大多数)将不接受密码 - 您唯一的希望是最大化您提供的密码的熵并避免重复使用密码 3) 网上银行 - 如上所述,不太可能接受密码。然而,越来越多的网站接受来自 RSA 或 Yubikey 或软密钥(如谷歌身份验证器)的双因素身份验证。4)存储高度敏感的数据 - 我不确定你在这里的意思。如果您要存储高度敏感的数据,最好的选择是离线或加密。如果您在谈论真正的加密,那么如果加密产品会接受它,那么一句话应该更强。就个人而言,我会在这里进行两因素身份验证并跳过密码。

还要注意,如果依赖方的实施是脑死的,那么密码的强度是没有意义的——例如,请参阅Sarah Palin HackMat Honan您的最终熵不能保护您免受过失的依赖方的侵害。如果您使身份验证凭据足够强大,则有针对性的攻击者将诉诸替代方法(当然,您可以花费他的时间并阻止机会主义的攻击者)。在这种情况下,您必须注意防止危害和检测/从危害中恢复。但这超出了您的问题范围。

请不要从目标上分心 - 如果您的真正目标是强身份验证,那么您最好的选择是使用具有高度保证联合身份凭证,并对该身份使用两因素身份验证。

包含或不包含空格的密码的完整句子称为密码短语它们更安全,仅仅是因为它们的长度禁用了任何当代暴力攻击。但是,这要求攻击者不知道您的密码结构。一个愚蠢的密码策略可能需要“一个由至少两个单词组成的密码”,这使得整个事情变得更容易。假设猜测每一个单词的英文密码需要 X 秒,对两个单词做同样的操作需要 X 2当攻击者知道结构时,对密码短语的字典攻击可能非常有效。

一个好主意是使用诸如“希望没有人注意到我的脚臭”之类的密码短语,并添加一些随意的拼写错误或特殊字符。因此,如果攻击者可能猜到或知道结构, “Hope naune nytices mafit 气味”是一个更好的密码这对于较短的短语更为重要。“Yikes!Duperlarge%Dactionery”不会受到字典攻击,并且足够长以逃避暴力攻击。

不良做法(非详尽列表):

  • 短密码
  • 几个直的字典词
  • 用相似符号替换字符(即 pa$$w0rd)。“Pissword”几乎一样好..

  • 序号

从历史上看,强密码是一个长而随机的密码。由于不是所有人都能记住“%W¤GHAF034jio43Q¤#%q3æPÅJ(%” 以及“LookattemGo,thefatteys!”,所以我建议使用密码短语。如果你能安全地做到这一点,请将它们写下来。

要完全回答,您可以使用引号,而不是“未经处理”。LinkedIn 的案例中(LinkedIn 丢失了很多密码哈希),成功破解了直接写成密码的圣经引用和电影。

结论:想想这句话“没有好的税收”。并使其类似。“No_sych_thang:taxorama”,只是不要直接拼出来。

“你妈妈闻起来有杏仁马桶喷雾的味道”,按长度来说就足够了,但同样,如果密码策略上写着“密码应该是七个字并且冒犯某人的亲戚”......

对于您的家用计算机,如果您使用 Windows,您可以使用 Ctrl+退格键作为密码,可能没人会尝试。

重要的不是密码的长度,而是它的熵。密码的熵是攻击者在暴力尝试中找到您的密码之前必须尝试的预期尝试次数。(“预期”尝试次数,因为攻击者的真实模型是概率性的——如果您确切知道攻击者将按什么顺序枚举候选密码,您只需选择列表中足够远的一个,以便他'在你的一生中永远找不到它。)

如果您将可预测的转换应用于密码模式,则密码的熵不会发生太大变化。如果变换是多对一的,则熵会相应减少。熵可能增加的量表示攻击者冒险猜测您可能会应用此转换的倾向。使用第一个字母或 1337speak 等令人难忘的转换可能会很快尝试(猜猜看,编写密码破解工具的人既不愚蠢也不无知)。因此,像您描述的转换最多可能会增加一两个熵 - 或者它可能会大大减少熵:如果攻击者认为人们更有可能应用这种转换,他将首先尝试短形式;如果转换将许多密码短语合并为一个,

标点符号本质上并不能使密码更安全。像您所描述的转换的优点是它使您的密码更短。请注意,即使它更短,也可能更难打字,尤其是在带有屏幕键盘的移动设备上,标点符号有点遥不可及。完整的句子至少有同样多的熵,删除所有标点符号、空格并将所有字母设置为小写并不会显着降低熵。

一个好的密码方案是取几个随机的字典单词并将它们串在一起。请注意,随机选择字典单词至关重要。使用有意义的句子有助于记忆,但它也有助于攻击者。使用简单的随机密码生成方案的一个优点是您可以轻松评估其熵。如果您的字典有 2^D 个单词(基本英语 D ≈ 10,相当常见的单词 D ≈ 14,OED 的 D ≈ 19)并且您选择 N 个单词作为密码,那么您的密码具有 N D 位熵。由于密码生成是随机的,攻击者无法获得更多信息,平均需要进行 2^D N/2 次尝试才能破解它。如果某些系统要求密码中有特殊字符,请粘贴1结尾或开头的大写字母——熵来自随机单词,而不是特殊字符。这种密码生成机制在XKCD 936中进行了说明,并与 1337speak 进行了比较(差得多);该漫画已在此站点上进行了进一步讨论