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


Ещё недавно мессенджер был намертво привязан к телефону: стоило закрыть приложение на смартфоне — и веб-версия тут же теряла связь. Мультидевайс сломал эту схему, введя модель «один аккаунт — много устройств», где каждому отведена своя роль.
Главное устройство, или primary, — это телефон. Только он владеет номером и самим аккаунтом, и такое устройство в системе ровно одно. Всё остальное — secondary, то есть спутники. Знакомые всем веб-версия и десктопное приложение как раз из этой категории: их может быть несколько одновременно, и каждое опирается на главный аппарат. Суть в том, что спутник не подменяет телефон, а получает от него делегированный доступ.
Разница проявляется уже на входе. Primary авторизуется как обычный смартфон — по учётным данным аккаунта, введя номер и подтвердив его через SMS. Secondary подключается иначе: пользователь открывает на телефоне раздел «Связанные устройства», наводит камеру на QR-код с экрана ноутбука — и спутник в строю. В клиенте это зашито на уровне запуска: один режим стартует с данными аккаунта, второй — с процедуры QR-привязки к уже существующему primary.
Есть и более глубокое отличие, объясняющее, почему спутник нежизнеспособен в одиночку. Корневой ключ аккаунта хранится исключительно на телефоне и никогда не передаётся спутнику. Вместо этого основной аппарат выдаёт companion отдельный подписанный «пропуск» — собственный ключ устройства, заверенный главным. Отсюда несколько следствий: переписка шифруется отдельно для каждого устройства, поэтому сообщения доходят и до телефона, и до всех спутников; чтобы спутник мог читать историю и состояние аккаунта, primary делится с ним нужными ключами; стоит телефону отвязать устройство, как «пропуск» аннулируется и спутник отваливается. Именно поэтому companion не существует без primary — без подписавшего его телефона у него нет легитимного места в аккаунте.
Если говорить про начинку, сквозное шифрование здесь построено на протоколе Signal, транспорт защищён рукопожатием Noise, а подписи ключей и устройств — на кривой Curve25519. Те же самые кирпичики встречаются и в открытых реализациях; primary выделяется не алгоритмами, а тем, что держит корневой ключ и раздаёт производные. Отсюда и набор действий, доступных только главному устройству: привязка и отвязка других устройств, управление ключами аккаунта и работа в полном одиночку, без единого спутника. Secondary же — делегат с урезанными правами: читает и пишет сообщения, совершает звонки, но самим аккаунтом не распоряжается.
