比较密码短语和密码 part 2

来源:互联网 发布:linux日志等级划分 编辑:程序博客网 时间:2024/05/22 12:09

正面及反面观点

密码短语开始流行的原因有很多,其中之一是因为可在几分钟内破解许多密码的工具得到了发展。这些工具并不算新。Quakenbush Password Appraiser 在 1998 年就能办到这一点。新颖的是时空权衡背后的理论和实践。时空权衡理论的提出者是 Phillippe Oechslin 博士. 时空权衡意味着不用存储所有可能的哈希(如果您尝试存储 NT 哈希,所需的存储量会超出全世界所有存储器的容量)。存储所有从 76-字符字符集中挑选的最多含 14 个字符的 NT 哈希,需要 5,652,897,009×10 亿×10 亿字节的存储量,这超出了当今任何文件系统的容量。而存储所有 LM 哈希(只需 310 千吉字节)目前仍然不可行。为了解决这个矛盾,Oechslin 博士提出了时空权衡理论,从而只需存储一部分哈希及其相关联的密码。这极大降低了存储要求,只需 17 吉字节的存储量,就可以存储相同字符集的 LM 哈希。我们会看到,支持密码短语的主要观点之一是:密码短语消除了存储要求,并阻止了预先计算的哈希攻击。

观点一:用户能记住密码短语

密码短语拥护者的第一个观点是:与记忆长(超过 10 个字符)密码相比,用户更容易记住密码短语。这或许没错,但是由于很少有用户使用 10 个以上字符组成的密码,这个观点是否正确还很难说。为了回答这个问题,我进行了一项完全不科学的研究,来确定用户能否记住含 10 个字符的密码。我向管理员们征求了他们的意见;99% 的人称用户不仅记不住含 10 个字符的密码,而且会拒绝使用这类密码。那么,用户能否记住由 10 个字符组成的句子呢?可能吧,因为只有几个需要记忆的符号(这里指单词)而已。我想引用一篇著名的文章,是 Miller 在 1956 发表的经典之作“The Magical Number Seven, Plus or Minus Two:Some Limits On Our Capacity For Processing Information.(神奇的数字七,加二或减二:人类信息处理能力的一些局限性。)” 这篇文章(只需读一下标题就有所感触的伟大的文章之一)的前提是人类只有有限的信息处理能力。我们一次能记住 7(加或减 2)个信息块。人类的信息处理能力有限的事实比数字 7 更为重要。有些人认为这个数字应该是 5(加或减 2)。我认识的一些人坚持认为该数字应该是 3,但我认为他们只是在做无用功。无论如何,人类的信息处理能力都非常有限。

“(信息)块”的定义也随我们所要做的具体事情而定。在由 10 个字符组成的随机密码中,一个块就是一个符号,而 Miller 声称多数人都记不住 10 个随机的符号。用户更容易记住由两三个词语或信息块组成的含 10 个字符的密码短语。

如果我们假设用户能够记住 7 个信息块、词语或符号,那么他们会用的最长的密码将被限制在 9 个字符以内。这个观点已经得到了实践测试的证实。为了评估密码的强度,我破解了一个大型域中的 28,000 个密码。我能够完全破解其中 23,311 个,占 83%,并部分破解另外 13.16%。但是这个例子并没有给出全部的密码,而本文后面的统计数字都是根据我对这 23,311 个已破解的密码得来的。这项分析为 9 个字符的限制提供了一些佐证:域中 64% 遭破解的密码(要求至少由 7 个字符构成)包含的字符都不超过 9 个。该域的所有密码中至少有 90.37% 包含的字符不超过 15 个。(除非以明文形式捕获这些密码,否则无法确定到底有多少个密码含有的字符数不足 15 个。因此,假设没有 LM 哈希的密码含有 15 个字符或更长,即便一些密码因为其他原因而缺少 LM 哈希)

在密码短语中,每个词语就是一个信息块。英语词汇的平均长度为 5 个字符。在英语中,有五个字符组成的词语也是用于衡量每分钟打字速度的标准。同样,在1995 年对 45 名 PGP 用户进行的一项调查中,Arnold Reinhold 发现 PGP 密码短语所含的词语平均由 5.3 个字符组成。有趣的是,Reinhold 还报告称,在他的这项研究中,所有词语中有 5/8 属于英语词典中的词汇。这个例子太小,在学术上不具备有效性,但是在少的可怜的文献里,这是我们手头仅有的最佳事例。

重新回到 Miller 的观点上,能记住 7 个词组成的句子的用户可以设置含 41 个字符的密码。这一推论有一些前提。首先,真正的密码短语不可能这么长。例如,我现在所用的密码短语(对,我的确在用)只含 35 个字符,但已经觉得太麻烦了。另外,Reinhold 还发现密码短语一般只含 4 个词。

观点二:密码更长就更强大

另一个支持密码短语的观点是:密码短语更长,所以更强大。密码短语的长度与密码的长度没有直接的可比性。之所以认为更长的密码就更好是因为,通常衡量密码强度的方式是:破解所需的时间。例如,正如我们前面看到的,破解 8 字符密码要比破解 7 字符密码多花 5 年又 11 个月的时间。但是只有当随机选取密码并且每个符号在密码中出现的几率完全相同时,这个观点才能成立。如果密码不是随机选取的,那么这些计算结果将无法成立。

作为另一个支持更长密码的观点,长于 14 个字符的密码不会生成 LM 哈希的说法经常被引用。因为我们可以通过其他方法去除 LM 哈希,单单去除 LM 哈希并不是密码短语的优势所在。那么,长度更长就有优势吗?不一定。目前,密码破解程序设计用来破解符号,但是没有理由说,未来的破解程序就不会使用单词作为符号。相反,我们当中有些人已经发现了这方面的可行性。所以,更长的密码不可能永远具有优势;它们只是有助于防范当今的破解工具。

