计算密码熵的可能方法有哪些?

信息安全 密码 密码管理 密码破解 守望先锋
2021-08-18 10:29:42

我注意到这个论坛上有很多关于密码熵的问题和答案,有些人甚至提出了计算它的公式。没有人回答我的确切问题。

计算密码熵的可能或常用方法是什么?

例如,KeePass正在使用一种方法来计算某种密码熵。他们是如何计算的?

这些方法中是否包含重复模式或可预测/简单组合之类的东西?

4个回答

计算密码熵的正确方法是查看密码生成方法,评估密码生成方法涉及多少熵,然后评估编码方法保留了多少输入熵。例如,投掷一个公平的 6 面骰子一次会产生大约 2.5 位的熵(请注意,现实生活中的骰子是否真正公平是一个悬而未决的问题)。

密码强度计不是熵计算器,它们根据常用的密码生成和破解方法,通过对密码进行统计分析来估计字符串中可能包含的最大熵。在所有情况下,熵估计器都可能有相当大的偏差。虽然熵估计器可以很好地检测明显弱密码,但它不是确定密码是否良好的好方法。

一个随机的字符串可以包含很少的熵,例如一个 ASCII 字母的 SHA1 只包含 7 位熵;但大多数密码仪表会认为这是一个可靠的密码。

数据熵取决于观察者——没有绝对的熵测量。甚至宇宙中的任何事物是否都是随机的,这甚至是值得怀疑的,而“随机性”(或者更准确地说,与熵有关,不可预测性)是源或熵。

不可预测性是一个有效的术语:某人很难预测。

例如,如果您使用 Mersenne Twister,知道随机序列的种子可以完美地预测整个序列 - 所以您的“随机”密码由 64 位熵组成(如果您使用 64 位版本)。

如果您使用骰子器皿,那么熵源于您掷骰子的次数,仅此而已。

不幸的是,当它成为“密码”时,熵的来源就被掩盖了。

例如:一个三值安全代码,其中每个值在范围内[0,99]都有3*log2(100)熵位。直到您得知他们选择了一个 6 个字符的单词并使用电话键盘将其转换为数字,现在熵为log2(numberOfSixLetterWords)

简而言之,用于制作密码的假设对其熵非常重要,并且被密码的直接出现所掩盖,以至于您真的无法估计它您只能获得密码熵的上限。

KeePass 描述了他们在这里考虑的一些内容,并且在这篇优秀论文的第 18 页上对其进行了更详细的描述:

Carnavalet、Xavier De Carné De 和 Mohammad Mannan。“对高强度密码强度计的大规模评估。” ACM 信息和系统安全交易 (TISSEC) 18.1 (2015):1。

解释起来太长了,但是是的,repeating patterns and predictable/easy combinations包含在最严重的密码强度计算器的组合中,包括 KeePass'。他们依赖于他们称之为 a 的static entropy encoder东西,它可能像用于压缩数据的 Huffman 代码一样简单。

密码的熵是关于所有可能密码的概率分布的定量陈述。为了简化这一点,将概率分布视为一个规则,给定密码,输出该密码是被选择的密码的概率。

所以你真的不能给密码的熵加上一个数字,除非你从某个模型开始,告诉你任何两个可能的密码的相对可能性。外行账户关于密码熵的问题——毫无疑问你已经遇到过——他们通常无法清楚地说明他们对分布所做的假设。

这里还有另一组复杂性与 iAdjunct 的观点有关,即“数据熵取决于观察者”:我们可以区分密码的“真实”分布(根据人们实际选择密码的方式)和“假设的”分布(攻击者认为他们遵循的分布)。很多(糟糕的)密码建议都是基于使用“不寻常”密码生成规则的想法,因此您的密码在真实分布或攻击者选择的分布中是异常值。

但是最简单的解决方案是通过根据一组提供足够熵的规则选择密码来回避所有这些,即使攻击者知道规则Kerckhoffs 原则的一个版本)。许多(强烈推荐!)对以下两个问题的回答都强调了这一点:

因此,如果您遵循该建议,则可以通过拼写随机密码生成方案并假设攻击者会发现它来直接计算密码的熵。