Выпуск ZeroNet 0.7, платформы для создания децентрализованных сайтов

После года разработки увидел свет выпуск децентрализованной web-платформы ZeroNet 0.7, которая предлагает использовать механизмы адресации и верификации Bitcoin в сочетании с технологиями распределённой доставки BitTorrent для создания сайтов, которые невозможно подвергнуть цензуре, подделать или заблокировать. Содержимое сайтов хранится в P2P-сети на машинах посетителей и проверяется по цифровой подписи владельца. Для адресации используются система альтернативных корневых DNS-серверов Namecoin. Проект написан на языке Python и распространяется под лицензией GPLv2.

Размещаемые на сайте данные верифицированы и привязаны к учётной записи владельца сайта по аналогии с привязкой кошельков Bitcoin, что также даёт возможность контролировать актуальность информации и обновлять контент в режиме реального времени. Для скрытия IP-адресов может использоваться анонимная сеть Tor, поддержка которой встроена в ZeroNet. Пользователь участвует в раздаче всех сайтов к которым обращался. После загрузки на локальную систему файлы сохраняются в кэше и становятся доступны для раздачи с текущей машины, используя методы, напоминающие BitTorrent.

Для просмотра сайтов ZeroNet достаточно запустить скрипт zeronet.py, после чего в браузере можно открывать сайты через URL «http://127.0.0.1:43110/адрес_zeronet» (например, «http://127.0.0.1:43110/1HeLLo4uzjaLetFx6NMN3PMwF5qbebTf1D»). При открытии сайта программа находит ближайших peer-ов и загружает связанные с запрошенной страницей файлы (html, css, картинки и т.п.). Для создания своего сайта достаточно запустить команду «zeronet.py siteCreate» после чего будет сгенерирован идентификатор сайта и закрытый ключ для подтверждения авторства по цифровой подписи.

Для созданного сайта будет сформирована пустая директория вида «data/1HeLLo4usjaLetFx6NMH5PMwF3qbebTf1D». После изменения содержимого данной директории, требуется заверение новой версии при помощи команды «zeronet.py siteSign идентификатор_сайта» и введения закрытого ключа. Как только новое содержимое будет заверено, требуется анонсировать его командой «zeronet.py sitePublish идентификатор_сайта», чтобы изменённый вариант стал доступен peer-ам (для анонса изменений используется API WebSocket). По цепочке peer-ы проверят целостность новой версии по цифровой подписи, загрузят новое содержимое и передадут другим peer-ам.

Основные возможности:

  • Отсутствие единой точки отказа — сайт остаётся доступен, если в раздаче имеется хотя бы один peer;
  • Отсутствие эталонного хранилища сайта — сайт невозможно закрыть отключив хостинг, так как данные размещены на всех машинах посетителей;
  • Вся ранее просмотренная информация имеется в кэше и доступна с текущей машины в режиме offline, без выхода в глобальную сеть.
  • Поддержка обновления содержимого в режиме реального времени;
  • Возможность адресации через регистрацию домена в зоне ».bit»;
  • Работа без предварительной настройки — достаточно распаковать архив с ПО и запустить один скрипт;
  • Возможность клонирования сайтов в один клик;
  • Беспарольная авторизация на основе формата BIP32: учётная запись защищена тем же криптографическим методом, что и криптовалюта Bitcoin;
  • Встроенный SQL-сервер с функциями P2P-синхронизации данных;
  • Возможность использования Tor для анонимности и полная поддержка использования скрытых сервисов Tor (.onion) вместо IPv4-адресов;
  • Поддержка TLS-шифрования;
  • Автоматическая доступность через uPnP;
  • Возможность прикрепление к сайту нескольких авторов, имеющих разные цифровые подписи;
  • Наличие плагина для создания многопользовательских конфигураций (openproxy);
  • Поддержка трансляции новостных лент;
  • Работа в любых браузерах и операционных системах.




Основные изменения в ZeroNet 0.7

  • Код переработан для поддержки Python3, обеспечена совместимость с Python 3.4–3.8;
  • Реализован защищённый режим синхронизации БД;
  • По возможности прекращена поставка в основном составе сторонних библиотек в пользу внешних зависимостей;
  • В 5–10 раз ускорен код для верификации цифровых подписей (задействована библиотека libsecp256k1;
  • Добавлена рандомизация уже сгенерированных сертификатов для обхода фильтров;
  • Обновлён код P2P, который переведён на использование протокола ZeroNet;
  • Добавлен режим работы в Offline;
  • Добавлен плагин UiPluginManager для установки и управления сторонними плагинами;
  • Обеспечена полная поддержка OpenSSL 1.1;
  • При соединении с peer-ами задействованы фиктивные записи SNI и ALPN, чтобы сделать соединения более похожими на обращения к обычным сайтам по HTTPS;

В тот же день, что и релиз ZeroNet 0.7.0 сформировано обновление 0.7.1, в котором устранена опасная уязвимость, которая потенциально позволяет организовать выполнение кода на стороне клиента. Из-за ошибки в коде отрисовки переменных шаблонов, открытый внешний сайт может установить соединение к системе клиента через WebSocket с неограниченными правами ADMIN/NOSANDBOX, что даёт возможность изменить параметры конфигурации и добиться выполнения своего кода на компьютере пользователя через манипуляции с параметром open_browser. Уязвимость проявляется в ветке 0.7, а также в экспериментальных сборках начиная с ревизии 4188 (изменение внесено 20 дней назад).

© OpenNet