Professional Documents
Culture Documents
Whitepaper PL
Whitepaper PL
Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org
1. Wprowadzenie
Handel w Internecie polega już niemal wyłącznie na instytucjach finansowych, służących jako
zaufani pośrednicy, którzy przetwarzają płatności elektroniczne. Choć system taki wystarcza
dla większości transakcji, to nadal pociąga za sobą nieodłączne bolączki modelu opartego na
zaufaniu. Transakcje całkowicie nieodwracalne są de facto niemożliwe, ponieważ instytucje
finansowe nie mogą uniknąć mediacji w sporach. Koszt mediacji powiększa koszty
transakcyjne, co praktycznie ogranicza minimalną wielkość transakcji i uniemożliwia
dokonywanie małych transakcji okazjonalnych. Pojawia się również koszt dodatkowy,
w postaci utraty możliwości dokonania nieodwracalnych płatności za nieodwracalne usługi.
Gdy występuje możliwość cofnięcia transakcji, konieczne staje się zaufanie. Sprzedawcy
1
Model komunikacji w sieci komputerowej. Źródło: http://pl.wikipedia.org/wiki/Peer-to-peer [Dostęp:
19.10.2012]
2
Podobnie jak na poczcie – datownik określa precyzyjnie datę – tak znacznik czasu precyzyjnie określa
konkretny dzień i czas. Źródło: http://en.wikipedia.org/wiki/Timestamp [Dostęp: 19.10.2012]
3
Ang. proof-of-work – dowód wykonania konkretnej pracy, dowód wykonania konkretnych, ściśle ustalonych
działań, obliczeń matematycznych. Źródło: http://en.wikipedia.org/wiki/Proof-of-work_system [Dostęp:
19.10.2012]
str. 1 z 14
muszą ostrożniej podchodzić do swoich klientów, zmuszając ich do podania większej ilości
informacji, niż byłoby to konieczne w innych okolicznościach. Pewien odsetek oszustw
przyjmuje się za nieunikniony. Kosztów tych oraz niepewności co do płatności można uniknąć
dzięki osobistym transakcjom za pomocą waluty fizycznej, ale nie istnieje żaden mechanizm
dokonywania płatności poprzez urządzenia telekomunikacyjne, bez zaufanego pośrednika.
2. Transakcje
4
Usługa w ramach której pośrednik zabezpiecza prawidłowy przebieg transakcji kupna-sprzedaży. Źródło:
http://pl.wikipedia.org/wiki/Escrow [Dostęp: 19.10.2012]
5
Jest to funkcja, która przyporządkowuje dowolnie dużej liczbie krótką, zwykle posiadającą stały rozmiar, nie
specyficzną, quasi-losową wartość, tzw. skrót nieodwracalny. Źródło:
http://pl.wikipedia.org/wiki/Funkcja_skrótu [Dostęp: 19.10.2012]
str. 2 z 14
Problem oczywiście polega na tym, że odbiorca nie może zweryfikować, czy jeden
z poprzednich właścicieli nie wydatkował danych monet podwójnie. Typowo stosowanym
rozwiązaniem jest wprowadzenie zaufanych organów centralnych, czy też mennic, które
sprawdzają każdą transakcję pod kątem podwójnego wydatkowania. Po każdej transakcji,
monety muszą zostać zwrócone do mennicy celem wydania nowych monet, a tylko do
monet emitowanych bezpośrednio w mennicy można mieć zaufane, że nie zostały
dwukrotnie wydane. Problem tego rozwiązania polega na tym, że los całego systemu
monetarnego zależy od spółki prowadzącej mennicę, a każda transakcja musi przez nią
przejść, tak jak w banku.
Potrzebny jest sposób upewnienia odbiorcy, że poprzedni właściciele nie dokonali żadnych
wcześniejszych transakcji (tymi właśnie, konkretnymi monetami). Dla naszych celów liczyć się
będzie najwcześniejsza transakcja, więc nie dbamy o późniejsze próby dwukrotnego
wydatkowania. Jedynym sposobem potwierdzenia braku transakcji jest informacja
o wszystkich transakcjach. W modelu opartym na mennicy, to mennica znała wszystkie
transakcje i decydowała która nastąpiła jako pierwsza. Aby osiągnąć to samo bez
pośrednictwa zaufanej strony, transakcje muszą być ogłaszane publicznie [1],
a my potrzebujemy systemu, w którym uczestnicy zgadzają się na jedną historię kolejności,
w jakiej wpłynęły transakcje. Odbiorca potrzebuje potwierdzenia, że podczas każdej
transakcji, większość węzłów potwierdziła, że to właśnie on otrzymał daną monetę jako
pierwszy.
str. 3 z 14
3. Serwer datowania (serwer znaczników czasu)
Dowody wykonania działań polegają na wyszukiwaniu wartości, dla której funkcja skrótu,
taka jak SHA-256, zaczyna się od pewnej liczby bitów zerowych. Średnia wymagana praca
rośnie wykładniczo względem liczby wymaganych bitów zerowych, a można ją zweryfikować
obliczając jedną funkcję skrótu.
Dla potrzeb naszej sieci „znaczników czasu”, wdrażamy dowód wykonania działań,
zwiększając wartość unikalną [nonce] w bloku aż do znalezienia wartości, która daje skrótowi
danego bloku wymagane bity zerowe. Po wykonaniu przez CPU (procesor) pracy w celu
uzyskania potwierdzenia wykonania działań, blok nie może zostać zmieniony bez ponownego
wykonania działań. Z uwagi na to, że następne bloki są dodawane do łańcucha, zmiana
danego bloku wiązałaby się z koniecznością zmiany wszystkich bloków następujących po nim.
6
Usenet (ang. USEr NETwork – sieć użytkowników) to ogólnoświatowy system grup dyskusyjnych, z którego
można korzystać przez Internet. Źródło: http://pl.wikipedia.org/wiki/Usenet [Dostęp: 19.10.2012]
str. 4 z 14
„Dowód wykonania pracy” rozwiązuje również problem ustalenia reprezentacji występujący
przy podejmowaniu decyzji większością głosów. Gdyby większość była oparta na zasadzie
„jeden-adres-IP-to-jeden-głos”, to mogłoby dojść do jej obalenia przez kogokolwiek,
kto byłby w stanie przydzielić sobie wiele adresów IP. Zastosowanie „dowodów wykonania
pracy” zasadniczo oznacza, że „jeden CPU to jeden głos”. Decyzję większości reprezentuje
najdłuższy łańcuch, który wiąże się z największym wysiłkiem obliczeniowym
zainwestowanym w dowód wykonania działań. Jeżeli większość mocy procesorów jest
sterowana przez „uczciwe”7 węzły, „uczciwy” łańcuch będzie rósł najszybciej i wyprzedzi
wszelkie łańcuchy konkurencyjne. Aby zmodyfikować dotychczasowy blok, napastnik
musiałby ponownie dokonać obliczeń w ramach proof-of-work dla danego bloku oraz
wszystkich bloków po nim, a następnie dogonić i prześcignąć pracę „uczciwych” węzłów.
Jak wykażemy później, prawdopodobieństwo, że wolniejszy napastnik nadrobi zaległości,
maleje wykładniczo wraz z dodawaniem kolejnych bloków.
5. Sieć
3) Każdy węzeł pracuje nad znalezieniem „trudnego dowodu pracy8” [proof-of-work], czyli
dowodu wykonania działań dla swojego bloku.
7
„Uczciwe”, czyli takie, które służą do autoryzacji transakcji w sieci Bitcoin i „obrony” systemu przed
ewentualnym atakiem.
8
Czym jest „trudny dowód pracy” wyjaśniono w akapicie 4.
str. 5 z 14
4) Gdy węzeł znajdzie dowód wykonania działań, nadaje (rozgłasza) blok do wszystkich
węzłów.
5) Węzły akceptują blok tylko wtedy, gdy wszystkie zawarte w nim transakcje są ważne i nie
doszło do podwójnego wydatkowania.
6) Węzły wyrażają zgodę na przyjęcie bloku poprzez pracę nad stworzeniem kolejnego bloku
w łańcuchu, używając do obliczeń skrótu przyjętego bloku. Węzły zawsze przyjmują
najdłuższy łańcuch jako prawidłowy i pracują nad jego przedłużeniem. Jeśli dwa węzły nadają
różne wersje następnego bloku jednocześnie, niektóre węzły mogą otrzymać jeden z nich
jako pierwszy. W takim wypadku, pracują nad pierwszym otrzymanym blokiem,
ale zachowują drugi, na wypadek gdyby stał się dłuższy. Powiązanie zostanie przerwane,
kiedy zostanie znaleziony następny dowód wykonania działań i jedna z gałęzi staje się
dłuższa. Węzły, które pracowały nad drugim odgałęzieniem, następnie przełączą się na
odgałęzienie dłuższe.
Przekazy dotyczące nowych transakcji nie muszą koniecznie dotrzeć do wszystkich węzłów.
Jeżeli tylko dotrą do wielu węzłów, zostaną wkrótce włączone do bloków. Transmisje
blokowe mają również tolerancję dla wiadomości zagubionych. Jeśli węzeł nie otrzyma
danego bloku, poprosi o niego po otrzymaniu kolejnego bloku, gdy zda sobie sprawę,
że go nie otrzymał.
6. Zachęta
Również opłaty transakcyjne mogą służyć jako zachęta. Jeśli wartość wyjściowa transakcji
jest niższa od jej wartości wejściowej, różnicą jest opłata transakcyjna, którą dodaje się
do wartości motywacyjnej bloku zawierającego transakcję. Po wejściu do obiegu ustalonej
liczby monet, zachęta może w całości przełożyć się na opłaty transakcyjne i być całkowicie
niezależna od inflacji.
Zachęta może pomóc węzłom pozostać uczciwymi. Jeśli „zachłanny” napastnik jest w stanie
zgromadzić więcej mocy obliczeniowej niż wszystkie uczciwe węzły, będzie musiał wybrać
między wykorzystaniem jej do okradania ludzi poprzez kradzież wpłaconych przez siebie
kwot, a użyciem jej do generowania nowych monet. Bardziej powinno mu się opłacać
działanie zgodne z zasadami, ponieważ postępowanie w ramach reguł przysporzy mu więcej
nowych monet niż posiadają pozostali użytkownicy razem wzięci. Stąd też nie będzie mieć
sensu podważanie systemu stanowiącego podstawę jego bogactwa.
str. 6 z 14
7. Odzyskiwanie miejsca na dysku
Po pokryciu ostatniej transakcji dla danej monety wystarczająco dużą liczbą bloków, dane
o poprzednich transakcjach będzie można usunąć, aby zaoszczędzić miejsce na dysku. Aby to
ułatwić bez niszczenia funkcji skrótu danego bloku, transakcje będą zapisywane w drzewie
Merkle [7] [2] [5], a tylko ich korzeń będzie zawarty w bloku skrótu. Stare bloki można
następnie skrócić przez odcięcie gałęzi drzewa. Nie ma konieczności przechowywania
wewnętrznych funkcji skrótu (ang. interior hashes).
Nagłówek bloku bez transakcji zajmie około 80 bajtów. Jeśli założymy, że bloki generowane
są co 10 minut, 80 bajtów * 6 * 24 * 365 = 4,2MB rocznie. Na rok 2008, przy systemach
komputerowych zazwyczaj sprzedawanych z 2 GB pamięci RAM, przewidując wzrost
wynikający z prawa Moore'a na poziomie 1,2 GB rocznie, nawet jeśli nagłówki bloków będą
musiały być przechowywane w pamięci, nie powinno to stanowić problemu.
Możliwe jest sprawdzenie płatności bez konieczności uruchamiania pełnego węzła sieci.
Użytkownik musi tylko zachować kopię nagłówków bloków łańcucha o najdłuższym
dowodzie wykonania działań, które może uzyskać przez przeszukiwanie węzłów sieci, dopóki
nie jest przekonany, że posiada najdłuższy łańcuch, a także uzyskać gałąź drzewa Merkle
łączącą transakcję z blokiem w którym została zapisana ze znacznikiem czasu. Użytkownik nie
może sprawdzić transakcji dla siebie, ale łącząc ją z miejscem w łańcuchu, widzi, że węzeł
sieci ją zaakceptował, a bloki dodane po niej stanowią dalsze potwierdzenie przyjęcia przez
sieć.
str. 7 z 14
Weryfikacja taka jest wiarygodna, dopóki uczciwe węzły kontrolują sieć, ale jest bardziej
narażona na przekłamania, jeśli sieć zostanie „pokonana” (opanowana) przez atakującego.
Podczas gdy węzły sieci mogą sprawdzić transakcje dla siebie, uproszczona metoda może
zostać zafałszowana przez fałszywe transakcje napastnika, dopóki napastnik będzie w stanie
„panować nad siecią”. Jedną ze strategii ochrony przed taką sytuacją byłoby przyjmowanie
alertów z węzłów sieci po wykryciu nieprawidłowego bloku, co skłoni oprogramowanie
użytkownika do pobrania pełnego bloku oraz transakcji objętych alertem, w celu
potwierdzenia niezgodności. Firmy otrzymujące częste płatności będą prawdopodobnie
chciały uruchomić własne węzły, co zapewni więcej niezależności, bezpieczeństwa i szybszą
weryfikację.
str. 8 z 14
Należy zauważyć, że „fan-out”9, gdzie transakcja zależy od kilku transakcji, które z kolei
zależą od wielu innych, nie stanowi tu problemu. Nigdy nie ma konieczności wyodrębnienia
kompletnej autonomicznej kopii historii danej transakcji.
10. Prywatność
9
W elektronice cyfrowej „fan-out” to „obciążenie”, czyli liczba wejść do których jest podłączona bramka
logiczna. Źródło: http://en.wikipedia.org/wiki/Fan-out [Dostęp: 19.10.2012]
10
Rodzaj nośnika danych zawierającego „komunikaty” z giełdy. Dawniej informacje giełdowe były
przekazywane na taśmach. Obecnie publikowane są m.in. w Internecie takie dane z giełdy jak: rodzaj akcji,
cena, wolumen oraz czas dokonania danej transakcji. Źródło: http://en.wikipedia.org/wiki/Ticker_tape [Dostęp:
19.10.2012]
str. 9 z 14
Dodatkową „zaporę” powinno zapewnić generowanie nowej pary kluczy dla każdej
transakcji, aby uniemożliwić powiązanie ich ze wspólnym właścicielem. Pewne możliwości
łączenia nadal są nieuniknione przy transakcjach o wielu danych wejściowych,
które z konieczności pokazują, że dane wejścia były własnością tego samego użytkownika.
Istnieje ryzyko, że jeśli dojdzie do ujawnienia właściciela klucza, połączenie danych może
ujawnić inne transakcje przeprowadzone przez tego samego użytkownika.
11. Obliczenia
11
Źródło: http://en.wikipedia.org/wiki/Gambler%27s_ruin [Dostęp: 19.10.2012]
str. 10 z 14
qz = prawdopodobieństwo, że atakujący kiedykolwiek nadrobi stratę o długości „z” bloków.
Biorąc pod uwagę nasze założenie, że p>q, prawdopodobieństwo spada wykładniczo wraz ze
wzrostem liczby bloków, które musi dogonić atakujący. Przy prawdopodobieństwie
działającym przeciwko napastnikowi, jeżeli nie poszczęści mu się znacząco na początku, jego
szanse stają się znikomo małe, im bardziej zostaje w tyle.
Rozważymy teraz jak długo odbiorca nowej transakcji musi czekać, zanim uzyska
wystarczającą pewność, że nadawca nie może cofnąć transakcji. Zakładamy, że nadawca to
napastnik, który chce aby odbiorca na chwilę uwierzył, że otrzymał wpłatę, aby po upływie
pewnego czasu zwrócić daną kwotę sobie. Odbiorca zostanie ostrzeżony gdy tak się stanie,
ale nadawca ma nadzieję, że wtedy będzie już za późno.
Odbiorca generuje nową parę kluczy i przekazuje klucz publiczny nadawcy na krótko przed
podpisaniem. Uniemożliwia to nadawcy przygotowanie łańcucha bloków z wyprzedzeniem,
dzięki nieprzerwanej pracy nad nim, aż poszczęściłoby mu się na tyle, że zdobyłby
wystarczająco duże prowadzenie, a następnie wykonał transakcję. Gdy transakcja zostaje
wysłana, nieuczciwy nadawca w tajemnicy rozpoczyna pracę nad równoległym łańcuchem
zawierającym alternatywną wersję swojej transakcji.
Odbiorca czeka, aż transakcja zostanie dodana do bloku i przyłączy się do niej liczba „z”
następnych bloków. Odbiorca nie wie jaki postęp osiągnął napastnik, ale zakładając,
że generowanie każdego „uczciwego” bloku zajęło średni oczekiwany czas, potencjalny
postęp atakującego będzie miał rozkład Poissona12 o następującej oczekiwanej wartości:
12
Źródło: http://pl.wikipedia.org/wiki/Rozkład_Poissona [Dostęp: 19.10.2012]
str. 11 z 14
Przekształcamy, aby uniknąć „sumowania nieskończonego”13 ogona rozkładu14...
13
Przekształcenie ma na celu uniknięcie dokonywania działań na bardzo dużych liczbach, gdyż wynik
„zmierzałby do nieskończoności”.
14
Źródło: http://pl.wikipedia.org/wiki/Rozkład_prawdopodobieństwa [Dostęp: 19.10.2012]
15
Język programowania C. Źródło: http://pl.wikipedia.org/wiki/C_(język_programowania) [Dostęp: 19.10.2012]
str. 12 z 14
Rozwiązanie dla P mniejszego niż 0,1% ...
12. Wniosek
Źródła:
str. 14 z 14