为 2FA 实施生成备用代码

信息安全 多因素
2021-08-26 21:46:38

我已经按照RFC 6238实现了双因素身份验证系统的登录/验证方面

它适用于 Google Authenticator,非常棒。

现在我将注意力转向备份代码,这些代码由实现 2FA 的服务(例如 Google 和 GitHub)提供。

我注意到它们的长度和/或格式与通常的 6 位直接验证码不同。

我也是:

  • 当用户设置 2FA 时生成任意数量的代码
  • 将它们与用户一起存储在数据库中
  • 利用它们的长度或格式不同的事实来决定如何检查它们?

它们应该是随机的,还是根据用户的一些哈希生成的?

1个回答

通常备份代码是不透明的随机凭证,不是基于数学上的 2FA 种子或任何其他关于用户的已知信息,并且具有足够的长度和熵来生成以避免字典攻击。

把它们当作一次性密码对待——在存储之前对它们进行哈希处理,这样你就没有原件;认证使用一次后丢弃;限制身份验证尝试的次数和速率;并允许经过身份验证的用户生成一个新集合,这会使之前的集合无效。