Как я могу предотвратить утечку моего трафика на узлы?
Узлы следует использовать только для того, чтобы помочь клиентам найти друг друга. Не для передачи данных.
Это похоже на MITM. Это не лучше, чем Skype с серверами Microsoft.
Вы ошибаетесь. Узлы начальной загрузки DHT существуют для облегчения присоединения к DHT. Если вам нужны дополнительные пояснения, вы можете просмотреть эту статью: https://en.wikipedia.org/wiki/Distributed_hash_table. Кроме того, вы можете присоединиться к нам в IRC, на канале #tox на Freenode, и мы постараемся объяснить все как можно лучше.
Ваш трафик может проходить через загрузочные узлы, действующие как ретрансляторы TCP, в то время как tox использует TCP для дружеского соединения. Это похоже на TURN . Ваш трафик по-прежнему зашифрован от начала до конца, поэтому конфиденциальность и подлинность ваших сообщений никогда не будут скомпрометированы. Вероятно, эта ретрансляция TCP — это то, что вы видели при анализе трафика. Он подробно описан в спецификации протокола tox .
Это голосовой трафик. Он зашифрован, и теперь третьи лица не могут его расшифровать, но это не значит, что это невозможно в будущем.
У меня есть прямой адрес IPv4/IPv6. Почему я должен отправлять свои данные на узлы?
Вы говорите: «Узлы начальной загрузки DHT существуют для облегчения присоединения к DHT», но это неправда. На прикрепленном снимке экрана трафик проходит через узлы, а не напрямую ко мне.
«Tox — это простое в использовании программное обеспечение, которое связывает вас с друзьями и семьей так , чтобы никто другой вас не подслушивал». — Это ложь? Трафик зашифрован, хорошо. Но он использует узлы для доставки? Я не знаю, кто обслуживал эти узлы. Что делать, если один или несколько узлов являются ложными?
Я понимаю, что этот момент может показаться неверным, поэтому я зарегистрировал проблему с документацией, чтобы улучшить наше представление об этом. Спасибо за объяснение ваших мыслей.
Чтобы быстро объяснить вашу конкретную проблему, я перефразирую ее. Пожалуйста, дайте мне знать, если я неправильно понял:
В : _Меня беспокоит тот факт, что пакеты данных, поступающие с моего компьютера, не доставляются напрямую на компьютер моего друга, а иногда (или постоянно, в зависимости от условий сети) ретранслируются через сторонние компьютеры._
A: Во-первых, рассмотрим пакет, идущий напрямую с вашего компьютера на компьютер вашего друга, при условии, что вы подключены к локальному Wi-Fi:
traceroute $your_friend_ip
, чтобы увидеть, куда он идет), каждый из которых имеет свободный доступ к кадру Ethernet, пакету IP и пакету UDP, а также к его содержимому. Много точек доступа, назовем ее 4-й.Как видите, при «прямой» передаче от вас к вашему другу есть много моментов, где пакет может быть просмотрен произвольными людьми. Сквозное шифрование означает, что между вами и вашим другом никто не сможет прочитать фактическое содержимое, которое вы намеревались передать. Они всегда могут видеть только зашифрованные данные.
Теперь добавление ретранслятора TCP в середине просто удлинит маршрут (теоретически он может его сократить, но это маловероятно). Любой, кто запускает ретранслятор, может прочитать пакет, как и любой другой между вами и вашим другом. Криптопротокол Tox гарантирует безопасность вашего общения.
Теперь я также вижу вторую проблему:
В : _Что произойдет, если один из узлов, передающих мои данные, будет вредоносным?_
A: Tox выбирает количество ретрансляторов TCP, которые он может использовать для связи в случае, если прямые соединения UDP невозможны (например, из-за NAT или брандмауэра). Злые ретрансляторы могут сделать очень немного зла:
Это в основном все. Ни в коем случае злой ретранслятор не сможет прочитать ваши данные. Он может только не ретранслировать, и только если каждый узел начальной загрузки является злом, вы не можете общаться. Это было бы довольно неприятно, и мы были бы недовольны этим, но ничья информация никогда не скомпрометирована.
Я надеюсь, что это проясняет некоторые вещи. Я не проверял этот ответ, но я позабочусь о том, чтобы он был правильно представлен на веб-сайте для дальнейшего использования. Дайте мне знать, если у вас есть какие-либо другие проблемы. Еще раз спасибо, что подняли этот вопрос.
Я только что снова прочитал ваше сообщение и обнаружил, что пропустил еще одну проблему:
В: Хотя сейчас данные зашифрованы, что гарантирует, что они не будут расшифрованы в будущем?
A: Протокол Tox обеспечивает совершенную прямую секретность за счет использования эфемерных ключей. Это означает, что если один из этих ключей будет скомпрометирован, можно будет расшифровать несколько сообщений, но не всю вашу историю общения. Часть «несколько сообщений» в этом предложении в будущем будет сокращена до «одного сообщения». Если ваш долгосрочный секретный ключ скомпрометирован, никакие прошлые сообщения не могут быть расшифрованы.
Если используемые нами криптографические примитивы сломаны, мы проигрываем. Это зависит от того, каким образом они сломаны, это возможные наихудшие сценарии:
Эти сценарии вряд ли станут реальностью в ближайшем будущем или, возможно, навсегда. Согласно нынешнему пониманию криптографического сообщества, только квантовые вычисления могут реализовать второй сценарий. Первый сценарий считается невозможным.
Все это сказано, я также заметил, что вы сказали, что у вас есть прямой адрес IPv4. Что это значит? Если вашему компьютеру назначен общедоступный IPv4-адрес, а порт 33445 открыт, Tox должен установить прямое соединение очень быстро. Если это не так, это ошибка, и мы должны работать вместе, чтобы выяснить, почему вместо этого используется протокол TCP.
Большое спасибо за это объяснение. Теперь я понимаю немного больше.
Я не уверен насчет прямого IPv4-адреса... Я использую WireGuard VPN. WireGuard устанавливается на виртуальный сервер с прямым адресом IPv4 и IPv6. Весь трафик обернут в namespace.
Информация о сети ноутбука: https://gist.github.com/DebugReport/1268e15c3bd1c99b56929d645d99392b
Если я ошибся, извините.
Возможно, IPv4 не является прямым, но как насчет IPv6? Я могу использовать прямые подключения, если у другого клиента тоже есть IPv6?
Да, если у обеих сторон есть IPv6, и конфигурация брандмауэра не блокирует порт 33445 (или какой-то другой порт рядом с ним, что-то между 33445 и 33545), это должно работать. Ваш друг находится в той же VPN?
Нет.
Хм... Вопрос. Нам всегда нужно использовать узлы? Или только если у одного из нас нет прямого IP (только IPv4?)?
Нужны ли узлы для IPv6 (я) <-> IPv6 (друг)? Если да - почему?
(Оставлять этот вопрос открытым до тех пор, пока на все эти вопросы не будут даны ответы в документации)
Если у одного из вас есть общедоступный IP-адрес, то другой может загрузиться, используя IP-адрес и порт другого. Для этого требуется поддержка клиентов. Я не думаю, что в настоящее время у любого клиента есть:
tox_self_get_dht_id
) и его портом ( tox_self_get_udp_port
).(key, ip, port)
.После этого у вас есть личная сеть Tox из 2 человек. Итак, теоретически вам не нужны никакие другие узлы. Однако они облегчают задачу.
Если у одного из вас есть общедоступный IP-адрес и открытый порт, то подключение к узлам начальной загрузки также должно позволить вам установить прямое соединение. Узлы начальной загрузки DHT не имеют ничего общего с тем, можете ли вы подключиться или нет. Прямое подключение должно быть возможно, даже если только у одного из вас есть общедоступный IP-адрес и открытый порт. Другой подключится к нему, что создаст маршрут в локальном маршрутизаторе и предоставит клиенту временный случайный публичный порт.
Просто примечание: я заметил такое же поведение с C-Toxcore. Одна из сторон находится на VPS с общедоступным IP-адресом и без брандмауэра, другая находится за NAT, но имеет перенаправленный порт Tox, поэтому они должны быть взаимно доступны. Трафик по-прежнему направлялся через TCP.
Я не считаю это проблемой безопасности, но это, безусловно, проблема масштабируемости, если сеть P2P передает весь свой трафик через ретрансляторы.
Самый полезный комментарий
Я понимаю, что этот момент может показаться неверным, поэтому я зарегистрировал проблему с документацией, чтобы улучшить наше представление об этом. Спасибо за объяснение ваших мыслей.
Чтобы быстро объяснить вашу конкретную проблему, я перефразирую ее. Пожалуйста, дайте мне знать, если я неправильно понял:
В : _Меня беспокоит тот факт, что пакеты данных, поступающие с моего компьютера, не доставляются напрямую на компьютер моего друга, а иногда (или постоянно, в зависимости от условий сети) ретранслируются через сторонние компьютеры._
A: Во-первых, рассмотрим пакет, идущий напрямую с вашего компьютера на компьютер вашего друга, при условии, что вы подключены к локальному Wi-Fi:
traceroute $your_friend_ip
, чтобы увидеть, куда он идет), каждый из которых имеет свободный доступ к кадру Ethernet, пакету IP и пакету UDP, а также к его содержимому. Много точек доступа, назовем ее 4-й.Как видите, при «прямой» передаче от вас к вашему другу есть много моментов, где пакет может быть просмотрен произвольными людьми. Сквозное шифрование означает, что между вами и вашим другом никто не сможет прочитать фактическое содержимое, которое вы намеревались передать. Они всегда могут видеть только зашифрованные данные.
Теперь добавление ретранслятора TCP в середине просто удлинит маршрут (теоретически он может его сократить, но это маловероятно). Любой, кто запускает ретранслятор, может прочитать пакет, как и любой другой между вами и вашим другом. Криптопротокол Tox гарантирует безопасность вашего общения.
Теперь я также вижу вторую проблему:
В : _Что произойдет, если один из узлов, передающих мои данные, будет вредоносным?_
A: Tox выбирает количество ретрансляторов TCP, которые он может использовать для связи в случае, если прямые соединения UDP невозможны (например, из-за NAT или брандмауэра). Злые ретрансляторы могут сделать очень немного зла:
Это в основном все. Ни в коем случае злой ретранслятор не сможет прочитать ваши данные. Он может только не ретранслировать, и только если каждый узел начальной загрузки является злом, вы не можете общаться. Это было бы довольно неприятно, и мы были бы недовольны этим, но ничья информация никогда не скомпрометирована.
Я надеюсь, что это проясняет некоторые вещи. Я не проверял этот ответ, но я позабочусь о том, чтобы он был правильно представлен на веб-сайте для дальнейшего использования. Дайте мне знать, если у вас есть какие-либо другие проблемы. Еще раз спасибо, что подняли этот вопрос.