libsrtp
Библиотека для реализации протокола SRTP (Secure Real-time Transport Protocol) и SRTCP (Secure Real-time Transport Control Protocol). Она предоставляет функции для шифрования, аутентификации и защиты целостности медиапотоков в реальном времени, используемых в VoIP, видеоконференциях и других приложениях потоковой передачи мультимедиа. Библиотека реализует стандарты RFC 3711 (SRTP) и RFC 6188 (шифрование для RTP).
Особенности
- полная реализация протоколов SRTP и SRTCP;
- поддержка различных алгоритмов шифрования (AES-128, AES-256) и аутентификации (HMAC-SHA1);
- защита от replay-атак и управление криптографическим контекстом;
- совместимость с протоколами RTP/RTCP и поддержка различных профилей.
Основные компоненты
libsrtp состоит из нескольких модулей, обеспечивающих криптографическую защиту RTP/RTCP-трафика и управление сессиями безопасности. (подробнее с документацией можно ознакомиться здесь).
Управление криптографическими сессиями
Библиотека использует понятие криптографического контекста (session) для управления ключами и параметрами безопасности для SRTP-потока. Каждый контекст содержит ключи шифрования, параметры аутентификации и счетчики пакетов.
Основные функции управления сессиями:
srtp_init()— инициализация библиотеки;srtp_create()— создание SRTP-сессии с заданными параметрами;srtp_add_stream()— добавление потока к существующей сессии;srtp_remove_stream()— удаление потока из сессии;srtp_dealloc()— освобождение ресурсов сессии;srtp_shutdown()— деинициализация библиотеки.
Шифрование и дешифрование пакетов
libsrtp предоставляет функции для защиты (шифрование и аутентификация) и проверки (дешифрование и проверка целостности) RTP/RTCP-пакетов. Библиотека обрабатывает заголовки и полезную нагрузку пакетов в соответствии со стандартами SRTP.
Основные функции обработки пакетов:
srtp_protect()— защита RTP-пакета (шифрование и добавление аутентификационного тега);srtp_unprotect()— проверка и дешифрование RTP-пакета;srtp_protect_rtcp()— защита RTCP-пакета;srtp_unprotect_rtcp()— проверка и дешифрование RTCP-пакета;- Автоматическое обновление ключей на основе счетчиков пакетов.
Алгоритмы шифрования и аутентификации
Библиотека поддерживает различные криптографические алгоритмы, определённые в профилях SRTP. Эти алгоритмы могут быть выбраны в зависимости от требований безопасности и производительности.
Поддерживаемые алгоритмы:
- Шифрование: AES-128 (CTR и ICM режимы), AES-256, NULL-шифрование (без шифрования);
- Аутентификация: HMAC-SHA1 (80-битный и 32-битный теги), NULL-аутентификация;
- Профили SRTP: AES128_CM_HMAC_SHA1_80 (по умолчанию), AES128_CM_HMAC_SHA1_32, AES256_CM_HMAC_SHA1_80, AES256_CM_HMAC_SHA1_32.
Управление ключами и безопасность
libsrtp включает механизмы для управления ключами, включая генерацию, распределение и обновление ключей. Библиотека поддерживает мастер-ключи и производные ключи для шифрования и аутентификации.
Функции управления ключами:
srtp_update()— обновление ключей сессии (например, при достижении лимита пакетов);srtp_set_user_data()иsrtp_get_user_data()— хранение пользовательских данных в сессии;- Поддержка внешнего управления ключами через API;
- Генерация salt и ключей деривации на основе мастер-ключей.
Защита от replay-атак и контроль целостности
Библиотека реализует механизмы защиты от повторной передачи пакетов (replay-атаки) и обеспечивает контроль целостности данных через аутентификационные теги.
Механизмы безопасности:
- Защита от replay: проверка уникальности индекса пакета с использованием sliding window;
- Аутентификация: вычисление HMAC для заголовка и данных пакета;
- Проверка целостности: сравнение аутентификационных тегов на принимающей стороне;
- Управление лимитами: автоматическое прекращение использования ключей после определённого количества пакетов.
Работа с RTP-заголовками и расширениями
libsrtp корректно обрабатывает стандартные и расширенные заголовки RTP, сохраняя неизменными поля, необходимые для маршрутизации, и защищая только те части пакета, которые требуются по стандарту.
Особенности обработки заголовков:
- Защита только полезной нагрузки (payload) и некоторых расширений;
- Сохранение неизменными полей SSRC, timestamp, sequence number;
- Поддержка расширений RTP-заголовков (не зашифровываются, но могут быть аутентифицированы);
- Обработка маркера (marker bit) и типа полезной нагрузки (payload type).
Интеграция с VoIP и видеосистемами
libsrtp легко интегрируется с популярными VoIP- и видеосерверами, клиентами и библиотеками обработки мультимедиа, такими как Asterisk, WebRTC, SIP-стеков.
Точки интеграции:
- WebRTC: используется как часть стека безопасности для SRTP в WebRTC-соединениях;
- Asterisk/FreeSWITCH: защита медиапотоков в телефонии;
- SIP-клиенты: интеграция с библиотеками типа PJSIP, Sofia-SIP;
- Собственные медиа-серверы: для защиты потоков в системах видеонаблюдения и конференц-связи.