【发布时间】:2019-11-14 16:14:18
【问题描述】:
我想在我的网站上为 2fa 使用谷歌身份验证器和 totp 算法。我有 2 个关于生成 QR 密码的问题。
我计划使用保险库来存储机密以更安全,但我的问题是有没有其他方法可以每次生成机密而不是将其存储在某些存储中?
我在教程中读到我需要为每个用户使用随机密钥并将该密钥存储在数据库中以进行 otp 验证。
我的想法是将特定秘密存储在安全的地方,并使用该秘密为每个用户生成一个哈希值。例如,使用 mySecret+userId 生成哈希
这样安全吗?
【问题讨论】:
-
创建哈希有什么意义?
-
这样,我每次都可以为特定用户生成秘密,而无需使用任何外部数据库或后端。我只需要保守一个秘密——zerkms
-
听起来很合理(例如,使用 SHA256 从主密码 + 用户 ID 生成用户特定密码)。但是,如果用户的机密被泄露,您必须给他们一个 新 ID(可能不受欢迎)。此外,如果主机密被泄露,您必须向每个人提供一个新机密(通过 QR 或其他方式)。我的问题是为什么存储一个秘密比每个用户存储一个秘密更容易?
-
您可以使用 Vault 的 Transit Backend 为用户派生密钥(例如,使用用户 ID 作为数据密钥或 HMAC 的上下文),尽管我不得不承认我不明白为什么你正试图这样做。能够重现加密密钥通常很糟糕,原因与我们不以可重现的方式存储密码相同。
-
“我的想法是将特定的秘密存储在安全的地方。”避难所不是那个安全的地方吗?
标签: go hashicorp-vault two-factor-authentication totp