为什么不同时要求输入密码和 2 因子令牌?

信息安全 验证 多因素
2021-09-07 19:50:50

我观察到许多提供双因素身份验证的基于 Web 的登录表单在验证您的用户名和密码后在第二个表单上进行令牌输入。

是否有理由不要求人们同时提供他们的 2 因素身份验证令牌以及他们的用户名和密码?

登录表单可以在用户完成登录之前检测到启用了 2 因素身份验证的用户名,并在登录页面上显示一个令牌输入框。

这将泄露任何给定的用户名是否启用了 2 因素身份验证,但不会在没有有效令牌的情况下确认有效密码。

4个回答

许多 OTP 系统允许您通过 SMS/电子邮件接收 OTP。因此,系统必须知道何时向您发送 OTP。

您可能会建议表单旁边可能只有一个“请求 OTP”按钮。但随后任何人都可以反复点击该按钮,这意味着您将收到大量垃圾邮件/短信。

您可能会建议通过限制 OTP 的速率来解决该问题。但是我可以通过请求您的 OTP 的全部配额来导致您拒绝服务,这样您就无法登录。

一个简单的解决方案是仅向提供有效密码的用户发送 OTP。

我没有看到同时要求输入密码和第二个因素(令牌/生物识别)的任何安全问题。

事实上,这增加了系统的安全性,但它可能会影响系统的可用性(用户体验)。那个怎么样?

假设系统同时采用两个认证因素(密码和 OTP)并对其进行测试。如果它们都匹配/通过,则允许访问,否则拒绝访问。

让我们假设有 100 个可能的密码和 200 个可能的 OTP 代码。

如果您首先要求输入密码,然后在收到有效密码时要求输入 OTP,则攻击者需要尝试300 次(100 + 200) 才能侵入系统。

但是,如果您同时要求输入密码和 OTP,攻击者将需要尝试20000 次(100 * 200)才能侵入系统。

现在,从可用性的角度来看,如果用户输入了错误的密码或 OTP 代码,系统将不会确切地告诉他出了什么问题,他可能会继续犯同样的错误,例如输入错误的密码,因为他认为它是正确的,而实际的问题使用他的 OTP 令牌或其他方式。

可能有许多非技术原因,可能驱动程序将是性能,因为它减少了后端某些不需要调用的处理的负载。

另一种可能性可能是使设置网络钓鱼网站变得更加困难。您现在需要对多个页面进行编程。此外,如果您仅在成功的用户名+密码(您知道身份验证)时显示 OTP,则可能难以创建网络钓鱼站点并提供更多页面供用户注意。安全图像通常被认为具有最低价值,因为该过程通常是用户名,然后显示安全图像(例如SiteKey),然后是密码。但是,如果您仅使用两个因素将其更改为用户名->密码->安全图像->OTP,这会使创建网络钓鱼站点更加复杂,尽管仍然并非不可能,因为网络钓鱼站点可以模拟与真实站点的用户会话使用用户名和密码。

以下问题通常解决在多个页面上分散登录的问题:

我们决定不同时要求两因素身份验证密钥的原因与安全性无关。事实证明,在正常用户名和密码的同时要求一次性密码可能会导致各种插件、脚本和浏览器的自动填充错误行为。

这是一个 UX 原因而不是安全性,但足够重要,可能是这个标准的原因。