本文内容基于公开的网络安全研究、行业报告以及业界普遍认可的安全实践。凡涉及个人经验之处,均会明确说明。
太长不看版(TL;DR)
- 人类自己设置的密码遵循可预测的模式,攻击者正是利用字典攻击和基于规则的攻击来针对这些模式。
- 即使是看起来很"聪明"的密码,比如
L!nk3d1n2020,也会在几分钟内被破解,因为它们遵循了常见的替换规则。 - CSPRNG(加密安全伪随机数生成器)生成的密码,恰恰去掉了攻击者最强大的两件武器:字典和规则。
- 使用带有强主密码的密码管理器,开启多因素认证(MFA),并且永远不要重复使用密码。
简短回答
从业十五年的渗透测试经验告诉我:在几乎所有的安全评估中,人类自己设置的密码始终是最薄弱的一环。攻击者并不会一个一个地猜密码——他们用包含数十亿真实密码的字典,加上基于规则的自动化变换来发起攻击。像 Tiger2021! 这样的密码之所以几分钟内就能被破解,是因为它遵循了人类几乎无法避免的模式:一个单词、一个大写字母、末尾加几个数字。唯一真正有效的防御方式,是通过加密安全的随机生成,彻底消除人类的可预测性。
如果只是想快速生成密码,可以使用密码生成器。想了解更多背景知识,可以阅读密码熵详解、密码管理器 vs 浏览器、密码应该多长?,以及使用在线密码生成器安全吗?。
一次被大多数人遗忘的数据泄露事件——但不应该被遗忘
2012 年,LinkedIn 遭遇了当时历史上最大规模的数据泄露事件之一。后续分析显示,约有 1.67 亿个账户记录被泄露,其中约 1.17 亿条记录包含电子邮箱地址和密码哈希值。
当安全团队检查这些被破解的密码时,结果令人熟悉得有些痛心。password1、linkedin123 这类毫无用心的密码成百万地出现。更有意思——也更令人担忧——的是,就连一些看起来颇为"聪明"的密码,比如 L!nk3d1n2020,也很快就被攻破了。为什么?因为它们都遵循着人类几乎总会使用的那些模式。
我从事网络安全渗透测试工作已经超过十五年。我的工作就是——合法地——用真实攻击者所使用的相同方法去攻破系统。对我来说,密码从来不是一个纸上谈兵的话题,而是我每天都能亲眼看到它在实战中失效的东西。
密码实际上是如何被攻破的
要理解为什么有些密码能扛住攻击、有些不能,你需要从攻击者的视角来看这件事。攻击者不会坐在那里一个一个地猜密码,他们会把一切都自动化。
- 字典攻击: 依赖于从多年数据泄露事件中收集来的海量真实密码、单词、短语及其变体集合。这些字典包含数十亿条记录,而且还在不断增长。
- 基于规则的攻击: 这类攻击对人类的"创造力"极为有效。工具会自动套用常见的习惯:把 "o" 换成 "0",在末尾加上 "123" 或 "!",把首字母大写,插入一个年份,诸如此类。绝大多数所谓"聪明"的密码,都是在这一步被攻破的。
- 暴力破解: 尝试所有可能的组合。这听起来很吓人,但对于足够长、真正随机的密码,配合现代哈希算法存储,暴力破解会因为耗时太长而变得不切实际。
自己设置密码的问题所在
我们喜欢自己想出来的密码,因为它们感觉个性化、容易记住。不幸的是,无论是研究还是实战经验都表明,它们同样也高度可预测。
- 模式会重复: 包括卡内基梅隆大学在内的大规模研究一致显示出相同的结构:一个单词或名字、开头一个大写字母、末尾几个数字或符号。内容在变,但形状始终不变。一旦攻击者建立起这种结构的模型,破解速度就会大幅提升。
- 长度存在天花板: 大多数用户自己设置的密码长度都在 8 到 10 个字符之间。这并不是因为人们不知道更长更安全,而是因为记忆力天然地把我们推向更短的字符串。
- 个人信息会泄露进去: 生日、宠物的名字、纪念日——人们无时无刻不在使用它们。而在社交媒体时代,攻击者往往连猜都不需要猜。
为什么随机密码是完全不同的游戏
由**安全的随机密码生成器**创建的密码——比如 r8$NpL#2qW9 这样的——并不只是"更复杂"而已,它是本质上的不同。
每一个字符都是独立选取的。没有单词、没有替换、没有人类的逻辑可循。正是这一点,去掉了攻击者最强大的两件武器:字典和规则。
从数字的角度来看:
- 一个只使用小写字母的 8 位密码,大约有 26⁸ 种可能组合(约 2090 亿种)。
- 加上大写字母、数字和符号后,组合数骤增到约 95⁸(约 6 千万亿种)。
- 把长度推到 12 位,这个空间就会大到近乎天文数字。
但真正的优势不只在于数量之大——更关键的是,随机密码逼迫攻击者只能靠暴力破解,而这既慢又昂贵,往往根本不值得投入。
破解这两类密码在实战中是什么样子
从渗透测试工程师的视角来看,这两者之间的差距非常明显:
| 密码类型 | 示例 | 攻击者使用的方法 | 破解所需时间 |
|---|---|---|---|
| 自己设置 | Tiger2021! | 字典攻击 & 基于规则的攻击 | 几分钟到几小时 |
| 随机生成 | r8$NpL#2qW9 | 纯暴力破解 | 数年 / 数百年 |
如果密码是用 bcrypt 或 Argon2 这类算法进行妥善哈希处理的,那么对随机字符串进行暴力破解所需的时间会长到让这次攻击根本不划算。在绝大多数实际场景中,攻击者会直接放弃、转向别的目标。
真正的权衡:人类 vs 随机性
随机密码最大的弱点并不在安全性上——而在可用性上。人类天生不擅长记住毫无意义的字符串。这正是密码安全领域的核心矛盾所在:
- 人类容易记住的密码往往比较弱。
- 足够强的密码往往难以记住。
现代安全实践的存在,正是为了弥合这道鸿沟。
今天真正有效的做法
基于行业共识和实战经验,以下是真正有效的做法:
- 使用密码管理器: 像 Bitwarden 或 1Password 这样的工具,能让你只需要记住一个强主密码,其余所有密码都可以又长、又随机、又唯一。对大多数人来说,这被普遍认为是最佳选择。
- 如果必须靠记忆,就用长度取胜: 一串互不相关的单词组合(比如
coffee-zebra-battery-stapler)往往比一个短小但充满符号的密码更能抵御攻击——而且更容易记住。 - 绝不重复使用密码: 一旦某个网站被攻破,密码复用就会引发连锁效应。
- 开启多因素认证(MFA): 电子邮箱、银行账户、云服务——始终要开启多因素认证。
- 检查是否曾在数据泄露事件中暴露: 像 Have I Been Pwned 这样的服务,可以让你查看自己的邮箱是否出现在已知的泄露数据集中。
关键要点
- 人类设置的密码遵循可重复的结构模式(单词 + 数字 + 符号)。
- 字典攻击包含数十亿条来自真实数据泄露事件的密码。
- 基于规则的攻击会自动套用常见的替换方式(
o→0、a→@,末尾加上123或!)。 - 12 位以上的随机密码会迫使攻击者只能使用暴力破解,而这在现代哈希算法面前是计算上不可行的。
- 密码管理器弥合了安全性与可用性之间的鸿沟。
底线结论
面对自动化攻击工具,人类的创造力毫无胜算。唯一能在真实渗透测试中幸存下来的密码,是由 CSPRNG 生成的密码——其中每个字符都是独立且不可预测的。这不是一场关于"人类还是机器更擅长设置密码"的哲学辩论,而是一个风险管理问题。计算机擅长生成随机性,人类擅长保护好唯一的一个秘密,并对多因素认证之类的提示做出响应。让各自做自己最擅长的事。
准备好升级你的账户安全了吗?立即生成一个强大的离线密码,马上保护好你的账户。
为什么可以信任 PassGenerate
- 密码在你的浏览器本地生成,使用的是 Web Crypto API。
- 没有任何密码会被传输到服务器。
- 使用加密安全伪随机数生成器(CSPRNG)。
- 遵循 NIST 和 OWASP 推荐的现代安全最佳实践。
参考资料
- NIST SP 800-63B —— 数字身份指南
- OWASP 密码存储备忘单
- OWASP 身份验证备忘单
- MDN Web Crypto API 文档
- CISA 密码安全指南