Conor 的回答是一个很好的起点,但是如果您深入研究 Chromium 的源代码,情况就会开始变得有些暗淡(但总比完全不使用密码管理器要好)。
Chrome 68(截至 2018 年 8 月 1 日的当前版本)
在 68 版之前,Chrome 遵循 FIPS 181 生成 15 个字符的可发音密码,允许使用大写字母、小写字母和数字。如果结果不包含大写字母和数字,它将第一个小写字母更改为大写,并将最后一个小写字符更改为随机数字。
不幸的是,FIPS 181 密码的熵很难计算,因为它生成可变长度的音节而不是字符,并且有很多规则规定是否允许使用音节。
这种不均匀性具有严重的影响。1994 年的一篇论文(第 192 页)估计,要想破解 100 个具有 8 个字符密码的帐户中的 1 个,攻击者只需尝试 160 万个密码。即使将长度从 8 增加到 15 会使熵加倍,这仍然可能平均低于 60 位的熵1,尽管由于大写,这略有改善。
原始标准似乎不支持大写字母或数字,并且实现2仅以 50% 的机会将音节的第一个字母大写(有趣的是在检查的字符数组y
中替换为,因此永远不会大写)。这意味着不是每个字母增加大约 1 位熵,而是每个音节只增加 1 位。音节的数量不是恒定的,因此很难确定这实际上增加了多少熵,但鉴于单个字母音节的稀缺性,几乎可以肯定它平均增加了不到 8 位。w
y
通过将每个单个字母音节交替转换为数字或符号来支持数字和符号,有 50% 的机会(尽管未使用符号功能)。不幸的是,正如您所注意到的,单字母音节并不常见3,因此ForceFixPassword
通常最终将最后一个小写字母换成数字。
可能还有更多问题,但我有点厌倦了看它。简而言之,这不是一种很好的密码生成方法,而且熵明显低于人们对长度的预期。实际上,这对于普通用户来说可能还是可以的,因为这意味着他们不会在 20 个不同的地方使用他们最喜欢的低熵密码,但是对于一个坚定且有资金的攻击者来说,使用快速哈希(即不是一个好的密码哈希) 的密码。
Chrome 69(计划于 9 月发布)
Chrome 69 中的情况看起来好多了。字符集是大写和小写字母、数字和符号,为了便于阅读,删除-_.:!
了以下内容:
l
(小写字母 L)
I
(大写字母 i)
1
(数字一)
O
(大写字母 o)
0
(数字零)
o
(小写字母 O)
生成的工作原理是从每个类中添加一个随机字符,直到满足该类的最小计数。默认情况下和当前使用的是一个小写字符、一个大写字符和一个数字。
然后密码的其余部分用从所有字符类中均匀选择的随机字符填充(考虑每个类的最大计数,当前未使用)。
最后,由于从可预测的类中将字符添加到密码的开头以满足要求,因此字符串被随机打乱。如果两个破折号或下划线相邻以提高可读性,则改组最多发生 5 次,因此这将略微降低熵,但减少是如此轻微以至于不明显(并且从允许的符号中删除破折号或下划线会更糟)。
对于 61 个可能的字符,完全随机的密码将具有 log 2 (61 15 ) = 88.96 位的熵。使用包含-排除来解释所需的字符,我得出了 88.77 位的熵:
61^15 all possible passwords
-53^15 passwords without digits 2-9 (0 and 1 are excluded)
-37^15 passwords without lowercase letters (l and o excluded)
-37^15 passwords without uppercase letters (I and O excluded)
+29^15 add back passwords excluded twice for lack of digit and lowercase
+29^15 add back passwords excluded twice for lack of digit and uppercase
+13^15 add back passwords excluded twice for lack of lowercase and uppercase
-5^15 remove all-symbol passwords that were excluded then added back
额外的洗牌也会减少一点点,但我现在没有时间计算它。最后,密码应该有超过 88 位的熵,这是相当不错的。
旧的生成器仍然存在于版本 69 中,但是当我测试开发版本时,它正在使用新的生成器。我不知道是否有任何方法可以使用旧生成器。
1. 平均熵不一定对非均匀分布有用,1975 年的原始论文给出了一个生成器的示例(第 29-30 页),该生成器以 50% 的机会生成单个密码(例如“密码”),并且否则为高熵密码。平均熵可能很高,但仍有 50% 的机会会立即猜出密码。即便如此,从1994 年的分析推断,我相信在最坏的情况下它仍然应该有超过 40 位。
2. 实现实际上不是 Chrome 的,而是取自APG程序,为了兼容性做了一些小的修改
3.测试显示apg
单字母音节实际上出现在大约 33% 的密码中,但其中 70-75% 的密码末尾只有一个字母音节。