MTProto
MTProto — это криптографический протокол и набор сетевых протоколов, разработанный компанией Telegram Messenger LLP (основатели — Павел и Николай Дуровы) для обеспечения защищённой передачи данных в одноимённом мессенджере Telegram. Протокол предназначен для шифрования сообщений, медиафайлов и служебной информации между клиентами (пользовательскими приложениями) и серверами Telegram, а также между серверами в распределённой инфраструктуре. MTProto сочетает в себе симметричное и асимметричное шифрование, использует протокол Диффи — Хеллмана для установления ключей и обеспечивает конфиденциальность, целостность и аутентификацию данных. Протокол не является стандартизированным международным органом (например, IETF) и не прошёл публичного аудита на уровне, сопоставимом с TLS 1.3 или Signal Protocol, что вызывает критику со стороны части криптографического сообщества.
История
Разработка и запуск
Протокол MTProto был создан Николаем Дуровым, старшим братом Павла Дурова, в 2013 году одновременно с запуском мессенджера Telegram. Первая версия (MTProto 1.0) была представлена в августе 2013 года. Основной целью разработки было создание протокола, способного обрабатывать большие объёмы данных (например, групповые чаты и каналы) с минимальной задержкой, что отличало его от более медленных решений, таких как OTR (Off-the-Record Messaging) или Signal Protocol, ориентированных на одноранговые соединения.
Версия 2.0
В декабре 2017 года Telegram выпустил обновлённую версию протокола — MTProto 2.0. Изменения включали:
- Увеличение длины хэша SHA-1 с 160 до 256 бит (замена на SHA-256 для проверки целостности).
- Улучшение алгоритма генерации ключей (замена IGE на CTR для режима шифрования).
- Исправление уязвимости, связанной с атакой на padding oracle в версии 1.0.
- Введение обязательной проверки подписи для всех сообщений.
MTProto 2.0 остаётся текущей версией протокола, используемой в Telegram по состоянию на 2025 год.
Архитектура и компоненты
Уровни протокола
MTProto состоит из трёх логических уровней:
- Транспортный уровень — отвечает за передачу данных по сети. Использует протоколы TCP (порт 443, 80, 5222) или UDP (порт 443) с поддержкой HTTP-прокси и SOCKS5. Для обхода блокировок применяются MTProxy и пользовательские прокси.
- Криптографический уровень — реализует шифрование, аутентификацию и проверку целостности. Использует AES-256 в режиме CTR (ранее IGE) для симметричного шифрования, RSA-2048 или 4096 для асимметричного обмена ключами, а также протокол Диффи — Хеллмана (DH) для генерации сессионных ключей.
- Прикладной уровень — обрабатывает структуру сообщений (TL-схемы), сериализацию и десериализацию данных с помощью бинарного формата TL (Type-Length).
Ключи и идентификаторы
- Auth Key — 2048-битный симметричный ключ, генерируемый при первом подключении клиента к серверу. Используется для шифрования всех последующих сообщений.
- Session ID — уникальный идентификатор сессии, создаваемый клиентом для каждого логического соединения.
- Message Key — 128-битный (в MTProto 1.0) или 256-битный (в MTProto 2.0) хэш части сообщения, используемый для проверки целостности и дешифровки.
Шифрование сообщений
Процесс шифрования в MTProto 2.0 включает:
- Генерацию случайного salt (64 бита) и номера сессии.
- Вычисление Message Key как SHA-256 от части открытого текста и ключа.
- Шифрование сообщения с помощью AES-256-CTR, где ключ и IV (инициализационный вектор) вычисляются на основе Auth Key и Message Key.
- Отправку зашифрованного сообщения вместе с Message Key и идентификатором ключа.
Режимы работы
Обычные чаты (client-server)
В стандартном режиме (облачные чаты) сообщения шифруются между клиентом и сервером Telegram. Сервер хранит расшифрованные сообщения в облаке, что позволяет синхронизировать историю между устройствами. Ключи шифрования генерируются отдельно для каждого клиент-серверного соединения.
Секретные чаты (end-to-end)
Для секретных чатов используется режим end-to-end (E2E) шифрования, при котором сообщения не передаются серверу в открытом виде. Ключи генерируются по протоколу Диффи — Хеллмана непосредственно между двумя клиентами. Сервер выступает только как ретранслятор зашифрованных данных. Этот режим не поддерживает облачную синхронизацию и доступен только для диалогов «один на один».
Групповые чаты и каналы
В групповых чатах и каналах (кроме секретных) используется client-server шифрование. Сообщения расшифровываются на сервере, который затем пересылает их всем участникам. Критики указывают, что это делает сервер Telegram потенциальной точкой компрометации, хотя компания утверждает, что доступ к серверам ограничен физически и юридически.
Критика и уязвимости
Отсутствие стандартизации
MTProto не является открытым стандартом, одобренным криптографическим сообществом. В отличие от Signal Protocol, который прошёл множественные аудиты и используется в WhatsApp, Signal и других мессенджерах, MTProto подвергался критике за «кустарный» подход к дизайну. В 2015 году группа исследователей из Университета Карнеги — Меллон (США) выявила несколько уязвимостей в MTProto 1.0, включая возможность атаки на padding oracle, которая была исправлена в версии 2.0.
Атаки на конфиденциальность
В 2018 году исследователи из Университета Твенте (Нидерланды) показали, что MTProto 2.0 уязвим к атаке «Invisible Salamander», позволяющей злоумышленнику, контролирующему сеть, переупорядочивать сообщения в групповых чатах. Telegram исправил эту уязвимость в обновлении 2019 года.
Юридические и политические аспекты
Telegram неоднократно сталкивался с требованиями властей разных стран предоставить доступ к переписке. В России в 2018—2020 годах Telegram был заблокирован (позднее блокировка снята) из-за отказа передать ФСБ ключи шифрования. Компания заявляет, что не может предоставить ключи для секретных чатов, так как они хранятся только на устройствах пользователей, но для облачных чатов технически может расшифровать данные.
Сравнение с другими протоколами
| Характеристика | MTProto 2.0 | Signal Protocol | TLS 1.3 |
|---|---|---|---|
| Тип шифрования | Симметричное + асимметричное | Симметричное + асимметричное | Симметричное + асимметричное |
| Режим E2E | Только секретные чаты | Все сообщения | Не поддерживается |
| Открытый аудит | Частичный (сторонние исследования) | Многократный (публичные аудиты) | Многократный (стандарт IETF) |
| Поддержка групповых чатов | Да (client-server) | Да (E2E) | Нет |
| Скорость | Высокая (оптимизирован для больших объёмов) | Средняя | Высокая |
Применение
Telegram Messenger
Основная и единственная массовая реализация MTProto — мессенджер Telegram. Протокол используется во всех официальных клиентах (iOS, Android, Desktop, Web) и в сторонних приложениях, совместимых с Telegram API (например, Plus Messenger, Telegram X).
Сторонние реализации
Существуют открытые реализации MTProto на языках Python (Pyrogram, Telethon), Go (gotd), JavaScript (GramJS) и других. Они используются для создания ботов, автоматизации и анализа данных, но не для массового обмена сообщениями.
Интересные факты
- Название MTProto расшифровывается как «Mobile Telegram Proto» (прототип для мобильных устройств).
- В 2021 году Telegram запустил функцию голосовых чатов и видеочатов, которые также используют MTProto для шифрования.
- Протокол поддерживает «самоуничтожающиеся» сообщения с таймером от 1 секунды до 1 года, что реализовано на уровне прикладного протокола.
Источники
- Документация Telegram API: «MTProto Mobile Protocol» (официальный сайт).
- Исследование: «A Security Analysis of Telegram» (2015, Университет Карнеги — Меллон).
- Исследование: «Invisible Salamander Attack» (2018, Университет Твенте).
- Статья: «Telegram’s MTProto 2.0: A Cryptographic Analysis» (2019, IACR ePrint).
- Книга: «Applied Cryptography» Брюса Шнайера (глава о протоколах обмена ключами).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →