字典密码是要走的路。Wikipedia 建议使策略可预测可能不是最好的方法,但在这种情况下却是。
来自维基百科信息论/熵:
例如,抛硬币的熵是 1 香农,而抛硬币的熵是 m 香农。通常,如果 n 是 2 的幂,您需要 log2(n) 位来表示可以取 n 个值之一的变量。如果这些值的概率相同,则熵(以香农为单位)等于位数。比特数和香农数之间的相等性仅在所有结果的可能性相同时才成立
因此,如果一切都同样可能,我很可能将“a”或“2”或“<”作为一个值,那么选项和长度都是最重要的。考虑到这一点,任何语言中的单词都远远多于字母+数字+符号。足以让 4 个字的密码轻松胜过 10 个字符的密码。
为了显示有多大的不同:
26 个字母,10 个数字,也许 15 个符号 = ~50 个选项。10 个字符的密码 = 9.76 x10^16 个选项。如果我们的计算机每秒猜测 400 万次,这是一个粗略的、慷慨的猜测,我们大约需要 775 年才能猜出密码。相当安全。而且,我们可以轻松记住大约 7 个字符,其中 10 个是可行的,尤其是通过密码式重复。
这是 10 个字符,所有字符的概率均相等,这是合理的,因为它可能是胡言乱语,我们必须在手背上才能记住。
从此:
1) 在这种情况下,密码的长度很重要。每个角色都大大增加了安全性。更长的密码总是更好。例如,如果我们将密码缩减为 7 个字符,那么我们最多只能用 2.25 天的时间来破解每个字符的 50 个选项。
2)但是说如果我像 XKCD 漫画描述的那样设置密码,没有什么能阻止任何人像“记住大象迷失的树林”这样的密码。假设我使用 john the ripper,它有大约 3000 个单词,并且可以选择使每个复数形式或以 1 结尾的 s 截断,那么可能有大约 6000 个单词。如果我的密码中有 4 个单词,那么 6000^4 种可能性 = 1.3 x10^15, 10 年
相当安全。而且,开膛手约翰实际上不会破解密码:
正确的马电池订书钉
开膛手约翰正在使用通用密码。如此普遍以至于只有“马”实际上出现在那里。假设我使用了破解字典没有预料到的不常见的单词,那么最后一个选项是合法的字典攻击。
如果我使用 Fedora 的默认字典,包含非常全面的500 000 个单词,对于 4 个单词的密码,有 6.25 x10^22 的可能性,我们大约需要 5 亿年的破解时间。但说这最多可以减少到其大小的 25% 并不牵强,尤其是在使用“正确的马电池订书钉”等常用词的情况下。所以,有 12.5 万种可能性。仍然是 2.44 x10^20,也就是大约 200 万年。
如果我们可以将其减少到 %1 会怎样?所以5000字。那是 6.25 x10^14 的可能性,几乎与开膛手约翰攻击的数量相同,最多大约 5 年。降到1%真的可行吗?如果不使用最常用的词,可能不会。
但这也取决于空格分隔符。如果我有
azkaban_P0tter*flubber st@ple
然后我们破坏了 shannons 对话中的第一个比特相等,但即使攻击者完全预料到了这种策略,也增加了不可逾越的变量数量。
此外,如果可以使用一个较小的字典,比如 200 000,将其减少到 1% 仍然最多 45 天,并且避免使用最常见的单词并使用不同的单词分隔符会大大增加这个持续时间,并在其中添加一两个单词如果这很容易,另一种语言。