设计你的密码策略
通过 Logto 确保认证过程的安全性,获得有关创建符合要求、安全且用户友好的产品密码策略的见解。
你的密码真的能保护你吗?
在你的产品中,你可能需要依赖经典的认证方法——密码。虽然密码不会被完全取代,但与替代认证方法相比,它们更容易受到攻击。你的密码策略真的安全吗和合规吗?即使你熟悉各种密码策略技术,把它们叠加在一起真的有效吗?
我们通过对 NIST 规范的深入研究、检查领先产品的密码策略,并确保用户体验的平衡,解决了密码策略设计和配置的复杂性。强调密码合规性的重要性,我们的目标是减轻与密码策略相关的挑战,并提供一个全面的流程,通过与其他多因素认证 (MFA) 验证因素的无缝集成,确保账户安全。
用户需要什么样的密码?
产品设计师经常在他们的产品是否足够安全的问题上苦苦挣扎,从而实施严格且复杂的密码策略。例如,要求大写、小写字母、数字,甚至是特殊字符的组合,或者要求员工定期更改密码。
当面临这些密码要求时,用户很快就会抱怨:“为什么它必须这么复杂?记住我的密码感觉就像是全职工作!”这让产品经理挠头,想知道更复杂的密码策略是否一定更好。让我们分析一下综合密码策略的组成部分以找出答案。
在下一部分中,我们将深入探讨密码策略之间的细微差别,找到安全性和用户便利之间的平衡。我们将探讨如何定义正确的密码 要求,并提供数据支持的见解来支持我们的做法。
所有密码因素的清单
首先,通过分析大量产品和 NIST 规格,我们编制了一份全面的密码因素列表和设计建议。
我们大致将它们分为三组:
- 密码设置要求:用户设置密码的最低要求。
- 密码安全监控:检测到密码风险时的及时行动和反馈。
- 密码用户体验:提升在密码创建和验证过程中的用户输入体验。
类目 | 因素 | 分析(参考 https://pages.nist.gov/800-63-3/sp800-63b.html#sec5 ) |
---|---|---|
设置密码要求 | 长度 | 增加密码长度比复杂性更能有效阻止密码破解。NIST 建议长度至少 8 个字符,但应允许更长的密码。 |
字符类型 | 密码可以支持多种字符类型,包括大写字母、小写字母、数字、符号和 Unicode(应允许使用空格字符)。 | |
密码策略不应提示用户回忆特定类型的信息,因为这已被证明在增加复杂性的同时并未有效增强安全性。https://www.notion.so/General-f14f0fb677af44cb840821776831a021?pvs=21 | ||
低安全性短语 | 建议在用户使用易于猜测或破解的模式时提示用户更改密码,例如重复或连续的字符、常用词、用户信息或产品上下文信息。 | |
泄露密码 | 应将新的用户密码与泄露密码列表进行检查,以确保它们未被泄露。 | |
密码安全监控 | 密码验证速率限制 | 限制连续错误密码尝试的次数。当达到 此限制时,实施安全措施,例如要求多因素认证 (MFA)、发送推送通知、施加冷却时间,甚至暂时冻结账户。 |
强制更改密码 | 不应要求密码随意更改。但若验证者发现认证器已被破坏,则必须强制更改密码。 | |
密码历史 | 保留过去密码的记录,以防止重复使用。不推荐对密码重用施加过多限制,因为用户可能通过微小修改绕过此规则。 | |
更改密码后清除会话 | 允许用户选择在更改密码后退出其他设备上的会话。 | |
密码输入体验 | 密码强度提示 | 向用户提供指导,帮助他们选择强而易记的密码。 |
密码提示 | 避免显示密码提示,因为这增加了非授权访问的可能性。 | |
复制粘贴密码 | 允许使用“粘贴”功能,以便用户使用密码管理器。 | |
查看密码 | 提供一个选项,允许用户查看输入的密码,而不是在提交之前显示一系列点或星号。 |
配置你的密码体验的工具
也许你没有耐心逐项检查清单。如果我们设计一个包含所有这些配置选项的强大密码工具,它可能会成为开发人员的一个难题,比复杂的密码策略本身更为复杂。因此,让我们将密码因素进一步简化为三个步骤。
步骤 1:舍弃不必要的规则
如表中所述,一些过时的密码规则看似增强了安全性,但收效甚微,往往导致用户的沮丧和困惑。
- 避免限制用户必须使用的字符组合;限 制字符类型的数量就足够了。例如,Facebook、Discord 和 Stripe 不要求特定字符类型组合,Google 的密码政策仅要求“至少两种类型的字母、数字、符号。”
- 不要强制定期更改密码,因为这会给用户的记忆带来不必要的负担。相反,只在凭据有被泄露风险时要求更改密码。
- 在明确最低密码要求和密码强度提示之间仅选择一种限制,以防止用户出现误解。
- 避免过多显示复杂规则,防止用户在阅读不必要的错误上分心。
- 避免使用密码提示,以免给潜在攻击者带来便利。
步骤 2:提供不同产品的自定义
我们为最低密码策略提供灵活的配置选项,并推荐值以减少开发者的学习曲线,并提供开箱即用的登录体验。这些选项包括:
- 最小长度:默认值为 8 个字符,最小为 1 个字符。
- 最小所需字符类型:不建议限制,即设置为 4 种中的 1 种。
- 密码限制词汇:建议启用所有限制。用户不能避免触发相同的词汇,但允许添加三个或更多不连续字符来增加密码的复杂性。这增加了密码的无序性。
- 禁止泄露密码:使用可靠的泄露密码数据库支持,防止用户使用相同的密码以避免直接目录攻击。
步骤 3:通过固定值确保安全
对于不能进行自定义的参数,我们实施了备份逻辑以确保密码安全。如果你有特定的自定义需求,请随时告诉我们。
- 密码验证速率限制:我们限制了连续错误密码验证的次数和暂停登录的冷却时间。这可以防止持续的密码攻击。此外,我们提供了一种用于连续失败密码验证的 webhook,你可以使用它来发送邮件通知或暂停高风险的账户。
- 默认情况下,我们在重置密码和刷新令牌后清除此设备以外的会话。这一额外的安全层有助于防止未经授权的帐户访问,以确保你的数据保密和安全。
结论
通过这三个简单的步骤,你可以简化配置你的密码体验的过程,找到安全性和用户便利之间的最佳平衡。Logto 使设置安全且用户友好的认证系统为你的产品变得容易。敬请期待我们的即将推出的 MFA 功能,并像从未有过的那样掌控你的产品的安全。