Byzantine Fault Tolerance Explained

Od czasu powstania Bitcoina w 2008 roku, jako systemu elektronicznej gotówki peer-to-peer, powstało wiele innych kryptowalut, każda z nich z określonym mechanizmem. Ale jedną rzeczą, która łączy prawie wszystkie kryptowaluty, jest blockchain, jako podstawowy element ich architektury.

Z kilkoma wyjątkami, blockchainy są celowo zaprojektowane jako zdecentralizowane, działające jako księga cyfrowa, która jest utrzymywana przez rozproszoną sieć węzłów komputerowych. Z tego powodu technologia blockchain pozwoliła na stworzenie pozbawionych zaufania systemów ekonomicznych, w których przejrzyste i wiarygodne transakcje finansowe mogą być realizowane bez potrzeby korzystania z pośredników. Kryptowaluty są przyjmowane jako realna alternatywa dla tradycyjnych systemów bankowych i płatniczych, które są silnie uzależnione od zaufania.

Tak jak w przypadku większości rozproszonych systemów obliczeniowych, uczestnicy sieci kryptowalutowej muszą regularnie uzgadniać aktualny stan blockchaina, a to właśnie nazywamy osiąganiem konsensusu. Jednak osiągnięcie konsensusu w sieciach rozproszonych, w sposób bezpieczny i efektywny, jest dalekie od łatwego zadania.

Jak więc rozproszona sieć węzłów komputerowych może uzgodnić decyzję, jeśli istnieje prawdopodobieństwo, że niektóre z węzłów zawiodą lub będą działać nieuczciwie? Jest to fundamentalne pytanie tzw. problemu bizantyjskich generałów, który dał początek koncepcji bizantyjskiej tolerancji błędów.

Co to jest problem bizantyjskich generałów?

W kilku słowach, Problem Bizantyjskich Generałów został wymyślony w 1982 roku jako dylemat logiczny, który ilustruje, jak grupa bizantyjskich generałów może mieć problemy z komunikacją, gdy próbuje uzgodnić swój następny ruch.

Dylemat zakłada, że każdy generał ma swoją własną armię i że każda grupa znajduje się w różnych miejscach wokół miasta, które zamierza zaatakować. Generałowie muszą się zgodzić albo na atak, albo na odwrót. Nie ma znaczenia, czy atakują czy wycofują się, o ile wszyscy generałowie osiągną konsensus, tzn, zgodzą się na wspólną decyzję, aby wykonać ją w sposób skoordynowany.

W związku z tym możemy rozważyć następujące wymagania:

  • Każdy generał musi podjąć decyzję: atak lub odwrót (tak lub nie);
  • Po podjęciu decyzji nie można jej zmienić;
  • Wszyscy generałowie muszą zgodzić się na tę samą decyzję i wykonać ją w sposób zsynchronizowany.

Powyższe problemy komunikacyjne związane są z faktem, że jeden generał jest w stanie komunikować się z drugim tylko za pomocą wiadomości, które są przekazywane przez kuriera. W konsekwencji, głównym wyzwaniem bizantyjskiego problemu generałów jest to, że wiadomości mogą zostać w jakiś sposób opóźnione, zniszczone lub zagubione.

W dodatku, nawet jeśli wiadomość zostanie pomyślnie dostarczona, jeden lub więcej generałów może zdecydować się (z jakiegokolwiek powodu) działać złośliwie i wysłać fałszywą wiadomość, aby zmylić innych generałów, prowadząc do całkowitej porażki.

Jeśli zastosujemy ten dylemat w kontekście blockchainów, każdy generał reprezentuje węzeł sieci, a węzły muszą osiągnąć konsensus w sprawie bieżącego stanu systemu. Innymi słowy, większość uczestników w rozproszonej sieci musi się zgodzić i wykonać to samo działanie, aby uniknąć całkowitej porażki.

W związku z tym jedynym sposobem na osiągnięcie konsensusu w tego typu systemach rozproszonych jest posiadanie co najmniej ⅔ lub więcej niezawodnych i uczciwych węzłów sieci. Oznacza to, że jeśli większość sieci zdecyduje się działać złośliwie, system jest podatny na awarie i ataki (takie jak atak 51%).

Byzantine Fault Tolerance (BFT)

W kilku słowach, Byzantine fault tolerance (BFT) jest własnością systemu, który jest w stanie oprzeć się klasie awarii wynikającej z Byzantine Generals’ Problem. Oznacza to, że system BFT jest w stanie kontynuować działanie, nawet jeśli niektóre węzły zawiodą lub będą działać złośliwie.

Istnieje więcej niż jedno możliwe rozwiązanie Problemu Bizantyjskich Generałów i, co za tym idzie, wiele sposobów budowy systemu BFT. Podobnie istnieją różne podejścia do osiągnięcia przez blockchain bizantyjskiej odporności na błędy i to prowadzi nas do tak zwanych algorytmów konsensusu.

Algorytmy konsensusu blockchain

Algorytm konsensusu możemy zdefiniować jako mechanizm, dzięki któremu sieć blockchain osiąga konsensus. Najbardziej powszechne implementacje to Proof of Work (PoW) i Proof of Stake (PoS). Ale weźmy przypadek Bitcoin jako przykład.

Podczas gdy protokół Bitcoin przepisuje podstawowe zasady systemu, algorytm konsensusu PoW jest tym, co definiuje jak te zasady będą przestrzegane w celu osiągnięcia konsensusu (na przykład, podczas weryfikacji i zatwierdzania transakcji).

Chociaż koncepcja Proof of Work jest starsza niż kryptowaluty, Satoshi Nakamoto opracował jej zmodyfikowaną wersję jako algorytm, który umożliwił stworzenie Bitcoina jako systemu BFT.

Zauważ, że algorytm PoW nie jest w 100% tolerancyjny na błędy bizantyjskie, ale ze względu na kosztowny proces wydobycia i leżące u jego podstaw techniki kryptograficzne, PoW okazał się jedną z najbardziej bezpiecznych i niezawodnych implementacji dla sieci blockchain. W tym sensie algorytm konsensusu Proof of Work, zaprojektowany przez Satoshi Nakamoto, jest uważany przez wielu za jedno z najbardziej genialnych rozwiązań błędów bizantyjskich.

Myślenia końcowe

Problem bizantyjskich generałów jest intrygującym dylematem, który ostatecznie dał początek systemom BFT, które są szeroko stosowane w różnych scenariuszach. Poza branżą blockchain, kilka przypadków użycia systemów BFT obejmuje lotnictwo, przemysł kosmiczny i energetykę jądrową.

W kontekście kryptowalut, posiadanie wydajnej komunikacji sieciowej wraz z dobrym mechanizmem konsensusu jest kluczowe dla każdego ekosystemu blockchain. Zabezpieczenie tych systemów jest ciągłym wysiłkiem, a istniejące algorytmy konsensusu muszą jeszcze przezwyciężyć kilka ograniczeń (takich jak skalowalność). Niemniej jednak, PoW i PoS są bardzo interesującymi podejściami jako systemy BFT, a ich potencjalne zastosowania z pewnością inspirują do szerokiej innowacji.

Dodaj komentarz