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