Когда вы открываете 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/