这可能会在crypto.stackexchange.com或math.stackexchange.com中得到更好的响应,但我想我可以给你它的要点。
如果我们离开文字,看看一些数字,它可能有助于说明。
以锁的四位数代码为例。
有 10 个可能的数字 (0-9) 和四个可以输入的空格,因此有 10 * 10 * 10 * 10 = 10^4 = 10,000 种可能的组合。
如果你说不能有重复的数字,那么在第一个空格上你将有 10 个可能的数字,在第二个 9 上,在第三个 8 上,最后一个空格上有 7 个可能的数字。
这留下了 10 * 9 * 8 * 7 = 5,040 种可能的组合,或者大约一半。
如果我们将此应用于您的密码生成器,我们会将您正在使用的单词总数作为可能性(大多数 Unix 系统附带大约 200,000 的英语词典,因此我们现在可以使用这个数字),以及密码中的单词(使用 Diceware 建议的最少 6 个单词)。
这意味着在没有任何重复限制的情况下,恰好有 200,000^6 = 64 非十亿可能的密码组合。
如果您要禁止任何重复的单词,则将有 200,000 * 199,999 * 199,998 * 199,997 * 199,996 * 199,995 ≈ 63.995 千万个可能的密码组合。
这是大约0.00008% 的差异。
如您所见,字典至少有 200,000 个唯一词和六个词的键空间,无密码限制和限制重复词之间的差异可以忽略不计。
然后,这种差异对密码的抗破解性影响同样可以忽略不计。
编辑
LieRyan 指出 Diceware 使用了一个包含 7776 个常见且易于键入的单词的单词表。如果我们想看到这种大小的列表的差异,它看起来像:无限制
:7776^6 ≈ 2.21 六亿个可能的组合。
无重复:7776 * 7775 * 7774 * 7773 * 7772 * 7771 ≈ 2.2064 六亿个可能的组合。
差异:~0.19%
让我们看看这对试图破解您密码的人意味着什么。
假设你的对手每秒能够进行一万亿次猜测。——爱德华·斯诺登,2014
如果我们采用这个估计(强调),我们会将可能组合的总数除以猜测/秒的数量,以获得对单词列表的每个组合进行暴力破解所需的总秒数。
也就是说,2.2 六亿次组合 / 1 万亿次猜测/秒 = 22 亿秒 = 69.72 年(相比之下,无密码限制为 70.03 年)
这是资金充足且装备精良的密码破解者(可以访问您的单词表副本)暴力破解使用此方法创建的密码所需的平均时间。