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. 最重要的是什么?
不要重复使用。把泄露的密码拿到别处去试,比真去破解常见得多。