MTProto.fyi
ГлавнаяШифрование MTProto 2.0

Шифрование MTProto 2.0

MTProto 2.0 — действующая версия протокола Telegram с 2017 года. В ней исправили спорные места первой версии и привели схему к тому, что криптографы называют «стандартной конструкцией».

Три слоя, из которых собран протокол

MTProto делится на высокоуровневый слой (сами запросы API), криптографический слой (как эти запросы шифруются) и транспортный (как байты летят по сети). Шифрование живёт во втором слое и одинаково для мобильного интернета, Wi-Fi и прокси — посредники видят только третий слой.

Ключ авторизации

При первом запуске приложение и сервер вырабатывают auth_key длиной 2048 бит по протоколу Диффи — Хеллмана, защищённому RSA-подписью сервера. Ключ хранится на устройстве и не передаётся по сети никогда. Именно поэтому прокси, перехватив трафик, ничего с ним сделать не может — вывести ключ из перехваченного обмена математически невозможно.

Как шифруется каждое сообщение

  1. msg_key. От auth_key и открытого текста считается SHA-256, из которого берутся 128 бит. В 1.0 здесь была SHA-1 — одно из главных изменений.
  2. Ключ и вектор. Из auth_key и msg_key через SHA-256 выводятся AES-ключ и IV для этого конкретного сообщения.
  3. AES-256-IGE. Сообщение шифруется в режиме IGE (Infinite Garble Extension), где ошибка в одном блоке портит всё дальнейшее — это делает подмену куска сообщения бессмысленной.
  4. Дополнение. К открытому тексту добавляется 12–1024 случайных байт, чтобы длина не выдавала содержимое.

Что изменилось по сравнению с 1.0

SHA-1 заменили на SHA-256, дополнение стало случайной длины, а msg_key теперь зависит и от ключа, и от текста — так закрыли теоретические атаки на схему «шифруй, потом MAC». Версии подробнее сравниваются на странице «Версии MTProto».

Что шифрование не защищает

Облачные чаты расшифровываются на серверах Telegram — иначе не работала бы синхронизация между устройствами. Сквозное шифрование есть только в секретных чатах и звонках; там ключ известен лишь двум устройствам. Прокси в обоих случаях видит одинаково зашифрованный поток. Разбор — «Безопасность MTProto».

Частые вопросы

Какой алгоритм шифрования у MTProto 2.0?
AES-256 в режиме IGE с ключами, выведенными через SHA-256 из auth_key и msg_key.
Чем MTProto 2.0 отличается от 1.0?
SHA-256 вместо SHA-1, случайное дополнение и другая схема вывода msg_key.
Может ли прокси расшифровать сообщения MTProto?
Нет: у него нет auth_key, а вывести ключ из трафика нельзя.
Облачные чаты зашифрованы сквозным шифрованием?
Нет, только секретные чаты и звонки. Облачные расшифровываются на серверах Telegram.

Читать дальше