首页·密码强度

100 格密码 — 存储方式比长度更能改变答案

10 种字符集与 10 种长度交汇的每一格,都算出熵位数和破解所需时间。速度不是编的,用的是 hashcat 在单张 RTX 4090 上的公开实测值。

含符号的完整 ASCII 12 · 78.7 bit

  • NTLM(Windows)26136.9 年
  • MD545950.7 年
  • SHA-256343132.2 年
  • WPA2 Wi-Fi10^9.5 年
  • bcrypt10^10.6 年

一个字符能承载多少

一个字符能承载的强度是字符集大小的对数:只用数字是 3.3 位,加上小写字母是 4.7 位,含符号的 94 个 ASCII 字符是 6.6 位。总强度等于它乘以长度,所以加长通常胜过加花样——多一个 ASCII 字符能加 6.6 位,而从小写扩到完整 ASCII 每个字符只多 1.9 位。

网站是怎么存的

同一个密码,因存储方式不同,答案可以相差一百万倍以上。一张 RTX 4090 每秒能试 2885 亿次 NTLM、1641 亿次 MD5,而 bcrypt 只有 18.4 万次——bcrypt 是故意做慢的。所以含符号的 8 位 ASCII 密码在用 NTLM 的地方不到三小时就破,在用 bcrypt 的地方能撑五百多年。而用哪种,输密码的人无从选择。

一个韩文音节抵两个 ASCII 字符

标准韩文区共有 2,350 个音节。把一个音节算作一个字符,它就承载 11.2 位——是 ASCII 字符的 1.7 倍。所以八个韩文音节强过十三个 ASCII 字符,又不及十四个。问题在于很多系统不接受,没有输入法的设备根本打不出来。

这张表算什么、不算什么

这里的时间假设密码是**随机选取**并从头到尾穷举的。人编的密码撑不了这么久——词典词、键盘顺序、生日,以及结尾加的 ! 和 1,攻击方会先试。"P@ssw0rd!" 按九位 ASCII 算是 59 位,实际几秒就破。反过来,显卡多几张,时间就除以几。

最常见的事故不是被破解

更常见的是:从一个网站泄露的密码,被原样拿到另一个网站去试。哪怕要几年才能破的密码,只要两处共用,弱的那边被攻破的当天它也一起完了。比加长更优先的是**不重复使用**和开启两步验证。

按字符集和长度查找

字符集大小 · 长度

仅数字字符集大小 10

十六进制字符集大小 16

仅小写字母字符集大小 26

Base32字符集大小 32

小写字母+数字字符集大小 36

大小写字母字符集大小 52

字母+数字字符集大小 62

Base64字符集大小 64

含符号的完整 ASCII字符集大小 94

韩文音节字符集大小 2350

怎么看这一页

  • 每个字符的位数 = log2(字符集大小),再乘以长度就是总数。
  • 破解时间 = 组合数的一半 ÷ 每秒尝试次数。
  • 速度取自 hashcat 在单张 RTX 4090 上的公开实测值。
  • 这些数字假设密码是随机的。人编的会早得多被破。
  • NTLM(Windows)2.89e+11 /s
  • MD51.64e+11 /s
  • SHA-2562.20e+10 /s
  • WPA2 Wi-Fi2.53e+6 /s
  • bcrypt1.84e+5 /s

常见问题

Q. 密码多长才安全?

取决于怎么存。含符号的 12 位 ASCII 是 78.7 位熵:存成 NTLM 要 2.6 万年,存成 bcrypt 要 410 亿年。减到八位,NTLM 不到三小时就破。

Q. 加长度还是加符号?

通常是长度。多一个 ASCII 字符加 6.6 位,而从小写扩到完整 ASCII 每个字符只多 1.9 位。

Q. 用韩文会更强吗?

每个音节 11.2 位,是 ASCII 字符的 1.7 倍。但接受的系统很少,没有输入法也打不出来。

Q. 这些时间是真的吗?

它们假设密码随机且从头穷举。人编的密码在词典攻击下会早得多被破。

Q. 最重要的是什么?

不要重复使用。把泄露的密码拿到别处去试,比真去破解常见得多。