我正在为我的一个副项目实施一个双因素身份验证系统,并希望建立一些“一次性代码”,就像谷歌的双因素身份验证一样。
我的问题是,将这些代码存储在服务器上的最安全方法是什么?他们需要在数据库中加密吗?我会使用像 bcrypt 这样的东西来让它们像我散列密码一样吗?考虑到攻击者知道每个散列代表一个 6 位数字,这将使暴力破解时间几乎为零,我认为这可能是矫枉过正。
我正在为我的一个副项目实施一个双因素身份验证系统,并希望建立一些“一次性代码”,就像谷歌的双因素身份验证一样。
我的问题是,将这些代码存储在服务器上的最安全方法是什么?他们需要在数据库中加密吗?我会使用像 bcrypt 这样的东西来让它们像我散列密码一样吗?考虑到攻击者知道每个散列代表一个 6 位数字,这将使暴力破解时间几乎为零,我认为这可能是矫枉过正。
将您的一次性代码 (OTC) 视为密码。现在使用安全最佳实践来管理密码。
此外,您不应使用 6 位数字作为 OTC。就像我说的,这些是(相当于)密码,你不希望这些密码太弱。
有关如何安全存储密码的更多信息,请参阅密码存储备忘单。
问题有点模糊,但这里有一些指针:
123456
是e10adc3949ba59abbe56e057f20f883e
- 正如你所说,很容易被暴力破解。但是如果我添加用户的 id 呢?您可以将其添加到散列并重新散列或将其添加到原始文本中: md5hash of 123456aneroid
is 74821b76b332b28532136eb58e1b7f40
。