密码熵是如何计算的
log2 公式、所有三个 EFF 列表的工作示例、离合诗的成本以及为什么网站强度计不同意此页面。
熵衡量的是过程,而不是密码
单个密码没有熵。 “正确的马电池主食”这个短语本身并不强或弱——重要的是它是如何存在的。如果一台机器从 7,776 列表中统一抽取四个单词,那么它是大约 3.7 百万个同样可能的结果之一。如果有人因为在动画片中看到它而选择它,那么它就是少数之一,并且没有任何算术可以改变这一点。
因此,该站点上的每个图都描述了生成器及其设置,假设攻击者知道这些设置并减少到猜测随机抽奖。这一假设是保守的。列表、字数、长度范围、分隔符和大小写规则都在此页面上发布,因此将它们视为秘密会夸大此处的每个数字。
公式
对于从 N 个同样可能的可能性中统一做出的选择,熵是 log2(N) 位。每个独立的选择都会添加自己的位,因此 k 个独立的选择来自同一个 N 池,给出:
位 = k × log2(N)
这就是密码短语的整个计算过程。对数基 2 是将“多少种可能性”转换为“多少位”,而位很方便,因为每个额外的位都会使攻击者面临的工作量增加一倍。七十位的难度是六十九位的两倍,比六十位的难度大约一千倍。
同样的公式适用于随机字符密码,其中 N 为字符集大小,k 为长度:从一组 80 中抽取 20 个字符,得到 20 × log2(80),大约为 126 bits。
三个列表的工作示例
EFF 长列表包含 7,776 个单词。 log2(7,776) 大约是 12.925,因此每个单词大致携带 12.9 bits。六个词给出了 6 × 12.925,关于 77.5 bits — 此页面上的默认值,以及 EFF 自己对该列表的建议。七个词表示 90.5,八个词表示 103.4。
两个短列表都包含 1,296 单词。 log2(1,296) 是关于 10.34 的,因此六个单词是关于 62 bits 的,七个单词是关于 72.4 的,八个单词是关于 82.7 的。这就是为什么短列表需要一两个额外的单词来匹配长列表。
长列表中的五个单词大约为 64.6 bits — 几乎与短列表中的六个单词完全相同。达到给定强度的两条途径实际上是可以互换的;选择您认为更容易输入的单词。
长度范围对图形有何影响
最小和最大单词长度在绘制任何单词之前过滤列表,因此公式中的 N 是过滤器中幸存下来的单词数,而不是文件的大小。当您更改范围并显示剩余计数时,页面会重新计算此值,因此熵值始终与实际使用的池有关。
对于合理范围来说,这是一个很小的影响,而对于极端范围来说,这是一个很大的影响。将长列表限制为恰好四个字母的单词,留下了几百个候选者,将每个单词从大约 12.9 bits 删除到大约 8 — 这将一个六字密码短语从大约 77 bits 变成大约 48。该页面将显示这一点,此时它会告诉您扩大范围或添加单词。
分隔符和大小写选项添加了什么
固定分隔符不会添加任何内容。如果每个间隙都是连字符,那么知道设置的攻击者也会在每个间隙中添加连字符;他们别无选择去猜测。
随机分隔符选项不同。每个间隙独立地占用五个字符之一,因此每个间隙增加 log2(5),大约 2.32 bits。六字密码短语有五个间隙,大约是 11.6 额外位 - 一个真正的增益,页面会计算它。
同样的逻辑也适用于案例。小写、大写、大写、交替都是固定规则,不加任何内容。随机情况会为每个字翻转一枚独立的硬币,因此每个字恰好添加一位:六字密码短语上的六位。这也算了。
值得注意的是这些是多么温和。随机大小写和随机分隔符一起将大约 17 bits 添加到六字密码短语中,而第七个单词则单独添加大约 13 并且更容易记住。添加文字几乎总是更好的杠杆。
离合诗要花多少钱
使用离合诗,每个单词不再从整个池中提取 - 它是从以您指定的字母开头的单词中提取的。因此,该公式变成了总和而不是乘积:总计是第一个字母的池的 log2,加上第二个字母的池的 log2,依此类推。
字母的分布非常不均匀。在EFF长列表中,仅限于5到9个字母的单词,以s开头的池比以j开头的池大几倍,并且比以x开头的池大得多。因此,六个字母的离合诗给出的数字低于不受约束的每个单词值的六倍,低于多少完全取决于您选择的字母。
该页面对您输入的确切字母进行求和,这是给出诚实数字的唯一方法。如果您的一个字母在当前列表和长度范围内没有后面的单词,它会显示哪个字母而不是静静地失败。
离合诗也不是秘密。假设攻击者知道你的狗的名字的首字母拼写,因为这是一种容易被猜到的事情。
诚实地将点滴转化为时间
本页上的时间估计假设对被盗密码数据库进行每秒一万亿次猜测的离线攻击,并且在正确的可能性出现之前必须尝试一半的可能性。无论何时出现时间,都会说明这些假设,因为没有它们的时间估计是没有意义的。
一万亿次猜测是一个刻意苛刻的数字。它位于专用硬件攻击快速、选择不当的哈希函数的正确区域。正确使用现代密码哈希的网站的攻击速度要慢数百万倍,并且任何在线登录表单的速度还要慢数十亿倍,因为每次尝试都是服务器可以限制速率的网络请求。
这就是为什么本页上的数字故意悲观。如果估计表明搜索所需的时间比任何人都长得多,那么针对运行良好的服务的实际数字还要更长。
为什么网站的强度计显示不同的内容
大多数强度计都会对它们前面的字符进行评分,因为这就是它们所拥有的一切:它们永远不会看到密码是如何生成的。它们奖励混合字符类别,惩罚重复,并且经常与常见密码的字典进行匹配。反对人类发明的密码,这是一种合理的启发式方法,也是表单可以做的唯一事情。
由于完全错误的原因,它对生成的密码短语的评分很差。六个小写字典单词之间有空格,对于字符计数启发式来说,它们看起来正是它所要警告的事情——尽管这些单词是随机绘制的,而且结果比仪表所鼓掌的几乎任何东西都强。
当仪表和此页面对此处生成的密码不一致时,页面描述过程,而仪表描述外观。两者都不是说谎;他们测量的是不同的事物,而只有其中一个人知道这些词的出处。
你生成的东西会发生什么
ToolAcre 在您的浏览器中本地生成密码。对于高度敏感的环境,请在使用任何基于 Web 的密码生成器之前验证您的浏览器、设备和操作系统是否可信。
- 每个密码短语和密码都是由浏览器自己的加密随机数生成器在浏览器选项卡中生成的。页面加载后,不涉及任何服务器。
- 这里生成的任何内容都不会发送到 ToolAcre。该产品的内容安全策略将页面限制为其自己的来源,因此浏览器本身会阻止任何将数据发送到其他地方的尝试。
- 本地存储、会话存储、cookie、浏览器内数据库、地址栏或浏览器控制台中不会写入任何内容。重新加载会丢弃它;关闭选项卡将丢弃它。
- 没有帐户,没有登录,没有分析脚本,也没有广告脚本。唯一下载的文件是静态单词列表。
- 没有保留任何历史记录。再次生成替换该值,之前的值不可恢复。
问题
多少位就够了?
对于密码管理器背后的普通帐户,以上有关 70 bits 的任何内容都超出了现实的猜测。对于保护其他所有内容(管理器本身、您的设备、电子邮件)的少数密码短语,目标更高,围绕 90 bits 或更多,这是长列表中的七八个单词。
为什么添加单词比添加符号更有帮助?
长列表中的一个单词将可能性的数量乘以 7,776,大约为 12.9 bits。附加在固定位置的符号会将其乘以一,因为攻击者知道它在那里。只有实际上是随机的选择才算在内。
页面统计图中的随机case选项吗?
是的,每个字一位,因为每个字都是独立的硬币翻转。固定大小写规则被视为零,因为知道该规则的攻击者可以自己应用它。
为什么在时间估计中使用了一半的密钥空间?
因为平均而言,详尽的搜索会在中途找到答案。使用完整的密钥空间会将时间夸大两倍,这在这些尺度上是一个舍入误差,但仍然是错误的舍入方式。
考虑到计算机的速度越来越快,77 bits 是否足够?
每增加一点,猜测成本就会加倍,因此算术对防守者非常有利。 77 位密码的实际风险不是原始计算 - 它们是网络钓鱼、设备上的恶意软件、跨站点重复使用以及不小心存储密码的服务。这些都是值得关注的事情。
局限性
- 熵是猜测难度的上限,而不是对帐户实际如何受到损害的预测。大多数帐户的丢失是由于网络钓鱼、重复使用和数据库被破坏,而不是猜测。
- 这些数字假设随机源是声音。该页面使用浏览器的加密生成器,没有它就拒绝运行,但它无法从页面内部审核该生成器。
- 时间估计完全取决于假设的猜测率。这里使用的速率是故意规定的,对于任何特定的攻击者来说,在任何一个方向上都可能是错误的。
- 计算假设每个单词都是独立且统一绘制的。如果这不是真的,那就夸大了强度,这就是为什么生成器会用替换来绘制而不是删除它已经使用过的单词。
- 没有任何熵值可以解释密码被重复使用、在不安全的地方写入或在受感染的机器上输入。