![](https://habrastorage.org/webt/ki/43/tn/ki43tnkbl7fzhkylgfjqe7hqpzk.jpeg)
Новый участник присоединился к конференции, но ещё не получил ключ шифрования
Свободное приложение для видеоконференций Jitsi Meet реализовало сквозное шифрование (end-to-end), где обмен ключами происходит между участниками видеоконференции без участия сервера, как сейчас.
Публичное тестирование здесь.
Замечания и предложения принимаются в репозитории E2EEContext.js.
В настоящее время шифрование видеопотоков происходит с участием видеосервера Jitsu Videobridge (JVB), который можно установить и внутри компании.
Процесс шифрования реализован на интерфейсе WebRTC API под названием Insertable Streams, который позволяет приложениям добавлять произвольные шаги обработки данных. Здесь этими шагами являются обмен ключами и активация криптошифров в пиринговых соединениях RTCPeerConnections. Создатели Insertable Streams говорят, что реализация пирингового шифрования изначально рассматривалась как основное применение этого интерфейса.
Согласно техническому описанию, ключ берётся из url-фрагмента (после знака решётки). «В отличие от параметров запроса, этот фрагмент URL не отправляется на сервер, так что это подходящее место для него, — пишут разработчики. — Для прослушивания изменений в свойстве ключа мы используем событие
window.location.onhashchange
. Важно отметить, что этот ключ не проходит через сервер».Из этого ключа вычисляется 128-битный ключ с помощью функции PBKDF2. В качестве соли «в этом поколении ключей» используется название комнаты (конференции). «Это немного слабовато, но нам нужно начать с информации, которая одинакова для всех участников, поэтому мы пока не можем использовать правильную случайную соль, — признаются разработчики. — Мы выводим один и тот же ключ и используем его для шифрования и дешифрования видеопотока от всех участников. Сейчас мы работаем над включением в него данных MUC отправителя (Multi-User-Chatroom), чтобы переключиться на отдельные ключи для каждого участника, к чему мы хотим перейти в конце концов. Мы планируем менять ключ всякий раз, когда участник присоединяется или уходит. Однако нам нужна сигнализация сквозного шифрования для обмена этими ключами, поэтому мы пока этого не делаем».
Таким образом, e2e-шифрование пока не выкатывают в продакшн, потому что обмен ключами ещё не доделали до конца. Но есть план, как его реализовать, и сейчас сделаны первые шаги.
Непосредственно процедура шифрования кадров реализована на Webcrypto API с использованием AES-GCM, то есть в режиме счётчика с аутентификацией Галуа (CGM), где номер блока шифруется блочным алгоритмом AES.
AES-GCM нуждается в 96-битном векторе инициализации, который строится на основе SSRC, временной метки RTP и счётчика кадров, аналогично SRTP IV с AES-GCM.
Этот IV отправляется вместе с пакетом, добавляя к нему лишние 12 байт. Длина тега GCM по умолчанию составляет 128 бит или 16 байт. Для видео эти накладные расходы не представляют заметного оверхеда, но для аудио (где фреймы Opus намного меньше) сейчас рассматривается возможность реализации более коротких тегов аутентификации.
Первые несколько байтов пакета специально не шифруются, чтобы кодировщик немного лучше понимал кадр и генерировал более забавный мусор, как на КДПВ. То есть этот мусор немного зависит от содержимого фреймов.
Ошибки дешифровки обрабатываются путём простой пересылки кадра в декодер.
Как уже сообщалось на Хабре, Jitsi Meet — это одна из немногих опенсорсных программ для видеоконференций с реализацией сильного шифрования.
Некоторые функции Jitsi Meet:
- До 75 участников (до 35 при сохранении высокого качества связи)
- Публичные и приватные чаты
- Размытие фона за человеком (функция пока в бета-версии)
- Интеграция со Slack, Google Calendar и Office 365
Пользователи могут делиться своим рабочим столом или проводить презентации. Если вы хотите выступить с публичными лекциями, можно транслировать видеоконференцию на YouTube. И наоборот, можно смотреть видео с YouTube всем вместе в чате Jitsi. Документы можно совместно редактировать в Etherpad, также имеется соединение для тех, кто хочет дозвониться по телефону.
У участников конференции есть возможность виртуально поднять руку с помощью собственной кнопки — сигнализировать, что вы хотите получить слово следующим. Существует встроенный чат для обмена текстовыми сообщениями, а также функция записи текущего обсуждения.
Полезные ссылки
- Публичные серверы Jitsi Meet
- Руководство по установке Jitsi на Linux-сервер
- Установка Jitsi Meet на Raspberry Pi 3
- Форумы Jitsi Community
- Репозиторий Jitsi на GitHub
Ранее также отмечалось, что в данный момент у веб-клиента Jitsi небольшие проблемы при работе в Firefox, потому что этот браузер не очень хорошо поддерживает simulcast (одновременная трансляция на несколько узлов). В результате, если к конференции присоединяется пользователь на Firefox, у всех остальных резко возрастает нагрузка на CPU и расход батареи. Mozilla обещает исправить ситуацию в ближайшее время.
P. S. Jitsi Meet рассматривается как альтернатива программе Zoom, у которой очень большие проблемы с приватностью. В программе обнаружено большое количество уязвимостей и сомнительных функций, в том числе автоматическая установка на компьютер без участия пользователя, автоматическое добавление в контакты посторонних лиц, удалённое получение рута под macOS, автоматическое преобразования путей к файлам в кликабельные ссылки (для получения хэшей NetNTLM от жертвы под Windows) и др. Electronic Privacy Information Center (EPIC) в прошлом году предупреждал, что «Zoom умышленно разработан для обхода настроек безопасности браузера и удалённого включения веб-камеры пользователя без его ведома или согласия».