Когда вы открываете WhatsApp* Web или ставите приложение на ноутбук, оно не «входит в аккаунт» так же, как телефон. Оно привязывается к телефону и становится его спутником. Внутри WhatsApp это два разных сорта устройств - primary (главное) и secondary, оно же companion (связанное). Разница между ними определяет почти всё: как устройство логинится, что оно умеет и что произойдёт, если его отключить.Это разбор на пальцах: без протокольных деталей, только модель и следствия из неё. Термины primary и secondary я взял из кода нашего клиента - в нём это буквально два режима запуска одного бинарника.* Meta Platforms Inc. (владелец Facebook, Instagram, WhatsApp и Messenger) признана экстремистской организацией, её деятельность запрещена на территории РФ. Facebook и Instagram запрещены в РФ. Читать далее
Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели4K
Кейс

* 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 запрещены в РФ.