Go 使用一个秘密生成totp与使用多个秘密

Go 使用一个秘密生成totp与使用多个秘密,go,hashicorp-vault,two-factor-authentication,totp,Go,Hashicorp Vault,Two Factor Authentication,Totp,我想在我的网站上使用谷歌验证器和2fa的totp算法。我有两个生成QR机密的问题 我计划使用vault来存储机密以提高安全性,但我的问题是,是否有其他方法每次生成机密,而不是将其存储在某个存储中 我在教程中读到,我需要为每个用户使用随机密码,并将该密码存储在DB中,以进行otp验证 我的想法是将一个特定的秘密存储在安全的地方,并为每个用户使用该秘密生成一个哈希。例如,使用mySecret+userId生成哈希 这是一种安全的方法吗?使用主密钥并使用sha256生成用户密钥是一个坏主意。因为生成的

我想在我的网站上使用谷歌验证器和2fa的totp算法。我有两个生成QR机密的问题

我计划使用vault来存储机密以提高安全性,但我的问题是,是否有其他方法每次生成机密,而不是将其存储在某个存储中

我在教程中读到,我需要为每个用户使用随机密码,并将该密码存储在DB中,以进行otp验证


我的想法是将一个特定的秘密存储在安全的地方,并为每个用户使用该秘密生成一个哈希。例如,使用mySecret+userId生成哈希


这是一种安全的方法吗?

使用主密钥并使用sha256生成用户密钥是一个坏主意。因为生成的秘密和QR总是相同的。如果用户丢失了hist phone并希望删除二维码并获得新的二维码,则不可能。最佳做法是生成随机机密并将其存储在vault中。

创建哈希的意义何在?这样,我每次都可以为特定用户生成机密,而无需使用任何外部数据库或后端。我只需要保证一个秘密的安全-zerkmsSounds是合理的(例如使用SHA256从主秘密+用户ID生成用户特定的秘密)。然而,如果用户的秘密被泄露,你必须给他们一个新的ID(这是不可取的)。此外,如果主秘密被泄露,你必须给每个人一个新的秘密(通过QR或其他方式)。我的问题是,为什么存储一个秘密比每个用户一个更容易?您可以使用Vault为用户派生密钥(例如,使用用户ID作为数据密钥或HMAC的上下文),尽管我不得不承认我不明白您为什么要尝试这样做。能够复制一个加密密钥通常是不好的,这与我们不以可复制的方式存储密码的原因相同。“我的想法是将一个特定的秘密存储在安全的地方。”但Vault不是那个安全的地方吗?