为什么在密码中使用随机字符?

信息安全 密码 账户安全
2021-08-28 20:48:57

我见过一些类似的问题,但可能不完全是我要问的。我也不能说我已经遵循了以前帖子中的所有技术术语,并且我真的在追求更多的直观理解。

所以假设我可以使用十个字符。通常的要求是使用数字、符号等。但为什么#^Afx375Zq比 更安全aaaaaaaaaa黑客不知道我已经重复了一个字符十次,所以他不是还要测试所有可能性还是先测试重复字符之类的东西?

同样,假设我使用 21 个字符的密码,例如

I like Beatles' songs.

现在有人可能会说这是一种常见的陈述类型,但黑客再次不知道我使用的是密码短语而不是

DD63@*()ZZZ125++dkeic

那么为什么它(我认为)不那么安全?是否首先测试密码短语?

4个回答

密码的强度由其方案决定。aaaaaaaaaa必须假定像这样的代码具有“十个字母”的方案,因此与我们必须从#^Afx375Zq.

攻击者优先考虑符合密码方案的最简单排列:以大写字母开头,以数字结尾,然后标点符号,中间用最少的小写字母填充,以单词开头,按频率排序。我有这样一本字典,所以我可以从Anything0!through开始,然后在不同变体之前进行throughZzzombie9~的非单词组合。Aaaaaaaa0!Zzzzzzzz9~

确保您的密码比允许的最低密码更复杂会给您带来一点优势;#aaaaaaaaa应该需要几分钟才能破解为aaaaaaaaaa. #^Afx375Zq将花费更长的时间,因为它混合了四类字符并且只使用三个小写字母。

总是假设攻击者知道你的计划。你可能会很幸运,并且能够隐藏在一些默默无闻的背后,这当然是值得的,但它不能影响你的数学。不要试图变得“聪明”——卡巴斯基在这方面的尝试以失败告终他们对最终创建弱密码的攻击顺序做出了假设。

强迫用户增加密码字符的复杂性会迫使攻击者增加他们暴力攻击的复杂性,尽管它实际上会削弱整体熵。aaaaaaaaaa它通过从可能的密码列表中删除它们来防止懒惰和容易猜到的密码。有 94⁸ 可能的八字符密码(60 quintillion,熵 = 52),但需要一个小数、大数、数字和特殊数字,将其减少到 26×26×10×32×94⁴(16 万亿,熵 = 43)。

I like Beatles' songs.既不是随机的,也不是唯一的。毫不奇怪,谷歌已经成功了。

👉如果 Google 查询您的密码(引用和去 0bfuscated)可能会被点击,那么它很弱。

密码实际上必须是随机的(不是任意的!不是模糊的!随机数生成器是可以的),按字符(对于密码)或按单词(对于密码短语)。I like Beatles' pants.更独特,但它是任意的,而不是随机的。在没有帮助的情况下(最好使用生成器),你不能“编造”一个随机短语,只能是一个看起来随机的短语。可以生成几个短语并选择一个您可以围绕它制作创意故事的短语。

计算出一个单词值 2.5 个字符,因此对于具有 10 个随机字符的密码的等效熵 log₂(94¹⁰) = 65,您需要一个包含 4 个随机单词的密码,log₂(100000⁴) = 66。这是较弱的再说一遍:作为句子的密码是不安全的。

长度不是一切。不要被令人印象深刻的密码长度所迷惑。当然,您的音乐偏好是 21 个字符,但即使我们假设它是随机的并且 Google 不知道它,它也是四个带有一些标点符号的单词:log₂(100000⁴×32²) = 76。将其与随机小写字母比较:log₂(26²¹ ) = 98。将它们与随机字符进行比较:log₂(94²¹) = 137。

