哲学:限制密码空间可提高安全性

信息安全 密码
2021-08-24 15:44:48

这更像是一个哲学问题。

假设您正试图为特定的在线服务选择一个好的密码,比如您银行的电子银行服务。现在银行对它允许的密码有一些限制:你只能使用(小写)字母和(十进制)数字,密码最多可以有6 个字符那么选择这样一个密码的“好”方法是什么?

可以执行以下操作(将此方案称为 1):以均匀概率从集合 [a-z0-9] 中随机选择 6 个字符。这种方案的缺点是它可能会产生“弱”密码,例如仅包含字母或仅包含数字的密码(发生这种情况的可能性为 14.2% [1])。

所以这里有另一个想法(称之为方案 2):从集合 [a-z0-9] 中随机(且均匀地)选择一个字母、一个数字和 4 个字符。然后使用这 6 个字符的随机排列作为密码。这保证了密码将包含两个类别的字符(字母和数字)。

所以问题是,这两种方案中的哪一种产生“更好”的密码?

一方面,第二种方案产生的密码可能对简单的暴力攻击更具弹性。另一方面,第一种方案比第二种方案严格允许更多的组合:2^31.0 [2] vs 2^30.8 [3];事实上,方案 1 的密码集是方案 2 的超集。

注意:我是从生成密码的一方而不是设置密码策略的一方的角度来看待这个问题的。

[1] (26^6+10^6)/36^6 = 0.142

[2] log2(26^6) = 31.0

[3] log2(36^6-26^6-10^6) = 30.8 即 6 个字符的所有组合,不包括只有字母的组合 (26^6) 和只有数字的组合 (另外 10^6)

3个回答

tldr; 限制密码空间无助于抵抗暴力攻击,但可以抵抗智能攻击,但还有更好的方法。

首先,您问的是正确的问题,但在这里使用了错误的术语:

...第二种方案产生的密码可能对简单的暴力攻击更具弹性。

(我认为您的意思是智能攻击。)

蛮力攻击是在不增加情报的情况下尝试所有可能的组合的攻击您的示例中的蛮力将类似于:

a, b, c, ... y, z, 0, 1 ... 9,  
aa, ab, ac, ... ay, az, a0, a1 ... a9, ba, bb, bc ... 99,  
aaa ... 999, 
aaaa ... 9999,
aaaaa ... 99999,
aaaaaa ... 999999

除此之外的任何东西都将被视为情报策略。例如,在您尝试蛮力之前,您可以通过以下策略节省一些时间:

  1. 只尝试数字。
  2. 尝试在字典中找到的单词。
  3. 尝试前 X 最流行的密码。
  4. 尝试用户名或用户姓名首字母、当年或去年等的组合。
  5. 试试蛮力。

作为密码的创建者,您的目标是确保前 4 个选项始终无法发现您的密码。换句话说,您需要确保发现密码的唯一方法是通过暴力破解,并且还要确保如果使用暴力破解,需要很长时间才能找到您的密码。考虑到允许使用的密码类型的限制,您是否可以这样做取决于您。

至于您的特定问题,我会更像一个随机密码生成器来处理它 - 它为您生成一个,您查看它,如果您认为可以用蛮力以外的方法猜测它,您只需生成另一个随机密码直到你满意为止。(这将是带有扭曲的方案 1。)如果您真的想量化这一点,您可以构建并准备好您的智能策略(除了蛮力之外的所有策略)。然后,您可以根据您随机生成的密码对其进行测试,如果找到,您将生成另一个密码,直到所有智能策略都无法发现您的密码。然后,您将留下一个只能通过蛮力发现的密码。使用这种方法,您可以获得比您描述的方式限制密码空间更好的熵。

注意:使用您提供的密码规则,我对方案 1 的扭曲可能最终看起来有点像方案 2,但是,随着允许的字符数和密码长度的增加,方案 1 的扭曲应该提供更多的熵。

我认为您已经很好地总结了问题的复杂性,并说明了为什么两者都有优点和缺点。正确答案当然是方案 3:使用更长的密码,或者方案 4:切换到允许超过 6 个字符密码的银行

您实际上提出了一个古老的问题,如果您浏览标签,您可以在本网站的问题周围找到它 :有一些(小)概率,一个完全随机的密码生成器可能会想出“密码”。通过对随机性进行限制,您正在以牺牲熵为代价来增加最坏情况密码的强度。如果您可以为不会显着降低熵的限制提出很好的论据,那么我认为这是可以接受的。虽然一般的答案总是:如果您担心密码空间的熵,请使用更多字符。

回答标题问题:

不,在任何情况下,但限制密码空间确实会增加安全性。它的一种情况是当您的限制是排除已知的弱密码时,例如黑名单。顺便说一下,这是(2018 年)推荐的做法。忘记所有复杂的废话,那是等同于炼金术的 IT 证券。

回答全文问题:

由于常见的人类谬误,您的方案二实际上较弱。您可能认为理论上可以吐出“aaaaaa”的随机生成器比不能吐出的随机生成器弱。然而,你错了。无法生成这种“弱”输出的生成器实际上减少了搜索空间,任何知道该方案背后算法的攻击者都比完全随机方案具有很大优势。

请注意,“aaaaaa”可能是第一次尝试愚蠢的蛮力攻击,但这种可能性非常小,很容易被搜索空间大得多的事实所抵消。事实上,在使生成器无法创建此输出的方案中,知道该方案的攻击者也不会对其进行测试。

“aaaaaa”实际上不是一个错误的密码,并且在任何实际的攻击场景中,攻击者都可能在“passwd”、“123456”甚至所有可能的排列之后很久很长时间地进行测试。一个实际的现实世界的攻击者在使用实际的蛮力枚举之前更有可能运行或至少从字典攻击开始。