存储"备份代码的最佳方式"用于双因素身份验证?

时间:2012-08-23 15:58:40

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

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

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

2 个答案:

答案 0 :(得分:1)

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

  1. 在一台单独的计算机上存储至少一部分身份验证可以降低两个部分一起受到攻击的风险。
  2. 为您的哈希加盐!盐可能是您网站所独有的,也可能是用户唯一的,只要您可以在需要验证时重新创建它。
    • 为什么盐?字符串123456的md5hash是e10adc3949ba59abbe56e057f20f883e - 正如你所说的那样,很容易被强迫。但是,如果我添加用户的ID怎么办?您可以将其添加到哈希并重新哈希或将其添加到原始文本中,以便:123456aneroid的md5hash为74821b76b332b28532136eb58e1b7f40
    • 也可以使用其他添加盐,请参阅此SO帖子:https://stackoverflow.com/a/5482545/1431750
  3. 数据库应存储这些salted hashes
  4. 您的一种盐可以从第二个凭证中获得。
  5. 您可以多次重新哈希哈希。

答案 1 :(得分:1)

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

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

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