以下建议如下 NIST SP 800-63B该法案放弃了强制性组成规则和强制轮换,转而采用长度和对被泄露密码进行筛选。
2020年左右的某个地方,在我的WP Adminify岁月里,我花了一个很长的星期二清理了一个客户端's WordPress网站,该网站已经悄悄地向Googlebot提供制药垃圾邮件三周了,入口点是n't一个插件漏洞,它是n't一个零日,它是admin帐户-用户名 admin的, 密码 Sumon1985@。站主's名和出生年份用@螺栓连接,以满足"特殊字符"规则。一个塞凭证的机器人直接穿过 wp-login.php。访问日志显示在登陆前四天内进行了 11,000 多次登录尝试。从主题文件和。 wp_options 桌子带我度过了周末的大部分时间。
That job 改变了我对密码的看法,不是因为攻击很复杂- 它与复杂相反,它是一个脚本用单词表锤击登录表单,而一个人类发明的密码恰好坐在单词表预期的位置,人类随机性很糟糕,我们认为 P@ssw0rd2024! 是聪明的,地球上每一本破解字典在最初的几千个条目中都有那个模式,并配有leetspeak替换和年份后缀。
I'll在这里也承认自己的罪过,在我的Laravel日子里,我为了一段尴尬的时光,在三个分期服务器上重复使用了相同的密码,因为"他们'只是分期,没有人关心"然后其中一个分期框最后在上面有一份生产数据的副本用于调试会话,我意识到I'd一直在用密码保护真实的用户记录I'd也在某个时候输入到共享的TeamViewer会话中没有发生任何不好的事情那是运气,而不是能力,之后我完全停止发明密码。
所以我在 toolz。dev 中构建了一个密码生成器,它做了一件重要的事情:它将人类带出了循环。本指南涵盖了如何正确在线使用密码生成器、将强密码与装饰密码分开的熵数学,以及当随机字符串跳动密码短语时 - 带有实际数字,而不是共鸣。
TL;博士: 停止发明密码--人类在这方面是可以预见的糟糕。使用 Toolz.dev 密码生成器 16 + 个字符随机密码与加密安全的RNG,完全在您的浏览器中。你生成的东西永远不会离开你的设备,长度远比符号体操更重要。
主要特点
加密安全随机性
这是最重要且无人看的特性。生成器使用 Web 加密 API's crypto.getRandomValues() - 由您的操作系统播种的加密安全的伪随机数生成器 (CSPRNG)'s 熵池 - 而不是 JavaScript's Math.random()。这种区别是't学术。 Math.random() 为动画定时和掷骰子演示而构建的;如果攻击者观察到足够的值,则可以预测其输出,因为底层算法(v8中的xorshift128+)从来没有被设计为抵制预测。csprng是当密码的全部点是没有人可以猜到它时,随机性源是其他一切都站立的基础。i've see "密码生成器"stack上的片段溢出使用 Math.random() 数百票赞成。唐't复制那些。
长度最多 128 个字符
滑块从短而有风险的字符变为 128 个纯线噪声字符对于密码管理器会为您记住的任何内容,我生成 24 到 32 个字符,并且再也不会考虑它对于长度上限较紧的系统 - 一些银行仍然上限为 16 或 20,这告诉您有关其后端的一些信息 - 您将其向下拨到字段接受的任何内容您添加的每个字符都会将攻击者乘以字符集的大小's 工作从 12 到 16 个字符加上完整的字符集会增加大约 26 位熵,这是 " 之间的区别破解成本高" 和 " 不会在太阳烧坏之前发生。 " 长度是现有最便宜的安全升级。
字符集切换
4个独立的开关:大写、小写、数字、符号,每个目标系统混合匹配,这听起来微不足道,直到你击中一个拒绝的遗留系统 & 因为有人's 2009时代的清理层扼杀了它,或者一个默默截断符号的Wi-Fi路由器固件,我曾经在客户端调试一个"错误的密码"循环时烧了40多分钟's托管面板,然后才意识到它们的表单被剥离 < 並 > on submit 但不是在帐户创建。现在我只是为曲柄系统切换符号,并添加四个字符的长度来补偿。熵数学几乎在同一个地方工作,没有任何中断。
排除模棱两可的字符
的 Il1| 並 O0o problem。if you'll ever read a password off one screen and type into another - a TV, over IPMI的服务器控制台, 路由器设置页面, 同事在通话中大声朗读 - 模棱两可的字形是苦难, 那是大写的I还是小写的l还是管道, 取决于字体, 字体总是背叛你, exclude-ambiguoustoggle 将通常的嫌疑人从池中掉落, 你每个字符损失少量的熵 - 通过添加一两个长度的字符轻松恢复 - 而且你再也不会有那种斜视单空间字体的论证, 对于任何用手输入的东西, 我无一例外地翻转这个。
活体强度和熵反馈
当您调整长度和字符集时,强度计会立即更新真实的熵估计 - 而不是天真的 "有一个符号,必须强"评分 P@ssw0rd! 为优秀。仪表反映了实际的键空间:字符集大小提高到长度,以位表示。这会将抽象数学变成你可以感受到的东西。拖动长度滑块,观看位攀爬;切换符号关闭,准确地看到它的成本。一旦你've观看了16个随机字符超过10个字符的强制复杂性,该课程比任何政策文件管理过的都要好。
大宗电
1批服务账号、路由器车队、或者播种一个团队需要20个密码's凭证轮换?一次生成,复制批次,每个都是从CSPRNG中独立抽取的- 那里's之间没有序列关系,所以知道一个不会告诉你下一个,我在配置时使用这个:每个一个密码 .env secret,每个数据库用户,每个队列工作人员凭据,一次坐下来生成并直接粘贴到金库中。它击败了另类的 I've 看过人们这样做,这是生成一个好的密码,然后"变化"它用手九次。那个's 一个密码,九个服装。
100% 客户端 - 没有什么可以离开您的浏览器
Everything都在你的浏览器中运行,密码是由你的机器上的JavaScript生成,显示在你的机器上,从你的机器复制,没有API调用,没有携带值的分析事件,没有可以记录它的服务器Don't接受我的话-打开DevTools,观看网络选项卡,并锤击生成按钮,没有什么能起火,这是toolz。dev上每个工具背后的相同架构原则,而I've写了为什么它's不可协商在 我关于在线工具中的数据隐私的帖子.通过服务器来回传输密码的在线密码生成器是't安全工具。it's收集点。
如何使用密码生成器
1步:打开工具
前往 密码生成器。没有账号,没有注册墙,没有cookie-consent迷宫,你才能点击一个按钮。它加载,它工作。如果你're在你不做的机器上't完全信任-酒店商务中心,借来的笔记本电脑-记住浏览器本身就是你的信任边界:工具赢了't传输任何东西,但主机上的键盘记录器不't关心谁的javascript生成了字符串。
第 2 步:设置您的长度
Default 是一个理智的起点,但对于任何重要的东西,至少要拖到 16,对于密码管理器存储的任何东西,至少要拖到 24+。Length 是您拥有的单个最大杠杆。如果目标系统强制执行最大值,请使用它允许的每个字符 - 保留熵在表上没有奖品。
3步:选择字符集
4套都开着,除非目标系统对象。为遗留形式和处理不当的固件关闭符号;如果人类曾经用手抄写密码,请翻转排除-模糊选项。在切换时观看强度计 - 它可以准确地显示每个选择的成本或以位购买。
4步:生成、复制、存储
击生成,点击复制,直接粘贴到你的密码管理器中- 不是文本文件,不是自己一个Slack DM,不是粘贴到一张比你文明更长寿的便条上,随心所欲地再生多次;每次点击都是新鲜的独立抽奖,如果你需要批量,使用批量模式,立即将每一张存储在它的帐户上,在你忘记哪一个是哪个之前,I've犯了那个错误。一次。
是什么让密码变得真正强大?熵数学
强度是't关于看起来打乱了。它's关于攻击者必须搜索的大海捞针的大小,我们用熵位来测量该大海捞针。
公式很简单。如果你的密码是 length 从大小的字符集中随机统一绘制的字符 charset中,可能的密码数量为 charset^length且以位为单位的熵为:
entropy = log2(charset^length) = length × log2(charset)
每个附加位都会使搜索空间加倍。已工作的示例:
- 12个小写字母: 26的字符集,log2(26)≈4.70,所以12×4.70≈ 56位元。大致7.2 × 10^16种可能性。对现代GPU钻机破解快速哈希感到不舒服。
- 16 个字符,全字符集 (26 + 26 + 10 + ~10符号≈ 94,但称之为95可打印ASCII):log2(94)≈ 6.55,所以16×6.55≈ 105 位。那's约3.7 × 10^31种可能性- 五十亿倍的56位空间。
- 24个字符, 完整字符集: ≈ 157 位。那时候限制因素是服务's哈希,而不是你的密码。
请注意公式奖励的内容:长度相乘,复杂性仅推动对数项。从仅小写到完整字符集可将 log2(字符集)从 4.70 提升到 6.55 - 好听,每个字符大约多 39% 位。但长度加倍会使位直接加倍。这就是为什么 20 个字符的小写密码(94 位)击败 12 个字符的所有内容 - 汤密码(79 位)。长度获胜。 I'将死在这座山上。
一个重要的警告是:只有绘制字符时公式才成立 随机均匀。人类选择的密码的熵远小于其长度所暗示的熵,因为人类从一个微小的、可预测的子集中进行选择- 字典单词、键盘行走、日期、名称。破解器don't暴力-强制执行完整的键空间;他们行走带有破坏规则的概率排序词表。 Sumon1985@ isn't一个10个字符的搜索问题。it's一个名字加年份的搜索问题,而且那个空间是微不足道的。
RNG 重要的地方是均匀随机性,这里's JavaScript 中错误的方式和正确的方式:
// WRONG — predictable PRNG, never for secrets
const bad = chars[Math.floor(Math.random() * chars.length)];
// RIGHT — CSPRNG via Web Crypto
const buf = new Uint32Array(1);
crypto.getRandomValues(buf);
const good = chars[buf[0] % chars.length];
Math.random() 是统计PRNG:洗牌播放列表很好,对秘密来说是灾难性的,因为它的内部状态可以从观察到的输出中恢复。 crypto.getRandomValues() OS熵池中拉出,并且被设计为即使对于看到其他输出的观察者来说也是不可预测的。
甚至"右"上面的例子还有一个值得了解的微妙缺陷: 模偏差。如果你的字符集大小不't均匀除以2^32, buf[0] % chars.length 使低索引字符的可能性稍大一些。对于 94 个字符的集合,偏差很小,但仔细的实现使用拒绝采样 - 丢弃字符集大小最大倍数以上的值并再次绘制 - 因此每个字符的可能性完全相同。它's 是两行修复,它's 是将真实生成器与复制粘贴的片段分开的细节。
最后,标准与数学一致。 NIST SP 800-63B美国联邦数字身份指南称,验证者应该偏爱长度而不是构成规则(那些"一个大写,一个符号"要求明显推动用户走向可预测的模式) 不是 强制定期轮换密码,无需妥协证据,并且应根据已知被泄露的密码列表筛选新密码。 OWASP 身份验证速查表 点同一个方向:支持长密码,允许所有可打印字符包括空格,检查是否违反语料库,以及密码与MFA和速率限制而不是复杂性剧院配对当标准机构和算术都说"让它长而随机,"辩论结束。
常见用例
新服务注册
每个新帐户都会获得一个新的、唯一的随机密码 - that's 一句话就完成了整个学科。凭据填充,攻击得到了我的客户端's WordPress 网站,只会因为人们重复使用密码而起作用:在某个被遗忘的论坛上的漏洞成为您电子邮件的关键。如果每个注册从生成器获得自己的 20 多个字符随机字符串,则那里包含任何漏洞。工作流程需要十秒钟:generate on Toolz.dev/tools/password-generator、粘贴到注册表单中,保存到密码管理器中密码's工作就是不难记住,那以前对我来说就像一个bug。it's功能-任何你能记住的东西,一个词表都可以预测。
WordPress 管理员和数据库凭据
This one's personal。that pharma-spam清理之后,我的WordPress硬化检查表从凭据开始,而不是插件:一个随机的24 +字符管理员密码,一个不同的随机密码,每个额外的管理员用户,一个随机 DB_PASSWORD 在 wp-config.php,以及随机盐。数据库密码尤其是- I've审核了站点,其中它是站点名称加上"123",坐在可读的世界备份中 wp-config.php。WordPress网站被愚蠢的、无情的自动化所打击; wp-login.php 並 xmlrpc.php see登录尝试在几个小时内站点上线哑自动化被恰好一件事击败:密码是aren't在任何词表中。随机字符串,通过构造,aren't。
API 密钥、秘密和。env 文件
I'm脚手架上的Laravel或Express项目时,需要一个网络钩签名秘密,cron端点令牌,或者两个服务之间的一次性共享秘密,我生成一个长随机字符串 - 32到64个字符,有时符号关闭如果它'll生活在一个URL中 - 并将其放入 .env。对于标识符我需要唯一但不秘密,那's一个不同的工具: UUID 涵盖那份工作。如果您'重新检查服务交给您的代币内实际包含什么' jwt解码器 will 解包它客户端。更多关于我的整个工作流程 编码工具指南。我遵循的规则:秘密在环境之间生成,从未发明,也从未重复使用。问我我是如何学到的。(Staging server。其中三个。)
共享团队帐户和密码管理器
有些帐户确实必须共享 - Twitter 公司,注册商登录,即按每个座位收费的 SaaS 喜欢它's 打印资金。共享凭据是人类发明的密码变得最糟糕的地方,因为它们优化了"通过通话轻松告诉同事。"修复是随机生成的密码存储在共享密码管理器金库中,因此没有人需要说话、打字或记住它。当有人离开团队时,重新生成和更新金库条目 - 两分钟的苦差事而不是尴尬的安全事件。批量生成在这里有所帮助:一次性旋转每个共享凭据,而不是向自己承诺你'下次冲刺将到达其余部分。你赢了't。我从来没有这样做过。
Wi-Fi 密码短语
路由器设置是经典的排除模糊场景:您'll在电话键盘上键入此密码,带有方向键盘的智能电视,以及一个客人's笔记本电脑,当它们悬停在您的肩膀上时,我生成20多个字符,符号关闭,模糊字符排除 - 仅字母和数字。仍然比大多数家庭网络运行的街道名称+年强得多,因为WPA2握手可以在尝试率巨大的情况下离线捕获和破解。熵数学不't关心它's"只是Wi-Fi。"62个字母和数字字符集仍然给出log2(62)≈每个字符5.95位; 20个字符是 ~ 119位。没有人是暴力强迫,您的客人仍然可以在一分钟内输入它。
随机密码与密码短语与人类模式
3种人制作密码的方式,只有两种是可以防御的。
| 方法 | 典型长度的熵 | 可记忆 | 在手机上打字 | 最好的 |
|---|---|---|---|---|
| 随机字符串(生成器,16-24 个字符,完整字符集) | ~105-157 位 | 有效零 - 那个's很好 | 痛苦,但你粘贴了经理的粘贴 | 密码管理器存储的所有内容:帐户、DB 信用、API 秘密 |
| Diceware 密码短语(5-6 个随机单词) | ~64-77 位(7,776 个单词列表中的 12.9 位/字) | 真的很好 | 简单--真实的单词,很少的符号 | 您必须记住的少数:管理器主密码、操作系统登录、磁盘加密 |
人类发明的模式(Name+Year!的,(键盘走路) |
看起来像 50 多个位,对单词列表表现得像 20-30 个 | 好,欺骗性 | 易 | 没什么。退役这些。 |
我的立场: 密码管理器存储的所有内容都采用随机字符串,必须生活在您头脑中的两三个秘密的 diceware 密码短语,以及人类发明的模式,完全没有意义。 Passphrase-versus-random的争论,大多在你注意到他们服务于不同的工作后就蒸发了,一个24个字符的随机字符串在157位在数学上比一个6个字的密码短语在77位-但是你'll永远不会从内存中键入随机的,而你'll永远不会忘记密码短语所以用它获胜的每个密码短语的唯一规则:单词必须是 随机选择 从词表(骰子或 CSPRNG)中,不是由您选择的。 correct-horse-battery-staple 选择是因为你读了漫画的熵接近于零。用实际骰子滚动的四个单词有 51.7 位,与广告完全相同。
常见问题
2026年密码应该多久?
16个字符至少对于任何重要的事情,当密码管理器进行记忆时,24个或更多。NIST SP 800-63B强调长度而不是组成规则,熵数学支持它:一个16个字符的全字符集随机密码携带大约105位,舒适地超越了实际的暴力。如果一个站点将你封装得更短,请使用它允许的每个字符并在那里启用双因素身份验证。
在线密码生成器可以安全使用吗?
They're safe当 - 并且只有当 - 他们运行完全客户端与加密安全的RNG。toolz。dev生成器创建密码在您的浏览器与Web加密API,永远不会传输它们;你可以通过观察网络选项卡验证,同时生成,在没有请求火灾。避免任何生成器在服务器上产生密码,因为你'd是信任一个陌生人's日志与你的秘密。
密码短语比随机密码更好吗?
他们在不同的工作中获胜。一个 24 个字符的随机字符串在数学上更强,但您可以't 记住它 - 非常适合密码管理器存储。一个 5-6 个单词的 diceware 密码短语携带 64-77 位,并且真正令人难忘 - 非常适合主密码本身、您的操作系统登录和磁盘加密。对存储的所有内容使用随机字符串,这是您头脑中必须生活的少数秘密的密码短语。
生成器如何创建随机性?
Web Crypto API 中调用 crypto。getRandomValues(),这是一个加密安全的伪随机数生成器,由您的操作系统播种's熵池。与 Math。random() 不同,它的输出可以't 从先前观察到的值中预测,这是密码从根本上依赖的属性。仔细的实现也避免了模偏差,因此您所选集中的每个字符的可能性完全相同。
90天换一次密码?
No - not on a schedule。NIST SP 800-63B特别建议不要强制定期轮换,因为强制更改会推动人们朝着增量模式前进,比如Password1,攻击者首先尝试的Password2。在那儿更改密码's一个实际原因:服务被破坏,你不小心暴露了它,你在不受信任的机器上输入了它,或者共享访问权限的人离开了团队。
我的密码中真的需要符号吗?
Signup forms坚持的程度不高,符号将每个字符的熵从大约5.95位(字母加数字)提高到大约6.55位(可完全打印的集合)- 有帮助,但两个额外的长度字符比符号购买更多,如果遗留系统或路由器错误处理符号,关闭它们并添加长度,20个字符的字母数字密码每次都会击败一个充满14个字符的符号。
我的浏览器中生成的密码可以被拦截吗?
Not by the tool itself-a client-side generator 没有提出包含密码的网络请求,因此在传输中没有任何东西可以拦截现实的风险存在于您自己的设备上:恶意软件、键盘记录器或受损的浏览器扩展程序,具有页面访问权限,保持您的机器和扩展程序清洁,将生成的密码直接粘贴到密码管理器中,并避免在您不具备的计算机上生成凭据't控制。
What's 我能做的最强密码?
实际上:目标系统接受的最长的完全随机字符串,使用所有四个字符集使用 CSPRNG 生成。在 32 个字符的完整字符集中,您're 过去 200 位,密码不再是完全最弱的链接 - 服务's 哈希、会话处理和您的设备安全问题更多。追逐位数,超越此范围的是装饰;花精力在任何地方启用 MFA 和唯一密码。
让我的浏览器保存我的密码安全吗?
比重用密码更安全,能力不如专用管理器 Chrome、Firefox 和 Safari 将保存的凭据加密到操作系统登录后面,并通过加密通道同步它们,这可以轻松击败电子表格或重复密码。专用管理器添加浏览器跳过的内容:跨浏览器访问、与团队安全共享、漏洞监控以及存储恢复代码和 API 密钥等非密码秘密。
攻击者首先尝试什么最常见的密码?
Leaked-password列表,而不是暴力破解工具打开与每次突破的最大命中 - 123456,密码,qwerty - 然后键盘行走,年份,宠物名,和字典单词与钉上"123!"或"@"交换。每个人发明的模式已经在那些词表中,这正是为什么随机生成的字符串,完全不遵循模式,回避任何攻击的整个第一波。
现在生成一个 - 然后再也不要考虑它
最好的密码工作流程很无聊。打开 密码生成器、拖长、生成、保存给你的经理、继续你的生活没有聪明、没有助记系统、没有出生年份戴着@作为伪装每一个密码都是唯一的、每一个随机的、没有一个生活在你的脑海里星期二我花在从客户身上刮出pharma垃圾邮件's主题文件完全可以被这个十秒钟的习惯所预防。
如果您'确保整个堆栈的安全,邻居们距离酒店仅一页 哈希生成器 对于校验和和完整性验证, UUID 对于需要唯一性而不是保密的标识符,以及 jwt解码器 为检查令牌而不将它们粘贴到某个随机站点's后端。所有客户端,与生成器相同- 该架构背后的推理在 数据隐私帖子并且更广泛的工具包之旅生活在 编码工具指南。
一个习惯,十秒钟,背后是真正的数学。那's整个球场。



