Blockchain – specyficzne pudełko na dane

Przemek/ 27 czerwca, 2022

Główną tematyką tego bloga jest blockchain, dlatego głupio byłoby nie wytłumaczyć, czym tak naprawdę jest ta technologia. Dlatego w tym poście, postaram się rozłożyć wszystko na czynniki pierwsze. Dzięki temu zrozumiesz, co takiego wiąże się ze zdecentralizowanymi rozwiązaniami. Na początku opiszę krótko historię całego rozwiązania, następnie porozmawiamy nieco o różnych rodzajach sieci, po czym przejdę już do specyfiki blockchaina. Z tekstu dowiesz się również, czym jest hashowanie i dlaczego jest takie istotne w zdecentralizowanym świecie. Życzę przyjemnej lektury 🙂

Blockchain nie taki młody, jakby się mogło wydawać

Rysunek 1. Nowa technologia
(źródło: https://www.pinterest.com/pin/374924737704427889/)

Powstanie blockchaina kojarzone jest zazwyczaj z wystartowaniem Bitcoina i nic w tym dziwnego. Było to pierwsze tego typu rozwiązanie, które zadziałało na szeroką skalę. Jednak sama idea narodziła się nieco wcześniej.

W 1991 roku Stuart Haber oraz W. Scott Stornetta opisali łańcuch bloków, które byłyby połączone ze sobą znacznikiem czasowym. Wszystko to miało być zabezpieczone kryptografią, która eliminowała by potencjalne próby manipulacji danymi. Przekładając to na język ludzki, możesz wyobrazić sobie sytuację, w której masz arkusze Excela i każdy z nich oznaczony jest identyfikatorem przechowującym informację o czasie jego powstania. Dodatkowo wszystko to jest tak zabezpieczone kryptografią, że nie jesteś w stanie podmienić historii.

Również w latach dziewięćdziesiątych, a mianowicie w 1998 roku, został opisany pierwszy koncept dotyczący kryptowalut. Twórcą tego pomysłu był Nick Szabo, a swój mechanizm określił jako Bit Gold. Mniej więcej w podobnym czasie powstał drugi pomysł o nazwie b-money, a jego inicjatorem był Wei Dai.

W 2004 roku Hal Finney przedstawił system zwany Reusable Proof of Work, który jest pierwowzorem dla obecnego algorytmu konsensusu Bitcoina zwanego Proof of Work. Nie przejmuj się, jeśli pierwszy raz słyszysz o algorytmach konsensusu. W tej chwili wystarczy, że uznasz to rozwiązanie za mechanizm, który sprawia, że wszystkie transakcje na blockchainie są zabezpieczone i wiarygodne.

Wreszcie w roku 2008 Satoshi Nakamoto opublikował tzw. White Paper dla Bitcoina, czyli dokument opisujący szczegółowo, czym jest ten dziwny twór. Do dzisiaj nie wiadomo, kim jest Satoshi. Podejrzeń było i jest bardzo dużo, jednak sam zainteresowany nigdy nie ujawnił swojej tożsamości. Może w przyszłości zagadka ta zostanie rozwiązana i dowiemy się, jaka twarz albo twarze kryją się pod tym pseudonimem.

Około roku później został uruchomiony pierwszy węzeł Bitcoin, wprawiając całą machinę w ruch. Oczywiście początkowo technologia ta przyciągała jedynie prawdziwych “geeków”, a sama kryptowaluta była bezwartościowa. Natomiast jeszcze w tym samym roku pewna giełda sprzedała 5050 BTC za ogromną kwotę wynoszącą… 5,02 $, rejestrująć tym samym pierwszy zakup tej kryptowaluty za pieniądze. 

Warto jeszcze wspomnieć o latach 2013, 2014 i 2015, w których najpierw zostało opisane Ethereum, następnie zebrano pieniądze na finansowanie projektu, po czym wystartowano blockchain o tej samej nazwie. Ethereum będzie się jeszcze sporo razy przewijało na tym blogu, dlatego warto zapamiętać te daty.

Jak widzisz, pomimo że historia blockchaina nie jest jakaś bardzo obszerna, to sama idea i koncepty powstały na długo przed wystartowaniem Bitcoina. Przejdźmy jednak do tego, co może przydać się w teraźniejszym świecie, czyli technikalia.

Były sobie sieci trzy…

Rysunek 2. Sieci
(źródło: https://medium.com/@sriram.inc/blockchain-fundamentals-centralised-vs-decentralised-vs-distributed-networks-part-1-b20d27e9cb60)

Podobnie jak w znanej bajce o trzech małych świnkach, gdzie każda z nich zbudowała swój dom, ale tylko ten murowany okazał się najbezpieczniejszych schronieniem, również w świecie IT istnieją lepsze i gorsze rozwiązania danego problemu. Zanim przejdę do samego blockchaina, to wypada omówić rodzaje sieci, na które możemy się natknąć.

Pierwsza z nich to sieć scentralizowana (ang. centralized). Jest to rodzaj infrastruktury, w której główną rolę odgrywa centralny serwer, przez który przechodzą wszystkie zapytania i wychodzą odpowiedzi. Oznacza to, że każdy użytkownik serwisu opartego o ten model, aby wykonać jakąś akcję, musi skomunikować się z taką jednostką. Ze względu na to, że wszystkie dane są w jednym miejscu, to wykonywane operacje są bardzo szybkie, ale niestety niesie to za sobą też negatywne konsekwencje.

Po pierwsze, jeśli nastąpi atak, który zatrzyma pracę scentralizowanych serwerów, to wtedy wszyscy użytkownicy stracą dostęp do aplikacji. Po drugie, w razie włamania na serwer, atakujący może wykraść wszystkie dane z jednego miejsca lub też je podmienić. Co więcej, nie tylko haker może chcieć dokonać oszustwa. Ponieważ właściciele takiego rozwiązania mają pełną kontrolę nad tym, co dzieje się w środku, to oni sami mogą chcieć czerpać korzyści z potencjalnych manipulacji. Dodatkowo, jako użytkownicy, nie mamy żadnej możliwości sprawdzenia, czy nikt nie dokonywał na serwerze oszustw. Kolejnym problemem jest to, że jeśli właściciele infrastruktury będą mieli swoje widzimisię, mogą nas w łatwy sposób odciąć od sieci.

Kolejnym i nieco lepszym rozwiązaniem są tzw. sieci zdecentralizowane (ang. decentralized). Różnica polega na tym, że zamiast trzymać dane w jednym centralnym miejscu, rozkładamy je na wiele serwerów zlokalizowanych w różnych punktach. Dzięki temu możemy np. przechowywać dane amerykańskich klientów w USA, europejskich w Polsce, a azjatyckich w Singapurze. W razie ataku nie zostaną wykradzione wszystkie informacje. Dodatkowo, jeśli któryś z serwerów padnie, tylko osoby z danego regionu nie będą miały dostępu do aplikacji. Niestety taka sieć wciąż zarządzana jest zazwyczaj przez jedną organizację, dlatego dane w niej mogą ulegać manipulacji. Również tutaj nasz dostęp do sieci zależny jest od zarządcy.

Na szczęście, tak jak w przypadku trzech świnek, tak i tutaj, istnieje rozwiązanie, które może poradzić sobie z niektórymi z wymienionych problemów, a jest nim sieć rozproszona (ang. distributed). Podobnie jak w poprzednim mechanizmie, również tu istnieje wiele komputerów, które przechowują dane i obsługują zapytania. Każdy z nich możemy nazwać węzłem. W odróżnieniu od sieci zdecentralizowanej, taki “serwer” przechowuje dokładnie te same informacje, co oznacza, że wszystkie węzły są równoważne. Jeżeli jeden z nich zostanie odcięty od sieci, to całość dalej będzie funkcjonować bez problemu. Co więcej, sieć taka może być pod kontrolą wielu niezależnych operatorów. Dlatego, jeśli któryś z nich chciałby podmienić dane w jednym węźle, reszta sieci byłaby w stanie to wykryć. Minusem rozwiązania może być jego prędkość. Ponieważ węzły potrzebują nieco czasu na synchronizację między sobą, rozwiązanie to na pewno będzie wolniejsze niż scentralizowane sieci. 

Może pojawić się tutaj pytanie, co w takim razie z potencjalną kradzieżą danych? Przecież wszystkie informacje znajdują się na każdym węźle, dlatego włamanie na jeden z nich sprawi, że atakujący zdobędzie dostęp do wszystkiego. Jest to poniekąd prawda, jednak tego typu sieć wykorzystuje się zazwyczaj wtedy, kiedy samo posiadanie danych nie stanowi problemu. Dlatego na takim rozwiązaniu oparty jest blockchain, który wykorzystuje wszystkie zalety sieci rozproszonych.

Ciekawostką może być to, że pomimo oparcia blockchaina o sieć rozproszoną, mówiąc o rozwiązaniach opartych na takiej technologii, używamy słowa “zdecentralizowane”.

Wszystko, wszędzie, naraz – czyli po prostu blockchain

Rysunek 3. Everything, everywhere, all at once
(źródło: https://filmozercy.com/wpis/wybierzcie-sie-w-podroz-po-multiwersum-studia-a24-z-tripowymi-plakatami-filmu-wszystko-wszedzie-naraz)

Wiesz już, że blockchain jest oparty o rozproszoną sieć i posiada wszystkie jej cechy, więc możemy skupić się na tym, jak wykorzystuje on to rozwiązanie. Wcześniej wspomniałem, że nie występuje tu problem kradzieży danych. Dzieje się tak, dlatego że blockchain jest siecią otwartą oraz publiczną. Co prawda, można tworzyć również rozwiązanie prywatne oraz tzw. blockchainy consortium, ale wykorzystywane one są w mniejszości i tematy przedstawiane na tym blogu będą raczej dotyczyły tych publicznych.

Wracając do tematu, dwie wymieniony cechy sprawiają, że dowolna osoba na świecie może stać się węzłem takiej sieci. Oznacza to, że również dane, które się w niej znajdują, są dostępne dla każdego. Po co zatem włamywać się do kogoś na komputer, skoro możesz je mieć za darmo :). Takie podejście może wydawać się dziwne, ale sprawia, że wszystko to, co dzieje się na blockchainie jest transparentne. Skoro wszyscy mają dostęp do danych i mogą śledzić, co takiego dokonuje się w sieci, to gdy jeden z węzłów spróbowałby podmienić jakieś dane, będzie to bardzo szybko wychwycone przez resztę użytkowników. Fakt ten sprawia również, że informacje na blockchainie są niezmienne (ang. immutable). Precyzyjniej mówiąc, to historia wpisów nie ulega zmianie, natomiast samą wartość da się zmienić, jednak ślad po tym pozostanie na wieki. Jeśli chciałbyś zerknąć, co dzieje się obecnie w blockchainowej sieci lub podejrzeć historyczne dane, możesz to zrobić np. tutaj.

Gdyby ktoś chciał krótkim zdaniem wytłumaczyć, czym jest blockchain, to może powiedzieć, że jest to po prostu zdecentralizowana baza danych, o specyficznych właściwościach, a historia wszystkich jej wpisów połączona jest ze sobą pewnego rodzaju znacznikiem. Zanim opowiem, czym dokładnie jest ten “odcisk palca”, muszę wyjaśnić jeszcze jedno zagadnienie.

Magiczne pudełko

Rysunek 4. Magik
(źródło: https://www.livescience.com/9065-neuroscientists-reveal-magicians-secrets.html)

Jednym z ważniejszych pojęć, na które możesz natknąć się bardzo często w blockchainowym świecie, jest haszowanie. I nie, nie chodzi tutaj o żadnego rodzaju używki. Funkcja haszująca lub, inaczej mówiąc, funkcja skrótu, pozwala z dowolnych danych wejściowych otrzymać pewien ciąg znaków reprezentujący oryginalny wkład. Istotne jest jednak to, że ta funkcja jest deterministyczna. Dzięki temu, za każdym razem kiedy przepuścimy przez nią te same dane, otrzymamy dokładnie ten sam wynik. Co więcej, przy dokonaniu chociażby najmniejszej zmiany we wprowadzonych informacjach, otrzymany rezultat będzie całkowicie inny. Przykładowo, jeżeli wrzucimy obrazek do funkcji skrótu, następnie zmienimy w oryginale pojedynczy piksel i ponownie zahaszujemy obraz, to wyniki będą różne. Tak samo rezultat takiej funkcji dla wyrazów “Dzień dobry” oraz “Dzień Dobry” nie będzie miał ze sobą nic wspólnego.

Kolejną istotną sprawą, jest fakt, że funkcja skrótu jest jednokierunkowa. Oznacza to, że nie ma jakiejkolwiek możliwości, aby z danych wyjściowych odtworzyć dane wejściowe. Takie rozwiązanie wykorzystuje się również do przechowywania haseł na scentralizowanych serwerach, ponieważ dzięki temu, nawet osoba mająca dostęp do bazy danych, nie będzie w stanie odgadnąć prawdziwej frazy.

Warto również dodać, że otrzymany wynik wykonania takiej funkcji będzie miał zawsze tę samą wielkość, niezależnie od wprowadzonych danych. Nie ma zatem znaczenia, czy przepuścimy przez nią 20 MB obrazek, czy krótki tekst. Rezultatem będzie ciąg znaków o stałej długości.

Niech się stanie jedność!

Rysunek 5. Rick i Morty – Unity
(żródło: https://rickandmorty.fandom.com/wiki/Auto_Erotic_Assimilation)

Blockchain to struktura, na którą składają się poszczególne bloki danych. Każde “pudełeczko” zawiera zarówno metadane opisujące sam blok (np. czas utworzenia bloku), jak i wszystkie dane dotyczące transakcji wchodzących w jego skład. Posiada także swojego rodzaju identyfikator, w którym, w pewnym sensie, zapisany jest również znacznik poprzedniego bloku. Stąd też nazwa blockchain, czyli po prostu łańcuch połączonych bloków. 

Wspomniane cechy nie zapewniłyby poprawności historii, gdyby nie jeden mały szczegół. Każdy identyfikator bloku powstaje przy pomocy funkcji haszującej. Do utworzenia znacznika wykorzystywane są m.in. dane dotyczące wszystkich transakcji oraz hasz poprzedniego bloku. Skoro najmniejsza zmiana którejkolwiek z danych wpłynie na otrzymanie zupełnie innego identyfikatora, to w przypadku próby manipulacji jesteśmy w stanie bardzo łatwo stwierdzić, że do niej doszło. Zmiana czegoś w jednym bloku sprawi, że każdy kolejny, który został uprzednio utworzony, będzie niepoprawny.

Gdyby takie podejście zastosować, ale użyć do tego scentralizowanej sieci, to wciąż można by w łatwy sposób nadpisać całą historię i nikt by się nie zorientował. Jednak blockchain jest rozproszony po tysiącach komputerów, więc zmiana czegoś na jednym z nich nie wpłynie na poprawność danych na pozostałych. Co więcej, takie oszustwo zostanie wykryte, a manipulator srogo ukarany. Więcej o tym zagadnieniu opowiem w przyszłości, przy okazji omawiania algorytmów konsensusu. W tej chwili warto zapamiętać, że blockchain posiada mechanizm, który eliminuje w praktyce manipulacje historią zapisanych danych.

Technologia to jedno, ale jak sprawić, aby ludzie zaczęli jej używać? Gdyby blockchain był idealnym wynalazkiem, ale nikt nie chciałby z niego korzystać, to rozwiązania na nim oparte nie miałyby sensu, ani żadnej wartości. Dlatego tym tematem zajmiemy się już w kolejnym wpisie:)

Share this Post
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments