Протокол 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. Он состоит из трёх основных компонентов:
- Высокоуровневый компонент (API) — определяет формат запросов и ответов между клиентом и сервером. Все команды (отправка сообщения, загрузка файла, получение списка чатов) кодируются в виде бинарных структур.
- Криптографический слой (авторизация и шифрование) — отвечает за установление безопасного соединения, аутентификацию сторон и шифрование данных.
- Транспортный слой — определяет, как зашифрованные данные передаются по сети (через TCP, HTTP, WebSocket или собственный протокол MTProto Transport).
Криптографические алгоритмы
MTProto 2.0 использует следующие криптографические примитивы:
- Шифрование: AES-256 в режиме IGE (Infinite Garble Extension) для шифрования сообщений. Для шифрования ключей сессии используется AES-256 в режиме CTR.
- Хеширование: SHA-256 для вычисления контрольных сумм и ключей.
- Обмен ключами: Протокол Диффи — Хеллмана (DH) на эллиптических кривых (Curve25519) для установления общего секретного ключа между клиентом и сервером.
- Аутентификация: HMAC-SHA256 для проверки целостности сообщений.
Процесс авторизации и шифрования
- Генерация ключей: При первом подключении клиент генерирует пару ключей (открытый и закрытый) для асимметричного шифрования. Открытый ключ отправляется на сервер.
- Обмен ключами: Клиент и сервер выполняют протокол Диффи — Хеллмана, чтобы получить общий секретный ключ (сессионный ключ). Этот ключ используется для симметричного шифрования всех последующих сообщений в рамках данной сессии.
- Шифрование сообщения: Каждое сообщение (например, текст, фото, команда) упаковывается в контейнер, который включает:
- Идентификатор сессии.
- Номер сообщения (для защиты от повторной отправки — replay attack).
- Временную метку (для защиты от устаревших сообщений).
- Тело сообщения.
- Случайные байты (для увеличения энтропии).
- Контрольную сумму (HMAC-SHA256).
- Передача: Зашифрованный контейнер передаётся через транспортный слой на сервер. Сервер расшифровывает его, проверяет целостность и выполняет команду.
Классификация и режимы работы
MTProto поддерживает несколько режимов работы, определяющих уровень конфиденциальности:
- Облачный чат (Cloud Chat): Сообщения хранятся на серверах Telegram в зашифрованном виде, но ключи шифрования также находятся на сервере. Это позволяет синхронизировать историю сообщений между устройствами, но теоретически делает возможным доступ к данным со стороны владельца сервера (Telegram). Этот режим используется для обычных чатов, групповых чатов и каналов.
- Секретный чат (Secret Chat): Использует сквозное шифрование (end-to-end encryption). Ключи шифрования генерируются и хранятся только на устройствах участников. Сообщения не хранятся на серверах или хранятся только в зашифрованном виде, недоступном для расшифровки сервером. Для секретных чатов используется протокол MTProto 2.0 с дополнительными мерами, такими как автоматическое уничтожение сообщений по таймеру и проверка ключей по изображению.
Критика и уязвимости
MTProto неоднократно подвергался критике со стороны криптографического сообщества. Основные претензии:
- Нестандартные криптографические конструкции: Использование режима IGE для AES, который не является широко распространённым и имеет потенциальные уязвимости (например, уязвимость к атакам на основе манипуляции с зашифрованными блоками). В 2015 году группа криптографов (включая Мэттью Грина) указала на то, что MTProto 1.0 не обеспечивает аутентифицированного шифрования, что делает его уязвимым для атак типа «man-in-the-middle» при определённых условиях.
- Отсутствие сквозного шифрования по умолчанию: В облачных чатах сервер имеет доступ к ключам шифрования, что противоречит принципу «нулевого доверия» (zero-trust). Telegram утверждает, что это необходимо для синхронизации и облачных функций, но критики считают это компромиссом безопасности.
- Сложность аудита: Протокол является проприетарным, хотя его описание и исходный код клиентских библиотек опубликованы. Это затрудняет независимый аудит по сравнению с открытыми стандартами, такими как Signal Protocol.
- Атаки на основе времени: В 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 →