Открыть сервис

Double Ratchet Algorithm

Double Ratchet Algorithm (алгоритм двойной криптографической смены ключей) — это криптографический протокол, обеспечивающий сквозное шифрование (end-to-end encryption) с прямым секретностью (forward secrecy) и будущей секретностью (future secrecy, или self-healing) в асинхронных системах обмена сообщениями. Алгоритм был разработан в 2013 году криптографами Тревором Перрином (Trevor Perrin) и Моше Маркусом (Moxie Marlinspike) и впервые реализован в протоколе Signal. Впоследствии он лёг в основу шифрования многих популярных мессенджеров, включая WhatsApp (продукт Meta, признанной экстремистской и запрещённой в РФ), Google Messages (в версии RCS) и Facebook Messenger (в режиме «секретных бесед»). Основная задача алгоритма — позволить двум сторонам поддерживать зашифрованный диалог, в котором даже при компрометации одного из долговременных ключей или перехвате отдельных сообщений злоумышленник не может расшифровать ни предыдущие, ни последующие сообщения.

История и предпосылки создания

До появления Double Ratchet Algorithm большинство систем сквозного шифрования использовали статические или долговременные ключи, что делало их уязвимыми: если злоумышленник получал доступ к долговременному ключу, он мог расшифровать все прошлые и будущие сообщения. Первые попытки решить эту проблему предпринимались в протоколах Off-the-Record (OTR) и Silent Circle, но они не обеспечивали полной асинхронности (требовали одновременного присутствия обоих участников) или не поддерживали групповые чаты.

В 2013 году, после разоблачений Эдварда Сноудена о массовой слежке АНБ, компания Open Whisper Systems (основатель — Мокси Марлинспайк) начала работу над протоколом Signal. Тревор Перрин и Мокси Марлинспайк объединили идеи двух криптографических примитивов: «криптографической смены» (ratchet) на основе протокола Диффи — Хеллмана и «цепочки смены» на основе хеш-функции (KDF ratchet). Результат получил название Double Ratchet Algorithm. Первая публичная реализация появилась в приложении Signal в 2014 году.

Принцип работы

Основные компоненты

Алгоритм использует три типа ключей:

  • Долговременные ключи (Identity Keys) — пара асимметричных ключей (открытый и закрытый), генерируемая при первой установке приложения. Они не меняются в течение всего времени использования аккаунта.
  • Среднесрочные ключи (Signed Pre-Keys) — пара асимметричных ключей, подписанная долговременным ключом. Периодически обновляются.
  • Эфемерные ключи (One-Time Pre-Keys) — одноразовые ключи, которые клиент отправляет на сервер для установки начального сеанса.

Два «храповика»

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

  1. Храповик Диффи — Хеллмана (DH Ratchet) — основан на протоколе обмена ключами Диффи — Хеллмана. Каждый раз, когда одна из сторон отправляет сообщение, она генерирует новую эфемерную пару ключей и включает открытый ключ в сообщение. Получатель, используя свой закрытый ключ и открытый ключ отправителя, вычисляет новый общий секрет (shared secret). Это обеспечивает прямую секретность: если злоумышленник перехватит все долговременные ключи, он не сможет расшифровать сообщения, отправленные после компрометации, так как для каждого сообщения используется новый сеансовый ключ.
  1. Храповик на основе хеш-функции (KDF Ratchet) — использует криптографическую хеш-функцию (например, SHA-256 или SHA-512) для создания цепочки ключей из одного начального секрета. Каждый раз, когда сторона отправляет или получает сообщение, она «прокручивает» (ratchet) цепочку, генерируя новый ключ шифрования и новый ключ для следующего шага. Это обеспечивает будущую секретность: даже если злоумышленник узнает текущий сеансовый ключ, он не сможет вычислить предыдущие ключи, так как хеш-функция необратима.

Процесс установки сеанса

  1. Инициализация: Сторона A (отправитель) получает от сервера долговременный, среднесрочный и один эфемерный ключи стороны B (получателя). A генерирует свой эфемерный ключ и вычисляет начальный общий секрет, используя протокол X3DH (Extended Triple Diffie-Hellman). Этот секрет становится входным значением для KDF-храповика.
  2. Первое сообщение: A шифрует сообщение с помощью первого ключа из цепочки KDF и отправляет его вместе со своим эфемерным открытым ключом. B, получив сообщение, вычисляет тот же общий секрет и запускает свой KDF-храповик.
  3. Дальнейшая переписка: Каждый раз, когда одна из сторон отправляет сообщение, она выполняет шаг DH-храповика (генерирует новый эфемерный ключ) и шаг KDF-храповика (прокручивает цепочку). Получатель, в свою очередь, также прокручивает свою цепочку при получении каждого сообщения.

