Как устроен и работает мессенджер Signal
easy

Как устроен и работает мессенджер Signal

Роскомнадзор заблокировал Signal, но нам всё равно интересно

9 августа 2024 года Роскомнадзор ограничил доступ к мессенджеру Signal, у которого репутация одного из самых защищённых и конфиденциальных мессенджеров. Мы решили разобраться, как там всё устроено внутри, какие алгоритмы используются и так ли это безопасно на самом деле.

Что за мессенджер Signal

Мессенджер Signal появился ещё в 2014 году — тогда он назывался TextSecure. Общаться в Signal можно так же, как в любом другом современном мессенджере: переписываться, отправлять изображения, видео и другие файлы, созваниваться голосом или по видеосвязи и создавать группы для одновременного общения нескольких человек. 

Работает это всё так, что все сообщения и звонки защищены и в теории никто, кроме пользователя и его собеседников, не может их прочитать или прослушать. Даже сам Signal, который собирает о пользователях минимальный объём данных и хранит их. К примеру, в 2021 году на запрос американских правоохранительных органов Signal смог предоставить только информацию о дате создания аккаунта и последней дате, когда пользователь подключился к серверу.

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

Разработкой и поддержкой Signal занимается некоммерческий фонд Signal Foundation, который существует за счёт инвестиций и пожертвований. На практике это означает, что работу Signal сложно регулировать со стороны.

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

Signal и открытый исходный код

Приложение Signal есть для всех десктопных и мобильных операционных систем. Код для каждой платформы выложен на GitHub. Любой может проверить, как устроен Signal, и убедиться, что в нём нет скрытых ловушек или уязвимостей. Основные языки, на которых написано приложение, — Java и Swift.

Signal и открытый исходный код

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

Как устроен и работает мессенджер Signal

Например, совсем недавно в модуле AppLaunch поменялось что-то про криптографию. Нажимаем на название коммита и видим список всех файлов и внесённых изменений:

Как устроен и работает мессенджер Signal

Скопируем текст об изменениях в одном из коммитов, название файла и код и попросим ChatGPT их объяснить. Получаем такой ответ — не очень информативный, конечно, но основное понять можно:

Как устроен и работает мессенджер Signal

Если разбирать так весь код, это займёт много времени. Но для базового понимания достаточно 2–3 часов. Пока специалисты по кибербезопасности не нашли в исходном коде каких-либо закладок, которые поставили бы под сомнение надёжность алгоритмов шифрования в Signal.

Как работают современные популярные протоколы шифрования на примере алгоритма Диффи — Хеллмана

В мессенджерах используется сквозное шифрование с открытыми и секретными ключами. Их видят все, но шифрование E2E не позволяет использовать эти данные для взлома переписки. E2E — это сокращение от End to end, то есть шифрование и расшифровка происходят на конечных устройствах пользователей, а не на сервере.

Упрощённо это работает так:

  • Алла и Борис хотят обмениваться сообщениями.
  • У каждого из них есть пара ключей: секретный и открытый.
  • Приложение Аллы посылает свой публичный ключ на сервер, оттуда его забирает приложение Бориса и смешивает со своим секретным ключом. 
  • Для смешивания ключи добавляются в сложную математическую функцию. В результате вычисления этой функции получается ключ сессии.
  • Приложение Бориса шифрует своё сообщение ключом сессии и отправляет его приложению Аллы, прикладывая свой публичный ключ.
  • Приложение Аллы смешивает свой секретный ключ и публичный ключ приложения Бориса и получает ключ сессии, который может расшифровать сообщение.

На этом месте остановимся немного подробнее. Публичные и секретные ключи приложения Аллы и приложения Бориса не повторяются, и всё же при перекрёстном перемешивании дают один и тот же результат. Это работает потому, что смешивание происходит по специальной математической схеме, алгоритму Диффи — Хеллмана:

Как работают современные популярные протоколы шифрования на примере алгоритма Диффи — Хеллмана

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

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

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

Тройной алгоритм Диффи — Хеллмана в Signal

