Протокол Signal Protocol
Signal Protocol — это криптографический протокол сквозного шифрования, предназначенный для обеспечения конфиденциальности, целостности и аутентификации сообщений при передаче через открытые сети. Протокол обеспечивает прямой обмен зашифрованными данными между участниками коммуникации, при котором сервер-посредник не имеет доступа к содержимому сообщений. Signal Protocol сочетает в себе несколько криптографических примитивов, включая протокол Диффи — Хеллмана на эллиптических кривых (X3DH), протокол двойного храповика (Double Ratchet Algorithm) и предварительные ключи (Prekeys). Разработан компанией Open Whisper Systems (позднее — Signal Technology Foundation) и используется в мессенджере Signal, а также в ряде других приложений, таких как WhatsApp (продукт Meta, признанной экстремистской и запрещённой в РФ), Facebook Messenger (в режиме «секретных чатов») и Google Messages (в режиме RCS с шифрованием).
История
Протокол Signal Protocol берёт своё начало в 2013 году, когда разработчики компании Open Whisper Systems, основанной Мокси Марлинспайком (Trevor Perrin) и Мэттью Розенфельдом, представили протокол TextSecure. Первоначально он использовался в одноимённом приложении для шифрования SMS-сообщений. В 2014 году протокол был адаптирован для передачи данных через интернет и получил название Signal Protocol. В 2015 году протокол был внедрён в мессенджер Signal, а затем лицензирован для использования в WhatsApp (с 2016 года) и Facebook Messenger (с 2017 года). В 2018 году протокол был принят в качестве основы для стандарта шифрования RCS (Rich Communication Services) в Google Messages. По состоянию на 2025 год Signal Protocol остаётся одним из наиболее широко применяемых протоколов сквозного шифрования в мире.
Архитектура и принципы работы
Signal Protocol основан на комбинации двух ключевых алгоритмов: протокола расширенного тройного Диффи — Хеллмана (X3DH) и протокола двойного храповика (Double Ratchet). Дополнительно используются предварительные ключи (Prekeys) для обеспечения асинхронной передачи.
Протокол X3DH (Extended Triple Diffie-Hellman)
X3DH используется для первоначального установления общего секретного ключа между двумя участниками. Он позволяет установить защищённое соединение даже в том случае, если один из участников в данный момент не в сети. Протокол использует три раунда обмена ключами по схеме Диффи — Хеллмана на эллиптических кривых Curve25519. Каждый участник генерирует три типа ключей:
- Долговременный ключ (Identity Key) — статический ключ, связанный с личностью пользователя.
- Среднесрочный ключ (Signed Prekey) — ключ, подписанный долговременным ключом и периодически обновляемый.
- Одноразовые ключи (One-Time Prekeys) — временные ключи, которые удаляются после использования.
При установлении соединения отправитель загружает с сервера долговременный, среднесрочный и один из одноразовых ключей получателя, после чего выполняет три операции Диффи — Хеллмана, комбинируя свои ключи с ключами получателя. Результатом является общий секретный ключ, который используется для инициализации протокола двойного храповика.
Протокол двойного храповика (Double Ratchet Algorithm)
Протокол двойного храповика обеспечивает непрерывное обновление ключей шифрования после каждого отправленного или полученного сообщения. Он состоит из двух «храповиков»:
- Храповик цепочки (Chain Ratchet) — обновляет ключи на основе случайных чисел, генерируемых при каждом сообщении.
- Храповик Диффи — Хеллмана (DH Ratchet) — обновляет ключи на основе нового обмена ключами Диффи — Хеллмана, который происходит при каждом новом раунде общения.
Благодаря этому даже в случае компрометации одного из ключей злоумышленник не сможет расшифровать предыдущие или последующие сообщения (свойство forward secrecy и future secrecy). Протокол также использует функцию получения ключей на основе HMAC (HKDF) для генерации новых ключей из старых.
Предварительные ключи (Prekeys)
Для обеспечения асинхронной работы (когда получатель не в сети) протокол использует набор предварительных ключей, которые заранее генерируются клиентом и загружаются на сервер. При отправке сообщения отправитель загружает один из предварительных ключей получателя и использует его в протоколе X3DH. После использования ключ удаляется с сервера. Если все одноразовые ключи исчерпаны, протокол использует только долговременный и среднесрочный ключи.
Криптографические примитивы
Signal Protocol использует следующие криптографические алгоритмы:
- Эллиптическая кривая Curve25519 — для операций Диффи — Хеллмана.
- Алгоритм симметричного шифрования AES-256 в режиме CBC (Cipher Block Chaining) или ChaCha20 — для шифрования сообщений.
- HMAC-SHA256 — для аутентификации сообщений и генерации ключей.
- Функция получения ключей HKDF — для вывода ключей из общего секрета.
- Подпись Ed25519 — для подписывания среднесрочных ключей.
Применение
Signal Protocol является основой для сквозного шифрования в нескольких популярных мессенджерах:
- Signal — основной клиент, разработанный Signal Technology Foundation. Использует протокол в полном объёме, включая X3DH и Double Ratchet.
- WhatsApp (принадлежит Meta — организация признана экстремистской и запрещена в РФ) — внедрил протокол в 2016 году. Шифрование применяется ко всем сообщениям, звонкам и медиафайлам.
- Facebook Messenger (принадлежит Meta — организация признана экстремистской и запрещена в РФ) — использует протокол в режиме «секретных чатов» (Secret Conversations), который не является режимом по умолчанию.
- Google Messages — использует протокол для шифрования RCS-сообщений с 2020 года.
- Skype — в 2018 году внедрил протокол для режима Private Conversations.
- Wire — использует модифицированную версию протокола (Proteus).
Критика и ограничения
Несмотря на широкое признание, Signal Protocol имеет ряд ограничений и подвергался критике:
- Зависимость от сервера — протокол требует наличия сервера для хранения предварительных ключей и маршрутизации сообщений. Хотя сервер не может читать содержимое, он может наблюдать метаданные (время отправки, размер сообщения, IP-адреса).
- Сложность реализации — протокол требует тщательной реализации криптографических функций, что может приводить к ошибкам в сторонних приложениях.
- Отсутствие постквантовой устойчивости — протокол уязвим к атакам с использованием квантовых компьютеров, хотя ведутся работы по интеграции постквантовых алгоритмов (например, CRYSTALS-Kyber).
- Проблемы с масштабируемостью — для групповых чатов протокол требует дополнительных механизмов, таких как протокол Sender Keys, который менее эффективен при большом количестве участников.
Интересные факты
- Signal Protocol является открытым исходным кодом (лицензия GPLv3), что позволяет независимым экспертам проверять его безопасность.
- В 2016 году протокол был удостоен награды «Лучший криптографический протокол» от журнала «IEEE Security & Privacy».
- Название «храповик» (ratchet) происходит от механического устройства, которое позволяет вращение только в одном направлении — аналогично, ключи в протоколе могут только обновляться, но не возвращаться к предыдущим значениям.
Источники
- Marlinspike, M., Perrin, T. (2016). «The X3DH Key Agreement Protocol». Open Whisper Systems.
- Perrin, T., Marlinspike, M. (2016). «The Double Ratchet Algorithm». Open Whisper Systems.
- Cohn-Gordon, K., Cremers, C., Dowling, B., Garratt, L., Stebila, D. (2017). «A Formal Security Analysis of the Signal Messaging Protocol». IEEE Symposium on Security and Privacy.
- Signal Technology Foundation. «Signal Protocol Specification». Signal.org.
- WhatsApp. «WhatsApp Encryption Overview». WhatsApp.com.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →