Safe Network новини 🇧🇬 17.11.2022

Византийската отказоустойчивост (BFT), базирана на проблема с византийските генерали, е задължителна за децентрализираните мрежи, където възлите трябва да постигнат съгласие, дори част от тях да са злонамерени. @dirvine разглежда какво е BFT и най-вече какво пропуска.

Общ напредък

@davidrusu работи върху отделянето на AE от съобщенията за присъединяване и постигна добър напредък там, кодът за присъединяване сега е доста по-прост.

@joshuef също разглежда присъединяващите се възли и е открил някои аномалии. Когато са получени повече от една трета от отговорите от Старейшините, присъединяващият се възел пита отново. При налични петима Старейшини, след като получи два отговора, възелът прави повторен опит и получава още два отговора. Но на този етап той получава отговор за първия опит, което причинява ситуация на срив/призрак възел.

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

И в още една част от рационализирането, @bzee преработи част от qp2p в по-подобен на Quinn API, където няма отделна структура от данни, необходима за входящи връзки или потоци.

Византийска отказоустойчивост (Byzantine Fault Tolerance)

Проблемът с византийските генерали в условията на реалния свят

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

Това е проблемът, който децентрализираните мрежи трябва да преодолеят.

Прилагайки аналогията към децентрализираните системи, получаваме:

  • Лоялни генерали ==> честни възли
  • Предателски генерали ==> дефектни възли
  • Вражеската армия, през която изпращаме съобщения ==> ненадеждна асинхронна мрежа, която може да изпусне и забави съобщенията

Тази история е смилаема аналогия за някои доста тежки математики, в които се оказва, че докато не повече от една трета от генералите са коварни, честните генерали могат да координират плановете си успешно – Византийска толерантност към грешки (BFT).

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

Класическият проблем с византийските генерали е свързан със синхронизирането на локалните състояния въпреки предателските генерали, които се опитват да разделят състоянията. За да надградим малко задачата, и „АТАКА“, и „ОТСТЪПЛЕНИЕ“ биха били правилни (валидни) отговори… стига всички лоялни сили да правят същото.

За нашите цели класическият проблем с византийските генерали е ограничен изглед на BFT. Той е фокусиран изцяло върху консенсуса и затова трябва да се справи с повече видове грешки.

Има други дреболии около BFT, които можем да разгледаме вместо това, за да се справим с проблемите с членството.

Тук проблемът е, че имаме разделяне. Когато Възрастните и Старейшините напуснат или се присъединят възлите, могат да имат различни погледи към Секцията. Въпреки че това разделяне в крайна сметка ще бъде оправено, решенията, взети по време на разделния изглед, напр. DBC разходите, са трудни за оправяне. Затова се опитваме да избегнем този разделен възглед чрез консенсус.

Една от възможностите, върху които Мостафа и @Davidrusu работят, е протокол за излъчване, наречен Проверяемо последователно излъчване - Verifiable Consistent Broadcast (VCBC).

BFT протоколи за излъчване

Протоколът за излъчване се опитва да разпространи съобщение от възел до мрежата. BFT версията се опитва да гарантира, че всички възли са съгласни със съобщението, което този възел е изпратил:

Отляво имаме честен възел 1, излъчващ msg към 2,3,4,5. Вдясно имаме дефектен възел 1, излъчващ a към 2,3 и b към 4,5.

1

BFT протоколът за излъчване предпазва от разделяне във втория случай, като гарантира, че всички честни възли или се съгласяват с едно и също съобщение от „възел 1“, или всички отказват да приемат каквото и да е съобщение от „възел 1“.

Начинът, по който това се прави във VCBC, е чрез 3 степенен протокол:

  1. Възел 1 излъчва съобщението, което иска всички да видят
  2. Всички възли проверяват дали това е първият път, когато възел 1 е изпратил съобщение, ако е така, отговаря със споделяне на подпис върху съобщението: sigma_j(m)
  3. Възел 1 изчаква, докато получи >2/3 от споделените подписи, за да се обедини в пълен подпис, след което излъчва пълния подпис към мрежата, убеждавайки всички, че всички имат едно и също съобщение.

Нека да видим как този алгоритъм се разпада

VCBC изключително разчита на повече от 2/3 от мрежата да следва вярно протокола. Можем да се запитаме: „Какви щети могат да бъдат нанесени, ако 1/3 или повече от възлите са дефектни?“

Ако повече от 1/3-та, но по-малко от 2/3-ти + 1 са дефектни, тогава най-лошото, което могат да направят, е да спрат мрежата, като откажат да допринесат за споделяне на подпис.

Ако повече от 2/3 са дефектни, тогава дефектните възли могат да издадат подписи върху всяко съобщение, което харесват.

Този факт обаче е верен само ако BFT възлите се сговорят. т.е. ако не са един и същ нападател, тогава те нямат толкова голямо значение. Те няма да причинят разделяне.

Така че критична част от избягването на BFT е думата УГОВОРЕН.

Страхотен умствен експеримент е решаването на проблема с BFT чрез МНОГО нападатели. По този начин единичният нападател в тайно споразумение се разрежда от други нападатели и честни възли.

Какво означава това в реалния живот?

Ако вземем предвид мислите на нападател. Какво той би предпочел?

  1. Мрежата все още да работи
  2. Неговият враг да поеме контрола над мрежата

Ясно е, че отговорът е, че мрежата все още да работи честно. Така че, освен ако нападателят няма контрол над мнозинството (2f+1, където f = броят на лошите, уговарящи се възли), тогава той не може да превземе мрежата.

Така че, ако имаме N==9 и атакуващи възли==9, но съгласни възли==0, тогава нямаме проблеми?

Така че 100% от възлите да са нападатели е ОК.

Само когато имаме уговарящи се лоши възли, имаме проблеми. Тук има два пътя/прагове. Ако разгледаме нападател, който се е уговорил, тогава праговете са:

  1. Нападателят контролира >=1/3 възли
  2. Нападателят контролира >=2f+1 възли.

1 е вандалска атака, при която той може да спре решенията и мрежата.
2 е поне поглъщане на една секция.

Така че перспективата има значение тук. Колкото повече нападатели имаме, толкова по-сигурна е нашата мрежа! Можем да намалим влиянието на нападателя, като имаме много нападатели и/или много честни възли.

И така, какво представлява BFT атаката срещу протокол за излъчване

Когато обсъждаме BFT атака, имаме предвид уговорил се нападател. Индивидуалните нападатели не са проблем.

Можем да толерираме по-малко от 1/3-та уговорили се лоши възли. Докато може да има много лоши възли, ние сме защитени, стига никоя уговаряща се група да не надвишава 1/3 от вземащите решения (за спиране) или 2f+1 за създаване на разклонение (поглъщане).


Преводи:

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

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