ZRTP — Википедия
ZRTP — криптографический протокол согласования ключей шифрования, используемый в системах передачи голоса по IP-сетям (VoIP). ZRTP описывает метод получения ключей по алгоритму Диффи — Хелмана для организации Secure Real-time Transport Protocol (SRTP). ZRTP осуществляет согласование ключей в том же потоке RTP, по которому установлена аудио/видео связь, то есть не требует отдельного канала связи. Разработан Филипом Циммерманом (Phil Zimmermann, автор Pretty Good Privacy), Джоном Калласом (Jon Callas) и Аланом Джонстоном (Alan Johnston) в 2006 году. Описание протокола было подано в IETF 5-го марта 2006.
Описание
[править | править код]ZRTP предлагается как способ согласования ключей шифрования с использованием метода Диффи — Хеллмана через медиа поток, устанавливаемый протоколом RTP (Real-time Transport Protocol), который образуется после инициализации вызова, используя любой тип сигнализации, например — Session Initiation Protocol (SIP). Во время посыла звонка создаётся публичный ИД, используемый при создании ключей, которыми будет шифроваться медиа поток разговора. Таким образом ключ действителен только в течение одного разговора, образуя таким образом сессию Secure RTP (SRTP). При разрыве соединения ключ и весь криптографический контекст уничтожается, что обеспечивает совершенную прямую секретность (PFS). Таким образом существует потенциал встраивания этого механизма в уже существующие программные VoIP программные продукты, шлюзы и ИП телефоны.
Протокол не требует заранее сгенерированных ключей, или поддержки инфраструктуры обмена ключей (PKI), или центра сертификации (СА). Это избавляет от сложностей создания структуры авторизации, основанной на доверенной поддержке, которая, например, применяется в шифровании SSL. Главной целью организации шифроканала, будь то голосовая сессия, или https соединение с интернет-банком — избежать возможности присутствия Человека_посередине (man in the middle), обеспечивая единую криптозащиту между любыми двумя точками в мире ИП.
ZRTP может теоретически применяться совместно с любыми сигнальными протоколами, использующими RTP для передачи медиа потока, включая SIP, H.323, SCCP, MGCP Unistim и Jingle, так как в теории ZRTP не зависит от сигнализации, осуществляя обмен ключей в медиа сессии RTP. Таким образом ZRTP может стать открытым стандартом де-факто в мире IP-телефонии.
Аутентификация
[править | править код]SAS
[править | править код]Сам по себе алгоритм обмена ключами Диффи — Хелмана не может обеспечить защиту от присутствия человека посередине (man in the middle). Для аутентификации ZRTP использует Short Authentication String (SAS) "короткую строку аутентификации", являющуюся сокращённым представлением криптографического хеша полученных ключей Диффи — Хелмана. Значения SAS вычисляются на каждой стороне соединения, абоненты передают их друг другу голосом для сверки. Если значения не совпали, то с большой уверенностью можно предположить присутствие Человека_посередине. Использование алгоритма Диффи — Хелмана даёт потенциальному Человеку_посередине всего одну попытку сгенерировать правильную SAS при попытке атаки. Так как SAS получается из старших 32 битов хеша и имеет две формы представления (16-битную B256 в виде пары слов из списка PGP, и 20-битную B32 в виде четырёх символов), она является очень короткой, вероятность необнаружения атаки при использовании SAS в формате B256 равна 1/65536. Применение SAS в формате B32 понижает вероятность необнаружения атаки в 16 раз (по сравнению с B256), до 1/1048576.
Непрерывность ключевого материала
[править | править код]Вторым уровнем защиты ZRTP от атак "человек посередине" является непрерывность ключевого материала. Хеш ключевой информации предыдущего вызова подмешивается к параметрам алгоритма Диффи - Хеллмана при следующем вызове (между этими же абонентами), что придаёт протоколу ZRTP сходство с SSH. Если "человека посередине" не было при первом вызове, он исключается из всех последующих.
Открытый стандарт
[править | править код]- Софт-клиент Twinkle использует GNU ccRTP и проект GNU ZRTP для использования ZRTP в разработках. Все перечисленные пакеты поддерживают открытую лицензию GPL.
- Jitsi в настоящее время имеет поддержку ZRTP с использованием внешней библиотеки ZRTP4J lib.
- PJSIP — кроссплатформенный стек для open source разработок в области VoIP, ожидается его выход с полной поддержкой ZRTP в первом квартале 2009 года. Заявлена поддержка в Linux, Windows, OSX, Symbian, Windows Mobile.
- PhonerLite - ZRTP библиотека собственной разработки.
- Поддержка ZRTP может быть экспериментально добавлена в Asterisk с помощью набора патчей, разработанных в рамках проекта Zfone. При этом для работы протокола используется libZRTP.
- Поддержка ZRTP была добавлена в основной код FreeSWITCH c 05 апреля 2012
Коммерческое использование
[править | править код]- Авторская разработка самого Филипа Циммермана — Zfone, доступный для Mac OS X, Windows, и Linux. Бесплатна в течение бета-тестирования, но планируется в дальнейшем распространение только коммерческих небесплатных копий, уже демонстрировалась в Москве Филипом Циммерманом.
- KHAMSA SA в качестве PrivateGSM — первое внедрение ZRTP по GSM (без использования VoIP) для платформы Symbian OS, соответственно — только для смартфонов. Дополнительные расширения ZRTP/S позволяют расширить применение ZRTP в сетях ISDN, ТФОП и спутниковой телефонии. Использует библиотеку libZRTP разработанную Циммерманом.
- UM Labs выпустила шлюз с SIP Security Controller, который обеспечивает безопасные зашифрованные соединения между устройствами, поддерживающими ZRTP, сетями VoIP с коммерческими или бесплатными ИП-АТС, которые не поддерживают ZRTP или другую шифрозащиту.
- M5T ZRTP SAFE — отдельная независимая разработка стека ZRTP.