如果我包含忘记密码服务,那么使用密码有什么意义?

信息安全 应用安全 Web应用程序 验证
2021-08-12 13:35:07

我通过以下方式实现了忘记密码服务:

  1. 用户进入登录页面,点击“忘记密码?”
  2. 用户会看到一个表单,询问他们的电子邮件地址。
  3. 如果在数据库中,电子邮件将发送到给定地址,并带有包含(假定)唯一、长、随机生成的字符串的链接,该字符串也与请求的时间一起存储在数据库中,允许设置时间限制链接(它是)
  4. 用户点击链接,它被验证,然后他们被要求提供一个新密码。

这是相当标准的,(尽管我可以更改它的一些小方面),但这让我想知道 - 既然很少提供/记住好的密码,为什么不完全放弃密码并使用忘记密码系统呢?

  1. 用户进入登录页面,填写电子邮件地址(或者可能是更安全的用户名?)
  2. 电子邮件通过链接发送。链接的有效期非常短(< 5 分钟)。
  3. 用户点击链接,他们在里面。

在这两种情况下,用户的电子邮件安全 - 无论是被嗅探还是被入侵 - 都是常见的威胁,但在第二种情况下:

  • 该链接的有效时间要短得多。
  • 它也可能会被更快地用完(任何类型的验证电子邮件都可以不用管,但如果您现在确实想登录,那么您将在获得该链接时用完该链接)。
  • 用户无法提供伪劣密码。
  • 用户只需记住一个密码。
  • 一个帐户不能在多人之间共享(除非他们共享一个电子邮件地址)。
  • 自动攻击需要侵入电子邮件系统并等待一封电子邮件,这可能比等待密码被清除的时间更长,即比 bcrypt 更好。

我只是想知道有什么缺点吗?我可以看到:

  • 用户恼火,也许是不得不等待电子邮件或登录他们的电子邮件
  • 它可能会打开一个新的浏览器窗口,如果您想组织标签,这可能会很烦人
  • 用户可能会意识到他们必须使用更好的密码保护他们的电子邮件帐户,更改密码,然后将自己锁定:-)

这只是一个想法。


感谢所有提出答案的人,其中一些非常有趣(而且绝对有效)的观点确实让我思考并给了我更多研究领域。DW 之所以打勾,是因为提供的链接可以进一步了解这种特殊类型的情况,但我非常感谢所有给出的答案。

4个回答

这是合理的。从安全的角度来看,这是合理的。我认识一些从不写下 Web 服务器密码的人。他们每次想登录时只需使用“忘记密码”链接。

从可用性的角度来看,这可能有点不幸,因为电子邮件不是即时的。用户必须点击“给我发电子邮件”,然后等待电子邮件出现,然后点击他们电子邮件中的链接。不幸的是,如果用户必须等待几分钟(甚至只是 15 秒)才能显示电子邮件,他们可能会生气、放弃并去做其他事情——或者去找你的竞争对手。

进一步的改进。 可以进一步改进这个想法,以减少可用性影响。当用户单击电子邮件中的链接时,您可以在他们的浏览器上设置一个持久的安全 cookie。结果是,当用户单击链接时,他们就进入了,并且他们将来不需要在这台计算机上再次通过 rigamarole(除非他们清除密码)。以后从同一台计算机访问时,站点将自动识别它们,无需单击登录或链接。

这对于需要防止用户的室友登录他们的帐户的高安全性服务(如在线银行)来说是不合适/不够的——但对于大多数网站来说可能没问题。

评估。这是一篇研究论文,调查了这种方法,并发现它可以提高针对论文中评估的攻击的安全性:

克里斯·卡洛夫、JD Tygar 和大卫·瓦格纳。 条件安全仪式和 Web 身份验证应用程序的用户研究NDSS 2009。

这看起来像 OpenID,但更糟糕的是:

它从 OpenID 继承了以下问题:

  • 您每次都输入主密码。如果您使用的是不太受信任的 PC,您可能只想登录低安全性帐户,而不是您的电子邮件
  • 您的电子邮件提供商会注意到每次登录

它比 OpenID 增加了一些缺点:

  • 登录更麻烦

这让我想起了 2 因素身份验证方案,例如向预先注册的手机发送密码以进行身份​​验证的网站。

我在上面没有真正看到的一件事是这有什么好处?对于用户来说,这当然是更多的工作。即使是初始注册确认电子邮件也会惹恼人们。每次我想登录时,你都会污染我的收件箱。我每天至少登录一次我的网上银行(他们会在 10 分钟后将你注销)。我会收到您发送的数千封“登录”电子邮件。有时,电子邮件传递速度很慢。您希望我等待大约 5 分钟才能登录您的网站,因为 GMail 恰好需要一段时间。您的服务的正常运行时间现在与全球邮件服务的正常运行时间相关联。

这个方案的问题是,它真的什么也得不到。绝大多数人对大多数服务使用相同的密码。所以你强迫我登录我的电子邮件以获得一个链接,该链接将我带到一个我刚刚使用初始密码开始的地方。它还引入了一个弱点,因为它是窃听的新场所。现在,我可以使用我们的共享密钥(密码)并通过 HTTPS 连接。攻击者对我是谁、我的密码等一无所知。使用您的方案,每次登录都需要以明文形式传输此身份验证链接。

由于密码重置,出现了许多引人注目的违规行为。我相信最近最大的是莎拉佩林(尽管公平地说她是通过安全问题)。密码重置通常很糟糕,我们不应该鼓励更多地使用它们。

您的出发点是正确的:大多数“忘记密码”设施都是身份验证过程中的薄弱环节(或最薄弱的环节)。

但是,您为每次登录执行类似“忘记密码”协议的想法实际上类似于许多双因素身份验证方案中的第二个因素,例如 RSA 令牌。您已经可以获得在软件中而不是在专用硬件中生成登录标识符的“软令牌”。(这样您就可以在您的 iPhone 上运行它,而不是整天在口袋里随身携带一个硬令牌。)

我只看到该方案与您的方案之间的两个概念差异:

  1. 你有第二个因素(“你拥有的东西”),但没有第一个因素(“你知道的东西”)。所以它仍然是一个单因素身份验证方案。
  2. 您正在按需生成标识符并将它们发送给用户。相比之下,无论是否使用,RSA 令牌都会不断生成标识符,并且不会向用户传输(除了第一次将设备提供给用户时的第一次物理切换)。

与典型的 2 因素方案相比,这两种差异都削弱了安全性。

通过不使用未加密的电子邮件,可以使方案更加安全。您可以发送 S/MIME 电子邮件或完全使用其他加密协议(例如,如果客户端有 iPhone,则使用 Apple 推送通知系统)。

总的来说,这是一个有趣的思考练习,但我认为加强“忘记密码”协议的难度会更好。或者,根据您的用例,也许您可​​以完全删除自动密码重置并使用可以阻止攻击者的策略,例如拨打 800 号码来重置忘记的密码。

我不同意发帖者的说法,“从安全角度来看,这是合理的。” 我认为您的方案只是将一种不安全的安全协议换成另一种不安全的安全协议。