WhatsApp认证是如何工作的?

24

我想开发一个移动应用并使用类似于WhatsApp的用户注册方式。但是我记得几年前曾经讨论过安全问题。当时WhatsApp仅通过用户的电话号码和IMEI进行认证。现在,这种方法显然不太安全,但我不知道如何更加安全地实现。

我很久没有听到关于WhatsApp认证问题的消息了,所以我猜他们现在有更安全的认证方法了。您知道WhatsApp今天是如何做到的吗?

1个回答

24

我来试着回答这个问题。

据我所知,WhatsApp仍然使用您的电话号码作为主要的唯一标识符。当您第一次登录WhatsApp时,会验证该电话号码是否属于您自己。

然而,第二次WhatsApp提供了一个秘密密钥进行登录。这有助于避免像Telegram这样的服务看到的一些攻击,其中可以在任何时间呼叫和截取短信以访问帐户(请查看他们的Web登录的工作方式)。

实际上,他们提供的这个秘密密钥是您的标识符,在本地安全存储,必须在所有后续请求中使用。当然,用户会更换手机。在这种情况下,必须通过短信重新激活帐户,在此过程中将生成新的秘密ID,使之前的ID失效。

因此,攻击者可以通过重新激活尝试我所说的短信拦截协议。但是,如果您在自己的设备上禁用了WhatsApp,则会立即意识到有人正在拦截您的流量。因此,只有在您很长时间没有检查WhatsApp或处于互联网中断状态时,此方法才可能成功。总体而言,这使得他们的方法更加安全。

@Srinivas,您所观察到的只是WhatsApp在其验证服务器上存储特定电话号码无法在接下来的两个小时内进行验证,而不考虑请求的来源。


编辑:回复@Srinivas的评论:

您的最后一个部分绝对正确。我做了几次测试,它如您所说的那样有效。谢谢。但是,我对第一次登录和第二次登录不清楚。

很抱歉我没有讲得更详细。我将尝试重新解释一下。

正如我看到的WhatsApp,初始屏幕是注册(短信代码请求屏幕),第二次登录是验证代码(验证短信代码)。您能为我提供更多信息以便理解吗?

我所说的第一次登录是整个短信验证过程。因此,我将其分为两个部分:

  1. 首次登录:用户请求短信验证码。如果是从另一台设备登录,则需要正确输入验证码,或者让WhatsApp识别SIM卡并自动完成验证。然后用户将登录并可以访问其未交付或备份的消息(如果这是先前存在的帐户)。

  2. 第二次登录:在进行上述验证过程后,WhatsApp会提供一个秘密访问令牌,该令牌存储在设备本地。因此,每次用户打开应用程序并尝试连接到服务器时,都需要使用此访问密钥。正如我解释的那样,如果他们想在另一台设备上重新激活其帐户,则必须从新设备再次完成步骤1,这将生成一个新的秘密密钥 - 使之前的密钥失效,并使仅能使用新设备登录。

  3. 这里有一些文档,我找到了一位创建类似API的人:github.com/mgp25/Chat-API/wiki/WhatsApp-Registration-Flow。请提供您宝贵的意见

    我查看了文档,他们严格遵循相同的模式。可能会让你困惑的是最初的“代码请求令牌”。这只是一种验证正在进行步骤1的请求的设备的有效性的密钥。这确保了尝试注册其设备的用户的来源的合法性。

    以下是其工作原理:

    用户想要完成第一步。因此,他们发送一个请求令牌到服务器,同时附带其身份(电话号码)。这是在应用程序加载时生成的代码。

    这仍不足以阻止在步骤1期间拦截短信。鉴于请求的来源是合法的WhatsApp安装,SMS验证代码可能会让攻击者访问用户的帐户。但是,如我之前所述,这会使步骤2中先前生成的秘密密钥失效。因此,只要用户正在使用WhatsApp并连接到互联网,他们将注意到已从本地注销。

    如果有任何进一步的困惑,请告诉我。


1
在WhatsApp的各种黑客技术中,需要将MAC地址更改为目标手机,但是MAC地址与验证有什么关系? - ransh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接