公司被钓鱼了一次:一个同事的邮箱密码泄露,黑客用同样的密码登进了他的 GitHub 和内部系统 —— 因为他所有账号用的是同一个"自己觉得很复杂"的密码:Wang@2020。
这件事之后公司让我牵头定一套密码规范。研究下来发现, 很多关于密码的"常识"其实是错的:必须含特殊字符、每 90 天改一次、越复杂越好…… 这篇讲清楚密码强度到底由什么决定、强密码和好记怎么平衡、怎么给团队定规范。
密码强度由什么决定:不是"复杂"是"熵"
密码安全程度由"熵"决定,通俗说就是"破解需要试多少次", 取决于两个因素:字符种类数和长度。
- 8 位纯数字:10^8 种可能,普通电脑几秒破
- 8 位含大小写数字:62^8 ≈ 10^14 种,几天到几周
- 12 位含大小写数字符号:90^12 ≈ 10^23 种,几十万年
- 16 位全小写字母:26^16 ≈ 10^22 种,几万年
注意第 3 和第 4 个对比:16 位全小写,比 12 位含所有字符种类还要安全。 长度的影响远大于"字符种类"。
误区:"必须含特殊字符"的规则
很多系统要求"必须含大小写 + 数字 + 特殊字符"。这个规则其实有反效果。
因为它会逼用户用"看似复杂实则可预测"的密码。 最常见的套路:首字母大写 + 单词 + 数字 + 感叹号,比如 Password1!、Company2024@。 黑客的破解字典早就把这些套路收录了 —— 这种密码看着满足"复杂度要求",实际几分钟就破。
现代安全建议(NIST 标准)更强调:
- 长度优先:鼓励长口令(12 位以上)而不是强制字符种类
- 不在泄露库里:检查密码是否在已知泄露数据库中
- 不强制定期更换:频繁改密码反而让人用更弱、更可预测的密码
真正的矛盾:强密码 vs 好记
强密码(长 + 随机)记不住,好记的密码(短 + 有规律)不安全。 这是真实存在的矛盾。
历史上人们的妥协方案,全是错的:
- 所有网站同一个密码:好记,但一个泄露全军覆没(撞库攻击)
- 密码 + 网站名变体(
Wang@taobao/Wang@jd):好记,但规律一眼看穿 - 记在 Excel / 便签:明文存储,电脑中毒全泄露
正确答案:密码管理器
这个矛盾的现代解法是:你只记一个主密码,其他全交给密码管理器。
工作流:
- 用密码生成器为每个网站生成 16-20 位随机密码
- 存进密码管理器(1Password / Bitwarden / KeePass)
- 登录时管理器自动填充
- 你的大脑只需记住一个强主密码
这样每个网站都是独立的强随机密码,一个泄露不影响其他; 你又不需要记住几百个密码,只记一个主密码。矛盾解决。
"鸡蛋放一个篮子"的担忧
很多人怕"所有密码放一起,管理器被攻破怎么办"。现实是:
- 密码管理器用零知识架构:连服务商都看不到你的密码(本地加密)
- 主密码足够强 + 开 2FA,被攻破概率极低
- 不用管理器的风险更大:你只能用弱密码 / 重复密码
给团队定密码规范的 3 个原则
原则 1:强制长度,不强制字符种类
要求最小 12 位,而不是"必须含特殊字符"。鼓励用长口令短语。
原则 2:强制用密码管理器
公司统一采购密码管理器企业版,禁止用 Excel / 便签 / 浏览器明文存密码。 每个员工每个系统独立密码,都存管理器里。
原则 3:关键系统强制 2FA
邮箱 / 代码仓库 / 服务器 / 财务系统等关键系统,强制开启两步验证。 即便密码泄露,2FA 能挡住绝大多数攻击。验证器 App 比短信验证码更安全。
不要做的:强制定期改密码
"每 90 天改一次密码"是过时的规矩。研究表明,频繁改密码会让人用 Password1 → Password2 → Password3 这种可预测的递增模式, 反而更不安全。除非确认泄露,否则不需要定期改。
2FA:比强密码更重要的一层
即便密码泄露,2FA 能救你。优先级:
- 验证器 App(Google Authenticator / Authy):比短信安全(短信可被劫持)
- 硬件密钥(YubiKey):最高安全,适合核心系统
- 短信验证码:聊胜于无,但有被劫持风险
总结
密码安全的真相:长度比复杂度重要,独立比好记重要,2FA 比强密码重要。 个人用密码生成器 + 密码管理器,每个网站独立强密码;团队定规范强制长度 + 管理器 + 2FA, 别搞"定期改密码"那套老规矩。
站里的密码生成器 用浏览器密码学级随机生成强密码,自定义长度和字符集 + 实时强度评估,纯本地不上传。 生成后存进你的密码管理器即可。