суббота, 4 августа 2012 г.

Проблема организации голосовых конференций в системах защищенной связи.


В большинстве распространенных VoIP решений трафик пропускается через сервер и шифрование осуществляется от клиента до сервера, далее присутствует на сервере в открытом виде и передается на другого клиента. Или же шифрование отсутствует вовсе.

При такой архитектуре сервер идеальное место для организации конференции. Работа сервера состоит в простой пересылке всех пакетов, приходящих от подключенных к конференции клиентов на других участников конференции, а для речевых пакетов, еще микширование голосовых пакетов от всех участников на сервере. С другой стороны сервер становится идеальным место для перехвата.

Политика сервиса Cryptia.com, состоит в том, что мы не стремимся хранить у себя конфиденциальные данные клиентов (или иметь к ней доступ). Все соединения между клиентами используют сквозное шифрование от клиента до клиента, без возможности расшифровки на сервере, а в 90% случаев они и проходят от клиента до клиента напрямую, минуя наши сервера.  Однако это с другой стороны делает невозможным организацию конференций на серверах, используя описанную выше технологию.

Описанное противоречие и есть причина того, что в сервисе Cryptia до сих пор не реализована функция конференции.

Для решения проблемы рассматривался вариант использования схемы согласования сеансового ключа по алгоритму Диффи-Хеллмана  для большого количества клиентов (> 2).  В этом случае сервер не расшифровывает голосовые пакеты и не может микшировать звук от разных клиентов, а только пересылает зашифрованные пакеты между клиентами. Клиент сам смешивает голосовой трафик на своем компьютере, но входящий трафик каждого участника конференции возрастает пропорционально количеству участников. Например, если в конференции участвуют 4 человека, то сервер будет пересылать на каждого участника пакеты от 3-х других и входящий трафик КАЖДОГО участника возрастет в 3 раза (относительно простого голосового сеанса).  Исходящий трафик останется без изменений. Возросший в 3 раза голосовой трафик может привести к тому, что один из клиентов может просто перестать работать.

Кроме того, для формирования сеансового ключа для всех участников конференции, требуется, чтобы все имели цифровые подписи друг друга. А как быть, если я хочу организовать конференцию с двумя людьми, которые пока не знакомы между собой, и соответственно, не имеют сертификатов друг друга для цифровой подписи?



Мы приняли компромиссное решение:
За функционирование конференции отвечает инициатор. Его клиентская программа выполняет роль  сервера конференции. Инициатор имеет защищенное соединение с каждым из участников  и расшифровывает пакеты, смешивает голосовые потоки и пересылает их другим.
Проблема трафика решается так: Трафик инициатора конференции возрастает пропорционально количеству участников, соответственно инициатор должен находиться в точке с хорошим Интернет каналом (не телефон с 3G). У остальных участников трафик не возрастает.  Проблема с обменом ключами в этом случае также решается – дополнительный обмен не требуется. Инициатор конференции расшифровывает все клиентские пакеты и пересылает их другим участникам. Разумеется, инициатор имеет возможность все видеть и, возможно, регистрировать, но он эту возможность имел и так (как и любой участник этой самой конференции).

Этот функционал будет включен в один из следующих релизов клиентской части продукта Cryptia.

2 комментария: