Протокол MTProto работает следующим образом: 13
- Регистрация устройства. 1 При первом запуске приложения пользователь вводит номер своего телефона, на который приходит пятизначный код его подтверждения. 1 После ввода кода приложение запускает протокол авторизации. 1
- Клиент отправляет запрос на сервер со строкой, составленной из случайной 128-битной последовательности. 1
- Сервер отправляет в ответ другую случайную 128-битную последовательность, число n (64-битное) и цифровую подпись публичного ключа RSA. 1
- Клиент раскладывает n на два простых числа p и q так, что p < q, и это служит проверкой работы. 1
- У клиента есть набор публичных ключей сервера, хранящийся на устройстве. 1 Из него клиент выбирает ключ, подходящий для пришедшей подписи с сервера. 1
- Клиент выбирает другую случайную 256-битную строку, отличающуюся от предыдущей строки клиента и сервера. 1
- Клиент собирает набор из трёх случайных строк, чисел n, p и q, шифрует его с помощью ключа по алгоритму RSA и отправляет на сервер. 1
- Сервер отвечает с параметрами протокола Диффи-Хеллмана, зашифрованными алгоритмом AES-256 в режиме IGE, используя временный ключ и Salt, получаемую из новой строки клиента и сервера. 1
- Клиент выбирает закрытый ключ b, вычисляет открытый ключ g b = g b mod p и общий открытый ключ. 3
Основная часть MTProto, которая отвечает за шифрование данных, использует комбинацию симметричных и асимметричных методов шифрования: 5
- Симметричное шифрование. 5 Используется для шифрования сообщений между клиентом и сервером после установления сессии. 5 Telegram применяет алгоритм AES-256 в режиме IGE (Infinite Garble Extension). 5 Этот режим обеспечивает устойчивость к изменению данных на любом этапе передачи — даже небольшое изменение в одном блоке приводит к изменению всего шифрованного сообщения, что предотвращает расшифровку или подмену данных. 5
- Асимметричное шифрование. 5 Применяется для обмена ключами и аутентификации. 5 Telegram использует алгоритм RSA (Rivest–Shamir–Adleman) с ключами длиной 2048 бит для обеспечения безопасности передачи временных ключей шифрования. 5 Асимметричное шифрование гарантирует, что только сервер Telegram может расшифровать данные, зашифрованные клиентом, и наоборот. 5
- Диффи-Хеллман (Diffie-Hellman). 5 Используется для безопасного обмена ключами. 5 Telegram реализует процесс установления сессии с использованием алгоритма Диффи-Хеллмана, который позволяет двум сторонам (клиенту и серверу) установить общий секретный ключ через открытый канал связи. 5 Этот ключ впоследствии используется для симметричного шифрования. 5
- Хеширование. 5 Протокол использует алгоритм SHA-256 для создания уникальных хешей сообщений. 5 Хеширование помогает обеспечить целостность данных и их защиту от подделки. 5
В MTProto предусмотрен специальный режим работы для секретных чатов, где используется дополнительное сквозное шифрование, и ключи шифрования создаются и хранятся только на устройствах участников чата. 5 Это гарантирует, что сообщения не могут быть расшифрованы даже серверами Telegram. 5