电子邮件代码验证

信息安全 验证 密码
2021-09-01 01:58:18

我想用通过电子邮件发送给用户的临时代码替换密码。登录流程如下所示:

  1. 用户输入他们的电子邮件地址。“如果该电子邮件属于用户,将发送一个代码”消息以防止泄露有效电子邮件。
  2. 用户通过电子邮件收到一个字母数字代码(假设为 8 位数字,有效期为 1 小时)。
  3. 用户输入该代码作为他们的“密码”。

好的:

  1. 没有密码存储在数据库中。
  2. 无需密码重置。
  3. 大部分安全负担都转移到了电子邮件提供商身上。

坏处:

  1. 需要一个电子邮件地址。如果您无法访问它,您将无法访问您的帐户。
  2. 如果您忘记了您的电子邮件地址,您将无法访问您的帐户。
  3. 每次登录时检查您的电子邮件很不方便。这在移动设备上不是问题,在第一次登录后可以存储 API 令牌。

是否还有其他问题,尤其是与安全相关的问题?据我所知,这应该和密码重置一样安全。在这两种情况下,您都会收到电子邮件,允许您完全访问该帐户。

这里有类似的问题,但更多地关注 cookie,或者没有可靠的答案。我对积极和消极方面更感兴趣,尤其是任何安全问题。

清晰度/目标编辑: 目标是限制存储在数据库中的敏感数据的数量(即使该数据经过哈希处理),可供普通用户访问(通过互联网连接远程),并且不依赖于不同的设备进行身份验证. 此外,考虑到这些限制,请尽可能简单 (UX) 和安全。

1个回答

tl;dr:这一切都取决于用户在保护邮件安全方面的表现。但那是明信片而不是信件。不要专门提供该选项。此外,似乎是一个xy 问题

以下是一些需要考虑的事项:

  • 你说

    用户通过电子邮件收到一个字母数字代码(假设为 8 位数字,有效期为 1 小时)。

    我们宁愿说 20 个字节,有效期为 10 分钟。8位密码的暴力破解是绝对可行的。

    这可以通过电子邮件中链接的获取请求传递给应用程序/Web 应用程序,以使用户的生活更轻松。

    顺便说一句,这就是 Slack 的“魔术链接”功能。

  • 你列为否定

    需要一个电子邮件地址。如果您无法访问它,您将无法访问您的帐户。

    如果您忘记了您的电子邮件地址,您将无法访问您的帐户。

    这通常是这种情况,至少在密码重置时是这样。

  • 您仍然可以在 Web 应用程序中使用会话 cookie 以使用户保持更长时间的登录 - 与将该令牌存储在移动应用程序中相同。

    因此这个问题

    每次登录时检查您的电子邮件很不方便。

离开了。

  • 你列为积极

    大部分安全负担都转移到了电子邮件提供商身上。

    而事实上,很多安全负担也转移到了用户身上。

    您有多确定您的用户只通过安全连接检查他们的邮件,而没有被窃听的机会?(想一想:打开 WiFi,手机上定期 POP。每天都在发生。)

    这使用户的邮箱成为单点故障。

    此外,虽然大多数 IT 相关人士都知道我被加密了,但仍有很多人不知道他们的电子邮件已经因为密码重用而被泄露

    然而,最后一点也适用于密码重置电子邮件——只是它们发生的频率较低,并且通常会触发额外的安全措施。

无论您出于何种原因尝试使用邮件和短期密码,都有更好的方法 - 例如,UBS 安全令牌确实在等式中添加“只有你拥有的东西”部分,而不是删除“只有你知道的东西”部分。

我还建议您考虑这是否可能是xy 问题的一个实例,并针对您要解决的实际问题提出一个新问题。


修改后的问题更新:

如果密码正确散列,则将它们存储在数据库中没有任何问题。

然而,如果我们接受作为 UX 决定让用户没有密码,使用电子邮件并请求用户 GPG 密钥和/或 S/MIME 证书,并使用请求的邮件向用户发送短期密码链接就可以了.