更新:我下面的问题和疑虑归结为:“我应该拒绝明显糟糕的密码,如'hellomydarling'或'password'吗?我的猜测是肯定的,我想知道到什么程度。我正在使用密码强度估计器来协助接着就,随即。
在密码选择方面,我一直在研究可用性与安全性。我在这个 Stack Exchange 上发现了这个非常有趣的引用。
“以牺牲可用性为代价的安全是以牺牲安全为代价的” https://security.stackexchange.com/a/6116/39548
我的想法和问题源于此。我正在开发一个密码强度计的原型,它出现在新密码选择输入字段(底部的 JsFiddle)旁边。
我制定的政策是,如果我认为密码“无法使用”,则让我的验证器失败,并让“更好”的密码通过。
但是,我担心禁止“ teenagemutantninjaturtles ”但让“密码必须至少为 8 个字符”通过的效果。两者都是错误的密码,但我的原型确实只能很好地处理第一个。
此密码强度计基于 Dan Wheeler 的 zxcvbn “真实密码估计库”,可从https://github.com/lowe/zxcvbn获得,并在此处详细讨论:https ://tech.dropbox.com/2012/04/zxcvbn -现实密码强度估计/
我喜欢 zxcvbn 因为它实际上使用字典来帮助识别弱密码或差密码。但是,我认为纯文本密码短语过于宽容。例如,它的股票实施将为“teenagemutantninjaturtles”授予最高分(4/4)。
然而,Ars Technica 的 Dan Goodwin 指出,如果没有真正的随机性,密码短语并不能非常有效地阻止有动机的攻击者 ( http://arstechnica.com/security/2013/10/how-the-bible -and-youtube-are-fueling-the-next-frontier-of-password-cracking/2/)。
所以这就是为什么我试图通过查找与 zxcvbn 字典轻松匹配的密码并将它们简单地标记为“不可用”来支持密码强度计的行为。
供您参考,我们透露最小密码长度为 6(即使它们很烂),最大为 50 个字符。没有其他限制或要求。尽管我们确实提供了诸如这些示例之类的提示,但我们并未披露密码无法使用的确切原因(例如,它与字典单词匹配、或过于简单、或与模式匹配等) 。
以下是我的实际问题:
考虑到密码强度计很难从“差”密码中正确评估“好”密码,在考虑人类行为和安全性时......
- 甚至包括密码强度估计器是否值得?
- 是否值得尝试用更严格的规则来支持现有的图书馆?
- 当我禁止他们认为是个好主意的密码时,我是否只会让我的用户感到沮丧?(我担心这可能会导致他们放弃或将密码复制到他们的显示器等)。
- 如果这不是一个好主意,那么提醒用户和阻止最糟糕的密码的最佳方法是什么?
注意:我并不是想发明自己的安全协议。一旦我们通过 https 获得密码,我们就使用 bcrypt 以高成本/迭代来存储它。为了争论,让我们假设这是我剩下要解决的唯一安全问题(事实并非如此)。
我只是想鼓励我们的用户更好地使用密码。
JsFiddle:
我已经将我正在进行的工作复制到了一个 jsFiddle,我自己的更改在脚本部分中(并且 zxcvbn 是一个包含的资源)。
为了使密码强度计更有用,还做了很多评论和工作,这也是为什么会有计时器和其他东西的原因。
谢谢你的想法。