处理错误 TOTP 令牌的最佳实践

信息安全 多因素 顶部 帐户锁定
2021-08-13 01:45:23

假设具有用户提供的密码和 6 位 TOTP 令牌的 2FA 系统。如果不先使用密码进行身份验证,就无法测试 TOTP 令牌,因此假定提交令牌的人知道密码。每个令牌生成 30 秒,并且在前 30 秒和下一个 30 秒窗口内与“当时的当前”令牌一起有效。

错误警报很常见,因为令牌输入的时间太长了,因此令牌的实际使用时间不会太长。

基于密码可能已经泄露的假设,是否应该连续输入一定数量的错误令牌导致密码强制失效? (它可能没有泄漏。可能只是第二个因素的一些问题最终会消失。)如果当前广泛使用的 2FA 系统这样做,典型的阈值是多少?

我知道 RFC 4226 建议节流参数为 5。我不确定达到阈值后究竟会发生什么。账户锁定?密码无效?稍等一下并允许重试?

2个回答

RFC 4226 没有告诉我其他人在做什么,但它确实在其第 7.3 节中提供了一些可行的建议。

显然,在每个帐户和设备的 5 次尝试都用尽后,帐户完全锁定或呈指数增长的延迟应该会半永久性地开始。

计数器必须跨登录会话和跨单个 TOTP 令牌应用,只要它们与相同的身份验证设备相关联。这样,在管理员不断需要重置设备因素锁定以希望引起对受到攻击的帐户的适当关注之前,不可能累积太多不成功的设备因素身份验证尝试;并且一旦密码最终被更改,由攻击引起的锁定将停止。

吸取的教训:

  1. 设备因素的保护与密码的保护没有区别,两者都需要独立的保护以免受暴力攻击,无论认证流程如何。

  2. 如果设备因素本身得到了充分的保护,那么推测密码是否泄露或合法用户是否只是在使用他们的设备时遇到了一些问题都是多余的。

  3. 为了保护设备因素,仅保护密钥(防止泄漏)和令牌(防止窃听或猜测)是不够的。

限制在 30 秒内可以进行的尝试次数。

因此,如果您有一个有效期为 30 秒且为 6 位数字的令牌(例如),并且您将 30 秒内可以进行的尝试次数限制为 5 次(再次作为示例),那么成功的机会蛮力的第二个因素是 0.0005000005000005%。