Bitcoin: Elektroniczny system gotówkowy typu peer-to-peer

Satoshi Nakamoto

satoshin@gmx.com

www.bitcoin.org


Streszczenie. Elektroniczna gotówka w wersji peer-to-peer umożliwiłaby wysyłanie płatności online bezpośrednio od jednej strony do drugiej bez przechodzenia przez instytucję finansową. Podpisy cyfrowe zapewniają część rozwiązania, ale główne korzyści są tracone, jeśli nadal wymagana jest zaufana strona trzecia, aby zapobiec podwójnemu wydatkowaniu. Proponujemy rozwiązanie problemu podwójnego wydatkowania za pomocą sieci peer-to-peer. Sieć stempluje transakcje, mieszając je w ciągły łańcuch opartych na hashowaniu dowodów pracy, tworząc zapis, którego nie można zmienić bez ponownego wykonania dowodu pracy. Najdłuższy łańcuch służy nie tylko jako dowód sekwencji obserwowanych zdarzeń, ale także jako dowód, że pochodzi z największej puli mocy procesora. Dopóki większość mocy procesora jest kontrolowana przez węzły, które nie współpracują przy atakowaniu sieci, będą generować najdłuższy łańcuch i wyprzedzać atakujących. Sama sieć wymaga minimalnej struktury. Wiadomości są rozsyłane z największą starannością, a węzły mogą dowolnie opuszczać sieć i ponownie do niej dołączać, akceptując najdłuższy łańcuch proof-of-work jako dowód tego, co wydarzyło się podczas ich nieobecności.

 

1. Wstęp

Handel w Internecie polega prawie wyłącznie na instytucjach finansowych, które służą jako zaufane strony trzecie do przetwarzania płatności elektronicznych. Chociaż system działa wystarczająco dobrze w przypadku większości transakcji, nadal cierpi na nieodłączne słabości modelu opartego na zaufaniu. Całkowicie nieodwracalne transakcje nie są tak naprawdę możliwe, ponieważ instytucje finansowe nie mogą uniknąć sporów mediacyjnych. Koszt pośrednictwa zwiększa koszty transakcyjne, ograniczając minimalną praktyczną wielkość transakcji i odcinając możliwość drobnych przypadkowych transakcji, a utrata możliwości dokonywania nieodwracalnych płatności za nieodwracalne usługi wiąże się z szerszym kosztem. Wraz z możliwością odwrócenia potrzeba zaufania rozprzestrzenia się. Sprzedawcy muszą uważać na swoich klientów, nękając ich o więcej informacji, niż potrzebowaliby w innym przypadku. Pewien odsetek oszustw jest akceptowany jako nieunikniony. Tych kosztów i niepewności związanych z płatnościami można uniknąć osobiście, używając fizycznej waluty, ale nie istnieje żaden mechanizm umożliwiający dokonywanie płatności za pośrednictwem kanału komunikacyjnego bez zaufanej strony.

Potrzebny jest elektroniczny system płatności oparty na dowodzie kryptograficznym zamiast na zaufaniu, umożliwiający dwóm zainteresowanym stronom przeprowadzanie transakcji bezpośrednio między sobą bez potrzeby korzystania z zaufanej strony trzeciej. Transakcje, których odwrócenie jest niepraktyczne pod względem obliczeniowym, chroniłyby sprzedawców przed oszustwami, a rutynowe mechanizmy depozytowe można łatwo wdrożyć w celu ochrony kupujących. W tym artykule proponujemy rozwiązanie problemu podwójnego wydatkowania przy użyciu rozproszonego serwera znaczników czasu peer-to-peer do generowania obliczeniowego dowodu chronologicznej kolejności transakcji. System jest bezpieczny, o ile uczciwe węzły wspólnie kontrolują większą moc procesora niż jakakolwiek współpracująca grupa atakujących węzłów.

2. Transakcje

Definiujemy monetę elektroniczną jako łańcuch podpisów cyfrowych. Każdy właściciel przekazuje monetę następnemu, podpisując cyfrowo skrót poprzedniej transakcji i klucz publiczny następnego właściciela i dodając je na końcu monety. Odbiorca płatności może zweryfikować podpisy, aby zweryfikować łańcuch własności.

Problem polega oczywiście na tym, że odbiorca nie może zweryfikować, czy jeden z właścicieli nie wydał monety podwójnie. Częstym rozwiązaniem jest wprowadzenie zaufanego organu centralnego lub mennicy, który sprawdza każdą transakcję pod kątem podwójnych wydatków. Po każdej transakcji moneta musi zostać zwrócona do mennicy w celu wyemitowania nowej monety, a tylko monety wyemitowane bezpośrednio z mennicy mają pewność, że nie zostaną wydane podwójnie. Problem z tym rozwiązaniem polega na tym, że los całego systemu pieniężnego zależy od firmy prowadzącej mennicę, przez którą musi przejść każda transakcja, tak jak w banku.

Potrzebujemy sposobu, aby odbiorca wiedział, że poprzedni właściciele nie podpisywali żadnych wcześniejszych transakcji. Dla naszych celów liczy się najwcześniejsza transakcja, więc nie przejmujemy się późniejszymi próbami podwójnego wydania. Jedynym sposobem na potwierdzenie braku transakcji jest świadomość wszystkich transakcji. W modelu opartym na mennicy mennica była świadoma wszystkich transakcji i decydowała, która z nich dotarła jako pierwsza. Aby to osiągnąć bez zaufanej strony, transakcje muszą być ogłaszane publicznie [1], a my potrzebujemy systemu, w którym uczestnicy uzgadnialiby jedną historię kolejności, w jakiej zostały otrzymane. Odbiorca płatności potrzebuje dowodu, że w momencie każdej transakcji większość węzłów zgadzała się, że była to pierwsza otrzymana transakcja.

3. Serwer znaczników czasu

Rozwiązanie, które proponujemy zaczyna się od serwera znaczników czasu. Serwer znaczników czasu działa poprzez pobieranie skrótu bloku elementów, które mają być opatrzone znacznikiem czasu, i szerokie publikowanie tego skrótu, na przykład w gazecie lub w poście w sieci Usenet [2-5]. Znacznik czasu dowodzi, że dane musiały istnieć w tym czasie, oczywiście, aby dostać się do skrótu. Każdy znacznik czasu zawiera poprzedni znacznik czasu w swoim haszu, tworząc łańcuch, przy czym każdy dodatkowy znacznik czasu wzmacnia poprzedni.

4. Dowód wykonania pracy

Aby zaimplementować rozproszony serwer znaczników czasu na zasadzie peer-to-peer, będziemy musieli użyć systemu proof-of-work podobnego do Hashcash Adama Backa [6], a nie postów w gazecie lub Usenecie. Dowód pracy obejmuje skanowanie w poszukiwaniu wartości, która po zaszyfrowaniu, na przykład za pomocą SHA-256, hash zaczyna się od liczby bitów zerowych. Średnia wymagana praca jest wykładnicza pod względem liczby wymaganych bitów zerowych i można ją zweryfikować, wykonując pojedynczy skrót.

W naszej sieci ze znacznikami czasu implementujemy dowód pracy, zwiększając wartość jednorazową w bloku, aż do znalezienia wartości, która nadaje haszowi bloku wymagane bity zerowe. Gdy wysiłek procesora zostanie wykorzystany, aby spełnić dowód pracy, bloku nie można zmienić bez ponownego wykonania pracy. Ponieważ późniejsze bloki są po nim połączone, praca nad zmianą bloku obejmowałaby ponowne wykonanie wszystkich bloków po nim.

Dowód pracy rozwiązuje również problem określania reprezentacji w podejmowaniu decyzji większością głosów. Gdyby większość opierała się na zasadzie jeden-adres-IP-jeden-głos, każdy, kto byłby w stanie przydzielić wiele adresów IP, mógłby to obalić. Dowód pracy to zasadniczo jeden procesor - jeden głos. Decyzja większości jest reprezentowana przez najdłuższy łańcuch, w który zainwestowano największy wysiłek związany z dowodem pracy. Jeśli większość mocy procesora jest kontrolowana przez uczciwe węzły, uczciwy łańcuch będzie rósł najszybciej i wyprzedzi wszelkie konkurencyjne łańcuchy. Aby zmodyfikować poprzedni blok, osoba atakująca musiałaby ponownie wykonać dowód pracy bloku i wszystkich następujących po nim bloków, a następnie dogonić i przewyższyć pracę uczciwych węzłów. Pokażemy później, że prawdopodobieństwo nadrobienia zaległości przez wolniejszego atakującego maleje wykładniczo w miarę dodawania kolejnych bloków.

Aby zrekompensować rosnącą prędkość sprzętu i zmieniające się zainteresowanie uruchamianiem węzłów w czasie, trudność dowodu pracy jest określana na podstawie średniej ruchomej, której celem jest średnia liczba bloków na godzinę. Jeśli są generowane zbyt szybko, poziom trudności wzrasta.

5. Sieć

Aby uruchomić sieć, należy wykonać następujące czynności:

1)    Nowe transakcje są rozgłaszane do wszystkich węzłów.

2)    Każdy węzeł gromadzi nowe transakcje w bloku.

3)    Każdy węzeł pracuje nad znalezieniem trudnego dowodu pracy dla swojego bloku.

4)    Gdy węzeł znajdzie dowód pracy, rozgłasza blok do wszystkich węzłów.

5)    Węzły akceptują blok tylko wtedy, gdy wszystkie transakcje w nim zawarte są ważne i nie zostały już wydane.

6)    Węzły wyrażają akceptację bloku poprzez pracę nad stworzeniem kolejnego bloku w łańcuchu, używając hasha zaakceptowanego bloku jako poprzedniego.

Węzły zawsze uznają najdłuższy łańcuch za właściwy i będą dalej pracować nad jego przedłużeniem. Jeśli dwa węzły jednocześnie transmitują różne wersje następnego bloku, niektóre węzły mogą najpierw otrzymać jeden lub drugi. W takim przypadku pracują nad pierwszą otrzymaną gałęzią, ale zachowują drugą gałąź na wypadek, gdyby stała się dłuższa. Remis zostanie zerwany, gdy zostanie znaleziony następny dowód pracy i jedna gałąź stanie się dłuższa; węzły, które pracowały na drugiej gałęzi, przełączą się następnie na dłuższą.

Rozgłaszanie nowych transakcji niekoniecznie musi docierać do wszystkich węzłów. Dopóki dotrą do wielu węzłów, wkrótce dostaną się do bloku. Transmisje blokowe tolerują również porzucone wiadomości. Jeśli węzeł nie otrzyma bloku, zażąda go, gdy otrzyma następny blok i zda sobie sprawę, że przegapił jeden.

6. Zachęta

Zgodnie z konwencją, pierwsza transakcja w bloku jest transakcją specjalną, która rozpoczyna nową monetę posiadaną przez twórcę bloku. To dodaje zachętę dla węzłów do wspierania sieci i zapewnia sposób wstępnej dystrybucji monet do obiegu, ponieważ nie ma centralnego organu, który mógłby je emitować. Stałe dodawanie stałej ilości nowych monet jest analogiczne do wydobywania złota przez poszukiwaczy złota, aby dodać złoto do obiegu. W naszym przypadku zużywany jest czas procesora i energia elektryczna.

Zachęta może być również finansowana z opłat transakcyjnych. Jeżeli wartość wyjściowa transakcji jest mniejsza niż jej wartość wejściowa, różnica stanowi opłatę transakcyjną, która jest dodawana do wartości motywacyjnej bloku zawierającego transakcję. Gdy z góry określona liczba monet wejdzie do obiegu, zachęta może całkowicie przejść na opłaty transakcyjne i być całkowicie wolna od inflacji.

Zachęta może pomóc zachęcić węzły do zachowania uczciwości. Jeśli chciwy atakujący jest w stanie zgromadzić więcej mocy procesora niż wszystkie uczciwe węzły, musiałby wybrać między wykorzystaniem jej do oszukiwania ludzi poprzez kradzież jego płatności lub wykorzystaniem jej do generowania nowych monet. Powinien uznać za bardziej opłacalne granie według zasad, takich zasad, które dają mu więcej nowych monet niż wszyscy inni razem wzięci, niż podważanie systemu i ważności własnego bogactwa.

7. Odzyskiwanie miejsca na dysku

Gdy ostatnia transakcja w monecie zostanie zakopana pod wystarczającą liczbą bloków, wydane transakcje przed nią można odrzucić, aby zaoszczędzić miejsce na dysku. Aby to ułatwić bez łamania skrótu bloku, transakcje są haszowane w drzewie Merkle [7][2][5], przy czym tylko korzeń jest zawarty w haszu bloku. Stare bloki można następnie zagęszczać, odcinając gałęzie drzewa. Skróty wewnętrzne nie muszą być przechowywane.

Nagłówek bloku bez transakcji miałby około 80 bajtów. Jeśli założymy, że bloki są generowane co 10 minut, 80 bajtów * 6 * 24 * 365 = 4,2 MB rocznie. Biorąc pod uwagę, że systemy komputerowe zwykle sprzedawane są z 2 GB pamięci RAM od 2008 r., a prawo Moore'a przewiduje obecny wzrost

1,2 GB rocznie, przechowywanie nie powinno stanowić problemu, nawet jeśli nagłówki bloków muszą być przechowywane w pamięci.

8. Uproszczona weryfikacja płatności

Istnieje możliwość weryfikacji płatności bez uruchamiania pełnego węzła sieciowego. Użytkownik musi tylko przechowywać kopię nagłówków bloków najdłuższego łańcucha dowodu pracy, który może uzyskać, wysyłając zapytania do węzłów sieci, dopóki nie będzie przekonany, że ma najdłuższy łańcuch, i uzyskać gałąź Merkle łączącą transakcję z blokiem jest oznaczony znacznikiem czasu. Nie może sam sprawdzić transakcji, ale łącząc ją z miejscem w łańcuchu, widzi, że węzeł sieci ją zaakceptował, a bloki dodane po niej dodatkowo potwierdzają, że sieć ją zaakceptowała.

Jako taka, weryfikacja jest niezawodna, o ile uczciwe węzły kontrolują sieć, ale jest bardziej podatna na ataki, jeśli sieć zostanie obezwładniona przez atakującego. Podczas gdy węzły sieci mogą samodzielnie weryfikować transakcje, uproszczona metoda może zostać oszukana przez sfabrykowane transakcje atakującego tak długo, jak atakujący może nadal obezwładniać sieć. Jedną ze strategii ochrony przed tym byłoby akceptowanie alertów z węzłów sieciowych, gdy wykryją nieprawidłowy blok, zachęcając oprogramowanie użytkownika do pobrania pełnego bloku i powiadomionych transakcji w celu potwierdzenia niespójności. Firmy, które często otrzymują płatności, prawdopodobnie nadal będą chciały uruchamiać własne węzły, aby zapewnić bardziej niezależne bezpieczeństwo i szybszą weryfikację.

9. Łączenie i dzielenie wartości

Chociaż możliwe byłoby indywidualne przetwarzanie monet, wykonywanie oddzielnej transakcji dla każdego centa w przekazie byłoby nieporęczne. Aby umożliwić podział i łączenie wartości, transakcje zawierają wiele wejść i wyjść. Zwykle będzie albo pojedyncze wejście z większej poprzedniej transakcji, albo wiele wejść łączących mniejsze kwoty i co najwyżej dwa wyjścia: jedno dla płatności i jedno zwracające resztę, jeśli taka istnieje, z powrotem do nadawcy.

Należy zauważyć, że fan-out, gdzie transakcja zależy od kilku transakcji, a te transakcje zależą od wielu innych, nie stanowi tu problemu. Nigdy nie ma potrzeby wyodrębniania kompletnej, samodzielnej kopii historii transakcji.

10. Prywatność

Tradycyjny model bankowy osiąga poziom prywatności poprzez ograniczenie dostępu do informacji do zaangażowanych stron i zaufanej strony trzeciej. Konieczność publicznego ogłaszania wszystkich transakcji wyklucza tę metodę, ale prywatność można nadal zachować, przerywając przepływ informacji w innym miejscu: zachowując anonimowość kluczy publicznych. Publiczność może zobaczyć, że ktoś wysyła kwotę do kogoś innego, ale bez informacji łączących transakcję z kimkolwiek. Jest to podobne do poziomu informacji udostępnianych przez giełdy, gdzie czas i wielkość poszczególnych transakcji, „taśma”, są upubliczniane, ale bez ujawniania stron.

Jako dodatkową zaporę ogniową, dla każdej transakcji należy użyć nowej pary kluczy, aby zapobiec powiązaniu ich ze wspólnym właścicielem. Niektóre powiązania są nadal nieuniknione w przypadku transakcji z wieloma danymi wejściowymi, które z konieczności ujawniają, że ich dane wejściowe należały do tego samego właściciela. Ryzyko polega na tym, że w przypadku ujawnienia właściciela klucza powiązanie może ujawnić inne transakcje należące do tego samego właściciela.

11. Obliczenia

Rozważamy scenariusz, w którym atakujący próbuje wygenerować alternatywny łańcuch szybciej niż uczciwy łańcuch. Nawet jeśli to się uda, nie narazi to systemu na arbitralne zmiany, takie jak tworzenie wartości z powietrza lub zabieranie pieniędzy, które nigdy nie należały do atakującego. Węzły nie zaakceptują nieważnej transakcji jako płatności, a uczciwe węzły nigdy nie zaakceptują zawierającego je bloku. Osoba atakująca może tylko spróbować zmienić jedną ze swoich transakcji, aby odzyskać ostatnio wydane pieniądze.

Wyścig między uczciwym łańcuchem a łańcuchem atakujących można scharakteryzować jako dwumianowy spacer losowy. Zdarzenie sukcesu to przedłużenie uczciwego łańcucha o jeden blok, zwiększając jego przewagę o +1, a zdarzenie niepowodzenia to przedłużenie łańcucha atakującego o jeden blok, zmniejszając różnicę o -1.

Prawdopodobieństwo nadrobienia przez atakującego zadanego deficytu jest analogiczne do problemu Ruiny hazardzisty. Załóżmy, że gracz z nieograniczonym kredytem zaczyna od deficytu i rozgrywa potencjalnie nieskończoną liczbę prób, aby osiągnąć próg rentowności.

Biorąc pod uwagę nasze założenie, że p > q, prawdopodobieństwo spada wykładniczo wraz ze wzrostem liczby bloków, które atakujący musi dogonić. Z szansami przeciwko niemu, jeśli wcześnie nie wykona szczęśliwego skoku do przodu, jego szanse stają się znikomo małe, gdy zostaje dalej w tyle.

Rozważymy teraz, jak długo odbiorca nowej transakcji musi czekać, zanim nabierze wystarczającej pewności, że nadawca nie może zmienić transakcji. Zakładamy, że nadawca jest atakującym, który chce sprawić, by odbiorca uwierzył, że mu zapłacił przez jakiś czas, a następnie przestawić go, aby zwrócił się do siebie po pewnym czasie. Odbiorca zostanie o tym powiadomiony, ale nadawca ma nadzieję, że będzie za późno.

