这个密码管理器的想法安全吗?如果是这样,为什么没有人使用它?

信息安全 密码 密码管理
2021-09-04 10:33:20

我一直在思考通常的密码管理器的一个问题:虽然它们确实提供了比手动使用密码更好的安全性,但有一个中央数据库可能会丢失、被入侵等。例如,恶意软件可以使用键盘记录器来获取你的主人密码,然后破解密码文件中的所有密码。基于云的解决方案还引发了云服务知道您何时访问密码的隐私问题。云服务总是有可能保留您所有信息的未加密副本。或者有人用一百万美元贿赂 LastPass 的开发人员,让 LastPass 将所有内容发送给攻击者,或者其他什么。更现实地说,密码管理器似乎会在发生有针对性的攻击时降低安全性。

我有一个随机的想法,即拥有一个无状态密码管理器,它基本上通过将用户名、网站域(或一些用户选择的站点标识符)和主密码散列在一起来为用户拥有的每个帐户生成密码. 通过这种方式,无需保留任何数据库,并且用户可以在公共计算机上使用他们的密码,例如,通过使用一些在线 JavaScript 散列工具手动计算散列。

这听起来很安全,但听起来也很明显,通常如果一个明显的想法不是一个东西,那是因为有一些陷阱。在那儿?为什么密码管理器不这样做,而不是将所有内容存储在一个大文件中?

4个回答

这种使用可预测算法从主密码/短语生成秘密的解决方案的一个问题是,如果您的主密码被直接泄露(例如键盘记录器)或间接泄露(例如攻击者使用您的密码生成的密码通过这个系统谁可以对其进行暴力攻击),攻击者有效地破坏了您所有帐户的安全性,因为他们能够轻松生成您用于所有站点的密码。

简而言之,与常规密码管理器相比,此方法几乎没有提供额外的安全性(甚至可能降低安全性,具体取决于实现),并且存在一些使其不切实际的可用性问题。

安全

让我们以您的恶意软件示例为例,该恶意软件使用键盘记录器获取您的主密码,然后破坏密码文件中的所有密码。您提出的方案没有提供针对该攻击的额外保护:如果您的主密码通过键盘记录器被盗,则攻击者拥有您所有服务的所有密码。(这里甚至不需要窃取数据库,只需主密码。)

您提到的另一个威胁是密码管理器的开发人员通过更新他们的密码管理器来窃取您的主密码或解密的密码数据库,从而危及您的安全。您的方案也无法减轻这种威胁,因为您用来生成密码哈希的程序的开发人员也可以这样做。(我假设您没有编写自己的哈希工具。这似乎与编写自己的密码管理器一样不方便且容易出错。)

您还提到了基于云的密码管理器知道您何时访问密码的隐私问题。虽然您提出的方案可以减轻这种威胁,但也可以通过传统的密码管理器来缓解这种威胁,方法是始终将密码数据库的副本同步到每个本地设备并在查找密码时引用该文件,或者只需完全存储您的密码数据库离线。例如,KeePass 支持这两种方法。

最后,该计划还面临另一个威胁。它允许您注册的任何站点,或任何获得此类站点密码数据库的攻击者,对您的主密码进行无限次数的离线暴力破解尝试。这可以通过使用强主密码和慢速哈希算法来缓解,但这仍然是一个值得考虑的问题。您也可以通过在散列算法中包含辣椒来缓解它,但是您会因为要求用户访问包含辣椒的文件来获取他们的密码而失去了所提出方案的主要好处。

可用性

至于可用性,正如您所指出的,该方案确实具有不需要用户跟踪密码数据库的好处。但是,我认为该方案存在一些可用性问题,我认为这些问题大大超过了这一优势。

第一个是,如果您的特定服务的密码被泄露(例如,一个网站以明文形式存储他们的密码并且他们的数据库被盗,或者密码在传输过程中通过中间人攻击被盗),您将没有简单的方法更改该服务的密码而不更改所有其他帐户的密码(例如,通过更改主密码)。您可以向哈希生成器添加一个附加参数,例如递增数字,以允许更改密码,但是您必须为每个服务记住这个数字,这很不方便。

