密码熵的概念是如何发展起来的?

信息安全
2021-09-01 04:05:50

我了解如何计算密码熵以及长度和字符值代表什么。我对其他类型的熵(例如香农)也有合理的理解。但是,密码熵似乎(在形式上)与其他类型的熵有很大不同;一个简单的 log2(D),其中 D 是难度或复杂性度量。我想了解密码熵的概念是如何被开发来理解这种熵形式的其他应用的。

密码熵是否满足其他类型熵的要求:加法、线性等。举个简单的例子,如果我的系统需要两个密码,我可以只添加每个密码的熵吗?

编辑:我显然没有很好地表达这个问题。我很抱歉。让我从更网络安全的角度再试一次:我们可以将集合 A 中信息 H₀(A) 的大小定义为分别编码 A 的每个元素所需的位数,即 H₀(A) = log₂ |一个|。现在让 A 成为击败设备上的保护系统所需的信息。对于密码,集合 A 的大小(以及信息 H₀(A) 的大小)可以直接量化 N L. 我试图深入了解 A 的大小不太容易量化的情况,但我有一些指标可以捕获信息集,比如“B”。反对使用 H₀(B) = log₂(B) 来量化击败保护系统所需的信息量的论点是什么?再次,我为一个措辞不当的问题道歉。

4个回答

物理学和信息科学中的熵只是相同可能性的数量的对数(通常是物理学中的自然对数;计算机科学中的以 2 为底的对数),因为处理和考虑这些异常大的对数通常更容易可能性的数量比直接的可能性。

如果我随机生成 128 位作为我的随机 AES-128 密钥(我存储在某处),很容易看到有 2 128 = 340,282,366,920,938,463,463,374,607,431,768,211,456 个可能的密钥我可以使用(每个位有 2 个同样可能的选择;并且概率相乘) )。在谈论信息复杂性时,谈论具有 128 位熵的密钥比谈论340 x 10 36或 340 undecillion (short scale) 更简单,特别是如果您想将其与 256 位密钥进行比较2 256 =115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936 种可能性。

现在,如果我给你一个随机用户的密码,从技术上讲,不可能给它唯一地分配一个熵。

您只能将熵分配给生成密码的模型。因此,如果要求您估计密码的熵,您的任务是假设可能生成该密码的模型。

如果我给你一个密码,P[rmDrds,r你可能会假设我从一组 95 个可打印的 ASCII 字符中随机选择 10 个字符,并且为了暴力破解,你将不得不经历 95 10 ~ 2 65.7种可能性,它的熵为 65.7 位。但是,这只是一个非常弱的密码OpenSesame,我将键盘上的手移到了右侧的一个字母上(这可能是 2^6 ~ 64 种常用方法之一来改变输入一个易于记忆的低熵密码)。如果您可以OpenSesame在列表中找到 1,000 (1000 ~ 2 10 ) 个最常见的密码,那么实际上 的熵P[rmDrds,r更接近 16 位(可能性为 2 10 x 2 6),当密码生成是选择 64 种常用密码隐藏方法之一,然后从 1000 个常用密码列表中选择一个密码。因此,经过大约 64,000 次尝试后,一个尝试过这种攻击途径的复杂暴力破解者可能会到达P[rmDrds,r,因此将其熵估计为大约 16 位比 65.7 位更准确,即 2 65.7-16 ~ 2 49.7 ~ 914 万亿倍比 65.7 位密码更暴力。

现在,显然一些不太复杂的蛮力攻击者可能忽略了在浏览常用密码列表时将键盘上的字符向左移动一个空格的可能性。但是为了安全起见,您忽略愚蠢的攻击者并假设非常老练的攻击者已经考虑了您所有的密码生成方法(Kerckhoffs 的原则是通过模糊来避免安全性;假设敌人已经考虑了您的秘密技术以及许多其他方法)。因此,当有人说您需要一个高熵密码时,您的目标不是一个看似高度随机的密码(以及一些简单的密码测试将其标记为高熵)。您想要一个随机密码,该密码由大量随机选择构成,并输入到密码生成过程中。你不应该选择对你有意义的词,并用一些晦涩的技巧来为它编一个密码,比如四处移动字母或 leetspeak 替换。对于强密码,您应该依赖 80 位以上的非人为随机性输入到您的程序中。您应该注意,密码生成过程中的一点熵等同于两个选项的决定(例如,可以通过掷硬币来确定的东西)。

再说一次,你可以用很多随机选择随机生成一个密码的可能性很小,它最终会得到一个非常弱的密码;例如,从技术上讲,您可以随机选择 12 个字符并得到password1234or dddddddddddd在实践中,这是一种可能性,尽管它不太可能发生(例如,如果您使用生成 90 位密码的过程,那么它生成的密码也可以使用仅 34 位的更简单的过程生成的可能性是2 34 /2 90 = 2 56中的 1 次,这大约是连续购买两张 Mega Millions 彩票并两次赢得头奖的几率)。

实际上,根据您的描述,我不确定您是否了解如何计算密码熵。密码的熵可以更准确地描述为 log(R),其中 R 是随机性度量,而不是复杂性度量。

例如,这与使用特殊字符无关。密码Tr0ub4dor&3的熵为 0,因为我是从某个地方获取的。另一方面,密码1101111110101000001011001110101110011111010100101111001110101011的熵是 64 位,因为我只是通过获取 8 个随机字节并以二进制形式打印它们来生成它。

密码的熵是信息论的熵。它衡量试图破解密码的人不知道的信息量。除非另有说明,否则安全人员假定系统必须防御至少具有正常智力的人。根据Kerckhoffs 原理,我们假设攻击者知道选择密码的方法。因此攻击者缺少的关于该方法的信息内容为0。然而,攻击者无法知道的是我的随机发生器的输出。因此密码的熵就是随机发生器提供的信息内容。假设一个完美的随机数生成器和一个将不同的 RNG 输出转换为不同的密码的密码生成方法,该信息内容等于从 RNG 读取的数据量。

密码熵是可加的。如果一个系统有两个密码,您需要同时提供这两个密码才能登录,那么这对密码的熵就是这两个密码的熵之和。请注意,这里有一个独立假设!如果你可以在不知道另一个密码的情况下找出一个密码是否正确,那么双密码系统的熵小于熵的总和。(作为一个极端情况,考虑一个固定长度 N 位的密码:您可以将密码的每一位视为一个单独的迷你密码;如果您可以独立测试每个位,则只需 2N 次尝试即可破解它,而不是 2 ^N)。再一次,这个属性来自信息论:你可以添加两个独立信息源的熵,但是添加两个重叠信息源的熵是没有意义的。

密码熵通常看起来像 log2(D) 的原因是,这是一个信息源的香农熵,当潜在结果的数量为 D 时,该信息源对于所有潜在结果具有均匀的概率分布。在这种情况下,结果意味着结果来自随机密码生成过程。

正如这里的其他人所指出的,熵不是任何个人密码的属性。熵是由一组特定规则定义的密码集合的属性。但是,如果您不关心是否严格,您有时可以通过检查单个密码来松散地推断出这些规则是什么,例如,数字和大写字母的存在松散地暗示了指定更大集合的规则(具有均匀的概率分布)比只存在小写字母时。

对于单个密码,有一种称为 Kolmogorov 复杂度的不同测量方法,用于测量从预定算法生成特定密码所需的信息位数。这显然是一个相对度量,因为它取决于算法,但松散地说,您可以使用密码的压缩长度作为 Kolmogorov 复杂性的代理。

考虑密码熵的更好方法是传达密码中包含的信息所需的最少位数。几个例子:

如果我的密码是“aaaaaaaa”,那么查看密码熵的一种有效方法是 5.9 位(单个区分大小写的字母数字字符的熵)加上 3 位(表示重复 3 次)。

如果一项服务需要两个密码,并且我将两者设置为相互匹配,那么我并没有显着增加通过单个密码传递密码的信息量,因为“Password123”和“Password123 1”并没有那么不同在熵方面。

如果一项服务需要两个密码,并且两者都是(分别)随机生成的,那么我密码中的熵加倍(尽管只有一个密码具有更严格的最低要求会更有意义)。