算法生成的个人密码是否存在安全风险?

信息安全 密码 密码管理
2021-08-27 08:56:21

我们都知道为什么密码重用不好:最终,您拥有一个未正确散列+盐用户密码的帐户的某些站点将被黑客入侵,您的密码将被发布在一个大转储中。然后,一些黑客将使用该用户/通行证组合,并在他们认为可以从中获得有用信息的每个站点上进行尝试。

我知道密码管理器是为每个站点设置唯一的完全随机密码的推荐解决方案。但它们并非完全没有自身的困难,尤其是试图说服非技术人员使用它们可能会很困难。相反,作为共享密码的最小替代方案,人们可​​能有一种简单的算法来从共享的随机组件生成唯一密码。一个最小的例子可能是<sitename>_<good random password>. 所以我的密码可能是

stackoverflow_rm6Z0$f237db^DGYU3r 
google_rm6Z0$f237db^DGYU3r

等,其中第二部分是共享的。现在,任何真正试图专门破解的白痴都可能猜到我的算法,即使只知道一个密码,如果他们掌握了两个密码,那也是微不足道的,所以如果我出于某种原因成为一个备受瞩目的目标,这将是一个糟糕的计划。但如果有人想黑我,我不管做什么都可能有麻烦。假设我不是一个高调的目标,在我看来,像这样的简单算法可以保护我免受大多数密码重用的危险,因为没有人会专门看到我的密码。

所以我真的在问,这个推理有缺陷吗?这种算法生成的密码实际上比精确的密码重用更安全吗?或者密码转储的使用方式与我想象的不同?这个问题的公认答案表明,不同的密码只有在经过哈希处理时才有用,但对我来说,拥有明文密码的黑客似乎对他们没有帮助。

我同意这从根本上讲是隐匿安全,但也许匿名安全会是一个更好的标题。我的密码将是大转储中的一百万个密码,任何人真正看到我的密码几乎为零。

问题(编辑得更明确):

假使,假设:

  • 普通人(不是黑客的高调目标)使用算法生成唯一的站点密码。
  • 该算法非常简单,即使给出一个密码,人类也能猜出算法
  • 这些密码中的一个或多个已被黑客获取

与在每个网站上使用相同密码的人相比,此人在其他网站上被黑客入侵的可能性是否更低?如果不是,是不是因为

  • 人类是否有可能真正查看此密码?
  • 攻击者已经在寻找某种算法生成的密码?
  • 还有什么原因?
笔记:

许多人指出,使用密码管理器是一个更好的主意。特别是 ThoriumBR 和其他人指出这种方案是不可持续的,因为一旦我需要更改其中一个密码,我现在就必须更改我的算法。

这些都是非常好的观点,但不是我希望从这个问题中学到的。

4个回答

“密码生成算法”的主要问题是密码是固定的。您不能在不更改算法的情况下更改单个泄露的密码,从而更改每个密码。

为避免这种情况,您必须在某处记录使用第一个版本的站点,使用第二个版本的站点(因为第一个版本生成的密码泄露),使用另一个版本的站点,因为该算法生成的密码不被某些站点接受,并且很快。

有些网站会不时要求您更改密码。因此,您必须考虑到这一点,并记录越来越多的信息,以跟上密码的状态。为此,您需要一个安全的数据存储、加密、备份过程、易于使用且易于集成到您的在线例程中的东西。

丢失任何这些记录都会将您拒之门外,并造成可用性妥协以明文形式泄露它会造成Confidentiality Compromise破坏(或忘记)其中任何一个都会造成Integrity Compromise您需要一些专门为安全存储而创建的软件。

类似于...密码管理器。

您似乎认为只有人类才能弄清楚您的计划,这不一定是正确的。攻击者不仅会重复使用他们找到的确切密码,他们还可以想出各种诡计,并将其反转。

所以让我们以你的算法为例,说stackoverflow_rm6Z0$f237db^DGYU3r被泄露了。如果我是攻击者,并且获得了所有 SO 密码的列表,我不仅会尝试其他站点上的每个密码,还会分析密码。因此,我会注意每个密码,包括stackoverflow, so, stack, kcats, wolfrevokcats, dysvlpbrtg;pe(即stackoverflow, 但使用右侧的一个键)等。

所以你的例子很快就会被抓住。攻击者可能甚至不必亲自查看您的密码,并且脚本也足以尝试google_rm6Z0$f237db^DGYU3r使用 Google 帐户。

当然,密码尝试脚本需要比只尝试确切密码的版本稍微复杂一些,但编写起来仍然不是很困难。

只有当你设法想出一些比黑客想出并包含在脚本中的算法更复杂的算法时,它才会比简单的精确重用增加更多的安全性。

此外,如果您的两个密码泄露,黑客攻击变得更加微不足道。如果一个脚本可以找出两个密码属于同一个人,那么检查它们是否有任何相似之处非常简单,并且可能的其他密码的空间会变得更小。攻击者甚至不需要弄清楚确切的算法,只知道共同的部分。

