[Перевод] Объяснение протокола SRTP

twf1hharr7m5wmd7n3-4slyrigw.jpeg


Протокол 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, но есть и другие разновидности.

pvn4nafkv0r0mgsi4ortt-y98_a.png


Стек 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 и сквозным шифрованиями в двух раздельных, но родственных контекстах. Мы обязательно расскажем об этом в следующих постах!

© Habrahabr.ru