Архитектура сквозной защиты и базовые принципы криптографии

Чтобы понять механику процесса, нужно разделить шифрование при передаче (Transport Layer Security, TLS) и сквозное шифрование (E2EE). При обычной схеме клиент-сервер сообщение шифруется на пути от телефона к серверу, там расшифровывается для обработки или хранения в базе данных, а затем снова шифруется и летит к адресату. В схеме со сквозным шифрованием сервер превращается в слепого почтальона. Сервер видит только технические метаданные (размер пакета, время отправки, IP-адреса устройств), но содержимое полезной нагрузки остается для него случайным набором байтов.

Фундаментом этой системы служит комбинация симметричного и асимметричного шифрования. Симметричные алгоритмы вроде AES-256 работают быстро и требуют минимальных ресурсов процессора, что критично для мобильных устройств при отправке тяжелых медиафайлов. Однако симметричный алгоритм использует один и тот же ключ для замка и отмычки. Передавать этот ключ по открытой сети нельзя, иначе его перехватят. Решают проблему с помощью асимметричной криптографии, где у каждого пользователя создается пара ключей: открытый (публичный), который можно раздавать всем подряд, и закрытый (приватный), который генерируется аппаратно и никогда не покидает память смартфона.

Как участники договариваются о секрете без его передачи

В основе безопасной связи лежит протокол Диффи — Хеллмана на эллиптических кривых (ECDH). Он позволяет двум абонентам через абсолютно незащищенный интернет прийти к общему общему секретному числу, не передавая само это число по проводам.

Математика здесь опирается на так называемые односторонние функции. В одну сторону вычисление происходит за доли миллисекунды, а обратная операция требует перебора, занимающего миллиарды лет работы современных суперкомпьютеров. Пользователь Алиса берет свой закрытый ключ и открытый ключ Боба, производит криптографическую операцию умножения точки на эллиптической кривой и получает результат. Боб берет свой закрытый ключ и открытый ключ Алисы, выполняет точно такое же математическое действие и получает абсолютно то же самое число. Полученное значение становится общим сессионным ключом, хотя по сети передавались исключительно открытые параметры.

Протокол Signal и механизм Double Ratchet

Золотым стандартом индустрии признан протокол Signal Protocol, разработанный криптографами Мокси Марлинспайком и Тревором Перрином в 2013 году. Сегодня этот открытый код используется не только в самом приложении Signal, но и интегрирован в WhatsApp, секретные чаты Telegram, Skype и мессенджер Google Messages. Главная инновация Signal заключается в алгоритме двойного храповика (Double Ratchet Algorithm).

В механике храповик — это зубчатое колесо, которое крутится строго в одном направлении и блокирует ход назад. В криптографии храповик постоянно обновляет ключи шифрования. В Signal работают два таких храповика одновременно.

  1. Симметричный храповик на базе функций KDF (Key Derivation Function). С каждым отправленным или полученным сообщением внутреннее состояние цепочки необратимо мутирует, выдавая одноразовый ключ ровно на одну фразу, после чего исходные данные затираются в оперативной памяти.
  2. Асимметричный храповик Диффи — Хеллмана. При каждом обороте диалога (когда собеседник присылает ответную реплику) устройства генерируют новые эфемерные пары открытых и закрытых ключей, полностью перезагружая энтропию всей сессии.

Такая сложная структура решает проблему компрометации устройства и дает два важнейших криптографических свойства: прямую секретность (Forward Secrecy) и пост-компрометационную безопасность (Break-in Recovery). Если злоумышленник через год после переписки физически взломает телефон и извлечет текущий сессионный ключ, он не сможет расшифровать прошлый архив сообщений, потому что те ключи уже уничтожены и математически не восстановимы из текущего состояния. Более того, как только пользователь отправит следующее сообщение, алгоритм провернет храповик вперед с новыми открытыми ключами, и перехватчик снова потеряет возможность читать будущий диалог.

Проблема доставки офлайн и протокол X3DH

Классический обмен Диффи — Хеллмана требует, чтобы оба собеседника были в сети одновременно и обменивались сигналами в реальном времени. В смартфонах это невозможно: абонент может лететь в самолете или сидеть с разряженным аккумулятором. Для решения этой задачи протокол Signal использует алгоритм Extended Triple Diffie-Hellman (X3DH).

При регистрации в мессенджере приложение создает и выгружает на сервер пачку криптографических данных: идентификационный открытый ключ устройства, подписанный открытый ключ с ограниченным сроком жизни и запас из нескольких десятков одноразовых ключей предварительной генерации (One-Time Prekeys). Когда Алиса впервые пишет Бобу, находящемуся в офлайне, ее приложение запрашивает с сервера эти открытые заготовки Боба, сервер отдает один одноразовый ключ и тут же удаляет его у себя. Алиса прямо на своем телефоне вычисляет комбинированный секрет из четырех операций Диффи — Хеллмана, запечатывает текст и отправляет на сервер. Когда Боб включит телефон, он заберет параметры посылки, применит свои сохраненные приватные части и мгновенно восстановит тот же сессионный ключ без прямого контакта с Алисой.

Атака посредника и проверка безопасности

Слабое звено любой асимметричной системы — аутентификация. Злоумышленник с контролем над сетевой инфраструктурой или взломанным сервером мессенджера может провернуть атаку Man-in-the-Middle (человек посередине). В этой схеме атакующий перехватывает открытый ключ Боба и подменяет его своим открытым ключом, отправляя его Алисе, а Бобу отдает свой ключ под видом ключа Алисы. В результате Алиса шифрует данные для шпиона, тот их читает, перешифровывает ключом Боба и пересылает дальше. Ни один из участников трагедии ошибки шифра не замечает.

Именно поэтому во всех надежных мессенджерах предусмотрен механизм верификации собеседника — так называемый код безопасности или отпечаток ключа (Safety Number). Это криптографический хеш от объединенных публичных ключей обоих собеседников. Он отображается в профиле диалога в виде последовательности из 60 цифр или QR-кода. Сверив этот QR-код при личной встрече или зачитав контрольные цифры по доверенному альтернативному каналу связи, пользователи математически гарантируют, что в их криптографический диалог никто не встроился.

Частые вопросы

Почему Telegram по умолчанию не использует сквозное шифрование везде?

В Telegram стандартные чаты и группы используют шифрование типа клиент-сервер (протокол MTProto). Это сделано разработчиками намеренно для мгновенной синхронизации гигантской истории сообщений, поиска по тексту и доступа к файлам с нескольких устройств одновременно (планшет, веб-версия, ноутбук). Сквозное шифрование в Telegram работает только в специальных Секретных чатах, которые привязаны строго к одному физическому аппарату и не восстанавливаются при входе с другого смартфона.

Как шифруются большие групповые звонки и чаты?

Для групповых чатов протокол Signal использует алгоритм Sender Keys. Каждый участник генерирует собственный ключ отправки и один раз передает его всем членам группы по персональным защищенным E2EE-каналам. После этого участник шифрует сообщение своим групповым ключом и транслирует один пакет на сервер, а сервер просто тиражирует его копии остальным собеседникам. Для групповых видеозвонков применяются протоколы WebRTC с расширениями SFrame, где видеопоток шифруется на устройстве, а медиасервер перенаправляет пакеты без возможности расшифровать видеоряд.

Смогут ли квантовые компьютеры взломать современные мессенджеры?

Квантовый алгоритм Шора теоретически способен за полиномиальное время находить дискретные логарифмы, что разрушит алгоритмы Диффи — Хеллмана на эллиптических кривых. Симметричный шифр AES-256 против квантового алгоритма Гровера останется устойчивым (эффективная длина ключа упадет до 128 бит, чего достаточно для защиты). Криптографы уже внедряют постквантовую защиту: например, в Signal с 2023 года работает протокол PQXDH, сочетающий стандартный эллиптический обмен с постквантовым алгоритмом CRYSTALS-Kyber.

Что происходит с ключами при смене или потере смартфона?

При переустановке мессенджера на новый телефон генерируется совершенно новая пара мастер-ключей, так как приватный ключ не передается через сервер. Старые сообщения, если они не были перенесены локально через прямое P2P-подключение устройств, расшифровать на новом смартфоне невозможно. При этом у всех ваших собеседников появится системное предупреждение о том, что код безопасности изменился.