Algorytmy konsensusu – Proof of Work – PoW – część I

2012 słów, Około 11 minut

Część I – PoW

Wstęp

Na początku artykuł ten miał być bardziej porównaniem Proof of Work i Proof of Stake, lecz zdałem sobie sprawę, że łatwiej będzie podzielić go na trzy części – tutaj jest część pierwsza – o konsensusie Proof of Work.

Konsensus (porozumienie)

W systemach rozproszonych, takich jak łańcuchy bloków – występujące węzły sieci muszą dochodzić między sobą do porozumienia. Przykładem obrazującym to zjawisko może być np. grupa znajomych, która wybrała się na wycieczkę górską. Wyobraźmy sobie, że napotykają oni rozwidlenie i zastanawiają się, którędy iść – w najlepszym wypadku – wybiorą jedną z dróg, w najgorszym – rozdzielą się i pójdą dalej swoimi ścieżkami. W pierwszym przypadku – doszli do porozumienia, w drugim – nie, przyjmując zasadę, że porozumienie oznacza, że grupa nie rozdziela się.

Problem bizantyjskich generałów

„Grupa armii bizantyjskich otacza miasto nieprzyjaciela. Rozkład sił jest taki, że jeśli wszystkie armie zaatakują razem, to będą w stanie zdobyć miasto. Innym sposobem uniknięcia porażki jest odwrót wszystkich armii. Generałowie poszczególnych armii mają zaufanych posłańców, którzy z powodzeniem dostarczą każdy komunikat od jednego generała do innego. Jednak niektórzy generałowie mogą być zdrajcami usiłującymi doprowadzić do porażki armii bizantyjskich. Należy opracować algorytm, który umożliwi wszystkim wiernym generałom uzgodnienie pewnego planu działania. Ostateczna decyzja powinna być z grubsza taka, jaka zostałaby podjęta w drodze głosowania większościowego nad decyzjami poszczególnych generałów. W przypadku nierozstrzygnięcia głosowania końcową decyzją ma być odwrót.” (Wikipedia)

Generałowie to po prostu węzły sieci, posłańcy – kanały komunikacyjne, zdrajca to węzeł, który oszukuje (nie działa prawidłowo). Algorytm musi uwzględnić 2 warunki:

– wszyscy wierni generałowie podejmują zgodną decyzję

– niewielka liczba zdrajców nie może spowodować sabotażu

Do rozwiązania tego problemu w kryptografii i sieciach różnych kryptowalut stosuje się różne algorytmy, które mają chronić przed atakiem większości (atakiem 51%).

Podstawowymi dwoma jest Proof of Work (PoW) oraz Proof of Stake (PoS), którym spróbujemy się przyjrzeć w tym artykule. Dodatkowo istnieje także Delegated Proof of Stake (DPoS), któremu także się przyjrzymy.

Proof of Work (dowód pracy)

Konsensus PoW jest to algorytm, który opiera się na nagrodzie w postaci danej kryptowaluty dla współpracujących i przestrzegających zasad węzłów górników. W sieci Bitcoina nagroda ta na początku wynosiła 50 bitcoinów, zmniejszając się o połowę co 210 tys. bloków. Nagroda ta przypada tylko temu górnikowi, który najszybciej znajdzie (dosłownie – odgadnie) najniższy możliwy hasz SHA256 dla bloku, który wyprodukował (taki, który zawiera jak najwięcej zer na początku – a każde dodatkowe zero utrudnia odgadnięcie hasza wykładniczo). Można więc powiedzieć, że węzły górników stale konkurują ze sobą, „walcząc” o nagrodę za pomocą mocy obliczeniowej. Przyjrzyjmy się temu troszeczkę bardziej szczegółowo.

SHA256

Jest to funkcja skrótu, na której wejście podajemy dowolny ciąg znaków, o dowolnej długości, a na wyjściu dostajemy jego skrót – w postaci 256 bitów w systemie dwójkowym (czyli 64 znaki w systemie szesnastkowym).

Malutka zmiana na wejściu tej funkcji odpowiada zmianie na wyjściu, która wygląda na losową, ale jest ściśle deterministyczna i powtarzalna.

Najmniejsza liczba, którą można pokazać w ten sposób to zero, lecz jej długość nadal jest taka sama jak największej liczby. Dla czytelności – pogrupowane w grupy po 8 cyfr.

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

W systemie binarnym zapisujemy liczby za pomocą 0 i 1.

W systemie dziesiętnym – 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

W systemie szesnastkowym – 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

Powyższe liczby można więc zapisać jako (dla czytelności – także pogrupowane po osiem znaków):

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF

Oraz każdą inną liczbę – pomiędzy tymi zakresami.

W systemie dziesiętnym liczba ta równa się 115 792 089 237 316 195 423 570 985 008 687 907 853 269 984 665 640 564 039 457 584 007 913 129 639 935.

