Выпуск 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