将 Diceware 短语变成句子会降低其安全性吗?

信息安全 密码 密码策略 密码破解 密码
2021-09-05 02:28:38

Diceware 密码短语的长度正在增加——现在最多六到七个字。密码短语更容易记住的古老格言可能适用于较短的短语,但六个真正随机的单词可能很难记住。另一方面,对于某些人来说,完整的句子可能更容易记住。

以 Diceware 生成的密码短语为例tracy optic renown acetic sonic kudo我们可以把它变成一个(无意义的)句子,例如Tracy's optics were renowned, but her acetic sonic cost her kudos.

如果攻击者知道您正在使用六个 Diceware 单词(每个单词 12.9 个),则 Diceware 密码的熵为 77.4,如果不知道,则为 107.219(根据此计算器)。句子形式的熵(根据计算器)为 255.546。然而,它不再是完全随机的,这应该是 Diceware 方法的一大好处。

假设攻击者以某种方式知道您正在使用这种密码短语生成方法,那么句子形式是否会以任何方式降低密码短语的安全性?例如,也许他们可以使用某种对英语句子结构的分析来缩小他们所需的猜测范围?


假设上述问题的答案是“不,句子形式不会降低安全性”,那么这里是另一个考虑因素:

句子格式的一个好处是它很长并且包含非字母字符(例如撇号和逗号)。但是,当尝试在移动设备上键入时,这是一个明显的缺点。假设我们将 Diceware 短语缩短为三个单词 - tracy optic renown- 然后将其变成一个[a-z]句子 -tracy is optically renowned或者可能tracy is optically renowned worldwide(进一步将其与 Diceware 单词表区分开来)。

如果我们使用三个 Diceware 词并且攻击者知道我们正在使用 Diceware,那么我们的熵为 38.7。但是,tracy is optically renowned worldwide根据计算器,熵是 100.504 位。

鉴于三个单词 Diceware 短语和短句形式之间的差异,熵计算更准确 - Diceware 计算(即差异太小而无所谓)或计算器的计算(字典/蛮力/等) ?

注意:假设密码可以接受任何长度或字符组合

4个回答

它不会降低安全性。实际发生的是你的“熵计算器”给你一个错误的熵度量。毕竟只能给出一个大概的估计。实际上有一些有趣的证据表明,除非你知道它是如何构造的,否则人们永远无法真正知道特定文本字符串中的熵量。将出现由“物理随机数发生器”(如电阻噪声网络)创建的 1000 字长的密码串具有与使用 Mersene Twister 生成的 1000 字长的 pass 字符串相同的熵,直到您意识到 Mersene twister 实际上在任何 624 个值的连续块中泄漏其所有种子信息。熵计算器只能对数据的实际随机性做出启发式假设。

当然,这就是我们拥有 Diceware 的原因。可以证明[低估]熵,因为随机性内置于过程中。要证明您正在查看的 pass-sentence 的安全性,请考虑使用 oracle 测试。我使用 Diceware 选择了一堆单词,然后我用它们构建了一个句子。然后,我为您提供了一个可以从中构造句子的神谕。可以保证,如果您向 oracle 提供从 Diceware 中选择的正确单词集,它将完全提供我使用的句子。对于所有其他单词集,它将使用它们生成任意句子。很容易看出我的密码的熵不可能低于我选择的 Diceware 单词中内置的熵。即使有了这个极其强大的神谕,将人类的造句过程化为虚无,来自 diceware 的随机性仍然存在。

现在有一些警告。如果您使用较少的 diceware 词,就像您后面的示例一样,您从 diceware 层获得的熵位就会减少。这意味着我上面提到的 oracle 对于破解基于句子的密码变得越来越有用。此外,您从 diceware 获得的某些词组可能特别难以变成句子。如果您曾经拒绝将一组 diceware 单词作为您的 pass-sentence 构建过程的一部分,那么您就是在质疑 diceware 所依赖的完美随机性。

现在,为什么要进行预言机攻击?预言机是测试密码理论的非常强大的工具。实际上,tracy is optically renowned worldwide实际上可能比 diceware words 中的 38.7 位要强得多tracy optic renown打破那个句子比单词需要更多的工作,尽管可能不是熵计算器启发式估计的全部 100.504 位。 那么强多少呢?我们不知道。这就是预言机攻击的重点。 在预言机攻击中,我们说“让我们假设这个难以计算的部分过程提供增加安全性。一个都没有。这个过程仍然安全吗?”如果在这种极端假设下它是安全的,那么它显然可以抵御现实生活中的攻击,因为攻击者不一定拥有如此强大的神谕。

假设您使用滚动的任何单词(而不是滚动直到找到可以造句的东西),并且按照滚动的顺序使用它们(而不是重新排列它们以形成更好的句子),这个方案不能降低熵。它会增加它;但到什么程度,很难量化。

假设最坏的情况,攻击者知道你正在使用这个方案。diceware 词的熵不变。如果你单独使用这些词,攻击者将不得不尝试每一个 diceware 词的元组。但是现在攻击者必须获取每个元组并将其插入到几种可能的句子形式之一中。

在语法上有意义的句子形式会根据 diceware 单词的词性而有所不同。有些人可能会使用多个词性;例如,“年度”可以是形容词或名词。您也可能故意使用不正确的语法。

因此,可能的密码数量增加了,熵也增加了。但是,由于熵增加的量很难量化,我会假设它为零,并使用尽可能多的 diceware 单词,就像没有这个方案一样。可量化的优点是扩展的短语更容易记住。

Dice ware 的安全性在于每个字的熵位数。我们将从假设您以特定顺序随机选择单词开始。

如果您在中间添加单词以将其变成一个句子,它仍然具有相同的熵,因此同样安全。(如果您在计算机上的表格中输入的密码中包含您添加的单词,这里可能会出现问题,因为它们可能会向破解一半密码的人提供提示'如果您的单词是“披萨吃”,您可以记住它是“pizza is what I eat”,但如果你输入整个内容并且有人发现“pizza is what I...”,那么不难猜到“eat”,但如果你只输入“pizzaeat”,那么你就不用了没有那个问题)

但是,如果您重新排列单词,则会降低其安全性,因为每个单词的选项数量较少(因为您人为地将每个单词的选项数量限制为适合以下单词的选项。例如,您消除诸如“pizza eat”之类的选项,因为它们没有意义,因此第一个单词的选项数量较少,因为“pizza”不再是其中之一)。

tl; dr :Q1:一点点,Q2:关于原始骰子的熵

更长的版本

纯粹添加额外的字符,即使它们不是随机的,也不应该抽象地损害您的密码强度。

但也有一些担忧;最重要的可能是:知道您的技术知识的攻击者可能会从您输入密码中推断出:

  • 你开始用的骰子的长度
  • 哪些是从中生成句子的添加词(因为它们通常很短)
  • 哪些单词更有可能出现在哪些位置(因为语法;并非骰子词典中的每个单词(当然取决于字典)都可以修改为适合句子结构的单词)

最后一点减少了您可以开始使用的可能组合,攻击者可以考虑这些组合。从那里开始,您的部分密码可能已经泄露;中间的单词遵循严格的语法规则,因此相对容易猜到。

这也是你第二个问题的答案。您为创建有效句子而添加的熵很低,因为大多数是语法,几乎没有发挥空间。所以到目前为止,计算器高估了你的构造。

尽管如此,如果我在这里没有忽略某些东西,那么您修改后的骰子结果的整体强度通常应该与原始结果相当。