
Статья не моя !!! Приятного прочтения .

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, и другие).

Самый простой способ использовать OnionPhone — в качестве VOIP плагина для TorChat:
- Поместите папку с файлами из пакета OnionPhone в любое место на жестком диске, на флешку или в VeraCrypt контейнер (последнее предпочтительно для безопасности).
- Отредактируйте конфигурационный файл Tor в составе TorChat: /torchat/bin/Tor/torrc.txt: непосредственно после строки
- Добавьте новую строку:
- ПКМ по иконке myself в списке контактов TorChat, а из меню скопируйте свой ID. Отредактируйте конфигурационный файл conf.txt: укажите ваш онион-адрес, используя скопированный ID:
- Полученные файлы hostname и private_key сохраните в папке /torchat/bin/Tor/hidden_service.
- После запуска программа готова принимать входящие и выполнять исходящие звонки через сеть Tor.

OnionPhone использует публичные ключи для взаимной идентификации абонентов с помощью PGP. Перед началом использования необходимо сгенерировать постоянную ключевую пару (публичный и приватный ключи), подписать публичный ключ с помощью PGP и затем добавить его в адресную книгу. Теперь Вы можете установить не аутентифицированное (но зашифрованное) соединение с Вашим абонентом, отправить ему свой публичный ключ и получить его публичный ключ. После проверки PGP подписей Вы и ваш абонент устанавливают необходимый уровень доверия к полученным ключам и в итоге можно выполнять аутентифицированные звонки друг другу. Для работы с ключами используется консольная утилита addkey:
- Для создания новой ключевой пары выполните: ./addkey -Gname [-Yaccess] [options], где name — ваш идентификатор, access — ваш пароль, защищающий приватный ключ, и options — параметры, включаемые в публичный ключ для передачи другим участникам. Если опция -Y не используется, то приватный ключ будет сохранен в незашифрованном виде. В этом случае рекомендуется поместить папку с программой в защищенное хранилище (например, контейнер VeraCrypt). Дополнительная опция -Oour_onion_address удобна для представления своего onion адреса непосредственно в публичном ключе. При получении вашего ключа дополнительные опции будут автоматически сохранены в адресных книгах ваших абонентов.
- например, после запуска в консоли в папке keys будут созданы файлы erra.sec (ваш приватный ключ, защищенный паролем 1234) и erra (ваш публичный ключ):
- Для подписывания публичного ключа откройте его как текст в любом редакторе и подпишите содержимое с помощью PGP. Подпись должна быть добавлена в текстовый файл публичного ключа. После подписывания ключа дальнейшее его редактирование не допускается, хотя переименовать файл можно.
- Перед использованием нового ключа необходимо добавить его в адресную книгу:
- Для использования ключа в качестве вашего постоянного отредактируйте конфигурационный файл conf.txt, указав имя собственного ключа по умолчанию:
- После установки ключа по умолчанию в случае использования пароля, защищающего приватный ключ, необходимо сообщить его OnionPhone в виде команды, например -Y1234. При использовании пароля эту команду необходимо будет выполнять каждый раз после запуска программы, иначе вы не сможете принимать входящие звонки, адресованные на ваше имя (хотя звонки от гостя к гостю возможны в любом случае).
- Теперь Вы можете отправлять ваш ключ другим пользователям. Для автоматической передачи ключа сначала установите не аутентифицированное соединение гость к гостю, используя команду -Oonion_address, и затем выполните команду -Kname, где name — ключ из вашей адресной книги (не обязательно свой), который вы хотите отправить (или -K без параметра, если Вы отправляете свой ключ, используемый по умолчанию). После успешной пересылки ключ будет автоматически добавлен в адресную книгу вашего абонента с минимальным уровнем доверия. После проверки PGP подписи (вручную) в файле ключа абонент может изменить уровень доверия путем редактирования параметра -L в соответствующей записи в файле адресной книги keys/contacts.txt, например:
- Также можно передать ключ любым другим незащищенным путем (например, переслать по электронной почте). Получатель проверяет вашу PGP подпись в файле ключа и определяет уровень доверия к нему (например -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:
- — отклонение входящего звонка;
- — при быстром двукратном нажатии аварийное завершение работы программы и чистка памяти.