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 →