【问题标题】:Using one secret for generating totp vs multiple secrets使用一个秘密生成 totp 与多个秘密
【发布时间】: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


【解决方案1】:

使用主密码并使用 sha256 生成用户密码是个坏主意。因为生成的秘密和 QR 总是相同的。如果用户丢失了他的手机并想要删除 QR 码并获得一个新的 QR,这是不可能的。最佳做法是生成随机机密并将其存储在保险库中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2018-09-05
    • 2020-12-04
    • 2022-06-28
    • 2020-07-27
    • 2020-08-25
    • 2022-12-23
    相关资源
    最近更新 更多