Primary и Secondary: как устроен мультидевайс WhatsApp*

—

от автора

* Meta Platforms Inc. (владелец Facebook, Instagram, WhatsApp и Messenger) признана экстремистской организацией, её деятельность запрещена на территории РФ. Facebook и Instagram запрещены в РФ.

* Meta Platforms Inc. (владелец Facebook, Instagram, WhatsApp и Messenger) признана экстремистской организацией, её деятельность запрещена на территории РФ. Facebook и Instagram запрещены в РФ.

Когда вы открываете WhatsApp* Web или ставите приложение на ноутбук, оно не «входит в аккаунт» так же, как телефон. Оно привязывается к телефону и становится его спутником. Внутри WhatsApp это два разных сорта устройств — primary (главное) и secondary, оно же companion (связанное). Разница между ними определяет почти всё: как устройство логинится, что оно умеет и что произойдёт, если его отключить.

Это разбор на пальцах: без протокольных деталей, только модель и следствия из неё. Термины primary и secondary я взял из кода нашего клиента — в нём это буквально два режима запуска одного бинарника.

* Meta Platforms Inc. (владелец Facebook, Instagram, WhatsApp и Messenger) признана экстремистской организацией, её деятельность запрещена на территории РФ. Facebook и Instagram запрещены в РФ.

Одна учётная запись — несколько устройств

Раньше WhatsApp был жёстко привязан к телефону: закрыл приложение на телефоне — и веб-версия переставала работать. С переходом на мультидевайс появилась модель «один аккаунт — несколько устройств», где у каждого устройства своя роль.

  • Primary — это телефон. Именно он «владеет» номером и аккаунтом. Устройство ровно одно.

  • Secondary — это спутники. Веб и десктоп — знакомые примеры. Их может быть несколько одновременно, и каждый подключается, опираясь на главный.

Ключевая мысль: спутник не заменяет телефон, а получает от него делегированный доступ. Отсюда все различия ниже.

Как они входят

Первое и самое заметное отличие — способ входа.

Primary авторизуется как настоящий телефон: по учётным данным аккаунта. Так же, как это делает приложение WhatsApp на вашем смартфоне после ввода номера и SMS.

Secondary входит по QR-коду. Вы открываете на телефоне «Связанные устройства», сканируете код с экрана ноутбука — и спутник подключён. Знакомый жест «залинковать WhatsApp Web» — это и есть привязка secondary-устройства.

В нашем клиенте это отражено прямо в запуске: primary-режим стартует с данными аккаунта, secondary-режим — с процедуры QR-привязки к уже существующему primary.

Кто кому доверяет

Второе отличие глубже и объясняет, почему спутник не может жить сам по себе.

Идентичность аккаунта — его главный ключ — хранится только на primary, то есть на телефоне. Когда вы привязываете новое устройство, телефон не отдаёт спутнику этот ключ. Вместо этого он выдаёт спутнику отдельный, подписанный «пропуск»: у companion появляется собственный ключ устройства, заверенный главным.

Из этого следуют сразу несколько вещей:

  • сообщения в мультидевайсе шифруются для каждого устройства отдельно — поэтому переписка доедет и до телефона, и до всех спутников;

  • чтобы спутник мог читать зашифрованную историю и состояние аккаунта, primary делится с ним нужными ключами;

  • как только телефон отвязывает устройство, «пропуск» перестаёт действовать, и спутник отваливается.

Именно поэтому companion невозможен без primary: без телефона, который его подписал, у него нет легитимного места в аккаунте.

Если в двух словах про технику: сквозное шифрование переписки построено на протоколе Signal, транспорт защищён рукопожатием Noise, а подписи устройств и ключей — на кривой Curve25519. Это ровно те же кирпичики, что и в открытых реализациях; primary отличается не алгоритмами, а тем, что владеет корневым ключом и раздаёт производные.

Что умеет только primary

Раз главный ключ и роль «владельца» — на телефоне, ряд действий доступен только ему:

  • привязывать и отвязывать другие устройства (спутник сам этого не может);

  • отвечать за управление ключами аккаунта — их обновление и раздачу спутникам;

  • работать в одиночку, вообще без связанных устройств.

Спутник же — это делегат с ограниченными правами: он читает и пишет сообщения, совершает звонки, но не распоряжается самим аккаунтом.

* Meta Platforms Inc. (владелец Facebook, Instagram, WhatsApp и Messenger) признана экстремистской организацией, её деятельность запрещена на территории РФ. Facebook и Instagram запрещены в РФ.

ссылка на оригинал статьи https://habr.com/ru/articles/1086926/