Scuttlebutt — сленговое слово, распространённое среди американских моряков, обозначающее слухи и сплетни. Node.js разработчик Доминик Тарр, живущий на паруснике у берегов Новой Зеландии, использовал это слово в названии p2p сети, предназначенной для обмена новостями и личными сообщениями. Secure Scuttlebutt (SSB) позволяет делиться информацией, используя лишь эпизодический доступ к сети Интернет или даже при полном его отсутствии.

SSB работает уже несколько лет. Функции социальной сети можно протестировать при помощи двух настольных приложений (Patchwork и Patchfoo) и приложения для Android (Manyverse). Для гиков есть ssb-git. Вам интересно как работает offline-first p2p сеть без рекламы и без регистрации? Прошу под кат.



Для функционирования Secure Scuttlebutt достаточно двух компьютеров, соединённых в локальную сеть. Приложения на основе протокола SSB рассылают широковещательные UDP сообщения и смогут автоматически найти друг друга. Поиск узлов в Интернет немного сложнее, и к этому вопросу мы вернёмся через несколько абзацев.

Учётная запись пользователя представляет собой связный список всех его записей (журнал). Каждая последующая запись содержит хеш предыдущей и подписывается закрытым ключом пользователя. Открытый ключ является идентификатором пользователя. Удаление и редактирование записей невозможно ни самим автором, ни кем-то ещё. Владелец может добавлять записи в конец журнала. Остальные пользователи — читать его.

Приложения, находящиеся в одной локальной сети, видят друг друга и автоматически запрашивают у соседей обновления в интересующих их журналах. Не имеет значения, с какого именно узла вы скачиваете обновление, т.к. подлинность каждой записи вы можете проверить при помощи открытого ключа. При синхронизации не происходит обмена какой-либо личной информацией кроме открытых ключей интересующих вас журналов. По мере того, как вы будете переключаться между разными WiFi/LAN сетями (дома, в кафе, на работе), копии сохранённых у вас локально журналов будут автоматически передаваться на устройства других пользователей, находящихся с вами рядом. Это похоже на то как работает «сарафанное радио»: Вася рассказал Маше, Маша — Пете, а Петя — Валентине. Существенное отличие от «сарафанного радио» в том, что при копировании журналов информация в них не искажается.

«Быть у кого-то в друзьях» здесь приобретает конкретный физический смысл: мои друзья хранят копию моего журнала. Чем больше у меня друзей, тем доступнее мой журнал для других. В описании прокола написано, что приложение Patchwork синхронизирует журналы, находящиеся на расстоянии до 3 шагов (друзья друзей друзей) от вас. В большинстве случаев это позволяет читать длинные дискуссии со множеством участников, находясь в оффлайне.

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

Secure Scuttlebutt не первая p2p сеть и даже не первая p2p социальная сеть. Стремление общаться без посредников и выйти из сферы влияния больших компаний существует давно, и у него есть несколько очевидных причин. Пользователей раздражает навязывание крупными игроками правил игры: мало кто хочет видеть на своём экране рекламу или быть забаненным и ждать несколько дней ответа от службы поддержки. Бесконтрольный сбор личных данных и передача их третьим лицам, приводящая, в конечном итоге, к тому, что эти данные иногда продаются в даркнете, снова и снова напоминает о необходимости построения других способов взаимодействия, где пользователь получал бы больший контроль над своими данными. И сам бы нёс ответственность за их распространение и сохранность.

Хорошо известные децентрализованные социальные сети, такие как Diaspora или Mastodon, и протокол Matrix не являются одноранговыми, поскольку в них всегда есть клиентская и серверная часть. Вместо общей базы данных Facebook вы можете выбрать ваш «домашний» сервер, на котором будут размещены ваши данные, и это уже большой шаг вперёд. Однако, у администратора вашего «домашнего» сервера всё ещё есть много возможностей: он может делиться вашими данными без вашего ведома, удалять или блокировать вашу учётную запись. Кроме того, он может потерять интерес к поддержке сервера и не предупредить об этом вас.

