密码与令牌生成器
密码、口令短语与 API 令牌,全部由浏览器的加密随机源生成——crypto.getRandomValues,从不是 Math.random——并且只存在于这个标签页里。密码最不该生成的地方,就是有日志的 AI 对话:那里的“随机”字符串是预测出来的文本,而对话还留着一份副本。在这里,随机是真的,副本只属于你。
密码
口令短语
API 令牌
强度检查器
随机是一种机制,不是感觉
本页面的每个秘密都来自 crypto.getRandomValues,浏览器对操作系统熵池的接口——你的密码管理器用的也是同一个来源。选择采用拒绝采样,所以每个字符、每个单词都等概率;对随机字节天真地取模会悄悄偏袒某些字符,而在密码生成器里,悄悄的偏差是真缺陷。Math.random 在这里完全不出现:它是为动画造的快速、可预测的生成器,未来的输出可以从过去的输出重建。每个结果旁打印的熵值由真实的池计算——四组字符的 20 字符密码是 20 × log₂(95) ≈ 131 位;560 词表里的五词口令是 5 × log₂(560) ≈ 45 位——所以你能按真实强度、而不是按看起来多复杂来比较形态。驱动整页的那条操作规则值得重申:在对话窗口里生成的密码,就是被存进那次对话历史的密码,存在别人的基础设施上、一个可能被攻破的账户之下。主打文章 不要让聊天机器人碰你的密钥 给出完整论证;哈希识别器 则是将来某天你以摘要形态遇见自己旧密码时的伴侣工具。注意:口令短语的词表保持英文(那是短语的数据本身)。
常见问题
为什么不直接让聊天机器人给个密码?
三个理由,各自都足够。聊天机器人的“随机”密码是预测文本,不是采样出的随机——模型有可测量的偏好模式,而一个攻击者能预测其形态的密码等于被猜中了一半。聊天是记录在案的:刚刚递给你的密码存在于第三方服务器上的对话历史里,与你的账户绑定。而且模型无法使用真正的随机源——聊天补全的背后没有 crypto.getRandomValues。本生成器直接采样浏览器的加密随机源,结果只存在于这个标签页。完整论证在 不要让聊天机器人碰你的密钥。
密码还是口令短语——该用哪个?
两个都用,给不同的手。机器存储的凭据(密码管理器的条目、API 令牌)应该是密码或令牌:每字符熵最大,从不由人输入。任何必须由人输入或记忆的东西——首要的是密码管理器自身的主密码——应该是口令短语:560 词表里的五个词约有 45 位,并且真能记住;而它替代的“聪明”10 字符密码通常携带更少,还会被忘在星期五。
熵值这个数字到底是什么意思?
攻击者要暴力破解这个秘密,平均需要回答的是非题数量的一半,即 2^位 次的一半——前提是他们确切知道它是怎么生成的,诚实的估算总是这样假设。40 位会败给有租 GPU 决心的攻击者;65 位对批量攻击已在实际可达之外;100 位以上则彻底不可达,除非攻破数学本身。生成器的数字对自己的输出是精确的,因为池和长度已知;强度检查器的数字标为估算,因为输入密码的真实池只能靠猜。
强度检查器的判定可信吗?
可信作下限,不可信作承诺。它建模你的字符隐含的池,然后对破解字典最先利用的模式收费——重复、字母与键盘序列、年份,以及互联网最常见的密码本身。它看不见的是含义:宠物名加生日在数学上是“尚可”,对认识你的人却毫无价值。把好判定当作必要条件,而非充分条件——只要机器能存储,就优先用生成的秘密,而不是评级的秘密。
生成的密码会被存储或发送到哪里吗?
不会。生成在本页面中由 crypto.getRandomValues 完成,结果活在标签页的内存里,直到你关闭它。没有账户、没有同步、没有携带你输出的分析事件。但推论在你这边:生成的密码若不立即存进密码管理器,标签页一关就没了——这是正确的失败模式,但要有所计划。