市面上有很多免费密码生成器,大多数生成出来的密码乍看之下都同样"随机"。真正重要的差异——随机性从哪里来、有没有传输任何内容、能自定义到什么程度——从输出结果本身根本看不出来。这是一份关于该检查哪些标准的指南,而不只是一份工具名单。
太长不看版
- 对任何密码生成器来说,最重要的问题是它是完全在客户端(你的浏览器里)运行,还是会向服务器发送请求。
- 第二重要的问题是它使用什么随机性来源——一个公开披露的 CSPRNG(比如 Web Crypto API),还是一个未披露的方法。
- 独立生成器工具、密码管理器自带的生成器,以及浏览器内置的生成器,都在用不同的便利性和可移植性权衡来解决同一个问题。
- 完整密码管理器(Bitwarden、NordPass、1Password、Proton Pass)的免费层级通常在更广泛的功能之外附带一个生成器;像 PassGenerate 这样的独立工具则专注于生成本身,不需要账号。
简短回答
对你来说最好的免费密码生成器,是你能够验证它完全在客户端运行、披露了真实的随机性来源(CSPRNG,而不是 Math.random()),并且提供你需要的定制选项(长度、字符集,或密语模式)的那一个。PassGenerate 就是专门围绕这三条标准构建的——关于如何自己验证任何一个生成器(包括这一个),可参见在线密码生成器安全吗?。
真正重要的评判标准
1. 客户端 vs 服务端生成。 一个完全在你浏览器里计算密码的生成器,从来没有机会记录它生成的内容,哪怕是无意中记录。一个需要向服务器发请求来"生成"密码的生成器,为这项任务引入了一个在技术上毫无必要的传输步骤。这一点你可以用浏览器开发者工具的网络面板自己验证。
2. 公开披露的随机性来源。 留意是否明确提到 Web Crypto API 的 crypto.getRandomValues(),或同等的 CSPRNG。不说明如何生成随机性的工具,就留下了它可能在使用非密码学方法的可能性——即使输出结果在人眼看来是随机的,这种方法也不适合任何安全敏感的场景。
3. 可定制性。 至少应该包括:可调节的长度,以及对包含哪些字符集(大写、小写、数字、符号)的控制。密语模式(一串随机的词典单词)对需要凭记忆输入的密码来说是个有用的选项,因为它通常比同等强度的符号串更容易准确输入。
4. 不需要账号。 生成密码是一个无状态操作——它不需要知道你是谁。一个要求先注册才能生成任何内容的工具,是在没有任何功能性理由的情况下增加了摩擦(以及一个数据收集点)。
不同类型的工具各自适合什么场景
独立的浏览器端生成器(比如 PassGenerate)专注于生成这一件事,不需要账号,而且因为页面上没有太多其他内容分散注意力,很容易验证它是客户端运行的。代价是它们不存储任何东西——你生成、复制,然后拿到别处使用。
密码管理器自带的生成器(Bitwarden、NordPass、1Password、Proton Pass 等)如果你已经在使用该管理器,就会很方便,因为生成的密码可以在同一个流程里直接存入你的保管库。Bitwarden 的生成器特别值得一提,因为它是一个开源代码库的一部分,每年都会接受第三方安全审计(包括安全公司 Cure53),所以它的随机性实现可以被独立审查,而不必仅凭信任。关于如何选择管理器本身,可参见 NordPass 评测 和密码管理器 vs 浏览器保存密码。
浏览器内置生成器(Chrome、Firefox、Safari 在你于某个网站创建账号时都会提供)很方便,因为它们会在合适的时机自动出现,但通常绑定在那个特定浏览器的密码存储里,一旦你更换浏览器,或者需要在浏览器接触不到的地方使用密码,这就会影响可移植性。
操作系统或命令行生成器(例如 openssl rand,或密码管理器的命令行工具)对想通过直接阅读工具源码来验证随机性来源的技术用户来说,是一个合理的选择,但对大多数为网站注册生成密码的人来说不太实用。
一个实用的选择方式
你不需要穷尽式地评估每一个选项。一个合理的流程是:如果你已经在用密码管理器,就用它自带的生成器——这样少信任一个工具,而且密码会直接进入存储。如果你不用管理器,或者需要为管理器接触不到的场景生成密码(一个共享账户、一次性注册),就用一个独立的客户端生成器,并用网络面板检查的方法自己验证一次——之后就可以放心使用这个工具,不需要每次都重新验证。
关键要点
- 评估密码生成器应该看客户端执行、公开披露的随机性来源,以及可定制性——而不是看界面看起来有多"高级"。
- 客户端执行这一点,你可以直接通过浏览器开发者工具自己验证,不需要仅凭厂商的一面之词。
- 如果你已经在用某个密码管理器,它自带的生成器会很方便;如果你不需要存储、只需要生成,像 PassGenerate 这样的独立工具是不错的选择。
- Bitwarden 的生成器特别值得一提,因为它是一个开源、可独立审计的代码库的一部分。
为什么可以信任 PassGenerate
- 密码使用 Web Crypto API 在你的浏览器本地生成。
- 不会向服务器传输任何密码。
- 使用密码学安全伪随机数生成器(CSPRNG)。
- 遵循 NIST 和 OWASP 推荐的现代安全最佳实践。
参考资料
- MDN Web Crypto API 文档
- OWASP 密码存储速查表
- NIST SP 800-63B – 数字身份指南
结论
最好的免费密码生成器,不是界面最花哨的那个——而是你能验证它在客户端运行、披露了真实的密码学随机性来源、并且提供你具体场景所需定制选项的那一个。至于该用密码管理器自带的生成器还是像 PassGenerate 这样的独立工具,主要取决于你希望结果直接进入保管库,还是要在管理器接触不到的地方使用它。