我已经在一个项目上实现了2FA身份验证,它可以很好地与不同的身份验证程序配合使用,这很好。
现在我正在开发流程中的恢复代码,这些代码由实现2FA的服务(如Google和GitHub(提供。
我用一定的长度和任意数量生成它们。我的疑问是如何正确地储存它们?
- 我应该散列它们吗?我问这个问题是因为这是一个简单的答案是的,它更安全,但我看到像Github这样的页面允许你在激活2FA后显示代码,所以我需要一种不同类型的哈希
- 那么密钥(TOTP2FA(呢?它也应该被散列吗
感谢大家
您应该散列恢复代码,但不应该散列机密。如果你对这个秘密进行散列运算,那么在检查TOTP代码时就无法恢复它。
根据RFC6238:
- 每个证明者必须有一个唯一的秘密(密钥(
- 密钥应随机生成或使用密钥推导算法推导
- 密钥可以存储在防篡改设备中,并应防止未经授权的访问和使用
您可以将TOTP密钥加密存储,并在用户尝试验证代码时对其进行解密,但由于明显的原因,您无法将其哈希存储。