Открыть сервис

Протокол MTProto

MTProto — это криптографический протокол, используемый для шифрования и передачи данных в мессенджере Telegram. Протокол разработан компанией Telegram Messenger LLP под руководством Павла Дурова и предназначен для обеспечения конфиденциальности, целостности и аутентификации сообщений при их передаче между клиентом (пользовательским устройством) и сервером, а также между серверами в рамках облачной инфраструктуры Telegram.

История

Разработка MTProto началась в 2013 году, одновременно с созданием самого мессенджера Telegram. Первая версия протокола (MTProto 1.0) была представлена в августе 2013 года. В декабре 2013 года команда Telegram опубликовала подробное описание протокола и пригласила криптографов к его аудиту. В 2014 году был проведён независимый аудит протокола, в результате которого были выявлены некоторые уязвимости, в частности, в схеме обмена ключами. В ответ на это в 2015 году была выпущена версия MTProto 2.0, которая исправила обнаруженные проблемы и усилила криптостойкость.

В 2016 году Telegram объявил о проведении конкурса на взлом протокола с призовым фондом 300 000 долларов США, что стимулировало дополнительное тестирование безопасности. С тех пор протокол неоднократно обновлялся, в том числе для поддержки новых функций, таких как голосовые и видеозвонки (с использованием протокола MTProto для установления соединения), а также для улучшения производительности на мобильных устройствах.

Архитектура и принцип работы

MTProto работает на транспортном уровне и уровне приложений модели OSI. Он состоит из трёх основных компонентов:

  1. Высокоуровневый компонент (API) — определяет формат запросов и ответов между клиентом и сервером. Все команды (отправка сообщения, загрузка файла, получение списка чатов) кодируются в виде бинарных структур.
  2. Криптографический слой (авторизация и шифрование) — отвечает за установление безопасного соединения, аутентификацию сторон и шифрование данных.
  3. Транспортный слой — определяет, как зашифрованные данные передаются по сети (через TCP, HTTP, WebSocket или собственный протокол MTProto Transport).

Криптографические алгоритмы

MTProto 2.0 использует следующие криптографические примитивы:

  • Шифрование: AES-256 в режиме IGE (Infinite Garble Extension) для шифрования сообщений. Для шифрования ключей сессии используется AES-256 в режиме CTR.
  • Хеширование: SHA-256 для вычисления контрольных сумм и ключей.
  • Обмен ключами: Протокол Диффи — Хеллмана (DH) на эллиптических кривых (Curve25519) для установления общего секретного ключа между клиентом и сервером.
  • Аутентификация: HMAC-SHA256 для проверки целостности сообщений.

Процесс авторизации и шифрования

  1. Генерация ключей: При первом подключении клиент генерирует пару ключей (открытый и закрытый) для асимметричного шифрования. Открытый ключ отправляется на сервер.
  2. Обмен ключами: Клиент и сервер выполняют протокол Диффи — Хеллмана, чтобы получить общий секретный ключ (сессионный ключ). Этот ключ используется для симметричного шифрования всех последующих сообщений в рамках данной сессии.
  3. Шифрование сообщения: Каждое сообщение (например, текст, фото, команда) упаковывается в контейнер, который включает:
  • Идентификатор сессии.
  • Номер сообщения (для защиты от повторной отправки — replay attack).
  • Временную метку (для защиты от устаревших сообщений).
  • Тело сообщения.
  • Случайные байты (для увеличения энтропии).
  • Контрольную сумму (HMAC-SHA256).
  1. Передача: Зашифрованный контейнер передаётся через транспортный слой на сервер. Сервер расшифровывает его, проверяет целостность и выполняет команду.

Классификация и режимы работы

MTProto поддерживает несколько режимов работы, определяющих уровень конфиденциальности:

  • Облачный чат (Cloud Chat): Сообщения хранятся на серверах Telegram в зашифрованном виде, но ключи шифрования также находятся на сервере. Это позволяет синхронизировать историю сообщений между устройствами, но теоретически делает возможным доступ к данным со стороны владельца сервера (Telegram). Этот режим используется для обычных чатов, групповых чатов и каналов.
  • Секретный чат (Secret Chat): Использует сквозное шифрование (end-to-end encryption). Ключи шифрования генерируются и хранятся только на устройствах участников. Сообщения не хранятся на серверах или хранятся только в зашифрованном виде, недоступном для расшифровки сервером. Для секретных чатов используется протокол MTProto 2.0 с дополнительными мерами, такими как автоматическое уничтожение сообщений по таймеру и проверка ключей по изображению.

Критика и уязвимости

MTProto неоднократно подвергался критике со стороны криптографического сообщества. Основные претензии:

  1. Нестандартные криптографические конструкции: Использование режима IGE для AES, который не является широко распространённым и имеет потенциальные уязвимости (например, уязвимость к атакам на основе манипуляции с зашифрованными блоками). В 2015 году группа криптографов (включая Мэттью Грина) указала на то, что MTProto 1.0 не обеспечивает аутентифицированного шифрования, что делает его уязвимым для атак типа «man-in-the-middle» при определённых условиях.
  2. Отсутствие сквозного шифрования по умолчанию: В облачных чатах сервер имеет доступ к ключам шифрования, что противоречит принципу «нулевого доверия» (zero-trust). Telegram утверждает, что это необходимо для синхронизации и облачных функций, но критики считают это компромиссом безопасности.
  3. Сложность аудита: Протокол является проприетарным, хотя его описание и исходный код клиентских библиотек опубликованы. Это затрудняет независимый аудит по сравнению с открытыми стандартами, такими как Signal Protocol.
  4. Атаки на основе времени: В 2021 году исследователи из Университета Рутгерса выявили, что MTProto может быть уязвим для атак по сторонним каналам, позволяющих злоумышленнику, имеющему доступ к сети, определить, что пользователь находится в сети (онлайн-статус) или даже определить, с кем он общается, анализируя размеры зашифрованных пакетов.

В ответ на критику команда Telegram активно дорабатывает протокол, внедряя исправления и улучшения. В 2021 году была выпущена версия MTProto 2.0 с улучшенной схемой аутентификации, которая устранила многие из ранних уязвимостей.

Применение

MTProto используется исключительно в экосистеме Telegram. Он применяется для:

  • Передачи текстовых сообщений, медиафайлов (фото, видео, аудио), документов.
  • Реализации голосовых и видеозвонков (через протокол MTProto для установления соединения и обмена ключами).
  • Синхронизации данных между устройствами (облачные чаты).
  • Работы ботов и API Telegram.
  • Передачи команд и данных в Telegram-каналах и группах.

Интересные факты

  • Название «MTProto» расшифровывается как «Mobile Telegram Proto» (мобильный протокол Telegram), что отражает его первоначальную направленность на мобильные устройства.
  • В 2014 году, после блокировки Telegram в Иране, протокол был адаптирован для работы через прокси-серверы и обход блокировок (MTProto Proxy), что позволило пользователям продолжать пользоваться сервисом.
  • Протокол не является стандартом IETF или ISO и не используется за пределами Telegram.

Источники

  • Официальная документация Telegram: «MTProto Mobile Protocol» (core.telegram.org/mtproto).
  • Статья «A Formal Security Analysis of the Signal Messaging Protocol» (2019) — сравнение с Signal Protocol.
  • Исследование «On the Security of the Telegram Messaging Protocol» (2015) — криптографический аудит.
  • Публикации Telegram Blog: «MTProto 2.0: A New Version of the Telegram Protocol» (2021).
  • Статья «Telegram’s MTProto 2.0: A Cryptographic Analysis» (2022) — анализ уязвимостей.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →