Что такое Reticulum?

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

Чтобы понять основополагающую философию и цели этой системы, прочтите раздел Дзен Reticulum.

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

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

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

Reticulum — это полный сетевой стек, не нуждающийся в IP‑протоколах или более высоких уровнях, хотя его легко использовать поверх IP (с TCP или UDP) в качестве базового канала для Reticulum. Поэтому Reticulum легко туннелировать через Интернет или частные IP‑сети. Reticulum построен непосредственно на криптографических принципах, что обеспечивает отказоустойчивость и стабильную работу в открытых сетях без доверия.

Не требуется никаких модулей ядра или драйверов. Reticulum может полностью работать в пользовательском пространстве и будет работать практически на любой системе, где запущен Python 3. Reticulum хорошо работает даже на маленьких одноплатных компьютерах, таких как Pi Zero.

Текущий статус

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

Эталонная реализация

Код на Python, для которого написана эта документация и который известен как Сетевой Стек Reticulum, является Эталонной Реализацией Reticulum. Протокол Reticulum полностью и авторитетно определяется этой эталонной реализацией и данным руководством. Он поддерживается Марком Квистом, идентифицируемым по идентификатору Reticulum <bc7291552be7a58f361522990465165c>.

Реализация считается совместимой с протоколом Reticulum, если она полностью взаимодействует с эталонной реализацией и обеспечивает те же основные функции. Если оба условия выполнены — реализация является Reticulum. Любая, которая этого не делает, не является Reticulum.

Эталонная реализация лицензирована в соответствии с Лицензией Reticulum.

Протокол Reticulum был передан в общественное достояние в 2016 году.

Что предлагает Reticulum?

  • Глобально уникальная адресация и идентификация без координации

  • Полностью самонастраивающаяся многозвенная маршрутизация по гетерогенным сетям

  • Гибкая масштабируемость в гетерогенных топологиях

    • Reticulum может передавать данные через любое сочетание физических сред и топологий

    • Сети с низкой пропускной способностью могут сосуществовать и взаимодействовать с большими высокоскоростными сетями

  • Анонимность инициатора: общайтесь, не раскрывая свою личность

    • Reticulum не включает адреса источников ни в один пакет

  • Асимметричное шифрование X25519 и подписи Ed25519 в качестве основы для всей связи

    • Основные идентификационные ключи Reticulum представляют собой наборы ключей эллиптической кривой длиной 512 бит

  • Прямая секретность доступна для всех типов связи, как для отдельных пакетов, так и для каналов связи

  • Reticulum использует следующий формат для зашифрованных токенов:

    • Эфемерные ключи для каждого пакета и соединения, полученные в результате обмена ключами ECDH на кривой Curve25519

    • AES-256 в режиме CBC с заполнением PKCS7

    • HMAC с использованием SHA256 для аутентификации

    • IV генерируются через os.urandom()

  • Не подделываемые подтверждения доставки пакетов

  • Гибкая и расширяемая система интерфейсов

    • Reticulum включает широкий набор встроенных типов интерфейсов

    • Возможность загружать и использовать пользовательские или предоставленные сообществом типы интерфейсов

    • Легко создавайте собственные интерфейсы для связи по любому каналу

  • Аутентификация и сегментация виртуальной сети на всех поддерживаемых типах интерфейсов

  • Интуитивно понятный и простой в использовании API

    • Проще и легче в использовании, чем API‑интерфейсы сокетов, и при этом более мощный

    • Значительно упрощает создание распределённых и децентрализованных приложений

  • Надёжная и эффективная передача произвольных объёмов данных

    • Reticulum может обрабатывать как несколько байт данных, так и файлы размером во много гигабайт

    • Секвенирование, сжатие, координация передачи и автоматический контроль контрольных сумм

    • API очень прост в использовании и предоставляет информацию о ходе передачи

  • Легковесный, гибкий и расширяемый механизм Запрос/Ответ

  • Эффективное установление соединения

    • Общая стоимость установки зашифрованного и проверенного соединения составляет всего 3 пакета, в сумме 297 байт

    • Низкая стоимость поддержания соединения открытым — всего 0,44 бита в секунду

  • Надёжная последовательная доставка с помощью механизмов Канал и Буфер

Где можно использовать Reticulum?

Практически в любой среде, способной поддерживать как минимум полудуплексный канал с пропускной способностью более 5 бит в секунду и MTU ≈ 500 байт. Радиомодемы, модемы, LoRa, последовательные линии, AX.25 TNC, цифровые режимы любительской радиосвязи, ad-hoc WiFi, беспроводные оптические линии связи и подобные системы — всё это примеры типов интерфейсов, для которых был разработан Reticulum.

Интерфейс на основе LoRa с открытым исходным кодом под названием RNode был разработан как пример трансивера, который очень хорошо подходит для Reticulum. Его можно собрать самостоятельно, превратив обычную плату разработки LoRa в такой трансивер, либо купить готовый трансивер у различных поставщиков.

Reticulum также может быть инкапсулирован поверх существующих IP-сетей, поэтому ничто не мешает использовать его через проводной Ethernet или локальную WiFi-сеть, где он будет работать так же эффективно. На самом деле, одной из сильных сторон Reticulum является то, как легко он позволяет объединять различные среды в самонастраивающуюся, отказоустойчивую и зашифрованную mesh-сеть.

В качестве примера, можно настроить Raspberry Pi, подключённый одновременно к LoRa‑радио, пакетному радиомодулю TNC и WiFi-сети. Как только интерфейсы будут добавлены, Reticulum позаботится обо всём остальном, и любое устройство в WiFi-сети сможет общаться с узлами в LoRa и пакетной радиосети, и наоборот.

Типы интерфейсов и устройства

Reticulum реализует ряд обобщённых типов интерфейсов, охватывающих коммуникационное оборудование, поверх которого может работать Reticulum. Если ваше оборудование не поддерживается, легко реализовать класс интерфейса. В настоящее время Reticulum может использовать следующие устройства и среды связи:

  • Любое устройство Ethernet

    • Устройства WiFi

    • Проводные устройства Ethernet

    • Оптоволоконные трансиверы

    • Радиомодемы с портами Ethernet

  • LoRa с использованием RNode

  • Пакетные радиомодемы (TNC), такие как OpenModem

    • Любой TNC для пакетной радиосвязи в режиме KISS

    • Идеально подходит для УКВ и УВЧ радио

  • Любое устройство с последовательным портом

  • Сеть I2P

  • TCP поверх IP-сетей

  • UDP поверх IP-сетей

  • Всё, что можно подключить через stdio

    • Reticulum может использовать внешние программы и каналы (pipe) в качестве интерфейсов

    • Это можно использовать для лёгкого создания виртуальных интерфейсов

    • Или для быстрого создания интерфейсов с нестандартным оборудованием

  • Что-либо ещё с помощью пользовательских модулей интерфейсов, написанных на Python

Полный список и более подробную информацию см. в главе Поддерживаемые интерфейсы.