这更像是一个哲学问题。
假设您正试图为特定的在线服务选择一个好的密码,比如您银行的电子银行服务。现在银行对它允许的密码有一些限制:你只能使用(小写)字母和(十进制)数字,密码最多可以有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)