简体中文
  • 密码
  • 身份验证
  • 登录体验
  • 产品
  • 安全

设计你的密码策略

通过 Logto 确保认证过程的安全性,获得有关创建符合要求、安全且用户友好的产品密码策略的见解。

Ran
Ran
Product & Design

你的密码真的能保护你吗?

在你的产品中,你可能需要依赖经典的认证方法——密码。虽然密码不会被完全取代,但与替代认证方法相比,它们更容易受到攻击。你的密码策略真的安全吗和合规吗?即使你熟悉各种密码策略技术,把它们叠加在一起真的有效吗?

我们通过对 NIST 规范的深入研究、检查领先产品的密码策略,并确保用户体验的平衡,解决了密码策略设计和配置的复杂性。强调密码合规性的重要性,我们的目标是减轻与密码策略相关的挑战,并提供一个全面的流程,通过与其他多因素认证 (MFA) 验证因素的无缝集成,确保账户安全。

用户需要什么样的密码?

产品设计师经常在他们的产品是否足够安全的问题上苦苦挣扎,从而实施严格且复杂的密码策略。例如,要求大写、小写字母、数字,甚至是特殊字符的组合,或者要求员工定期更改密码。

当面临这些密码要求时,用户很快就会抱怨:“为什么它必须这么复杂?记住我的密码感觉就像是全职工作!”这让产品经理挠头,想知道更复杂的密码策略是否一定更好。让我们分析一下综合密码策略的组成部分以找出答案。

在下一部分中,我们将深入探讨密码策略之间的细微差别,找到安全性和用户便利之间的平衡。我们将探讨如何定义正确的密码要求,并提供数据支持的见解来支持我们的做法。

所有密码因素的清单

首先,通过分析大量产品和 NIST 规格,我们编制了一份全面的密码因素列表和设计建议。

我们大致将它们分为三组:

  1. 密码设置要求:用户设置密码的最低要求。
  2. 密码安全监控:检测到密码风险时的及时行动和反馈。
  3. 密码用户体验:提升在密码创建和验证过程中的用户输入体验。
类目因素分析(参考 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 种。
  • 密码限制词汇:建议启用所有限制。用户不能避免触发相同的词汇,但允许添加三个或更多不连续字符来增加密码的复杂性。这增加了密码的无序性。
  • 禁止泄露密码:使用可靠的泄露密码数据库支持,防止用户使用相同的密码以避免直接目录攻击。
Password policy

步骤 3:通过固定值确保安全

对于不能进行自定义的参数,我们实施了备份逻辑以确保密码安全。如果你有特定的自定义需求,请随时告诉我们。

  • 密码验证速率限制:我们限制了连续错误密码验证的次数和暂停登录的冷却时间。这可以防止持续的密码攻击。此外,我们提供了一种用于连续失败密码验证的 webhook,你可以使用它来发送邮件通知或暂停高风险的账户。
  • 默认情况下,我们在重置密码和刷新令牌后清除此设备以外的会话。这一额外的安全层有助于防止未经授权的帐户访问,以确保你的数据保密和安全。

结论

通过这三个简单的步骤,你可以简化配置你的密码体验的过程,找到安全性和用户便利之间的最佳平衡。Logto 使设置安全且用户友好的认证系统为你的产品变得容易。敬请期待我们的即将推出的 MFA 功能,并像从未有过的那样掌控你的产品的安全。