Криптограф о технической безопасности Telegram и его конкурсе [лонгрид]

Криптограф о технической безопасности Telegram и его конкурсе [лонгрид]

Темная Сторона
Господа, наш райтер очень старался сделать перевод этого материала. Надеемся, что у него получилось, потому что это очень важный текст, который прямым образом показывает насколько уязвима наша любимая платформа, и о вещах, которые будут изложены ниже, обязательно должны знать все пользователи. Поехали!

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

Я не уверен, считается ли это восхвалением своего продукта, но не так давно Telegram объявил крипто-конкурс. В принципе, если ты сможешь восстановить доступ к электронной почте, которая была зашифрована по принципу шифровки сообщений Telegram, вы выиграете 200,000$ в валюте Bitcoin.

Это очень хорошая идея. Такой большой приз должен привлечь немаленькое количество людей для поиска ошибок в коде приложения.

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

Почему этот конкурс не очень хорош? Чтобы понять это, мы должны знать как безопасность определяется и анализируется в криптографии. Это и будет следующей темой этой статьи. Если вы знаете, что означает IND-CPA и IND-CCA, вы можете пропустить эту лекцию.

Что означает слово "Безопасность"?

В криптографии, мы всегда разговариваем о "безопасности", поэтому мы дадим слову "безопасность" строгое определение. Это делается путем определения безопасности с уважением к возможностям соревнований - человеку ( или компьютеру), который пытается взломать систему.

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

Через несколько лет, криптографы смогут дать имена разным типам соперников. Мы рассмотрим самых важных в следующих трех секциях.


Атака на основе открытого текста ( KPA )

Давайте начнем с изучения противника, имеющего доступ к системе шифрования и дадим ему полный ключ дешифровки для некоторых участков информации. Он имеет доступ к зашифрованным данным и ключу дешифровки для этого текста, соответственно, но, в свою очередь, взломщик никак не может взаимодействовать с системой. Такую модель атаки мы будем называть "Атака на основе открытого текста (KPA)".

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

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

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

Противнику дается зашифрованный текст и сказано, что это либо шифрование "YEA" или "NAY". Предполагая, что сопернику не удается распознать тип шифрования путем анализа зашифрованных текстов, он не может взломать систему и это очень хорошо.

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

Это не просто теория. Чаще всего система может зашифровать сообщение по вашему выбору. Одним из реальных примеров является TLS соединение между веб-браузером и google.com. Если другой веб-сайт, к примеру, bing.com, индексирует изображение из google.com, браузер шифрует URL-адрес изображения и отправляет его на google.com

Модель атаки KPA не подходит под наше понятие "безопасности". Нам необходимо сделать нашего соперника более сильным, чтобы наше определение "безопасности" стало сильнее.

Это один из ключевых моментов. Мы даем противнику в нашей модели атаки больше власти, и, исходя из этого, мы можем построить более четкое определение "безопасности". Если вы построили танк, вы не проверяете броню из стрелкового оружия, вы стреляете в него сразу из RPG.


Атака на основе подобранного открытого текста (CPA)

В разделе, который предшествовал этому, мы увидели, что если противник может зашифровать некоторые участки информации по своему выбору, он может взломать систему которая является "безопасной". Так а что если мы позволим нашему оппоненту шифровать и произвольные сообщения?

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

Предположим, что существует банковская система, которая шифрует денежные переводы системой "AES в CTR" с уникальным кодом для каждого перевода. Это безопасно только в рамках "CPA" модели, что является хорошим знаком, потому что пользователь может получить свои собственные переводы с полной анонимностью.


Предположим, что просьба о переводе выглядит так:

"Переведи 100 долларов от Алисы Бобу" 

Зашифрованное сообщение выглядит так:

yAOB972Fs1KTDr8Mn84LT6psaT+w3qh8F/76n9F922Y68UQ4YYs7


Шифрование ( CTR режим ) является "податливым", поэтому реальный получатель может меняться ( выделено звездочками ):

yAOB972Fs1KTDr8Mn84LT6psaT+w3qh8F/76n9F922Y68UQ4**XQPR** 


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

"Переведи 100 долларов от Алисы Еве"

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


Целевая атака шифрованного текста (CCA)

Это приводит нас к последней модели безопасности, которую мы обсудим в блоге. Эта модель атаки называется "Целевая атака шифрованного текста" (CCA). В этой модели атаки оппоненту так же разрешено выбирать участки зашифрованного текста и расшифровывать их. Противник может делать, все что ему нужно, но в рамках того, что ему не разрешает делать система. Так же он может изменять сообщения, которые передаются между пользователями, удалять их и т.д.

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


Конкурс Telegram

Изучив все модели атаки, я хочу вам донести, как важен анализ криптозащиты. Повторю еще раз: если вы хотите показать разработчикам, что система находится в безопасности, дайте противнику все, что он пожелает, и если он даже с таким набором "привилегий" не смог полностью получить доступ к этой системе, тогда она идеальна. Зная, что у вас слабая модель защиты, например KPA, это не означает что ваша система может быть защищена от более сильной модели атаки, как CCA. Если танк пуленепробиваем, это еще не значит, что его нельзя уничтожить с RPG.

