我应该如何让 diceware 密码更容易记住?

信息安全 密码 密码
2021-09-08 12:19:18

我发现真正随机的 diceware 密码短语通常包含一个容易拼错的单词或具有不合逻辑的顺序。我认为有三种方法可以让 diceware 密码更令人难忘:

  1. 扔掉密码,直到你能记住一个
  2. 扔掉你难以记住的个别单词
  3. 重新排列单词,以便更容易记住

当然,问题在于所有三个选项都会减少熵。可以通过手动编辑 diceware 列表来避免第二个问题,但这对大多数人来说工作量太大。我仍然相信生成的密码短语会比许多其他选项更好,并且对大多数目的有用。但是,我很感兴趣这些方法的每种方法所产生的熵位。

真正随机的 4 字密码短语的熵是 log2(7776*7776*7776*7776) = 51.7 位。选项 3 的最坏情况是只有一种逻辑方式可以重新排列单词。在这种情况下,我相信熵的位数是 log2( (7776*7776*7776*7776) / (4*3*2*1) ) = 47.1。我不确定 1 和 2 使用什么公式。例如,如果我将一个单词抛出三遍,那么熵的位数是多少。我认为1更加模棱两可。在纸面上,它不应该减少熵,但显然它确实可以。

2个回答
  1. 扔掉密码,直到你能记住一个-

    如果您查看 16 个密码短语,并保留您最喜欢的那个,那么您最多将熵减少了 4 位(log 2 16 = 4)。直觉类似于您为重新排列给出的直觉:最坏的情况是逻辑上只有 16 个密码短语有人可能选择。

    一般来说,如果您查看N个密码短语并保留您最喜欢的那个,那么您的熵最多减少了 log 2 N位。如果您丢弃N -1 个密码短语并保留第N个密码,那么这基本上是相同的情况,因此您可以估计您可能已经将熵减少了最坏的 log 2 N位。

  2. 扔掉你很难记住的个别单词——

    让我建议两种不同的方法来计算你损失了多少熵:

    • 你可以把这想象成拿你的 7776 词词典,扔掉一堆你很难记住的词。如果你扔掉 1000 个单词,你已经从 7776 个单词的字典减少到了 6776 个单词的字典,所以你已经将每个单词的熵从大约 12.9 位减少到了 12.7 位,或者你的密码的总熵从大约51.7 位到大约 50.9 位。减少幅度不大。

      不幸的是,这种计算方法在实践中使用起来有点棘手。要以这种方式估计熵,您必须仔细阅读整个单词列表并计算有多少单词太难记住,或者扫描单词列表的随机样本并使用它来估计哪个部分太难记记住。(此外,这个计算假设一个词是否太难记住与密码的其余部分无关。)它不会选择一个随机密码是有效的,因为其中一个单词太难而拒绝它,选择第二个密码,保留那个密码,然后推断你已经将字典从 7776 个单词减少到 7775 个单词,所以你的熵从 51.6993到 51.6985 位。这不是有效的推理,因为它不计算字典中可能还有多少其他单词,如果它们被选中,你也会拒绝。

    • 您可以将此视为您可能会丢弃密码的另一个原因。然后我们回到上面已经分析过的情况(“扔掉密码,直到你能记住一个”)。

  3. 重新排列单词,以便更容易记住-

    您已经在问题中涵盖了这一点,是的,您的推理是准确的。您最多将熵减少了 log 2 4!= 4.6 位熵。

熵是关于概率的,所以到处都有平均值。

对于方法 1,如果您平均丢弃n-1 个密码并保留第n个密码,则熵除以n(以位为单位,您使用log 2 n位)。这假设攻击者可以准确地模拟什么是“难以记住的密码”,即预测您是否会丢弃或保留密码。在实践中,攻击者不会 100% 准确地预测你的反应,但很难量化他在这方面会取得多大的成功,因此简单地假设攻击者可以做到这一点似乎更安全。

对于方法 2,攻击者将简单地使用一个简化列表,从该列表中删除您也删除的所有单词。例如,如果列表有x 个单词,您删除了其中的y个单词,并且您的密码包含m个单词,那么熵会减少一个因子(x/(xy)) m(这只是使用较短的列表,在事实)。

对于方法 3,重新排列单词将使熵最多减少m!,如果您的密码有m个单词(这是m的阶乘,即m=3为6, m =424依此类推)。这个想法是每个密码都是一组m! 的一部分!以其他顺序使用相同单词的密码短语,并且您始终坚持您喜欢的一种顺序,攻击者也可以对其进行建模。同样,这取决于攻击者在猜测您的大脑如何运作方面的能力;由于我们无法给出一个好的衡量标准,我们只是假设攻击者“非常好”。