Jest to liczba, której ludzi umysł pojąć nie może, ale ten filmik (niestety tylko po angielsku) tłumaczy więcej.

O SHA256 więcej tutaj

Blok

PoW wymusza na górnikach odgadnięcie takiego hasza, który zawierał będzie jak najwięcej zer od lewej strony (czyli będzie jak najniższą liczbą w systemie dwójkowym, im więcej zer, tym niższa liczba). Staje się to coraz trudniejsze z czasem, a trudność ta rośnie wykładniczo z każdym następnym zerem patrząc od początku hasza oraz zmienia się w zależności od tzw. trudności wydobycia. W jaki sposób się to dzieje?

Blok zawiera informację o tym, że dany górnik, który go wyprodukował dostaje nagrodę, zapisane są inne transakcje, które zawierają się w tym bloku, czas bloku, hasz poprzedniego bloku, oraz inne parametry, m. in. tzw. nonce. Wszystkie te dane zostają shaszowane i z tego powstaje ten właśnie hasz, który zostaje rozesłany po sieci do węzłów by sprawdzić, czy jest prawidłowy – jeśli tak, górnik dostaje nagrodę.

Przykładowe hasze bloków:

Blok 000 000: 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

Blok 210 000: 000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e

Blok 420 000: 000000000000000002cce816c0ab2c5c269cb081896b7dcb34b8422d6b74ffa1

Blok 720 000: 00000000000000000000664d48a530c8a9047ae31f6ba81ff5c49c22072d4536

Blok 730 686: 0000000000000000000e23e73301a473cf87710813b7530d7505e685bcbbdad

(najnowszy w momencie pisania tego artykułu)

Zwróćmy uwagę na to, że im wyższy numer bloku, tym więcej zer z lewej strony, więc i trudniejsze odgadnięcie go. W łańcuchu Bitcoina trudność wydobycia zmienia się zgodnie z zasadami zapisanymi w kodzie, w sposób taki, że im więcej górników dołącza się do sieci, tym trudniejsze wydobycie, można było zaobserwować spadek hashrate (czyli „mocy obliczeniowej” – ilości potrzebnych prób) w momencie, gdy Chiny zabroniły kopania bitcoinów, więc górnicy wyemigrowali do USA i innych krajów.

Trudność Wydobycia

„Moc obliczeniowa” – hashrate

Co za tym wszystkim idzie – im większa „moc obliczeniowa” koparek danego węzła, tym większa szansa na to, że to właśnie ten górnik, który posiada koparki o największym sumarycznym hashrate odgadnie najniższy hasz jako pierwszy. Mitem jest, że urządzenia te wykonują jakieś „skomplikowane obliczenia matematyczne”. One po prostu przeprowadzają ogromne ilości prób odgadnięcia hasza. Im większa „moc obliczeniowa” – tym więcej takich prób można przeprowadzić w jednostce czasu. I tym większa szansa na jego odgadnięcie. Wymaga to inwestycji w ogromne ilości ASIC-ów. A co z tym idzie – pieniędzy oraz owszem – dużej ilości przeznaczonej na to energii, co rzutuje na jej koszt. Lecz takie wykorzystanie energii jednocześnie jest największą zaletą PoW. Proszę zauważyć, że użyłem słowa „wykorzystanie” (zużycie), nie „zmarnowanie”. To duża ilość energii (czyli wysoki jej koszt, oraz duży koszt sprzętu w postaci koparek) jest w PoW gwarantem uczciwości podmiotów zaangażowanych w konsensus.

Atak 51%

Zauważmy też, że jeśli węzeł nie jest uczciwy i chce przeprowadzić atak na sieć – musi posiadać on moc obliczeniową większą niż 51% całej mocy użytej w sieci przez pewną ilość czasu, co wiąże się z ogromnym zużyciem energii oraz astronomicznym kosztem sprzętu potrzebnego do jego przeprowadzenia.

Obliczmy dla przykładu (04/2022):

Hashrate sieci: 211,5 EH/s (= 211 500 PH/s = 211 500 000 TH/s)

Zakładając koszt elektryczności rzędu 0,006$ za kWh (najtańszy koszt dla podmiotów detalicznych na świecie 2020)

Oraz dla porównania – 0,12$ za kWh (średnia dla świata 2022)

Sprzęt: Antminer S19Pro = $15k-17k, przyjmijmy średnią cenę – $16 000. Hashrate tego modelu – 110 TH/s

Pobór prądu przez 1 taką koparkę: 3,25kWh

Wymagany sprzęt = Hashrate sieci / Hashrate sprzętu = 211 500 000 / 110 = 1 922 728 koparek

Koszt koparek: 1 922 728 koparek * 16 000 = 30 763 648 000$ = 30 mld USD

Przyjmując, zgodnie z zasadami, że musimy posiadać 51% mocy obliczeniowej:

= 30 763 648 000 * 0,51 = 15 689 460 480$ = 15,7 mld USD

Szacowana ilość energii elektrycznej na dzień potrzebnej do przeprowadzenia takiego ataku:

1 922 728 koparek * 3,25 kWh * 24 (godziny) = 149 972 784 kWh = 149 TWh

Koszt prądu za dzień: 1 922 728 koparek * 3,25 kWh * 0,006 * 24 (godziny) = 899 836$ (dla najniższej na świecie ceny energii 2022)

Koszt prądu za dzień: 1 922 728 koparek * 3,25 kWh * 0,12 * 24 (godziny) = 5 537 456$ (dla średniej światowej ceny energii 2022)

Sumarycznie: w każdym wypadku jest to ponad 15,6 mld USD na dzień (lub 31,2 mld USD przyjmując moc obliczeniową rzędu 100% zamiast 51%)

UWAGA: Ataki można przeprowadzać dysponując mocą obliczeniową mniejszą niż 51% sieci, ale im mniejsza moc, tym mniejsze prawdopodobieństwo powodzenia takiego ataku.

Zobacz jaką moc obliczeniową (hashrate) ma aktualnie sieć Bitcoina

Dodatkowo – o rzędy wielkości łatwiej jest innym węzłom potwierdzić, czy dany górnik, który zwyciężył w wyścigu jest uczciwy czy nie – niż oszukać sieć przez górnika, co jest przeogromną zaletą i powoduje, że koszt energii potrzebnej do przeprowadzenia ataku 51% jest o rzędy wielkości większy niż koszt energii zużytej uczciwie i zgodnie z konsensusem.

Atak taki mógłby być użyty do przeprowadzenia tzw. podwójnego wydania (double spend), wytworzenia dowolnej ilości bitcoinów lub choćby do zachwiania lub ocenzurowania sieci.

Podwójne wydanie oznacza, że osoba atakująca w tajemnicy wytworzyłaby swoją wersję łańcucha, aby wydać bitcoiny w łańcuchu publicznym (poprawnym), a następnie scalając swoją wersję łańcucha, w której zachowuje ona właśnie wydane bitcoiny. Tego typu operacja nosi też nazwę reorganizacji blockchaina, ponieważ zastępuje ona najnowszy blok w łańcuchu. Nie udało się dotychczasowo przeprowadzić udanego ataku 51% w sieci Bitcoina.

Jednym z efektów pracy PoW jest zwiększanie długości łańcucha – przyjmuje się, że najdłuższy łańcuch jest najbardziej wiarygodny, gdyż istnieje najdłużej.

W PoW by dostać nagrodę musimy wykonać pewną pracę – stąd też nazwa – Proof of Work (dowód pracy). Pracą tą jest właśnie kopanie – czyli zgadywanie haszy. Nie ma to oczywiście nic wspólnego z fizycznym wydobywaniem, jak w przypadku złota i prawdę mówiąc bywa to mylące.

Apetyt na energię w algorytmie PoW jest więc największą jego ZALETĄ, a nie wadą, gdyż sprawia, że NIE OPŁACA się atakować sieci, tylko jej pomagać. Przeciwnicy PoW oraz osoby, które nie mają pojęcia o zasadach działania PoW często pokazują ten fakt jako wadę – gdyż twierdzą, że MARNUJE się energię na nic. To właśnie wielka trudność skorumpowania jej, lub inaczej – odrzucający, astronomiczny koszt takiej operacji sprawia, że PoW gwarantuje bezpieczeństwo, co przekłada się na bardzo małe prawdopodobieństwo korupcji.

Czy jest możliwa podmiana bloku?

Krótko – tak, lecz szansa na to jest POMIJALNIE mała, właśnie ze względu na koszt. Hasz poprzedniego bloku jest zawarty w nowym bloku, itd. aż do pierwszego bloku. Jeśli dojdzie do próby zmiany hasza któregoś z bloków – cały dowód pracy dla następnych bloków będzie musiał być przeprowadzony na nowo, aż do najnowszego. Co w porównaniu z ilością uczciwych górników – się nie uda, gdyż zajmie o wiele więcej czasu niż odnalezienie prawidłowego hasza bloku przez nich (po prostu wyprzedzą nieuczciwego, jeśli nie będzie dysponował o wiele większą mocą niż 51% sieci). Prawdopodobieństwo, iż takowy delikwent będzie posiadał o wiele większą moc obliczeniową do przeprowadzenia takiego zdarzenia jest niewielkie właśnie ze względu na astronomiczny koszt takiej operacji. I nie udało się to po dziś dzień.

Część II – Proof of Stake – PoS – wkrótce

Patronem strony jest kantor bitcoin swap.ly oferujący najlepsze kursy wymiany wśród polskich kantorów kryptowalut.

Ostatnia zmiana: 29 czerwca, 2023