【问题标题】:Best way to store "backup codes" for two-factor authentication?为两因素身份验证存储“备份代码”的最佳方式?
【发布时间】:2012-08-19 04:59:41
【问题描述】:

我正在为我的一个副项目实施一个双因素身份验证系统,并希望建立一些“一次性代码”,就像 Google 的双因素身份验证一样。

我的问题是,将这些代码存储在服务器上的最安全方法是什么?他们需要在数据库中加密吗?我会使用像 bcrypt 这样的东西来让它们像我散列密码一样吗?考虑到攻击者会知道每个哈希代表一个 6 位数字,这将使暴力破解时间几乎为零,我认为这可能是矫枉过正。

【问题讨论】:

    标签: database security web-applications two-factor-authentication


    【解决方案1】:

    问题有点模糊,但这里有一些指针:

    1. 将身份验证的至少一部分存储在单独的计算机上可降低这两个部分同时受到损害的风险。
    2. 为您的哈希加盐! 加盐可能是您的网站独有的,也可能是用户独有的,只要您在想要验证时可以重新创建它。
      • 为什么要加盐?字符串 123456 的 md5hash 是 e10adc3949ba59abbe56e057f20f883e - 正如你所说,很容易被暴力破解。但是如果我添加用户的 id 呢?您可以将其添加到哈希并重新哈希或将其添加到原始文本中:123456aneroid 的 md5hash 是 74821b76b332b28532136eb58e1b7f40
      • 也可以使用其他额外的盐,请参阅此 SO 帖子:https://stackoverflow.com/a/5482545/1431750
    3. 数据库应该存储这些salted hashes
    4. 您的一种盐可能来自第二个凭证。
    5. 您可以多次重新散列哈希。

    【讨论】:

      【解决方案2】:

      将一次性代码 (OTC) 视为密码。现在使用安全最佳实践来管理密码。

      此外,您不应使用 6 位数字作为 OTC。就像我说的,这些是(相当于)密码,你不希望这些密码太弱。

      有关如何安全存储密码的更多信息,请参阅Password Storage Cheat Sheet

      【讨论】:

        猜你喜欢
        • 2022-06-25
        • 2020-10-12
        • 1970-01-01
        • 1970-01-01
        • 2019-07-21
        • 1970-01-01
        • 1970-01-01
        • 2018-04-01
        • 2013-06-06
        相关资源
        最近更新 更多