Voice over TOR
Предлагаю для тестирования кипто VOIP-утилиту для работы через TOR (в режимах TOR -> доменное имя и TOR->скрытый сервис). Переделал с старого PGPFone: заменил транспорт на TCP и добавил адаптивный буфер для компенсации высокого jitter в TOR-туннеле. Также добавил обмен сообщениями и файлами.
Win98-XP-7-8. Полностью портируема. Работает peer-to-peer (звонить на доменное имя или TOR-hidden service). Использует DH4096+3DES.
Приветствуются замечания и пожелания.
Сайт проекта http://torfone.org (англ./рус.), там же доступны исходники (Visual C 6).
комментариев: 11558 документов: 1036 редакций: 4118
комментариев: 393 документов: 4 редакций: 0
Бегло просмотрел описание криптографии TOX. Весьма скудно, но в общих чертах так: используется Бернштейновская криптобиблиотека NaCl. Асимметричное шифрование там EC25519, симметричное – вроде salsa20. В описании TOX ничего не детализируется, надо смотреть исходники. По поводу SPRNG и источников энтропии тоже ни слова (добрая традиция с ними). Пользователь идентифицируется публичным ключом (это его ИД в DHT). При установке соединения отсылается свой публичный ключ и nonce, из них и ключа плучателя с помощью DH выводится симметричный ключ. Т.е. никаких эфемеральных ключей, и, как результат, без PFS. Т.о., скорее всего, при утечке приватного ключа хотя-бы одного участника давно записанный дамп может быть дешифрован. Отрицаемость даже не обсуждается (другое дело, что скорее всего она практически и не важна для потенциальных пользователей в наших реалиях).
Не совсем понятен механизм аутентификации при первичном p2p-контакте через Tor в режиме ToT: если DHT выполняет маршрутизацию к нему (атаки на DHT пока не осуждаем), то при p2p, получается, надо знать ключ получателя заранее. Возможно, предусмотрена голосовая аутентификация (типв SAS в ZRTP), не нашел в описании.
Как рекомендация – добавить возможность использования PGP для подписи EC-ключей.
Ну, и еще один ньюанс: по видимому, ToT использует выход через Tor на обычный хост (не HS). Наверное, надо будет пробрасывать порт получателю, что не всегда возможно. Кроме того, Exit node – бутылочное горлышко по латентности и дрожанию (проверено экспериментально), соединение с HS гораздо более приемлемо для VOIP.
ПС:
пре-альфу кода OnioPhone поместил на git, дока на сайте (пока только En). В процессе будут комменты, так что пока для ознакомления. В течение пары дней подготовлю страничку в old-school стиле и готовые к употреблению статически линованные бинарники для Linux и Windows.
Код OnionPhone реализован на чистом С на максимально нижнем уровне и полностью статически линкуется: так мало кто сейчас делает, это скорее стиль embedded-разработки. Все, что можно было закодить самому, компактно сделано в самом коде, без внешних библиотек. Компилируется gcc (Linux) и MinGW (Windows) на 32-битных платформах. GUI пока нет, будет через control port. Также попробую сделать версию под Android (всего то надо прицепить работу с аудио на нижнем уровне, пример кода у меня есть, но надо пробовать).
Это анализ для гиков. Неплохо бы также растолковать для обычных юзеров – Tox уступает вашему продукту по безопасности, или как?
И не совсем понял, видимо, что-то пропустил – OnionPhone – это ребрендинг TorFone, или новый продукт?
комментариев: 393 документов: 4 редакций: 0
Таки используются ефемеральные ключи в Tox, но, прочитав три раза, так и не смог понять тонкостей. Буду вникать, описание во истину потрясающее.
ПС: и после этого родители запрещают мне в носу ковыряться? [Вовочка]
Даже не знаю, как и назвать. По протоколу абсолютно несовместим (совсем другая криптография), т.е. разговор между ними не получится. Но все идеи и функции TorFone повторены в OnionPhone. Но в консольном исполнении и на С. Плюс добавлены новые кодеки и оптимизировано аудио под высоколатентную среду.
Это очень абстрактный вопрос, и объективного ответа на него нет в принципе: любые попытки на данном этапе сравнить что-то – не более чем пиар.
А вы попробуйте :) А мы уж сами решим, пиар это или не пиар :))
комментариев: 9796 документов: 488 редакций: 5664
Пока Gegel'ю в мягкой и доброжелательной форме не указали, что его попытки создания и документации протоколов — ниже всякой критики, то он бы и не подумал что-то там в своём проекте приводить в достойный вид хотя бы по форме.
А теперь он смотрит — у PGPphone Циммермана и у новоявленного токса всё ещё печальнее. Может им ещё это всё предстоит, а может и нет: протокол так и останется на шифрпанковском уровне, пока какой-нибудь теоретик криптографии с академическим бэкграундом не преодолеет брезгливость и не поковыряется в этом, чтобы показать, как оно там легко ломается.
Это мне больше всего и не понравилось.
Как минимум, в uTox о ней не слова, клиент тупо звонит и общается без показа информации о сессионных ключах.
Программу запустил и с большим интересом потыкал. addkey упала от --help, но это издержки альфа-версии. Можно будет отправить через GitHub pull-реквесты, связанные с переводом на английский (как oph01a.TeX, так и самой программы)? Вы планируете выпуск OnionPhone в виде библиотеки?
комментариев: 393 документов: 4 редакций: 0
По addkey исправлю. Хелп-скрин можно посмотреть при запуске без параметров. Так же добавлю и в командную строку для oph.
Конечно, реквесты отправляйте.
Наверное, имелось в виду: перевода на русский? Там и так все на английском пока. Конечно, сделаю русскую доку и страницу на сайте. Но однозначно будут проблемы с русским чатом (терминал у меня в raw для работы с меню без lcurces). Возможно, придется опционно отключать меню для русификации чата.
Что имеется в виду под "в виде библиотеки"? Все, что возможно, и в чем есть смысл – обязательно сделаю.
Только что активно тестировали соединение между линукс и виндоус-версией. Из багов замечено:
– декодер ILBC под линукс сразу падает (ошибка сегментации), причем моя сборка работает. Буду разбираться.
– кодер OPUS под Win32 падает иногда спонтанно в течение использования (возможно, и под линукс тоже). Постараюсь найти причину.
– после креша под линукс слушающий сокет не биндится сразу. Причина понятна, но как обойти, пока не в курсе.
– в 64-битном режиме код собирается, но падает сразу после активации звука: проблема в кодеках, посмотрю, но не обещаю: портировать кодеки под 64 я не готов. С -m32 на 64-битной платформе все собирается и работает ОК.
– m32 не передается в Makefile кодека G729, поправлю (пока надо дополнительно прописать и в его мейкфайле).
В остальном результаты положительные: латентность в Tor составила всего около 500 mS, при адаптивном буфере выходим на 700-800 mS общей задержки при редких underrun, что гораздо лучше, чем в TorFone. Во общем, общаться вполне можно даже без PTT.
На прямое UDP и обратно переходим, NAT проходится для домашних роутеров. Не могу потестировать тщательнее, т.к. не найду тестера с провайдером, предоставляющим серый IP (хорошо живем).
Проверить кодеки можно без звонка: введите -RV, а затем Enter-ом включайте/отключайте звук. Кодек переключается от -С1 до -C18. Для вывода инженерной информации о состоянии буфера: -RB
Не совсем. На первой странице Темы Вам предложили некоторые исправления для английской версии сайта, я тоже решил с этим помочь.
В виде набора кода, реализующего протокол, к которому можно сделать свой UI, или который можно слинковать с каким-нибудь мультипротокольным мессенджером.
Возможно, уже нашли: setsockopt(...SO_REUSEADDR...)?
комментариев: 393 документов: 4 редакций: 0
:) Конечно же, буду весьма благодарен: сам писал, как мог. Что мне для этого нужно сделать?
Об этом сам думал, иначе проект удобен только для экспериментов. Есть ли какие-то стандартные расширяемые варианты UI, или придется изобретать свой?
Да, нашел еще раньше, но при жестком креше вначале не помогало. Но сейчас вроде ОК, буду позже еще тестировать.
Сейчас разбираюсь с кодеками: у меня они упорно НЕ падают. Если будет возможность и время, огромная просьба проверить на вашем билде: после старта программы сначала включить аудио лупбек -RV затем Ввод для активации голоса, и попробовать кодеки ILBC: -C14 и затем OPUS: -C16.
Как только разберусь с кодеками, сразу поправлю остальное.
И огромное спасибо за Ваш интерес к проекту.
комментариев: 11558 документов: 1036 редакций: 4118
Лучше реализуйте и документируйте чистый API, который желающие могли бы импортировать в свой код.
комментариев: 393 документов: 4 редакций: 0
И все же я не до конца понимаю разницу между UI и API.
В данном случае мне кажется оптимальным:
1. реализовать управляющий TCP или UDP порт c возможность передавать через него команды и обратно дублировать выдачу в stdout и цеплять на него GUI или внешний мессенжер (по образцу Tor и Vidalia).
2. реализовать С-функции и хедер с возможностью использовать их, включив С-код OnionPhone в свое приложение (например, в виде so). Тут видится функция отправки строки команды, а вот обратно пока не знаю, как сделать лучше ( с учетом мультиплатформенности): callback можно регистрировать, или через файл в памяти. Если есть варианты, буду благодарен.
Сразу скажу что не разработчик, но понимаю это следующим образом. API – библиотека С-функций, специфичных для приложения, т.е. интерфейс для программиста, а UI – интерфейс для пользователя, сконструированный из этих функций под конкретную задачу. Например в OpenSSL libcrypto и libssl это библиотеки алгоритмов, а openssl – набор утилит командной строки для пользователя, т.е. UI.
Это не библиотека, скорее низкоуровневый UI. Можно сравнить с p2p-клиентами. Например, в Transmission используется сторонняя библиотека libtorrent, её использует демон transmission-cli, слушающий порт, через который пользователь может давать команды, и есть ещё GUI для любителей нажимать кнопки. В rtorrent отдельного демона вообще нет, он интегрирован в консольный UI на ncurses, использует ту же самую библитеку libtorrent (rakshasa).
Взаимодействовать с демоном можно посредством разных клиентов, в порядке роста "юзерофильности":
1. Через командную строку с помощью telnet
2. Через веб-интерфейс с помощью веб-браузера
3. Через специальный GUI на GTK и т.п.
Для каждого из этих способов демон может держать отдельный порт, например в aMule это так. И в нём кстати, кроме GUI-клиента есть ещё GUI-монолит с интегрированным демоном. Но отдельной библиотеки, реализующей протокол ed2k нет, она интегрирована в исполняемые файлы. Для подключения через командную строку вместо telnet используется специальный клиент чтобы автоматически загружать пользовательские настройки, пароль для доступа к демону и т.п.