Stabilność i bezpieczeństwo
W jednym z poprzednich wpisów napisałem: “Jawny, publiczny i anonimowy rejestr transakcji zapewnia technologia blockchain. Dzięki blockchain’owi zawartej transakcji nie można unieważnić, zablokować, anulować ani zmienić. Technologia ta zapewnia stabilność i bezpieczeństwo systemu.”
Jak powstaje i funkcjonuje
Jak powstaje i funkcjonuje blockchain – łańcuch bloków funkcjonujący w cyfrowej przestrzeni.
Blok zawiera cenne informacje: listę transakcji. To wymusza konieczność identyfikacji i uwierzytelniania każdego bloku.
#Hash
Zapewnia to funkcja skrótu, funkcja haszująca. Funkcja ta dla dowolnego zbioru danych (kontentu) tworzy skrót, tzw. hash, który ma ciekawe właściwości.
- Jest nieodwracalny – nie ma możliwości poznania kontentu, na podstawie jego skrótu.
- Jest jednoznaczny – nie ma możliwości, by dwa różne kontenty miały ten sam skrót.
HASH to wynik działania funkcji skrótu (pojęcie używane w kryptografii), jest odciskiem palca dla danych. Hashing jako proces jest przekształcaniem ciągu znaków, w inny ciąg znaków, który nie zawiera informacji o źródle. Stosując funkcję skrótu, możemy sprawdzić czy konkretne dane nie zostały zmienione lub uszkodzone.
Bitcoin blockchain
Omówimy blockchain, posługując się przykładem Bitcoina, pierwszej kryptowaluty, która skorzystała z tej technologii. Blockchain jest publiczną (bo dostępną dla wszystkich) księgą, zawierającą wszystkie transakcje bitcoina. Jest to sekwencja bloków, z których każdy zawiera grupę transakcji, które miały miejsce w okresie ok. 10 minut.
Możemy sobie wyobrazić blockchain, jako stos paczek. Niech pierwsze transakcje będą na dnie, a ostatnie na górze. Manipulacje przy jakimkolwiek bloku stosu spowoduje jego wywrócenie i natychmiastowe wykrycie próby ingerencji. Każdy blok ma swój unikalny hash, “odcisk palca” w formie dużych rozmiarów liczby, która jest zapisana jako (heksadecymalny) ciąg znaków. Taki hash może wyglądać tak: 000000000003e95b0ac78cb961d0. Zastąpmy emotikonami owe duże liczby, by pokazać prosto i czytelnie jak to działa.
Oznaczmy hash pierwszego bloku jako (piłka), hash drugiego bloku jako (ośmiornica) i hash trzeciego jako (parasol).
Blockchain reprezentowany przez emotikony, wygląda tak:
Załóżmy, że Alicja wysłała mi 5$ w bitcoinach, a ja chcę je przesłać Emanuelowi. Gdy to zrobię, transakcja będzie dołączona do wielu innych w nowym bloku, dodanym do łańcucha. Każdy blok wie, gdzie przynależy do sekwencji, bo zawiera hash bloku poprzedzającego go. Innymi słowy, trzeci blok zawiera nie tylko grupę transakcji, ale również hash bloku poprzedzającego go.
Wyobraźmy sobie, że w systemie Bitcoina blok nr 3 otrzymał już swój hash. Blok ma hash . Gdy przelałem Emanuelowi 5$, sieć Bitcoin dołącza naszą transakcję do następnego bloku. Ten nowy blok, przypuszczalnie będzie miał numer 4, nie ma jeszcze nadanego hash’a. Oznaczymy go “?”.
Komputery “górników”, którzy odpowiadają za utrzymanie sieci, rozpoczynają rywalizację, by dodać kolejny blok do łańcucha. Pierwszy “górnik”, którego komputer wygeneruje prawidłowy hash, dla nowego bloku, jest zwycięzcą. Otrzymuje jako wynagrodzenie 12,5 nowych bitcoinów. W ten sposób są generowane nowe bitcoiny.
Dodatkowo “górnik” otrzymuje jeszcze prowizję z tytułu transakcji zawartych w bloku. Jest opłata, którą wnoszą uczestnicy transakcji zawartych w bloku.
Jak tylko nowy hash jest znany, jest on przekazywany natychmiast wszystkim pozostałym “górnikom”, którzy weryfikują go i dodają do swoich kopii łańcucha. Następnie rozpoczyna się następna runda wyścigu, by znaleźć prawidłowy hash dla następnego bloku w łańcuchu.
Jak wygenerować prawidłowy #hash?
Generowanie skrótów hash jest łatwe. Średniej klasy laptop jest w stanie wygenerować ich tysiące w ciągu sekundy. Wyspecjalizowanym komputerom “górników” znalezienie prawidłowego hash’a zajmuje średnio 10 minut, ponieważ nie każdy wygenerowany hash jest tym szukanym.
System Bitcoin ekstremalnie utrudnia znajdowanie prawidłowego hash’a poprzez wymaganie, by znikoma liczba skrótów, spośród zawrotnej liczby dostępnych spełniała wymagane warunki. Relacja ilości/możliwości jest typu Ziemia – Wszechświat. Jedyną metodą jest generowanie nowych skrótów i sprawdzanie czy spełniają narzucone warunki.
Metoda
Pomaga im metoda zwana w kryptografii “nonce”. Jest to zgadywanka -przypadkowa liczba jest dodawana do bloku, w nadziei, że otrzymany w wyniku hash będzie zwycięski. “Górnicy” biorą wszystkie transakcje w nowym bloku plus hash z poprzedniego bloku, dodają “nonce” i generują skrót dla całości. Każdy z “górników” próbuje wiele, różnych liczb mając nadzieję, że wygenerowany w rezultacie hash będzie prawidłowy. Społeczność “górników”, wykonuje kwadryliony prób zanim jeden z nich trafi na wartość “nonce”, która da wygrywający hash. Wygrywający pojawia się średnio co 10 minut i to jest średni czas przetworzenia jednego bloku. Jeśli średni czas znalezienia wygrywającego skrótu spada poniżej 10 minut, system Bitcoin automatycznie zwiększa trudność znalezienia prawidłowego skrótu. W odwrotnej sytuacji, odwrotnie. To zapobiega sytuacji, że w zbyt krótkim czasie, zbyt dużo bitcoinów znajdzie się w obiegu. Strategia wygrywająca jest prosta. Mieć do dyspozycji wystarczającą moc komputerów, by rozwiązać, jak najwięcej “zagadek” w jak najkrótszym czasie.
Sieć Bitcoin żąda hash’y, które są poniżej pewnej wartości. Kontynuując zabawę z emotikonami, przyjmijmy bardziej przyjazne ograniczenia. Wymagania sieci: niech hash będzie zwierzęciem.
W pierwszych próbach, górnicy uzyskali skróty:
Tylko jedna z tych wartości spełnia ograniczenia. Kwiat wiśni i gruszka nie spełniają warunków, ale wieloryb jest OK. Drugi “górnik” znalazł prawidłowy hash, on otrzymuje nagrodę. Ta nagroda, to nowe bitcoiny. Stąd określenie “wydobywanie”, to prawie jakby wydobywali złoto.
Jeśli wydobywanie odbywało by się zbyt szybko, system mógłby być zalany bitcoinami powodując inflację. By temu zapobiec oprogramowanie systemu Bitcoin zawiera nastawialne utrudnienia. Jeśli prawidłowe skróty są znajdowane zbyt szybko (łatwo), sieć ustawia ściślejsze ograniczenia.
Wyobraźmy sobie, że w naszym emotikonowym blockchainie, bloki są wydobywane zbyt szybko. By to naprawić, system zmienia ograniczenia. Hash następnego bloku musi być zwierzęciem i dodatkowo mieć łapy. “Górnicy” uruchamiają swoje komputery i znajdują.
Nie ma zwierzaka z łapami. Próbują dalej.
Tym razem trzeci “górnik” znalazł prawidłowy skrót. Niedźwiedzie są zwierzętami z łapami! “Górnik” może opublikować swój hash, włączając jednocześnie blok z danymi do sieci block chain. Pozostali “górnicy” weryfikują opublikowany hash i po pozytywnej weryfikacji, dołączają ten blok do swoich kopii łańcuchów – synchronizują łańcuchy, każdy z każdym. Następnie zaczynają zbierać transakcje dla następnego bloku. Teraz nasz łańcuch bloków wygląda tak.
*grafika i emotikony użyte w tym wpisie pochodzą z wpisu Bitcoin Explained with Emoji Zostały użyte za zgodą jego autorki.