Что такое 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
Может быть установлен на многие популярные платы LoRa
Может быть приобретён как готовый к использованию трансивер
-
Пакетные радиомодемы (TNC), такие как OpenModem
Любое устройство с последовательным портом
Сеть I2P
TCP поверх IP-сетей
UDP поверх IP-сетей
-
Всё, что можно подключить через stdio
Reticulum может использовать внешние программы и каналы (pipe) в качестве интерфейсов
Это можно использовать для лёгкого создания виртуальных интерфейсов
Или для быстрого создания интерфейсов с нестандартным оборудованием
Что-либо ещё с помощью пользовательских модулей интерфейсов, написанных на Python
Полный список и более подробную информацию см. в главе Поддерживаемые интерфейсы.