Онионфон представляет собой утилиту для госовой связи через сеть Tor и может быть использован в качестве голосовго плагина для TorChat. Звонки осуществляются на Onion адрес абонента (его скрытый сервис Tor HS). Получатель также устанавливает обратное Onion-соединение к скрытому сервису инициатора, пераллельно используются оба канала с периодическим перезапуском более медленного для уменьшения общей задержки в сети Tor.

 

Имеется возможность переключения на прямое UDP соединение (с проходом NAT) после установки соединения через Tor (Tor вместо SIP без выделенного сервера, регистрации и сбора метаданных на нем). Кроме того, Онионфон може устанавливать прямое UDP или TCP соединение с указанным IP-адресом или хостом и портом.

 

Онионфон использует собственный UDP/TCP протокол (не RTP), в котором только однобайтный заголовок передается в открытом виде, остальное содержимое пакетов зашифровано. Это обеспечивает сокрытие от некоторых DPI и позволяет обходить блокировки VOIP-трафика интернет-провайдерами.

 

Онионфон обеспечивает независимый слой шифрования "точка-точка" и использует современные криптографические примитивы: Диффи-Хеллманновский обмен ключами на эллиптической кривой 25519 и шифрование Keccak Sponge. При выполнении звонков через Tor последний защищает от MitM атаки. Кроме того, получатель может убедиться в соответствии Onion-адреса инициатора звонка заявленному (только с согласия инициатора) аналогично аутентификации в TorChat.

 

Дополнительно предусмотрена возможность выполнения мультифакторной аутентификации::

  • голосовой (биометрической);
  • с использованием предварительно согласованного пароля (с дополнительной возможностью скрытого и безопасного уведомления протоивоположной стороны о принуждении);
  • с использованием личных долговременных ключей, подписанных PGP.

 

Онионфон обеспечивает Совершенную Обратную Секретность (PFS) (генерирует "свежий" эфемеральный секрет для каждого звонка) и Полную Отрицаемость использования своих долговременных ключей и PGP абонентами (как в отношении факта участия в разговоре, так и в отношении его содержания): для первичного согласования ключей выполняется отрицаемый протокол, базирующийся на SKEME.

 

Онионфон включает множество встроенных голосовых кодеков (их C-код является частью проекта) от ультра-низко-битрейтных до относительно высококачественных. Полный список: MELPE-1200, MELP-2400, CODEC2-1300, CODEC2-3200, LPC10-2400, CELP4800, AMR-4750/12200+DTX, LPC-5600+VOCODER, G723-6400, G729-8000, GSM-HR-5600, GSM-FR-13200, GSM-EFR-12400, ILBC-13333, BV16-16000, OPUS-6000VBR, SILK-10000VBR, SPEEX-15200VBR+R. Некоторые из них свободны, некоторые покрыты различными лицензиями (смотрите региональное законодательство).

 

Дополнительно реализованы подавители шума (NPP7 и SPEEX) и автоматическая регулировка микрофона. Встроенный LPC вокодер дает возможность невосстановимо изменить голос на шепот, робот и т.п.

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

 

Имеется управляющий интерфейс (UI) в виде TCP-порта, использующего Telnet и WebSocket (HTML5 GUI + JavaScript через веб-браузер).

В будущем планируется создание кроссплатформенного клиента с графическим интерфейсом на Qt и с поддержкой TorChat + OninPhone + H.264 видео.

 

Проект Онионфона:

  • использует консольный стиль, не требует инсталляции; готовый бинарник может быть запущен с флешки или TrueCrypt контейнера и не оставляет никаких следов в системе;
  • код проекта полностью открыт, написан на чистом C на максимально низком уровне и тщательно комментирован;
  • исполняемые файлы статически линкованы, не требуют никаких дополнительных внешних библиотек и используют лишь необходимый минимум системных функций;
  • компилируется для Linux ОС (Debian, Ubuntu и др.) с помощью GCC или для Win32 OС (от Windows 98 до 8 и выше) с помощью MinGW. Планируется сборка под Android и альтернативная реализация в виде кросплатформенной библиотеки, представляющей минимально необходимое API для подключения Онионфона к другим приложениям на этапе их сборки.

I. Установка Онионфона:

