М.Двач / Криптоанархия

139 Кб, 700x394
Сеть HIVE 2 ноя 2021, 08:51 48168 В конец треда | Веб

Я придумал p2p-аналог интернетов, который относительно не трудно реализовать. Сеть не нужно настраивать (zeroconf), и является юзерфрендли.
> Зачем?
На криптаче такие глупые вопросы не задают.
> Чем лучше аналогов?
У каждой скрытосети свои плюсы и минусы. Эта сеть - просто еще одна альтернатива.

Предлагаю обсудить проект, и может присоединиться к его разработке.

Начнем рассматривать с самого высокого уровня сети - обычного пользователя сети (не программиста):
1. Юзер скачивает пакет.
2. Устанавливает.
3. Происходит магия.
4. Заходит в браузер.
5. Набирает hive:410/test.p2p
6. Заходит на сайт.

Когда заходит просто на hive:410 - открывает домашнюю страницу проекта с менеджером файлов и прочими настройками и интересностями.

Опускаемся ниже : уровень данных.

Как вообще выглядит Hive? Представьте себе кучу файлов имеющих фактический адрес (хеш). К любому файлу обраться по адресу hive:410/${hash}. Но для удобства использования сети, мы можем называть файлы человекочитаемыми именами. Делается это с помощью HNS (Hive NameSpace) - распределенной хештаблицы.
К примеру, программист создал html-файл, и создал в HNS запись что к данному файлу можно обратиться по "example.hive" и подписал запись.

