密码熵的计算公式:
密码熵越高,意味着密码的可能组合数量越多,攻击者通过暴力破解等方式猜出密码的难度就越大。
一个例子,让 AI 算一下 1234567890 的密码熵:
结果是 33.22 bits,试试破解难度:
虽然一共有 11,111,111,110 种排列组合,但使用大规模破解阵列(每秒进行一百万亿次猜测)的话,只需要 0.000111 秒。
把末尾的 0 换成小写 a 呢?这时的密码熵是 34.60 bits(以下所有密码熵都是通过 AI 计算的,我自己不懂密码学),提高了一点点,破解需要 37.61 分钟:
继续把末尾的 9 换成大写 A,63.04 bits,破解需要两个半小时:
把 8 替换成特殊符号 #,63.29 bits,密码熵提升了一点点,但破解需要 1 周:
现在,通过补零的方式,把 10 位密码扩展到 11 位,密码熵现在是 73.60 bits,破解需要 1.83 年:
再补一位呢?扩展到 12 位!这下密码熵更大了,83.91 bits,破解需要 174 年:
再再补个零,13 位!这个更好,密码熵是 94.22 bits,破解需要 16500 年!
通常情况下,我们可以把 100 做为密码熵的目标,这也是为什么大多数网站和软件都有如下要求:
这里要注意的是,虽然类似 “!a@B#c$D” 这样的密码看起来很复杂,可读性也很差,但它的密码熵其实只有 43.54 bits,暴力破解仅需 28 分钟。
一方面是长度不够(密码长度是最重要的),另一方面是没有数字,导致总字符范围偏小。
至此,我们认定一个 “高强度密码” 至少应该包含以下数学特质:
所以像
XiaoMing!20001201
这种 “姓名” + “特殊符号” + “生日” 的密码其实很 “高强度”,因为暴力破解的话,大约需要 1.3 乘以 10 的 12 次方年,已经是天文数字了。
但由于人名和生日不符合 “避免可预测性” 这个条件,所以更好的密码可能是 “换个顺序”:
2000XiaoMing1201!
事实上,密码泄露的主要原因不是密码强度不够,而是你在所有地方使用同一个 “高强度” 的密码。
所以,你可能还需要在密码前面加个网站或软件的缩写,比如在知乎可以用:
zh2000XiaoMing1201!
那种 “一段话”,“一句诗” 的密码也不错,只是考虑到每个网站、软件都要不一样的话,我有点儿担心对不上......