ThoriumBR 已经涵盖了您在跟踪算法密码时将面临的问题。但专注于提出的问题:

  • 您正在使用一种对任何人都显而易见的算法,甚至可以看到一个密码
  • 您不希望单独成为目标

新闻是,不重要是不够的攻击者不会在意。他们会妥协他们遇到的任何人。如果他们现在有更大的鱼,他们可能暂时不会更关注你或者他们可以将您转售给其他人。

他们如何使用您的密码?

  • 他们可以转储一个甚至没有散列密码的网站的帐户。2020 年。
  • 您在网络钓鱼网站上提供了这些凭据
  • 你在一个邪恶的网站上注册

从字面上看,使您与那些为受感染帐户和其他网站使用相同密码的人(我们可以预期将首先调查)的区别在于犯罪分子注意并阅读您的密码。

如果他们只提取了几十个凭据,您可以数他们查看它们。而如果他们提取了数千个,并且有很多工作的,他们可能不会打扰。另请注意,这些凭据可能有多个“接收者”。提取它们的攻击者可能只是将列表出售给另一个人,这可能会利用其中的一些,分类(取决于用户有一个帐户,他们是否能够破解密码等)并转售给件。另一个人可以买它……它也可以与其他妥协混合在一起,几年后重新出现……而且你打赌,每一步都没有人意识到。(如果它们定期轮换会好一点,但考虑到这种情况,情况并非如此)

对于普通用户来说,易于猜测的密码生成算法是否比精确的密码重用更好?

如果您只关心它们是否更好,是的,它们会比重复完全相同的密码稍微好一些。但正如本页多次提到的,请使用密码管理器。不要仅仅因为它比一张写着“请不要进入”的纸更好,就用一根绳子关上你的门。

如果使用密码管理器很困难,那是 UI 问题,应该解决并修复,但这不是技术问题。请注意,有许多密码管理器,其中一些是商业的。有房间或密码管理器可以“修复他们的方式”并且更容易访问。不过,我会考虑学习使用密码管理器比必须记住更简单rm6Z0$f237db^DGYU3r

如果使用密码管理器软件仍然太难(也许是老年人),尽管有说明,有硬拷贝手册等。我建议使用物理密码管理器。只需提供一个已填充随机密码的笔记本(避免缺少适当的内置密码生成器),并提供空间以输入其所在站点的详细信息,用户名……。它可以按时间顺序组织或作为地址簿组织。

如果您的威胁模型不包括物理攻击者,这是一个完美的解决方案。并且是低级的,它应该很容易学习使用。

与在每个站点上使用相同强度的相同密码的人相比,此人被入侵的可能性并不低。这就是为什么。

当攻击者破坏站点时,他们通常可以获得明文凭据。也许那是因为密码没有经过哈希处理,或者他们利用了站点中的漏洞并在站点运行时提取了一段时间的数据。因此,虽然您不能假设您的所有密码都已被泄露,但您必须假设您的一个或多个密码迟早会被泄露。

一旦发生这种情况,您必须假设攻击者知道密码的明文。发生这种情况时,攻击者可以并且将尝试更改密码。因为这个密码本质上是一个主题和变体,所以它很可能落入暴力攻击,因为攻击者会尝试用stackoverflow其他组件替换组件(如 )。这是暴力破解的标准方法,并且已经有工具可以做到这一点,因为它有效。他们还将尝试增加数字、以各种方式上下移动字母以及各种其他技术。

此外,即使您认为自己并不那么重要,也要考虑一下您拥有的东西。如果攻击者能够猜出您的银行或其他金融机构密码,他们可能会拿走您的大部分资金(如果不是全部的话)。StackOverflow 等网站上的被盗帐户可以用作机器人来投票赞成或反对帖子,这是一种可以出售的商品。如果攻击者可以利用您的帐户赚取更多钱,那么攻击者将完全愿意尝试不同的模式。

这是规则:为了使密码方案安全,知道该方案生成的一个密码必须绝对不会教您任何其他密码。

现在,您可以采取一种安全的方法您可以生成一个具有 128 位熵的单一、强大、加密安全的密码,并将其用作 HMAC 密钥(例如,使用 HMAC-SHA-256),消息类似于1:stackoverflow(堆栈溢出的第一个密码),然后使用该 HMAC 值的编码形式作为站点的密码。因为这些 HMAC 值是独立的,并且与随机值无法区分,所以这是安全的,只要您正确保护密钥并且密钥是随机生成的且具有足够的熵。

但是,正如其他人指出的那样,不同的站点具有不同的密码策略。因此,尽管上述方法稳健且安全,但实际上并不方便,因为许多网站处理密码的方式不安全,因此存在长度或内容限制。我与将密码限制在 20 个字符或更少的公司做生意,所以很多密码短语和长随机字符串都被淘汰了。该方案还需要轻松访问加密算法,这使得它不适合大多数非技术用户。因此,出于所有这些原因,我们使用密码管理器。鉴于现实世界的局限性,它们提供了可用性和安全性之间的最佳权衡。