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

Olm/Megolm

Olm/Megolm — это библиотеки и протоколы сквозного шифрования (end-to-end encryption, E2EE), разработанные компанией New Vector Limited (оператор мессенджера Element) для обеспечения конфиденциальности обмена сообщениями в децентрализованных системах на основе протокола Matrix. Olm реализует асинхронное шифрование по схеме «один-на-один», а Megolm — групповое шифрование, позволяющее эффективно защищать сообщения в многопользовательских чатах.

История

Разработка Olm началась в 2014 году в рамках проекта Matrix, целью которого было создание открытого, децентрализованного и защищённого протокола для обмена мгновенными сообщениями. Ключевой задачей было обеспечение сквозного шифрования, не зависящего от централизованных серверов. В 2015 году была выпущена первая версия Olm, основанная на криптографических примитивах, известных из протокола Signal (Double Ratchet Algorithm), но адаптированная для асинхронной передачи сообщений, характерной для Matrix. В 2016 году был представлен Megolm — протокол для группового шифрования, который решал проблему масштабирования, характерную для прямого применения схемы «один-на-один» в многопользовательских чатах. Обе библиотеки получили широкое распространение в экосистеме Matrix, включая такие клиенты, как Element, FluffyChat, NeoChat и другие. В 2020 году библиотеки были подвергнуты независимому аудиту безопасности, по результатам которого были внесены незначительные исправления.

Архитектура и принципы работы

Olm (протокол для сообщений «один-на-один»)

Olm реализует асинхронный вариант протокола Double Ratchet, который обеспечивает прямой секрет (forward secrecy) и защиту от компрометации ключей в прошлом (future secrecy). Основные компоненты:

  • Ключи Эдвардса (Ed25519) — для долговременной идентификации пользователя.
  • Ключи Curve25519 — для установления общего секрета через протокол Диффи — Хеллмана.
  • Криптографическая стойкая хеш-функция (SHA-256) — для генерации цепочек ключей.
  • Ratchet (храповик) — механизм, обновляющий ключи после каждого сообщения, что делает невозможным расшифровку старых сообщений при компрометации текущего ключа.

Процесс обмена сообщениями в Olm включает следующие этапы:

  1. Установление сессии: пользователи обмениваются одноразовыми ключами (pre-keys) через сервер. Сервер не имеет доступа к содержимому ключей, так как они передаются в зашифрованном виде.
  2. Обмен начальными сообщениями: первый участник отправляет инициализирующее сообщение, содержащее его одноразовый ключ и идентификатор.
  3. Синхронизация храповика: после получения ответа обе стороны вычисляют общий секрет и запускают цепочку ключей для каждого последующего сообщения.
  4. Шифрование и дешифрование: каждое сообщение шифруется с использованием симметричного ключа, полученного из текущей цепочки. После отправки или получения ключ обновляется.

Megolm (протокол для групповых сообщений)

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

Основные принципы работы Megolm:

  • Групповой сессионный ключ: один симметричный ключ (outbound key) используется для шифрования всех сообщений, отправляемых в группу. Этот ключ периодически обновляется (например, каждые 100 сообщений или по таймеру).
  • Распространение ключа: каждый участник группы получает копию группового ключа, зашифрованную с помощью своего индивидуального Olm-ключа. Таким образом, сервер не может прочитать содержимое групповых сообщений.
  • Прямой секрет: при обновлении группового ключа старый ключ уничтожается, что предотвращает расшифровку новых сообщений, если старый ключ был скомпрометирован.
  • Защита от повторной атаки: каждое сообщение содержит уникальный идентификатор (nonce) и проверяется на дубликаты.

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

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

Обе библиотеки используют проверенные и стандартизированные криптографические алгоритмы:

Применение

Olm и Megolm являются основными протоколами сквозного шифрования в экосистеме Matrix. Они используются в следующих продуктах:

  • Element — официальный клиент Matrix, разработанный компанией New Vector Limited.
  • FluffyChat — клиент с открытым исходным кодом для мобильных устройств.
  • NeoChat — клиент для настольных систем на базе KDE.
  • SchildiChat — форк Element с дополнительными функциями.

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

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

  • Производительность группового шифрования: Megolm не обеспечивает полного прямого секрета для всех участников группы, что является компромиссом между безопасностью и производительностью. В случае компрометации ключа злоумышленник может расшифровать сообщения, отправленные до его обновления.
  • Сложность реализации: корректная реализация протоколов требует глубоких знаний криптографии, что может приводить к ошибкам в сторонних клиентах.
  • Зависимость от серверов: хотя серверы не могут читать сообщения, они могут влиять на доставку ключей и синхронизацию сессий, что создаёт потенциальные векторы атак (например, подмена ключей).
  • Аудит и доверие: несмотря на проведённые аудиты, библиотеки не получили такого же уровня независимой проверки, как, например, протокол Signal.

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

  • Название «Olm» происходит от имени ольма (протея), слепого земноводного, обитающего в пещерах, что символизирует «слепое» шифрование — сервер не видит содержимого сообщений.
  • Название «Megolm» является комбинацией «Mega» (большой) и «Olm», указывая на его предназначение для больших групп.
  • Библиотеки написаны на языке Rust, что обеспечивает высокую производительность и безопасность памяти.
  • В 2021 году была выпущена версия Olm 3.0, в которой были улучшены механизмы обновления ключей и добавлена поддержка постквантовой криптографии (в экспериментальном режиме).

Источники

  • Документация протокола Matrix: «Matrix Specification: Olm and Megolm».
  • Исходный код библиотек на GitHub: «matrix-org/olm».
  • Отчёт об аудите безопасности Olm/Megolm (2020), проведённый компанией NCC Group.
  • Статья «End-to-End Encryption in Matrix» на официальном сайте Matrix.org.

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

На главную BFOmetr →