Chciwość, bezpieczeństwo i planszówki – czyli jak zachęcić ludzi do blockchaina
Blokchain, jako technologia, jest według mnie jednym z największych wynalazków ostatniego czasu. Transparentność, brak potrzeby zaufania trzeciej stronie oraz niepodrabialne rozwiązania już rewolucjonizują świat. Nie są to jedyne cechy, które sprawiły, że ta technologia zyskała ogromną popularność. Dlatego w tym poście postaram się przedstawić aspekty, które wpływają na ogromny przyrost blockchainowych użytkowników. Opowiem o tym, co najbardziej przekonuje ludzi do utrzymywania sieci, do czego m.in. wykorzystywana jest kryptografia oraz na czym polega teoria gier i jaki ma udział w procesie tworzenia zdecentralizowanych rozwiązań.
Liczą się pieniądze
Może zabrzmi to niezbyt optymistycznie i masz prawo się z tym nie zgadzać, ale ludzie są, generalnie rzecz biorąc, chciwi. Czy wynika to z naszej natury, czy środowiska i uderzających w nas z każdego miejsca reklam, mówiących nam, że coś “musimy” mieć, to już inna kwestia. Twórcy blockchaina dobrze zdawali sobie sprawę z ludzkich pragnień, dlatego postarali się wykorzystać tę cechę do rozpropagowania nowej technologii.
Skoro ludzie lubią pieniądze, to dajmy im możliwość ich zarabiania, a w zamian oni pomogą nam utrzymywać i rozwijać całą sieć. I tak z grubsza można opisać ekonomię, która stoi za blockchainem.
Oczywiście nie można było tego zrobić przy pomocy standardowych walut, ponieważ wtedy blockchain stałby się scentralizowanym rozwiązaniem, zależnym od banków, rządów oraz innych instytucji. Dlatego należało stworzyć swoje własne pieniądze, które dzisiaj są znane pod nazwą kryptowaluty. W ten sposób dla Bitcoina mamy, jakże by inaczej, bitcoiny, dla Ethereum ether, dla Polygona matic, itp. itd.
Wartość (nie mylić z wyceną) kryptowalut zwiększa się wraz ze wzrostem efektu sieciowego poszczególnych blockchainów, a to powoduje przyciąganie nowych użytkowników. Dokładnie ten sam mechanizm działa przy wielu innych rozwiązaniach np. FB. Im więcej osób z niego korzysta, tym więcej osób do niego dołącza. Dlatego najczęściej ten, kto pierwszy wpadnie na jakiś pomysł, zgarnia większość rynku. Z tego powodu uważam, że Ethereum, jako blockchain pozwalający tworzyć smart kontrakty, ale rownież inne blockchainy z nim powiązane, ma obecnie, pomimo pewnych niedogodności, zdecydowaną przewagę nad konkurencją.
Jednak nic by nie pomogło obdarowywanie ludzi pieniędzmi, gdyby można było je w łatwy sposób ukraść lub gdyby mechanizmy pozwalające zarządzać środkami były nierzetelne. Stąd też, oprócz ekonomii, potrzebna była również kryptografia.
Bezpieczeństwo na blockchainie przede wszystkim
Tworzenie różnego rodzaju rozwiązań opartych o blockchain zwykle nie będzie wymagać od Ciebie szczegółowej wiedzy z dziedziny kryptografii. Chociaż istnieją oczywiście obszary, w których takie umiejętności są niezbędne, to mogę śmiało stwierdzić, że większość Web 3.0 deweloperów nie musi na co dzień z nich korzystać. Niemniej jednak warto poznać przynajmniej podstawowe mechanizmy rządzące blockchainem.
Na samym początku omówię dwa rodzaje szyfrowania, a następnie przejdę do przykładów transakcji na blockchainie.
Pierwszy rodzaj to tzw. szyfrowanie symetryczne. W takim podejściu istnieje jeden klucz, który służy zarówno do szyfrowania, jak i odszyfrowania wiadomości. Żeby to dobrze zrozumieć, wyobraź sobie, że Ty i bliska Ci osoba chcecie wysyłać do siebie wiadomości. Żeby uniemożliwić komukolwiek po drodze odczytanie takiej przesyłki, nawet jeśli ktoś ją przechwyci, tworzycie ciąg losowych znaków, który jest znany tylko Wam. Przed wysłaniem każdej wiadomości, używacie tego klucza do jej zaszyfrowania. Po jej otrzymaniu adresat może ją otworzyć przy użyciu stworzonego ciągu znaków. Podejście w miarę proste i skuteczne, jednak posiada ogromną wadę. Ponieważ istnieje tylko jeden klucz, który używany jest do wszystkiego, wystarczy, że ktokolwiek go przechwyci i już będzie w stanie odszyfrować Waszą korespondencję. W przypadku dwóch osób może i nie jest trudno utrzymać klucz w tajemnicy, ale wyobraź sobie taką sytuację, w której uczestniczą tysiące osób. Wtedy szansa wycieku znacznie wzrasta.
Na szczęście istnieje zdecydowanie lepsze rozwiązanie, a jest nim tzw. szyfrowanie asymetryczne. Tutaj występują dwa klucze. Pierwszy z nich nazywamy publicznym i służy on do szyfrowania wiadomości, natomiast drugi nosi nazwę prywatny i wykorzystywany jest do jej odszyfrowywania. Nazwy nie są przypadkowe, ponieważ klucz publiczny może być dostępny dla szerokiej publiczności. Dzieje się tak, bo przy jego pomocy nie ma możliwości dekodowania wiadomości. Podobnie jak w przypadku funkcji haszującej, można powiedzieć, że jest to operacja jednokierunkowa. Natomiast musimy zadbać o bezpieczeństwo klucza prywatnego, ponieważ z jego pomocą obca osoba otrzymałaby dostęp do naszych wiadomości.
Wróćmy zatem do naszego przykładu wzajemnej komunikacji. W tej chwili zarówno Ty, jak i bliska Ci osoba macie po jednym kluczu prywatnym oraz publicznym. Jeśli Ty chciałbyś wysłać swoją wiadomość, to szyfrujesz ją za pomocą klucza publicznego drugiej osoby, ta natomiast odkoduje przesłaną informację swoim kluczem prywatnym i vice versa. Tym sposobem ograniczyliśmy liczbę miejsc, z których może wyciec konkretny klucz. Nawet jeśli to się stanie, to atakujący będzie miał tylko dostęp do części wiadomości, ponieważ reszta została zaszyfrowana przy pomocy innego klucza publicznego.
Podobny mechanizm został wykorzystany w blockchainie. W tym wypadku same wiadomości nie są szyfrowane, ale wspomniane klucze służą do podpisywania transakcji. Prześledźmy to na przykładzie prostego przesyłu bitcoina.
Transakcja na Bitcoinie
Załóżmy, że Ania chciałaby wysłać Krzyśkowi jednego bitcoina. Jak taka transakcja wygląda z perspektywy sieci? Każde z nich posiada swój unikalny adres. W odniesieniu do poprzedniego rozdziału możemy powiedzieć, że są to ich klucze publiczne. Pierwszą rzeczą, którą musi zrobić Ania, jest pozyskanie adresu Krzyśka. Ponieważ jego ujawnienie szerszej publiczności nie sprawi, że środki na nim zgromadzone zostaną wykradzione, dlatego Krzyś bezproblemowo dzieli się nim z Anią. Ta, mając już wszystkie niezbędne dane, tworzy transakcję, w której zapisuje, że chciałaby wysłać 1 BTC na adres Krzyśka, a całość podpisuje swoim kluczem prywatnym, który powiązany jest wyłącznie z jej adresem. Tak utworzona wiadomość trafia następnie do bitcoinowej sieci, gdzie zostaje poddana weryfikacji. Co dokładnie się tam dzieje, wyjaśnię innym razem, w tej chwili ważne jest to, że na podstawie otrzymanych informacji możemy sprawdzić, czy Ania miała tak naprawdę prawo dostępu do adresu, z którego próbuje wysłać bitcoina. Jeśli całość przebiegnie pomyślnie, to środki zostaną dopisane do klucza publicznego Krzyśka, a ten, przy pomocy swojego klucza prywatnego, będzie miał do nich dostęp.
Wewnętrznie cały mechanizm oczywiście wymaga wielu skomplikowanych operacji, jednak mam nadzieję, że sama opisana idea jest zrozumiała.
Istotne jest tutaj też to, że w odróżnieniu od klasycznego użycia pary klucz publiczny – klucz prywatny, sama wiadomość nie jest zaszyfrowana. Jeśli chcesz, to możesz przejrzeć przykładową transakcję pod tym linkiem. Na pierwszy rzut oka może się wydawać, że nie istnieje tu żadna anonimowość. Jednak nie wiemy tak naprawdę, do kogo należą podane adresy, dlatego ta informacja może być dostępna publicznie. Oczywiście, jeżeli będziemy w stanie powiązać dany klucz publiczny z konkretną osobą, to każda jej operacja może zostać wyśledzona. Stąd też jakiś czas temu pojawiła się wypowiedź jednej z osób pracujących w FBI, która stwierdziła, że byłoby o wiele łatwiej, gdyby do nielegalnych transakcji oszuści używali bitcoina, a nie gotówki. Wtedy znalezienie przestępcy byłoby o wiele łatwiejsze, gdyby ten po drodze popełnił jakiś drobny błąd.
Temat prywatności i anonimowości w świecie Web 3.0 jest bardzo rozległy i ciekawy, w przyszłości postaram się przygotować materiał, który go rozwinie.
Teoria gier prawdę Ci powie
Stworzenie systemu odpornego na oszustwa wymaga często bardzo wielu skomplikowanych mechanizmów. Jednak nic nam po nich, jeśli wcześniej źle przewidzimy, w jaki sposób będą one wykorzystywane. Może się okazać, że mamy najbardziej wyrafinowane rozwiązanie na świecie, a nie uwzględniliśmy w nim czynnika ludzkiego, który potrafi często płatać różne figle. Jak sobie z tym poradzić? Z pomocą przychodzi nam teoria gier.
Najprostszym wytłumaczeniem tego pojęcia będzie powiedzenie, że jest to sposób na sprawdzenie ludzkich zachowań w pewnych ustalonych warunkach. Środowisko testowe zazwyczaj przyjmuje postać pewnej interaktywnej gry, z zasadami określonymi z góry. Gracze mają różne możliwości wyboru zachowania, a obserwator sprawdza, czy każdy z nich zachowuje się racjonalnie, czy może też próbuje wpłynąć na zachowanie innych uczestników. Przy pomocy takiego podejścia możemy przewidzieć, jak będą zachowywać się ludzie w konkretnym środowisku.
W zrozumieniu tego tematu pomoże Ci prześledzenie jednego z problemów, przedstawionego za pomocą teorii gier, tzw. “dylematu więźnia”.
Zasady są następujące: dwóch kryminalistów zostało złapanych za handel narkotykami i grozi im za to kara 2 lat pozbawienia wolności. Dodatkowo każdy z nich został jeszcze oskarżony o napad z bronią w ręku. W takiej sytuacji wkracza prokurator, który przesłuchuje ich pojedynczo, a oni nie mają żadnej możliwości komunikowania się ze sobą. Każdy z nich może się albo przyznać się do napadu, albo zaprzeczyć udziału w nim. Jeżeli pierwszy z nich potwierdzi stawiane zarzuty, a drugi się wyprze, to kolejno dostaną jeden rok i dziesięć lat pozbawienia wolności. W odwrotnym przypadku sytuacja wygląda podobnie, ale pierwszy otrzyma dziesięć lat, drugi zaś jeden rok. Jeśli obaj się przyznają, to każdy z nich odsiedzi trzy lata, natomiast w razie podwójnego wyparcia się, idą do więzienia jedynie za handel narkotykami. Żeby lepiej to zobrazować, zebrałem te reguły w poniższej tabelce.
B przyznaje się | B zaprzecza | |
A przyznaje się | Oboje dostają po 3 lata | A dostaje 1 rok B dostaje 10 lat |
A zaprzecza | A dostaje 10 lat B dostaje 1 rok | Oboje dostają po 2 lata |
Którą z opcji wybiorą więźniowie? Na pierwszy rzut oka może się wydawać, że najlepiej byłoby się wyprzeć. Jednak jeśli przyjrzymy się nieco bliżej proponowanym wariantom i uwzględnimy w decyzji potencjalny wybór drugiego kompana, odpowiedź może wydawać się zaskakująca.
Kiedy oczywiste nie oznacza najlepsze
Jeżeli wcześniej pomyślałeś, że zaprzeczenie przez obu więźniów jest wynikiem przedstawionej gry, to muszę Cię zmartwić, ale nie byłaby to poprawna odpowiedź. Okazuje się, że wybór który zostałby prawdopodobnie podjęty, to przyznanie się przez każdego z nich. Zaskakujące? Już tłumaczę, skąd to się bierze.
Każdy z więźniów, oprócz swojej decyzji, musi uwzględnić posunięcie drugiego z nich. Rozumowanie pierwszego z nich może wyglądać następująco (dla ułatwienia nazwijmy drugiego Tomek): “Grozi mi dwa lata za narkotyki. W takim wypadku nie przyznam się do napadu z bronią i odsiedzę wyłączenie tamten wyrok. Tylko co, jeśli Tomek się przyzna. Wtedy ja idę do paki na 10 lat, a ten skurkowaniec dostanie jedynie rok i to może w zawiasach. Ale gdybym tak się przyznał, to jest szansa, że on zaprzeczy i ja pójdę tylko na rok odsiadki. Z drugiej strony nawet jeśli się przyzna, to dostaniemy po 3 lata. Trochę gorsza opcja niż za same narkotyki, ale o wiele lepsza niż spędzenie 10 lat w ciupie. Wychodzi na to, że bezpieczniej będzie mi się przyznać”.
Podobny tok rozumowania występuje u Tomka. Z tego też powodu ostatecznie okaże się, że oboje będą woleli przyznać się do winy, ponieważ najgorsza możliwa opcja w tej sytuacji jest i tak o wiele lepsza, niż to, co mogłoby ich czekać, w razie niepożądanego zachowania kolegi. W teorii gier taka sytuacja nosi nazwę “równowagi Nasha”. W skrócie jest to najbardziej racjonalna decyzja, przy uwzględnieniu posunięć innych graczy.
Twórcy sieci opartych o blockchain również osiągnęli w swoich rozwiązaniach równowagę Nasha, a udało się to zrobić dzięki mechanizmom konsensusu, o których opowiem w kolejnym wpisie :).