Диагностика ошибок шифрования SRTP и обмена ключами SDES в VoIP
- Звонок по TLS устанавливается, но при переходе к разговору наступает полная тишина.
- Сброс соединения с ошибкой
488 Not Acceptable Hereпри попытке согласования шифрованного медиа. - В логах сервера фиксируются ошибки
SRTP unprotect failed: authentication failureилиreplay check failed. - Односторонний звук из-за отказа одного из шлюзов расшифровывать SRTP-пакеты.
1. Анализ криптографического атрибута a=crypto в SDP
Пример строки SDES (RFC 4568) в дампе сигнализации:
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:W3UZsBg/A182ODUpNV2Sbgi4W4tVdgf7cqmsVUfMКлючевые поля:
- Tag (1): порядковый номер криптографического профиля.
- Crypto-Suite: алгоритм шифрования и аутентификации пакетов (например,
AES_CM_128_HMAC_SHA1_80илиAEAD_AES_256_GCM). - Key-Params (inline:...): мастер-ключ и соль (base64 encoded).
2. Причины ошибок расшифровки SRTP
- Несовпадение Crypto Suite: одна сторона поддерживает только 80-битный тег HMAC (SHA1_80), а вторая предлагает 32-битный (SHA1_32).
- Передача SDES по открытому SIP (Security Risk): многие системы безопасности запрещают передачу открытых мастер-ключей в SDP, если сигнальный трафик не защищен TLS.
- Рассинхронизация счетчика Rollover Counter (ROC): при резком скачке RTP sequence numbers (потери сети) сбивается индекс дешифрования.
3. Настройка SRTP в Asterisk PJSIP
# pjsip.conf
[endpoint-secure]
type=endpoint
media_encryption=sdes
# Требовать обязательное шифрование (вызов будет отклонен при попытке RTP):
media_encryption_optimistic=no
security_mechanisms=tls4. Альтернатива: DTLS-SRTP (для WebRTC)
Для браузерных звонков (WebRTC) вместо SDES используется согласование ключей по протоколу DTLS (атрибут a=fingerprint).
Частые вопросы (FAQ)
Почему передача ключей SDES по незащищенному SIP UDP считается уязвимостью?
Мастер-ключ шифрования передается открытым текстом внутри SDP-тела. Любой злоумышленник, перехвативший дамп SIP INVITE, мгновенно расшифрует весь разговор SRTP.
В чем разница между AES_CM_128_HMAC_SHA1_80 и SHA1_32?
Разница заключается в длине тега аутентификации пакета: 80 бит (10 байт) обеспечивает максимальную криптостойкость, а 32 бита (4 байта) экономит полосу пропускания, но менее надежен.
Что такое Rollover Counter (ROC) в протоколе SRTP?
Это 32-битный счетчик переполнения 16-битного стандартного поля Sequence Number RTP. Он позволяет корректно шифровать потоки из более чем 65536 пакетов без смены ключа.
Почему при включенном SRTP в Wireshark отображается шум вместо звука?
Payload RTP-пакетов зашифрован алгоритмом AES. Чтобы прослушать аудио в Wireshark, необходимо скопировать строку a=crypto из SDP и добавить ее в настройки протокола SRTP в Wireshark.