为2FA实现生成恢复代码



我已经在一个项目上实现了2FA身份验证,它可以很好地与不同的身份验证程序配合使用,这很好。

现在我正在开发流程中的恢复代码,这些代码由实现2FA的服务(如Google和GitHub(提供。

我用一定的长度和任意数量生成它们。我的疑问是如何正确地储存它们?

  • 我应该散列它们吗?我问这个问题是因为这是一个简单的答案是的,它更安全,但我看到像Github这样的页面允许你在激活2FA后显示代码,所以我需要一种不同类型的哈希
  • 那么密钥(TOTP2FA(呢?它也应该被散列吗

感谢大家

您应该散列恢复代码,但不应该散列机密。如果你对这个秘密进行散列运算,那么在检查TOTP代码时就无法恢复它。

根据RFC6238:

  • 每个证明者必须有一个唯一的秘密(密钥(
  • 密钥应随机生成或使用密钥推导算法推导
  • 密钥可以存储在防篡改设备中,并应防止未经授权的访问和使用

您可以将TOTP密钥加密存储,并在用户尝试验证代码时对其进行解密,但由于明显的原因,您无法将其哈希存储。

最新更新