Управление пропущенными сообщениями

Алгоритм рассчитан на асинхронную связь, когда сообщения могут приходить не по порядку или быть потеряны. Для этого каждая сторона ведёт два буфера: один для отправленных сообщений (с номерами цепочек), другой — для полученных. Если сообщение приходит с номером, превышающим ожидаемый, получатель создаёт «пропуски» (skipped keys) в своей цепочке, вычисляя все промежуточные ключи. Это позволяет расшифровать сообщение, даже если несколько предыдущих были потеряны.

Криптографические примитивы

Double Ratchet Algorithm использует следующие криптографические функции:

Применение

Мессенджеры и протоколы

  • Signal — оригинальная реализация, используемая в одноимённом приложении. Протокол Signal (Signal Protocol) — эталонная реализация Double Ratchet Algorithm.
  • WhatsApp (принадлежит компании Meta, признанной экстремистской и запрещённой в РФ) — с 2016 года использует протокол Signal для всех сообщений. При этом Meta (организация признана экстремистской и запрещена в РФ) не раскрывает полную реализацию, но подтверждает использование Double Ratchet.
  • Google Messages (RCS) — с 2020 года использует протокол Signal для сквозного шифрования в режиме RCS.
  • Facebook Messenger (принадлежит компании Meta, признанной экстремистской и запрещённой в РФ) — в режиме «секретных бесед» (Secret Conversations) использует протокол Signal. Meta (организация признана экстремистской и запрещена в РФ) не раскрывает детали реализации для групповых чатов.
  • Skype — с 2018 года использует протокол Signal для сквозного шифрования в режиме Private Conversation.
  • Matrix — децентрализованный протокол обмена сообщениями, использующий модифицированную версию Double Ratchet (Olm и Megolm) для групповых чатов.

Другие области

  • VoIP-звонки — некоторые приложения (например, Signal) используют Double Ratchet для шифрования голосовых и видеозвонков, адаптируя алгоритм для работы в реальном времени.
  • IoT и умные устройства — в ограниченной форме алгоритм применяется для защиты каналов связи между устройствами с низким энергопотреблением, где требуется асинхронная передача данных.

Критика и ограничения

  • Сложность реализации: Алгоритм требует точного управления состоянием (ключами, номерами цепочек, буферами пропущенных сообщений). Ошибки в реализации могут привести к уязвимостям.
  • Нагрузка на сервер: Для поддержки асинхронности требуется сервер, который хранит эфемерные ключи пользователей (например, One-Time Pre-Keys). Если сервер скомпрометирован, злоумышленник может получить доступ к этим ключам, но не сможет расшифровать сообщения без долговременных ключей.
  • Проблемы с групповыми чатами: Оригинальный алгоритм рассчитан на диалог между двумя сторонами. Для групповых чатов требуется модификация (например, протокол Megolm в Matrix), которая жертвует частью прямой секретности в пользу производительности.
  • Квантовая устойчивость: Алгоритм основан на протоколе Диффи — Хеллмана, который уязвим для атак с использованием квантовых компьютеров (алгоритм Шора). В настоящее время ведутся работы по созданию постквантовых версий (например, на основе решёточных криптосистем).

Интересные факты

  • Название «ratchet» (храповик) отражает необратимость процесса: ключи можно только «прокручивать» вперёд, но нельзя вернуться назад.
  • Алгоритм был независимо проанализирован и признан безопасным многими криптографическими сообществами, включая экспертов из Университета Ватерлоо и Кембриджского университета.
  • В 2016 году протокол Signal был рекомендован к использованию Европейским агентством по сетевой и информационной безопасности (ENISA) для защиты коммуникаций.

Источники

  • Perrin, T., & Marlinspike, M. (2016). The Double Ratchet Algorithm (документация протокола Signal).
  • Open Whisper Systems. Signal Protocol Specification.
  • Cohn-Gordon, K., Cremers, C., Dowling, B., Garratt, L., & Stebila, D. (2017). A Formal Security Analysis of the Signal Messaging Protocol (Journal of Cryptology).
  • ENISA. (2016). Recommendations for the Security of Mobile Messaging Applications.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →