是否应该将2FA的秘密代码放置进行存储



我正在我们网站上使用Google Authenticator实施2FA。如果我正确理解每个用户都会有自己的秘密代码,我将需要登录时验证他们输入的6个数字代码。

将这些秘密代码存储在与用户密码相同的数据库中似乎是一个坏主意(尽管如果有人掌握了数据库,我们有更大的问题),那么周围是否存在?还是应该像对待密码一样对其进行加密?

您无法哈希用于为Google Authenticator生成TOTP代码的秘密,因为您需要原始秘密才能实际生成代码。

正如您所说,如果有人拥有您的数据库,那么无论如何您都会遇到更大的麻烦。但是,这就是2因子身份验证应该如何工作的方式。如果密码确实是安全的,并且攻击者只有TOTP秘密,那么他们所能做的就是生成登录所需的2个因素中的1个,并且他们还有更多的工作要做破坏或窃取密码。

如果您不必担心为用户存储这些秘密并让第三方照顾它,我可以建议您看看Twilio的两个因素身份验证API。全面披露,我为Twilio工作,但是如果您不想担心自己无法进行的秘密,以及利用Authy App(包括没有QR码的秘密转移)和其他事物的优势现在可以使用身份验证的额外设备数据,然后可能很感兴趣。

你是对的。

确实是2FA会增加用户安全性,但根据定义,服务器端并不那么强。如果黑客或恶意员工使用数据库访问转储并发布用户秘密,则广告安全性消失了。

可以做什么?您可以创建一个外部孤立的微服务,该微服务接收用户哈希并生成2FA秘密键,加密密钥并存储在键值数据库中,例如Elasticsearch。您可以在服务器启动后动态设置加密密钥,以不存储硬编码。您可以将数据库存储在员工通过API以外无法访问的外部服务器上存储数据库。

这样的方式,如果恶意演员抛弃了elasticsearch数据库,他们也不知道什么是秘密,即使他访问了加密密钥,他也不知道谁是使用该秘密的用户,因为钥匙是密钥是用户ID哈希(不是用户ID)。

没有什么是完美的,但是2FA的目标是使攻击者更难获得成功。我认为这有帮助。

最新更新