MTProto: мобильный протокол Telegram
Описание протокола
MTProto (Mobile Transport Protocol) — это криптографический протокол, разработанный командой Telegram для защиты коммуникаций между клиентом и сервером. Протокол оптимизирован для работы в мобильных сетях с нестабильным соединением и высокой задержкой.
MTProto обеспечивает три ключевых свойства безопасности: конфиденциальность (содержимое сообщений скрыто от третьих сторон), целостность (сообщения не могут быть изменены незаметно) и аутентификацию (клиент и сервер подтверждают личность друг друга).
MTProto 2.0 vs MTProto 1.0
Начиная с версии 4.6, клиенты Telegram используют MTProto 2.0. Основные отличия от версии 1.0:
- Вместо SHA-1 используется SHA-256 для вычисления
msg_key msg_keyзависит не только от тела сообщения, но и от частиauth_key, что повышает устойчивость к атакам- Добавлено 12-1024 байта случайного паддинга (вместо фиксированного 0-15 в MTProto 1.0)
- Изменён порядок вычисления AES-ключа и IV — теперь
msg_keyопределяет и ключ, и вектор инициализации
Терминология
| Термин | Описание |
|---|---|
auth_key | 256-битный ключ авторизации, создаётся при первом подключении клиента через протокол Диффи-Хеллмана. Хранится на устройстве. |
msg_key | 128 бит из SHA-256 хеша тела сообщения + части auth_key. Используется для вычисления AES-ключа и IV. |
server_salt | 64-битное случайное число, обновляемое каждые 30 минут. Защищает от replay-атак. |
session_id | 64-битный идентификатор сессии. Гарантирует, что сообщения не могут быть перенаправлены между сессиями. |
Шифрование в MTProto 2.0
MTProto 2.0 использует симметричное шифрование AES-256-IGE (Infinite Garble Extension). Процесс шифрования сообщения:
- Формирование payload: к телу сообщения добавляются server_salt, session_id, msg_id и sequence number
- Паддинг: добавляется 12-1024 случайных байт, чтобы длина стала кратной 16
- Вычисление msg_key: SHA-256 от части auth_key (96-128 байт) + payload, берётся 128 бит из середины хеша
- Получение AES-ключа и IV: из msg_key + auth_key через серию SHA-256 хешей
- Шифрование: AES-256-IGE с полученными ключом и IV
Зашифрованное сообщение отправляется вместе с auth_key_id (8 байт) и msg_key (16 байт) в качестве заголовка.
Создание ключа авторизации
Ключ авторизации создаётся при первом подключении клиента к серверу Telegram через модифицированный протокол Диффи-Хеллмана:
- Клиент отправляет запрос с случайным nonce
- Сервер отвечает своим nonce и отпечатком RSA-ключа
- Клиент генерирует new_nonce, шифрует его RSA-ключом сервера и отправляет
- Сервер отправляет параметры DH (p, g, g_a)
- Клиент вычисляет g_b, отправляет серверу
- Обе стороны вычисляют общий секрет — это и есть
auth_key
Протокол защищён от man-in-the-middle атак с помощью RSA-подписи сервера и проверки отпечатка ключа.
Сравнение MTProxy с VPN и SOCKS5
| Характеристика | MTProxy | VPN | SOCKS5 |
|---|---|---|---|
| Область действия | Только Telegram | Весь трафик | Настраиваемые приложения |
| Установка приложений | Не нужна | VPN-клиент | Зависит от ОС |
| Маскировка трафика | Под HTTPS (FakeTLS) | Зависит от протокола | Нет |
| Влияние на другие приложения | Нет | Да (весь трафик) | Выборочно |
| Скорость | Высокая (оптимизирован) | Средняя (оверхед) | Высокая |
| Настройка | 1 клик | Установка + конфигурация | Ручная |
Использование MTProxy
MTProxy встроен во все официальные клиенты Telegram. Для подключения достаточно открыть ссылку вида tg://proxy?server=...&port=443&secret=... — Telegram предложит добавить прокси-сервер.
Параметр secret в формате ee + 32 hex символа + hex(domain) активирует режим FakeTLS — трафик маскируется под обычное HTTPS-соединение с указанным доменом, что значительно затрудняет его обнаружение и блокировку средствами DPI (Deep Packet Inspection).
Наш сервис на главной странице ProxyMTProto автоматически генерирует готовые ссылки для подключения. Все серверы поддерживают MTProto 2.0 с FakeTLS маскировкой.