Пользователь Хабра уличил Telegram Passport в отсутствии шифрования данных
Пользователь Scratch опубликовал детальную статью, в которой рассказывает, как взломать Telegram Passport, обосновывая этим мнение о том, что нет никакого End-to-End в сервисе идентификации пользователя. Мы выделили самую основную информацию и попытались разобраться, настолько ли всё плохо, как утверждает автор статьи.
Пару слов о Telegram Passport
Недавно представленный виртуальный паспорт предполагает наличие единого метода авторизации для служб, требующих личной идентификации. Он позволяет загрузить все свои документы один раз, а затем мгновенно делиться своими данными с сервисами, для которых требуется идентификатор (финансы, ICO и т. д.).
Представители мессенджера уверяют, что документы, удостоверяющие личность, а также другие личные данные будут храниться в едином облаке Telegram с использованием сквозного шифрования. Но пользователь Хабра решил доказать обратное. Он считает, что облако Telegram может иметь расшифрованные персональные данные пользователя.
Так, а что передаётся в облако Telegram?
Scratch предложил список данных, которые передаются в облако и тем самым якобы уничтожают рамки заявлений разработчиков мессенджера о «случайном шуме», а также отсутствии шифрования данных:
- Хэш от персональных данных, смешанных со случайными байтами;
- Зашифрованный паролем почти случайный ключ;
- «Соль» (дополнительная защита);
- Зашифрованные данные.
Автор статьи утверждает, что данный список включает всё необходимое, в том числе и ключ шифрования, защищённый паролем. По его мнению, такие данные позволяют добраться до данных пользователей «гораздо быстрее, чем перебирать все возможные комбинации ключей AES».
Хакерская атака на Telegram Passport
Предложив явный пример брутфорса — метода хакерской атаки путём подбора паролей с перебором всех возможных комбинаций символов, Scratch отмечает, что шифрование персональных данных зависит от сложности пароля.
Ему кажется, что мало кто из более чем двухсот миллионов пользователей Telegram будет делать пароли длиннее восьми символов, — а это значит, что юзеру очень легко поддаться взлому своего виртуального паспорта. Более того, Scratch утверждает, что, помимо брутфорса данных, «из-за отсутствия цифровой подписи их можно подменить на любые другие».
Пример брутфорса на Telegram Passport от Scratch:
- Берём пароль по порядку, генерируем хэш от него и соли (GPU);
- Пробуем расшифровать ключ (AES-NI);
- Смотрим на сумму байт и сразу отсеиваем почти все неверные пароли;
- Формируем ключ-кандидат на расшифровывание данных с помощью ещё одного вызова SHA-512 (GPU);
- Пробуем расшифровать первый блок данных (AES-NI);
- Чтобы не тратить время на полное расшифровывание и ещё один SHA-256, мы можем ускорить брутфорс, проверяя первый байт выравнивания так же, как они сами это делают:
if (padding < kMinPadding
|| padding > kMaxPadding
|| padding > decrypted.size()) {
и первый байт расшифрованного текста, который из-за использования JSON будет всегда "{" или "[".
Добавьте к этому сомнительные техники генерации ключей и проверки валидности расшифровываемой информации, которые не используют стандартные проверенные механизмы, а прямо нарушают принцип Don't roll your own crypto, и станет ясно, что это не End-to-End, а сколоченная на коленке поделка, от которой неприятно пахнет.
Код алгоритма шифрования персональных данных
Scratch рассмотрел код десктоп-клиента, попытавшись доказать отсутствие соответствия работы кода критериям End-to-End. Рассмотрев участок кода, где осуществляется превращение пароля в промежуточный ключ шифрования, автор статьи уточнил, что способ является достаточно устарелым, ведь существует довольно много вариантов, усложняющих действие перебора паролей брутфорсерами.
В случае с Telegram случайная «соль» дважды конкатенируется с паролем (добавление одной строки в конец другой) и прогоняется через хэш SHA-512, но Scratch уверен, что «10 GPU переберут все возможные сочетания 8-значных паролей из 94-символьного словаря (английские буквы, цифры, специальные символы) меньше, чем за 5 дней».
На одном хорошем GPU можно перебирать примерно полтора миллиарда SHA-512 в секунду.
Хэшем из пароля шифруется сгенерированный случайный ключ, а далее остаток от деления суммы байт-ключа должен быть равен 239, но, по мнению автора статьи, данный массив байт не совсем случайный, — посчитать сумму байтов после расшифровки будет гораздо проще, чем при использовании технологии HMAC, которая отсутствует в Telegram.
Эта гениальная со всех сторон конструкция служит скорее ускорению брутфорса, чем приносит пользу.
Рассмотрев метод, шифрующий данные, Scratch пояснил, что к ним добавляются от 32 до 255 случайных байт, чтобы разнообразить переменную dataHash — хэша от незашифрованных данных, где далее формируется ключ шифрования с помощью ещё одного вызова SHA-512 от сгенерированного «почти случайного ключа, сконкатенированного с dataHash».
Как же безопаснее?
Scratch рассказывает, что существуют системы защиты данных с помощью паролей, которые не позволят даже начать хакерскую атаку, так как для этого не будет достаточного набора данных.
Если правильно зашифровать данные не на хэш от пароля, а на публичный ключ, то никакой даже миллиардный кластер не сможет к ним и близко подобраться. Взгляните на Signal, другие мессенджеры на его основе (WhatsApp и др.). Весь мир уже давно и успешно использует современную асимметричную криптографию; алгоритмы, мешающие перебору паролей; стойкие стандартные криптографические конструкции.
Какая ситуация на самом деле?
Статья Scratch действительно показывает проблему использования мессенджером хэша SHA-512. В его присутствии нет ничего критичного, хотя у многих может вызвать недоумение. Но неудачно выбранный алгоритм хэширования не может являться серьёзным основанием для осуществления реальной дешифровки данных пользователей:
Они завтра поменяют в одной строчке его на bscrypt/scrypt, и какие будут ваши аргументы? — powerman, пользователь Хабра.
Защита присутствует: например, если ввести пароль для доступа в Telegram Passport неправильно три раза, то происходит блокировка доступа к нему на несколько часов. Это в любом случае должно затруднить вероятную атаку, но Scratch отметил, что это может быть далеко не так, так как «расшифровка происходит локально на клиенте, а не в облаке».
Ранее не возникало массовых случаев утечки данных пользователей, поэтому утверждать, что кто-то, кроме самого пользователя, сможет иметь предварительный доступ к данным в новом Telegram Passport — не совсем правильно. Для такого утверждения необходимы более веские основания, чем те, что представлены в статье пользователя Хабра.
А вот Антон Розенберг, экс-коллега Павла Дурова, после релиза Telegram Passport заявил, что нужно будет верить на слово, что доступ к документам будет только у самих пользователей, хотя сам в это не верит. Он считает, что «требуется проводить сложную экспертизу, так как исходные коды закрыты»:
Необходимо учитывать, что, даже если всё будет работать, как заявляется, любая сторонняя организация, получившая доступ к вашим документам, сможет сохранить у себя их копию. Поэтому не исключено, что загружаемые документы будут утекать и таким способом. Дальше в случае использования мошенниками чужих документов обычно следует заявление в полицию и расследование, но Telegram, в отличие от большинства других сервисов, заявляет о принципиальной невыдаче любых данных о любых пользователях, даже причастных к терроризму.
Подписывайтесь на «Код Дурова» в Telegram и во «ВКонтакте», чтобы всегда быть в курсе интересных новостей!
Читать первым в Telegram-канале «Код Дурова»