MTProto — криптографический протокол, используемый в системе обмена сообщениями Telegram для шифрования переписки пользователей. Протокол был разработан Николаем Дуровым и другими программистами Telegram.
В основе протокола лежит оригинальная комбинация симметричного алгоритма шифрования AES (в режиме IGE), протокол Диффи-Хэлмана для обмена 2048-битными RSA-ключами между двумя устройствами и ряд хеш-функций. Протокол допускает использование шифрования end-to-end с опциональной сверкой ключей[1][2].
При первом запуске приложения пользователь вводит номер своего телефона, на который приходит пятизначный код его подтверждения.[3]
После ввода кода приложение запускает протокол авторизации[4]:
Пользователи A и B хотят инициализировать секретный чат[5]:
Length | Header | Random bits | Layer | seq_in | seq_out | Header | Random id | TTL | Message | Header | Padding | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32 bit | 32 bit | 128 bit | 32 bit | 32 bit | 32 bit | 32 bit | 64 bit | 32 bit | Произвольная длина | 32 bit | 0-96 bit | |||
Блок 1 | Блок 2 | Блок 3 | Блок 4 | Блоки | Блок N |
auth_key_id | msg key | Encrypted Data |
---|---|---|
64 бит | 128 бит | N * 128 бит |
До 16-й версии протокола клиенты были вынуждены доверять серверу сохранять порядковые номера сообщений, а сами сообщения не обладали подобным механизмом. Но это означало, что сервер злоумышленника имел полный контроль над потоком сообщений. Сервер не имел возможности читать передаваемую информацию, но мог удерживать сообщения, менять их порядок, отправлять их снова. В случае, если хотя бы один из клиентов использует протокол версии 16 и ниже, чат является незащищенным от такого типа атак.[9]
Данный вид атаки использует временной интервал между отправкой сообщения и приеме ответа об ошибке. Большинство пользователей Telegram использует его на мобильных устройствах со слабым сигналом, по этой причине проверка подлинности сообщений замедляется (время, за которое процессор обработает информацию, много меньше времени её получения).[9]
В Telegram проверки проходят в следующем порядке:
Процесс дешифрования моментально прерывается в случае выявления ошибки.
Для осуществления атаки необходимо отправить сообщение в секретном чате, но зашифрованный пакет заменить на случайную последовательность. В результате проверок получатель не подтверждает получения сообщения и в окне отправителя данное сообщение навсегда останется непрочитанным[10].
По данным публикаций, протокол не имеет ни authenticated encryption (AE), ни indistinguishability under chosen-ciphertext attack (INDCCA)[1][2]
К сформированному шифротексту , который дешифруется в сообщение , добавляется ещё один блок длиной 128 бит, то есть принимаемый шифротекст . В итоге преобразованное сообщение расшифровывается в виде , в котором , причем длина больше длины блока. Так как длина не проверяется, дешифрование сообщения пройдет успешно. [1][11]
Для предотвращения данного типа атаки необходимо лишь проверять длину блока padding, в случае превышения допустимого размера необходимо прекращать дешифрование сообщения.[1][12]
В сформированном шифротексте , который дешифруется в сообщение , изменяется последний блок длиной 128 бит, то есть принимаемый шифротекст . В итоге преобразованное сообщение расшифровывается в виде , причем длина равна длине . С вероятностью дешифрованное сообщение совпадает с оригинальным, но так как максимальная длина добавочного блока составляет 96 бит, то вероятность составляет , таким образом данный вид атаки получается намного более сложным, чем ожидалось.[1][13]
Чтобы предотвратить данный тип атаки, необходимо добавить тег проверки padding в заголовки отправляемого сообщения, но исправления в протоколе не позволят пользователям с новым протоколом обмениваться сообщениями с пользователями, у которых остался старый.[1][14]
Для улучшения этой статьи желательно: |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .