Как включить сквозное шифрование в Telegram с секретными чатами

  • image

Недавно WhatsApp изменил политику конфиденциальности пользовательских данных. Многим пользователям такой шаг не понравился — и это привело к бегству части из них из WhatsApp в другие мессенджеры, в том числе в Telegram. Судя по всему, именно этот «исход» помог Telegram всего за несколько дней набрать 25 миллионов новых пользователей — суммарная аудитория мессенджера теперь составляет более 500 миллионов пользователей.

Самое время рассказать о том, как нужно действовать, чтобы общение в Telegram было действительно безопасным и приватным.

Самое главное: сквозное шифрование в Telegram по умолчанию не используется

Первое, что нужно знать о Telegram: в «облачных» чатах — так Telegram называет стандартный тип чатов, которые используются по умолчанию, — не применяется сквозное шифрование. Что такое сквозное шифрование и почему оно важно для безопасности переписки — можно прочитать тут.

Если кратко, то это означает, что Telegram имеет доступ не только к метаданным (кому вы писали, когда писали и как много), как WhatsApp, но и ко всему содержимому переписки пользователей в стандартных чатах, используемых мессенджером по умолчанию. На данный момент, согласно политике конфиденциальности Telegram, эти данные не используются для рекламы. Но, как мы уже знаем по опыту, политика может измениться.

Как включить сквозное шифрование в Telegram: «секретные» чаты

При этом сквозное шифрование в Telegram есть — просто его нужно включать отдельно. Поэтому, если вы дорожите конфиденциальностью своих данных, надо не забывать использовать чаты, в которых сквозное шифрование включено, — Telegram называет их «секретными» чатами.

В «секретных» чатах и текст сообщений, и картинки, и видео, и все остальные файлы передаются с использованием сквозного шифрования. Ключ для расшифровки есть только у собеседников — поэтому Telegram не может получить доступ к этим данным.

Более того, содержимое «секретных» чатов не хранится на серверах Telegram. «Секретные» чаты хранятся только на устройствах участников переписки — как следствие, к ним нельзя получить доступ с другого устройства, плюс они исчезают при выходе из Telegram и при удалении приложения.

Секретные чаты доступны в приложениях для iOS, Android и macOS. В веб-версии и в приложении для Windows «секретные» чаты не поддерживаются, потому что эти версии не могут обеспечить безопасное хранение переписки на устройстве. Так что использовать Telegram для конфиденциальных разговоров на компьютере с Windows или Linux нежелательно.

Как создать «секретный» чат в Telegram

В текущих версиях приложений Telegram опция создания «секретного» чата спрятана довольно глубоко, и ее не так-то легко обнаружить — особенно начинающему пользователю мессенджера.

Чтобы создать «секретный» чат, необходимо открыть профиль вашего собеседника, нажать кнопку с тремя точками (иногда у нее есть подпись Еще, а иногда подписи нет) и выбрать Начать секретный чат.

image

Как создать «секретный» чат в Telegram

После этого откроется чат, сообщения в котором будут зашифрованы сквозным шифрованием (поначалу в окне чата даже будет об этом специально написано). Также можно установить время, по истечении которого ваши сообщения будут автоматически удаляться: для этого надо кликнуть на значок часов в панели ввода сообщения.

Как установить автоматическое уничтожение сообщений в Telegram по таймеру

Разумеется, автоматическое удаление сообщений не помешает вашему собеседнику сделать скриншоты, но в таком случае в чате появится сообщение об этом. Правда, есть исключение: если скриншот сделал пользователь на macOS, то уведомление об этом не придет.

Что еще полезно знать о Telegram: секретных чатов с одним и тем же собеседником может быть несколько. А вот групповые чаты «секретными» быть не могут, — в отличие от WhatsApp, в котором все чаты по умолчанию используют сквозное шифрование.

Как внутри чата понять, включено ли сквозное шифрование: иконка с замочком

Поскольку в Telegram есть два типа чатов — обычные «облачные» и «секретные», в которых включено сквозное шифрование, в некоторых случаях бывает важно вовремя понять, в каком из них вы общаетесь. Если в переписке есть какие-то очень важные данные, то лучше бы этому чату быть «секретным», верно?

К сожалению, внутри «секретные» и «облачные» чаты выглядят практически идентично, различаясь буквально несколькими деталями. Чтобы убедиться в том, что сквозное шифрование включено, поищите значок замочка рядом с именем или номером телефона вашего собеседника. Если замочек есть, то это «секретный» чат. Если замочка нет, то сквозное шифрование не включено — и лучше создать новый чат.

Как понять, что вы находитесь в «секретном» чате: ищите замочек вверху экрана

Также можно кликнуть по иконке вашего собеседника — если в чате используется сквозное шифрование, то в самом низу открывшегося окна отобразится строчка Ключ шифрования.

Как настроить безопасность и приватность в приложении Telegram

Также не помешает правильно настроить безопасность и конфиденциальность в приложении. Для этого нажмите кнопку Настройки в правом нижнем углу экрана и выберите пункт Конфиденциальность.

Настройки безопасности в Telegram

Первым делом следует позаботиться, чтобы кто-нибудь не прочитал вашу переписку в тот момент, когда вы случайно оставили разблокированное устройство без присмотра. Для этого на открывшейся вкладке выберите пункт Код-пароль, нажмите Включить код-пароль, придумайте пин-код, который вы не забудете, задайте его и подтвердите.

После этого выберите пункт Автоблокировка и установите какое-нибудь небольшое значение — одну минуту или пять. Если ваше устройство поддерживает вход по отпечатку пальца или по распознаванию лица — можете включить здесь же соответствующую опцию.

Как правильно настроить безопасность в Telegram

Дальше стоит обезопасить аккаунт от угона с помощью двухфакторной аутентификации. Поскольку первичным способом подтверждения входа в аккаунт в Telegram служит одноразовый код в SMS, то в качестве второго фактора мессенджер предлагает задать пароль.

Для этого на вкладке Конфиденциальность выберите Двухэтапная аутентификация (в Android) или Облачный пароль (в iOS) и установите какую-нибудь надежную комбинацию. Важно помнить, что вводить этот пароль вы будете нечасто, поэтому его очень легко забыть. Так что лучше сохранить его в каком-нибудь надежном месте — например, в менеджере паролей.

Что будет, если вы забудете этот облачный пароль? Вам придется сбросить аккаунт. По сути это означает, что вы отправите заявку на полное удаление аккаунта, после чего придется подождать семь дней. Через неделю учетная запись удалится (со всеми контактами, «облачными» чатами и подписками на каналы), и вы сможете завести новый, совершенно пустой аккаунт на тот же номер телефона.

Настройки конфиденциальности в Telegram

Чтобы не делиться лишней информацией со всеми 500 миллионами пользователей Telegram, стоит настроить приватность профиля. Для этого пройдитесь по пунктам настроек Конфиденциальность и поменяйте установленные значения — по умолчанию все эти данные и возможности доступны всем желающим. Мы рекомендуем вот такие настройки:

  • Номер телефона -> Кто видит мой номер телефонаНикто.
  • Номер телефона -> Кто может найти меня по номеруМои контакты.
  • Последняя активность -> Кто видит, когда я в сетиНикто.
  • Фотография профиля -> Кто видит мою фотографиюМои контакты.
  • Звонки -> Кто может мне звонитьМои контакты (или Никто, если вас вообще не интересует эта функция).
  • Звонки -> Peer-to-peerМои контакты (или Никто, если предпочитаете не делиться информацией о своем IP-адресе с собеседниками).
  • Пересылка сообщений -> Кто может ссылаться на мой аккаунт при пересылке сообщенийМои контакты.
  • Группы и каналы -> Кто может приглашать меняМои контакты.

Как правильно настроить конфиденциальность в Telegram

Также можете заглянуть в Конфиденциальность -> Управление данными и удалить из хранилища Telegram ту информацию, которые покажется вам лишней.

Безопасность Telegram для самых осторожных

Вышеприведенных советов должно хватить для большинства пользователей, но для наиболее осторожных у нас есть еще несколько рекомендаций:

  • Используйте для входа в Telegram отдельный номер телефона. А может быть, даже виртуальный номер телефона вместо настоящего мобильного. Однако будьте осторожны и убедитесь в том, что этот номер не одноразовый — иначе к вашему аккаунту может получить доступ кто-то другой.
  • Включайте защищенное соединение, чтобы скрыть свой IP-адрес — Telegram может сообщать его, например, по запросу правоохранительных органов.
  • Подумайте о том, чтобы использовать другой мессенджер, более приспособленный для безопасного и конфиденциального общения — например, Signal или Threema. В отличие от Telegram, все чаты в них шифруются по умолчанию и есть дополнительные механизмы обеспечения конфиденциальности. Но они не так популярны, и в них нет некоторых функций, которые привлекают пользователей Telegram.

Ну и, конечно же, не забывайте о том, что даже самый безопасный в мире мессенджер становится беззащитным, если к вашему устройству кто-то получит доступ — физический или удаленный.

Поэтому обязательно блокируйте все свои устройства пин-кодом, вовремя обновляйте все установленные на них программы и операционную систему, а также защищайте их от вредоносного ПО надежным антивирусом.

Информационная безопасность *Мессенджеры *Криптография *Научно-популярное Из песочницы

Для полного понимания происходящего неплохо было бы быть знакомым с основами криптографии, с принципом работы хеш функций (в данной статье SHA-1, SHA-256), а также с такими протоколами как RSA, AES и Diffie-Hellman (приведены ссылки для более подробного ознакомления).

Рассматриваем тележку, так сказать.

Оглавление

  • Предисловие

  • High-level описание

  • Терминология

  • Клиент-серверное шифрование

    • Создание авторизационного ключа auth_key

    • Немного про AES IGE

  • Секретные чаты и сквозное шифрование

  • Rekeying (смена ключа шифрования)

  • Заключение

  • Литература и ссылки на почитать

Предисловие

Здравствуйте, дорогие хабровчане! Я здесь новенький, поэтому не кидайтесь там палками, помидорами и всем прочим (хотя, кидайтесь, мб, полезнее будет). Как один из всадников ноябрь-декабрьского криптографического апокалипсиса, я пришел вам поведать о протоколе, что используется как в секретной переписке с мамой о покупке продуктов, так и в не очень доброжелательных целях.

21-й год на дворе. В чем там сейчас чатятся зумеры, бумеры, думеры, миллениалы и вот эти все касты? Тележка, конечно, тележка. Каждый из нас хочет, чтобы его самые сокровенные секреты, будь то причудливые мемы, переписки со странными субъектами, да и что уж таить, подписки на аниме-каналы, оставались секретами до конца. Но VK же, вроде, удовлетворяет всем нуждам и потребностям, удобно и доступно. Соглашусь, мы в СНГ выросли уже на этой социальной сети, и она нам как родная (а ее, как и тележку, основал Пашенька). Но на данный момент она переживает не лучшие времена, пытаясь подражать всему и вся, добавляя никому не нужный функционал, а также заполняя ленту невероятным количеством рекламы (на каждые 6 постов, 1 рекламный – ужас). Также, бог весть, что там за защита у VK.

В то же время тележка намного проще и чище в плане функционала и рекламы (пока что). Более того, Пашенька позиционирует свой чатек как несокрушимую и непоколебимую крепость в плане взлома, а сам алгоритм шифрования MTProto выставлен перед всеми на обозрение. Так давайте поговорим о внутреннем устройстве MTProto, разработанного собственноручно командой тележки, с точки зрения криптографии.

High-level описание

А дела в алгоритме обстоят довольно запутанно с первого взгляда. Разработчики тележки – самые что ни на есть храбрецы: взять уже готовые протоколы, по типу Signal – не, скучно; создать свой протокол, используя всевозможные известные алгоритмы с добавлением кучи своих фишек и фокусов, чтобы все было еще секретнее и сложнее – прекрасное решение. Так и появился MTProto.

Начать, пожалуй, нужно с описания работы в целом. MTProto – клиент-серверный набор протоколов, служащий для доступа к серверу из клиентского приложения через незащищенное соединение. Этот набор можно разделить на 3 основные части:

Общая схема работы MTProto 2.0.
  • High-level API and Type language: отвечает как за API запросы и ответы, так и за сериализацию данных.

  • Cryptographic and authorization components: определяет, как приложение (клиент) авторизируется на сервере, а также шифрование сообщений перед отправкой на транспортный уровень.

  • Transport component: определяет, как клиент и сервер обмениваются сообщениями посредством таких транспортных протоколов, как UDP, TCP, HTTP(S), WebSocket и другие.

Итак, как я и сказал, мы остановимся на втором уровне, связанном с криптографией и авторизацией (C&A), и поглядим, как вся кухня устроена. В свою очередь данный уровень можно поделить на 3 модуля:

  • Authorization: этот модуль отвечает за первоначальную авторизацию клиента. Он работает во время первого запуска приложения, чтобы получить ключ авторизации.  

  • Secret chat key exchange and rekeying: данный модуль отвечает за установку сессионного общего секретного ключа между клиентами, используемого в сквозном шифровании.

  • Message encryption: модуль-работяга, не покладая рук, шифрует наши сообщения симметричным шифром AES.

Терминология

Начать наше путешествие, думаю, стоит с описания всех фигурирующих величин и терминов. Для удобства в статье большинство из них будут написаны на забугорском языке (лучше выделяются, а также легче яндексятся).

Итак, дамы и господа, наша сегодняшняя терминология:

  1. Authorization key (AK, auth_key) – 2048-битный ключ, который создается на этапе пользовательской регистрации посредством алгоритма Diffie-Hellman, а доступ к нему имеет только клиент и сервер. Более того, утверждается, что ключ шифруется на сервере, а ключ к ключу отправляется на другой сервер. Таким образом, получение доступа лишь к одному серверу – недостаточно для взлома.

  2. RSA:

    Алгоритм шифрования для обычных сообщений.

    Выглядит не так уж и сложно. Ну что тут: обычный Diffie-Hellman, SHA-256, AES – да и все, делов-то. Но давайте все же немного приоткроем завесу тайны и попробуем разобраться, что да как.

    В общих словах работа алгоритма такова:

    1. Собирается пакет для шифрования, состоящий из server salt, session_id, самого сообщения (в него включены время, длина и порядковый номер, которые проверяются на стороне получателя) и padding.

    2. Далее, находится msg_key, 128 средних бита хеша (SHA-256) от сообщения с добавлением 32-байтового фрагмента auth_key.

    3. Auth_key в комбинации с новонайденным msg_key определяет при помощи KDF 256-битный aes_key и 256-битный начальный вектор aes_iv.

    4. Далее найденные значения aes_key и aes_iv используются в алгоритме AES IGE для шифрования сообщения.

    5. В самом конце собирается пакет, состоящий из external header, а также зашифрованного сообщения.

    Создание auth_key

    Начнем с самой важной состовляющей, а в то же время с самой замороченной и интересной, с создания auth_key. В основном здесь используется RSA, SHA-1, AES и Diffie-Hellman, а также добавлены некоторые тонкости для еще большей надежности и секретности. Привожу схему (не пугайтесь):

    Схема получения AK.

    Поехали по порядку:

    1. C: генерирует случайное 128-битное число

      Ну и каша, не правда ли (хотя здесь опущены многие технические фокусы).

      Так-так, самое мудреное и сложное позади, здесь можно выдохнуть. На самом деле это все не так сложно, если позалипать в схему и вчитаться в ход алгоритма.

      Немного про AES IGE

      Вы могли заметить, как при создании auth_key, так и в основном алгоритме MTProto участвует некое шифрование AES IGE. Это всеми любимое AES шифрование, работающее в Infinite Garble Extension режиме. Пару слов про данный режим:

      Схема AES IGE.

      IGE режим задается следующим цепным равенством:

      Наберитесь сил, осталось совсем немного.

      Секретные чаты и сквозное шифрование

      Окей, вроде все секретно, все отлично. Но это все под защитой покуда у злоумышленника нет доступа до серверов тележки, так как на них хранится вся зашифрованная переписка вместе с ключами для того, чтобы иметь доступ в нескольких сессиях. Так-так, а вдруг я захочу обсудить с другом кто лучший из BTS, но не хотелось бы, чтобы это знали другие. В такой ситуации есть решение – секретные чаты.  Давайте перейдем к рассмотрению сквозного шифрования в тележке.

      Наше желание: только пользователи, которые инициируют общение, имеют доступ к переписке, и никто больше, при том только в одной сессии. Для этого нам требуется, чтобы у каждого пользователя были ключи, дающие возможность шифровки и дешифровки сообщений.

      Схема шифрования почти идентична с предыдущей:

      Алгоритм шифрования для секретных сообщений.

      Опять же, в общих словах, по очереди происходит 2 идентичных шифрования с разными ключами SK и AK. Нам требуется добыть SK да так, чтобы никто и никогда не знал его. В этом нам опять же поможет всеми любимый алгоритм DH.

      Схема получения SK перед вами (довольно знакомая, не правда ли):

      Схема получения SK.

      Кратко о процессе:

      1. A: получает параметры

        Схема смены ключа шифрования

        На данном этапе разработчики почувствовали себя в безопасности и решили остановиться.

        Заключение

        Фух, смотрите, сколько Пашенька и его команда вложила души в секретность тележки, грех не пользоваться. Хотя, криптоаналитики и разработчики были в полном ужасе, увидав кашу из всех этих алгоритмов и своих тонкостей (в данной статье опущено множество технических подробностей, например, расчеты хэшей, а там все очень и очень запутанно).

        Теперь запросы правительств о выдаче ключей шифрования звучат уж слишком смешно. Ну а нам, простым смертным, со спокойной душой можно пользоваться всеми нами любимой тележкой, покуда квантовые компьютеры не пришли и не раздали нам подзатыльники за наши математические фокусы.

        Надеюсь, мне удалось донести основы того, как функционирует MTProto и стало немного яснее, как устроено шифрование в мессенджерах (устройство общее). А вам спасибо за ваше внимание и приглашаю в комментарии для дальнейшего обсуждения. Буду рад, если кто-то укажет неточности, ежели таковые заприметит.

        P.S. И помните, когда вы отправляете одну-единственную скобку, реагируя на какую-то новость, вы заставляете ваш бедный телефон и сервера тележки вкалывать, чтобы это все было секретно.

        Довольный, наверное понял, как работает MTProto.

        Литература и ссылки на почитать

        К сожалению или к счастью, все на английском.

        • Automated Symbolic Verification of Telegram’s MTProto 2.0

        • MTProto official specification

        • A practical cryptanalysis of the Telegram messaging protocol (тут про MTProto 1.0)

        • Статейка про реализацию AES IGE

        UPD: поправил немного про AES IGE.

Когда в 2011 году за Павлом Дуровым пришел спецназ хотя есть версия, что это инсценировка, он написал своему брату Николаю. И понял, что надежного способа обмениваться сообщениями у него, в общем-то, нет. 

Николай Дуров ранее разработал протокол шифрования переписки MTProto. Она легла в основу Telegram. Фактически мессенджер стал попыткой тестирования MTProto на больших нагрузках. 

Но даже сейчас, после тысяч багфиксов и улучшений, Telegram не гарантирует безопасность и конфиденциальность. И сквозное шифрование – не панацея

Как работает сквозное шифрование в Telegram

В Telegram используется два вида шифрования: “клиент-сервер” для обычных облачных, в том числе групповых чатов, и “клиент-клиент” (сквозное, или оконечное шифрование, E2EE, end-to-end encryption). 

В общих чертах сквозное шифрование работает так.

У отправителя и получателя есть по паре ключей: один приватный, второй публичный. Приватные ключи создаются и хранятся на устройствах пользователей. На сервер эти ключи не попадают.

Отправитель и получатель вместе генерируют общий секрет или эфемерный ключ. Каждый использует свой приватный ключ и оба публичных. В Telegram для этого взяли за основу алгоритм Диффи-Хеллмана. Общие ключи временные и перегенерируются автоматически, чтобы много похожих сообщений (смайликов, текста с одинаковыми метаданными) не шифровались одним и тем же ключом.

Шифрование и расшифровка выполняется на устройствах пользователей, а не на сервере. Данные остаются зашифрованными до получения.

Доступ к исходному тексту сообщения есть только у отправителя, а после расшифровки – и у получателя. и ни у кого больше.

Схема работы алгоритма Диффи-Хеллмана. Алиса и Боб имеют по паре ключей – публичный и приватный. g и p – публичные ключи, А и В – приватные. mod – деление по модулю (остаток от деления), К – секрет, или эфемерный ключ.

Метод действительно мощный. Но… всё не так однозначно. 

Главное достоинство алгоритма Диффи-Хеллмана – возможность передавать открытые ключи и сообщения по публичным каналам. Но всё ломается, если хакер проведет активную MITM-атаку (атаку “человек посередине”) и подменит трафик. 

Что же с ключами для облачных чатов? Один ключ у пользователя, второй – в облаке. И теоретически “облачный” ключ можно выдать кому угодно

Увы, Telegram уже взламывали, причём демонстративно

Пользователь Habr под ником ne555 год назад подробно описал, как взломать Telegram. Он обошел сквозное шифрование мессенджера в Android и отправил разработчикам баг-репорт. 

Не получив ответа, ne555 связался с волонтерами, которые пообещали донести информацию до руководства Telegram. Но реакции не последовало. 

ne555 использовал смартфоны с Android 7.0, Android 6.0 (root-доступ), Android 4.4.2 (root-доступ), а также ПК с GNU/Linux/Windows (с root-доступом) и программу для восстановления паролей по их хешам John The Ripper (JTR, доступна в публичном репозитории на GitHub). JTR позволил распарсить Telegram local code (pin приложения) за секунды, получить нужные файлы и данные для взлома. 

Результат: хакер обошел двухфакторную авторизацию, получил доступ к секретным чатам со сквозным шифрованием, смог читать и отправлять сообщения в них. 

При этом реальный владелец аккаунта даже не видел, что его взломали.

А когда хакер попытался с реального аккаунта выйти из всех сеансов, поддельную учетную запись даже не выбросило из сети. Сессионные и графические ключи тоже не менялись. 

В общем, хакер успел провести ещё несколько экспериментов, пока аккаунт в Telegram не заблокировали и не удалили секретные чаты. Небыстро, прямо скажем. 

Пароль любой длины в Telegram тоже можно обойти

Действительно, четырехзначный pin – не самая надежная защита аккаунта. Полноценный пароль надежнее. Но ne555 выяснил, что и он не спасает – существует схема обхода пароля любой длины

Хакер взломал пароль длиной более 30 символов, настроил на своем устройстве разблокировку отпечатком пальца. А также смог повторно войти в чужой аккаунт и получить доступ ко всем секретным чатам. 

Эксперт отметил: в Telegram принудительно интегрирована функция «разблокировка отпечатком пальца». Если на вашем смартфоне нет сканера отпечатка, вы не сможете настроить или отключить её в Telegram. 

Кроме того, хакеру удалось обойти шифрование самого устройства. И получить данные Telegram для доступа к секретным чатам. 

Серверы Telegram уже взламывали, причём публично

Ещё один Habr-пост – от пользователя Bo0oM, написан в июле 2019 года. Хакер заявил, что взломал сервер Telegram через стандартные уязвимости и искренне удивился, как отвратительно компания относится к безопасности. 

Взломщик подчеркнул: в 2019 году весь Telegram использует nginx, а этот конкретный сервер – не самый надежный Apache. Bo0oM отправил некорректный запрос, и сервер слегка приуныл… За описание этого и других найденных в процессе багов получил 2500 долларов от службы безопасности мессенджера. 

С одной стороны, в этом случае Bo0oM взломал не весь мессенджер, а лишь конкретный сервер. Но если пойти дальше, можно было бы наворотить гораздо больше – научиться “ронять” серверы, вытаскивать логи падения и т.д. 

И вы можете попробовать заработать. Письма с багами можно отправлять на  [email protected]

Передаваемые через Telegram файлы уже перехватывали

В июне Symantec рассказал об уязвимости Media File Jacking для Android-версиях Telegram и WhatsApp. Оказалось, что мессенджеры сохраняют изображения в своем внутреннем хранилище, либо во внешнем разделе памяти. Второе опасно

Если отправлять файлы во внешнее хранилище, то их можно украсть с помощью внешних вредоносных программ. А также заменить или отредактировать. 

Так что скриншоты с номерами карт и кошельков таким способом точно передавать не стоит. Как и приватные фото из душа. 

Связи пользователей Telegram друг с другом тоже раскрывали

Ещё один скандал вокруг Telegram  разразился 30 октября 2018 года. Эксперт по кибербезопасности Натаниэль Сачи выяснил, что десктопный Telegram хранит переписку на жестком диске в незашифрованном виде.

Сачи заявил: Telegram использует базу данных SQLite для хранения сообщений. Прочитать её “в лоб” не получится, но имена и телефонные номера вполне можно проассоциировать друг с другом. 

Конечно, это проблема не столько Telegram Desktop, сколько уровня защиты устройства пользователя в целом. Но… Раздолбайство со стороны разработчиков, мягко говоря. Хотя Павел Дуров не считает проблемой такое хранение данных. 

У Telegram закрытый код, поэтому объективно проверить его безопасность не получается

Разработчики Telegram заявляют:

Всё хранится в зашифрованном виде, чаты хорошо зашифрованы, а ключи шифрования хранятся по частям в датацентрах в юрисдикции разных стран.

Исходный код клиентов для Telegram является открытым. А вот код сервера открывать не рискнули, и это рождает массу вопросов.

Но клиент работает через API и никак не взаимодействуя напрямую с “безопасными датацентрами”. Что происходит внутри этого черного ящика, неизвестно

К тому же эксперты не верят, что ключи шифрования собираются на лету при отправке и приеме каждого сообщения. Это как минимум вызвало бы определенные задержки, а Telegram, надо признать, работает очень быстро. 

Telegram для iOS издает компания Telegram LLC, а для Android — Telegram FZ-LLC. Компании основали в США и Великобритании, где действует так называемый Gag order. Он предполагает, в том числе, что правоохранительные органы могут запретить разработчикам разглашать сведения о том, что те предоставляли им информацию. В том числе о серверах, ключах шифрования, пользователях и др. 

Telegram объявлял конкурс взлома на $200 тыс., которые нереально выиграть

Братья Дуровы считали MTProto настолько неуязвимым, что в 2013 году даже пообещали награду в 200 тыс. долларов за взлом этого протокола и чтение переписки между ними. В переписке содержался адрес, на который нужно было отправить письмо. 

Спустя несколько дней пользователь с ником x7mz, который даже не был экспертом в криптографии, обнаружил уязвимость в протоколе. Она позволяла провести MITM-атаку на секретные чаты. Правда, переписку пользователь не расшифровал, так что ему дали лишь 100 тыс. долларов

Протокол в дальнейшем доработали и объявили новый конкурс. Модель возможной атаки расширили – например, разрешили выступать в роли сервера MTProto и менять пересылаемые данные. 

Но, по мнению экспертов, такие конкурсы – просто дешевая реклама. Они не позволяют доказать безопасности шифрования и вводят пользователей в заблуждение

Организаторы не дают известный или выбранный открытый текст, шифротекст, возможность вызова повтора и использование других традиционных тестовых методов. Фактически вы можете отправить только одно зашифрованное сообщение – этого явно мало для полноценной атаки.

Присланные отчеты анализируют случайные люди. К тому же 100-200 тыс. долларов – слишком мало, чтобы это было интересно командам опытных криптоаналитиков. 

Впрочем, дыры в MTProto находят регулярно (один, два, три). И без финансовой мотивации. 

Многие эксперты считают защиту в Telegram просто маркетингом

В Telegram не намерены рассказывать о протоколе MTProto 2.0, да и внешний аудит  не проводили ни разу

Ещё один момент: что происходит, когда пользователь Telegram отправляет сообщения, а адресат не в сети? Вероятно, сообщения отправляются на серверы Telegram, объединенные в виртуальное облако. Они синхронизируются между собой. Как только адресат появится в сети, он получит сообщения. 

Таким образом, трафик в любом случае проходит через сервер. Хотя многие эксперты считают, что логичнее было бы установить соединение “клиент – клиент” – например, пиринговое (P2P). 

В результате получается, что связь в Telegram вообще не работает без постоянного использования серверов. В других мессенджерах есть более элегантные и безопасные решения – например, когда серверы задействуют только для сравнения текущих IP-адресов собеседников и организации  прямого соединения между ними. 

Также специалисты считают, что алгоритм Диффи-Хеллмана в Telegram специально ослаблен на уровне генератора псевдослучайных чисел. Эти числа не генерируются на вашем смартфоне или ПК – приложение запрашивает их с сервера. Как там организована генерация, знают только разработчики. 