观点三:密码短语具有更高的随机性

密码短语有一个显著的优点:熵值更高。熵一般用于衡量随机性。熵由三个部分组成:所选择项目的数量、从中选择的集合的大小以及选择每一项的概率。由于密码短语比密码更长,因此就算从相同的字符集中进行选取,也会比密码拥有更高的熵。这一点值得注意,因为密码破解程序会根据概率来进行破解。密码破解程序通常不会简单地尝试每个可能的字母组合来破解密码,而是先从字典中的一些常见组合入手,然后根据字母的出现频率进行重新组合。因此,我们对于 28 天破解 7 字符密码的计算结果可能有误。实际上,很可能只要几秒钟就能破解许多密码(取决于它们的构成方式)。所以,与单纯的长度和字符集相比,熵能够更好地衡量密码的强度。

让我们来看一些例子。测试显示,我们的测试实例中有 83% 以上的密码只是从字母、数字以及符号(!@#$%^&*()-_+=)组成的字符集中组合得来的。该字符集有 26+26+10+14=76 个英文符号,以及一些其他语言的符号。另外,那些密码所用的符号中有 80% 的符号选自那 76 个符号中的 32 个。32 个常见的符号为(按出现的频率排列):ea1oirn0st2lud!m3hcyg94kSbpM758B。更有趣的是,有 10% 的密码单单由这 32 个字符组成。

含 76 个符号的字符集的内在熵或绝对比率为每个符号 R=Log2L = 6.25 位。绝对率通常被视为熵的上限,同时假定每个字符被选中的概率相等。但是 C.E. Shannon 计算出 8 字母英语信息块的每字母熵为 2.3 字节(Shannon, C.E., “Predication and Entropy in Printed English,” Bell System Technical Journal, v. 30, n. 1, 1951, pp.50-64). 记住,Shannon 是根据采用 26 字符集的英语词进行计算的,而不是我们例子中的含 76 个符号的字符集。我们已经发现用户只从 32 个符号中选取大多数符号。无论如何,每个密码字符的实际熵可能要大于 Shannon 所计算的 2.3 的结果,但却要小于 6.25 的绝对比率。Log2 32 = 5(虽然比我想象的要高一点)对于密码每位熵的上限来说,是一个不错的估计值。由于密码的平均长度为 9.16 个字符。我们将其四舍五入为 9,那么所得的熵不会超过 9*5=45 位。

支持密码短语的观点认为,大多数人的词汇量超过 76 个。也可以认为密码短语是由一种语言组成的 —— 由该语言中的词汇来构筑密码短语。《牛津英语词典》收集了 616,500 个单词,但是只有参加拼字比赛的人和参加大学入学考试的学生才与其中 614,000 个词打交道。现实中,据语言学家 Richard Lederer 估计,美国人的平均词汇量(对于欧洲人在此所要进行的各种抨击,我将保持克制)为10,000-20,000 而语言学家 James L. Fidelholtz 估计这个数字为50,000-70,000 这两位权威人士都认为其中绝大多数属于回忆性词汇——比如,某个单词听到才认识,但不会用。普通人只会使用上述词汇中的一小部分。

让我们假设密码短语仅根据 300 个单词组成。这可能算是非常保守的估计,但是另一方面,多数单词只有当通过特殊的方法串在一起时才有意义,从而极大降低了密码短语的随机性。

如要计算密码短语的实际熵,就需要知道一共使用了多少个词。上面提到的 PGP 研究的单词的中间值为 4,但平均数则要高一些。为了遵守 Miller 的理论,让我们使用由 5 个词组成的密码短语作为平均值。

如果每个词有 5 个字符,那么在密码短语中就有 25+4=29 个字符,其中 4 代表空格数。密码短语所含熵的大小取决于使用哪个估计值。使用 Shannon 针对 8 字母单词的每字母 2.3 位的估计值,得到的总熵 为 29*2.3=66.7 位。66.7 位的计算结果可能是密码短语的熵的一个合理上限值,而且比熵值仅为 45 位的 9 字符密码要强一些。对于下限,我们可以使用 Bruce Schneier 每字母 1.3 位的估计值(Thomas Cover 进行的一项研究 (B. Schneier, “Applied Cryptography, 2nd Edition,” Wiley, 1996))。但是,Shannon 将每字母 1.3 位的估计值推广到 16 字母单词,因此并不完全是用于我们的 5 字符单词。无论如何,使用 1.3 作为熵估计值计算得到 29*1.3= 37.7(还比不上 9-字符密码)。根据该数值,需要由 6 个单词组成的密码短语来获得与 9 字符密码大致相同的熵值。

而且,我们计算密码短语的熵时,还未考虑到所估计的词汇量。我们可以假定,如果密码短语太普通,攻击者就可以开始使用利用单词而不是符号作为单位的“密码短语破解程序”。这种情况会给密码随机性计算方法带来巨大的变化。使用单词作为单位可能比使用作为符号组成单词的字母更加合适。如果我们使用所掌握词汇量中的 300 个单词来组成密码短语,并假定这些单词可以随机组合,那么所得到的每单词的绝对比率为 Log2300 = 8.23 位。使用由 5 个单词组成的密码短语得到的熵值为 8.23*5= 41.2 位,而使用由 6 个单词组成的密码短语得到的熵值为 49.4 位。

使用单词为单位使密码短语看起来根本不如密码那么有吸引力。实际上,由 5 到 6 个单词组成的密码短语的强度大致等同于 9-字符密码。应该说这不算是一个科学的验证结果。必须进一步进行研究,以证明这些熵计算方法的正确性.