我们真的需要一个长而复杂的网站密码吗?

信息安全 密码 验证 密码策略
2021-08-15 08:33:18

大多数处理重要信息的网站(例如 Gmail)都有某种蛮力保护。有时,如果您尝试超过 X 次,它会锁定帐户或至少给您一个验证码来解决。

目前所有的安全专家都在说同样的话:制作长的、混合的字符、高熵的密码。如果您考虑 RSA 密钥或可以离线解密的东西,这很有意义,但是当我们谈论在线帐户密码时,它真的很重要吗?

例如,我们只使用 6 个英文字母为 Gmail 创建密码。这大约是 26^6 = 3.09 亿个组合。如果我们认为我们可以每秒测试 1 个密码(如果您考虑到 Gmail 验证码,我认为这比我们实际可以更快),我们将需要长达 10 年的时间来破解,平均需要 5 年。

需要考虑的要点:

  • 如果您在不同的网站上使用相同的密码,另一个网站可能会被黑客入侵,您的密码可能会被泄露。我假设密码是唯一的。仅用于 Gmail。
  • 如果有人可以获取数据库,他们可能会暴力破解您的密码哈希值。我假设该网站至少使用了一个加盐哈希(黑客不太可能尝试破解所有密码)和/或数据库被黑客入侵的可能性很小(这是 Gmail 的一个公平假设)
  • 我还假设您的密码不是字典单词或容易猜到的东西。这应该排除多个帐户的暴力破解(例如,跨多个帐户测试相同的公共密码)。

只要我们遵循其他安全措施,就可以假设我们不需要非常长的网站密码?如果我们建议人们使用长密码只是因为他们通常不遵循其他安全建议(跨帐户使用相同的密码等)。我们不是真的想解决症状而不是原因吗?

PS:其他一些问题几乎解决了同样的问题,但答案总是认为该人在网站上使用相同的密码或者网站数据库很容易被盗。

4个回答

以下内容并没有真正做到这一点,但总而言之......

在理想的世界中,在线资源不应该需要复杂的密码。

但是,在那个理想的世界中,我们依赖系统管理员来强化系统以防止未经授权访问“密码文件”,以下将最大限度地降低风险:

  • 安全地配置基础设施;
  • 及时应用补丁;
  • 进行某种形式的监控,以在零日漏洞利用情况下识别危害(以便可以“告知”用户更改密码);
  • 拥有并遵循“安全”的编程/开发方法;
  • 只雇用值得信赖的人。

对于许多站点来说,它们的完整组合是不可能的。

上面列表中的弱点可能会导致完全绕过密码的漏洞利用,但无论成功利用的性质如何,可以肯定的是,在获得对系统的未经授权的访问后,攻击者将尝试泄露密码文件并随后暴力破解它以帮助其他系统的进一步妥协(通过利用密码回收)。

因此,虽然不能保证强(更好)密码可以防止所有坏东西,但它可以帮助减轻提供商解决方案中的弱点(无论是否已知)。

为免生疑问,我们还依赖服务提供商执行以下操作:

  • 对密码应用散列和加盐;
  • 确保永远不会以明文形式交换密码。

我猜对于大多数最终用户来说,关于密码复杂性和长度的决定将归结为网站(以及密码)允许访问的信息。

我的建议是:如果它很重要,请使用复杂的密码,以便在系统受到威胁时很可能首先发现其他人的密码。但是,如果某些琐碎和便利更重要,请尝试使用较弱的密码,但要接受黑客攻击可能导致无法访问帐户和/或从帐户中释放信息的事实。

对于许多网站所有者来说,我怀疑要求使用复杂密码的决定是 FUD 和希望通过增加暴力破解密码的时间来最大限度地减少控制严重失败的影响的组合,从而有更长的时间来纠正和最大限度地减少实际用户帐户泄露(尽管如果攻击者可以访问密码哈希,他们可能有足够的系统访问权限以其他方式破坏系统)。

长密码建议是为了保护密码不被破解,如果有人可以访问该密码的哈希值。

hashcat 之类的工具可以轻松(使用 gpu)测试 93800M c/s md5 哈希

作为用户,您通常不知道该站点如何存储您的密码,因此最好使用长密码来缓解这些攻击。

选择好的密码很难。人类和我们对模式的偏好根本不擅长它。将其乘以我们随着时间积累的数十个帐户,这就是问题的根源。

所以是的,消除错误密码和密码重用可以解决创建软目标的问题,但它并不能解决维护所有这些帐户和密码的根本问题,这就是导致错误密码和密码重用的根源地方。因此,说“只需遵循良好的密码安全策略”是很好的,你会很安全,但如果不解决帐户管理问题,你还没有解决任何问题。

所以答案是什么?使用密码管理器。这解决了问题。当您将密码创建和管理问题转移到专门为此目的而设计的工具时,默认情况下您会获得强密码,并且无需再次重复使用密码。这不是一个完美的解决方案(什么都不是),但它是我们目前拥有的最好的解决方案,并且提出了密码复杂性和长度的问题,因为当您不是必须创建和记住密码的人时,您不再关心它有多复杂和多长,只是它的生成具有足够的熵以使其变得强大,而密码管理器可以为您提供。

对于任何使用本地密码身份验证的 Web 开发人员来说,唯一合理的假设是:

  1. 他们的用户将对所有内容使用相同的密码;

  2. 该网站已经被入侵,即使他们还没有完成编写它;

  3. 这种妥协的后果将承担一些非常昂贵的法律责任。

(请注意,我并不是在暗示,也不是在暗示,所有——甚至任何——Web 开发人员都是理智的,或者对他们正在做的事情有足够的了解,以至于如果他们知道自己在做什么,他们正在做的事情将会是疯狂的。简单的散列,无论是普通的还是加盐的,在计算上都足够接近纯文本,以至于这些天不用担心,但人们仍然会发现纯文本、未加盐的 MD5 等散布在网络上的所谓“教程”中人们正在应对并粘贴到各地服务器上的生产环境中。)

这些假设意味着,即使我正在运行一个具有极其本地化应用程序的网站,该应用程序致力于让人们列出有机、自由放养、本地种植的无麸质仓鼠零食的推荐,我必须将您的密码视为您的密码PayPal、eBay 和电子邮件帐户都结合在一起(因为它很有可能是有效的)。这意味着,为了保护我自己相当珍贵的背后,无论你喜不喜欢,我都必须至少采取一些最小的步骤来保护你的宝贝。理想情况下,这意味着使您的密码不能被简单地暴力破解(使用加密随机盐和昂贵的密钥派生函数)并对字符数设置绝对下限(理想情况下,在合理范围内没有上限), 同时仍然允许您使用容易记住的东西(“必须使用至少一个重音字符、一个表情符号和一个平假名”的废话)。换句话说,让您使用非常短的密码会使我的个人臀部暴露于无根据的危险,所以不要指望我允许它。那就是如果我的网站除了您的密码之外没有任何秘密。如果我负责与您相关的任何实际个人数据,预计我代表您的偏执狂会急剧增加。