我们如何准确测量密码熵范围?

信息安全 密码 密码管理
2021-08-15 08:23:21

我已经给自己编写了决定密码强度的代码的任务,并且真的想打破我们这样做的许多已经建立的方式,因为它们经常缺乏,没有设计正确的方式,或者很快变得无关紧要。

通常,我们会看到您输入密码的模式,并显示布尔值“您需要 7 个带有字母和数字的字符”。后来,我们有了一个显示“从强到弱”的等级排名(以及百分比变化)的不合理图表。我们已经在这种模式上做得更好,实际上好多了,我们考虑向用户展示暴力破解时间,明确显示分配该分数的原因,

现在,我真的很喜欢最后两个想法的介绍,但这不是我主要关心的问题,我的问题与这个工具的介绍无关。

我的问题是生成估计的密码安全范围的程序应该考虑什么?

在查看 howsecureismypassword.net 的源代码后,我们看到它做了一些简洁的事情,例如保留前 500 个常用密码的列表,按所涉及的字符类别对密码进行分组,并将元分数与估计的破解时间相关联该范围内的一堆哈希值。这有一些问题,例如前 500 个密码不反映当前的“前 500 个”,而是在编写代码时的密码,密码破解速度也是如此,以及最终可能不会使用暴力破解的攻击。力量。

我在 passwordmeter.com 上看到了类似的问题,但更多是因为它运行的是最好的情况而不是最坏的情况。

所以我的问题是

在“现在”时间测量密码的安全分数需要考虑什么?

3个回答

我见过的这方面最好的作品是 Matt Weir 在 Reusable Security: New Paper on Password Security Metrics (2010) 中的作品他描述了“香农熵”和“猜测熵”之间的区别。他还有一种有趣的方法,可以为用户获取密码、分析密码并提供改进建议:

....密码创建策略的其他方法,包括我们提出的通过使用先前公开的密码列表训练的语法对其进行解析来评估人工生成密码概率的方法。与简单的黑名单相比,这使我们能够构建更强大的拒绝功能,同时在选择密码时,考虑到系统的安全限制,尝试提供尽可能多的用户自由。


更新:正如用户 185 所指出的, 2006 年NIST 电子认证指南的附录 A( 2013 年修订)也非常有帮助。它详细介绍了计算这两个术语:

” 当应用于密码分布时,猜测熵粗略地说,是对猜测选定用户密码所需的平均工作量的估计,最小熵是对猜测最简单单个密码的难度的度量密码在人群中猜测。


请注意,这个问题密切相关:

NIST 电子认证指南的附录 A详细介绍了他们用于构建熵与密码长度表 A.1 的方法,包括一些供进一步阅读的参考资料。

我认为您应该考虑密码实际受到攻击的各种方式,这需要一些研究。显然,完全由与普通密码完全匹配的密码组成的密码应该具有“非常弱”的强度(或完全被禁止)。您可能应该通过搜索脚本小子在破解密码时肯定会尝试的“默认”或常用单词列表来扩展它;如果您的数据库泄露,肯定会针对您的用户尝试数以万计(或更多)密码的现成列表。因此,将这些包括在您的“通用密码”检查中。

但是饼干肯定不会将自己局限于简单的“精确匹配”搜索,所以你的力量表也不应该。研究破解者使用的常见模式,例如组合密码字典中的两个单词,或用字母替换数字或其他“1337 speak”类型的替换(例如“p@ssw0rd$ 4r3 4w3$0m3!1”)。您提到的 howsecureismypassword.net 网站在这里失败了:它将“密码密码”评为需要“34.5 万年”才能破解,这是荒谬的错误。我猜它会在不到一秒钟的时间内下降。这些不是唯一需要考虑的规则;许多密码遵循非常简单的模式,例如{capital letter}{6 lowercase letters}{number}!这远不如 9 个随机字符安全(但仍比简单的字典匹配稍好)。在诉诸蛮力之前,也会尝试各种这样的常见模式。

如何处理这些转换或单词匹配取决于您;但无论如何,他们应该以某种方式加以考虑。需要研究的一件事是,开源工具是如何处理这个问题的?

例如,据报道,KeePass 密码管理器的质量估计功能通过根据用于创建密码的模式数量和该模式的强度计算熵来处理此问题,而不是使用字符数(如果检测到模式)。在旧版本的软件中,简单的基于计数的熵会根据已识别的模式进行惩罚。无论哪种方法,您都可以做得很好。诀窍是随着破解的进步使模式保持最新,但至少考虑到真正基本的东西可能会大大提高用户密码的强度,特别是如果你在界面中解释了什么他们的密码将被猜测的常见模式。