Спорили о том, какой мессенджер разрешить для рабочей переписки. Аргумент, который закрыл обсуждение: «там сквозное шифрование, значит, содержимое никто не прочитает».
С этим утверждением всё в порядке. Оно верное. Я согласился и только потом сообразил, что мы обсуждали не то: вопрос был не «прочитают ли содержимое», а «что вообще узнает сторона, через которую всё это идёт».
Ответ на второй вопрос из первого не следует.
Почему часть данных не может быть зашифрована
Сквозное шифрование означает, что ключи есть у отправителя и получателя, а у сервера их нет. Сервер передаёт непрозрачный для него блок.
Но чтобы этот блок доставить, сервер обязан знать адресата. Значит, ему известны как минимум отправитель, получатель и момент отправки - иначе доставка невозможна в принципе. Это не недоработка, это условие работы сети.
Дальше важно различать двух разных наблюдателей, потому что видят они разное. Сервер мессенджера видит, кто кому пишет и кто в какие группы входит; о вашем провайдере он получает сведения только из адреса подключения. Наблюдатель на канале - провайдер, владелец сети Wi-Fi - видит адрес, объёмы и время, но состава групп и адресатов не видит.
Видеть и хранить - тоже разные вещи, и это разделение важно: часть сервисов не сохраняет почти ничего из того, что видит.
Вот что видно в момент доставки:
кто с кем связывается и в какую сторону;
время отправки; насколько точно оно сохраняется, зависит от того, что сервис пишет в журналы;
приблизительный размер и то, была ли отдельная загрузка файла в хранилище: по этому видно, текст это или вложение и насколько оно крупное. Сам текст многие мессенджеры дополняют до фиксированной длины, так что по размеру шифротекста длину сообщения восстановить можно лишь грубо;
частота и ритм: кто отвечает сразу, кто через сутки, в какие часы человек активен;
состав групп;
адрес подключения, а значит, страна и провайдер;
модель устройства и версия приложения - в том объёме, в каком их сообщает клиент.
Метаданные - это не облегчённая версия содержимого
Обычная реакция: пусть видят, кто с кем, - главное, что не читают.
Возьмите набор выше и посмотрите, что из него собирается.
График «кто с кем и когда» - это структура организации: кто с кем работает, кто чей руководитель, какие отделы взаимодействуют перед выпуском. Строится это без единого прочитанного слова.
Резкое изменение ритма - это событие. Всплеск переписки между юридическим отделом и внешним номером в нерабочее время говорит о происходящем больше, чем текст любого отдельного сообщения.
И самое прямое: сам факт контакта. Переписка сотрудника с конкурентом, гражданина с журналистом, пациента с клиникой - здесь содержание не нужно, достаточно того, что контакт был.
Содержимое отвечает на вопрос «что сказали». Метаданные - на вопрос «что происходит». Второй чаще и есть настоящий.
У разных сервисов это устроено по-разному
Разница здесь не в криптографии, а в том, что сервис хранит. Одни привязывают учётную запись к номеру телефона и держат социальный граф на своей стороне, другие спроектированы так, чтобы у сервера этих сведений было как можно меньше. Это не оценка «хороший - плохой»: граф на сервере даёт синхронизацию между устройствами и восстановление переписки, и за удобство платят именно им.
Смотреть тут стоит на отчёты о государственных запросах. Они полезнее маркетинговых обещаний, хотя это по-прежнему слова сервиса о себе; сильнее их - опубликованные материалы судебных дел, где виден конкретный перечень выданного.
Картина по ним такая: у сервисов, спроектированных так, чтобы хранить минимум, выдача сводится к дате создания учётной записи и дате последнего подключения - больше у них попросту нет. У сервисов, хранящих граф контактов на своей стороне, список выдаваемого заметно длиннее.
Разница здесь именно в проектировании: данные, которые не собраны, нельзя ни выдать, ни потерять.
Что проходит мимо шифрования
Резервные копии. Самая частая дыра. Переписка зашифрована при передаче, а копия уезжает в облако, и там она может быть зашифрована ключом, который есть у его поставщика. Тогда содержимое доступно - не в мессенджере, а рядом с ним. Настройка эта есть, но включена не везде и не по умолчанию.
Уведомления. Текст сообщения в шторке телефона проходит через службу доставки уведомлений операционной системы. Часть приложений шлёт туда только сигнал «есть новое», а текст подтягивает уже само приложение; часть - отправляет текст. Отличить одно от другого можно простым опытом: заблокировать экран, выключить сеть на телефоне и попросить прислать сообщение. Пришло уведомление с текстом при выключенной сети - текст был в самом уведомлении. Не пришло ничего - приложение забирает его само. Отдельно от этого в настройках почти всегда есть переключатель «скрывать текст в уведомлениях», и его стоит включить независимо от результата опыта.
Предпросмотр ссылок. Красивая карточка со ссылкой появляется потому, что кто-то по ссылке перешёл. Если переход выполняет сервер, на нём остаётся запись о том, какие ссылки вы отправляете.
Синхронизация контактов. При установке приложение обычно просит доступ к адресной книге - и это отдельный, самый прямой канал сведений о связях, никак не связанный с шифрованием переписки.
Второй собеседник. Скриншот, пересылка, открытая переписка на экране в кафе. Криптография тут не участвует вообще.
Ограничения
Метаданные принципиально не убираются полностью. Системы, которые пытаются их скрыть, существуют: mix-сети, перемешивающие сообщения между узлами; постоянный фоновый поток пустышек, на фоне которого не видно настоящих сообщений (cover traffic); протоколы приватного поиска, при которых сервер отдаёт данные, не узнавая, что именно запросили. Платят они за это задержкой, расходом трафика и сложностью - и массовыми не становятся.
Свести к минимуму можно, убрать - нет. И это надо принимать как условие, а не искать сервис, у которого «этого нет».
Второе ограничение - про сам разговор о выборе мессенджера. Вопрос «безопасен ли он» бессмысленный, пока не назван тот, от кого защищаемся. От случайного человека в кафе, от рекламной аналитики, от вашего провайдера, от самого сервиса, от запроса государственного органа - это пять разных ответов, и хороший в одном случае может быть плохим в другом.
Что с этим делать
Разделять вопросы. «Прочитает ли посторонний мою переписку» и «узнает ли кто-то, что я с этим человеком переписывался» - два разных требования, и второе шифрованием не закрывается.
Смотреть на резервные копии и уведомления, а не только на наличие сквозного шифрования. Дыры оказываются там.
Не подключать синхронизацию контактов, если она не нужна для работы.
И для чувствительных обсуждений исходить из того, что факт разговора виден. Если это неприемлемо, задача решается не выбором мессенджера, а тем, чтобы разговор шёл не там.
Что посмотреть у себя
Открыть настройки резервного копирования в мессенджере, которым пользуетесь для работы. Посмотреть, зашифрована ли копия отдельным ключом и знаете ли вы этот ключ.
Посмотреть, что показывается в уведомлении на заблокированном экране.
Посмотреть, какие разрешения выданы приложению, и отдельно - доступ к контактам.
Проверить в корпоративных правилах, есть ли ответ на вопрос «от кого мы защищаемся». Если в правилах написано «использовать мессенджеры со сквозным шифрованием», ответа там нет, и требование непроверяемо.