The Jerusalem PostThe alliance with America is changing, and Israel cannot afford to ignore it - opinionInquirerMunicipal employee shot dead in Bukidnon; manhunt on for suspectsDaily MaverickThe varsity research subsidy game is up — the education department must not back downInquirer EntertainmentBea Millan-Windorski flies to Puerto Rico ahead of 2026 Miss UniversePunch2026 set to be second-hottest year on record — EUColliderApple TV Officially Resurrects Christopher Nolan’s 169-Minute Sci-Fi MasterpieceCBS NewsDemocrats could dust off plans for court reforms after capturing CongressZDF heuteAktuelle Pressemitteilungen des ZDFThe Hollywood Reporter“Saviors of Cinema” and “Money Machine”: Tallinn Puts Spotlight on Kids, Youth Films and Social Media BansThe RegisterUK ministers seek powers to investigate when AI agents are let off the leashGIGAZINEAIのオープンモデル利用率が大きく拡大中、オープンウェイトモデルとクローズドウェイトモデルの違いは何か?BillboardInterscope Expands Into Brazil With Hip-Hop Artist BK, Supernova Entertainment Joint Venture
The Daily Newsstand · Free, Always
Friday, November 6, 2026

YANDI: эксперимент P2P‑сеть на Rust — со своими узлами, шифрованием и выходом в интернет через другие страны

Translate

Хочу рассказать о проекте YANDI — экспериментальной одноранговой сети, которую я разрабатываю на Rust. Да это не новинка в плане идей и наработок, но данный тип связи можно использовать для: связи узкого круга лиц (родственники), в качестве корпоративной сети, настроив собственный узел и подключив к нему доверенных клиентов. Пользователь может владеть собственным узлом связи, общаться с другими людьми, передавать файлы и выходить в интернет через другие узлы сети, не завися от единственного центрального сервера. На самих узлах и на мобильных агентах, информация хранится в закрытом хранилище с парольной защитой и восстановлением через SID фразу. Настраивается время хранения файлов на сервере. Преимущественно, все файлы до передачи хранятся на узле и передаются между клиентами. Если клиент получил файл или текст, он сам решает хранить его или удалять.

Узел это не просто прокси. Он становится участником сети (если владелец не делает его автономным от сети): обнаруживает соседей, обменивается сведениями о доступных маршрутах, ретранслирует трафик и предоставляет те ресурсы, которыми владелец готов делиться. Сразу оговорюсь: это рабочий прототип, а не проверенный независимым аудитом инструмент анонимности. Часть функций уже реализована и испытана, часть находится в разработке. Ниже расскажу и о том, и о другом.

Зачем ещё один велосипед?

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

Нужна альтернатива глобальному хранению данных.

Связи (не ПД, не ники и IP, не логины и пароли) могут храниться на доверенном узле. Можно поднять свой узел, добавить сюда знакомых и близких, настроить закрытое общение внутри одной ноды. При этом, нет логов, настройка администратором узла позволяет удалять новости, не доставленные файлы из защищённого внутреннего хранилища по таймауту или принудительно. Есть возможность создавать бэкап связей зашифрованном виде. Это не хранение файлов и перепиской, это хранение связей в виде ID клиентов и узлов.

При этом узлы способны выполнять несколько задач:

  • Передавать сообщения, файлы и сигналы звонков.

  • Помогать устройствам, находящимся за NAT.

  • Предоставлять выход в интернет, если владелец это разрешил.

  • Строить маршруты через несколько промежуточных участников.

  • Обмениваться сведениями о доступности и возможностях других узлов.

Главная идея здесь — разделить владение инфраструктурой и использование сети. Не каждый пользователь обязан держать собственный сервер. Но у него должна быть такая возможность.

Архитектура: узел как самостоятельная единица сети

Ядро YANDI написано на Rust. Основной исполняемый файл yandi объединяет сетевой транспорт, криптографию соединений, маршрутизацию, управление узлом и прикладные функции.

В архитектуре выделены несколько уровней:

  1. Транспортный уровень. Устанавливает соединения между узлами, передаёт данные, обрабатывает повторные передачи и ограничения сети.

  2. Сетевой уровень. Отвечает за обнаружение участников, сведения об их доступности, выбор выходных узлов, ретрансляцию и построение цепочек.

  3. Криптографический уровень. Защищает соединения между участниками и проверяет подлинность сетевых сообщений.

  4. Прикладной уровень. Обеспечивает переписку, передачу файлов, группы, звонки и работу пользовательских приложений.