Открытый исходный код клиента – ещё один большой вопрос. Более-менее регулярно обновляется только репозиторий десктопной версии, да и то она урезанная. Из чего собираются готовые дистрибутивы, оперативно проверить нельзя. 

Привязка к телефону – последний гвоздь в крышку гроба

Учетные записи в Telegram привязаны к номерам телефона. Это сказывается и на анонимности, и на безопасности.

Коды подтверждения приходят в SMS. Давно всем известная дыра в протоколе сотовой связи SS7 позволяет перехватывать и подменять их. 

Перехватив код, можно получить доступ к переписке в обычных чатах. Даже не придется ломать MTProto. Сервер автоматически сменит ключ и дешифрует недоставленные сообщения. И это как минимум! 

Ещё одна проблема — push-уведомления. Именно они оповещают о новых входящих без запуска мессенджера. Но сервер push-уведомлений – это фактически разрешенная вами атака «человека посередине». И такая ситуация во всех популярных мессенджерах. 

Что делать обычному пользователю Telegram?

Не вести приватных бесед в мессенджерах. Не передавать через них информацию, которая может быть использована против вас. 

Альтернатива Telegram – например, Signal. Его рекомендовали основатель WikiLeaks Джулиан Ассандж и экс-сотрудник АНБ и ЦР Эдвард Сноуден. 

Но и Signal не раз успешно атаковали. Хотя это сложнее, чем взломать Telegram. 

Другой вариант – мессенджеры с поддержкой OTR: Adium, Conversations Legacy, Xabber, Pidgin (с плагином), Conversations и др. И личные встречи в чистом поле без свидетелей. 

🤓 Хочешь больше? Подпишись на наш Telegram. … и не забывай читать наш Facebook и Twitter 🍒–> iPhones.ru Разбираемся, что там на самом деле с безопасностью в Telegram. –>

Ксения Шестакова

@oschest

Живу в будущем. Разбираю сложные технологии на простые составляющие.

Этот раздел FAQ рассчитан на продвинутых пользователей. Можете также почитать обычное FAQ.

MTProto использует оригинальный метод для того, чтобы достичь надёжности в ныне уязвимой мобильной связи и скорости в доставке больших файлов (например, фотографий, видеороликов и документов размером до 1 ГБ). Этот документ предназначен для разъяснения деталей нашей системы и рассмотрения элементов, которые на первый взгляд трудно понять.

Детальная документация протокола доступна на этой странице. Если у вас есть вопросы — пишите в Твиттер.

Примечание: Каждое сообщение, зашифрованное через MTProto, всегда содержит следующие данные, которые будут проверены во время дешифрования, для того чтобы сделать систему надёжной от известных проблем:

  • соль сервера (64-битная) — server salt (64-Bit);
  • идентификатор сессии — session id;
  • порядковый номер сообщения — message sequence number;
  • длина сообщения — message length;
  • время отправки сообщения — time.

Note 2: Смотрите дополнительные комментарии по поводу использования IGE, SHA-1 и модифицированной схемы encrypt-and-mac.

В то время как другие способы достижения тех же криптографических целей, несомненно, существует, мы считаем, что нынешнее решение является как надёжным, так и преуспевающим в нашей второстепенной задаче — превосходстве над незащищёнными мессенджерами в плане скорости доставки и стабильности.

Мы предпочитаем использовать хорошо известные алгоритмы, созданные в те дни, когда пропускная способность и вычислительная мощность в паре встречались довольно-таки редко. Именно эти алгоритмы оказывают значительное влияние на сегодняшнюю разработку приложений для мобильных устройств, заставляя их авторов избавляться от известных недостатков. Слабые стороны таких алгоритмов также хорошо известны и использовались злоумышленниками десятилетиями. Мы же используем эти алгоритмы в такой реализации потому, что они, как мы считаем, приводят любую известную атаку к провалу. Тем не менее мы были бы рады ознакомиться с любыми доказательствами обратного (до сих пор таких случаев не выпадало), чтобы усовершенствовать нашу систему.

Вы можете принять участие в нашем конкурсе: Павел Дуров предлагает $200 000 в биткойнах тому, кто первый взломает MTProto. Можете ознакомиться с объявлением и Конкурсным FAQ. Если у вас есть другие замечания, будем рады услышать их на security@telegram.org.

Согласно определению, атака на основе открытого текста — вид криптоаналитической атаки, при которой у атакующего есть обе версии текста: зашифрованная и исходная. Используемый в MTProto AES IGE устойчив к таким атакам. К тому же незашифрованный текст в MTProto всегда содержит соль сервера и идентификатор сессии.

Согласно определению, атака на основе адаптивно подобранного открытого текста — вид атаки в криптоанализе, предполагающий, что криптоаналитик может выбирать открытый текст и получать соответствующий ему шифротекст. MTProto использует AES в режиме IGE, который безопасен против таких атак. Известно, что IGE неустойчив к blockwise-adaptive атакам, но MTProto исправляет это нижеописанным способом. Каждое сообщение с открытым текстом, которое предстоит зашифровать, содержит следующие данные, которые проверяются при расшифровке:

  • соль сервера (64-битная) — server salt (64-Bit);
  • порядковый номер сообщения — message sequence number;
  • время отправки сообщения — time.

