密码生成完全指南:熵、长度、字符集与安全边界
注册新账号、轮换泄露口令、或给机器账户设初始密码时,需要的是不可预测且足够长的随机串,而不是生日+姓名变体。本指南解释熵、长度、字符集与工具上的强度/历史功能,并明确:生成器只是起点,不能当唯一安全措施。
核心一句话
强度首先来自长度与不可预测性;字符种类是放大器。生成器帮你抽样,密码管理器帮你存储,2FA 帮你兜底——缺一就把风险留给「一个口令守全盘」。
1. 熵在说什么
在均匀随机、字符相互独立的简化模型下,熵近似为:
\[ H \approx L \times \log_2(N) \]
其中 \(L\) 是长度,\(N\) 是字符集大小。工具页用「所选字符池大小 × 长度」估算,并显示 熵值约 X bit。这是理想上界式估算,不是实验室测评:
| 因素 | 对真实强度的影响 |
|---|---|
| 真随机 vs 脑力口令 | 人类口令远低于理论熵 |
| 站点是否截断长度 | 你生成 24 位,对方只存 12 位 → 有效变短 |
| 是否禁止符号 | 实际 \(N\) 变小 |
| 是否可被社工 / 撞库 | 熵挡不住复用与钓鱼 |
| 「每类至少一个」 | 略降理论熵,但满足策略、避免生成失败 |
页面强度条综合长度档位与是否含大小写/数字/符号等打分,映射为弱 / 中等 / 强 / 极强。把它当相对指示器,不要与某次渗透测试报告划等号。
2. 长度、字符集、易混字符
工具可调参数(对照真实页面):
| 控件 | 范围 / 选项 | 作用 | |
|---|---|---|---|
| 长度滑条 | 4~64,默认 16 | 优先加长 | |
| 大写 A-Z | 开/关 | 扩大 \(N\) | |
| 小写 a-z | 开/关 | 扩大 \(N\) | |
| 数字 0-9 | 开/关 | 扩大 \(N\) | |
| 符号 | `!@#$%^&*()_+-=[]{} | ;:,.<>?` 等 | 扩大 \(N\),注意站点是否允许 |
| 排除易混字符 | 去掉 `0 O l I 1 | ` 等 | 降低朗读/印刷错误,略减 \(N\) |
| 每类至少 1 个 | 保证已选类别各出现 | 适配「必须含特殊字符」策略 | |
| 批量 | 1~10 | 一次多条,写入本地历史 |
快捷预设:
| 预设 | 典型设置 | 适用 |
|---|---|---|
| 简易 12 位 | 较长但可关符号 | 低敏临时 |
| 强密码 16 位 | 四类 + 排除易混 + 每类至少一个 | 默认推荐起点 |
| 极强 24 位 | 更长 | 邮箱、金主账号、共享高权限 |
| 纯数字 PIN | 仅数字 | 仅当系统强制 PIN;熵低,须限长尝试 |
随机源:crypto.getRandomValues 拒绝采样取下标,避免朴素取模偏差;打乱亦用安全随机。
3. 好结果的标准与反例
更好:
- 长度 ≥ 16(高敏 ≥ 18~24)
- 四类字符(若目标站允许)
- 每个站点不同
- 只存在密码管理器或系统钥匙串
- 开启 2FA
更差(反例):
Password1!式可预测- 整句歌词+年份
- 同一口令登录邮箱与论坛
- 生成后发到微信群「大家用这个」
- 用 UUID 或手机号当密码
- 关掉所有字符类只剩 4 位数字还觉得「有工具就安全」
4. 逐步操作
- 打开 /tools/generator/password-generator。
- 选预设或拖动长度;勾选字符类型。高敏账号优先「极强 24 位」。
- 按需开启「排除易混」「每类至少 1 个」。
- 点 生成密码;查看强度条与熵值。
- 复制密码,立刻粘贴到密码管理器或注册表单;避免长时间留在屏幕。
- 批量时用历史区复制/使用;公共电脑用完点 清空 历史(历史存
localStorage键pwdHistory_v2)。 - 若要评估已有口令强弱,另开 密码强度,不要把生产口令长久留在任何网页框。
能力边界
- 支持: 本地生成、预设、熵与强度指示、批量、本地历史、主题切换。
- 不替代: 密码管理器同步加密库、泄露监测、企业 SSO、强制 2FA、服务端加盐哈希存储。
- 历史在浏览器本地,同一台机器的其他用户配置文件可能可见——共享电脑慎用历史。
5. 常见问题与策略冲突
| 现象 | 原因 | 处理 |
|---|---|---|
| 提示请至少选择一种字符类型 | 全关掉了 | 勾选至少一类 |
| 站点拒绝符号 | 字符集含站点禁用符 | 关符号或改用站点允许列表(需人工改) |
| 站点说太短 | 最大长度被策略卡住 | 在允许范围内取最长 |
| 强度显示「弱」 | 过短或类别少 | 加长并启用多类 |
| 复制失败 | 权限/非安全上下文 | 手动选择复制 |
| 历史里还有旧密码 | localStorage 未清 | 点清空;公共机用完清理 |
| 与强度工具结论不一致 | 算法与词库不同 | 以更严的为准,或看是否脑力口令 |
| 生成器很强但账号仍被盗 | 复用、钓鱼、无 2FA、库拖库 | 补管理器与 2FA,查邮件找回链 |
6. 真实工作场景
场景 A:个人邮箱主账号
用 24 位四类字符,仅存管理器,强制开启 App 密码/2FA。邮箱被破等于「重置一切」的钥匙,长度不要省。
场景 B:给同事发「临时后台密码」
生成 16 位,经加密通道或一次性链接发送,要求首次登录修改;不要用明文邮件长期有效。临时账号设过期时间。
场景 C:IoT / 弱策略设备
设备只允许 8 位且无符号:在限制内取满长度 + 多类(若允许),并隔离网络,不把同一口令用于云账号。
场景 D:CI 机器账户
用生成器产随机串,写入密钥管理(Vault 等),轮换有记录。禁止写进仓库;Hash 工具只用于校验演示,不把明文密码拿去「再哈希上传群」。
场景 E:用户教育演示
投影用现场生成后作废的例子讲熵;禁止用真实员工口令做课件。
场景 F:与 UUID 分工
资源 ID 用 UUID 生成器;登录密钥用本工具。两者都「随机」但威胁模型不同。
7. 勿当唯一安全措施
分层示意:
- 随机长口令 ← 生成器在这里
- 每站不同 + 管理器
- 2FA / Passkey
- 服务端:加盐慢哈希、锁定、异常登录
- 泄露响应:监控、强制重置
只做第 1 步而在所有网站复用,一次拖库可连坐。只开 2FA 但口令是 123456 仍可能被会话与恢复流程打穿。生成器不是免责声明打印机。
9. 落地清单
- [ ] 高敏账号 ≥ 18~24 位且唯一
- [ ] 已写入密码管理器而非备忘录明文
- [ ] 已开 2FA 或通行密钥
- [ ] 公共电脑已清空历史与剪贴板
- [ ] 未把口令提交到 Git / 截图 / 工单
- [ ] 服务端存储非可逆明文
- [ ] 复用口令清单已计划轮换
常见问题
16 位和 12 位差多少?
在字符集相同且真随机时,多 4 位按 \(\log_2(N)\) 倍增搜索空间。对在线限速攻击,长度与锁定策略一起生效;对离线哈希爆破,长度往往更关键。
为什么要排除 0 和 O?
减少支持场景下的人口述错误。代价是 \(N\) 略降;可用更长一点补偿。
「每类至少一个」会降低安全性吗?
会轻微约束分布,但通常可忽略,且能通过愚蠢的组成策略检查。真正的风险是过短与复用。
浏览器生成能信吗?
现代浏览器的 crypto.getRandomValues 适用于口令生成。更大风险在:肩窥、剪贴板同步、恶意扩展、假冒钓鱼站。请认准你自己打开的工具 URL。
历史记录会上传吗?
设计为 localStorage 本地保存最近若干条。仍可能被同机其他人或恶意脚本读取——敏感环境禁用历史或用完清空。
PIN 预设为何存在?
现实中有的系统只接受数字。它不表示 PIN 等于强密码;应配合尝试次数限制与物理保管。
可以表达成骰子口令(diceware)吗?
本工具是字符抽样模型。骰子词表口令也很好,尤其易记;请用合格词表与足够词数,并仍配管理器与 2FA。
强度条满了是否绝对安全?
否。钓鱼、会话劫持、备份泄露、SIM 交换不看你的熵条。生成器解决「口令是否好猜」这一层。
生成、交付与轮换的边界
生成密码只是生命周期的第一步。创建账户时应立即把结果交给密码管理器,避免先复制到聊天工具再转存;交付给同事时使用管理器的共享保险库或一次性链接,不要把密码写进工单标题。发生人员离职、权限变化或疑似泄露时,应按账户重要程度安排轮换,并同步撤销旧会话、恢复码和 API Token。强度条只能估计猜测成本,不能替代最小权限、登录告警、双因素认证和备份恢复演练。
备份码与恢复流程
账户安全还包括恢复路径。生成强密码后,应确认恢复码、备用邮箱和管理员接管流程能够独立工作,并把恢复码放在与密码不同的安全位置。不要把恢复码和密码一起放在同一张截图或同一个明文文件里;否则主存储泄露时,攻击者会同时获得登录和恢复能力。
继续浏览
用「强密码 16 位」生成一条,只粘进密码管理器测试库;再打开强度工具对比手动弱口令,建立直觉。