id: Гость   вход   регистрация
текущее время 13:32 28/03/2024
создать
просмотр
ссылки

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).


 
На страницу: 1, ... , 29, 30, 31, 32, 33, ... , 50 След.
Комментарии
— SATtva (30/09/2014 09:01)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Гость (29/09/2014 23:57), Гость (30/09/2014 00:08), Семён Семёныч, палишься.
— Гость (30/09/2014 20:54)   <#>
Не нужен в том смысле, что его перспективы всё еще туманны, одни только обещания, а Tox уже обзавелся Tor'ом и называется ToT, который, насколько понял, воплотил себе всё, что нам обещал gegel
— Гость (30/09/2014 21:40)   <#>
Кто-нибудь разбирался в модели безопасности этого Tox? Как-то шифропанково выглядит.
— gegel (30/09/2014 23:04, исправлен 30/09/2014 23:05)   профиль/связь   <#>
комментариев: 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, fileдока на сайте (пока только En). В процессе будут комменты, так что пока для ознакомления. В течение пары дней подготовлю страничку в old-school стиле и готовые к употреблению статически линованные бинарники для Linux и Windows.


Код OnionPhone реализован на чистом С на максимально нижнем уровне и полностью статически линкуется: так мало кто сейчас делает, это скорее стиль embedded-разработки. Все, что можно было закодить самому, компактно сделано в самом коде, без внешних библиотек. Компилируется gcc (Linux) и MinGW (Windows) на 32-битных платформах. GUI пока нет, будет через control port. Также попробую сделать версию под Android (всего то надо прицепить работу с аудио на нижнем уровне, пример кода у меня есть, но надо пробовать).

— Гость (30/09/2014 23:27)   <#>

Это анализ для гиков. Неплохо бы также растолковать для обычных юзеров – Tox уступает вашему продукту по безопасности, или как?

И не совсем понял, видимо, что-то пропустил – OnionPhone – это ребрендинг TorFone, или новый продукт?
— gegel (30/09/2014 23:30, исправлен 30/09/2014 23:39)   профиль/связь   <#>
комментариев: 393   документов: 4   редакций: 0

Таки используются ефемеральные ключи в Tox, но, прочитав три раза, так и не смог понять тонкостей. Буду вникать, описание во истину потрясающее.
ПС: и после этого родители запрещают мне в носу ковыряться? [Вовочка]


OnionPhone – это ребрендинг TorFone, или новый продукт?

Даже не знаю, как и назвать. По протоколу абсолютно несовместим (совсем другая криптография), т.е. разговор между ними не получится. Но все идеи и функции TorFone повторены в OnionPhone. Но в консольном исполнении и на С. Плюс добавлены новые кодеки и оптимизировано аудио под высоколатентную среду.


Tox уступает вашему продукту по безопасности

Это очень абстрактный вопрос, и объективного ответа на него нет в принципе: любые попытки на данном этапе сравнить что-то – не более чем пиар.

— Гость (01/10/2014 19:25)   <#>

А вы попробуйте :) А мы уж сами решим, пиар это или не пиар :))
— unknown (01/10/2014 21:46)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664

Пока Gegel'ю в мягкой и доброжелательной форме не указали, что его попытки создания и документации протоколов — ниже всякой критики, то он бы и не подумал что-то там в своём проекте приводить в достойный вид хотя бы по форме.

А теперь он смотрит — у PGPphone Циммермана и у новоявленного токса всё ещё печальнее. Может им ещё это всё предстоит, а может и нет: протокол так и останется на шифрпанковском уровне, пока какой-нибудь теоретик криптографии с академическим бэкграундом не преодолеет брезгливость и не поковыряется в этом, чтобы показать, как оно там легко ломается.
— Гость (01/10/2014 23:30)   <#>
gegel, большое спасибо за обзор!

Это мне больше всего и не понравилось.
Как минимум, в uTox о ней не слова, клиент тупо звонит и общается без показа информации о сессионных ключах.
Программу запустил и с большим интересом потыкал. addkey упала от --help, но это издержки альфа-версии. Можно будет отправить через GitHub pull-реквесты, связанные с переводом на английский (как oph01a.TeX, так и самой программы)? Вы планируете выпуск OnionPhone в виде библиотеки?
— gegel (01/10/2014 23:59, исправлен 02/10/2014 00:06)   профиль/связь   <#>
комментариев: 393   документов: 4   редакций: 0
Программу запустил и с большим интересом потыкал. addkey упала от help, но это издержки альфа-версии. Можно будет отправить через GitHub pull-реквесты, связанные с переводом на английский (как oph01a.TeX, так и самой программы)? Вы планируете выпуск OnionPhone в виде библиотеки?

