如何创建强密码
密码的强度来自足够长和不可预测。每多一个字符,攻击者需要尝试的组合数就成倍增加,因此长度是你手中最有效的手段。日常账户至少使用 12 个字符,电子邮件、网银和密码管理器则使用 16 个或更多。
混合使用大写字母、小写字母、数字和符号可以扩大可用字符集,提升每一位的熵。随机性同样重要:人选的密码往往有规律——姓名加年份、用 @ 代替 a,或者像 qwerty 这样的键盘顺序。基于 Web Crypto API 的生成器没有这种偏差。
- 避免字典单词、姓名、生日和连续字符。
- 不要依赖 P@ssw0rd 这类可预测的替换。
- 绝不在多个网站重复使用同一个密码。
密码熵与破解时间
熵以位为单位,衡量密码有多难被猜到。它大致等于密码长度乘以字符集大小的以 2 为底的对数。每增加一位,用暴力破解所需的工作量就翻倍。
- 低于 40 位——弱;可能在几秒到几小时内被攻破。
- 约 60 位——对价值较低的账户尚可接受。
- 75 到 100 位——强;以当前硬件进行暴力破解不现实。
- 超过 100 位——优秀;适合主密码和加密密钥。
检测器显示的破解时间假设每秒约 100 亿次猜测,这大致是现代 GPU 集群针对快速哈希的能力。实际数值会随哈希算法和攻击者的资源而变化,因此请把这个数字当作相对参考,而非保证。
密码是如何被攻破的
强而唯一的密码可以挫败依赖猜测的攻击,但并非所有攻击都是这样:
- 暴力破解和掩码攻击会尝试所有组合,或所有符合已知模式的组合。
- 字典攻击会遍历单词列表以及以往泄露事件中曝光的密码库。
- 撞库把从某个网站窃取的登录信息拿到其他所有网站去试——这正是重复使用如此危险的原因。
- 钓鱼诱骗你把密码输入到伪造的登录页面。
- 恶意软件和键盘记录器会记录你输入的内容,无论密码多强。
长度和随机性能应对前两种。其余的则需要双重身份验证,以及对意外登录提示保持警惕。
管理密码的最佳做法
- 每个账户使用唯一的密码。这样某个服务被攻破也打不开其他账户。
- 使用密码管理器,例如 Bitwarden、KeePassXC 或 1Password。你只需记住一个强主口令,其余的都由它保存。
- 尽可能启用双重身份验证,优先选择身份验证器应用或硬件安全密钥,而不是短信验证码。
- 在有必要时才更改密码——收到泄露通知或怀疑被泄露之后。现行建议(NIST)不主张强制定期更换,因为那会促使人们使用更弱、更有规律的密码。
- 绝不通过电子邮件或聊天分享密码,也绝不把密码存在纯文本文件或电子表格里。
口令短语与随机字符串
口令短语由几个随机挑选、彼此无关的单词组成,例如 violin harbor nickel drift。有四到六个真正随机的单词时,它非常强,而且比随机字符串更容易输入和记忆。随机字符密码每个字符包含的熵更多,当由密码管理器代为填写、你从不手动输入时,它是更好的选择。
一种实用的分工:用一个长口令短语作为你必须记住的那一个主密码,让本生成器为每个具体账户生成随机字符串。
这个生成器是否私密且安全?
一切都在你的浏览器中完成。页面没有后端:密码在本地用 JavaScript 生成,绝不通过网络发送。随机性来自 crypto.getRandomValues(),即浏览器的密码学安全生成器,而不是可预测的 Math.random()。
没有 Cookie,没有分析统计,没有日志。你可以打开页面后断开网络,它仍然可用——你也可以在浏览器开发者工具的“网络”标签中确认没有任何数据被传输。