同样,如果由于某种原因您的主密码被泄露,此方案会使更改该密码变得相当困难,因为您不仅必须在您拥有帐户的每个站点上更改密码,而且您还必须记住您拥有的每个站点一个帐户,以确保您在更改密码时不会错过任何一个 - 没有像密码管理器那样方便地列出所有这些网站。

另一个不太明显的可用性问题,但根据我在密码管理器方面的经验,我相信这个方案可能会遇到,你访问的每个站点的“名称”并不总是很明显。您可能认为您可以将每个站点的域名插入您的哈希算法并将其用作站点名称,但实际上并非总是如此。作为一个简单的示例,请考虑这个站点,Information Security Stack Exchange。假设您选择对该站点使用基于密码的登录,而不是通过 Google 或 Facebook 等第三方联合登录,那么您在方案中使用什么作为站点名称?security.stackexchange.com? stackexchange.com?stackoverflow.com? 所有这些域都使用相同的登录名。一旦你选择了使用哪个名字,你就必须记住它。其他网站可能会使这一点变得不那么明显,例如 gamepedia.com,它要求您使用您的“诅咒社区”帐户登录,该帐户在该公司制作的多个网站之间共享。

最后,这个方案最重要的可用性问题可能是具有限制性密​​码要求的网站。如果一个站点要求您的密码包含特殊字符,而另一个站点要求您只使用字母数字字符怎么办?您可以在散列方案中添加选项以适应这些要求,但现在您必须记住并记住每个站点的密码要求,只要您想登录。

TL;博士

虽然您提出的方法确实解决了一些问题,但它也会产生其他问题,并且不提供任何额外的安全性。

安全:

  • N/A:不能防御恶意软件
  • N/A:不能防止密码管理软件的恶意开发者
  • N/A:不提供现有密码管理器无法提供的任何隐私保护
  • 缺点:将主密码暴露给来自恶意网站和黑客的暴力攻击

可用性:

  • Pro:使用户不必管理密码数据库文件
  • 缺点:更改特定于站点的密码需要记住其他特定于站点的信息
  • 缺点:更改主密码不方便
  • 缺点:使用哪个站点名称作为哈希函数的输入并不总是很明显
  • 缺点:管理具有限制性密​​码要求的网站非常困难

你的想法已经做了好几次了。

这是一个例子: http: //plevyak.com/dpg.html

它被称为确定性密码生成器,这意味着它会根据您输入的其他信息创建密码。就像您说的那样,使用您的主密码、其他一些信息和站点名称。

关于这个问题的几点,太长的评论,有些东西已经单独提到了:

  • 做了很多次,有工具可用
  • 从一个泄露的密码中,如果有人猜测您是如何以及使用什么散列来获取密码然后使用暴力破解,那么理论上其他密码可能会被泄露。仍然比重复使用密码好得多。
  • 如果主密码(加上盐和散列算法以及您设置的任何内容)被污染,攻击者不仅知道您当前的密码,甚至知道您将来要设置的密码
  • 您不能轻易更改一个密码。这对我来说似乎是最大的使用缺点
  • 由于愚蠢的密码规则,有时您无法使用生成的密码。您几乎总是可以通过根据不同的规则生成多个密码来解决这个问题(比如 20 字符的字母数字和 20 字符的 ascii 可打印字符密码,然后使用网站支持的最大长度和复杂性),但这很烦人因为有时您需要多次尝试才能正确设置自己的密码。

总而言之,出于实际原因,我认为它可能不如密码数据库,但具有相似的安全性。

如果您想提高密码管理器的安全性,我建议您使用基于硬件的密码管理器。可能那些存在。在构建或购买之前,还可以考虑只使用传统的笔记本,它对任何类型的黑客攻击都非常安全......