Протокол SRTP (Secure Real-time Transport Protocol) это система безопасности, которая расширяет протокол RTP (Real-time Transport Protocol) набором защитных механизмов.
WebRTC использует DTLS-SRTP для шифрования, аутентификации и целостности сообщений, а также для защиты от атак повторного воспроизведения. Это дает конфиденциальность за счет шифрования RTP-нагрузки и проверки подлинности. SRTP это один из компонентов для безопасности, он очень удобен для разработчиков, которые ищут надежное и безопасное API. Но что такое SRTP и как оно работает?
Что такое SRTP?
SRTP повышает безопасность RTP. Протокол был опубликован организацией IETF (Internet Engineering Task Force) в стандарте RFC 3711, в марте 2004.
SRTP обеспечивает конфиденциальность за счет шифрования RTP-нагрузки, не включая заголовки RTP. Также поддерживается проверка подлинности, которая широко используется как защитный механизм в RTP. В то время как SRTP можно использовать во всей его полноте, также возможно отключать/включать определенные функции. Главный затык в SRTP – это управление ключами, так как вариантов много: DTLS-SRTP, MIKEY в SIP, SDES (Security Description) в SDP, ZRTP и пр.
Шифрование
SRTP использует AES (Advanced Encryption Standard) как шифр по умолчанию. В AES два режима шифрования: режим счетчика (Segmented Integer Counter Mode) и режим f8. Обычно используется режим счетчика – он критично важен при передаче трафика по ненадежной сети с потенциальной потерей пакетов. Режим f8 используется в мобильных 3G-сетях и является вариантом режима обратной связи (Output Feedback), в котором расшифровка происходит так же, как и шифрование.
Еще SRTP позволяет разработчикам отключать шифрование с помощью нулевого шифра. Нулевой шифр не делает шифрование, он копирует входящий поток напрямую в исходящий, без изменений.
В WebRTC не рекомендуется использовать нулевой шифр, так как сохранность данных довольно важна для конечных пользователей. В действительности, валидные реализации WebRTC ДОЛЖНЫ поддерживать шифрование, на данный момент с DTLS-SRTP.
Целостность
Чтобы сохранить целостность сообщений в SRTP, на основание содержимого и части пакетных заголовков с помощью алгоритма создается аутентификационная метка, которая затем добавляется в RTP-пакет. Эта метка используется для валидации содержимого полезной нагрузки, что, в свою очередь, предотвращает фальсификацию данных.
Аутентификация – это также основа для отражения атак повторного доступа. Для их блокировки каждому пакету назначается последовательный индекс. Новое сообщение будет принято только в том случае, если его индекс – следующий по порядку и еще не был получен. Индексы эффективны благодаря целостности, описанной чуть выше; без нее есть вероятность подмены индексов.
Хотя в WebRTC в основном используется алгоритм HMAC-SHA1 для целостности в SRTP, строго рекомендуется выбирать наборы алгоритмов с PFS (Perfect Forward Secrecy) поверх non-PFS и AEAD (Authenticated Encryption with Associated Data) поверх non-AEAD. Последние реализации WebRTC используют DTLS v1.2 c набором алгоритмов TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256.
Ключи
SRTP использует функцию формирования ключа (KDF) для создания ключей на основе мастер-ключа. Протокол управления ключами создает все ключи в сессии с помощью мастер-ключа. За счет того, что у каждой сессии свой уникальный ключ, все сессии защищены. Поэтому, если одна сессия была скомпрометирована, то остальные по-прежнему под защитой. Протокол управления ключами используется для мастер-ключа – обычно это ZRTP или MIKEY, но есть и другие разновидности.
Стек RTP IP
Потоки в WebRTC защищены одним из двух протоколов: SRTP или DTLS (Datagram Transport Layer Security). DTLS – для шифрования потоков данных, SRTP – для медиапотоков. Тем не менее, для обмена ключами в SRTP используют DTLS-SRTP, чтобы определять атаки посредника. Это детально раскрыто в документах IETF: WebRTC security и security arch.
SRTCP (Secure Real-time Transport Control Protocol)
У SRTP есть родственный протокол – SRTCP (Secure Real-time Transport Control Protocol). SRTCP расширяет RTCP (Real-time Transport Control Protocol) теми же функциями, что SRTP расширяет RTP, включая шифрование и аутентификацию. Подобно SRTP, почти все функции безопасности SRTCP можно отключить, кроме аутентификации сообщений – оно необходима для SRTCP.
Подводные камни SRTP
SRTP шифрует полезную нагрузку RTP-пакетов, но не расширение заголовков. Так появляется уязвимость, так как расширение заголовка в RTP-пакете может содержать важную информацию, например, уровни звука каждого пакета в медиапотоке. Потенциально это может быть знаком для злоумышленника, что в сети происходит общение двух людей – приватность беседы может быть нарушена. Данное обстоятельство рассматривалось в документе IETF Request for Comments: 6904, который требует от всех последующих реализаций SRTP шифровать расширения заголовков.
В некоторых случаях – например, конференция со множеством участников – может быть необходим посредник в виде SFM (Selective Forwarding Mixer), чтобы оптимизировать RTP-параметры во время проброса потоков. Такой посредник нарушает принцип сквозного шифрования, которое используется в peer-to-peer системах; иными словами, конечные устройства должны “доверять” еще одному участнику. Для обхода этого ограничения, Privacy Enhanced RTP Conferencing (PERC, одна из рабочих групп IETF – прим.переводчика) работает над решениями вроде процедур двойного шифрования в SRTP. PERC дают гарантии, подкрепленные hop-by-hop и сквозным шифрованиями в двух раздельных, но родственных контекстах. Мы обязательно расскажем об этом в следующих постах!