为什么要求密码包含特殊字符、大小写字母以及数字时会更安全?允许而不是要求这些字符不是更安全吗?
假设有人想破解密码,如果他们已经知道密码至少包含 1 个特殊字符、1 个大小写字母和 1 个数字,对他们来说不是更容易,因为它是必需的。如果密码被允许而不是必需,而不是密码包含这些字符的可能性?
为什么要求密码包含特殊字符、大小写字母以及数字时会更安全?允许而不是要求这些字符不是更安全吗?
假设有人想破解密码,如果他们已经知道密码至少包含 1 个特殊字符、1 个大小写字母和 1 个数字,对他们来说不是更容易,因为它是必需的。如果密码被允许而不是必需,而不是密码包含这些字符的可能性?
它被认为是安全的,免受字典攻击等几种攻击。由于字典攻击来自带有常用词的词表。如果密码符合标准,最好在前端和后端要求这些规则并进行验证。
在开发中,您可以使用位于此处的 OWASP ASVS:https ://github.com/OWASP/ASVS/blob/master/4.0/en/0x11-V2-Authentication.md
有一个清单,例如:
如果您遵循 OWASP 之类的标准,那么保护您的身份验证将会很好。
允许而不是要求这些字符不是更安全吗?
是和不是。
否:正如 Francis Al Victoriano 所说,对抗字典攻击很有用。
是的:在一个完美的世界中,除了密码不为空之外,您应该不需要任何东西。这样,正如您所说,攻击者不会对密码可能包含哪些内容有任何提示,甚至不知道他们应该在多长的时间内开始暴力破解。
但是在这个完美的世界中,您的用户知道他们在做什么,他们知道什么是强密码,并且为每个应用程序使用一个密码。可悲的是,在现实世界中,您永远不应该信任用户,因此您必须确保他们选择的密码不会“太弱”。
那么,我们是否应该强制用户在其密码中包含多个字符集?
有人说我们应该这样做,因为如果我们不这样做,用户会选择像字典单词这样的弱密码。
有人说我们不应该(像NIST一样),因为:
您对密码策略添加的限制越多,用户就越会被它惹恼(他已经对他必须使用密码的事实感到恼火)并且他会越多地试图绕过它并且很可能会削弱他的密码在此过程中(例如,您的超级复杂密码将在便利贴上结束,因为用户无法记住它)。
说到绕过,典型的密码策略是最少 8 个字符,至少一个大写,一个小写,一个数字和一个特殊字符。给你:P@ssw0rd。让我们检查一下 Have I Been Pwned 是否认为这是一个好密码,剧透警告:不。
它可以防止用户选择密码。
我对此事的看法是遵循 NIST 指南: