Хочу поделится небольшим мануалом по активации ZRTP на Freeswitch. ZRTP — криптографический протокол согласования ключей шифрования, используемый в системах передачи голоса по IP-сетям (VoIP). ZRTP описывает метод получения ключей по алгоритму Диффи — Хелмана для организации Secure Real-time Transport Protocol (SRTP). Преимущество ZRTP над SRTP (SDES) в том что для шифрования трафика используется динамически генерируемые ключи и они каждый раз меняются.
Для начала соберем Freeswitch с поддержкой ZRTP. Для этого зайдем в каталог с исходниками и выполним следующие команды:
| 1 2 3 4 5 | git pull ./bootstrap.sh ./configure --enable-zrtp make make install | 
Далее после установки идем в файл /usr/local/freeswitch/conf/autoload_configs/switch.conf.xml и прописываем там:
| 1 | <param name="rtp-enable-zrtp" value="true"/> | 
Обязательно нужно рестартануть сервис Freeswitch. Все готово.
Проверяем на примере софтфона Blink. В настройках аккаунта в разделе Media опцию RTP Options выбираем в ZRTP.
Далее открываем консоль Freeswitch и пробуем делать вызов. Должны увидеть похожее на это:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 2009-05-22 23:12:57 [DEBUG] switch_rtp.c:1037 switch_rtp_create() Starting timer [soft] 1 bytes per 10ms 2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]: START SESSION INITIALIZATION. sID=44. 2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]: ZID=343865343930656366336534. 2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]: Loading User's profile: 2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]:    allowclear: ON 2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]:    autosecure: ON 2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]:  disclose_bit: OFF 2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]:           TTL: 4294967295 2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]:   SAS schemes:  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger() B256  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger() B32 2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]:      Ciphers:  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger() AES3  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger() AES1  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]:    PK schemes:  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger() DH3k  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger() DH2k  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger() Mult  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]:           ATL:  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger() HS32  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]:       Hashes:  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger() S256  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  2009-05-22 23:12:57 [DEBUG] switch_rtp.c:472 zrtp_logger()  [   zrtp main]: Session initialization - DONE. sID=44. | 
Если во время звонка такие записи есть, то все ок, наш голос шифруется и не доступен для прослушивания.

