Обновление Safe Network 🇷🇺 28 июля 2022 г

Это машинный перевод. Оригинал на английском здесь: Update 28 July, 2022

На этой неделе мы завершаем наш взгляд на то, как мы можем проверить разделы и даже саму сеть, используя ключи подписи BLS, чтобы создать ссылку вплоть до «Genesis», с текущим членством, привязанным к префиксу раздела через «PrefixMap». ` и как это регулярно обновляется AntiEntropy (AE).

Общий прогресс

@Joshuef наблюдает некоторый прогресс в решении проблем с памятью, некоторые из которых могли быть связаны с блокировками, исходящими от traceroute. Вместе с некоторыми улучшениями теста DBC от @bochaco, CI снова начинает выглядеть более здоровым.

@Bochaco также рассматривает h3 и WASM и то, как их можно интегрировать в клиент. Здесь есть хорошее видео по h3 (HTTP/3) — отличная находка @19eddiejohn75.

@Roland написал PR для перемещения SectionChain в PrefixMap (см. ниже). Сначала потребуется некоторое тестирование.

И @oetyng имеет два больших изменения в процессе: извлечение хранилища данных и упрощение потока отправки сообщений.

Извлечение хранилища данных
Переходя к более простой структуре node, мы ранее извлекли модуль comms. Теперь мы находимся в модуле data. Первоначально это было сделано для снятия блокировок в структуре узла, но мы рассматриваем дополнительные преимущества. Разделение позволяет запускать эти компоненты изолированно, что упрощает и ускоряет их тестирование. Кроме того, мы можем настроить меньшие версии сети, комбинируя одни модули, а не другие. Что касается структуры node, мы выносим из нее большую часть операций ввода-вывода, что на один шаг ближе к потенциальному API “чистой функции” node. Это направлено на то, чтобы упростить анализ кода и последствий изменений, снижая риск ошибок.

Упрощение отправки сообщения
Этот рефакторинг удаляет более 400 строк кода и уменьшает количество мест, где мы вызываем различные функции отправки с разными параметрами. Эти параметры оказались не нужны, и разные функции отправки тоже не нужны, если немного переделать. Кроме того, это помещает подписание и создание экземпляра структуры WireMsg в одном месте.

Как все это сочетается

Подробнее о BLS

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

Но каждый отдельный старший — или даже любой узел — также может использовать свои собственные пары ключей BLS для создания любого количества общих ключей, и они могут использоваться в механизме на основе дилера. В этой системе есть владелец, который контролирует секретный ключ, и этот владелец может создавать и распространять доли в системе n из m. Например, владелец веб-сайта может распределить ключи между тремя доверенными сотрудниками и потребовать, чтобы как минимум двое подписывали любые изменения на сайте.

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

Подробнее о PrefixMap, SectionChain и SAP

PrefixMap — это просто структура, которая сопоставляет все префиксы разделов (00, 01…) с их текущими поставщиками полномочий раздела (SAP).

SAP представляет собой список старших в разделе с их идентификаторами, IP-адресами и портами, а также текущим ключом раздела BLS. Таким образом, он предоставляет всю информацию, необходимую узлу или клиенту для присоединения к сети.

Карта префиксов

Префикс                   САП

00 → {[A(IP, порт), B(IP, порт), ….F(IP, порт)], Sec_key}
01 → {[G(IP, порт), H(IP, порт), ….M(IP, порт)], Sec_key}

….

У каждого узла и клиента есть копия «PrefixMap» — они отправляют ее, как только подключаются, или они могут получить ее от друзей или где-либо еще. Но не у всех «PrefixMap» обновлен, поэтому клиент или узел, вступающий в контакт с разделом, должен сначала обновить свою «PrefixMap» с текущим SAP через AntiEntropy (AE). Только когда у него будет обновленный SAP, он сможет начать вести дела с этим разделом.

Но, конечно, он также должен знать, что PrefixMap является подлинным. Для этого необходимо проверить, что SAP подписан действительным ключом раздела (текущий ключ минус 1), а также что этот ключ раздела действителен, потому что он был подписан предыдущим и т. д. Весь обратный путь вниз к ключу «Бытие».

Таким образом, другая часть «PrefixMap» — это «SectionChain». Это двоичная древовидная структура, которая связывает все ключи раздела BLS вплоть до Genesis. В настоящее время это отдельный элемент, и мы синхронизируем ключ в SAP и цепочке, но мы планируем объединить их — после этого нам нужно будет придумать несколько лучших имен!

В этот момент PrefixMap/SectionChain, или как мы его в итоге назовем, будет DAG с ключом Genesis в корне и цепочкой SectionKeys и t.Текущий ключ и членство на листьях.

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

При таком дизайне, даже если кому-то удастся украсть ключ «Genesis» и выдать себя за сеть, это будет иметь все меньше и меньше значения, поскольку сеть становится все больше и больше, а DAG имеет все больше и больше ответвлений, потому что нам придется отслеживать ключи обратно в Genesis снова все реже и реже.


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

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

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