为什么公司仍然以明文存储密码?

几家公司最近承认以明文格式存储密码。这就好比在记事本中存储密码,然后将其另存为.txt文件。出于安全考虑,密码应该进行盐化和哈希处理,那么为什么2019年不会发生这种情况呢?

为什么密码不应以纯文本形式存储

当一家公司以纯文本存储密码时,任何拥有密码数据库的人-或者密码存储在任何其他文件中-都可以读取它们。如果黑客获得访问该文件的权限,他们可以看到所有密码。

以纯文本存储密码是一种可怕的做法。公司应该对密码进行加盐和散列处理,这是另一种说法,即“向密码添加额外的数据,然后以一种无法逆转的方式进行扰乱。”通常情况下,这意味着即使有人从数据库中窃取密码,它们也是不可用的。当你登录时,公司可以检查你的密码是否与存储的加扰版本相匹配-但他们不能从数据库中“倒查”并确定你的密码。

那么,为什么公司要以明文存储密码呢?不幸的是,有时这些公司并不认真对待安全问题。或者他们选择以方便的名义损害安全。在其他情况下,公司在存储您的密码时做的一切都是正确的。但他们可能会添加过于热心的日志记录功能,即以纯文本记录密码。

有几家公司的密码存储不当

您可能已经受到不良实践的影响,因为Robinhood、Google、Facebook、GitHub、Twitter和其他网站以纯文本形式存储密码。

在谷歌的案例中,该公司对大多数用户的密码进行了充分的散列和加盐处理。但G Suite企业帐户密码是以明文存储的。该公司表示,这是它给域名管理员提供恢复密码的工具时遗留下来的做法。如果谷歌正确存储了密码,这是不可能的。当正确存储密码时,只有密码重置过程才能用于恢复。

当Facebook也承认以纯文本存储密码时,它没有给出问题的确切原因。但您可以从稍后的更新中推断该问题:

有时,公司在最初存储您的密码时会做好所有事情。然后添加导致问题的新功能。除了Facebook,Robinhood,Github和Twitter也意外记录了明文密码。

日志记录对于查找应用程序、硬件甚至系统代码中的问题非常有用。但是,如果一家公司没有彻底测试该日志记录功能,它可能会造成比解决的问题更多的问题。

在Facebook和Robinhood中,当用户提供用户名和密码进行登录时,登录功能可以看到并记录输入的用户名和密码。然后,它将这些日志存储在其他地方。任何有权访问这些日志的人都有接管帐户所需的一切。

在极少数情况下,像T-Mobile Australia这样的公司可能会忽视安全的重要性,有时是以方便为名。在一次后来被删除的Twitter交流中,T-Mobile的一名代表向一名用户解释说,该公司以明文存储密码。以这种方式存储密码允许客户服务代表查看密码的前四个字母,以进行确认。当其他推特用户适当地指出,如果有人入侵公司服务器会有多糟糕时,这位代表回应道:

该公司确实删除了这些推文,后来宣布将很快对所有密码进行加盐和散列处理。但没过多久,该公司就有人入侵了它的系统。T-Mobile表示,被盗的密码是加密的,但这不如散列密码。

公司应该如何存储密码

公司永远不应该存储明文密码。相反,密码应该加盐,然后进行散列。重要的是要知道什么是加盐,以及加密和散列之间的区别。

加盐会向您的密码添加额外的文本

加盐密码是一个直截了当的概念。该过程实质上是将额外的文本添加到您提供的密码中。

可以将其视为将数字和字母添加到常规密码的末尾。您可以键入“Password123”,而不是使用“password”作为密码(请不要使用这两个密码中的任何一个)。加盐也是一个类似的概念:在系统对您的密码进行哈希运算之前,它会向密码中添加额外的文本。

因此,即使黑客闯入数据库并窃取用户数据,也很难确定真正的密码是什么。黑客不会知道哪部分是盐,哪部分是密码。

公司不应该在不同的密码之间重复使用加盐的数据。否则,它可能会被偷或弄坏,因此变得毫无用处。适当变化的加盐数据还可以防止冲突(稍后将详细介绍)。

加密不是密码的合适选项

正确存储密码的下一步是对其进行散列。散列不应与加密混淆。

当您加密数据时,您可以根据密钥稍微对其进行转换。如果有人知道密钥,他们可以把数据改回来。如果您曾经玩过告诉您“A=C”的解码环,那么您已经对数据进行了加密。知道了“A=C”之后,你就会发现这条信息只是一个欧瓦廷的广告。

如果黑客用加密数据闯入系统,并设法窃取了加密密钥,那么您的密码也可能是纯文本。

哈希会将您的密码转换为乱码

密码散列从根本上将您的密码转换为难以理解的文本字符串。任何看哈希的人都会看到胡言乱语。如果您使用“Password123”,散列可能会将数据更改为“873kldk#49lkdfld#1”。公司应该在将您的密码存储在任何地方之前对其进行哈希处理,这样它就永远不会有您实际密码的记录。

散列的这种特性使其成为存储密码的一种比加密更好的方法。虽然您可以解密加密的数据,但不能对数据进行“解散列”。因此,如果黑客真的闯入数据库,他们将找不到解锁散列数据的密钥。

取而代之的是,当你提交密码时,他们将不得不做公司所做的事情。对密码猜测加盐(如果黑客知道使用什么盐),对其进行散列,然后将其与文件中的散列进行比较以寻找匹配。当您向Google或您的银行提交密码时,他们会遵循相同的步骤。一些公司,如Facebook,甚至可能会采取额外的“猜测”来解释打字错误。

散列的主要缺点是,如果两个人有相同的密码,那么他们最终将得到散列。这种结果被称为碰撞。这是添加随密码变化的盐的另一个原因。一个经过充分盐化和哈希处理的密码不会有任何匹配项。

黑客最终可能会破解散列数据,但这主要是一场测试每一个能想到的密码并希望匹配的游戏。这个过程仍然需要时间,这给了你时间来保护自己。

您可以采取哪些措施来防范数据泄露

您无法阻止公司不正确地处理您的密码。不幸的是,它比正常情况下更常见。即使公司确实正确存储了您的密码,黑客也可能入侵公司的系统并窃取散列数据。

考虑到这一现实,您永远不应该重复使用密码。相反,您应该为您使用的每项服务提供不同的复杂密码。这样,即使攻击者在一个网站上找到您的密码,他们也无法使用它登录到您在其他网站上的帐户。复杂的密码非常重要,因为您的密码越容易猜到,黑客就能越快地破解散列过程。通过使密码变得更复杂,您可以争取时间将损失降至最低。

使用唯一的密码也可以将这种损害降到最低。黑客最多只能获得一个账户的访问权,你可以更容易地更改一个密码,而不是几十个。复杂的密码很难记住,所以我们推荐密码管理器。密码管理器为您生成并记住密码,您可以调整它们以遵循几乎任何站点的密码规则。

有些网站,如LastPass和1Password,甚至提供检查您当前密码是否被泄露的服务。

另一个好的选择是启用两步身份验证。这样,即使黑客确实泄露了您的密码,您仍然可以防止未经授权访问您的帐户。

虽然你不能阻止一家公司对你的密码处理不当,但你可以通过妥善保护你的密码和账户来将后果降至最低。

相关:为什么应该使用密码管理器,以及如何入门

相关文章