3

为什么要求密码包含特殊字符、大小写字母以及数字时会更安全?允许而不是要求这些字符不是更安全吗?

假设有人想破解密码,如果他们已经知道密码至少包含 1 个特殊字符、1 个大小写字母和 1 个数字,对他们来说不是更容易,因为它是必需的。如果密码被允许而不是必需,而不是密码包含这些字符的可能性?

4

2 回答 2

3

它被认为是安全的,免受字典攻击等几种攻击。由于字典攻击来自带有常用词的词表。如果密码符合标准,最好在前端和后端要求这些规则并进行验证。

在开发中,您可以使用位于此处的 OWASP ASVS:https ://github.com/OWASP/ASVS/blob/master/4.0/en/0x11-V2-Authentication.md

有一个清单,例如:

  1. 验证用户设置的密码长度至少为 12 个字符。
  2. 验证是否提供了密码强度计以帮助用户设置更强的密码。

如果您遵循 OWASP 之类的标准,那么保护您的身份验证将会很好。

于 2019-11-07T00:52:41.610 回答
0

允许而不是要求这些字符不是更安全吗?

是和不是。

否:正如 Francis Al Victoriano 所说,对抗字典攻击很有用。

是的:在一个完美的世界中,除了密码不为空之外,您应该不需要任何东西。这样,正如您所说,攻击者不会对密码可能包含哪些内容有任何提示,甚至不知道他们应该在多长的时间内开始暴力破解。

但是在这个完美的世界中,您的用户知道他们在做什么,他们知道什么是强密码,并且为每个应用程序使用一个密码。可悲的是,在现实世界中,您永远不应该信任用户,因此您必须确保他们选择的密码不会“太弱”。

那么,我们是否应该强制用户在其密码中包含多个字符集?

有人说我们应该这样做,因为如果我们不这样做,用户会选择像字典单词这样的弱密码。

有人说我们不应该(像NIST一样),因为:

  • 您对密码策略添加的限制越多,用户就越会被它惹恼(他已经对他必须使用密码的事实感到恼火)并且他会越多地试图绕过它并且很可能会削弱他的密码在此过程中(例如,您的超级复杂密码将在便利贴上结束,因为用户无法记住它)。

  • 说到绕过,典型的密码策略是最少 8 个字符,至少一个大写,一个小写,一个数字和一个特殊字符。给你:P@ssw0rd让我们检查一下 Have I Been Pwned 是否认为这是一个好密码,剧透警告:不。

  • 它可以防止用户选择密码。

我对此事的看法是遵循 NIST 指南:

  1. 最小长度为 12 个字符
  2. 密码强度计基于最新的泄露密码列表(如HIBP)和离线强度估计器(如zxcvbn),以帮助用户避免弱密码
  3. (可选)服务器端密码强度验证(基于步骤 2 的两个组成部分)如果您想确保您的用户选择一个强密码并且您不希望他或不能让他忽略密码强度计反馈。
于 2019-11-08T14:03:55.373 回答