Safe Network новини 🇧🇬 29.9.2022

Опростихме кода и елиминирахме много проблеми, като премахнахме всички ненужни асинхронни многонишкови процеси в кода на възела. В същото време остават някои проблеми с бавните комуникации, които смятаме, че може би са причинени от самия Quic, така че се задълбочаваме в това.

Извън отстраняването на грешки, новият sn_sdkg синхронен код вече е готов за интегриране. @anselme ще обясни повече за това тази седмица.

Общ напредък

Qi_ma преглежда как Старейшините проверяват „node_age“-а на възел, когато решават кой да преместят в нова Секция, тъй като виждаме някакво аномално поведение там, включително „зомби“ възли, които могат да се присъединят към мрежата.

@ChrisO експериментира с Quinn, което е изпълнение под Rust на протокола Quic за установяване и поддържане на връзки между компютри. За съжаление, Quic е нещо като черна кутия и смятаме, че някои от проблемите със свързаността, които срещаме, може да се дължат на начина, по който работи, по-специално, че комуникациите често са бавни, което причинява проблеми, когато процесите изтекат. Крис е настроил тестова машина за Quinn и наблюдава какво ще се случи, когато изстреляме различни видове съобщения към нея. В същото време @bzee разглежда структурата на qp2p комуникациите, за да потвърди, че използваме Quinn възможно най-ефективно. Ключовият проблем е получаването на едновременни потоци асинхронно, като същевременно се позволява изчакване на отговорите (връщане на наблюдател, който да следи за съобщения за отговор в същия канал).

@roland работи върху fuzz тестове за новотоsn_sdkg хранилище, което @anselme описва подробно по-долу.

sn_sdkg Интеграция

Разпределеното генериране на ключове (известен още като Distributed Key Generation - DKG) е начинът, по който Старейшините на Секциите генерират ключа на секциите по сигурен начин, който пази ключа на секциите в тайна. В края на DKG всеки Старейшина знае само своя собствен таен ключ, така че никой никога не вижда целия таен ключ на Секция. Това е механизъм за смекчаване на обхвата на действие на потенциално злонамерени Старейшини: това е начинът, по който Safe Network може да гарантира, че докато имаме по-малко от 5/7 лоши старейшини, те не могат да подпишат нищо с пълномощията на Секция. Правомощията на секциите се изискват за промяна на данни, даването на права или премахването им от възлите и прехвърляне на токени, така че това е много важно.

Наскоро работихме върху нов DKG, който е по-устойчив на загуба на пакети и който не използва таймери, така че не може да се провали поради бавен мрежов трафик и изчакване. Тук описваме как работи този нов DKG. За тази реализация използваме синхронно разпределено генериране на ключове sn_sdkg хранилище, който е базирана на алгоритъма за синхронно генериране на ключове на poanetwork в тяхното hbbft хранилище.

Как работи DKG

DKG се задейства от Старейшините, когато забележат, че най-възрастните членове не са Старейшините, или когато дадена Секция се раздели и те трябва да изберат кандидати за Старейшини. Тъй като забелязват това, настоящите Старейшини молят кандидатите да започнат нова DKG сесия със съобщение DkgStart, за да могат да генерират следващия ключ на Секция.

Първата стъпка в нашия DKG е генерирането на временни BLS ключове, които се използват за криптиране в процеса на DKG. Всеки възел в Safe мрежата има ed25519 ключ, но въпреки че тези ключове са чудесни за подписи, не можем безопасно да извършим криптиране с тях. Имаме нужда от друг начин.

Тъй като нашите възли нямат BLS ключове (Старейшините имат BLS keyshare, но не и обикновен BLS ключ), ние генерираме еднократен ключ само за тази DKG сесия и го изхвърляме след употреба. Необходимо е обаче другите възли да се доверят на този BLS ключ, тъй като той е чисто нов, така че преди да се случи нещо друго, всеки кандидат излъчва своя новогенериран BLS публичен ключ в съобщение, което съдържа техния подпис (направен с техния доверен ed25519 ключ) върху новия еднократен BLS публичен ключ, който те ще използват за тази DKG сесия.

След като кандидатите разполагат с всички BLS публични ключове за тази DKG сесия, те могат да започнат да гласуват. Гласуването има 3 етапа:

  • Parts: всеки възел изпраща Part, който ще се използва за окончателното генериране на ключ, съдържа криптирани данни, които ще бъдат използвани за генериране на техния дял от ключове.
  • Acks: възлите проверяват Parts и изпращат своите Acks (потвърждения) върху Parts. Тези Acks също ще бъдат използвани за генериране на ключ.
  • AllAcks: всеки се уверява, че всички имат един и същ набор от Acks и Parts, като изпраща своята версия на комплектите. Тази последна част е там, за да се увери, че кандидатите в крайна сметка генерират един и същ ключ на Секция!

След като гласуването приключи, кандидатите могат да генерират своите споделени секретни ключове заедно с новия публичен ключ на раздела от „Части“ и „Потвърждения“.

Клюки и евентуално прекратяване

В мрежата съобщенията могат да бъдат загубени и това може да доведе до ситуации, при които някои кандидати нямат гласове, а други чакат отговор за гласове, които никога не са пристигнали. За да се противопоставим на този проблем, имаме механизъм наречен “клюки”! От време на време, ако даден възел не е получил нови DKG съобщения, когато очаква такива, той ще изпрати всичките си гласове на останалите. Това има две цели:

  • едната е да информира останалите за гласовете и да ги информира за гласовете, които може да са пропуснали
  • другата е да покажем на другите участници, че в нашия възел липсват гласове, така че другите да могат да отговорят на свой ред с гласовете си и да ни помогнат да ги настигнем

И така, ако даден възел получи клюкарско съобщение, в което липсва информация, той ще отговори със своето знание. Това се случва дори след прекратяване (завършване на кръга на гласуване), защото понякога, когато възел прекъсне (и по този начин спре да клюкарства, защото не очаква повече гласове), той все още ще получава клюки от други възли, които не са стигнали до там още. В този случай осведоменият възел ще отговори на тези клюки със своето знание, така че другите възли също да могат да достигнат прекратяване. В крайна сметка чрез този процес всеки кандидат стига до прекратяване.

Едновременни DKG

В тази реализация ние използваме едновременни DKG. Понякога, веднага след задействането на DKG, нов възел се присъединява към Секцията и изглежда като по-добър кандидат Старейшина, тъй като възрастта на неговия възел е много висока. В този случай текущият набор от най-добри кандидати Старейшини се променя и текущите Старейшини издават друго съобщение DkgStart на новите кандидати.

Предишната сесия на DKG не е спряна, вместо това сега е състезание между двете! Искаме Старейшините да бъдат много надеждни възли. В известен смисъл интензивният процес на DKG е тест за проверка дали тези кандидати наистина са годни да бъдат Старейшини. Ако няколко DKG прекратят едновременно, това е добре, „Консенсусът за предаване“ ще гарантира, че текущите Старейшини ще изберат само един победител. DKG сесиите, които не са спечелили състезанието, може да прекратят или да не прекратят, но това няма особено значение, те в крайна сметка ще бъдат премахнати, когато възлите разберат, че са загубили.

Заключение

Накратко, новият DKG се фокусира върху това да бъде много устойчив на загуба на съобщения, премахвайки необходимостта от таймери и гарантирайки, че всеки в крайна сметка ще достигне до прекратяване без възможни изчаквания. Той също така прави паралелните DKG функция за избор на най-добрите кандидати в надпревара за прекратяване между DKG.


Преводи:

:uk: English :ru: Russian ; :de: German ; :es: Spanish ; :fr: French

  • Подробна информация може да намерите както винаги във форума на международната общност: Safe Network Forum
  • Ако имате въпроси може да ги зададете във Facebook групата на българската Safe общност: Redirecting...
  • Ако искате да следите последните новини заповядайте във Facebook страницата на Safe Network България: Safe Network България