密码生成器

在你的设备本地生成密码学安全的随机密码与口令短语。

您的密码

非常弱
 

0 位 的熵 —— 以每秒 1000 亿次尝试计算,大约需要 瞬间 才能猜出。

20
包含

多少个字符才够?

有用的度量是——这个密码是从多少个等概率的可能性里抽出来的,用 2 的幂来表示。六十位意味着 2⁶⁰ 个候选。它比「强」这个字更好用,因为你可以拿它做算术:从本工具那套 87 个符号的字母表里再加一个字符,你就多了大约 6.4 位,也就是把工作量乘上了将近九十倍。

这换来什么,完全取决于那个网站是怎么存你的密码的,而这一点你无从知晓。下面这张表假设的是大多数泄露事件之后被报道出来的那种悲观情形:哈希跑得很快,而攻击者租了 GPU。

随机字符数在每秒 10¹¹ 次猜测下所需时间
852 位不到五小时
1064 位大约四年
1277 位大约三万年
16103 位1.7 万亿年
20129 位比宇宙存在至今还长,长 10¹⁰ 倍

那张表里有意思的部分,是它从哪里开始不再要紧。过了大约十六个随机字符,暴力破解这个问题就被永久解决了,而那个账号剩下的每一项风险都完全是别的东西——钓鱼、键盘记录器、服务商那边的泄露、在别处的重复使用。选二十四个字符而不是二十个,并不是那个保护你的决定。

复杂度规则让密码变得更糟了

有二十年,标准建议是「八个字符,带一个大写、一个数字和一个符号」。那条规则大批量地产出了 Password1!,因为它精确描述了一个人在被要求满足它时会做什么。规则满足了,而这个密码在每一本破解词典里。

那条规则真正想要摸索的是随机性,而随机性恰恰是人提供不了的东西。你问一个人要一个随机字符,得到的分布跟均匀分布差得远;你问他数字放哪儿,它就在末尾。这就是为什么上面的生成器会从你选定的字母表里独立地抽取每一个字符,并且在需要时重抽整个密码,而不是往一个固定的位置塞一个符号——后一种做法能满足策略,却在无声无息中让每一个必需字符的位置都变得可预测。

该包含哪些字符

四类全打开会得到一个 87 字符的字母表,每个字符值 6.44 位。去掉符号剩下 62 个字符、5.95 位——每个字符损失约半位,而多加两个字符就绰绰有余地补了回来。所以如果某个网站不接受符号,或者你要在游戏主机上敲这个密码,那就去掉符号、改为增加长度。那是一笔真正划算的交易,不是妥协。

避开形近字符这个选项会移除 0 O 1 l I | 和引号。它只花掉零点几位,却能防住那个具体而常见的失败:从屏幕上看错密码,然后在第三次尝试时把自己锁在门外。凡是你将来要手敲的密码,都值得用它;凡是住在密码管理器里的,用它毫无意义。

什么时候口令短语才是对的答案

你真正必须记住的密码大概只有三个:解锁密码管理器的那个、解锁笔记本电脑的那个,可能还有邮箱的。其余的都可以是二十个随机字符,因为你永远不会去敲它们。

对那三个来说,口令短语胜出。picture-shallow-ranger-anvil-cobalt-drift 是六个词、大约 66 位,而且重复几遍之后你就能把它装进脑子里,K7#mQ2vX!pL9 则永远做不到。麻烦在于,它的强度来自词的数量,而人们始终选得太少。四个词是 44 位——对一个密码管理器来说不够。六个是 66 位。七个是 77 位。

只有当这些词是由机器挑的,它才成立。你自己编出来的短语,是从「一个人想得到的那一小撮短语」里抽的,而不是从那份词表里抽的;而歌词和电影台词作为完整字符串,就躺在破解词典里。

真正会发生的那种失陷

几乎没有人是被暴力破解的。真正发生的是这样:你在 2015 年注册过的某个站点被攻破,密码文件泄露出来,几天之内自动化工具就拿着那对邮箱和密码,去银行、邮箱服务商和零售商那里挨个试。这叫撞库,而它才是账号丢失的主要方式。它根本不在乎你的密码有多强。它只在乎你有没有用过第二次。

所以本页上价值最高的那一件事,不是那个长度滑块。而是为每一个站点生成一个不同的密码——这件事只有靠密码管理器才切实可行,而它能把一次泄露从十一个问题变成一个问题。

