Soty

Релеи

Доставка, когда собеседник офлайн

Релей — обычная программа на чужом сервере. Она держит шифрованный конверт, пока получатель не появится в сети, и помогает устройствам найти друг друга. Текста она не видит.

Релеи не обязательны для mesh и прямых соединений. Это страховка на время офлайна.

Три роли одного узла

Один процесс умеет и ждать, и знакомить, и договариваться с другими узлами.

Офлайн-буфер

Конверт для отсутствующего получателя ждёт на узле и уходит, как только устройство подписывается.

Трекер

Узел отвечает, кто сейчас онлайн, и выдаёт адреса. Дальше устройства соединяются напрямую, минуя релей.

Федерация

Узлы обмениваются накопленным: живой релей плюс анти-энтропия. Конверт не теряется, если один узел ушёл в офлайн.

Узел не расшифровывает конверты и не хранит ключи. Всё, что он умеет, — принимать, проверять подпись, хранить и пересылать.

Публичные узлы проекта

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

Relay 1

Публичный узел
WebSocket
Ed25519
Ссылка-приглашение

Relay 2

Публичный узел
WebSocket
Ed25519
Ссылка-приглашение

Узлы работают без SLA и могут быть недоступны. Приложение это переживёт: сообщения пойдут через mesh или прямое соединение, а конверт останется у отправителя.

Подключить свой узел

Узел добавляется вручную — приложение не подставляет адреса незаметно.

  1. 1

    Откройте настройки

    В Soty: «Настройки → Ретрансляционные хосты → Добавить ретрансляционный хост».

  2. 2

    Вставьте ссылку

    Баннер узла печатает soty://host?addr=…&pk=… — приложение проверит ключ при подключении.

  3. 3

    Или введите вручную

    Адрес ws:// или wss:// и Ed25519-ключ отдельно. Ключ обязателен: без него узел не считается доверенным.

  4. 4

    Проверьте статус

    В списке появится «Подключено». Отключённый узел можно заменить, не удаляя остальные.

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

Свой узел за пять минут

Один бинарник, один файл SQLite и открытый порт. Инструкция с командами и systemd — в разделе установки.

Инструкция для узла

Для постоянной работы есть deploy/deploy-host.sh: systemd-user, systemd-system, supervisor или nohup, плюс nginx и проверка ключа.

Федерация: узлы договариваются сами

Хосты не ищут друг друга автоматически: список пиров задаёт оператор. Зато внутри списка работает анти-энтропия.

Soty A
Relay 1
--peer ↔
Relay 2
Soty B

Топология — на усмотрение оператора: полный меш, кольцо или хаб с периферией.

Симметричные пиры

Каждый узел указывает остальных флагом --peer. Без обратной ссылки сообщение дойдёт только в одну сторону.

Пин ключа

В --peer можно передать Ed25519-ключ. Если WELCOME вернёт другую личность, соединение рвётся.

Анти-энтропия

После реконнекта узлы обмениваются WANT → HAVE → GET → ENVELOPES и догоняют пропущенное.

Потолок хопов

Дальше трёх хопов конверт не пересылается. На практике держите путь до получателя в 2–3 узла.

Что остаётся видимым

Релей не читает текст, но видит сам факт доставки. Это не баг, а цена офлайн-буфера.

Только шифртекст

Конверт проверяется по подписи и идентификатору, но не расшифровывается.

Псевдонимы

Отправитель и получатель видны как публичные ключи. Имена и адресная книга остаются на устройстве.

Время и объём

По метаданным можно анализировать активность. Для чувствительных сценариев используйте mesh или прямое соединение.

Пиннинг

Клиент помнит Ed25519-ключ узла. Подменить узел по дороге нельзя без смены ключа.

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

Держите доставку под своим контролем

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