如何判断密码的熵是否足够高,能够在现实时间范围内防止暴力破解?例如,如果我有以下密码,如何确定它是否足够强,能够防止暴力破解?
"?e&ye&ga!ruaa!na!e%ta!e%rc#Iod$woH"2245
答案1
有可以为您提供密码输入的熵值估计值的网站对于上面的例子,它建议~247 位。
你可以粗略地猜测一下破解需要多长时间我的密码有多安全。
这意味着计算机需要花费 1510 万亿年才能破解示例中的密码。
关于密码的更详细分析请参见密码计。
答案2
您的问题是“它是否足够强大,可以防止暴力破解?”
真正的答案是“不”
有用的答案——“可能,至少在可预见的未来”
你应该问的是:
我需要保护这种类型的数据,它对我的公司有要求 x 和 y,敏感度 z。这是合适的熵级别吗?
好吧,公平地说,正如@Gareth指出的那样,210 位可能在很长一段时间内都适用,但这可能有点过头了,而且不要过度如果不需要的话,可以进行加密。
答案3
来自Dropbox 技术博客,这是最好的文章我最近看过的,甚至展示了其中讨论的理论的实现。如果这有任何帮助,请随时告诉我。
关于安全,还有一件事要记住,那就是XKCD漫画。
答案4
这取决于您的密码有多随机。
如果您从以下列表中选择一个密码:
"?e&ye&ga!ruaa!na!e%ta!e%rc#Iod$woH"2245
aSBsb3ZlIHlvdSBLaXJzdGVuIFNoZWxieSBHdXllcg==
那么你就有1 bit
熵(它要么是第一个密码,要么是第二个密码)。
但我可以对您的密码做出一些假设:
"?e&ye&ga!ruaa!na!e%ta!e%rc#Iod$woH"2245 (40 characters)
看起来您使用的字母表是:
- 大写
A-Z
(26 个字形) - 小写
a-z
(26 个字形) - 拉丁数字
0-9
(10 个字形) - 标点符号有限(假设 101 键键盘上有 30 个符号)
总计有 92 个字符的字母表。
更远假设所有密码长度均为 40 个字符,因此:
92^40 = 3.56+E78
或者3.5 千万亿可能的密码。
要将其转换为bits
您要做的工作:
ln(92^40) / ln(2) = 260.94 bits
这是假设攻击者必须强行破解密码。
如果我们只想要信息,那么位数实际上要少得多,因为你实际上使用了更短的字母表:
original: "?e&ye&ga!ruaa!na!e%ta!e%rc#Iod$woH"2245
rearranged: aaaaacdeeeegnoorrtuwyHI2245""?&&!!!!%%#$
alphabet: acdegnortuwyHI245"?&!%#$ (24 characters)
执行相同的计算:
ln(24^40) / ln(2) = 183.4 bits
实际上那里的信息较少,因为我可以看到每次输入时e
它后面都会跟着一个符号:
e&
e&
e%
e%
因此我们e&
用符号替换h
,并e%
用符号替换i
:
original: "?hyhga!ruaa!na!ita!irc#Iod$woH"2245 (36 characters)
rearranged: aaaaacdghhiinoorrtuwyIH2245""?!!!!#$
alphabet: acdghinortuwyIH2245"?!#$ (24 characters)
这将信息内容简化为:
ln(24^36) / ln(2) = 165 bits
我注意到每个!
前面都有一个字母a
,后面跟着一个字母:
a!r
a!n
a!e
替换a!
为k
:
original: "?hyhgkruaknkitkirc#Iod$woH"2245 (32 characters)
alphabet: acdghiknortuwyIH2245"?#$ (24 characters)
将位减少到ln(24^32)/ln(2) = 146.7
。
这只会减少编码所需的位数,因为我们计算出信息内容的消息。
这些技巧对攻击者没有帮助,因为攻击者通常不能假设所有密码都具有这些已知序列。
但是有些启发式方法可以编入密钥搜索算法中。尝试随机输入的人经常会输入相同的内容。例如,我在随机输入时经常遇到冲突:
adfadsfadsf
以及其他 18,400 个谷歌搜索结果。
我最安全的密码是 57 个字符,其中 27 个字母(a-z
,)位于
266 bits
(ln(27^56) / ln(2) = 266.27
)。
另一方面十一2^11
单词。英语中有大约 100 个常用单词。这样得出:
(2^11)^11 = 2.66E36 passphrases => ln((2^11)^11)/ln(2) = 121 bits
远远少于随机 57 个字符的密码所假设的 266 位。
我可以补充一点如果我选择:
- 单词之间的空格
- 单词之间无空格