双因素认证是另外一半。一个已经泄露的密码,对一个拿不出你第二重凭证的人来说仍然没用;而基于应用的验证码或硬件密钥,都胜过短信——短信很容易被人把你的号码抢过去。

你能信任这个页面吗?

对任何在线生成器,这都是个公道的问题,而答案应当是可核验的,而不是被声称的。关于这一个,有三件事为真:

  • 密码是由 crypto.getRandomValues() 生成的,也就是浏览器的加密级随机源——绝不用 Math.random(),那是一个快速的统计型伪随机数生成器,不具备任何安全属性,而且在某些引擎里内部状态可以被还原出来。
  • 它是在页面加载之后、在你的浏览器里生成的。关于它的任何东西都不在我们的服务器上计算,所以就算我们想记,也没有什么可记的。
  • 它不会被写进 localStorage,不会被放进 URL,也不会被塞进任何分析事件里。关掉标签页,它就没了。

这三点你都可以自己验证:打开浏览器的开发者工具,切到网络面板,然后想点多少次再生成一个就点多少次。什么都没有被发出去。这个检查对任何生成器都管用,而对任何你没读过源码的生成器,都值得做一遍。

如果你压根不愿意伸出这份信任,那也很合理——你密码管理器里那个生成器会产出同样的东西,而且少牵扯一方。用这一个的理由是方便,不是它更优越。

相关

已经有一个密码,想知道它到底哪里不对?强度检测器会像一件破解工具那样把它拆开,并告诉你它认出了哪些部分。至于你的浏览器和连接泄露了什么——那是与账号安全不同的另一个问题,而人们常把两者混为一谈——隐私检查会一次把它覆盖掉。

关于密码,值得一问的问题

在网站上生成密码安全吗?

这完全取决于生成这一步发生在哪里。本页调用的是你浏览器里的 crypto.getRandomValues(),结果绝不外传——你可以打开浏览器的网络面板,一边点「生成」一边确认没有任何东西离开。而在服务器上生成密码的工具,按定义,在你还没用上这个密码之前就已经把它传输过一次了,而它之后的去向你无从查证。如果你对某个生成器没把握,密码管理器自带的那个是最稳妥的默认选择。

我的密码该多长?

凡是要紧的账户,16 个随机字符是合理的下限,20 个更好。理由是算术而不是迷信:在混合字母表下取 16 个字符,你已经越过 100 位熵,暴力破解便超出了现存任何硬件的能力范围。而在大约 12 个字符以下,无论你再加多少符号,长度都是那个卡住你的因素。

口令短语和随机密码一样强吗?

可以一样强,但你需要的词数比大多数人以为的更多。本工具 2,099 个词的词表中,每个词大约贡献 11 位熵,所以五个词的口令短语约为 55 位——相当于一个九字符的随机密码,而不是二十字符的那种。六个或七个词才真正进入强壮的区间。它的好处是你真的能记住,而这对于那几个必须手敲、不能粘贴的密码很关键。

把首字母大写、或在末尾加个数字有用吗?

作用微乎其微,远小于所费的力气。把口令短语里每个词的首字母大写,什么都不会增加,因为那是一条确定的规则,攻击者会对每一个候选项照做一遍。在末尾追加一位数字大约增加 3.3 位熵——是真的,但和多加一个词能给你的 11 位相比小得可怜。本工具会如实标注这两项,而不是让一个复选框暗示出它并不具备的好处。

我记不住的密码该怎么办?

放进密码管理器,然后再也不用见到它。生成随机密码的全部意义就在这里:你本来就不该去背九十个密码。你只需要为管理器本身记住一句强壮的口令短语,其余的交给它保管。任何一款成熟的管理器都可以,而浏览器自带的那个,也远远好过在多个网站之间重复使用同一个密码。

我该定期更换密码吗?

不该——强制轮换这条建议已经被正式撤回了。NIST 把它从指南里删掉,是因为它在现实中的效果:一个被要求每九十天换一次密码的人,会产出 Summer2024!,接着是 Summer2025!,而这比他本来会一直沿用的那个强密码更弱。该换密码的时候是有理由的时候:收到泄露通知、用过共用设备,或者你怀疑出了什么问题。

Passwords and encrypted connections solve unrelated problems — a strong password protects an account, while a VPN protects traffic in transit on a network you do not control. Neither substitutes for the other. What a VPN actually protects

最后审校于 。发现有内容过时了? 告诉我们.