По 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

— Гость (02/10/2014 22:27)   <#>

Не совсем. На первой странице Темы Вам предложили некоторые исправления для английской версии сайта, я тоже решил с этим помочь.

В виде набора кода, реализующего протокол, к которому можно сделать свой UI, или который можно слинковать с каким-нибудь мультипротокольным мессенджером.

Возможно, уже нашли: setsockopt(...SO_REUSEADDR...)?
— gegel (02/10/2014 23:15)   профиль/связь   <#>
комментариев: 393   документов: 4   редакций: 0
Не совсем. На первой странице Темы Вам предложили некоторые исправления для английской версии сайта, я тоже решил с этим помочь.


:) Конечно же, буду весьма благодарен: сам писал, как мог. Что мне для этого нужно сделать?

В виде набора кода, реализующего протокол, к которому можно сделать свой UI, или который можно слинковать с каким-нибудь мультипротокольным мессенджером.


Об этом сам думал, иначе проект удобен только для экспериментов. Есть ли какие-то стандартные расширяемые варианты UI, или придется изобретать свой?

Возможно, уже нашли

Да, нашел еще раньше, но при жестком креше вначале не помогало. Но сейчас вроде ОК, буду позже еще тестировать.

Сейчас разбираюсь с кодеками: у меня они упорно НЕ падают. Если будет возможность и время, огромная просьба проверить на вашем билде: после старта программы сначала включить аудио лупбек -RV затем Ввод для активации голоса, и попробовать кодеки ILBC: -C14 и затем OPUS: -C16.

Как только разберусь с кодеками, сразу поправлю остальное.
И огромное спасибо за Ваш интерес к проекту.
— SATtva (04/10/2014 08:51)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118

Лучше реализуйте и документируйте чистый API, который желающие могли бы импортировать в свой код.
— gegel (04/10/2014 10:54, исправлен 04/10/2014 10:57)   профиль/связь   <#>
комментариев: 393   документов: 4   редакций: 0
чистый API

И все же я не до конца понимаю разницу между UI и API.
В данном случае мне кажется оптимальным:
1. реализовать управляющий TCP или UDP порт c возможность передавать через него команды и обратно дублировать выдачу в stdout и цеплять на него GUI или внешний мессенжер (по образцу Tor и Vidalia).
2. реализовать С-функции и хедер с возможностью использовать их, включив С-код OnionPhone в свое приложение (например, в виде so). Тут видится функция отправки строки команды, а вот обратно пока не знаю, как сделать лучше ( с учетом мультиплатформенности): callback можно регистрировать, или через файл в памяти. Если есть варианты, буду благодарен.

— Гость (04/10/2014 12:08)   <#>
И все же я не до конца понимаю разницу между UI и API

Сразу скажу что не разработчик, но понимаю это следующим образом. API – библиотека С-функций, специфичных для приложения, т.е. интерфейс для программиста, а UI – интерфейс для пользователя, сконструированный из этих функций под конкретную задачу. Например в OpenSSL libcrypto и libssl это библиотеки алгоритмов, а openssl – набор утилит командной строки для пользователя, т.е. UI.

управляющий TCP или UDP порт c возможность передавать через него команды и обратно дублировать выдачу в stdout и цеплять на него GUI или внешний мессенжер

Это не библиотека, скорее низкоуровневый UI. Можно сравнить с p2p-клиентами. Например, в Transmission используется сторонняя библиотека libtorrent, её использует демон transmission-cli, слушающий порт, через который пользователь может давать команды, и есть ещё GUI для любителей нажимать кнопки. В rtorrent отдельного демона вообще нет, он интегрирован в консольный UI на ncurses, использует ту же самую библитеку libtorrent (rakshasa).

Взаимодействовать с демоном можно посредством разных клиентов, в порядке роста "юзерофильности":
1. Через командную строку с помощью telnet
2. Через веб-интерфейс с помощью веб-браузера
3. Через специальный GUI на GTK и т.п.

Для каждого из этих способов демон может держать отдельный порт, например в aMule это так. И в нём кстати, кроме GUI-клиента есть ещё GUI-монолит с интегрированным демоном. Но отдельной библиотеки, реализующей протокол ed2k нет, она интегрирована в исполняемые файлы. Для подключения через командную строку вместо telnet используется специальный клиент чтобы автоматически загружать пользовательские настройки, пароль для доступа к демону и т.п.
На страницу: 1, ... , 29, 30, 31, 32, 33, ... , 50 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3