В проекте также есть собственный транспортный протокол YTP, использующий модель «поездов и вагонов»: данные разбиваются на части, передаются с контролем порядка, повторными запросами и регулированием скорости. Это позволяет развивать сетевой транспорт независимо от прикладных функций.

Обнаружение узлов

Для начала, новой ноде нужно узнать хотя бы об одном существующем участнике. В YANDI для этого используется подписанный список входных узлов — bootstrap. После подключения, узлы обмениваются подписанными карточками. В них содержатся сведения о сетевой доступности и возможностях участника. Далее сеть может распространять эти сведения между соседями. Здесь есть важная деталь: получить карточку ещё не означает доверять заявленной доступности узла. В проекте предусмотрена проверка обратным подключением. Узел должен подтвердить, что по объявленному адресу действительно можно установить соединение. Для распределённого хранения и поиска сетевых сведений используется DHT на основе Kademlia. Таким образом, bootstrap нужен для первоначального входа, а последующее обнаружение участников опирается на обмен сведениями между самими узлами. При этом зависимость от начального списка пока остаётся одним из архитектурных вопросов. Подписанный bootstrap защищает от подмены списка, но сам по себе не делает первоначальное обнаружение полностью независимым.

Связь узлов и шифрование

Для защиты соединений используется комбинация криптографических механизмов:

  • X25519 — согласование ключевого материала.

  • HKDF — вывод ключей.

  • AES-256-GCM — шифрование с проверкой целостности.

  • Счётчики и окна защиты от повторного воспроизведения пакетов.

Для новых рукопожатий используются свежие ключи. Важно различать два понятия: шифрование отдельного сетевого соединения и сквозное шифрование между конечными пользователями. Это не одно и то же. Шифрование между узлами защищает данные на соответствующем участке маршрута. Но из него автоматически не следует, что содержимое недоступно всем промежуточным участникам на всём пути.

В мобильном приложении реализована сквозная защита общения между устройствами. При этом полноценный асинхронный E2E‑слой между узлами, включая защищённую офлайн‑доставку и дальнейшее развитие управления ключами, ещё находится в проектировании. Я считаю важным прямо обозначать эту границу, а не объединять все механизмы одним словом «шифрование».

Проксирование трафика в интернет

Одна из интересных возможностей YANDI — использование других участников сети в качестве точек выхода в интернет. Пользователь находится в одной стране, а доступный узел — в другой. Если владелец удалённого узла разрешил предоставлять выход, пользователь может направить через него определённый трафик. Для локальных приложений предусмотрен интерфейс SOCKS5. В проекте реализованы два основных варианта маршрутизации.

Быстрый режим

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

Многозвенный режим

Пользователь → Входной узел → Промежуточный узел → Выходной узел → Интернет

Для таких цепочек используется послойное шифрование. В рамках модели предполагается разделение знаний об участниках маршрута: входной узел знает отправителя, выходной — конечное направление, а промежуточный выполняет пересылку. НО! Важно не путать такую архитектуру с доказанной анонимностью. Даже правильно реализованное послойное шифрование не устраняет все возможности анализа трафика. Наблюдатель, контролирующий достаточно большую часть сети, может сопоставлять соединения по времени, объёму и другим признакам.

Децентрализованная сеть не должна означать, что любой участник обязан бесконтрольно обслуживать чужой трафик.

В YANDI владелец определяет политику предоставления выхода:

  • Никому.

  • Только доверенным узлам.

  • Всем участникам.

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

Как поживают NAT устройства?

Сеть, рассчитанная только на серверы с открытыми портами, была бы слишком ограниченной. В YANDI предусмотрена работа через ретрансляторы. Устройство за NAT может поддерживать соединения с доступными узлами и публиковать подписанную запись о том, через каких ретрансляторов с ним можно связаться. Другим участникам не обязательно устанавливать прямое входящее соединение с этим устройством. Это особенно важно для телефонов, домашних компьютеров и сетей, в которых пользователь не управляет маршрутизатором.

Общение между людьми

Сетевой транспорт — это только фундамент. Поверх него YANDI развивает пользовательские функции: чаты, группы, передачу файлов и звонки.

Для телефонов существует приложение на Flutter. Есть и настольная оболочка. При первоначальном подключении собственного телефона используется сопряжение с узлом через QR‑код или специальную строку. Приложение закрепляет TLS‑сертификат узла, чтобы последующие подключения могли проверять его подлинность.

Система также предусматривает приглашения новых пользователей и разграничение ролей: администратора, пользователя и гостя.

Хотелось уйти от служб и платформ в которых участие, обязательно начинается с регистрации аккаунта на чужом сервере и с предоставления информации. Вместо этого, пользователь может опираться на собственный узел и отношения доверия с другими участниками.

Проверяемость

При разработке сетевого программного обеспечения недостаточно сказать: «всё защищено». Нужно понимать, что именно проверяется и какие свойства система действительно обеспечивает. Поэтому в YANDI есть автоматические тесты, проверки протокольных инвариантов, тренировочная сеть и испытания на нескольких реальных процессах. Например, локальную тренировочную сеть из трёх узлов можно поднять командами:

yandi testnet up 3
yandi testnet status
yandi testnet down

Это не заменяет испытаний в реальных сетевых условиях, но позволяет воспроизводить взаимодействие нескольких участников и проверять поведение транспорта. Отдельное внимание уделено поставке программного обеспечения. Выпуски сопровождаются подписанными манифестами, содержащими контрольные суммы файлов. Используется Ed25519, а также механизм защиты от отката на более старую версию, что даёт возможность проверять не только сам сетевой протокол, но и происхождение устанавливаемого пакета.

Что уже работает, а что пока нет

Сейчас YANDI — не концепт на бумаге. Реализованы узел на Rust, обмен данными между участниками, клиентские приложения, SOCKS5-выход через другие узлы, многозвенные маршруты, ретрансляция для клиентов за NAT и механизмы подписанного обнаружения.

Существенные ограничения.

Во‑первых, независимого аудита безопасности ещё не проводилось. Наличие криптографических алгоритмов и тестов не означает отсутствия уязвимостей в их применении.

Во‑вторых, сеть пока небольшая. Отдельные механизмы испытаны на трёх‑четырёх узлах, но это не эквивалент проверки большой распределённой сети с множеством независимых операторов.

В‑третьих, защита метаданных остаётся неполной. Некоторые участники могут узнавать сведения о присутствии и активности других участников.

В‑четвёртых, асинхронная сквозная защита сообщений между узлами ещё требует реализации.

В‑пятых, сетевой транспорт нужно продолжать испытывать в условиях нестабильных каналов и ограничений UDP. Для таких ситуаций запланировано дальнейшее развитие резервных путей связи.

Эти ограничения перечислены умышленно. В проектах, связанных с приватностью, необходимо всё перепроверять множество раз! Даже широко используемое программное обеспечение с многолетней историей разработки не застраховано от критических уязвимостей.

Как попробовать

Репозиторий проекта:

https://github.com/ispolkom/node

Сайт с установочными пакетами и инструкциями:

https://yandi.su/ru/network/

Для Debian 12 предусмотрен пакет узла, который можно установить локально:

sudo apt install ./yandi-node_*.deb

Первичная настройка выполняется от обычного пользователя:

yandi setup

После этого узлом можно управлять из консоли:

yandi admin

Для работы в сети потребуются соответствующие настройки доступности и портов. Они описаны в документации проекта. Исходный код доступен под лицензией MIT.

Повторю предупреждение: пока это тестовая система. Не стоит использовать её в ситуациях, когда ошибка программного обеспечения может поставить под угрозу безопасность человека.

Что дальше?

YANDI — прежде всего исследование того, как может выглядеть инфраструктура связи, принадлежащая самим участникам — не один большой сервер, через который проходит всё взаимодействие, а сеть самостоятельных узлов. Каждый участник контролирует собственные ресурсы. Узлы находят друг друга, обмениваются сведениями, помогают устанавливать соединения и могут предоставлять маршруты. При этом сложность никуда не исчезает. Её приходится решать на уровне протоколов, криптографии, обнаружения, сетевой доступности, доверия и безопасности.

YANDI ещё не решает всех проблем централизованной связи. Но исследовать архитектуры, в которых пользователь может быть не только клиентом, но и владельцем собственной части сети, нужно было ещё вчера.

Буду рад технической критике, особенно по вопросам транспорта, маршрутизации, криптографических границ доверия, защиты метаданных и устойчивости сети к недобросовестным участникам.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.