我想开发一个移动应用并使用像用户注册这样的whatsapp。现在我记得几年前讨论过的安全问题。 Whatsapp用于通过电话号码和IMEI对用户进行身份验证。现在当然这不是很安全,但我真的不知道如何更安全。
现在我已经很长时间没有听到有关Whatsapp身份验证问题的消息,所以我猜他们现在有了安全的方法。你知道Whatsapp今天是怎么做到的吗?
答案 0 :(得分:13)
我会抓住这个问题。
据我所知,Whatsapp仍然使用您的电话号码作为主要唯一标识符。第一次登录Whatsapp时,您需要验证自己的电话号码。
然而,Whatsapp第二次在登录时提供密钥。这有助于避免像Telegram看到的一些攻击服务,可以在任何时候调用和拦截SMS来访问帐户(看看他们的网络登录是如何工作的)。
实际上,他们提供的密钥是您的标识符,它在本地安全存储,必须在所有进行中的请求中使用。当然,用户可以切换手机。在这种情况下,必须通过SMS重新激活帐户,其中将生成新的密码ID,使之前的密码无效。
因此,攻击者可以通过重新激活来尝试我所说的SMS拦截协议。这个问题是你发现某人正在立即拦截你的流量,因为Whatsapp会在你自己的设备上被禁用。因此,如果你没有检查Whatsapp一段时间或者正在互联网中断,这只能是成功的。总的来说,这使他们的方法安全。
@Srinivas您所观察到的只不过是Whatsapp存储在接下来的两个小时内无法验证特定电话号码,无论请求的来源如何,都在验证服务器上。
编辑:回应@ Srinivas的评论:
你答案的最后一部分绝对正确。我做了很少的测试,它就像你说的那样有效。谢谢。但我不清楚第一次登录和第二次登录。
我为不彻底而道歉。我会尝试重新解释。
正如我看到whatsapp,初始屏幕是注册(短信代码请求屏幕),第二次登录是验证码(验证短信代码)。您能为我的理解提供更多信息吗?
首次登录时我的意思是整个短信验证流程。因此,我将其分为两部分:
首次登录:用户请求短信验证码。如果来自其他设备,他们需要正确输入代码,或者让Whatsapp识别SIM并自动完成验证。然后,如果它们是以前存在的帐户,则可以登录并访问未传递或备份的邮件。
第二次登录:在此验证过程之后,Whatsapp立即提供秘密访问令牌,该令牌存储在设备本地。因此,只要他们打开应用程序并尝试连接到服务器,就需要使用此访问密钥。正如我所解释的,如果他们想要在其他设备上重新激活他们的帐户,他们必须再次从新设备完成第1步,然后生成新的密钥 - 使之前的设备无效一个并且只能使用新设备登录。
这里有一些我发现创建类似api的文档:github.com/mgp25/Chat-API/wiki/WhatsApp-Registration-Flow。请提供您宝贵的意见
我查看了文档,他们精确地遵循相同的模式。可能让您感到困惑的是最初的代码请求令牌"。这只是一个验证正在请求完成步骤1的设备的有效性的密钥。这确保了尝试注册其设备的用户的来源的合法性。
以下是如何运作的:
用户想完成第一步。因此,他们向服务器发送请求令牌及其身份(电话号码)。这是在加载到应用程序时提供的代码。
这仍然不足以在步骤1期间停止SMS拦截。鉴于请求的来源是合法的Whatsapp安装,SMS验证码可以让攻击者访问用户的权限。帐户。但是,正如我之前所指出的,这会使步骤2中先前生成的密钥无效。因此,只要用户主动使用Whatsapp并连接到Internet,用户就会注意到他们已在本地登出。
让我知道是否还有混乱。
答案 1 :(得分:3)
如今Whatsapp授权您只需向手机发送短信即可使用该应用。如果您手机的SIM卡号码与您输入的号码相同,则Whatsapp会自动从短信中获取代码并授权您的手机。如果没有,您仍然需要使用使用该电话号码的电话并输入验证码。