基于站点名称的模式密码

信息安全 密码
2021-08-23 02:01:11

我正在考虑使用以下想法为我的密码实施一种模式:

  1. 我无处存储的主密码
  2. 一种基于我正在访问的站点来破坏它的算法

例如,我有主密码 M,我去网站 PayPal (P) 并在我的脑海A(M, P)中运行一些相对简单的算法来生成 PayPal 的密码。算法是一致的,但对于不同的站点,它会产生不同的结果。

优点:

  1. 窃取 1 或 2 个密码不会让我面临更大的风险。
  2. 我不需要任何存储或密码管理应用程序。
  3. 键盘记录器只能窃取有限数量的密码。
  4. 因为我不需要存储,所以我不能真正丢失我的密码。

缺点:

  1. 如果我的算法以某种方式泄露了主密码,则可以从少数已知密码中恢复。
  2. 它使输入密码变得更加困难。不过,我可以为我的手机编写小应用程序。在某些情况下,仍然生成站点密码可能会出现问题。
  3. 更改密码也是一个问题,但这可以通过添加第三个参数来添加 - 版本A(M, P, V),我可以只存储版本。或将其保存在密码提示中。

这是个好主意吗?

4个回答

由于该问题已被编辑为不再引用“双因素身份验证”,因此我将重新修改我的答案,但我将在下面保留原件。


拥有一个“基本密码”的想法,您可以附加几个字符,或者以某种方式“修改”以使其对每个站点都是唯一的,这是一个相当常见的技巧,甚至一些安全专家也会使用(直到他们采用密码管理器至少)。

那么这个方案有多安全呢?好吧,这比对所有事情都使用相同的密码要好,比使用完全不同且不相关的密码更糟糕。究竟它落在这条线上的位置是一个见仁见智的问题(我相信其他答案会提供)。

我的观点是,它在哪里并不重要,因为你要么担心人们分析你泄露的密码的模式,要么你不担心。在我看来,有两种类型的攻击(或“威胁模型”)需要担心:

  1. 使用股票字典的大规模破解工具进行的“偷渡式”字典攻击。他们通常希望挑选出 40% 的密码较弱的用户——他们在站点之间重复使用相同的密码,然后他们将继续进行新的密码泄露。

  2. 您是个人目标 - 人力时间和计算能力将用于分析您以前泄露的密码以寻找模式。

如果您只担心 1),那么您可以通过一个非常简单的修改规则来使您的密码远离现成的基于字典的破解工具中的标准规则。即使在这里,您也希望您的“技巧”不够流行,以至于任何黑客都已将其添加到他们的规则集中。如果您担心 2),那么最终会找出任何类型的模式。

归根结底,“它足够安全吗?” 取决于您的风险管理和所保护事物的重要性:非常粗略地说,如果(违规概率)X(丢失数据的价值)>(安全级别),那么您应该提高安全性。如果您对自己的密码足够关心,以至于在这样的网站上写了一篇文章(这对您有好处!)那么您应该考虑只使用 LastPass 或 KeePass 之类的密码管理器——它们真的很容易(除非您忘记了您的超级密码) - 强主密码并像我一样放弃整个事情)。


原答案:

首先,一些术语:

事实证明,两因素身份验证比您表面上想象的要多一点。一般来说,有三种认证机制:

  1. 您知道的信息 - 信息,例如密码,或您母亲的娘家姓,或存储在密钥文件中的公钥。

  2. 您拥有的东西- 通常是一个物理对象,例如可以通过您的号码接收 SMS 的电话,或者一次性密码 (OTP) 令牌或启用公钥的智能卡/USB 记忆棒:

  1. 你是什​​么:又名“生物识别”,如指纹、虹膜、声音、打字节奏等。

将身份验证方法分为这些类别的原因是,每种方法都需要一种非常不同的盗窃方式才能让黑客获得它。

如果您需要提供上述类别中的一种以上的身份证明,则正确的是“双因素身份验证”或“多因素身份验证”。如果您提供同一类别的多个项目,则称为“多步验证”,这显然比多因素弱。

现在回答你的问题:

所以你提出的不是多因素。它甚至不是多步骤,因为在这一切结束时,您只需向登录页面提供一个密码。

本文建议您基于单个主密码重用变体的方法确实比仅复制密码更好。但是,正如techraf 所提到的,如果您使用简单的算法,则安全优势可能微不足道。

例如,一个常见的简单算法A是在您的密码中使用域名的后缀(例如abcd1234gmailgmail.com 和abcd1234facebookfacebook.com)。

假设该算法是您希望能够在脑海中完成的事情,那么您真正想要A完成的是为您提供良好的扩散,以便您生成的密码不共享公共子字符串。这与相当长且复杂的主密码相结合,应该会给您提供足够隐蔽的变体,因此即使泄露了一些密码,它们看起来也有很大的不同,并且不会帮助密码破解工具。很快,我确实设想进行更多研究,比较同一用户在多个违规行为中的密码,以了解密码通常是如何变化的。

我确实有一个建议是为您最重要的帐户使用不同的主密码(以防万一)。归根结底,这无疑是通过默默无闻实现的安全性,但这不就是密码选择的全部意义所在吗?

真正有价值的是生成一系列不同算法的好方法,这些算法{A}可以很容易地在你的脑海中计算出来?否则,您可以使用一个简单的程序来生成您的密码,例如hash(master+domain+salt).

您依赖算法的保密性和复杂性。这是通过默默无闻实现安全的典型示例:

依赖设计或实现的保密性作为提供安全性的主要方法

所以你需要考虑它的警告。

这是一个好主意,只要您:

  • 保守秘密

    您使用秘密算法而不是秘密密码。当它留在您的脑海中时,您可以在一定程度上假设它是保密的(尽管这个问题已经揭示了您可能正在使用它的事实)。

    将算法移到您的头脑之外(在应用程序中编码)打破了这种情况。

  • 不要经常使用

    从技术上讲,它归结为加密网站的 URL(明文):

    • 一个秘密算法(简单到可以在你的脑海中执行计算)
    • 固定密码(重复使用的密钥)

    这对于加密来说听起来并不安全,并且如果有足够的样本,它很容易进行密码分析。

    但在网站密码的情况下,样本将相当稀缺,而且最重要的是必须来自许多受感染的来源。宁可难。

  • 让结果真的很随机

    通常,如果您使用“相对简单的算法”,您将获得相对较弱的安全性。您的原始算法可能不是那么原始,并且经验丰富的密码分析员甚至可能从少量样本中对其进行逆向工程。

    这里有一个改进的空间:如果你结合你的“in-head”算法,将它用作哈希/密钥派生函数的输入,并将它的输出用作你输入的密码,它会大大提高方案的安全性。

    然而,通过默默无闻仍然处于安全领域:你做什么以及如何做必须保持不公开甚至不暗示。

我认为这是一项很好的安全措施,可以显着提高您的总体安全性。我之所以这么说是因为密码被盗的典型威胁模型。如果您担心典型的黑客/密码转储,他们不太可能花费时间和精力尝试对您的密码算法进行逆向工程,因为他们可能正在检查他们获得的数百万其他密码,或者试图入侵以获得更多密码.

从本质上讲,只要您的密码在站点之间略有不同,您就可以与拥有密码管理器的人融为一体。值得注意的是,如果您担心有人会试图专门破解您,​​这不再适用,他们会注意到他们从多个转储中收集的密码之间的模式和相似性。想出一个您可以在脑海中完成的算法是非常困难的,实际上几乎是不可能的,并且无法通过计算机从结果中逆转。