Что такое MTProto

Лето 2013 года. Братья Дуровы покидают «ВКонтакте» — компанию, которую сами создали. У них нет офиса, нет постоянной страны, нет лицензий. Есть только идея мессенджера, переписку в котором нельзя прочитать даже при доступе к серверу.

Технической частью занимается Николай Дуров и другие разработчики Telegram. Николай — математик, который раньше писал ядро ВКонтакте. Павел берёт на себя финансирование и инфраструктуру. За несколько месяцев Николай создаёт протокол и называет его MTProto.

14 августа 2013 года выходит приложение для iOS, в октябре — для Android.

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

Что такое MTProto

MTProto — это собственный протокол Telegram для шифрования и передачи данных между приложением и сервером. Расшифровывается как Mobile Transport Protocol.

Большинство сайтов используют для защиты соединения готовый стандарт — TLS, тот же самый, что шифрует HTTPS-трафик. Telegram пошёл другим путём и написал собственную криптографическую схему с нуля, заточенную под мобильные сети с нестабильным соединением.

По официальному описанию Telegram протокол состоит из трёх компонентов. Высокоуровневый компонент превращает запросы и ответы в двоичные сообщения. Криптографический слой шифрует эти сообщения перед отправкой. Транспортный компонент решает, как именно клиент и сервер обмениваются байтами — через TCP, HTTP или другой канал.

Каждый слой не знает деталей другого. Это тот же принцип инкапсуляции, что в обычном TCP/IP — просто Telegram реализовал его на свой лад, а не взял существующий стек.

Облачные чаты и секретные чаты — в чём разница

Вот где начинается главная путаница, в которой тонет большинство объяснений MTProto.

В Telegram есть два разных режима, и они защищены принципиально по-разному.

Обычные чаты — те, что вы открываете по умолчанию — шифруются между клиентом и сервером. Telegram технически может расшифровать содержимое на своей стороне. Именно поэтому такие чаты синхронизируются между телефоном, компьютером и веб-версией одновременно — сервер хранит сообщения и раздаёт их на все устройства.

Секретные чаты (Secret Chats) — отдельная функция, которую нужно включить вручную для конкретного собеседника. Здесь работает настоящее end-to-end шифрование: ключи существуют только на двух устройствах, сервер видит зашифрованный набор байт и не может его прочитать. Расплата за это — секретные чаты не синхронизируются. Завели секретный чат на телефоне — на компьютере его не будет.

Разница хорошо видна, если разложить по пунктам.

В обычном чате содержимое видят сервер Telegram и получатель, сообщения синхронизируются между всеми вашими устройствами, режим включён по умолчанию, самоудаления сообщений нет.

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

Главное отличие в одной фразе — обычный чат меняет приватность на удобство синхронизации, секретный чат делает обратный выбор.

Большинство пользователей вообще не пользуется секретными чатами и думает, что вся переписка в Telegram защищена одинаково. Это не так. Реальный случай это подтвердил: в неавторизованном клиенте «Телега» удалённый флаг конфигурации на сервере оператора мог полностью отключать возможность создавать секретные чаты — и пользователь об этом даже не узнавал.

Почему криптографы ругали MTProto — и что изменилось

Когда Telegram только запустился, написание собственного криптографического протокола вместо использования проверенных стандартов вызвало резкую критику. Среди прочих протокол разбирал криптограф Мэттью Грин из Университета Джонса Хопкинса, указывая на структурные проблемы первой версии — в частности, на использование режима шифрования AES-IGE и слабую схему вывода ключей.

Часть этой критики Telegram учёл. MTProto 1.0 был признан устаревшим в пользу версии 2.0 в декабре 2017 года, которая появилась в клиентах Telegram начиная с версии 4.6. Новая версия использует 256-битное симметричное шифрование AES, 2048-битное RSA-шифрование и обмен ключами Диффи-Хеллмана.

Самое весомое, что игнорируют почти все статьи про MTProto: в декабре 2020 года команда из Университета Удине в Италии формально доказала корректность протокола версии 2.0, используя верификатор ProVerif на основе модели Долева-Яо. Это не маркетинговое заявление самого Telegram, а независимая академическая проверка. До этого детальный криптоанализ существовал только для устаревшей первой версии — именно она и собрала всю критику, которую до сих пор пересказывают в интернете как актуальную.

MTProto-прокси — не то же самое, что протокол шифрования

Здесь ещё одна частая путаница. MTProto-прокси — не часть шифрования переписки, а отдельный инструмент для обхода блокировок.

Технология построена на обфускации. Прокси-сервер маскирует трафик Telegram так, чтобы он выглядел для систем глубокого анализа пакетов (DPI) как случайный шум или обычный HTTPS-трафик, а не как узнаваемый протокол мессенджера. Это похоже на принцип, который использует Tor для маскировки своего трафика, только заточенный конкретно под Telegram.

Важный нюанс: содержимое сообщений шифруется самим MTProto ещё до того, как попадает на прокси-сервер. Владелец прокси видит ваш IP-адрес и объём трафика, но не сами сообщения — в отличие от обычного открытого прокси без шифрования.

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

Если вы уже разбирались, какие VPN работают в России, MTProto-прокси — это похожий по задаче, но совсем другой по устройству инструмент:

VPN шифрует и перенаправляет весь трафик устройства, прокси Telegram работает только с трафиком одного приложения.

MTProto против Signal Protocol

Signal Protocol часто называют золотым стандартом шифрования в мессенджерах — его используют сам Signal, а также WhatsApp.

Разница в философии, а не только в технических деталях.

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

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

Signal жертвует удобством ради постоянной защиты. Telegram выбрал обратный компромисс — удобство синхронизации в обмен на то, что сквозное шифрование стало опцией, а не правилом.

Какой подход лучше — зависит от задачи. Для повседневной переписки большинству пользователей достаточно стандартной защиты Telegram. Для действительно чувствительных разговоров стоит пользоваться секретными чатами в Telegram, либо переходить в мессенджер с обязательным E2E.

Так насколько MTProto безопасен на практике

Три факта стоит держать в голове одновременно.

Первое — протокол неплохо документирован и был формально верифицирован в актуальной версии. Это снимает старые обвинения в «криптографии на доверии», актуальные для версии 2013-2017 года.

Второе — защита, которую обеспечивает MTProto, в большинстве случаев применяется только до сервера Telegram, а не между двумя собеседниками. Сервер технически способен прочитать содержимое обычных чатов.

Третье — реальная сквозная защита есть только в секретных чатах, и она работает, только если вы её включили сами для конкретного разговора.

MTProto — это не один уровень защиты, а целая архитектура с разными режимами. Понимание этой разницы и есть ответ на вопрос «безопасен ли Telegram» — правильнее спрашивать «от какого режима чата идёт речь».