Заметили? Здесь нет концепции "сайта" как некой папки с файлами. Все файлы сети находятся в куче и нет разделения между сайтами.
Программист создает папку с проектом и специальная утилита загружает все файлы проекта в "кучу" подписывая в HNS файлы как {"test.p2p/js/main.js": "==Hxkdhiei6473...", к примеру. Обращаться можно как публичному имени, так и по хешу. Хеш удобен в случае медиаконтента, публичное имя удобно в случае рабочих файлов проекта (скриптов, баз данных и тд).
Хеш публичного имени можно заменить.

Само API улия убийственно простое:
1. GET hive:410/${hash|pubname} - запросить файл по имени или хешу.
2. POST hive:410 - отправить файл в кучу.
3. PUT hive:410/${pubname} - обновить запись в HNS (доказав, что владелец записи). Либо создать запись.
4. DELETE hive:410/${hash|pubname} - в случае с публичным именем - удаляет запись. В случае хеша - удаляет файл в локальной куче пользователя.

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

Еще ниже, уровень пиров:
В Hive используется IPv6. Понятное дело, пользователей с IPv6 по пальцам пересчитать, потому используем костыль Miredo/Teredo, идущий как зависимость пакета. Miredo не требует к конфигурации, оно просто устанавливается вместе с пакетом и дает тебе IPv6 без какой-либо задней мысли.

На это уровне так же есть DHT включающий все пиры в сети.

Как получить Peer DHT если ты в первый раз зашел в сеть? Через публичные пиры, работающие на постоянной основе. Они либо будут прописаны в конфиге изначально, либо надо будет искать на Github список публичных пиров и прописывать их в конфиге ручками, как это надо делать с Yggdrasil.

hive:410 как вы уже поняли представляет собой локальный http-сервер.

Когда клиент запустился, он пытается обновить все свои DHT.

Когда юзер пытается получить файл, сервер смотрит в DHT и ищет там у кого можно этот файл взять, и обращается к ним. Файл скачивается, и юзер начинает раздавать его другим. Он отправляет всем другим юзерам весть о том, что этот файл можно найти у него.

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

Когда юзер обновляет запись в HNS он подписывает изменения и вещает об этом. Другие пользователи проверяют изменения и в случае мутной хуйни отклоняют изменения в локальной NHS.

Тоже самое происходит при удалении записи, правда, запись не пропадает бесследно, вместо нее появляется запись с тем же адресом, но вместо хеша - сообщение о том, что запись удалена подпись владельца(ов) записи.

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

И так немного по вопросам к реализации непосредственно опытным криптачерам:
Стоит ли писать сервер сразу на bash? Меньше зависимостей будет. Правда, теряется кроссплатформенность. Но над ней в принципе придется поработать в любом случае.

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

Как лучше организовать броадкаст по сети? Не будешь же ко всем пирам (их и тысячи могут быть) в сети подключаться. Предлагаю распространять "волной": передаешь запись трем пирам, каждый из них перепадает еще трем и так по всей сети.

Как лучше всего получать новые DHT при запуске клиента (особенно при первом)? Не доверять же первому встречному пиру.

Как лучше передавать файлы? Искать у случайного владельца файла и качать целиком, или скачивать у всех но порциями (как в торрентах)?

мимо ламер

Ответы171

2 2 ноя 2021, 09:08 2 48169

Понять вещь проще, если есть аналогия.

Hive можно сравнить с некой круглой площадью вместе с людьми.

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

У каждого члена круга есть папочка с файлами, который он готов хранить и распространять. Так же есть несколько книжек:
1. Книжка о том, кто какие файлы хранит.
2. Книжка человекочитаемых названий некоторых файлов.
3. Книжка с именами всех посетителей круга.

Люди постоянно обновляют записи и проверяют друг друга на мухлеж.

Надеюсь, объяснил понятным образом.

3 2 ноя 2021, 23:36 3 48171

>>48168 (OP)
У этой сети есть какие-то преимущества перед ZeroNet и другими p2p хостингами? Пока что кажется, что тут ничего нового нет.

Ответы174

4 3 ноя 2021, 11:44 4 48174

>>48171
> У этой сети есть какие-то преимущества перед ZeroNet и другими p2p хостингами?
Таки есть. DNS over DHT. Напомню в других скрытосетях DNS либо нет, либо они анальные.
Ну, Hive вдохновлен многими уже существующими сетями. "Куча файлов" - из IPFS, IPv6 - из Yggdrasil (отсюда - высокая скорость сети, по сравнению другими сетями, сравнимая с Yggdrasil).

5 3 ноя 2021, 13:57 5 48175

Допустим, я хочу не просто захостить статичную страницу, а сделать в данной сети некий сайт с динамичными данными, например, борду. Соответственно, должна быть некая БД, в которой хранятся посты.
Как гарантировать консистентность данных? Возможное решение - сделать транзакции в базу на блокчейне, в таком случае необходим свой транслятор для генерации конечного файла БД из цепочки, а чтение и запись можно делать напрямую в JS, но плохо, что появится задержка появления данных равная времени генерации блока, хотя можно сделать время генерации от одной минуты до бесконечности, чтобы не было пустых блоков без транзакций. Может, есть и другой вариант?

И второе: судя по ОП-посту в сети анонимность на уровне торрентов, то есть любой пир будет видеть, что ты на себе хостишь, а прикручивание слоёв очень сильно замедлит сеть, сужу по своему опыту с I2PSnark.

Ответы176

# OP 6 3 ноя 2021, 14:56 6 48176

>>48175
> Допустим, я хочу не просто захостить статичную страницу, а сделать в данной сети некий сайт с динамичными данными, например, борду. Соответственно, должна быть некая БД, в которой хранятся посты.
Я предлагаю использовать уже встроенные в систему броадкастинг. Мы отправляем ивент совладельцам сайта, они решают добавлять данные в БД или нет. Так я делал распределенные DB по WebRTC. Тема рабочая и проверенная.

> И второе: судя по ОП-посту в сети анонимность на уровне торрентов
"Анонимность не являются принципиальной задачей для нас. Нужна анонимность - заходите в сеть через Tor."
Yggdrasil, ZeroNet ©

Постим также, зачем создавать велосипед.

Ответы177

7 3 ноя 2021, 15:11 7 48177

>>48176
Кто является совладельцем сайта? Скорее всего изначально тебя не понял, думал, что по аналогии с битторрентом любой пользователь для посещения сайта должен его скачать и встать на раздачу.
И по аналогии додумал следующее: так как я могу создать торрент-файл, встать на раздачу, дать другим людям его скачать, а затем уйти, файл останется доступен, значит то же самое я должен иметь возможность делать с сайтом. Единственное, что имеет только создатель - редактирование DNS записей.

Ответы178

# OP 8 3 ноя 2021, 16:07 8 48178

>>48177
> Кто является совладельцем сайта?
Фактически, любой кто зашел на сайт.
> битторрентом любой пользователь для посещения сайта должен его скачать и встать на раздачу.
Да, ты понял верно.

> Единственное, что имеет только создатель - редактирование DNS записей.
Да, здесь имеется разный уровень прав.

Ответы179

9 3 ноя 2021, 16:34 9 48179

>>48178
Понял. Только что будет представлять из себя проверка на корректность данных? В БД можно только писать, а вот удалять и изменять нельзя?

Есть какие-либо наработки, помимо написанного в треде?
Хотел бы помочь с реализацией в свободное время, правда с p2p сетями никогда не работал.

Ответы180

# OP 10 3 ноя 2021, 16:39 10 48180

>>48179
> В БД можно только писать, а вот удалять и изменять нельзя?
Это зависит от разработчика сайта полностью. Hive дает только канал для общения пиров.
> Есть какие-либо наработки, помимо написанного в треде?
Я работал с WebRTC. Написать собственный p2p-сайт можно и без создания целого протокола. Правда, все данные сайта будут храниться непосредственно в браузере - как только юзер кеш почистит, дб стереться. Неудобно.

Ответы181

11 3 ноя 2021, 17:07 11 48181

>>48180
> Это зависит от разработчика сайта полностью. Hive дает только канал для общения пиров.
Не вижу смысла каждому разрабу писать/копипастить один и тот же код каждый раз, когда необходима БД, вместо того чтобы добавить синхронизацию БД в протокол. Появляется неудобство использования одной из ключевых кмк фич сети.
Да и к тому же не представляю как это реализовать. Вот есть у тебя страница, есть на ней кнопка, после нажатия на которую в итоге должна добавиться запись в БД. Для этого тебе надо использовать Hive API. Куда и какой запрос будешь слать? Твой API работает только с файлами и позволяет редактирование только создателю.

> Написать собственный p2p-сайт можно и без создания целого протокола.
> как только юзер кеш почистит, дб стереться
Это-то понятно, для этого нужен локальный веб-сервер, который всем рулит, ну ты это и так знаешь. Исходники i2pd глядел, можно всё абсолютно так же сделать, за исключением чесночной маршрутизации.

Ответы182

# OP 12 3 ноя 2021, 17:11 12 48182

>>48181
> Вот есть у тебя страница, есть на ней кнопка, после нажатия на которую в итоге должна добавиться запись в БД.
Нажал кнопку, отредактировал локальную дб, отправил интент остальным пирам. Всё через REST API локального сервера.

Ответы183

13 3 ноя 2021, 17:44 13 48183

>>48182
> отредактировал локальную дб
Т.е. получил от веб-сервера файл БД, открыл его в контексте браузера, там же отредактировал и отправил обратно? Это целиком БД в оперативке висеть будет.

> отправил интент остальным пирам
Каким методом происходит обновление и в какой момент должна быть проверка на корректность данных?
Проверка обязана быть на стороне веб-сервера, так как в случае некорректности входных данных необходимо отклонить изменения. По крайней мере должен вызываться какой-то "прикреплённый" к файлу JS-код, который принимает на вход обе версии файла и возвращает true/false в зависимости от корректности данных.

Обновить тред
« /crypt/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах.Подробнее

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion