BlockChain.bg

Сигурност и консенсус в блокверигата

Децентрализиран консенсус
Биткойн мрежата е първата в света система, която е едновременно абсолютно децентрализирана и същевременно успява да постигне консенсус за състоянието, в което се намира. Тя е абсолютно децентрализирана, защото се състои от хиляди независими компютри и всеки от тях пази копие на блокверигата. Същественото обаче е, че всяка от тези машини сама, независимо от останалите, решава кое е вярното копие на блокверигата. Няма централизирани сървъри, които да „казват“ на останалите участници в мрежата коя е вярната блокверига. И все пак на всеки 10 минути всички компютри в мрежата независимо един от друг избират верига, която да приемат за правилна.

А как се получава така, че на участниците в биткойн мрежата понякога се налага да избират между две алтернативни вериги? Проблемът идва от това, че има безкрайно много възможни правилни следващи блокове. Затова и периодично се случва двама различни копачи независимо един от друг да успеят да генерират валиден следващ блок. Както казахме по-рано, копачите обикновено работят по леко различаващи се блокове, така че вероятността двама копачи едновременно да генерират идентични блокове, е пренебрежимо малка.

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

За да избере правилната верига, всяка от машините прилага правилото „печели най-скъпата блокверига“ (наричана още „най-дълга верига“). Това означава, че всички компютри приемат за вярна веригата, за която са изхарчени най-много изчислителни ресурси. Цената на веригата се влияе от 2 параметъра – дължина на веригата и сложност на хешовете на блоковете.

Както описахме по-горе, сложността се определя за всеки 2 016 блока динамично, така че всеки блок има определена зададена сложност. Общата сложност на веригата се изчислява, като се сумират сложностите на всички блокове в нея. Това означава, че ако машините трябва да изберат между две алтернативни вериги с еднакъв брой блокове, те ще приемат за вярна тази, чиито блокове са с по-голяма сложност. Ако и двете вериги са еднакво дълги и с еднаква сложност на блоковете, то машината ще приеме за вярна първата верига, за която е получила информация. Ако впоследствие се получи блок към втората верига, то тя ще стане с по-голяма сложност от първата и машините ще приемат за вярна именно нея.

Подобни колизии в системата се получават периодично – обикновено по веднъж на няколкостотин блока. Те се наричат още форкове (от английската дума fork – ‘вилица’). Терминът идва от това, че както при вилицата, в този момент веригата се разделя на няколко различни шипа (продължения).

Както казахме, двама различни копачи едновременно разпространяват два различни блока. Някои от компютрите получават първо единия блок, построяват с него по-дълга верига и приемат нея за вярна. Друга част от компютрите получават първо другия блок и построяват с него различна верига, която приемат за вярна. Получава се така, че за момент биткойн мрежата е разделена на две и има две различни версии, които съществуват едновременно и имат леко различаващи се последни блокове (някои от трансакциите са в едната верига, но липсват в другата, и обратното).

Всеки от копачите в двете групи, виждайки, че има нов блок в неговата верига, започва да работи по следващия, надграждайки веригата, която той самият приема за вярна. Получава се така, че в този момент копачите в двата лагера работят върху две различни, конкуриращи се вериги. Неминуемо копач в един от двата лагера ще успее да конструира нов блок в своята верига, правейки я по-дълга от другата. След като разпространи този нов блок към останалите машини, всяка от тях ще „види“, че тази верига става по-дълга от другата и ще я приеме за вярна. Така това временно разделяне на биткойн мрежата се разрешава и отново всички машини в нея работят с една и съща версия на блокверигата.

Периодично е възможно дори и вторите блокове в паралелните вериги да се генерират почти едновременно и съответно разделението да продължи още един блок. Това се случва значително по-рядко – веднъж на няколко десетки хиляди блока. С всеки следващ блок вероятността разделянето на блокверигата да продължи, както и едновременното генериране на два различни комплекта от следващи блокове, намалява експоненциално. Прието е да се смята, че в следващите 5 блока след разделянето на веригата то със сигурност ще бъде разрешено и едната блокверига ще надделее. Това е и причината да се приемат за абсолютно гарантирани трансакции, които са били потвърдени в 6 поредни блока. Става дума за трансакции, за които след блока, в който са записани, има още 5 следващи, натрупани над него и потвърждаващи тази трансакция.

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

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

Злоупотребите, които може да постигне някой, който има превес в изчислителна мощ, са два вида:
- Двойно харчене на собствените му биткойни. Нарушителят може да разпространи в мрежата трансакция, с която прехвърля свои биткойни на трето лице, извършвайки плащане за стока или услуга. След това може да генерира следващия блок в мрежата, така че той да не включва тази трансакция. В резултат тя така или иначе няма да се е състояла и човекът, приел биткойните, ще бъде ограбен. Подобни действия обаче сравнително бързо ще доведат до създаването на лошо име на нарушителя и в бъдеще никой няма да иска да приема плащания от него;
- Недопускане в следващите блокове на набелязани от него трансакции. Тъй като нарушителят генерира следващите блокове, той на практика решава кои трансакции да бъдат включени в тях. В резултат той може да наложи цензура на някои трансакции, така че те никога да не бъдат включени в блокверигата;

И двата гореописани начина за злоупотреба не могат да останат незабелязани в световен мащаб. Ако в даден момент подобни нарушения бъдат засечени, това ще предизвика огромна загуба на доверие в биткойн мрежата. В резултат стойността на криптовалутата ще се срине и ще загубят всички участници в мрежата, включително и нарушителят. Неговите биткойни също ще загубят своята стойност, което ще означава, че фалшификацията ще му донесе повече загуби, отколкото печалба. Очевидно той би имал много по-голяма полза да използва изчислителната си мощ, за да поддържа системата стабилна и така да запази стойността на биткойните, които получава от емитиране и такси. Следва да се има предвид също така, че провеждането на подобна атака ще изразходва огромно количество електричество, което предполага и огромни разходи, които могат да бъдат оправдани и покрити само ако биткойн продължава да поддържа стойността си.

От всичко казано дотук става ясно, че биткойн системата, по начина, по който е устроена, стимулира добросъвестното поведение на копачите, които поддържат мрежата. Тези стимули са валидни дори и за играчи с огромна изчислителна мощ. Освен това следва да се има предвид, че разгледаният по-горе сценарий, при който един участник концентрира в себе си доминираща изчислителна мощ, е малко вероятен. Към момента изчислителната мощ на всички копачи в биткойн мрежата се изчислява на 500 000 000 милиард хеша в секунда. Това е огромна изчислителна мощ, която според някои проучвания е най-мощният суперкомпютър в света.

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

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

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

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

Като обобщение можем да кажем, че манипулирането на биткойн мрежата е не просто изключително трудно, но и твърде скъпо. Най-важното обаче е, че заложените в системата стимули са такива, че от подобни манипулации не е позволено да се печели.

Бъдете в час с актуалните тенденции и развитие на криптовалутите.

Чрез криптобюлетина на BlockChain.bg, ще бъдете винаги в час с актуалните новини и тенденции, около криптовалутите.