Хорошо, на сегодня достаточно "криптотеории". Вернемся к нашей настоящей проблеме: конкурс от Telegram. Состязание проходило следующим образом:

Каждый день Пол отправляет сообщение Нику, содержащее адрес электронной почты. Вы выиграете конкурс, если отправите адрес электронной почты на определенный адрес. Вы получите стенограмму входящего и исходящего сетевого трафика Пола. Согласно FAQ, вы можете отправлять свои пакеты на сервер, но вы не можете перехватывать и изменять сообщения.

Теперь вам ясна проблема? Конкурс от Telegram не дает участникам достаточно "привилегий". Противник никогда не знает незашифрованные тексты, не может выбирать зашифрованные участки, не может изменять сетевой трафик или что-то подобное, что мы рассмотрели в предыдущих разделах. Этот конкурс едва вписывается в модель открытого текста (KPA)

Если никто не выиграет конкурс, это не означает, что Telegram безопасен. Это означает, что защита Telegrama безопасна в рамках конкурса. Поэтому, если никто не победит, это еще ничего не значит.


Насколько хороша защита Telegram?

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

Некоторые проблемы видны, как на ладони:

  • Они используют "сломанную" хэш-функцию SHA1
  • Они включают хэш сообщения из нешифрованного сообщения в зашифрованное сообщение. По сути, они пытаются сделать "Mac and Encrypt", что по сути не является безопасным.
  • Они полагаются на не до конца изученный режим шифрования под названием "Бесконечный карман"
  • Также присутствуют действительно странные вещи о факторинге 64-битных целый чисел, которые входят в состав протокола шифрования.
  • Они не аутентифицируют открытие ключи.

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


Что должен делать Telegram?

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

Они должны написать на 100% изученный протокол, например как тот, который использовался по TextSecure. Им нужно нанять реально хорошего криптографа для проведения аудита по их дизайну и им необходимо убедиться, что программисты, которые работали над протоколом безопасности, компетентны  в своей сфере.

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


Ответ Telegram

Telegram ответил на этот пост. Я искренне ценю время, которое они потратили на ответ, и я приношу свои извинения, что им пришлось подписаться на мой tumblr, чтобы ответить.


Ниже вы можете прочитать краткий пересказ их ответа на мои вопросы:

  • Telegram отмечает в своих правилах конкурса, что это состязание продлится до тех пор, пока не будут прекращены все атаки. Им следует ограничить время проведения конкурса. Это единственная причина, по которой можно избежать потери 200.000 долларов. Им не нужно создавать какую - либо "инфраструктуру" для конкурса, за исключением регламента четких правил и описания модели и угрозы, а так же критериев для адекватной оценки атаки.
  • Telegram оправдывает использование SHA1, отмечая, что он не был взломан ( хотя есть доказательства того, что он полностью взломан и контролируется) и что SHA1, по сравнению со своими конкурентами, работает намного быстрее. Это хорошая причина использовать SH1, тем более, что в соответствии с критериями, SHA256 медленнее почти в 1,5 раза.
  • Telegram объясняет факт использования "Mac and Encrypt" в своих FAQ. Они не дают повода использовать их систему по стандарту "ecncryptyhen-HMAC", который хорошо понимается ведущими криптографами мира имеет доказательства своей безопасности
  • Согласно их ответу на Tumblr, 64-битная факторизация является частью системы защиты от DDos. Предположительно, это просто доказательство работы, а не часть их криптографии. Однако, факторинг является плохим выбором для доказательство, поскольку он уязвим для поисковых таблиц. Биткойновское доказательство работы звучит куда убедительнее.
  • В FAQ, Telegram пытается утверждать о безопасности своей системы от атак KPA,CPA,CCA. Их аргументы неубедительны. У них имеются огромные ошибки в безопасности клиента ( AES в режиме IGE). Поэтому, система "AES in IGE" не надежна и разработчики Telegram должны посмотреть на картину шире.

Причина Telegram для создания собственного протоколы защиты персональных данных пользователей следующая:

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

Другими словами, они разработали свой собственный криптографический алгоритм скорости и надежности. Я не вижу, как шифрование "HMAC-SHA1" несовместимо с надежностью. @zooko указывает, что функция хеширования BLAKE2 работает быстрее и безопаснее, чем SHA1. Я согласен с тем, что их протокол сделан плохо и должен быть уничтожен. Хороший дизайн не нуждается в большой объяснении и FAQ по Telegram продолжает уверенно набирать обороты.

На этом статья заканчивается. Большое спасибо автору блога CryptoFails за этот разгромный аудит и отдельная благодарность нашему переводчику, который подготовил перевод этого очень важного, на наш взгляд, материала. Надеемся, что вам понравилось, поэтому будем благодарны если поделитесь этой статьей со своими друзьями и сделаете репост! ❤️

Report Page