Обычный алгоритм Диффи — Хеллмана синхронный: он работает, если оба пользователя будут онлайн. Но мессенджеры работают асинхронно: один участник разговора написал, второй ответил через несколько часов или дней. Чтобы поддерживать эту возможность, в Signal Protocol реализован тройной алгоритм Диффи — Хеллмана (X3DH). 

Для этого Борису нужны 3 пары ключей. В каждой паре есть секретная и открытая часть:

  • Ключи идентификации (identity key). Это ключи, которые помогают подтвердить личность Бориса. Они привязаны к аккаунту и не меняются — только если Борис потеряет доступ к учётной записи и создаст другой аккаунт.
  • Предварительные ключи (signed prekey). Нужны для начала разговора, если Борис не в сети. Такие ключи создаются на основе постоянного и периодически обновляются. Вместе с предварительными ключами на сервере хранится электронная подпись для проверки их подлинности.
  • Одноразовые ключи (one-time prekey). Используются только один раз для начала первого диалога с каждым новым контактом в мессенджере. Сразу после использования Аллой публичного одноразового ключа Борис удаляет со своего устройства и с сервера соответствующий секретный ключ.

Чтобы начать переписываться с Борисом, у Аллы будут такие ключи:

  • Ключи идентификации — постоянные ключи. Как у Бориса, только для Аллы.
  • Временные ключи — одноразовые ключи, генерируются для каждого сообщения.

Алла скачивает с сервера ключи Бориса. После этого её приложение генерирует секретные числа по алгоритму Диффи — Хеллмана. В этом процессе участвуют такие пары ключей:

  1. Идентификационный ключ Аллы + предварительный ключ Бориса.
  2. Временный ключ Аллы + идентификационный ключ Бориса.
  3. Временный ключ Аллы + предварительный ключ Бориса.
  4. Временный ключ Аллы + одноразовый ключ Бориса. Это число высчитывается только в том случае, если у Бориса ещё остались на сервере неиспользованные одноразовые ключи. 

Эти четыре Диффи-Хеллман-числа связаны между собой по такой схеме — последняя линия показана пунктиром, потому что её может и не быть:

Тройной алгоритм Диффи — Хеллмана в Signal

Когда Алла получает все секретные числа, мессенджер генерирует из них одно: ключ сессии, которым шифруется только одно сообщение. Процесс получения этого ключа называется «функция получения ключа» (key derivation function) и чаще всего обозначается на схемах как KDF:

Тройной алгоритм Диффи — Хеллмана в Signal

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

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

Тройной алгоритм Диффи — Хеллмана в Signal

Теперь у Бориса есть все данные, чтобы повторить вычисления Аллы со своими секретными ключами. 

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

Постквантовый алгоритм шифрования PQXDH

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

Чтобы подстраховаться от появления таких квантовых устройств, разработчики Signal добавили в мессенджер алгоритм постквантового расширенного протокола Диффи — Хеллмана: PQXDH (Post-Quantum Extended Diffie-Hellman). Логика в том, чтобы заранее усложнить жизнь дешифровщикам, которые будут использовать квантовые технологии. Для этого в алгоритм добавляется ещё один слой вычислений, к которому трудно подобрать решение даже на квантовых компьютерах. 

В общих чертах PQXDH работает так:

  • Для шифрования используются сразу два протокола: Диффи — Хеллмана и постквантовый KEM-протокол Crystals Kyber-1024. KEM (key encapsulation mechanism) — это постквантовая схема выработки общего ключа, который нужен для обмена сообщениями.
  • Два протокола создают каждый свой ключ — по своим алгоритмам и независимо друг от друга.
  • Эти ключи используются для создания финального ключа шифрования, которым и будет защищены все сообщения в сессии.

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

Действительно ли Signal — безопасный мессенджер

И да, и нет.

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

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

А ещё Такер Карлсон недавно обвинил спецслужбы в том, что они просматривали его переписку в Signal и использовали данные оттуда для давления на него. Что там произошло на самом деле, мы не знаем, но повод подумать есть.

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

Есть ещё одна угроза почти для всей криптографии — недоказанная гипотеза P = NP. Это предположение, что сложные задачи вроде нахождения простых множителей для большого числа действительно сложные. Если когда-нибудь для них выведут простой и быстрый алгоритм решения, то всё шифрование придётся придумывать заново.

Что дальше

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

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy