如果密码从一个来源泄露,我怎样才能重复使用我的密码并仍然保护密码?

信息安全 哈希 客户端 相信 客户
2021-08-14 11:40:32

我知道所有服务器至少应该hash(password + salt)将我的凭据存储为+ salt,具有安全且众所周知的hash功能,并且salt对我来说是独一无二的,从安全且众所周知的来源生成。

问题是服务器应该这样做但可能不会,所以作为用户我不能信任他们。

在将密码发送到服务器之前,我正在寻找可以对密码执行的操作,这样如果服务器存储例如明文,它就不会损害我在其他服务器上的密码的安全性。

我正在考虑将hash(password + service)服务发送到服务器, "Facebook"例如"Amazon"这样,如果有人hash(password + service)从该服务以纯文本形式存储,就好像他们找到了我的密码 + 盐的哈希值,对于该服务来说是唯一的。

我已经看到了这个想法的一个问题:有人可以为每个服务创建一个彩虹表,从而将服务用作盐无用。

我知道规则不会发明您自己的加密/协议,这就是为什么我想知道是否存在用于保护自己的客户的已知协议?

4个回答

您正在尝试解决一开始就不应该遇到的问题:密码重用

这个概念很简单。您想出一个“好”的密码并将其用于所有事情。您的银行帐户、在线购物、您的电子邮件提供商等。

问题是,如果它被其中任何一个泄露,那么所有其他帐户都可能处于危险之中。这是完全不必要的风险!

我建议的方案呢?

你自己说过不要重新发明轮子。如果你真的要这样做,你要么必须编写一个为你计算哈希的应用程序,要么自己计算并存储它们。

已经有一些应用程序可以解决凭证存储问题,而且它们做得更好:离线密码管理器

为什么离线密码管理器更好?

因为它们会生成真正随机且唯一的密码。没有必要将密码学带入其中。无需以某种方式将我的电子邮件帐户密码绑定到包含字符串“gmail.com”的密码。

因为SN2\ZJ2Cw92DQx^{$OmqAC_P'xR|Md)[绝对是比 MD5 总和更好的密码hunter2+gmail.com01f9a94a0febf268495d08f5960e7f05如果您想知道的话,它是 )。

这个问题的既定解决方案是为不同的网站使用不同的密码以及密码管理器。这样你就不必重新发明轮子了。

我知道规则不会发明您自己的加密/协议,这就是为什么我想知道是否存在用于保护自己的客户的已知协议?

并非每个问题都必须通过技术性的、过于复杂的解决方案来解决。
不重复使用密码是一个优雅的解决方案。

我曾经使用一个浏览器扩展程序,它几乎完全按照您的建议进行。(它使用了我的实际密码 + 网站的 URL,将它们散列在一起,并从中生成了一个密码)。太好了……直到 eBay 让我更改密码,因为他们泄露了他们的数据库。那时,我必须记住哪些网站使用了一个密码,哪些使用了另一个密码。

另一个问题是,如果任何站点以纯文本形式存储了我的“密码”,那么攻击者可能已经识别出我的密码是如何生成的,并破解了它。

最后一个问题是 amazon.de、amazon.co.uk 和 amazon.com 等网站都需要共享密码。

我已切换到密码管理器 (LastPass),该密码管理器使用强大的、随机生成的 (diceware) 密码(以及我的重要帐户上的 2FA)进行保护。

我知道规则不会发明您自己的加密/协议,这就是为什么我想知道是否存在用于保护自己的客户的已知协议?

您在安全工程领域遇到的问题被称为“贪婪密码”模型。您访问的每个网站都认为它是整个网络上唯一的网站,并且他们认为要求您管理/记住复杂的密码是可以的。另请参阅 Peter Gutmann 的工程安全

您可以按照@MechMK1 的建议使用密码管理器。问题是,它只是解决了密码问题,使它更容易管理。您仍然需要在某个时间点使用真实密码。在风险管理框架中,您降低了风险,但并未消除风险。

您应该为每个非关键帐户使用一次性密码。我个人使用强随机密码生成器为每个贪婪网站生成随机的 32 字节密码。幽默 - 以一种病态的方式 - 一些网站无法处理长或复杂的随机密码。有些网站会让您提供较弱的密码。

一旦您登录到某个站点,他们就会为您提供该站点的令牌(cookie),您不再需要密码。如果您确实需要重新输入密码,请让浏览器从凭据存储中输入密码。

如果密码不在凭证存储中,则只需执行“密码恢复密码”过程。该站点将向您发送一封电子邮件,您可以使用该过程设置另一个一次性密码。我一直用它来处理过期的 cookie。

恢复过程电子邮件中发送的链接称为“自我验证 URL”我相信 Python 使用类似的方式来验证包。另请参阅 Peter Gutmann 的工程安全

几个帐户足够重要,以至于您需要一个真实的密码。例如,您的公司密码和您的 {Gmail|Yahoo|Hotmail|Apple|Microsoft|etc} 电子邮件帐户密码。对他们来说,使用强密码并将其写下来,以免丢失或忘记。然后将密码放入您的钱包或钱包中。更好的是,为关键帐户设置 2FA,以便攻击者同时需要您的密码 + OTP/令牌。

一些服务,如 Spotify,正在考虑一起取消密码。他们正在调整“密码恢复过程”以进行身份​​验证。当您想登录时,您输入您的电子邮件地址,他们会向您发送一个令牌链接。您不再需要密码 - 您只需要一个电子邮件帐户。

第一个威胁是网络攻击者,他们没有设法通过您的显示器并阅读您的便利贴。如果他们闯入您的密码管理器或浏览器凭据存储,让他们收集尽可能多的一次性密码。


在将密码发送到服务器之前,我正在寻找可以对密码执行的操作...我正在考虑将哈希(密码+服务)发送到服务器

如果您喜欢做这些事情(风险分析、攻击建模等),那么您应该阅读 Peter Gutmann 的工程安全他的博士论文研究了安全和用户行为。他的书是关于构建更安全、更安全的系统的方法。