TLDR:我们已经要求对某些用户进行双重身份验证。我正在散列、加盐和做一些事情来鼓励长密码。一般来说,我对密码复杂性规则的优点不感兴趣。有些是法律要求的,有些是客户要求的。我的问题相当狭窄:我是否应该将诸如 Tr0ub4dor&3 之类的 leetspeak 密码检测为字典单词,从而使主要由单个字典单词组成的密码(即使 leeted)失败。多字密码短语总是被接受的,不管是否 leeted,这只是关于那些选择使用更传统的短密码的人的问题。
我是即将公开敏感个人信息(主要是犯罪历史、SSN等)的政府网站的首席开发人员。该网站将被公众使用,用于对员工进行背景调查等。
在后端,我正在存储使用 PBKDF2 散列的密码,并在每个用户的基础上进行非常高的迭代,因此针对更强密码的蛮力散列攻击是不现实的(目前),并且网站将用户锁定 10 分钟经过五次糟糕的尝试,所以你也不能真正那样暴力。
我的客户/合作伙伴对我实施的密码规则的严重性提出了一些反对意见。
显然,我希望人们使用 16-20+ 个字符的密码,但这是一个行动缓慢的官僚机构。因此,除了允许/鼓励那些好的密码之外,我还必须允许一些较短的“硬”密码。我只是想限制我们的曝光。
特别是,“没有字典单词”的要求令人沮丧,因为我不允许使用经典的 leetspeak 密码,例如XKCD 著名的 Tr0ub4dor&3。(对于那些好奇的人,我通过 leetspeak 排列翻译器(包括删除字符)运行建议的密码,然后将每个排列与字典进行比较)
我是不是太严重了?我是“Avids 可用性规则”的坚定支持者——以牺牲可用性为代价的安全是以牺牲安全为代价的。但在这种情况下,我认为这更像是一个习惯/教育问题。我允许没有限制的 diceware/可读密码短语密码,只有“普通”密码有更高的要求。XKCD #936: 短复杂密码,还是长字典密码?
我应该尝试通过更好的 UI 帮助来解决这个问题吗?我应该坚持我的枪吗?最近发生的多次备受瞩目的黑客攻击,尤其是那些暴露密码的黑客攻击让我觉得我是对的,但我也不想无缘无故地让事情变得愚蠢。由于我很好地受到了蛮力攻击的保护(我认为/希望),这是不必要的复杂性吗?或者只是很好的深度防守?
对于那些无法理解密码短语或真正随机密码的人来说,“两个单词加数字/符号”密码似乎既简单又难破解,如果我能让人们阅读说明的话……
想法:
- 更好的密码提示/更显眼地显示(太主观了?)
- 更好的强度计(基于 zxcvbn 的东西? - 在客户端而不是在提交之后会使字典单词失败)
- 禁止所有“短”密码,强制人们只使用密码,这使得规则更简单?
- “给我设置密码”按钮,为他们生成密码并让他们将其复制到密码字段中
- 放弃并让 leetspeek 密码通过?
以下是我目前在密码说明/规则中的内容:
16 个字符或更长的密码(最大无限制)
或者
至少八个字符
- 包含以下三个
- 大写
- 小写
- 号码 0123456789
- 符号 !@#$%^&*()_-+=,./<>?;:'"
- 不基于字典单词
- 不是您的用户名
不被接受的密码示例
- Troubador(单字典词)
- Troubador&3(单字典单词加数字和符号)
- Tr0ub4dor&3(基于单个字典单词)
- 12345678(不包含3/4字符类型)
- abcdefgh(不包含 3/4 字符类型)
- ABCDEFGH(不包含 3/4 字符类型)
- ABCdefgh(不包含 3/4 字符类型)
- ABC@#$%!(不包含 3/4 字符类型)
- ab12CD(太短)
将被接受的密码示例(请勿使用这些密码中的任何一个):
- 正确的马电池订书钉(Diceware 密码)
- 浮动的东西应该成为任务(可读密码 - 链接到 makemeapassword.org)
- 好密码4!(多字、大写、小写、数字、符号)
- Yyqlzka6IAGMyoZPAGpP(使用大写、小写和数字的随机字符串)