Протокол X3DH
Протокол X3DH (Extended Triple Diffie-Hellman) — это криптографический протокол установления общего секретного ключа между двумя сторонами, использующий асимметричную криптографию на основе эллиптических кривых. Он предназначен для создания безопасного канала связи в условиях асинхронного обмена сообщениями, когда одна из сторон может быть не в сети в момент инициализации сессии. Протокол был разработан компанией Open Whisper Systems (предшественник Signal Messenger) и впервые опубликован в 2016 году. X3DH обеспечивает свойства прямой секретности (forward secrecy) и будущей секретности (future secrecy, или post-compromise security) при условии правильной реализации и использования.
История и происхождение
Протокол X3DH был создан как развитие идей, заложенных в протоколах Диффи — Хеллмана (DH) и его расширениях, таких как Triple DH (3DH). Разработчики из Open Whisper Systems, в первую очередь Тревор Перрин (Trevor Perrin) и Мокси Марлинспайк (Moxie Marlinspike), стремились решить проблему безопасного обмена ключами в мессенджерах, где пользователи могут быть офлайн. Предшественником X3DH был протокол, использовавшийся в приложении Signal, который впоследствии был формализован и документирован.
Публикация спецификации X3DH в 2016 году стала важным этапом в развитии сквозного шифрования (end-to-end encryption). Протокол был принят в качестве основы для Signal Protocol, который затем был внедрён в такие приложения, как Signal, WhatsApp (принадлежит компании Meta, признанной экстремистской и запрещённой в РФ) и Skype. В 2018 году протокол был стандартизирован в рамках Internet Engineering Task Force (IETF) как часть протокола Double Ratchet, хотя X3DH остаётся отдельным этапом установления ключа.
Принцип работы
X3DH основан на комбинации нескольких обменов ключами по схеме Диффи — Хеллмана на эллиптических кривых. В отличие от классического DH, где обе стороны должны быть одновременно онлайн, X3DH использует предварительно опубликованные ключи для асинхронной работы.
Ключевые компоненты
Протокол оперирует несколькими типами ключей, которые генерируются и хранятся на стороне клиента:
- Идентификационный ключ (Identity Key, IK) — долговременный асимметричный ключ (обычно на кривой Curve25519), который связывает личность пользователя с его сессией. IK публикуется на сервере и используется для аутентификации.
- Подписанный предварительный ключ (Signed Pre-Key, SPK) — среднесрочный ключ, который подписывается идентификационным ключом. SPK также публикуется на сервере и обновляется периодически (например, раз в месяц).
- Одноразовые предварительные ключи (One-Time Pre-Keys, OPK) — набор краткосрочных ключей, которые генерируются заранее и публикуются на сервере. Каждый OPK может быть использован только один раз для одной сессии. После использования он удаляется с сервера.
- Эфемерный ключ (Ephemeral Key, EK) — временный ключ, генерируемый инициатором сессии для каждого нового соединения. EK не публикуется и используется только для одного обмена.
Этапы установления ключа
Процесс X3DH состоит из трёх основных фаз, которые выполняются инициатором (Алиса) и получателем (Боб):
- Предварительная публикация ключей (Pre-Key Bundle). Боб заранее генерирует свой IK, SPK и набор OPK. Он публикует эти ключи на сервере (например, в виде Pre-Key Bundle). Алиса может получить этот набор в любое время, даже если Боб офлайн.
- Вычисление общего секрета (Shared Secret Computation). Алиса, получив Pre-Key Bundle Боба, генерирует свой эфемерный ключ (EK) и выполняет три независимых обмена DH:
- DH1: EK_A (Алисы) + IK_B (Боба)
- DH2: IK_A (Алисы) + SPK_B (Боба)
- DH3: EK_A (Алисы) + SPK_B (Боба)
Если в наборе есть одноразовый ключ (OPK), добавляется четвёртый обмен:
- DH4: EK_A (Алисы) + OPK_B (Боба)
Каждый обмен даёт общий секрет (shared secret), который затем объединяется в один итоговый ключ (SK) с помощью хеш-функции (например, SHA-256). Формула: SK = KDF(DH1 || DH2 || DH3 || DH4), где KDF — функция вывода ключа.
- Подтверждение и начало сессии. Алиса отправляет Бобу сообщение, содержащее свой IK, EK, идентификаторы использованных ключей (например, какой OPK был взят) и зашифрованное сообщение (обычно начальное сообщение протокола Double Ratchet). Боб, получив это сообщение, восстанавливает свою часть ключей (IK, SPK, OPK) и выполняет те же обмены DH, но с использованием своего закрытого ключа. В результате он получает тот же SK. После этого обе стороны могут начать симметричное шифрование с помощью протокола Double Ratchet.
Свойства безопасности
X3DH обеспечивает несколько ключевых свойств:
- Прямая секретность (Forward Secrecy). Компрометация долговременных ключей (IK, SPK) не позволяет расшифровать прошлые сессии, так как в каждом обмене используется эфемерный ключ (EK), который не хранится после завершения сессии.
- Будущая секретность (Post-Compromise Security). Если злоумышленник скомпрометирует долговременные ключи, он не сможет расшифровать будущие сообщения, если после компрометации будет выполнен новый обмен X3DH (например, при переустановке сессии). Это свойство усиливается протоколом Double Ratchet, который обновляет ключи на каждом шаге.
- Стойкость к атакам «человек посередине» (MITM). Подписанный предварительный ключ (SPK) связывает личность Боба с его идентификационным ключом, что предотвращает подмену ключей атакующим, если он не скомпрометировал IK.
- Асинхронность. Инициатор может начать сессию, даже если получатель не в сети, используя предварительно опубликованные ключи.
Применение
Протокол X3DH является основой для Signal Protocol, который используется в ряде популярных мессенджеров и коммуникационных приложений. Основные примеры:
- Signal — оригинальное приложение, где протокол был впервые реализован. Signal считается эталоном в области безопасности и конфиденциальности.
- **WhatsApp (продукт Meta, признанной экстремистской и запрещённой в РФ)** — с 2016 года использует Signal Protocol для сквозного шифрования всех сообщений, включая текстовые, голосовые и видеозвонки. Приложение принадлежит компании Meta (организация признана экстремистской, деятельность запрещена в РФ), признанной экстремистской и запрещённой в РФ.
- Skype — с 2018 года внедрил Signal Protocol для режима «Private Conversations» (закрытые беседы).
- Facebook Messenger — использует Signal Protocol в опциональном режиме «Secret Conversations» (секретные беседы). Приложение принадлежит компании Meta, признанной экстремистской и запрещённой в РФ.
- Matrix — децентрализованный протокол для обмена сообщениями, который использует X3DH в качестве одного из методов установления ключей (в рамках реализации Olm/Megolm).
Кроме того, X3DH может применяться в других системах, где требуется безопасный асинхронный обмен ключами, например, в протоколах Интернета вещей (IoT) или в системах электронной почты с шифрованием.
Критика и ограничения
Несмотря на широкое признание, X3DH имеет ряд ограничений и подвергался критике:
- Зависимость от сервера. Протокол требует наличия доверенного сервера для хранения и распространения предварительных ключей. Если сервер скомпрометирован или злоумышленник получает доступ к Pre-Key Bundle, он может попытаться подменить ключи, хотя подпись SPK предотвращает это, если IK не скомпрометирован.
- Сложность управления ключами. Пользователи должны периодически обновлять SPK и генерировать новые OPK, что может быть накладным для мобильных устройств с ограниченными ресурсами.
- Уязвимость к атакам на стороне клиента. Если злоумышленник получает доступ к устройству пользователя (например, через вредоносное ПО), он может извлечь долговременные ключи и скомпрометировать будущие сессии, хотя протокол обеспечивает будущую секретность только при условии, что после компрометации будет выполнен новый обмен.
- Отсутствие аутентификации личности. X3DH не проверяет, действительно ли идентификационный ключ (IK) принадлежит заявленному пользователю. Для этого требуется дополнительный механизм, например, проверка отпечатков ключей (fingerprint verification) через доверенный канал (QR-код, телефонный звонок).
Сравнение с другими протоколами
X3DH часто сравнивают с другими протоколами установления ключей:
- Диффи — Хеллман (DH) — классический протокол, который требует, чтобы обе стороны были онлайн одновременно. X3DH расширяет его для асинхронного режима.
- Triple DH (3DH) — предшественник X3DH, который использует три обмена DH, но не включает одноразовые ключи. X3DH добавляет четвёртый обмен для усиления прямой секретности.
- TLS 1.3 — протокол для защищённых соединений в Интернете, который также использует DH, но ориентирован на синхронный обмен (клиент-сервер). X3DH более подходит для асинхронных сценариев, таких как мессенджеры.
- Noise Protocol Framework — более гибкий набор протоколов, который может включать X3DH как один из вариантов. Noise позволяет настраивать обмен ключами под конкретные задачи.
Будущее развитие
X3DH остаётся актуальным протоколом, но его развитие связано с общими тенденциями в криптографии. В частности, ведутся работы по адаптации X3DH к постквантовой криптографии, так как текущие алгоритмы на эллиптических кривых уязвимы для атак с использованием квантовых компьютеров. Например, в проектах, таких как PQXDH (Post-Quantum X3DH), предлагается замена Curve25519 на постквантовые алгоритмы, такие как Kyber или Dilithium. Кроме того, протокол может быть интегрирован в новые стандарты, такие как Messaging Layer Security (MLS), который разрабатывается IETF для групповых чатов.
Источники
- Perrin, T., Marlinspike, M. (2016). «The X3DH Key Agreement Protocol». Open Whisper Systems.
- Signal Messenger. «Technical Information: X3DH». Signal Documentation.
- IETF. «The Double Ratchet Algorithm». RFC 9420 (2023).
- Cohn-Gordon, K., Cremers, C., Dowling, B., Garratt, L., Stebila, D. (2017). «A Formal Security Analysis of the Signal Messaging Protocol». IEEE European Symposium on Security and Privacy.
- WhatsApp. «WhatsApp Encryption Overview». WhatsApp Blog (2016).
- Matrix.org. «Olm: A Cryptographic Ratchet». Matrix Specification.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →