假如你认为密码只有严格按照大小写和字符/符号序列才是正确的,你可能会对此感到惊讶。为了方便用户,Facebook 允许密码存在细微的差异,并且它依然是安全的。
密码输入失误很常见
诸如 Facebook 之类的网站都面临着一个难题。他们鼓励用户设置又长又复杂的密码,但这类密码输入起来非常困难。虽然可以使用密码管理器来解决这个问题,但大多数人并没有这样做。这双重原因导致密码输入错误变得非常普遍。
那么,Facebook 应该如何处理这个问题呢?
难道要因为密码有轻微的错误就直接拒绝用户的访问,让用户再次尝试并感到沮丧吗?或者,他们应该意识到用户提供的密码很可能只是略有拼写错误,并通过忽略这些错误,让用户顺利浏览猫咪动图和婴儿照片吗?
Facebook 如何处理密码错误
正如 Facebook 工程安全基础设施团队的前软件工程师 亚历克·马菲特 在一段视频中所解释的那样,Facebook 选择了后者。 如果你输入的密码与正确密码非常接近,他们可能会将其视为正确的密码。 具体规则很简单,如果满足以下任何条件,Facebook 都会接受不正确的密码:
你的 Caps Lock 键处于开启状态,导致大小写颠倒。
你在密码的开头或结尾多输入了一个字符。
密码的第一个字符应该是小写的,但你输入的是大写的。
可以看出,这些规则都围绕着用户在输入密码时可能出现的细微失误。在某些情况下,这可能是自动更正功能导致的,比如单词的首字母被自动大写。 如果你输入的错误密码符合这些特定的规则,你甚至不会意识到自己输错了——你只会发现自己已经成功登录。
例如,如果你的密码是“letMeIn”,那么Facebook也会接受“LETmEiN”(因为它是大小写直接反转)和“LetMeIn”(因为第一个字母大小写错误)。它还会接受像“1letMeIn”和“letMeIn2”这样的变体,因为它们只是在开头或结尾多了一个字符。 但是,像“LETMEIN”、“letmein”或“12LetMeIn”这样的变体则不会被接受。
这个过程仍然安全
乍一看,Facebook 这种宽松的密码策略似乎并不安全。 但实际情况更加复杂。 尽管我们很容易想到那些旧的黑客电影,里面展示了黑客在几分钟内快速暴力破解密码,但现实中的黑客攻击并非如此。 暴力破解密码确实存在,但它与电影中的呈现方式截然不同。 正如 xkcd 的著名漫画所展示的,随着密码长度的增加,破解密码所需的时间会成倍增加。增加密码的复杂性会有所帮助,但并不像你想象的那么大。
因此,Facebook 允许的其中一种情况,即密码开头或结尾的额外字符,反而会让暴力破解变得更加困难。 黑客在尝试输入一个额外字符之前,必须先拥有正确的密码。
特别值得注意的是 Caps Lock 键的情况。 我首先在记事本上手动输入我的密码,然后反转大小写,再将结果粘贴到 Facebook 上,结果被拒绝。 然后,我打开 Caps Lock 键,并像没有开启一样输入我的密码,结果成功登录。这表明 Facebook 不仅检查你输入的内容,还会检查你输入的方式。 在这种情况下,暴力破解是行不通的,因为没有模拟 Caps Lock 键的破解比仅仅针对密码本身更具挑战性。
更新:正如信息安全顾问 Paul Moore 在 Twitter 上指出的那样,Facebook 很可能只存储你的原始密码(经过适当的散列和加盐处理),而不是你的密码变体。 当你提交登录密码时,系统会首先检查它是否与你的原始密码匹配。 如果不匹配,Facebook 会通过这些变体来检查你提交的密码。 例如,如果你的 Caps Lock 键开启了,Facebook 会获取你提交的密码,反转字母的大小写,然后再试一次。 如果这仍然不成功,Facebook 会尝试下一个可能的情况。 本质上,Facebook 正在做你收到“密码错误”消息后会做的事情——检查密码输入中可能存在的意外错误并进行修正。 这让整个过程对用户来说不那么令人沮丧。 而且,它并不会降低安全性,因为仍然需要一定的正确密码信息,而且可接受的变体范围也很窄。
更重要的是,暴力破解并不是访问社交网络和其他账户的主要方法。 社会工程和密码泄露更容易被利用。 如果你的密码重置问题涉及个人信息,那么其中至少有一些信息是公开可获得的。如果你的重置问题与你的出生地、母亲的娘家姓或高中吉祥物相关,攻击者就有可能找到答案。届时,攻击者可以重置你的密码,而完全不需要猜测或破解你的密码本身。
不幸的是,许多人仍然在每个需要登录凭据的网站上使用相同的电子邮件和密码组合。 你不需要费力寻找大量的密码泄露事件,只需要知道如果长期在多个地方使用相同的电子邮件和密码,你的密码就已经存在风险,而不是 Facebook 的策略导致的安全问题。
如果你不确定自己是否是数据泄露的受害者,请访问 haveibeenpwned.com 并检查你的密码是否被泄露。 你很有可能至少有一个账户在某个地方被泄露。
你应始终保护自己的账户
如果你仍然担心 Facebook 的这项政策可能会让你更容易受到攻击,那么你可以采取一些措施。 首先,不要在每个网站上使用相同的密码。 相反,使用密码管理器,让它为你使用的每个不同网站生成唯一的长密码。 这样一来,下次你看到自己使用的某个网站被入侵时,你只需要更改一个密码,并且知道这个被泄露的密码不会给黑客带来任何好处,你就会感到安全。
在强化密码之后,在任何提供双重身份验证的网站上启用双重身份验证。 Facebook 确实提供了双重身份验证,所以你也应该在那里设置。 最好的双重身份验证依赖于智能手机上的应用程序,这些程序会定期生成新代码或物理密钥。 虽然基于短信的双重身份验证总比没有好,但它仍然容易受到社会工程攻击。 因此,如果你可以使用身份验证应用程序或物理密钥,就应该这样做。 并准备好备份,以防你的手机或密钥出现问题。
通过这种组合,无论 Facebook 的密码策略如何,你的帐户都会更加安全。 你至少应该使用密码管理器和唯一密码,但将它们与双重身份验证结合使用会更好。
无需惊慌,享受便利
对于 Facebook 的密码策略,人们很容易担心它的安全性较差,但现实是它带来的好处大于坏处。 安全是一种权衡。 你对系统的限制越多,访问它就越不方便。 但是,当你添加更方便的访问权限时,你就会失去安全性。 关键是要找到一个平衡点,既能保护你的用户,又不会让他们感到沮丧。 Facebook 在这方面做出了一项权衡,这或许是一个可以接受的决定。