如何确定密码的熵

如何确定密码的熵

如何判断密码的熵是否足够高,能够在现实时间范围内防止暴力破解?例如,如果我有以下密码,如何确定它是否足够强,能够防止暴力破解?

"?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熵(它要么是第一个密码,要么是第二个密码)。

这时候你读到XKCD漫画戴夫链接


但我可以对您的密码做出一些假设:

"?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 bitsln(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 位。

我可以补充一点如果我选择:

  • 单词之间的空格
  • 单词之间无空格

相关内容