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 включает следующие этапы:
- Установление сессии: пользователи обмениваются одноразовыми ключами (pre-keys) через сервер. Сервер не имеет доступа к содержимому ключей, так как они передаются в зашифрованном виде.
- Обмен начальными сообщениями: первый участник отправляет инициализирующее сообщение, содержащее его одноразовый ключ и идентификатор.
- Синхронизация храповика: после получения ответа обе стороны вычисляют общий секрет и запускают цепочку ключей для каждого последующего сообщения.
- Шифрование и дешифрование: каждое сообщение шифруется с использованием симметричного ключа, полученного из текущей цепочки. После отправки или получения ключ обновляется.
Megolm (протокол для групповых сообщений)
Megolm предназначен для шифрования сообщений в групповых чатах, где количество участников может достигать сотен и тысяч. В отличие от Olm, он не использует индивидуальные храповики для каждого участника, что снижает вычислительную нагрузку и объём передаваемых данных.
Основные принципы работы Megolm:
- Групповой сессионный ключ: один симметричный ключ (outbound key) используется для шифрования всех сообщений, отправляемых в группу. Этот ключ периодически обновляется (например, каждые 100 сообщений или по таймеру).
- Распространение ключа: каждый участник группы получает копию группового ключа, зашифрованную с помощью своего индивидуального Olm-ключа. Таким образом, сервер не может прочитать содержимое групповых сообщений.
- Прямой секрет: при обновлении группового ключа старый ключ уничтожается, что предотвращает расшифровку новых сообщений, если старый ключ был скомпрометирован.
- Защита от повторной атаки: каждое сообщение содержит уникальный идентификатор (nonce) и проверяется на дубликаты.
Megolm не обеспечивает прямой секрет для всех участников одновременно: если злоумышленник получает текущий групповой ключ, он может расшифровать все сообщения, отправленные до его обновления. Однако после обновления ключа доступ к новым сообщениям теряется.
Криптографические примитивы
Обе библиотеки используют проверенные и стандартизированные криптографические алгоритмы:
- Асимметричное шифрование: Curve25519 (X25519) для обмена ключами и Ed25519 для цифровых подписей.
- Симметричное шифрование: AES-256 в режиме CBC (Cipher Block Chaining) с HMAC-SHA-256 для аутентификации сообщений.
- Хеширование: SHA-256.
- Генерация случайных чисел: используется криптостойкий генератор псевдослучайных чисел (CSPRNG) операционной системы.
Применение
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 →