我正在为我的一个项目实施双因素身份验证系统,并希望制定一些“一次性代码”,就像谷歌的双因素身份验证一样。
我的问题是,在服务器上存储这些代码最安全的方法是什么?他们需要在数据库中加密吗?我会使用像bcrypt这样的东西,就像我的密码一样吗?考虑到攻击者会知道每个哈希表示一个6位数字,这会使蛮力时间几乎为零,我认为这可能是一种矫枉过正。
答案 0 :(得分:1)
问题有点模糊,但这里有一些指示:
123456
的md5hash是e10adc3949ba59abbe56e057f20f883e
- 正如你所说的那样,很容易被强迫。但是,如果我添加用户的ID怎么办?您可以将其添加到哈希并重新哈希或将其添加到原始文本中,以便:123456aneroid
的md5hash为74821b76b332b28532136eb58e1b7f40
。答案 1 :(得分:1)
将您的一次性密码(OTC)视为密码。现在使用安全最佳实践来管理密码。
此外,您不应使用6位数字作为场外交易。就像我说的,这些是(相当于)密码,你不希望这些密码变弱。
有关如何安全存储密码的详细信息,请参阅Password Storage Cheat Sheet。