Что такое Reticulum?

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

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

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

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

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

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

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

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

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

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

Код на языке Python, для которого написана данная документация и известный как Reticulum Network Stack, является эталонной реализацией Reticulum. Протокол Reticulum полностью и авторитетно определяется данной эталонной реализацией и настоящим руководством.
Его поддерживает Марк Квист (Mark Qvist), с идентификатором в сети 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 или локальную Wi‑Fi сеть — он будет работать так же эффективно. Фактически, одной из сильных сторон Reticulum является то, как легко он позволяет соединять разные среды в самонастраивающуюся, устойчивую и зашифрованную mesh‑сеть.

В качестве примера можно настроить Raspberry Pi, подключённый одновременно к LoRa‑радио, пакетному радиомодулю TNC и Wi‑Fi сети. После добавления этих интерфейсов Reticulum позаботится обо всём остальном, и любое устройство в Wi‑Fi сети сможет обмениваться данными с узлами на LoRa и пакетного радио, и наоборот.

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

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

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

    • Wi‑Fi‑устройства

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

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

    • Радиомодули передачи данных с Ethernet‑портами

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

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

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

    • Идеально подходит для радиостанций VHF и UHF

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

  • Сеть I2P

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

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

  • Любой интерфейс, доступный через stdio

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

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

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

  • Любое другое решение, использующее кастомные интерфейсные модули, написанные на Python

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