OnionPhone

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

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

Проект:

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

Установка

После скачивания и распаковки архива с TorChat, найдите и замените устаревший исполняемый файл tor.exe на новый и скопируйте все библиотеки (libeay32.dll, libssp-0.dll, и другие).

Свежую версию Tor вы можете найти в папке TorBrowser или на официальном сайте.

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

1: Поместите папку с файлами из пакета OnionPhone в любое место на жестком диске, на флешку или в VeraCrypt-контейнер (последнее предпочтительно для безопасности).

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=erra2bqslndht6nr

Если хотите, можете перед этим сгенерировать себе индивидуальный адрес с помощью одной из этих программ. Полученные файлы hostname и private_key сохраните в папке /torchat/bin/Tor/hidden_service.
После запуска программа готова принимать входящие и выполнять исходящие звонки через сеть Tor.

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

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

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

1: Для создания новой ключевой пары выполните: ./addkey -Gname [-Yaccess] [options], где name — ваш идентификатор, access — ваш пароль, защищающий приватный ключ, и options — параметры, включаемые в публичный ключ для передачи другим участникам. Если опция -Y не используется, то приватный ключ будет сохранен в незашифрованном виде. В этом случае рекомендуется поместить папку с программой в защищенное хранилище (например, контейнер VeraCrypt). Дополнительная опция -Oour_onion_address удобна для представления своего Onion-адреса непосредственно в публичном ключе. При получении вашего ключа дополнительные опции будут автоматически сохранены в адресных книгах ваших абонентов.
Таким образом, например, после запуска в консоли:
./addkey -Gerra -Y1234 -Oerra2bqslndht6nr
в папке keys будут созданы файлы erra.sec (ваш приватный ключ, защищенный паролем 1234) и erra (ваш публичный ключ).

2: Для подписывания публичного ключа откройте его как текст в любом редакторе и подпишите содержимое с помощью PGP. Подпись должна быть добавлена в текстовый файл публичного ключа. После подписывания ключа дальнейшее его редактирование не допускается, хотя переименовать файл можно.

3: Перед использованием нового ключа необходимо добавить его в адресную книгу:
./addkey -Aerra
Для использования ключа в качестве вашего постоянного отредактируйте конфигурационный файл conf.txt, указав имя собственного ключа по умолчанию:
Our_name=erra
После установки ключа по умолчанию в случае использования пароля, защищающего приватный ключ, необходимо сообщить его OnionPhone в виде команды, например -Y1234. При использовании пароля эту команду необходимо будет выполнять каждый раз после запуска программы, иначе вы не сможете принимать входящие звонки, адресованные на ваше имя (хотя звонки от гостя к гостю возможны в любом случае).

4: Теперь Вы можете отправлять ваш ключ другим пользователям. Для автоматической передачи ключа сначала установите неаутентифицированное соединение гость к гостю, используя команду -Oonion_address, и затем выполните команду -Kname, где name — ключ из вашей адресной книги (не обязательно свой), который вы хотите отправить (или -K без параметра, если Вы отправляете свой ключ, используемый по умолчанию). После успешной пересылки ключ будет автоматически добавлен в адресную книгу вашего абонента с минимальным уровнем доверия. После проверки PGP подписи (вручную) в файле ключа абонент может изменить уровень доверия путем редактирования параметра -L в соответствующей записи в файле адресной книги keys/contacts.txt, например:
[erra] {FNrjEjGmlZtvKXzBQkNIDA==} #erra -Oerra2bqslndht6nr -L1
Также можно передать ключ любым другим незащищенным путем (например, переслать по электронной почте). Получатель проверяет вашу PGP подпись в файле ключа и определяет уровень доверия к нему (например -L1), вручную добавляя полученный ключ в свою адресную книгу, например:
./addkey -Aerra -L1

Звонки

Для приема входящего звонка нажмите клавишу Ввод.
Для выполнения исходящего звонка гость к гостю (без использования персональных ключей, при первом контакте) введите команду: -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 для аварийного завершения в случае опасности.

Консоль

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

  • Back удаляет последний введенный символ.
  • Del стирает набранную строку.
  • Tab активирует передачу, пока клавиша нажата (функция тангенты в рации).
  • Sift+Tab (Linux) или Ctrl+Tab (Windows) акивирует голосовой детектор для автоматического включения передачи в течение разговора.
  • Up, Down (стрелки «Вверх» и «Вниз») используются для выбра блока в меню.
  • Left, Right (стрелки «Влево» и «Вправо») используются для выбора элемента меню в текущем блоке.
  • Enter:
    — ответ на входящий звонок;
    — включение/отключение постоянной передачи (режима дуплекса) в случае, если строка ввода пустая;
    — если первый символ во введенной строке является «-» (была набрана команда), то эта комнда выполняется;
    — иначе, в случае установленного соединения, отправляется набранное сообщение в чат.
  • Esc:
    — отклонение входящего звонка;
    — при быстром двухкратном нажатии аварийное завершение работы программы и чистка памяти.

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