作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力在我们的网站上使用 Google 身份验证器实现 2FA。如果我理解正确的话,每个用户都会有自己的密码,我在登录时需要使用该密码来验证他们输入的 6 位数代码。
将这些 secret 代码与用户密码存储在同一个数据库中似乎是一个坏主意(尽管,如果有人掌握了数据库,我们就会遇到更大的问题),有什么办法吗?或者应该将它们视为密码并进行加密?
最佳答案
您无法对用于为 Google 身份验证器生成 TOTP 代码的 key 进行哈希处理,因为您需要原始 key 才能实际生成代码。
正如你所说,如果有人拥有你的数据库,那么你的麻烦就更大了。然而,这就是双因素身份验证的工作原理。如果密码确实经过安全散列处理,并且攻击者只有 TOTP secret ,那么他们所能做的就是生成登录所需的 2 个因素中的 1 个,并且他们需要做更多的工作来破解或窃取密码。
如果您不想担心为用户存储这些 secret 并让第三方来处理,我可以建议您查看 Twilio's Two Factor Authentication API 。完全公开,我在 Twilio 工作,但如果您不想担心照顾无法散列的 secret ,也不想利用其他东西,例如 Authy app (包括无二维码的 secret 转账)和extra device data that is now available with authentications那么它可能会引起兴趣。
关于security - 2FA 密码是否应该进行散列存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46055146/
我是一名优秀的程序员,十分优秀!