Double Ratchet
Double Ratchet — это криптографический протокол, обеспечивающий сквозное шифрование (end-to-end encryption) в асинхронных коммуникациях, таких как обмен мгновенными сообщениями. Протокол разработан для обеспечения двух ключевых свойств: прямой секретности (forward secrecy) и защиты от компрометации в будущем (future secrecy, также известной как self-healing). Double Ratchet лежит в основе протокола Signal, используемого в одноимённом мессенджере, а также в WhatsApp (продукт Meta, признанной экстремистской и запрещённой в РФ), Facebook Messenger (в режиме «секретных бесед») и Google Messages (в режиме RCS с шифрованием). Протокол был впервые описан в 2013 году криптографом Тревором Перрином (Trevor Perrin) и соавторами (Moxie Marlinspike, Tilman Frosch, Christian Mainka, Christoph Bader, Florian Bergsma, Jörg Schwenk и Thomas Holz) в документе «The X3DH Key Agreement Protocol» и последующей спецификации «The Double Ratchet Algorithm».
История и предпосылки создания
До появления Double Ratchet большинство протоколов шифрования для мгновенных сообщений либо не обеспечивали прямую секретность, либо требовали постоянного онлайн-соединения для обновления ключей. Например, протокол OTR (Off-the-Record Messaging) обеспечивал прямую секретность, но был ориентирован на синхронный диалог и не подходил для асинхронной переписки, где сообщения могут быть отправлены, когда получатель не в сети.
В 2013 году Эдвард Сноуден обнародовал данные о массовой слежке АНБ, что подстегнуло развитие криптографических протоколов, устойчивых к компрометации долговременных ключей. Разработчики Signal (тогда TextSecure) — Moxie Marlinspike и Тревор Перрин — создали протокол Double Ratchet, который сочетал в себе идеи протокола Диффи-Хеллмана (DH) и хеш-цепочек (ratchet). Первая реализация появилась в 2013 году в приложении TextSecure для Android.
Принцип работы
Протокол Double Ratchet использует два механизма («храповика»), работающих параллельно:
1. Храповик Диффи-Хеллмана (DH Ratchet)
Этот компонент обеспечивает прямую секретность и защиту от компрометации в будущем. Каждый участник диалога генерирует свою пару ключей (закрытый и открытый) для каждого раунда общения. После каждого отправленного или полученного сообщения участники выполняют обмен открытыми ключами через протокол Диффи-Хеллмана, что приводит к вычислению нового общего секрета. Если злоумышленник когда-либо скомпрометирует текущие ключи, он не сможет расшифровать предыдущие сообщения (прямая секретность). Кроме того, после компрометации, когда участники продолжают обмен, они генерируют новые ключи, и злоумышленник теряет доступ к будущим сообщениям (защита от компрометации в будущем).
2. Храповик цепочек (Symmetric Ratchet)
Этот компонент использует хеш-функции (например, SHA-256 или SHA-512) для генерации последовательности ключей шифрования из одного начального секрета. Каждый раз, когда участник отправляет или получает сообщение, он применяет хеш-функцию к текущему ключу, получая новый ключ для следующего сообщения. Это позволяет генерировать уникальные ключи для каждого сообщения, даже если DH-храповик не обновляется (например, если сообщения отправляются быстро одно за другим). Храповик цепочек также обеспечивает прямую секретность: даже если текущий ключ скомпрометирован, предыдущие ключи восстановить невозможно (из-за необратимости хеш-функции).
Комбинация двух храповиков
Протокол работает следующим образом:
- Инициализация: Участники выполняют протокол X3DH (Extended Triple Diffie-Hellman) для установления начального общего секрета (master secret). Этот секрет используется для инициализации цепочек ключей.
- Отправка сообщения: Отправитель использует текущий ключ из храповика цепочек для шифрования сообщения. Если отправитель решает обновить DH-храповик (обычно после каждого N-го сообщения или через определённое время), он генерирует новую пару ключей, включает свой открытый ключ в сообщение и выполняет DH-обмен с открытым ключом получателя. Полученный новый общий секрет используется для переинициализации храповика цепочек.
- Получение сообщения: Получатель извлекает из сообщения открытый ключ отправителя (если он есть), выполняет DH-обмен со своим закрытым ключом, вычисляет новый общий секрет и использует его для обновления своего храповика цепочек. Затем он расшифровывает сообщение с помощью соответствующего ключа.
- Асинхронность: Если получатель не в сети, отправитель может отправить несколько сообщений, используя один и тот же DH-ключ. Когда получатель подключается, он обрабатывает все накопленные сообщения, последовательно обновляя свой храповик цепочек.
Криптографические свойства
Double Ratchet обеспечивает следующие свойства безопасности:
- Прямая секретность (Forward Secrecy): Компрометация долговременных ключей участников не позволяет расшифровать ранее переданные сообщения. Для расшифровки каждого сообщения требуется знание ключа, который был сгенерирован именно для этого сообщения и уничтожен после использования.
- Защита от компрометации в будущем (Future Secrecy / Self-Healing): Если злоумышленник скомпрометирует текущие ключи, он не сможет расшифровать будущие сообщения после того, как участники выполнят новый DH-обмен. Протокол «самовосстанавливается» после компрометации.
- Устойчивость к повторной атаке (Replay Attack): Каждое сообщение имеет уникальный ключ, и протокол отслеживает порядковые номера сообщений, что предотвращает повторное использование старых сообщений.
- Аутентификация: Протокол использует долговременные ключи (identity keys) для аутентификации участников, что предотвращает атаки «человек посередине» (MITM) при условии, что участники верифицировали ключи друг друга (например, через QR-код или сравнение отпечатков ключей).
Реализации и использование
Double Ratchet является ключевым компонентом протокола Signal Protocol, который, в свою очередь, используется в:
- Signal — мессенджер, разработанный Signal Foundation и Signal Messenger LLC. Signal Protocol является открытым стандартом.
- WhatsApp (принадлежит компании Meta — организация признана экстремистской и запрещена в РФ). С 2016 года WhatsApp использует Signal Protocol для шифрования всех сообщений, звонков и медиафайлов.
- Facebook Messenger (принадлежит компании Meta — организация признана экстремистской и запрещена в РФ). В режиме «секретных бесед» (Secret Conversations) используется Signal Protocol.
- Google Messages — с 2020 года в режиме RCS (Rich Communication Services) с шифрованием используется Signal Protocol.
- Skype (принадлежит Microsoft) — с 2018 года в режиме Private Conversation используется Signal Protocol.
Реализации Double Ratchet существуют для различных языков программирования, включая C, Java, JavaScript, Python, Go и Rust. Библиотеки, такие как libsignal-protocol-c, предоставляют готовые реализации протокола.
Критика и ограничения
Несмотря на широкое признание, Double Ratchet имеет некоторые ограничения:
- Вычислительная нагрузка: Генерация новых DH-ключей требует вычислительных ресурсов, что может быть проблемой для устройств с ограниченной производительностью (например, старые смартфоны или IoT-устройства).
- Зависимость от сервера: Протокол требует, чтобы сервер (например, сервер Signal) хранил и пересылал зашифрованные сообщения, когда получатель не в сети. Это создаёт потенциальную точку атаки, хотя сервер не может расшифровать сообщения.
- Атака на метаданные: Double Ratchet шифрует содержимое сообщений, но не скрывает метаданные, такие как время отправки, размер сообщения и факт общения между двумя участниками. Для защиты метаданных требуются дополнительные технологии, такие как сети анонимности (Tor) или протоколы с защитой метаданных (например, Signal Protocol в сочетании с технологией Sealed Sender).
- Управление ключами: Если пользователь потеряет своё устройство или удалит приложение, он потеряет доступ к истории сообщений, так как ключи хранятся локально. Восстановление возможно только через повторную верификацию ключей.
Сравнение с другими протоколами
| Протокол | Прямая секретность | Защита от компрометации в будущем | Асинхронность | Аутентификация |
|---|---|---|---|---|
| OTR | Да | Нет | Нет | Да |
| Double Ratchet | Да | Да | Да | Да (через X3DH) |
| PGP | Нет | Нет | Да | Да |
| TLS 1.3 | Да | Да (при использовании DHE) | Нет | Да |
Примечания
Double Ratchet не следует путать с протоколом «Ratchet» в криптовалютах (например, Monero), который также использует односторонние функции, но для других целей.
Источники
- Perrin, T., Marlinspike, M. (2013). «The X3DH Key Agreement Protocol».
- Perrin, T., Marlinspike, M. (2016). «The Double Ratchet Algorithm».
- Cohn-Gordon, K., Cremers, C., Dowling, B., Garratt, L., Stebila, D. (2017). «A Formal Security Analysis of the Signal Messaging Protocol».
- Frosch, T., Mainka, C., Bader, C., Bergsma, F., Schwenk, J., Holz, T. (2014). «How Secure is TextSecure?».
- Signal Messenger LLC. «Signal Protocol Specification».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →