Serbestberdana ZeroNet 0.7, platformek ji bo afirandina malperên nenavendî
После года разработки увидел свет выпуск децентрализованной web-платформы ZeroNet 0.7, которая предлагает использовать механизмы адресации и верификации Bitcoin в сочетании с технологиями распределённой доставки BitTorrent для создания сайтов, которые невозможно подвергнуть цензуре, подделать или заблокировать. Содержимое сайтов хранится в P2P-сети на машинах посетителей и проверяется по цифровой подписи владельца. Для адресации используются система альтернативных корневых DNS-серверов Namecoin. Проект написан на языке Python и belav kirin ji hêla lîsansa di bin 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 ava kirin обновление 0.7.1, в котором устранена опасная уязвимость, которая потенциально позволяет организовать выполнение кода на стороне клиента. Из-за ошибки в коде отрисовки переменных шаблонов, открытый внешний сайт может установить соединение к системе клиента через WebSocket с неограниченными правами ADMIN/NOSANDBOX, что даёт возможность изменить параметры конфигурации и добиться выполнения своего кода на компьютере пользователя через манипуляции с параметром open_browser.
Уязвимость проявляется в ветке 0.7, а также в экспериментальных сборках начиная с ревизии 4188 (изменение внесено 20 дней назад).