2

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

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

4

2 回答 2

3

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

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

有关如何安全存储密码的更多信息,请参阅密码存储备忘单。

于 2012-08-24T07:54:27.440 回答
1

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

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