Safe Network новини 🇧🇬 30.6.2022

Старейшините използват Разпределено Генериране на Ключове (DKG), за да решат между два възможни алтернативни начина на действие. Всеки Старейшина генерира споделен ключ и го изпраща със своя глас и ако се получи супермнозинство (5 от 7) от тези споделени ключове, те се обединяват, за да се създаде пълният ключ, необходим за валидиране на решението. Разработихме наша собствена система, за да направим това, използвайки BLS криптография, която работи добре през повечето време - но не през цялото време. За съжаление, когато се провали, мрежата може да спре. Тази седмица @anselme представя ръководство за начинаещи за DKG и заедно с @davidrusu обяснява как се стремим да направим внедряването на DKG по-стабилно.

Общ напредък

@davidrusu и @joshuef продължават работата си да направят sn_node еднонишков, доколкото е възможно, за да се отърват от проблема, причинен от заключването. Това ще изисква малко преработване, преместване на Comm - кода, който обработва съобщенията между възлите - извън sn_node, така че да може да стои сам по-добре и потенциално да има собствена нишка.

Междувременно @bochaco работи върху създаването на първоначалния DBC генезис от първия мрежов възел, обработката на разходните книги, така че възлите да не трябва да се консултирате с други секции, за да установят дали транзакцията е валидна, и други стъпки в DBC интеграцията.

@bzee се разглежда алгоритми за разпръскване на информация(IDA), което, както може би си спомняте, е начинът, по който намаляваме необходимото място за съхраняване и изискванията за скоростта на мрежата, а @roland работи върху някои модулни тестове за DKG и помага на @Anselme с новото sn_sdkg хранилище (s тук означава синхронен).

Към по-стабилен DKG за Safe

Разпределеното Генериране на Ключове (DKG) е необходимо на Safe мрежата, за да се гарантира, че всеки Старейшина в дадена Секция има уникален фрагмент от ключа на Секцията: споделените ключове. То позволява на мрежата да генерира таен ключ за всяка Секция, без нито един възел да знае целия ключ на Секцията. Това прави Safe мрежата по-устойчива на византийски атаки, тъй като не е необходимо да се доверява на всички Старейшини.

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

С нашето текущо внедряване, ако възлите се забавят твърде много време, за да допринесат за DKG, сесията ще се провали. Имаме желанието да премахнем всяко поведение, свързано с необходимостта от време, в Safe network, като възприемем едновременни и асинхронни потоци по подразбиране.

От известно време търсим алтернатива на базирания на време DKG и смятаме, че най-накрая открихме нещо, което ще работи и надгради работата ни по Членството и Предаването.

DKG за останалите от нас

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

Представете си кралство с крал. Кралят има печат от слонова кост, който никой не може да фалшифицира. Всяко писмо с одобрителния печат на краля се смята от цялото кралство за истинско.

печат от слонова кост == таен ключ
печат на одобрение върху писмо == писмо с подпис на краля

Един ден кралят осъзнава, че приближава края на земния си път. Кралят има четирима наследници и иска да бъде справедлив, затова моли своя майстор занаятчия да разчупи печата му от слонова кост на четири еднакви парчета, всяко от които може да отпечата част от печата на краля. След това той раздава една от тези малки печати на четирите си деца. Сега, за да пресъздадат печата на одобрението на краля, децата трябва да използват малките си печати от слонова кост и всяко да подпечати своята част от печата един до друг, докато пълният печат е отново видим.

4 парчета печат от слонова кост == множество от печати
малък печат == споделен ключ

След известно време наследниците разбират, че този механизъм забавя кралството, тъй като изискването на всички части от печата всеки път е досадна операция, някои от тях отсъстват и пътуват понякога, така че получаването на всички части от печата може да стане доста сложно. Така че те имат идея: съгласяват се, че докато човек може да види повече от половината кралски печат върху писмо (3/4+ печат), печатът се счита за валиден и носи авторитета на кралството.

3/4+ печат == прагова криптография

Един ден наследниците разбират, че майсторът е бил нечестен и е запазил копие от оригиналния печат от слонова кост на краля и че ги е продавал в цялото кралство на някои злодеи. Затова наследниците решават да създадат нов печат за своето кралство. Но за да избегнат грешката от последния път, всеки от тях наема майстор, който да създаде едно ново парче от новия печат. Всеки наследник има собствен печат, който е създал от своя страна. Като ги обединят заедно, те получават нов кралски печат, който е уникален и който нито един печат не може да фалшифицира. Те постановяват, че съюзът на повече от половината от тези печати представлява властта на кралството. Тъй като никой никога не е виждал пълния нов печат, те могат да бъдат сигурни, че никой няма как да измами този път.

отделно създадени печати, които съставят уникален печат == DKG

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

Poanetwork DKG

Poanetwork hbbft (алгоритъм за консенсус Honey Badger Byzantine Fault Tolerant) има доста проста реализация на DKG, която не използва таймери. Техният код е одитиран от някои опитни крипто хора, така че това също е голямо предимство пред нашия.

Алгоритъмът за генериране на ключове при HBBFT накратко:

  • Всеки от участниците генерира „Части“, които излъчва към останалите
  • Участниците проверяват всички Части и генерират Потвърждения за всяка от тях, също излъчени към останалите
  • И накрая, всеки може да генерира свой собствен ключ от Частите и Потвърждения

Все пак има уловка! Всички те трябват да обработват едни и същи набори от Части и Потвърждения!

От тяхната документация:

Ако Потвърждение от Alice е обработено от Боб, но не и от Карол, Боб и Карол ще получат различни набори от публични ключове и споделени секретни ключове, които не съвпадат.
Един от начините да се гарантира това е да се запишат съобщенията в публична книга, преди да се генерират с тях секретни ключове.

Въпреки че няма включени таймери, този алгоритъм изисква възлите да се изчакат един друг.

Интеграция със Safe

Трябва да гарантираме, че всички участници имат достъп до едни и същи набори от Части и Потвърждения. Документацията на Poanetwork предлагат използването на разпределена книга тип блокчейн, за да се гарантира, че всички участници имат еднакви набори. Нямаме блокчейн в Safe - но това е добре. Екипът ни имаше идея да се излъчват подписани съобщения, които не изискват пълен консенсус! Работи по следния начин:

  • Изпратете Части в подписано съобщение
  • Изчакайте, докато влязат всичките 7 Части, излъчете подписания комплект
  • Изчакайте, докато влязат всичките 7 идентични подписани комплекта Части
  • Изпратете Потвърждения
  • Изчакайте, докато влязат всичките 7 Потвърждения, излъчете подписания комплект
  • Изчакайте, докато влязат всичките 7 идентични подписани набора от Потвърждения
  • След като даден възел получи 7 подписани комплекта с едни и същи Потвърждения, те могат да генерират споделен ключ от договорените Части и Потвърждения

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

Въпреки че този прост алгоритъм гарантира, че възлите са съгласни с едни и същи Части и Потвърждения, той не гарантира прекратяване в случай на загуба на определено количество съобщения. Това е добре, ние го приемаме и не го виждаме като провал.

Ако се загубят достатъчно съобщения, предполагаме, че този набор от кандидати не е бил годен да станат Старейшини на първо място. При всяко събитие на разделяне (възел се присъединява или напуска раздел), Старейшините проверяват дали най-старите 7 членове в секцията са настоящите Старейшини. Ако това не е така, те молят най-старите членове да започнат DKG. Този процес се нарича Предаване.

Събитията за разделяне могат да се случат с доста бързи темпове, така че са възможни множество едновременни DKG. Това е състезание между множество 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 България