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

RingRTC

RingRTC — это проприетарная библиотека с открытым исходным кодом, предназначенная для организации аудио- и видеозвонков, а также передачи сообщений в реальном времени (Real-Time Communication, RTC) в приложениях. Библиотека разработана компанией Signal Messenger LLC и является основой для реализации функций голосовых и видеозвонков в мессенджере Signal. RingRTC построена на базе технологии WebRTC (Web Real-Time Communication), но адаптирована для использования в нативных мобильных и десктопных приложениях, а не в веб-браузерах. Ключевой особенностью RingRTC является интеграция с протоколом сквозного шифрования Signal, что обеспечивает конфиденциальность передаваемых данных.

История

Разработка RingRTC началась в 2017 году как часть усилий Signal Messenger LLC по созданию надёжного и безопасного решения для голосовых и видеозвонков. До этого Signal использовал сторонние библиотеки, такие как libjingle (от Google) и собственные наработки, но с ростом популярности приложения возникла необходимость в унифицированном, поддерживаемом и оптимизированном решении. Первая публичная версия RingRTC была выпущена в 2018 году. Исходный код библиотеки был опубликован под лицензией AGPL-3.0, что позволяет сообществу изучать, модифицировать и распространять её, но требует открытия производных проектов под той же лицензией.

В 2020 году, после того как мессенджер Signal начал активно внедрять групповые звонки, RingRTC была значительно доработана: добавлена поддержка многоточечных конференций (SFU — Selective Forwarding Unit), улучшена обработка потери пакетов и адаптация к различным сетевым условиям. В 2022 году библиотека была интегрирована в другие проекты, например, в мессенджер Session (на базе блокчейна Oxen), который использует RingRTC для обеспечения анонимных звонков.

Архитектура и устройство

RingRTC состоит из двух основных компонентов: клиентской части, написанной на Rust, и серверной части, которая может быть реализована на различных языках. Клиентская библиотека отвечает за захват аудио и видео с устройств, кодирование, передачу через сеть и декодирование. Серверная часть, как правило, представляет собой SFU-сервер, который ретранслирует медиапотоки между участниками звонка, оптимизируя трафик.

Клиентская часть

Клиентская часть RingRTC написана на языке Rust, что обеспечивает высокую производительность и безопасность памяти. Она включает следующие модули:

  • Audio Engine: управление аудиокодеками (Opus), эхоподавление (AEC), шумоподавление (NS), автоматическая регулировка усиления (AGC).
  • Video Engine: работа с видеокодеками (VP8, H.264), адаптивное изменение битрейта и разрешения (SVC — Scalable Video Coding).
  • Transport Layer: реализация протоколов ICE (Interactive Connectivity Establishment), STUN, TURN для установления соединения через NAT и файрволы.
  • Encryption Layer: интеграция с протоколом Signal (Double Ratchet Algorithm) для сквозного шифрования медиапотоков.

Серверная часть

Серверная часть RingRTC (SFU) обычно реализуется на C++ или Go. Она принимает медиапотоки от каждого участника и ретранслирует их остальным, но не расшифровывает содержимое, так как шифрование происходит на стороне клиента. SFU может быть развёрнут как на собственных серверах, так и в облачных средах. В Signal используется собственная инфраструктура серверов, расположенных в различных странах.

Ключевые особенности

RingRTC отличается от стандартных реализаций WebRTC несколькими важными характеристиками:

  • Сквозное шифрование: все медиапотоки и сообщения шифруются на устройстве отправителя и расшифровываются только на устройстве получателя. Сервер не имеет доступа к содержимому звонка.
  • Адаптация к сети: библиотека динамически изменяет битрейт и разрешение видео в зависимости от пропускной способности канала, минимизируя задержки и потери качества.
  • Поддержка групповых звонков: RingRTC поддерживает конференции до 40 участников (в Signal) с использованием SFU, что снижает нагрузку на клиентские устройства.
  • Открытый исходный код: лицензия AGPL-3.0 позволяет любому разработчику изучать, модифицировать и использовать библиотеку в своих проектах при условии открытия изменений.
  • Кроссплатформенность: библиотека может быть интегрирована в приложения для iOS, Android, Windows, macOS и Linux.

Применение

Основное применение RingRTC — это обеспечение голосовых и видеозвонков в мессенджере Signal. Однако библиотека также используется в других проектах, ориентированных на приватность и безопасность:

  • Signal: флагманский продукт, где RingRTC является единственным механизмом для звонков.
  • Session: децентрализованный мессенджер, использующий RingRTC для анонимных звонков без необходимости регистрации по номеру телефона.
  • Molly: форк Signal для iOS с дополнительными функциями безопасности.
  • Snikket: проект по созданию частных серверов для общения, где RingRTC используется для звонков.

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

Несмотря на высокий уровень безопасности, RingRTC имеет ряд ограничений:

  • Зависимость от серверов Signal: хотя библиотека открыта, для работы групповых звонков требуется SFU-сервер, который Signal предоставляет только для своего приложения. Сторонние разработчики должны разворачивать собственные серверы, что требует технических знаний и ресурсов.
  • Ограниченная поддержка кодеков: RingRTC поддерживает только VP8 и H.264 для видео, что может быть недостаточно для профессиональных приложений, требующих H.265 или AV1.
  • Отсутствие записи звонков: библиотека не предоставляет встроенных средств для записи аудио или видео, что может быть минусом для корпоративных решений.
  • Проблемы с совместимостью: RingRTC не совместима с обычными WebRTC-клиентами (браузерами), что ограничивает её использование в веб-среде.

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

  • RingRTC является одной из немногих библиотек RTC, которая полностью исключает возможность прослушивания звонков оператором сервиса, так как шифрование происходит до передачи данных на сервер.
  • В 2021 году Signal объявил, что RingRTC обрабатывает более 1 миллиарда минут звонков в месяц.
  • Исходный код RingRTC регулярно проверяется независимыми аудиторами безопасности, включая компанию NCC Group.

Источники

  • Официальный репозиторий RingRTC на GitHub (Signal Messenger LLC)
  • Документация Signal Messenger по архитектуре звонков
  • Статья «How Signal’s end-to-end encryption works» (Signal Blog)
  • Анализ безопасности RingRTC от NCC Group (2020)
  • Сравнительный обзор библиотек RTC (Open WebRTC Toolkit, Jitsi, RingRTC)

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

На главную BFOmetr →