密码熵因检查而异

信息安全 密码 隐私
2021-08-24 06:24:19

当涉及到深度安全性时,我知之甚少,但我的理解是,不同算法之间的密码熵应该有些相似。

我做了几个密码熵检查,算法给了我很大不同的结果。

这是意料之中的吗,是否有可靠/标准的密码熵检查?

4个回答

试图添加到另一个康纳的答案:

需要记住的重要一点是,熵本质上当然是密码中的“随机性数量”。因此,不同的熵检查器不同意的部分原因是熵是对密码生成方式的度量,而不是密码包含的内容。一个极端的例子通常是表达我的意思的最好方式。想象一下我的密码是frphevgl.fgnpxrkpunatr.pbzPbabeZnapbar.

熵检查器可能会用大量的熵来评价它,因为它不包含单词并且很长。它不包含数字,但进行简单的计算(如康纳在他的回答中概述的内容,以及大多数熵计算器所做的),您可能会猜到 216 位熵的熵 -远远超过当今典型密码所需的(大小写混合的 38 个字符给出 52^38 ≈ 2^216)。

然而,看到这一点,有人可能会怀疑我的密码根本不是随机的,可能会意识到这只是site name + my name. 因此,现实情况是我的密码根本没有熵,任何知道我如何生成密码的人都会知道我登录的每个站点的密码是什么。

这是一个极端的例子,但我希望它能说明问题。熵不是由密码的外观决定的,而是由它的生成方式决定的。如果您使用一些规则为每个站点生成密码,那么您的密码可能根本没有任何熵,这意味着知道您的规则的任何人都知道您的密码。如果您使用大量随机性,那么您就有一个高熵密码,即使有人知道您如何制作密码,它也是安全的。

熵计算器对密码是如何生成的做出假设,因此它们既可能彼此不同意,也可能大错特错。此外,XKCD总是适用于这类事情。

密码熵是通过它可能是长度的幂的可能性的数量来计算的,即。8个大小写字母密码= (26*2) 8 , (26个字母* 2个大写和小写)。

如果你也包括数字 0-9,那么这个幂就变成了 26*2+10,如果你也包括特殊字符,这个数字对于可能性的数量来说会变得非常大。

例如,我们将使用密码QweRTy123456(我知道的一个可怕的密码)。这个密码长 12 个字符,所以幂是数字 12,它使用大写、小写和数字,所以我们有 62 12这给出了 3.2262668e+21 的可能性总数。

现在,如果我们使用相同的密码,但全部小写,即。qwerty123456,我们的值是 36 12,给我们一个 4.7383813e+18 的潜力,仍然是一个巨大的数字,但也比使用大写字母要小得多。

密码强度取决于两个主要因素,长度和复杂性。作为示例,我将显示 4 对 8 个字符的数字 PIN 以显示差异。因此,对于 4 位密码,10 4我们有 10,000 种可能的组合,如果我们使用 8 位密码,即。10 8我们有 100,000,000 种可能性。因此,通过将密码长度加倍,我们将潜在候选者增加了 10,000 倍。

密码的第二个因素依赖于复杂性,即。大写和小写,特殊字符等。我在上面举了一个例子来展示如何通过使用更多字符集快速增加。

最后一点,密码并没有它的潜力那么强大,因为 12 个字符的密码可能是某人的出生地、宠物的名字等。密码的内容也非常重要。4 个随机词模型往往非常流行和安全,强制 xkcd

ConorMancone 的回答给出了一个很好的解释和密码内容与熵的例子,所以我建议也阅读一下这个主题的更多信息。

因此,总而言之,将字符集的可能性数乘以密码长度的幂,然后除以 2 以获得基于暴力破解技术的密码强度的可靠方法。

希望这能回答您的问题,如果您还有更多评论,我会更新以反映您的问题。

密码熵的计算方法是:知道(或猜测)用于生成密码的算法,并收集用于生成您选择的密码的不同分支点的数量。

让我举几个例子:

密码:密码

这不是 26^8(或 2^38)——因为算法不是“选择 8 个随机小写字符”。该算法是:选择一个单一的、非常容易记住的单词。这样的词有多少?如果您决定“有 200 个这样的词”,那么您将看到大约 8 位熵(不是 38 位。)

密码:password6

与上一条类似,这不是 36^9(或 2^47)——因为算法是选择一个单一的、非常容易记住的单词,然后在最后用一个数字装饰它。这里的熵大约是 11 位(不是 47 位。)

密码:地毯#terraform2

现在你可以猜到发生了什么。两个相对不常见的词,它们之间有一个标点符号,末尾有一个数字。如果您估计这些单词是从 10000 个单词 (2^13) 的字典中选择的,那么您会看到 33 位熵(第一个单词 13 个 + 标点符号 4 个 + 第二个单词 13 个 + 3最后一位数字。)

所以,现在,回答你的直接问题:为什么各种熵检查器给出不同的值?

好吧,让我们使用最后一个密码:carpet#terraform2。

一位熵评估者可能会说,“嘿,我不知道你是如何生成这个的。所以它一定是小写字母、标点符号和数字之间的随机字符。称之为 52^17 或 97 位熵 (2^97. )"

另一个稍微聪明一点的熵评估者可能会说,“嘿,我认识第一个单词,但第二个字母串是随机的。所以算法是一个不常见的单词、一个标点符号、九个随机字母,然后是一个数字。所以 10000 x 16 x 26^9 x 10,或 63 位熵”

第三个和第四个熵评估器可能正确地找出用于生成它的算法。但是第三位评估者认为这两个词都应该来自 5000 个单词的词典,但第四位评估者认为你必须打开一个 30,000 个单词的词典才能找到它们。所以一个人提出了 32 位的熵,而另一个人认为有 37 位。

希望它开始变得有意义。不同的熵评估者提出不同数字的原因是因为他们都对密码的生成方式提出了不同的评估。

没有办法判断一个数字或字符序列是否恰好是随机的。一台机器被要求产生一个随机的七位数字,大约每千万个请求就会产生一次 8675309。Tommy Tutone 的粉丝可能每次都会提供这个数字。如果安全应用程序碰巧需要一个七位数的数字(可能需要通过数字键盘访问),它可能会判断 8675309 具有良好的熵,除非该应用程序碰巧是由 Tommy Tutone 粉丝编写的,在这种情况下它可能认为该数字与 1111111 或 1234567 一样糟糕。

基本上,熵检查器唯一能做的就是检查密码是否匹配任何被认为具有低熵的模式,并观察它匹配的最低熵模式[每个密码都会匹配一些模式——例如 23 的密码如果不匹配其他任何字符,字符将匹配“任何其他 20-25 个字符的密码”之类的模式]。如果要求不同的人列出他们能想到的所有低熵密码模式,他们几乎肯定会想到不同的东西。然而,真正重要的是特定密码是否会碰巧与攻击者决定尝试的模式匹配。虽然有一些密码组是攻击者特别有可能尝试的(例如 1111111 和 1234567),