Вдобавок к этому, чтобы заменить открытый текст, также придётся использовать верные AES-ключ и вектор инициализации, зависящие от auth_key. Это делает MTProto устойчивым против атак на основе адаптивно подобранного открытого текста.

Согласно определению, атака на основе подобранного шифротекста — это криптографическая атака, при которой криптоаналитик собирает информацию о шифре путём подбора зашифрованного текста и получения его расшифровки при неизвестном ключе. При такой атаке злоумышленник может ввести в систему один или несколько известных шифротекстов и получить открытые тексты. При помощи этих данных атакующий может попытаться восстановить ключ, используемый для расшифровки. В MTProto при каждой дешифровке сообщения производится проверка на соответствие msg_key к SHA-1 расшифрованных данных. Открытый текст (дешифрованные данные) также всегда содержит информацию о длине сообщения, его порядкового номера и соли сервера. Это сводит на нет атаки на основе подобранного шифротекста.

Атаки повторного воспроизведения невозможны, поскольку каждое сообщение с открытым текстом содержит соль сервера, уникальный идентификатор сообщения и порядковый номер.

Telegram имеет два режима общения: обычные чаты, использующие шифрование клиент-сервер, и секретные чаты, использующие оконечное шифрование и защищённые от атак посредника. Передача данных между клиентом и сервером защищена от подобных атак во время генерации ключей по протоколу Диффи —Хеллмана благодаря алгоритму с открытым ключом RSA, который встроен в клиенты Telegram. После этого, если клиенты собеседников доверяют программному обеспечению сервера, секретные чаты между ними защищаются сервером от атак посредника. Специально для тех, кто не доверяет серверу, в приложении доступно сравнение секретных кодов. Ключи визуализируются в виде изображений. Сравнивая визуализированные ключи, пользователи могут удостовериться, что атака «человек посередине» не была осуществлена.

Да, мы используем IGE, но в нашей реализации с ним всё в порядке. Тот факт, что мы не используем IGE вместе с другими элементами нашей системы так же, как и MAC, делает попытки взлома IGE бессмысленными. IGE, ровно как и распространённый режим сцепления блоков шифротекста (CBC), подвержен blockwise-adaptive атакам. Но адаптивные атаки являются угрозой лишь тогда, когда один и тот же ключ используется в нескольких сообщениях (в MTProto это не так).

Адаптивные атаки даже теоретически невозможны в MTProto, потому что для расшифровки сообщений последние должны быть сперва полностью набраны, так как ключ сообщения зависит от его содержания. Что же касается неадаптивных CPA-атак, IGE защищён от них, как и CBC.

Наша схема близка к MAC-and-Encrypt, но имеет значительную модификацию: ключ шифрования и вектор инициализации зависят от хэша.

  • Мы используем SHA-1 для проверки целостности.
  • SHA-1 нужен для необработанной незашифрованной информации.
  • Ключ сообщения зависит от SHA-1.
  • Обращаем внимание, что AES-ключ зависит от SHA-1.

В результате зависящая от данных ключевая переменная защищена от всех известных типов атак.

С технической точки зрения в нашей реализации SHA-1 можно назвать особой разновидностью MAC (но не HMAC), так как он используется и в качестве ключа шифрования. Мы используем SHA-1, потому что он быстрее, особенно в случаях, когда нужно отправить большие фотографии или видеозаписи (Telegram поддерживает отправку файлов размером до 1 ГБ). Компромисс кажется оправданным, так как это означает, что по-прежнему требуется минимум 2^128 операций (вместо, скажем, 2^256 с SHA-2) только для того, чтобы начать попытки взлома схемы.

Секретные чаты не используют обязательную аутентификацию через сторонние сервисы или информацию, которая уже известна клиентам собеседников после предшествующего обмена данными. Позднее мы, вероятно, добавим для продвинутых пользователей возможность запрета инициализации в секретных чатах без предварительного подтверждения ключа (при помощи QR-кода, NFC и т.д.).

Прямая секретность доступна в секретных чатах, но в данный момент требует дополнительных действий от пользователя: придётся удалить секретный чат и создать новый или выйти из своей учётной записи (это удалит все секретные чаты). Прямая секретность поддерживается протоколом: примитивный p_q_inner_data_temp может использоваться для генерирования временных ключей с ограниченным TTL для достижения PFS. Мы работаем над нашими приложениями, чтобы добавить прямую секретность и в обычные чаты Telegram. В данный момент есть возможность создать клиент, поддерживающий прямую секретность, через наш API.

Оцените статью
Рейтинг автора
4,8
Материал подготовил
Егор Новиков
Наш эксперт
Написано статей
127
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий