Od Redakcji
Mamy przyjemność zaprosić Was do lektury drugiej części tłumaczenia manifestu Bitcoina autorstwa Satoshiego Nakamoto na Bithub.pl. Przypomnienie Bitcoin whitepaper to doskonała okazja zarówno dla wszystkich początkujących, jak i doświadczonych adeptów bitcoinowej sztuki, aby z uwagą prześledzić raz jeszcze myśl Ojca Bitcoina w języku polskim. Część 1 jest dostępna tutaj. Bitcoin whitepaper po polsku. Chłońcie:)
Przywrócenie pamięci dyskowej
Gdy ostatnia transakcja w monecie zostanie zapisana pod wystarczającą liczbą bloków, wcześniejsze transakcje można usunąć, aby zaoszczędzić miejsce na dysku. Aby to ułatwić bez łamania hashu bloku, transakcje są mieszane w drzewie Merklego, przy czym tylko podstawa zawiera się w haszu bloku. Stare bloki można następnie zagęścić, usuwając gałęzie drzewa. Wewnętrzne hasze nie muszą być przechowywane.
Nagłówek bloku bez transakcji miałby około 80 bajtów. Jeśli przypuszczamy, że bloki są generowane co 10 minut, 80 bajtów * 6 * 24 * 365 = 4,2 MB rocznie. Z systemami komputerowymi zwykle sprzedawanymi z 2 GB pamięci RAM od 2008 r., a prawo Moore’a przewiduje obecny wzrost na poziomie1,2 GB rocznie, pojemność nie powinna stanowić problemu, nawet jeśli nagłówki bloków muszą być przechowywane w pamięci.
Uproszczona weryfikacja płatności
Możliwe jest sprawdzenie płatności bez uruchamiania pełnego węzła sieciowego. Użytkownik musi tylko zachować kopię nagłówków bloków najdłuższego łańcucha opartego o dowód pracy, którą może uzyskać poprzez zapytanie węzłów sieciowych, dopóki nie przekona się, że ma najdłuższy łańcuch, i uzyska gałąź Merklego łączącą transakcję z blokiem, w którym ma znacznik czasu. Nie może sprawdzić transakcji sam, ale łącząc to z miejscem w łańcuchu, widzi, że węzły sieci zaakceptowały transakcję, a bloki dodane po niej tylko potwierdzają, że sieć ją zaakceptowała.
W związku z tym weryfikacja jest niezawodna, o ile uczciwe węzły kontrolują sieć, ale może zostać poddana próbie, jeśli atakujący przejmie sieć. Podczas gdy węzły sieciowe mogą weryfikować transakcje dla siebie, uproszczona metoda może zostać oszukana poprzez atakującego, który będzie fabrykował transakcje tak długo, jak będzie w stanie obezwładniać sieć. Jedną z strategii ochrony przed tym byłoby akceptowanie alertów z węzłów sieciowych, gdy wykryją one nieprawidłowe bloki, sugerując oprogramowaniu użytkownikowa pobranie pełnego bloku i powiadomienie o transakcjach wzbudzających niespójność. Firmy, które często otrzymują płatności, prawdopodobnie nadal będą chciały uruchomić własne węzły, aby uzyskać bardziej niezależne zabezpieczenia i szybszą weryfikację.
Łączenie i dzielenie wartości
Chociaż możliwe byłoby procesowanie monet indywidualnie, niełatwo byłoby zrobić osobną transakcję dla każdego centa w przelewie. Aby umożliwić podział i łączenie wartości, transakcje zawierają wiele danych wejściowych i wyjściowych. Zwykle będzie albo jedno wejście z większej poprzedniej transakcji lub wielu danych wejściowych łączących mniejsze kwoty i co najwyżej dwa wyniki: jeden dla płatności i jeden zwracający ewentualną resztę z powrotem do nadawcy.
Należy zauważyć, że fan-out, w którym transakcja zależy od kilku transakcji, a te zależą od wielu innych, nie stanowi problemu. Nigdy nie ma potrzeby wyodrębniania pełna kopii historii transakcji.
Prywatność
Tradycyjny model bankowy osiąga poziom prywatności poprzez ograniczenie dostępu do informacji przez zaangażowane strony i zaufana trzecią strona. Konieczność publicznego ogłaszania wszystkich transakcji wyklucza tę metodę, ale prywatność można nadal zachować, przerywając przepływ informacji w innymi miejscu: utrzymując anonimowość kluczy publicznych. Publiczność może zobaczyć, że ktoś wysyła transakcję do kogoś innego, ale bez informacji łączących transakcję z jakimkolwiek użytkownikiem. Jest to podobne do poziomu informacji przekazywanych przez giełdy papierów wartościowych, gdzie czas i wielkość pojedyncze transakcji są upubliczniane, ale nie wiadomo kim były strony.
Jako dodatkowej ochrony należy użyć nowej pary kluczy dla każdej transakcji, aby uniemożliwić powiązania ich z jednym właścicielem. Niektóre połączenia są nadal nieuniknione przy transakcjach z wieloma wejściami, które ujawniają, że ich dane wejściowe były własnością tego samego właściciela. Ryzyko polega na tym, że jeśli ujawniony zostanie właściciel klucza, połączenia mogą ujawnić inne transakcje, które należały do tego samego właściciela.
Obliczenia
Rozważamy scenariusz, w którym atakujący próbuje wygenerować alternatywny łańcuch szybciej niż uczciwy łańcuch. Nawet jeśli zostanie to osiągnięte, nie spowoduje to otwarcia systemu na arbitralne zmiany, takie jak jako tworzenie wartości z powietrza lub zabieranie pieniędzy, które nigdy nie należały do atakującego. Węzły nie będą akceptować nieprawidłowej transakcji jako płatności, a uczciwe węzły nigdy nie zaakceptują bloku zawierającego takie transakcje. Atakujący może jedynie spróbować zmienić jedną ze swoich transakcji, aby odzyskać pieniądze, które wcześniej wydał.
Wyścig pomiędzy uczciwym łańcuchem a łańcuchem napastników można scharakteryzować jako Dwumianowy Spacer Losowy (ang. Binomial Random Walk). Sukcesem jest uczciwy łańcuch przedłużony o jeden blok, zwiększając jego prowadzenie o +1, a niepowodzeniem jest łańcuch atakującego przedłużony o jeden blok, zmniejszający różnicę o -1.
Prawdopodobieństwo, że atakujący nadrobi zaległości z danego deficytu jest analogiczne do problemu zwanego Gamblers’ Ruin. Załóżmy, że gracz z nieograniczonym kredytem zaczyna od deficytu i gra potencjalnie nieskończoną liczbę prób aby osiągnąć próg rentowności. Możemy obliczyć prawdopodobieństwo, czy kiedykolwiek osiągnie próg rentowności lub atakujący kiedykolwiek dogoni uczciwy łańcuch w następujący sposób:
p = prawdopodobieństwo znalezienia nowego bloku przez uczciwy węzeł
q = prawdopodobieństwo znalezienia nowego bloku przez atakującego
q(z) = prawdopodobieństwo dogonienia przez atakującego, który startuje od z bloków w tył
Biorąc pod uwagę nasze założenie, że p > q prawdopodobieństwo spada wykładniczo wraz z liczbą bloków do jakiej atakujący musi nadrobić zaległości. Z szansami przeciwko niemu, jeśli nie będzie miał szczęścia znaleźć bloku relatywnie wcześnie, jego szanse stają się znikomo małe, wraz z rosnącą liczbą nowych bloków.
Rozważamy teraz, jak długo odbiorca nowej transakcji musi poczekać, zanim będzie wystarczająco pewny, że nadawca nie może zmienić transakcji. Zakładamy, że nadawca jest napastnikiem który chce sprawić, by odbiorca uwierzył przez chwilę, że zapłacił, a następnie cofnąć transakcję po pewnym czasie. Odbiorca zostanie powiadomiony, gdy to nastąpi, ale nadawca ma nadzieję, że będzie za późno.
Odbiorca generuje nową parę kluczy i krótko przed podpisaniem przekazuje nadawcy klucz publiczny Zapobiega to przygotowaniu przez nadawcę łańcucha bloków z wyprzedzeniem, dopóki nie będzie miał szczęścia, aby być wystarczająco daleko i wykonać transakcję w danym momencie. Po wysłaniu transakcji nieuczciwy nadawca zaczyna działać w tajemnicy na równoległym łańcuchu zawierającym alternatywną wersję jego transakcji.
Odbiorca czeka, aż transakcja zostanie dodana do bloku i z bloków zostanie połączone po nim. Nie zna dokładnego postępu poczynionego przez atakującego, ale zakładając, że uczciwe bloki pojawiały się w średnim oczekiwanym czasie bloku, potencjalny postęp atakującego będzie rozkładem Poissona o oczekiwanej wartości:
Aby uzyskać prawdopodobieństwo, że atakujący może jeszcze nadrobić zaległości, mnożymy zagęszczenie Poissona dla każdego postępu, jaki mógł zrobić, przez prawdopodobieństwo, nadrobienia od tego momentu:
Reorganizując aby uniknąć założenia o nieskończonych krańcach dystrybucji…
Konwertując do kodu C…
Przeliczając niektóre wyniki, możemy zobaczyć, że prawdopodobieństwo maleje wykładniczo z z.
Rozwiązując dla P mniejszego niż 0.1%…
Podsumowanie
Zaproponowaliśmy system transakcji elektronicznych bez polegania na zaufaniu. Zaczęliśmy od zwykłego założenia monet stworzonych z podpisów cyfrowych, które zapewniają silną kontrolę własność, ale jest ono niekompletne bez sposobu zapobiegania podwójnemu wydatkowaniu. Aby rozwiązać ten problem, zaproponowaliśmy sieć peer-to-peer wykorzystującą dowód pracy do rejestrowania publicznej historii transakcji, co szybko staje się niepraktyczne obliczeniowo dla atakującego do zmiany, jeśli uczciwe węzły kontrolują większość mocy procesora. Sieć jest solidna w swojej nieustrukturyzowanej prostocie. Wszystkie węzły pracują razem z niewielką koordynacją. Nie trzeba ich identyfikować, ponieważ wiadomości nie są kierowane do żadnego konkretnego miejsca i muszą tylko być dostarczone na zasadzie najlepszej staranności. Węzły mogą odchodzić i dołączać do sieci na życzenie, akceptując łańcuch dowodu pracy jako dowód tego, co zdarzyło się, gdy ich nie było. Głosują przy pomocy swojej mocy procesora, wyrażając swoją akceptację prawidłowych bloków, pracując nad ich rozszerzaniem i odrzucając nieprawidłowe bloki, odmawiając pracy przy nich. Za pomocą tego mechanizmu konsensusu można egzekwować wszelkie potrzebne zasady i zachęty.
Maciej Kmita
Część pierwsza whitepapera Bitcoina po polsku tutaj. Z oryginalną wersja dokumentu możecie zapoznać się tutaj.