我正在进行一个项目,要求用户设置2因素身份验证。作为一个额外的选项(除了身份验证应用程序),用户可以选择他们的WhatsApp号码作为身份验证因素。
现在我有两个选项--将OTP发送到用户的WhatsApp (在这种情况下,业务可以被收费),或者向用户显示QR代码,扫描用户的WhatsApp将打开哪个OTP,并将OTP草稿到我的WhatsApp业务号(在这种情况下,业务不会被收取费用)。在这两种情况下,我都生成OTP --只有消息更改的方向。
这两者都是安全的吗?我担心一个黑客为了通过认证而欺骗他的WhatsApp来使用受害者的号码。
发布于 2022-02-12 22:28:13
首先,请注意:除非您安全地接收和验证用户的公钥(“安全号”或WhatsApp所称的任何名称),否则WhatsApp对欺骗的安全性并不比普通SMS更安全(因为普通SMS是它对用户进行身份验证的唯一方式)。如果你试图避免使用短信,因为它是昂贵的,那么WhatsApp是一个合理的选择,只是不要认为它比短信更安全。它可以说是更安全的,因为它是加密的端到端,所以它不能在途中被拦截,这是一个重大的风险与短信。然而,它也比短信更有可能被发送到多个设备(其中一个设备可能被窃取或肩冲)和/或用户仍然有一个WhatsApp号码不再是他们的电话号码(在这种情况下,WhatsApp帐户可能在任何时候被窃取)。
如果您想要增加一些额外的安全性,您的WhatsApp客户端可以在用户设置WhatsApp第一个因素时记录用户的公钥。这样,如果他们的WhatsApp帐户发生了什么事情,您就会知道,因为公钥会改变。
要真正回答你的问题:可以说使用QR代码更好,因为它可以通过一个已经通过身份验证的通道( HTTPS连接到您的前端,大概是一个网页)发送,然后让用户从他们信任的帐户进行响应。简单地将代码发送到一个数字有一个很小的风险,即它不再是用户控制的一个数字(可能他们最近更改了数字并给了您新的号码,但是还没有更新他们的WhatsApp帐户,而其他人已经获得了旧的号码,并设置了WhatsApp将该号码路由到他们)。用户输入电话号码(WhatsApp)也有很小的风险。在任何一种情况下,您都有可能将第二因素代码发送给错误的人,如果他们能够猜到合法用户的密码,他们就可以以用户身份登录。
不过,除此之外,这并不重要。很可能是出于其他原因(成本和用户体验)而不是安全性的原因,您才会回答这个问题。尤其是如果你期望你的用户足够依赖WhatsApp,以至于他们几乎没有犯上述错误的风险(但请注意:人们总是把自己的电子邮件地址弄错;打错电话是很容易的)。
在进行此操作时,请考虑添加对WebAuthn的支持(请参阅库这里),它可以使用硬件令牌(例如Yubikey、Titan密钥)或平台安全性(OS登录方法,如FaceID、TouchID、Windows、Android的指纹扫描器、PIN等)。安全地执行基于公钥的身份验证。WebAuthn可以作为第二个因素,也可以作为唯一的因素,并且是我所知道的唯一能够提供真正强大的防钓鱼保护的身份验证系统(每个站点的公钥是唯一的;即使用户没有意识到他们在错误的站点上,他们的浏览器也会发送不同的公钥)。它通常也比OTP或TOTP (例如Google身份验证器)更方便。
https://security.stackexchange.com/questions/259536
复制相似问题