В Secure Scuttlebutt тоже есть узлы-посредники облегчающие синхронизацию (они называются «пабы»). Однако использование пабов опционально, а сами они — взаимозаменяемы. Если привычный вам узел недоступен, вы можете воспользоваться другими, ничего не потеряв, поскольку полная копия всех ваших данных всегда у вас. Узел-посредник не хранит невосполнимых данных. Паб, если вы его попросите, добавит вас в друзья и при соединении будет обновлять свою копию вашего журнал. Когда с ним соединятся ваши подписчики, они смогут загрузить ваши новые записи, даже если вы уже отключились. Для того, чтобы паб стал с вами дружить, вы должны получить инвайт у администратора паба. Чаще всего это можно сделать самостоятельно через веб-интервейс (список пабов). Если вы получите бан у всех администраторов пабов, то ваш журнал будет распространяться описанным ранее способом, т.е. только среди тех, с кем вы встречаетесь лично. Передача обновлений на флешке тоже возможна.

Хотя сеть работает довольно давно, в ней немного людей. По подсчётам Andre Staltz, разработчика Android-приложения Manyverse, в июне 2018 в его локальной базе было около 7 тысяч ключей. Для сравнения, в Diaspora — более 600 тысяч, в Mastodon — около 1 миллиона.



Инструкция для начинающих находится здесь. Основные шаги: установить приложение, создать профиль, получить инвайт на сайте паба, скопировать этот инвайт в приложение. Можно подключать несколько пабов одновременно. Нужно будет запастись терпением: сеть работает намного медленнее, чем Facebook. Локальный кеш (папка .ssb) быстро вырастет до нескольких гигабайт. Интересные посты удобно искать по хеш-тегам. Начинать читать можно, например, с Доминика Тарра ( @EMovhfIrFk4NihAKnRNhrfRaqIhBv1Wj8pTxJNgvCCY=.ed25519 ).

Все изображения — из статьи Andre Staltz «An off-grid social network» и его твиттера.

Полезные ссылки:

[1] Официальный сайт

[2] Patchwork (приложение для Windows/Mac/Linux)

[3] Manyverse (приложение для Android)

[4] ssb-git

[5] Описание протокола («Scuttlebutt Protocol Guide — How Scuttlebutt peers find and talk to each other»)

Комментарии (13)


  1. olegshutov
    25.04.2019 22:06
    +5

    Так вот он какой — гипертекстовый векторный фидонет!


  1. Ascar
    25.04.2019 22:22

    Сколько места занимает на диске?


    1. ton1
      26.04.2019 09:43

      Места занимает — сколько подпишешься. Чем больше друзей и чем толще их журналы… ~4gb примерно у меня щас. Но бОльшую долю базы занимают аттачи — картинки и т.д. а т.к. они опциональны — их можно прибить, а запрашиваться из сети они повторно будут только по мере листания постов до их расположения. По идее напрашивается некая логика автозачистки аттачей, но пока — вручную.
      Примерно такая же ситуация с жором места в twister. Да и в большинстве других бессерверных систем.

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

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


  1. diomas
    26.04.2019 00:04

    как и в других чистых p2p сетях проблема в том что невозможно использовать один и тот же аккаунт на разных устройствах одновременно


    А секреты (айдентити или что там) в patchwork и в manyverse вообще не совместимы. Даже если предположить, что десктоп и мобильник будут использоваться строго по очереди, нет возможности сгенерировать аккаунт на мобильном и сконвертировать его для десктопа или наоборот.


    1. dmbreaker
      28.04.2019 18:26

      Это не проблема p2p, а проблема реализаций. Достаточно подписывать ключи устройств по аналогии с https и центрами сертификации.


  1. Foxcool
    26.04.2019 08:32

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


    1. istepan
      26.04.2019 08:57

      И чтоб работало без интернета. По bluetooth или WiFi.


      1. Dragonair
        26.04.2019 11:11

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


  1. Sjam
    26.04.2019 08:53
    +1

    ZeroNET попроще будет, функциональнее


    1. MaxShvedov
      26.04.2019 12:38
      +1

      Довольно забавно, что сайт проекта хостится на VULTR, а не собственно на ZeroNET.


  1. ThunderCat
    26.04.2019 12:58
    +3

    голдед, тмайл и партосс поставил, прозвоh сделал, софт настроеh, прошу дать поиhта.


    1. questor
      26.04.2019 19:29

      Плюс поставил, но зануда напоминает, что проблемы были с заглавной "":

      «ХОЧУ ОДУ! СОФТ АСТРОЕ! Е ЛАМЕР!»

      И ещё у вас ус отклеился должно быть «hастроеh».

      PS Привет пойнтам 2:5055/125 :)


  1. stargrave2
    28.04.2019 17:56

    Вот ещё есть отечественный проект по теме подобных сетей: NNCP (http://www.nncpgo.org/Ob-utilitakh.html). Store-and-forward помощник, дружелюбен к offline-у. habr.com/ru/post/330712