这个密码方案合法吗?

信息安全 密码 密码破解
2021-09-06 13:15:52

我收到了 IT 安全展览会的邀请 ( https://www.it-sa.de/en )。

他们还提供了一个密码“Kryptonizer”。这是一张挂在钥匙串上的小卡片,上面有以下内容(示例值,我的翻译):

黑客获取个人信息通常太容易了。原因:我们容易记住的密码并不神秘。它们通常是常见的名称或词语,例如“Snowden”或“Admin”。此卡试图通过使密码易于记忆来解决此问题。

Input   Start  ABC  DEF  GHI  JKL  MNO  PQRS  TUV  WXYZ
Output  4uR=?  x    1    F    3    Y    i     #    9

德语原版:

Hintergrund: Passwort-Hackern wird der Zugang zu persönlichen Daten im Internet häufig viel zu leicht gemacht。Der Grund liegt auf der Hand: Passwörter, die wir uns merken können, sind meistens nicht besonders kryptisch, sondern orientieren sich an gängigen Namen oder Wörtern wie "Snowden" 或 "Admin"。

对于每张卡片,输出中的所有内容都是随机的(66 个不同的字符可供选择)。现在我们必须选择一个“简单”的密码(他们建议至少 8 个字符):

Input:  HELLOWORLD
Output: 4uR=?F133Y9Yi31

他们还建议将此卡仅用于一个密码并在您丢失卡时更改它。

这个密码方案好吗?它来自一个有许多专家的大型安全展览会。

我的新手猜测是,由于只有 8 个不同的字符(+ 1 个起始序列),您的熵减少了,但只要您的卡保持未知,攻击者就无法利用这一事实。

4个回答

全面披露:我在一家分销此类卡的公司工作。然而,这个答案是我个人对他们的看法。


这些卡的想法是有些用户在记住密码或密码短语方面真的很糟糕。幼稚的方法是告诉用户“记住密码要好一点”,但经验表明,这样的建议对某些用户会适得其反。

他们的记忆似乎天生就只能记住简单的单词,这可能与他们的工作有关。所以在汽车厂工作的人可能会记得一个词,例如Engine

Engine,当然,是一个可怕的密码 - 无论是长度还是熵。所以“Kryptonizer”或类似名称的卡片会尝试添加这两者。

4uR=?在这种情况下,长度由前缀添加。它立即将密码长度增加 5 个字符,将 6 个字符的密码增加到 11 个字符的密码。不完美,但有进步。

通过用随机选择的字符替换每个字符来添加熵。不完全是 1:1 的替换,但足够接近。由于每张卡片都是独一无二的,因此无法就如何破坏每个字典短语建立预先制定的规则。

在这个例子中,Engine将变成4uR=?1YFFY1. 这是一个好的密码吗?可能不是很好,但肯定比Engine.

这个方案的问题

当然,这不是一个完美的系统。一个好的密码短语不能用一张小纸卡代替。由于三个输入字符映射到一个输出字符,因此生成的密码会失去熵而不是获得熵。净熵增益是攻击者不能再轻易地使用字典攻击。为了做到这一点,他们需要访问映射或执行详尽的搜索。如果攻击者知道使用了这样的卡,他们可以利用它来加速穷举搜索。

此外,用户应该随身携带他们的卡,许多人可能会将其留在办公桌上、键盘下方或类似的不良位置。如果他们丢失了卡,他们可能也会丢失密码。他们将需要一张新卡,并更改他们的密码,这不利于可用性。

概括

那么,这是一个好的系统吗?最终,我会说你必须根据它的设计目的来判断它。这是对特定用户组的帮助,否则他们会使用非常糟糕的密码。在我看来,帮助用户以微不足道的成本选择稍微好一点的密码是一件好事。当然,神奇地解决凭证存储和生成问题的并不是灵丹妙药。

如果可能,请始终使用密码管理器,让它生成长而高熵的密码,并以安全的方式为您存储它们。

如果这是不可能的(例如,对于操作系统登录),我建议使用Diceware或创建一个长而无意义的句子,例如TheGreenLightFromOurEyesShinesThroughTheMirrorOfTime.. 只要确保这样的句子不是取自书籍或电影即可。

它始终取决于您将其与什么进行比较!用户实际使用这张卡的现实替代方案是什么?

显然,4uR=?F133Y9Yi31是一个比HELLOWORLD. 如果您将此卡提供给不会选择好的密码或无论如何都不会使用密码管理器的非技术人员,那么这是一种改进。

另一方面,使用这个系统比随机选择一个您永远不会记住的 16 个字母的密码并将其存储在密码管理器中要糟糕得多。知道卡上有哪些字母的攻击者(例如,通过查看同一用户泄露的密码)可以轻松破解它 - 突然之间它并不比HELLOWORLD

那么这对于可能使用密码管理器的人来说是个好主意吗?不,绝对不是。给你爷爷?或许!不要让完美成为美好的敌人。

从您的说明中不是 100% 清楚,但我知道第二行是为每张卡片随机独立生成的。我会根据这个假设工作。我将进一步假设:

  • 攻击者试图猜测您的密码。
  • 攻击者知道您已经使用此类卡生成了密码。
  • 攻击者不知道您卡独有的随机内容。
  • 攻击者有办法有效地测试他们的猜测,例如,因为他们窃取了带有密码哈希的密码数据库条目。

攻击者要成功有多难?

首先,他们必须猜测 5 个随机起始符号。如果按照您所说的从一组 66 个字符中挑选它们,每个字符都有大约 log 2 (66) ≈ 6 位熵,总共 6 × 5 = 30 位 - 与(在) 著名Tr0ub4dor&3

第二:作为使用卡的过程的一部分,您选择一个人工密码。但是该卡片将字母表分成组,这样每组中的字母都被视为彼此相同的选择。这意味着分组后,人类密码中的每个字母贡献的熵不能超过 log 2 (8) = 3 位,但实际上它会更少:

  • 一些群体的信件比其他群体的更频繁;
  • 有些词比其他词更频繁;
  • 一些人类密码(例如PASSWORD)比其他密码更频繁,令人痛苦。

第三:这些组中的每一个都从一组 66 个字符中随机选择一个字符。这些选择中的每一个都大约是 6 位熵,而八组听起来像 48 位......但攻击者不太可能必须这样做破解您卡片中的整个表格,因为人类密码很可能只会“触发”八个组中的一个子集,他们不必猜测分配给“休眠”组的符号。如果您从一组 8 个项目中随机选择 8 个替换项目,您预计会绘制大约 5 个不同的项目(source),这意味着 8 个字符的人类密码最有可能触发的表熵量是 30 位. 但是有些人的密码会触发更少的组,有些会触发更多。

分析英文文本的统计模式与卡片中的分组之间的相互作用留给读者作为一项乏味的练习。我想我们可以初步得出结论,这种卡片方法并没有明显被破坏——它会产生至少 36 位熵的密码(30 位用于起始字符,6 位用于触发一组),而且你很有可能即使不计算人类密码的任何熵,也能看到 54 位(30 位用于起始字符,24 位用于触发四组)。

如果这种方法不糟糕,我认为我们不应该感到惊讶。毕竟,我上面的解释表明每张卡片包含 78 位熵:30 来自最初的 5 位,48 来自随机分配字符到组。78 位大约是 12 个字符的随机可打印 ASCII 字符串 (12 × log 2 (95))的熵将这么多的熵打包到一张小卡片中是个好主意。该方案的弱点是它不能可靠地利用所有这些(“休眠”组问题)。


我们可以考虑的另一种情况是这样的。假设攻击者设法窃取了您生成的密码(例如,从将密码存储为明文的网站)。他们可以从那开始倒推以猜测您的人工密码或卡中的随机值吗?好吧,在那种情况下,最初的五个随机字符只是无可救药地被破坏了,破解人类密码看起来与破解单字母替换密码大致相似,所以看起来不太好。但我会注意这一点:

他们还建议将此卡仅用于一个密码并在您丢失卡时更改它。

...如果您遵循他们的建议,一张卡内容的泄露只能泄露作为该卡输入的一个人工密码。我们可能应该补充一点,您不应该在多张卡上重复使用相同的人工密码。

对我来说看起来很不切实际。缺点(计算繁琐,不需要丢失卡,需要记住密码)大于优点(强密码)。

我找不到这个方案的用例:

  • 对于不精通的用户(您的祖父),将密码写在保存在上锁抽屉中的笔记本中更为实用。

  • 对于精明的用户(本博客的读者),最好使用使用主密码加密的密码管理器应用程序。