我最近为一个新帐户生成了一个密码,前三个字符是“aa1”。
在用尽所有其他攻击后,破解者将开始暴力破解。假设他们从“a”开始,我的密码“aa1”将比“ba1”更快地破解,并且比“za1”更快。
这个密码很长,所以这个问题比实际问题更理论化。(除非密码长度受到限制,当然......)我对暴力破解和密码的假设是否正确?
我最近为一个新帐户生成了一个密码,前三个字符是“aa1”。
在用尽所有其他攻击后,破解者将开始暴力破解。假设他们从“a”开始,我的密码“aa1”将比“ba1”更快地破解,并且比“za1”更快。
这个密码很长,所以这个问题比实际问题更理论化。(除非密码长度受到限制,当然......)我对暴力破解和密码的假设是否正确?
这似乎取决于攻击者将如何破解您的密码。但是,我的观点是,最终这并不重要。
一个严重的攻击者永远不会按照字母数字顺序从头开始,从aaaaaaaa
到99999999
,除非他们知道他们可以在合理的时间内做到这一点。如果这将花费他们一千年的时间,他们为什么要使用这种方法,因为他们知道他们必须停下来,比如说,cccccccc
?但是如果攻击者知道他们可以在合理的时间内尝试所有的可能性,那么你的密码是在第一个组合中还是在最后一个组合中并不重要,因为最终他们无论如何都会找到它(在合理的时间内)。
大多数密码仍然很弱(例如,您的狗的名字,可能还有您的出生日期等),攻击者不喜欢浪费太多时间,更不用说破解密码多年了。所以攻击者通常做的是使用字典和模式。他们将首先尝试使用以下密码:pass123
, 123pass
, john90
, john91
, John92
, JOHN93
, 123456
,l1nux4dm1n
等。如果每次尝试使用字典和模式都失败了,他们可能会继续前进并假设密码看起来确实是随机的。尝试所有可能的密码需要多长时间?如果可以在合理的时间内完成,他们可能会尝试所有这些(例如从aaaaaaaa
到99999999
)。否则,如果攻击者认为他们永远无法全部尝试,他们可能会尝试通过一些随机猜测(随机字符串,未排序)来暴力破解密码:12hrisn589sjlf
, 9f2jcvew85hdye
,otnwc739vhe82b
等。如果攻击者幸运的话,他们可能会找到密码,迟早。但是,如果密码太强,以至于他们要花很多年才能猜到,他们最好放弃或考虑另一种攻击方式(网络钓鱼、肩部冲浪、键盘记录程序等)。
熵确实是最大的问题,熵是由密码生成过程中的随机性决定的。
让我们以 18 个字符的密码为例。我们将只看字母数字字符(62 个可能的字符)。这给出了:
log2(62**18) = 107
熵位
如果您决定始终将前 3 个字符转换为 Z 以使其更难被暴力破解,那么您实际上已经从密码中删除了 3 个随机字符,剩下:
log2(62**15) = 89
熵位
这大约是弱了 1,000,000 倍。当然,两者仍然是绝对和完全不可能暴力破解的,所以如果有人试图暴力破解你的密码,我不会担心。
但是,值得强调的是,暴力破解这样的密码是多么不可能(以防我的链接不能说服你)。顶级的MD5 哈希设备每秒可以尝试 2000 亿次哈希。它速度极快(这就是为什么不应该将 MD5 用于密码的原因)。即使是较弱的密码(当您将前三个字符替换为 时z
)也有 7.6e26 种可能的组合。以每秒 2000 亿次哈希计算,如果密码使用 MD5 进行哈希处理,那么尝试所有密码可能性只需要 1.2亿年。我不认为你有什么可担心的。
aa
那么,最好从“更高”的字符开始,以使某人更难暴力破解您的密码?也许,也许不是。如果攻击者碰巧从字母表的开头开始,那么可以肯定的是,您的攻击者会“更快”被破解(尽管在此生中仍然不会)。但是,不能保证尝试蛮力的人会按照该特定顺序操作。因此,无法猜测以 开头的密码是否aa
更容易破解。但是,如果您使用长随机密码,那么它被黑客入侵的可能性实际上为零。所以我不会担心。说到密码长度为王。
我认为Kerchkhoff 的原理在这里非常适用。从某种意义上说,这是安全的核心“信条”。Kerchkhoff 原则背后的想法是,系统的安全性应该基于一个,并且只有一个,秘密/密钥。这个想法是,保持系统安全所需的“部件”越多,就越有可能泄露某些部件并发生安全漏洞。当我们谈论密码时,很清楚“密钥”是什么:密码。具体来说,一个长而随机的。如上所述,这确实是您所需要的。通过在您的随机密码之上添加更多“规则”,您实际上只是在提供潜在的提示,以使以您为目标的攻击者更容易猜测您的密码。
在用尽所有其他攻击后,破解者将开始暴力破解。
谁说的?
只有两种情况下,暴力破解实际上是一回事。一种是攻击者拥有密码哈希,另一种是他可以控制控制登录的软件,因为任何非完全破坏的软件都不允许他首先进行暴力破解。
最常见的情况是攻击者确实拥有密码数据库。他将使用像开膛手约翰这样的破解软件。他甚至在以“aa”开头之前就已经测试了几百万个可能的密码。在大多数情况下,此时他已经破解了数千个帐户,因为他们的密码是“密码”或“12345678”。或者 - 为了满足虚拟“密码强度”检查器 - “Pass123!”。
他可能不会费心让他的饼干进入真正的蛮力步骤,因为他有更好的时间来处理。而且你实际上不知道暴力破解是否真的会从aa开始,因为很有可能它不会。
您真正的问题是,一旦您制定了您认为“坏”密码的规则,您实际上会减少搜索空间。事实证明,密码策略是有害的。看,JtR 的作者甚至在他的 wiki 上有一个关于此的页面。当然,说服您的 CISO 采用他愚蠢的密码策略的 $$$ 顾问从未阅读过该页面,甚至可能不知道 JtR 仍然存在。:-)
所以不,“aa1”并不比“zz9”安全。首先是因为暴力破解是最后一种武器,而不是第一种,其次是因为无法保证暴力破解软件实际上是从 a 开始而不是从 z 开始的。如果我要写一个,我不会从 a 开始。例如,我会随机化字母表并使用它。正是因为我认为人们可能会避免使用“aaaaaaaa”作为密码。
许多其他答案都集中在为什么以“a”开头的密码不会比任何其他起始字母更安全,因为您假设攻击者是按顺序执行而不是并行执行,或者因为您假设他们是当熟练的攻击者可能不会时,从“a”开始。由于这些论点,没有一个起始字母比另一个来自熟练攻击的字母更安全。
然而,我认为对于一个天真的攻击者来说,以“a”开头的密码稍微不安全,因为他们更有可能按顺序执行它并从“a”开始,因为他们缺乏技能和经验。
但是,在实践中,就像其他答案所说的那样,这不会有所作为,因为在实践中,足够长的随机生成的密码可能永远无法在合理的时间内被暴力破解,并且避免使用字母 'a ' 只会缩小搜索空间。