本文描述了一套可长期运行的口令体系搭建思路,目标是在现实攻击模型下显著提高口令被破解的成本,同时在不削弱安全性的前提下降低用户的记忆成本。
不要共用口令
一个常见的错误是用一个口令或口令模式应付所有场景。一旦口令在某一点上泄漏,全局口令都会失效。
因此,合理的做法是引入分级机制,根据重要程度对场景进行分级。
分级制度
本节给出了一个分级示例,总体的设计原则如下:
- 低级别口令由密码管理随机生成,不依赖规则推导
- 中高级别口令基于规则生成,可被人脑推导,密码管理器只负责存储
- 级别不同规则不同
- 同一级别下,一处泄漏不能横向扩散
L1|生存级
负责:金融/政务/关键基础设施
典型平台
- 银行、证券、支付
- 政务系统
- 社保、公积金
- 运营商主账号
- AWS、阿里云
原则
- 使用主邮箱/手机号进行注册
- 配置 2FA(物理钥匙 或 TOTP)
密码策略
1 | password = KDF( |
-
CN-L2|服务级
负责:一般互联网与技术服务
#### 典型平台
- 国内云厂商
- 电商、工具型网站
#### 使用规则
- 手机号 1139,邮箱 hrwang00@outlook.com
#### 密码策略
1
Little_072199
1 | Little_072199 |
CN-L3|匿名级
负责:隐私保护、可丢弃注册
典型平台
- 匿名社区
- 临时服务
- 风险较高或不信任平台
使用规则
- 使用手机号 7143
- 随机密码或短规则
- 不与 L0/L1 产生任何可关联性
- 可用一次性邮箱或不绑定
密码策略
- 随机为主
- 不记忆
- 丢号即弃号
设计目标
- 不依赖任何外物
- 不规则化
- 可完全靠人脑恢复
规则
- Passphrase
- ≥ 5 个词
- ≥ 30 字符
- 不存浏览器
- 不依赖手机号找回
👉 这是“最后一道门”。
L1|重要服务级
适用对象
- 代码托管
- 云控制台
- 私有服务
- IoT 云账号
设计目标
- 可推导
- 可快速输入
- 单点泄露不横向爆炸
推荐结构
1 | {区域}{服务缩写}{序号}-{主短语短版} |
示例:
1 | CALI22-IronBird |
- 规则在脑中
- 序号可计算
- 不依赖纸或管理器
L2|可丢弃级
适用对象
- 论坛
- 临时服务
- 匿名注册
规则
- 随机
- 管理器保存
- 丢了就重置
四、国区的现实:手机号强制注册
在国区,很多平台不支持邮箱注册,这是硬约束。
正确认知
- 手机号 ≠ 身份锚
- 短信 ≠ 安全因子
- 密码是最后防线
实际对策
- 手机号只作为入口
- 密码强度不因此降低
- 能绑邮箱就绑,用于申诉而非依赖
五、为什么密码规则要“对人脑友好”
很多安全建议忽略了一个事实:
人是系统的一部分。
如果规则:
- 太长
- 太随机
- 太依赖工具
那么在真实事故中,人会成为最弱环节。
因此:
- L0 追求“可记忆的强”
- L1 追求“可推导的稳”
- L2 才追求“绝对随机”
六、2FA 的真实定位
- 短信:触发器
- TOTP:有效的第二因素
- 硬件 Key:加分项
但要明确:
2FA 不能拯救一个设计错误的密码体系。
它是加固,不是地基。
七、关于浏览器、管理器与工具
原则很简单:
如果失去这个工具,你就失去控制权,那它不该存根密码。
- L0:不存浏览器
- L1:可存管理器,但能不用也能活
- L2:怎么方便怎么来
结语:密码不是字符串,是结构
真正安全的密码系统,不是“多复杂”,而是:
- 有分级
- 有失效假设
- 有恢复路径
- 有人脑兜底
密码的目标不是“永不被破”,
而是在被破时,你还站得起来。
如果你愿意,下一步我可以帮你:
- 把这篇稿子 压缩成博客可发布版
- 或改写成 面向非技术读者的版本
- 或补一章 “常见误区反驳”(如“密码越复杂越好”)
七、密码管理器的现实角色:为什么是 pass
在前面的讨论中,我们刻意强调了一点:
密码管理器必须“可有可无”,而不是“不可或缺”。
这并不是反对密码管理器,而是反对把控制权完全交给一个工具。
在众多密码管理方案中,pass(The Standard Unix Password Manager)是一个非常适合 L1 / L2 层级的现实工具。
7.1 什么是 pass
pass 的核心思想非常简单:
- 每个密码 = 一个文件
- 每个文件用 GPG 公钥加密
- 存储结构 = 普通目录树
- 后端 = Git(可选)
它不是一个“应用”,而是一个约定 + 工具组合。
7.2 pass 解决什么问题
pass 非常擅长解决以下场景:
- 大量 L1 / L2 服务的随机密码
- 需要版本管理、历史回滚
- 不依赖浏览器、不依赖云服务
- 可完全离线使用
- 明文不落盘
但它不适合做这些事:
- 作为 L0 根密码的唯一存储
- 替代人脑记忆
- 完全自动化、无感使用
7.3 pass 的最小使用流程(示例)
初始化
1 | pass init <你的 GPG Key ID> |
存一个密码
1 | pass insert cn/aliyun |
系统会提示你输入密码并加密保存。
读取密码
1 | pass cn/aliyun |
生成随机密码
1 | pass generate github/example 32 |
目录即分类
1 | pass |
7.4 与 Git 结合(推荐但非必须)
1 | pass git init |
优点:
- 可同步
- 可回滚
- 可审计“什么时候改过密码”
前提:
- 仓库本身不公开
- GPG 私钥安全
7.5 pass 在分级体系中的正确位置
| 层级 | 是否推荐 pass | 原因 |
|---|---|---|
| L0 | ❌ | L0 必须人脑可恢复 |
| L1 | ✅ | 规则 + 工具双保险 |
| L2 | ✅ | 随机密码最佳归宿 |
一句话定位:
pass 是“放大你安全习惯的工具”,不是替代你思考的工具。
八、关于浏览器密码保存(再强调一次)
浏览器密码管理器的定位非常明确:
- L2:可以
- L1:勉强
- L0:禁止
理由不再重复,本质是:
浏览器 ≠ 信任边界。
结语:密码不是字符串,是结构
(保持你原有结语)
参考阅读(Recommended Reading)
密码与威胁模型
- program-think
《如何防止黑客入侵(2):攻击者如何得到你的密码》 - NIST SP 800-63B
Digital Identity Guidelines
工具与实践
- pass 官方文档
https://www.passwordstore.org/ - GnuPG 文档
https://gnupg.org/documentation/
思想与原则
- Bruce Schneier
Secrets and Lies - Ross Anderson
Security Engineering
最后一行总结(可以作为全文的结尾)
密码的安全,不取决于你用了什么工具,
而取决于当工具全部失效时,你是否仍然有路可走。
如果你愿意,下一步我可以帮你做三件事之一:
- 把这篇稿子压缩成一篇可直接发布的博客版本
- 改写为面向非技术读者的通俗版
- 单独拆一篇《为什么我不用浏览器保存重要密码》