关于处理密码强度是用户的责任还是系统管理员的责任,有一个长期的讨论。显然,密码是一个非常私密的东西,但很明显,弱密码也会危及整个组织和其他用户的数据。
有哪些方法可以确保用户选择强密码和/或选择不是暴力攻击中第一个测试密码之一的密码?
关于处理密码强度是用户的责任还是系统管理员的责任,有一个长期的讨论。显然,密码是一个非常私密的东西,但很明显,弱密码也会危及整个组织和其他用户的数据。
有哪些方法可以确保用户选择强密码和/或选择不是暴力攻击中第一个测试密码之一的密码?
我能想到几种方法。
需要某些字符组合
这是一种常用的技术。要求用户输入一定的字符组合,例如大写单词、非大写单词、数字和符号的混合。强制使用最小密码长度。不过不要过度限制,因为它可能会迫使用户以不安全的方式混合组合。
Password1234并不比password更安全。
这种技术还可以限制强密码。请参阅:XKCD #936:短复杂密码,还是长字典密码?
使用黑名单拒绝常用密码
维护常用破解密码黑名单,不允许用户注册使用。这可能被证明是需要维护的大量工作。
教育、威胁和工具。
安全问题的第一个缓解措施是招募用户。无论如何,如果没有他们的意识,您将无法获得良好的安全性,因此您不妨寻求他们的帮助。发布有关如何选择密码的指南。
为了加强前一点,给他们一点压力(只是一点点)。说出决定性的话:“负责任”。人是人,有些人需要额外的激励;值得注意的是,注意明确说明谁将进行故障攻击,这将强调问题的严重性。如果您作为服务器维护者不做功课,人们将不会相信安全问题的重要性。这些小而隐蔽的威胁将把用户推到他们警觉的稍微不舒服的区域。不要过度!您需要遵守规则的用户,而不是与您的系统作对的用户。
在这一点上,帮助用户。密码生成的基本事实是人类不擅长随机性。但是随机性是密码所需要的。由于这是一个 Web 应用程序,因此您有一个受信任的 Web 服务器——“受信任”的意思是密码是为了确保该服务器的安全,因此服务器本身不能成为敌人(这没有任何意义)。因此,使用该服务器:包括密码生成器。可以产生良好密码的东西,一键即可访问。
密码生成的两个方面是密码不能被猜测,但仍然必须记住。通过给出密码生成规则,您假设用户用来记住密码的助记符将与创建密码的过程完全匹配。这是人为的限制。考虑著名的XKCD 密码生成器:生成器不是要选择四个“有意义”的词一起使用;相反,它是关于随机选择四个单词然后,只有这样,才能为它找到一个“意义”(例如有蹄类哺乳动物思考蓄电装置)。这突出了密码是如何产生的:使用随机性,然后训练大脑来应对结果。
我非常喜欢的密码生成方案是这样的:生成两个字母,然后是两个数字,然后是两个字母,然后是两个数字。为了取悦不灵活的应用程序界面,前两个字母小写,其他两个大写。该生成过程的熵为10 4 *26 4,即略高于2 32。32 位熵还不错:平均需要超过 20 亿次尝试才能破解这种密码。这对于在线安全来说已经足够了(您的服务器“尝试”那么多密码需要很长时间)。另一方面,我发现这个随机密码很容易记住. 试试看 !您已经记住了电话号码,它们是纯数字的;这些字母是大脑的重要“锚”,只会让记忆更容易。这里有五个新生成的那种密码(我没有选择它们):
sf57HD04
sd82PI16
ny21BF75
xv53AQ36
jz91EQ92
对于他们每个人,我打赌你已经找到了一种简单的方法来在你的大脑中“重建”它,就好像你以一种诙谐的方式创造了它一样。但由于它们是用真正的随机性生成的,它们的熵是完整的。
我还要补充一点,如果对登录尝试有很好的限制,那么弱密码可以得到显着缓解。如果您的哈希文件丢失且未被检测到,它不会保护您,但此时它更多的是管理员问题。对更高安全性的最大担忧是密码可以从其他可能受到损害的站点重复使用。制作与用户不直接匹配的用户名是解决此问题的一种不错的方法。即使我知道 Bob Worker 使用 BobW0rker12345 作为他的 Facebook 密码,如果我不知道 Bob Worker 的登录凭据,那么访问他的 Facebook 密码对我没有帮助。
密码复杂性要求还有助于确保它不容易被猜到,但也会带来各种愚蠢的用户技巧警告,例如人们写下密码或对您的系统感到直接沮丧并直接尝试与您的系统作斗争,因为这使他们的生活变得困难,因此您应该始终权衡密码复杂性要求的风险与回报。有时它确实是必要的,如果是这样,那么它就进入了用户教育的第三个也是最关键的点。
您的用户必须了解为什么需要安全级别并愿意参与。最终,您的用户总体上比您更有创造力,他们会做您没想到的事情,除非他们了解重要性并投入其中,否则会损害安全性。
答案应该很大程度上取决于密码的用途。
有没有类似论坛的东西?然后不要通过强迫用户将默认密码中的 o 替换为 0 来惹恼用户。这是他们在放弃您的网站之前所能做的。随时通知他们他们的密码很烂,您不会承担任何责任,但不要强迫他们使用他们能记住的唯一复杂密码 - 他们的 PayPal 帐户...
是不是有点像商店?然后警告用户他们密码的弱点,并可能让他们确认两次,包括“我知道我的密码比其他人更有可能被破解,当这种情况发生时我不会来找你哭”声明。但是不要强迫他们使用他们不记得的密码——我认为密码管理器应该是标准的,但事实并非如此,而且您的用户不应该将密码重置功能视为默认的登录方式考虑提供双因素身份验证或OpenID。
它实际上是发射核武器或触发国际空间站生命支持系统的网络界面吗?在这种情况下,仅使用密码身份验证本身就是一个严重的缺陷,尽管不如实际将这些东西连接到互联网那么糟糕。