我经常看到密码短语建议写成一个带有空格的句子。在那种格式中,他们是否更容易受到字典攻击,因为每个单词都是独立的,而不是一个完整的 20 多个字符“blob”?
密码短语中的空格真的会增加更多的安全性/熵吗?
否(底部有一个小例外)。
密码短语“正确的马电池主食”和“正确的马电池主食”在熵方面是等效的。选择将空格放在不正确的位置,或者有时包含空格,有时不包含空格会给你一些额外的熵;但它不值得记住它的额外困难。对于奇怪的间距模式,您会为整个密码短语获得一些熵;而仅仅添加另一个单词会增加大约 13 位(假设 7776 个单词的 diceware 字典对应于 5 个六面骰子;请注意 lg(6 5) = 12.92; lg 是以 2 为底的对数)。(我的回答和 Thomas 的回答没有分歧;攻击者必须检查带有和不带空格的密码短语,除非他有关于您是否倾向于在密码短语中使用空格的额外信息)。
注意随机词和有意义的句子之间的区别。密码短语“量子力学很奇怪”比说“热软糖斯科特树冠”的熵低得多?为什么?在有意义的英语中,您有一些模式,例如某些单词经常组合(量子力学)或某些模式必须看起来语法正确(主语、谓语、主语补语),原则上可以被足够复杂的攻击者利用(即使我不知道)目前使用这个的任何破解算法)。语法正确的书面英语的信息熵约为每个字符 1 位,因此第一个密码短语具有约 30 位[1],而第二个密码短语具有约 4×12.9 ≅ 52 位熵;所以大约需要 2 22≅400 万倍的破解时间。
警惕诸如http://www.baekdal.com/insights/password-security-usability之类的错误分析,这些分析会导致许多基本信息理论错误。例如,“这很有趣”在一个非常常见的句法正确句子中由一些最常见的英语单词组成('this' ~ 23rd most common; 'is' ~ 7th most common; 'fun' ~第856 个最常用的词)[2]。如果您仅测试前 1000 个英文单词中的三个随机单词,则只需 1 秒钟即可破解它,假设是现代 GPU 并且您已经获得了(盐渍的)哈希值。这大致相当于 5 个随机字母数字字符(不包括特殊符号)。如果你在谷歌上搜索引用的短语“这很有趣”,它会出现 2.28 亿次。
编辑:小例外:在极少数情况下,当您的密码短语中的连续单词在您的字典(或攻击者的字典)中形成另一个单词时,单词之间没有空格(或另一个分隔符)会显着降低密码短语的熵。例如,如果构成您的密码短语的随机单词是“bookcase the rapist”并且您没有空格,那么攻击者可以通过尝试仅两个单词“bookcase treatment”的所有组合来进入。
密码短语中的空格恰好添加了无法添加的熵。重要的一点是,攻击者无法测试密码的部分匹配。与好莱坞电影倾向于暗示的(以最形象的方式)相反,没有“部分解密”(文本部分清晰,但模糊)或“部分密码”之类的东西。攻击者有准确的预期密码,直到最后一个逗号,或者根本没有。这是一个登录系统,不是Mastermind的游戏。
例如,假设您通过在 2048 个“常用”单词列表中随机选择四个单词并附加它们来制作密码(“正确的马电池订书钉”方法)。我们假设任何攻击者都知道您正在以这种方式选择密码(例如,这是系统管理员颁布的“官方密码选择方法”)。这样的密码有多少熵?这很容易计算(假设你真的是用骰子“随机”选择东西,而不是用你的大脑):有 2048*2048*2048*2048 = 2 44 个可能的密码,它们都具有相同的被选中概率。因此,44 位熵。
现在,假设选择过程还声明:“您应将四个单词连接起来,不要使用任何空格”。有 2 44 个可能的密码,所以 44 位熵。现在假设规则说:“您应始终在两个单词之间放置一个空格”。仍然有 2 44 个可能的密码,所以仍然是 44 位熵。但是假设规则说:“您应该用空格分隔单词,或者将它们连接在一起(在选择密码时投掷硬币决定一种或另一种方式)”,那么突然有2 45个可能的密码(仍然等概率):熵现在是 45 位。
更一般地说,如果密码选择过程需要投掷 3 次硬币,以决定两个单词之间的每个位置是否应该有空格,那么熵会上升到 48 位。但请注意,这不是“免费的”:你会得到更多的熵,但你也必须记住更多(即放置空格的位置)。
实用说明:在典型的键盘上,按下空格键时会发出稍有不同的声音。如果您的办公室同事耳朵敏锐,他可能会注意到您是否使用它,以及可能在什么地方使用它。此外,您的同事完全知道在您的组织中宣传的密码选择规则,因为根据定义,他与您在同一个组织中。所以我建议不要使用空间作为熵的来源。特别是如果你使用“四个单词规则”并且列表中的所有单词的长度并不相同:长耳朵的同事可能会在键入时通过听到空格来推断每个单词的长度。
简单的答案是肯定的,但不是很多。考虑一下字符空间 - 如果您正在查看包括大小写在内的字母数字,则可以获得 62 个字符(az、AZ、0-9)。添加 {space} 意味着 63 个字符,因此您提高了 1/62
相比之下,添加一个额外的字符会成倍地增加你的熵。
你不能使用字典攻击,因为你不能单独尝试每个单词。这是一个密码短语。你必须全力以赴才能把它做好。我确定您的字典可能包含“mike”,但它不包含“mike is the smartest man alive”。这是两个不同的密码。添加空格会添加更多字符。字符越多,组合越多,熵就越大。