Odbiorca generuje nową parę kluczy i przekazuje klucz publiczny nadawcy na krótko przed podpisaniem. Uniemożliwia to wysyłającemu przygotowanie łańcucha bloków z wyprzedzeniem poprzez nieustanną pracę nad nim, dopóki nie będzie miał wystarczająco dużo szczęścia, aby wyprzedzić go wystarczająco daleko, a następnie wykonać transakcję w tym momencie. Po wysłaniu transakcji nieuczciwy nadawca zaczyna potajemnie pracować nad równoległym łańcuchem zawierającym alternatywną wersję jego transakcji.

Odbiorca czeka, aż transakcja zostanie dodana do bloku, a po niej zostanie połączone z bloków. Nie zna dokładnego postępu atakującego, ale zakładając, że uczciwe bloki zajmowały średni oczekiwany czas na blok, potencjalny postęp atakującego będzie miał rozkład Poissona.

12. Wniosek

Zaproponowaliśmy system transakcji elektronicznych bez polegania na zaufaniu. Zaczęliśmy od zwykłej struktury monet wykonanych z podpisów cyfrowych, która zapewnia silną kontrolę własności, ale jest niekompletna 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, której zmiana szybko staje się niepraktyczna obliczeniowo dla atakującego, jeśli uczciwe węzły kontrolują większość mocy procesora. Sieć jest solidna w swojej nieustrukturyzowanej prostocie. Węzły działają jednocześnie z niewielką koordynacją. Nie trzeba ich identyfikować, ponieważ wiadomości nie są kierowane do żadnego konkretnego miejsca i muszą być jedynie dostarczane na zasadzie najlepszych starań. Węzły mogą dowolnie opuszczać i dołączać do sieci, akceptując łańcuch proof-of-work jako dowód tego, co się wydarzyło, gdy ich nie było. Głosują mocą swojego procesora, wyrażając akceptację ważnych bloków, pracując nad ich rozszerzeniem i odrzucając nieprawidłowe bloki, odmawiając pracy nad nimi. Za pomocą tego mechanizmu konsensusu można egzekwować wszelkie potrzebne zasady i zachęty.

 

Bibliografia[1]        W. Dai, „b-money”, http://www.weidai.com/bmoney.txt, 1998.[2]H. Massias , XS Avila i J.-J. Quisquater , „Projektowanie bezpiecznej usługi znakowania czasem przy minimalnych wymaganiach dotyczących zaufania”, podczas 20. sympozjum na temat teorii informacji w krajach Beneluksu, maj 1999 r. [3]                S. Haber, WS Stornetta , „Jak oznaczyć czasowo dokument cyfrowy”, w Journal of Cryptology, tom 3, nr 2, strony 99-111, 1991. [4]                D. Bayer, S. Haber, WS Stornetta , „Poprawa wydajności i niezawodności cyfrowego znakowania czasem”, In Sequences II: Methods in Communication, Security and Computer Science, strony 329-334, 1993. [5]          S. Haber, WS Stornetta , „Bezpieczne nazwy dla ciągów bitów”, w materiałach z 4. Konferencji ACM na temat bezpieczeństwa komputerów i komunikacji, strony 28-35, kwiecień 1997. [6]         A. Back, „ Hashcash – przeciwdziałanie odmowie usługi”, http://www.hashcash.org/papers/hashcash.pdf, 2002. [7]             RC Merkle, „Protokoły dla systemów kryptograficznych z kluczem publicznym”, w Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, strony 122-133, kwiecień 1980.[8]W. Feller, „Wprowadzenie do teorii prawdopodobieństwa i jej zastosowań”, 1957.

Kup Bitcoina

Tutaj możesz kupić Bitcoina .