我的密码建议摘要 世界已经变得足够复杂,以至于不可能记住您完全随机且每个帐户唯一的密码(无论是代码还是短语)。

  • 使用身份验证器应用程序进行 2FA 或无密码访问(如果可用)
  • 使用密码管理器生成和保存密码
  • 使用具有 90+ 位熵的强密码锁定您的密码管理器,
    例如生成的 4char 代码随机放置在生成的 4word 短语中,
    熵 = log₂(100000⁴×94⁴×5) = 94,例如junkie unknotted 7!cT opposite litter.
    写一个故事来记住这些单词,如果需要,将 4char 代码保存在您的钱包中。

如果您要生成一个长度为 10 个字母且可以包含大小写字母、数字和常用符号的完全随机密码,那么您同样可能会想出#^Afx375Zq,因为您是aaaaaaaaaa因此,从这个角度来看,密码同样安全是对的。

但是,大多数密码不是随机生成的。它们是由人类选择的,人类不会选择完全随机的一系列角色。他们选择了他们能够记住的东西,显然第二个密码比第一个更容易记住。

因此,如果您使用足够大的用户帐户数据库,您可能会发现选择您的第二个密码的人数远多于您的第一个密码。作为攻击者,我可以利用这些知识,所以我将首先测试易于记忆的密码。

攻击者首先尝试最常见的密码,因为它们最有可能会起作用。所以他们可能会从passwordPassword1或常见的模式开始,如123456,1qaz2wsxaaaaaaaaaa

例如,有一种称为“密码喷射”的常用技术,当您不是对一个帐户尝试大量密码,而是Password1对许多不同的帐户尝试一些常见密码(例如 )时。当您想要破坏任何帐户而不是拥有特定目标时,这很有用。

如果他们在使用通用密码方面没有成功,那么他们会尝试越来越不常见的事情,例如更长的单词、使用规则来改变单词(例如在末尾添加数字或将它们大写)、将多个单词组合在一起,甚至穷举较短长度的蛮力攻击。

创建潜在密码列表的一种方法是在网站上抓取单词和短语(尤其是随着越来越多的人开始使用短语)。因此,诸如此类的密码短语I like Beatles' song.可能会出现在其中一个列表中,因为它是可能出现在 Internet 某处的短语。但是一个长的随机字符串永远不会出现在一个单词列表中(除非你将它发布在 Stack Exchange 上),而且 21 个字符对于攻击者来说太长了,无法暴力破解)。

如果您想创建安全密码,最好的选择是像您发布的那样长的随机字符串(这是大多数密码管理器所做的),或者是一系列多个不相关的单词。因此,不要选择一个句子(如您给出的示例),而是选择四个随机单词(例如著名的XKCD示例CorrectHorseBatteryStaple)。

大多数人,包括许多编写密码策略的人,实际上并不了解密码。图表 A:“复杂性”规则的原作者现在为他的错误感到抱歉

我们现在知道长度比复杂性更重要。我们也知道您不希望您的密码是:

a) 一些常见的东西,比如 12345678(是的,这是一个非常常见的密码),任何可用的工具都会在前五秒内尝试。

b) 一些容易猜到的东西,比如你的狗的名字,任何对你有点熟悉(或在 Facebook 上关注你)的人都会尝试进行有针对性的低强度攻击。

除此之外,去他妈的所有规则,它们很愚蠢。大多数对密码的攻击都不是暴力破解。大多数被泄露的密码都以一种或另一种方式泄露,在这种情况下,您的密码是 123 还是 +)r%rARAT:Am))17z(rZk!,%ODbsz0 并不重要

那么为什么要在密码中使用一些随机性呢?因为 b) - 人类很擅长随机或难以猜测。至少包括一个随机部分。像“我出生在(随机三位数)”这样的密码比复杂度计告诉你的密码要好得多。

你的说法非常好——除非它是真的。如果它是真的,它属于 b) 并且在一百个不同的短语和拼写中尝试五十个语句很容易编写脚本。

除非你是一个引人注目的目标,否则不要再担心了。您更容易受到软件漏洞的影响,而不是有人花费资源来暴力破解即使是稍微好一点的密码。