Самый простой способ использовать Онионфон - в качестве VOIP плагина для TorChat:


  • Шаг 1: Поместите папку с файлами из пакета Онионфона в любое место на жестком диске, на флешку или в TrueCrypt-контейнер (последнее предпочтительно для безопасности).
  • Шаг 2: Отредактируйте конфигурационный файл Tor в составе TorChat: /torchat/bin/Tor/torrc.txt:
    непосредственно после строки
  • HiddenServicePort 11009 127.0.0.1:11009
    добавьте новую строку:
    HiddenServicePort 17447 127.0.0.1:17447
  • Шаг 3: Правым щелчком по иконке myself в списке контактов TorChat-а из меню скопируйте свой ID. Отредактируйте конфигурационный файл Онионфона conf.txt: укажите ваш онион-адрес, используя скопированный ID:
    Our_onion=gegelcy5fw7dsnsn
    После запуска Онионфон готов принимать входящие и выполнять исходящие звонки через сеть Tor.

II. Использование ключей :

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

 

Для работы с ключами используется консольная утилита addkey:

 

  • Шаг 1: Для создания новой ключевой пары выполните: ./addkey -Gname [-Yaccess] [options], где name - ваш идентификатор, access - ваш пароль, защищающий приватный ключ, и options - параметры, включаемые в публичный ключ для передачи другим участникам. Если опция -Y не используется, то приватный ключ будет сохранен в незашифрованном виде. В этом случае рекомендуется поместить папку с Онионфоном в защищенное хранилище (например, контейнер TrueCrypt). Дополнительная опция -Oour_onion_address удобна для представления своего Onion-адреса непосредственно в публичном ключе. При получении вашего ключа дополнительные опции будут автоматически сохранены в адресных книгах ваших абонентов.
    Таким образом, например, после запука в консоли:
    ./addkey -Galice -Y1234 -Or4kxspnzpnsel4fu
    в папке keys будут созданы файлы alice.sec (ваш приватный ключ, защищенный паролем 1234) и alice (ваш публичный ключ).
  • Шаг 2: Для подписывания публичного ключа откройте его как текст в любом редакторе и подпишите содержимое с помощью PGP. Подпись должна быть добавлена в текстовый файл публичного ключа. После подписывания ключа дальнейшее его редактрование не допускается, хотя переименовать файл можно.
  • Шаг 3: Перед использованием нового ключа необходимо добавить его в адресную книгу:
    ./addkey -Aalice
    Для использования ключа в качестве вашего постоянного отредактируйте конфигурационный файл Онионфона conf.txt, указав имя собственного ключа по умолчанию:
    Our_name=alice
  • После установки ключа по умолчанию в случае использования пароля, защищающего приватный ключ, необходимо сообщить его Онионфону в виде комнанды, например -Y1234. При использовании пароля эту команду необходимо будет выполнять каждій раз после запука Онионфона, иначе вы не сможете принимать входящие звонки, адресованные на ваше имя (хотя звонки от гостя к гостю возможны в любом случае).
  • Шаг 4: Теперь Вы можете отправлять ваш ключ другим пользователям. Для автоматической передачи ключа сначала установите неаутентифицированное соединение гость к гостю, используя команду -Oonion_address, и затем выполните команду -Kname, где name - ключ из вашей адресной книги (не обязательно свой), который вы хотите отправить (или -K без параметра, если Вы отправляете свой ключ, используемый по умолчанию). После успешной пересылки ключ будет автоматически добавлен в адресную книгу вашего абонента с минимальным уровнем доверия. После проверки PGP подписи (вручную) в файле ключа абонент может изменить уровень доверия путем редактирования параметра -L в соответствующей записи в файле адресной книги keys / contacts.txt, например:
    [alice] {FNrjEjGmlZtvKXzBQkNIDA==} #alice -Or4kxspnzpnsel4fu -L1
    Также можно передать ключ любым другим незащищенным путем (например, переслать по электронной почте). Получатель проверяет вашу PGP подпись в файле ключа и определяет уровень доверия к нему (например -L1), вручную добавляя полученный ключ в свою адресную книгу, например:
    ./addkey -Aalice -L1

III. Звонки:

  • Для приема входящего звонка нажмите клавишу Ввод.
  • Для выполнения исходящего звонка гость к гостю (без использования персональных ключей, при первом контакте) введите команду: -Oremote_onion_address , нажмите Ввод и ждите соединения через Tor в течение 10-30 сек.
  • Для включения / отключения непрерывной передачи (дуплекс) используйте клавишу Ввод. Удерживайте клавишу Tab для кратковременной передачи (режим рации).
  • Для выбра голосового кодека от 1 до 18 используйте команду -Ccodec_number. Меньшие номера соответствуют низкобитрейным кодекам, большие - высококачественным. Номера от 16 до 18 соответствую кодекам с переменным битрейтом (не рекомендуются для особой секретности).
  • Для включения изменения голоса (вокодера) используйте команду -Qmode , где mode=3 соответствует преобразованию голоса в шепот (рекомендуемый оптимальный режим), режимы 6-255 соответствуют голосу робота в различной тональности и т.д.
  • Для отключения вокодера используйте команду -Q-3.
  • Для использования функции чата наберите сообщение и отправьте его нажатием клавиши Ввод.
  • Для перехода от установленного соединения через Tor на прямое UDP-соединение используйте команду -S (оба абонента должны ее выполнить). В качестве параметра можно указать предпочитаемый STUN-сервер, используемый для прохода NAT.
  • Для возврата в Tor используйте команду -O.
  • Для завершения звонка используйте команду -H.
  • Для поиска контактов в адресной книге используйте команду -V или -Vfilter, где filter - подстрока для поиска.
  • Для быстрого формирования команды дозвона к нужному абонету используйте вспомогательную команду -Ename , где name - имя абонента в адресной книге. При этом будет использован адрес дозвона, определенный в адресной книге для указанного абонента. Также используйте -E без имени для повтора предыдущего звонка.
  • Для завершения работы Онионфона используйте команду -X или дважды быстро нажмите клавишу Esc для аварийного завершения в случае опасности.

  • IV. Консоль

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

    Управляющие клавиши:

    1. Back удаляет последний введенный символ.
    2. Del стирает набранную строку.
    3. Tab активирует передачу, пока клавиша нажата (функция тангенты в рации).
    4. Sift+Tab (Linux) или Ctrl+Tab (Windows) акивирует голосовой детектор для автоматического включения передачи в течение разговора.
    5. Up, Down (стрелки "Вверх" и "Вниз") используются для выбра блока в меню.
    6. Left, Right (стрелки "Влево" и "Вправо") используются для выбора элемента меню в текущем блоке.
    7. Enter:
      - ответ на входящий звонок;
      - включение /отключение постоянной передачи (режима дуплекса) в случае, если строка ввода пустая;
      - если первый символ во введенной строке является "-" (была набрана команда), то эта комнда выполняется;
      - иначе, в случае установленного соединения, отправляется набранное сообщение в чат.
    8. Esc:
      - отклонение входящего звонка;
      - при быстром двухкратном нажатии аварийное завершение работы Онионфона и чистка памяти.

    V. Telnet

    Запущенный Онионфон может использоваться в качестве демона, контролируемого с помощью Telnet-клиента или любого другого приложения, использующего протокол Telnet. Задайте управляющий IP/TCP-интерфейс Онионфона в фале conf.txt в виде IP-адреса (в целях безопасности предпочтительно использовать локальный хост, хотя возможно и удаленное управление) и произвольного порта: WEB_interface=127.0.0.1:23

    Для активации в Онионфоне режима Telnet после подключения необходимо отправить строку из одного символа #. После этого Вы можете отсылать Онионфону консольные команды, как описано выше, и обратно получать ответы и уведомления. Дополнительно можно использовать строку вида #ascii_code для эмуляции нажатия клавиш. Например, #13 эмулирует нажатие клавиши Ввод. Кроме того, строка #10 дополнительно стирает все ранее полученные символы и затем также эмулирует нажатие клавиши Ввод.

    VI. WEB интерфейс

    Web интерфейс представляет собой локальную HTML5 веб-страницу, открываемую в любом браузере и использующую Java-скрипты для создания пользовательского графического интерфейса, контролирующего запущенный Онионфон. Для соединения с Онионфоном браузер использует протокол WebSocket и подключается через общий управляющий интерфейс, заданный в файле conf.txt , по умолчанию:
    WEB_interface=127.0.0.1:8000
    Используемый веб-браузер должен поддерживать технологии HTML5 и WebSocket. Кроме того, необходимо разрешить выполнение Java-скриптов для данной локальной веб-страницы. При этом будут использованы только локальные Java-скрипты (смотрите код в файлах \webgui\js\tooltip.js и \webgui\js\websock.js в папке Онионфона). Никакие другие внешние Java-скрипты не используются. Сначала нажмите кнопку Connect для установки двунаправленного асинхронного соединения между браузером и Онионфоном по протоколу WebSocket. Затем используйте графические элементы для управления Онионфоном, контролируйте поле лога для просмотра ответов, входящих служебных сообщений и чата. Всплывающие ярлычки-подсказки помогут быстро освоить азы работы с графическим интерфейсом для Онионфона даже ординарному пользователю.

    Русскоязычное сообщество может обсудить проект и задать вопросы на форуме PGPRU