大多数使用密码短语的人使用错误的密码短语。
Diceware 更好的评论可能来自这样一个事实,即当人们使用密码短语时,他们通常会使用一个众所周知的或其他逻辑结构的句子并使用它。“玛丽有一只小羊羔”是一个可怕的密码短语,因为它是计算机可以在短时间内运行的数十亿个众所周知的短语之一。我知道这很好用,因为我试过了。
Diceware 只是随机的单词。假设您使用良好的随机性来源,它与任何其他随机生成的单词集一样好:对于 Diceware,您应该使用 dice,这是一个相当好的来源。数字密码生成器通常也很好,尽管自制软件的实现可能会错误地使用不安全的随机生成器。
我们知道任何随机密码都是好的,因为它是基本的数学。密码短语有两个属性:
密码的“随机性”很容易计算:dictionary_size ^ words_in_phrase
,其中^
是幂。3 个单词的密码短语和 8000 个单词的字典是8000^3=
5120 亿个可能的短语。因此,攻击者在猜测短语时,必须尝试 2560 亿个短语(平均)才能猜对。与类似强度的密码进行比较:使用 7 个字符的随机密码,由 az 和 AZ 组成,“字典大小”为 52 (26 + 26),“单词数”为 7,52^7=
大约有 10280 亿个可能密码。众所周知,7 个字符是非常不安全的,即使是随机生成的。
对于随机性,在大约 128 位熵之前,它越多越好。比这多一点有助于缓冲算法的加密弱化,但实际上,无论如何你都不想记住 128 位的熵。假设我们想要获得 80 位的熵,这对于几乎任何事情都是一个很好的折衷方案。
要将“可能值的数量”转换为“熵的位数”,我们需要使用以下公式:log(n)/log(2)
,其中n
是可能值的数量。因此,如果您有 26 个可能的值(1 个字母),那将是log(26)/log(2)=
大约 4.7 位的熵。这是有道理的,因为您需要 5 位来存储一个字母:数字 26 是11010
二进制的。
8000 个单词的字典需要大约 7 个单词才能超过所需的 80 位:
log(8000^7)/log(2)=
约 90.8 位熵。六个词是:
log(8000^6)/log(2)=
~77.8 位熵。
与 7776 个单词的相对较小的 Diceware 词典相比,大词典有很大帮助。牛津英语词典有600k 单词。有了这么多的单词,一个由四个随机选择的单词组成的短语几乎就足够了:
log(600 000^4)/log(2)=
大约 76.8 位的熵。
但是在 60 万字中,这包括非常晦涩和冗长的单词。一本包含您可以合理记住的单词的字典可能有十万左右。从 10 万个单词的字典中随机选择时,我们的短语中需要 5 个单词,而不是 Diceware 需要的 7 个单词:
log(100 000^5)/log(2)=
约 83.0 位熵。
在您的短语中添加一个单词比在您的字典中添加一万个单词更有帮助,因此长度胜过复杂性,但一个好的解决方案可以平衡两者。Diceware 对我来说似乎有点小,但也许他们用不同的尺寸进行了测试,发现这是一个很好的平衡。我不是语言学家:)。
只是为了比较,密码(由 az、AZ 和 0-9 组成)需要 14 个字符才能达到相同的强度:log(62^14)/log(2)=
约 83.4 位熵。