Darmowy fragment publikacji:
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu
niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą
kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym,
magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź
towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce
informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani
za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych
lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej
odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych
w książce.
Redaktor prowadzący: Magdalena Dragon-Philipczyk
Projekt okładki: Damian Rebuś
Materiały graficzne na okładce zostały wykorzystane za zgodą Shutterstock.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: onepress@onepress.pl
WWW: http://onepress.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://onepress.pl/user/opinie/sekbit
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
ISBN: 978-83-283-0364-5
Copyright © Helion 2015
Printed in Poland.
• Kup książkę
• Poleć książkę
• Oceń książkę
• Księgarnia internetowa
• Lubię to! » Nasza społeczność
Spis treści
Od autora
Wprowadzenie
Jak dzia(cid:239)a protokó(cid:239) Bitcoin?
Jak zacz(cid:200)(cid:202)?
Akceptowanie bitcoinów
Mining — wydobywanie kryptowalut
Bezpiecze(cid:241)stwo
Aspekt prawny bitcoina
Gdzie mog(cid:218) u(cid:285)ywa(cid:202) bitcoinów?
Polskie inicjatywy
Nowe mo(cid:285)liwo(cid:258)ci — inne kryptowaluty
Podsumowanie
Spis najwa(cid:285)niejszych serwisów
S(cid:239)ownik poj(cid:218)(cid:202)
Manifest Satoshiego Nakamoto
Bibliografia
7
11
25
41
107
115
127
133
139
143
147
157
161
165
171
191
Kup książkęPoleć książkę6
Sekrety Bitcoina i innych kryptowalut
Kup książkęPoleć książkę2 Jak działa
protokół
Bitcoin?
„Moim zdaniem to niesamowite, (cid:285)e w (cid:258)wiecie bitcoina
algorytm przejmuje funkcje typowe dla [rz(cid:200)du]”.
— Al Gore, by(cid:239)y wiceprezydent Stanów Zjednoczonych,
laureat Pokojowej Nagrody Nobla
Rozdzia(cid:239) ten jest po(cid:258)wi(cid:218)cony problematyce typowo technicznej i opi-
suje zasady dzia(cid:239)ania protoko(cid:239)u Bitcoin. Zapoznanie si(cid:218) z tymi za-
sadami nie jest konieczne do zrozumienia dalszej cz(cid:218)(cid:258)ci ksi(cid:200)(cid:285)ki,
ale z pewno(cid:258)ci(cid:200) mo(cid:285)e by(cid:202) przydatne. Znajdziesz tu odpowiedzi
na wiele pyta(cid:241) i dowiesz si(cid:218), czym jest mining, czyli wydobywanie
bitcoinów.
Bitcoin jest protoko(cid:239)em i jako elektroniczny system p(cid:239)atno(cid:258)ci
sk(cid:239)ada si(cid:218) z trzech elementów:
(cid:132) kryptografii klucza publicznego,
(cid:132) sieci peer-to-peer,
(cid:132) dowodu pracy (ang. proof of work).
Kup książkęPoleć książkę26
Sekrety Bitcoina i innych kryptowalut
Protokó(cid:239) to zbiór zasad umo(cid:285)liwiaj(cid:200)cych urz(cid:200)dzeniom nawi(cid:200)-
zanie (cid:239)(cid:200)czno(cid:258)ci w celu wymiany informacji. Przyk(cid:239)adem takiego
protoko(cid:239)u mo(cid:285)e by(cid:202) np. TCP/IP, który zosta(cid:239) opracowany, aby mo(cid:285)-
liwe by(cid:239)o tworzenie sieci komputerowych.
Dlaczego protokó(cid:239) Bitcoin korzysta z kryptografii? Aby w (cid:258)wie-
cie realnym zabezpieczy(cid:202) gotówk(cid:218), papiery warto(cid:258)ciowe itp., wyko-
rzystujemy sejfy, zamki, alarmy czy sk(cid:239)adamy depozyty w banku.
W (cid:258)wiecie bitów w celu zabezpieczenia wa(cid:285)nych danych stosuje-
my kryptografi(cid:218).
Kryptografia zapewnia bezpiecze(cid:241)stwo mi(cid:218)dzy innymi w han-
dlu elektronicznym, np. podczas dokonywania p(cid:239)atno(cid:258)ci kartami
bankowymi. Ma to na celu uniemo(cid:285)liwienie kradzie(cid:285)y lub podszy-
wania si(cid:218) pod kogo(cid:258) innego.
W jaki sposób informacje przesy(cid:239)ane za po(cid:258)rednictwem pro-
toko(cid:239)u Bitcoin mog(cid:200) sta(cid:202) si(cid:218) pieni(cid:218)dzmi? Przyjmijmy, (cid:285)e pewna
osoba, np. Pawe(cid:239), ma walut(cid:218) cyfrow(cid:200), któr(cid:200) chce wyda(cid:202). W (cid:258)wiecie
cyfrowym, gdzie mo(cid:285)emy kopiowa(cid:202) pliki, posiadanie waluty cyfro-
wej stwarza problem, który polega na tym, (cid:285)e wysy(cid:239)aj(cid:200)c do kogo(cid:258)
nasze bitcoiny, mo(cid:285)emy zachowa(cid:202) ich kopi(cid:218).
Jak zapobiec sytuacji, w której Pawe(cid:239) móg(cid:239)by wysy(cid:239)a(cid:202) wielo-
krotnie te same bitcoiny innym u(cid:285)ytkownikom, zapewniaj(cid:200)c sobie
niewyczerpane (cid:283)ród(cid:239)o pieni(cid:218)dzy? W jaki sposób mo(cid:285)emy sprawi(cid:202),
aby nie mo(cid:285)na by(cid:239)o podrobi(cid:202) bitcoinów Paw(cid:239)a i u(cid:285)ywa(cid:202) ich jako
nale(cid:285)(cid:200)cych do innej osoby?
To tylko dwa z wielu problemów, z którymi musi poradzi(cid:202)
sobie protokó(cid:239) Bitcoin, aby mo(cid:285)na by(cid:239)o u(cid:285)ywa(cid:202) informacji jako
pieni(cid:218)dzy.
Aby zapewni(cid:202) ochron(cid:218) takich pieni(cid:218)dzy przed podrabianiem
i kradzie(cid:285)(cid:200), protokó(cid:239) Bitcoin korzysta z kryptografii klucza pu-
blicznego.
Kup książkęPoleć książkęJak działa protokół Bitcoin?
27
2.1. Kryptografia klucza publicznego
Kryptografia klucza publicznego oznacza dwa ró(cid:285)ne klucze: pry-
watny oraz publiczny.
Idea kryptografii z kluczem publicznym mo(cid:285)e by(cid:202) obrazowo
przedstawiona w nast(cid:218)puj(cid:200)cy sposób. Wyobra(cid:283)my sobie, (cid:285)e jeste-
(cid:258)my w(cid:239)a(cid:258)cicielem samozatrzaskuj(cid:200)cej si(cid:218) k(cid:239)ódki i tylko my posia-
damy do niej klucz. Tak(cid:200) odblokowan(cid:200) k(cid:239)ódk(cid:218) mo(cid:285)emy wys(cid:239)a(cid:202)
naszemu znajomemu (odblokowan(cid:200) k(cid:239)ódk(cid:200) jest klucz publiczny,
który w protokole Bitcoin jest adresem naszego portfela).
Nasz znajomy mo(cid:285)e przy jej u(cid:285)yciu zabezpieczy(cid:202) przesy(cid:239)k(cid:218)
(wys(cid:239)a(cid:202) bitcoiny). Aby to zrobi(cid:202), nie potrzebuje klucza do k(cid:239)ódki,
gdy(cid:285) wystarczy j(cid:200) zatrzasn(cid:200)(cid:202).
Tak zabezpieczon(cid:200) przesy(cid:239)k(cid:218) mo(cid:285)e nada(cid:202) do nas. Poniewa(cid:285)
posiadamy klucz do k(cid:239)ódki (czyli klucz prywatny), jeste(cid:258)my w sta-
nie otworzy(cid:202) j(cid:200) i dosta(cid:202) si(cid:218) do zabezpieczonej zawarto(cid:258)ci. Oczywi-
(cid:258)cie w praktyce nie wykorzystuje si(cid:218) k(cid:239)ódek, tylko odpowiednie for-
mu(cid:239)y matematyczne. Ca(cid:239)a ta procedura pozwala w skuteczny sposób
uwierzytelnia(cid:202) transakcje pomi(cid:218)dzy w(cid:218)z(cid:239)ami w sieci Bitcoin.
Kluczem publicznym w systemie Bitcoin jest wspomniany nasz
adres portfela bitcoinowego. Taki adres mo(cid:285)emy wygenerowa(cid:202) mi(cid:218)-
dzy innymi w programie zainstalowanym na naszym komputerze,
np. w Bitcoin Wallet (portfel Bitcoin). Adres Bitcoin sk(cid:239)ada si(cid:218) z ci(cid:200)-
gu 34 znaków cyfr i liter i mo(cid:285)e wygl(cid:200)da(cid:202) tak:
1JgaU5bHHueeTa7jrXBj2aPLGKgbgx6WFy
Dany adres naszego portfela jest odpowiednikiem numeru
konta bankowego. Je(cid:258)li chcemy, aby przes(cid:239)ano do nas bitcoiny, po-
dajemy swój adres. W praktyce wysy(cid:239)anie bitcoinów jest bardzo
proste — wystarczy skopiowa(cid:202) adres osoby, której chcemy wys(cid:239)a(cid:202)
bitcoiny, wpisa(cid:202) sum(cid:218), jak(cid:200) chcemy przes(cid:239)a(cid:202), i klikn(cid:200)(cid:202) „wy(cid:258)lij”.
Kup książkęPoleć książkę28
Sekrety Bitcoina i innych kryptowalut
Aby zrozumie(cid:202), co dzieje si(cid:218) w protokole Bitcoin podczas wy-
sy(cid:239)ania bitcoinów i jak dzia(cid:239)a kryptografia klucza publicznego,
pos(cid:239)u(cid:285)(cid:218) si(cid:218) przyk(cid:239)adami. Pawe(cid:239) chce przes(cid:239)a(cid:202) bitcoiny Markowi,
wi(cid:218)c pisze do niego wiadomo(cid:258)(cid:202) (podczas wysy(cid:239)ania bitcoinów nie
jest konieczne pisanie wiadomo(cid:258)ci — przedstawiony przyk(cid:239)ad ma
na celu zobrazowanie dzia(cid:239)ania protoko(cid:239)u): „Ja, Pawe(cid:239), wysy(cid:239)am
Markowi jednego bitcoina”. Nast(cid:218)pnie podpisuje wiadomo(cid:258)(cid:202) pod-
pisem cyfrowym, tj. szyfruje j(cid:200) prywatnym kluczem kryptograficz-
nym, i obwieszcza ci(cid:200)g bitów ca(cid:239)emu (cid:258)wiatu.
Marek lub dowolny inny u(cid:285)ytkownik mo(cid:285)e u(cid:285)y(cid:202) klucza pu-
blicznego Paw(cid:239)a, aby sprawdzi(cid:202), czy osob(cid:200), która napisa(cid:239)a wiado-
mo(cid:258)(cid:202) „Ja, Pawe(cid:239), wysy(cid:239)am Markowi jednego bitcoina”, rzeczywi(cid:258)cie
by(cid:239) Pawe(cid:239). Nikt inny nie móg(cid:239) wygenerowa(cid:202) takiego ci(cid:200)gu bitów,
wi(cid:218)c Pawe(cid:239) nie móg(cid:239) pó(cid:283)niej zaprzeczy(cid:202), mówi(cid:200)c: „Nie, ja nie wy-
s(cid:239)a(cid:239)em Markowi jednego bitcoina”.
Protokó(cid:239) z wykorzystaniem kryptografii pozwala zatem na
ustalenie, i(cid:285) Pawe(cid:239) naprawd(cid:218) o(cid:258)wiadczy(cid:239), (cid:285)e wys(cid:239)a(cid:239) Markowi jed-
nego bitcoina.
Po wyeliminowaniu problemu z duplikacj(cid:200) i kradzie(cid:285)(cid:200) poja-
wia si(cid:218) kolejny k(cid:239)opot.
Pawe(cid:239) mo(cid:285)e wysy(cid:239)a(cid:202) Markowi wielokrotnie ten sam ci(cid:200)g bi-
tów (monet). Przyjmijmy, (cid:285)e Marek odbiera 10 kopii podpisanych
wiadomo(cid:258)ci „Ja, Pawe(cid:239), wysy(cid:239)am Markowi jednego bitcoina”.
Aby unikn(cid:200)(cid:202) takiej sytuacji, protokó(cid:239) Bitcoin potrzebuje ety-
kiety lub numeru seryjnego ka(cid:285)dej transakcji. Pawe(cid:239) pisa(cid:239)by wtedy:
„Ja, Pawe(cid:239), wysy(cid:239)am Markowi jednego bitcoina z numerem seryj-
nym 1234567”, „Ja, Pawe(cid:239), wysy(cid:239)am Markowi jednego bitcoina z nu-
merem seryjnym 7868765” itd. Dzi(cid:218)ki temu Marek wiedzia(cid:239)by, (cid:285)e
za ka(cid:285)dym razem zosta(cid:239) wys(cid:239)any inny bitcoin.
Aby taki sposób dzia(cid:239)a(cid:239), potrzebujemy zaufanego (cid:283)ród(cid:239)a wy-
dawania numerów seryjnych. Zobaczmy, jak mog(cid:239)oby to wygl(cid:200)da(cid:202),
gdyby zaufanym (cid:283)ród(cid:239)em by(cid:239) bank.
Kup książkęPoleć książkęJak działa protokół Bitcoin?
29
Pawe(cid:239) idzie do banku i mówi: „Chc(cid:218) pobra(cid:202) jednego bitcoina ze
swojego konta”. Bank pomniejsza konto Paw(cid:239)a o jednego bitcoina
i przydziela numer seryjny 1234567 do wydanej monety. Wówczas
Pawe(cid:239) wysy(cid:239)a wiadomo(cid:258)(cid:202) do Marka: „Ja, Pawe(cid:239), wysy(cid:239)am do Marka
jednego bitcoina o numerze seryjnym 1234567”, ale Marek przed
akceptacj(cid:200) przelewu kontaktuje si(cid:218) z bankiem i pyta, czy bitcoin
z numerem 1234567 nale(cid:285)y do Paw(cid:239)a i czy Pawe(cid:239) nie wyda(cid:239) go ju(cid:285)
wcze(cid:258)niej.
Je(cid:258)li obydwa warunki s(cid:200) spe(cid:239)nione, Marek mówi bankowi, (cid:285)e
chce zaakceptowa(cid:202) transfer bitcoina, a bank aktualizuje swoj(cid:200) baz(cid:218)
informacji, w której zaznacza, (cid:285)e teraz bitcoin o numerze 1234567
nale(cid:285)y do Marka.
Wersja takiego rozwi(cid:200)zania jest obiecuj(cid:200)ca, ale powodowa(cid:239)o-
by to uzale(cid:285)nienie si(cid:218) od zewn(cid:218)trznej instytucji, która posiada(cid:239)aby
ogromn(cid:200) w(cid:239)adz(cid:218). W jaki sposób wykluczy(cid:202) t(cid:218) sytuacj(cid:218)? Otó(cid:285) mo(cid:285)-
na wykorzysta(cid:202) sie(cid:202) P2P.
2.2. Sie(cid:202) P2P (peer-to-peer)
Sie(cid:202) P2P tworzona jest przez system klientów (programów zain-
stalowanych na poszczególnych komputerach), które komunikuj(cid:200)
si(cid:218) bezpo(cid:258)rednio ze sob(cid:200) jako równorz(cid:218)dne w(cid:218)z(cid:239)y sieci. Oznacza
to, (cid:285)e nie ma centralnej jednostki zarz(cid:200)dzania i przetwarzania
transakcji. Ka(cid:285)dy komputer pod(cid:239)(cid:200)czony do sieci P2P jest cz(cid:218)(cid:258)ci(cid:200)
ca(cid:239)o(cid:258)ci tego systemu.
Obecnie najpopularniejsz(cid:200) implementacj(cid:200) modelu P2P s(cid:200)
programy do wymiany plików w internecie, np. BitTorrent, gdzie
ka(cid:285)dy komputer odgrywa rol(cid:218) serwera, przyjmuj(cid:200)c po(cid:239)(cid:200)czenia od
innych u(cid:285)ytkowników sieci, oraz klienta, wysy(cid:239)aj(cid:200)c pliki i (lub)
pobieraj(cid:200)c je bezpo(cid:258)rednio z innych komputerów dzia(cid:239)aj(cid:200)cych
w tej samej sieci P2P. Topologi(cid:218) takiej sieci ilustruje rysunek 2.1.
Kup książkęPoleć książkę30
Sekrety Bitcoina i innych kryptowalut
Rysunek 2.1. Schemat przedstawiaj(cid:200)cy sie(cid:202) typu P2P
Na takiej samej zasadzie dzia(cid:239)a sie(cid:202) Bitcoin, co sprawia, (cid:285)e jest ona
zdecentralizowana i nie mo(cid:285)na jej wy(cid:239)(cid:200)czy(cid:202), poniewa(cid:285) konieczne
by(cid:239)oby wy(cid:239)(cid:200)czenie wszystkich tworz(cid:200)cych j(cid:200) komputerów.
Inaczej mówi(cid:200)c, pomys(cid:239) polega na tym, aby wszyscy stali si(cid:218)
bankiem — kolektywnie w sieci P2P. Czyli ka(cid:285)dy u(cid:285)ytkownik prze-
chowuje informacje o tym, do kogo nale(cid:285)(cid:200) dane bitcoiny. Ten re-
jestr nazywa si(cid:218) „(cid:239)a(cid:241)cuchem bloków” lub „(cid:239)a(cid:241)cuchem transakcji”
(ang. blockchain). Blockchain to kompletny rejestr wszystkich trans-
akcji, jakie przeprowadzono od pocz(cid:200)tku powstania systemu Bitcoin.
Za(cid:239)ó(cid:285)my teraz, (cid:285)e Pawe(cid:239) chce wys(cid:239)a(cid:202) do Marka bitcoina o nu-
merze 1234567. Pojawia si(cid:218) kolejny problem, tzw. „podwójne wy-
dawanie” (ang. double-spending), poniewa(cid:285) Pawe(cid:239) mo(cid:285)e w tym
samym czasie (przed aktualizacj(cid:200) (cid:239)a(cid:241)cucha transakcji) wys(cid:239)a(cid:202) bit-
coina o numerze 1234567 równie(cid:285) Wojtkowi.
To mo(cid:285)e wydawa(cid:202) si(cid:218) trudne — Marek od razu po otrzyma-
niu bitcoina mo(cid:285)e zaktualizowa(cid:202) swój (cid:239)a(cid:241)cuch bloków i og(cid:239)osi(cid:202)
wszystkim w sieci, tak(cid:285)e Wojtkowi, (cid:285)e jest posiadaczem bitcoina.
Istnieje zatem bardzo krótka chwila, w której Pawe(cid:239) mo(cid:285)e wielo-
krotnie wydawa(cid:202) tego samego bitcoina.
Tak czy inaczej, takie rozwi(cid:200)zanie dawa(cid:239)oby mo(cid:285)liwo(cid:258)(cid:202) oszu-
kiwania innych. Istniej(cid:200) równie(cid:285) techniki, które mog(cid:239)yby wyd(cid:239)u(cid:285)y(cid:202)
czas Paw(cid:239)a i umo(cid:285)liwi(cid:202) mu wielokrotne wydawanie tego samego
Kup książkęPoleć książkęJak działa protokół Bitcoin?
31
bitcoina, np. poprzez zerwanie lub wyd(cid:239)u(cid:285)enie komunikacji w sys-
temie pomi(cid:218)dzy Markiem i Wojtkiem.
Z jakiego rozwi(cid:200)zania w takim razie korzysta protokó(cid:239) Bitcoin,
aby unikn(cid:200)(cid:202) problemu z podwójnym wydawaniem?
Otó(cid:285) Marek i Wojtek nie próbuj(cid:200) aktualizowa(cid:202) transakcji samo-
dzielnie, lecz wysy(cid:239)aj(cid:200) wiadomo(cid:258)(cid:202) o mo(cid:285)liwo(cid:258)ci transakcji z Paw(cid:239)em
do ca(cid:239)ej sieci u(cid:285)ytkowników systemu i prosz(cid:200) o rozstrzygni(cid:218)cie, czy
transakcja jest poprawna. Je(cid:258)li u(cid:285)ytkownicy wspólnie zdecyduj(cid:200),
(cid:285)e transakcja jest poprawna, to Marek mo(cid:285)e zaakceptowa(cid:202) wys(cid:239)a-
nego do niego bitcoina i wszyscy zaktualizuj(cid:200) swój (cid:239)a(cid:241)cuch blo-
ków. To skutecznie rozwi(cid:200)zuje problem z podwójnym wydawa-
niem bitcoinów. Je(cid:258)li Pawe(cid:239) b(cid:218)dzie chcia(cid:239) wyda(cid:202) te same bitcoiny
kilkakrotnie, to inne osoby w sieci to zauwa(cid:285)(cid:200) i transakcja nie doj-
dzie do skutku.
W przyk(cid:239)adzie wygl(cid:200)da to tak, (cid:285)e Pawe(cid:239) wysy(cid:239)a bitcoina do
Marka: „Ja, Pawe(cid:239), wysy(cid:239)am Markowi jednego bitcoina z nume-
rem 1234567” i dostarcza podpisan(cid:200) wiadomo(cid:258)(cid:202) Markowi. Marek
zamiast odwo(cid:239)ywa(cid:202) si(cid:218) do w(cid:239)asnej kopii (cid:239)a(cid:241)cucha bloków, wysy(cid:239)a
informacj(cid:218) do ca(cid:239)ej sieci. Inni u(cid:285)ytkownicy sprawdzaj(cid:200), czy Pawe(cid:239)
posiada bitcoina o numerze 1234567. Je(cid:258)li posiada, to sie(cid:202) wysy(cid:239)a
wiadomo(cid:258)(cid:202): „Tak, Pawe(cid:239) posiada bitcoina o numerze 1234567;
bitcoin ten mo(cid:285)e by(cid:202) zatem wys(cid:239)any Markowi”. Gdy wiadomo(cid:258)(cid:202)
tak(cid:200) wy(cid:258)le wystarczaj(cid:200)ca liczba osób, ka(cid:285)dy zaktualizuje swój (cid:239)a(cid:241)-
cuch bloków, by pokaza(cid:202), (cid:285)e bitcoin 1234567 nale(cid:285)y teraz do Mar-
ka, a transakcja zosta(cid:239)a zako(cid:241)czona powodzeniem.
Co to znaczy „wiadomo(cid:258)(cid:202) wy(cid:258)le wystarczaj(cid:200)ca liczba osób”?
Nie mo(cid:285)emy zak(cid:239)ada(cid:202), (cid:285)e ka(cid:285)dy u(cid:285)ytkownik sieci wy(cid:258)le tak(cid:200) wia-
domo(cid:258)(cid:202), poniewa(cid:285) nie wiemy, kto jest w sieci Bitcoin — nie mo-
(cid:285)emy okre(cid:258)li(cid:202) sta(cid:239)ej cz(cid:218)(cid:258)ci u(cid:285)ytkowników sieci.
Pojawia si(cid:218) kolejne zagro(cid:285)enie. Pawe(cid:239) móg(cid:239)by przej(cid:200)(cid:202) du(cid:285)(cid:200)
cz(cid:218)(cid:258)(cid:202) sieci Bitcoin, np. poprzez zautomatyzowany system kreuj(cid:200)cy
Kup książkęPoleć książkę32
Sekrety Bitcoina i innych kryptowalut
du(cid:285)(cid:200) liczb(cid:218) oddzielnych „u(cid:285)ytkowników”, o których reszta nie wie,
(cid:285)e s(cid:200) powi(cid:200)zani.
Podobnie jak poprzednio, Pawe(cid:239) próbuje wys(cid:239)a(cid:202) swojego bit-
coina o numerze 1234567 równocze(cid:258)nie do Marka i Wojtka. Gdy
Marek i Wojtek prosz(cid:200) sie(cid:202) o sprawdzenie poprawno(cid:258)ci transakcji,
Pawe(cid:239) zasypuje sie(cid:202) informacjami ze swojego zautomatyzowane-
go systemu, (cid:285)e transakcja jest pozytywna. Marek i Wojtek mogliby
wi(cid:218)c zosta(cid:202) oszukani.
Istnieje sprytny sposób zapobiegania tego typu sytuacjom. Na-
zywa si(cid:218) on dowodem pracy (ang. proof-of-work).
2.3. Dowód pracy
Dowód pracy zapobiega wielokrotnym przelewom tej samej kwoty
do ró(cid:285)nych u(cid:285)ytkowników. Jest to rodzaj rozproszonego serwera
czasowego, który u(cid:285)ywa (cid:239)a(cid:241)cuchowych dowodów matematycznych
wykonywanych dzia(cid:239)a(cid:241). Takie sformu(cid:239)owanie mo(cid:285)emy przeczyta(cid:202)
w definicji. Ale jak to wygl(cid:200)da w praktyce?
Pomys(cid:239) ten wymaga skompilowania dwóch rozwi(cid:200)za(cid:241), które
mog(cid:200) wydawa(cid:202) si(cid:218) ma(cid:239)o intuicyjne.
Po pierwsze, w protokole Bitcoin umy(cid:258)lnie zosta(cid:239)o wprowa-
dzone podwy(cid:285)szenie z(cid:239)o(cid:285)ono(cid:258)ci obliczeniowej, aby zweryfikowa-
nie transakcji w sieci sta(cid:239)o si(cid:218) obliczeniowo kosztowne.
Po drugie, sie(cid:202) Bitcoin wynagradza u(cid:285)ytkowników, którzy
sprawdzaj(cid:200) poprawno(cid:258)(cid:202) transakcji.
To rozwi(cid:200)zanie eliminuje problem z wykreowaniem przez
Paw(cid:239)a du(cid:285)ej liczby kontrolowanych przez niego u(cid:285)ytkowników sie-
ci, poniewa(cid:285) ka(cid:285)dy z nich musia(cid:239)by dysponowa(cid:202) du(cid:285)(cid:200) moc(cid:200) obli-
czeniow(cid:200). Aby oszustwo mog(cid:239)o si(cid:218) powie(cid:258)(cid:202), wymaga(cid:239)oby niewyobra-
(cid:285)alnie du(cid:285)ej mocy obliczeniowej, co czyni je nieekonomicznym lub
nierealnym.
Kup książkęPoleć książkęJak działa protokół Bitcoin?
33
Aby lepiej przybli(cid:285)y(cid:202) dowód pracy, pos(cid:239)u(cid:285)(cid:218) si(cid:218) przyk(cid:239)adem.
Pawe(cid:239) wysy(cid:239)a do Marka bitcoina: „Ja, Pawe(cid:239), wysy(cid:239)am do Mar-
ka jednego bitcoina o numerze 1234567”. Gdy ta informacja zo-
staje przekazana do sieci, pojawia si(cid:218) automatycznie u ka(cid:285)dego
u(cid:285)ytkownika i trafia do kolejki, w której trzymane s(cid:200) wykonywane
transakcje, ale które nie zosta(cid:239)y jeszcze zaakceptowane przez sie(cid:202).
Na przyk(cid:239)ad kolejka Kuby, jednego z u(cid:285)ytkowników sieci, mo-
(cid:285)e wygl(cid:200)da(cid:202) tak:
Ja, Kuba, wysy(cid:239)am Agnieszce jednego bitcoina o numerze
1357910.
Ja, Mateusz, wysy(cid:239)am Weronice jednego bitcoina o numerze
3465021.
Ja, Pawe(cid:239), wysy(cid:239)am Markowi jednego bitcoina o numerze
1234567.
Kuba sprawdza poprawno(cid:258)(cid:202) transakcji z w(cid:239)asn(cid:200) kopi(cid:200) (cid:239)a(cid:241)cu-
cha bloków i chce rozes(cid:239)a(cid:202) wiadomo(cid:258)(cid:202) o poprawno(cid:258)ci tych trans-
akcji do ca(cid:239)ej sieci. Jednak zanim b(cid:218)dzie móg(cid:239) to zrobi(cid:202), b(cid:218)dzie
musia(cid:239) rozwi(cid:200)za(cid:202) trudn(cid:200) zagadk(cid:218) matematyczn(cid:200), nazwan(cid:200) „do-
wodem pracy”. Bez rozwi(cid:200)zania tej zagadki reszta sieci nie zaak-
ceptuje jego pozytywnej weryfikacji transakcji.
Przyjrzyjmy si(cid:218) bli(cid:285)ej temu, na czym polega rozwi(cid:200)zywanie
tej matematycznej zagadki.
2.4. Funkcja skrótu
Zacznijmy od wyja(cid:258)nienia, czym jest funkcja skrótu, inaczej: funk-
cja mieszaj(cid:200)ca lub funkcja haszuj(cid:200)ca. Jest to funkcja, która przypo-
rz(cid:200)dkowuje dowolnej wiadomo(cid:258)ci krótk(cid:200) warto(cid:258)(cid:202), zwykle posiada-
j(cid:200)c(cid:200) sta(cid:239)y rozmiar (skrót wiadomo(cid:258)ci).
W informatyce funkcje skrótu pozwalaj(cid:200) na ustalenie krótkich
i (cid:239)atwych do weryfikacji sygnatur dla dowolnie du(cid:285)ych zbiorów
Kup książkęPoleć książkę34
Sekrety Bitcoina i innych kryptowalut
danych. Takie sygnatury mog(cid:200) chroni(cid:202) przed przypadkowymi lub
celowo wprowadzonymi modyfikacjami danych, czyli pozwalaj(cid:200)
sprawdzi(cid:202), czy zbiory pobrane z internetu s(cid:200) w oryginalnej postaci.
Bitcoin u(cid:285)ywa znanej funkcji skrótu SHA-256 (ang. Secure
Hash Algorithm).
W jaki sposób ta funkcja skrótu haszuje? Pos(cid:239)u(cid:285)my si(cid:218) przy-
k(cid:239)adem. Powiedzmy, (cid:285)e funkcj(cid:218) skrótu oznaczymy jako h, a kolej-
k(cid:218) Kuby z oczekuj(cid:200)cymi transakcjami nazwiemy K i przypiszemy
jej warto(cid:258)(cid:202) K = Kolejka . Kuba dodaje do kolejki numer x=0 i ha-
szuje kombinacj(cid:218).
h( Kolejka0 ) = 30dd4761a8bc8c4c7d6dbbbdb3ba7627734
ee02d983096cc698b89aa578bcf94
(Liczba wyj(cid:258)ciowa jest zapisywana w systemie szesnastkowym).
Zagadka (dowód pracy), któr(cid:200) Kuba musi rozwi(cid:200)za(cid:202), polega na
znalezieniu takiego x, by po dodaniu go do K i haszowaniu kom-
binacji wyj(cid:258)cie zaczyna(cid:239)o si(cid:218) w tym przyk(cid:239)adzie od odpowiedniej
liczby zer. Relatywnie prosty dowód pracy mo(cid:285)e wymaga(cid:202) trzech
lub czterech zer na pocz(cid:200)tku liczby, a bardziej z(cid:239)o(cid:285)ony — o wiele
d(cid:239)u(cid:285)szej ich sekwencji.
W naszym przyk(cid:239)adzie oznacza(cid:239)oby to pora(cid:285)k(cid:218), poniewa(cid:285) gdy
x=0, wyj(cid:258)cie funkcji nie zaczyna si(cid:218) zerem. Próba z x=1 równie(cid:285) nie
przynosi pozytywnych rezultatów.
h( Kolejka1 )=6c8cc2be495540c0c41c409dad55c3706ed49
bd4fb162ea3e4c5749c635a29fa
Po kolejnych próbach dla x= 2,3,... w ko(cid:241)cu dla x=10 otrzy-
mujemy:
h( Kolejka10 )=0e717707c2d4d6912737d4e83e3161805730
b82e4a3068381053d3eed1d8e90c
Wyj(cid:258)cie funkcji zaczyna si(cid:218) od jednego 0, ale (cid:285)eby rozwi(cid:200)za(cid:202)
prosty dowód pracy, wyj(cid:258)cie z funkcji haszuj(cid:200)cej powinno zaczyna(cid:202)
Kup książkęPoleć książkęJak działa protokół Bitcoin?
35
si(cid:218) ci(cid:200)giem np. czterech 0. Jednak taki wynik nie b(cid:218)dzie wystarcza-
j(cid:200)cy, by rozwi(cid:200)za(cid:202) jeszcze trudniejszy dowód pracy.
Rozwi(cid:200)zywanie zagadki utrudnia fakt, (cid:285)e wyj(cid:258)cie z kryptogra-
ficznej funkcji haszuj(cid:200)cej zachowuje si(cid:218) jak liczba losowa — zmia-
na na wej(cid:258)ciu chocia(cid:285)by jednego bita powoduje ca(cid:239)kowit(cid:200) zmian(cid:218)
warto(cid:258)ci wyj(cid:258)ciowej w sposób, który trudno przewidzie(cid:202). Je(cid:258)li wi(cid:218)c
chcemy mie(cid:202) na wyj(cid:258)ciu funkcji haszuj(cid:200)cej warto(cid:258)(cid:202) zaczynaj(cid:200)c(cid:200)
si(cid:218) od 10 zer, Kuba b(cid:218)dzie musia(cid:239) (cid:258)rednio wypróbowa(cid:202) 1610 ~ 1012
ró(cid:285)nych kombinacji dla x, zanim znajdzie odpowiedni(cid:200) liczb(cid:218) zer.
To bardzo wymagaj(cid:200)ce zadanie, do którego rozwi(cid:200)zania potrzeb-
na jest ogromna moc obliczeniowa.
Oczywi(cid:258)cie jest mo(cid:285)liwe ustalanie stopnia trudno(cid:258)ci zagadki
— poprzez wymaganie wi(cid:218)kszej lub mniejszej liczby zer na wyj-
(cid:258)ciu funkcji haszuj(cid:200)cej.
W rzeczy samej, system Bitcoin gwarantuje dobr(cid:200) kontrol(cid:218) nad
trudno(cid:258)ci(cid:200) zagadki przez zastosowanie ma(cid:239)ej modyfikacji w powy-
(cid:285)ej opisanym przyk(cid:239)adzie metody dowodu pracy.
Zamiast na wymaganiu odpowiedniej liczby zer zagadka opiera
si(cid:218) na tym, by hash nag(cid:239)ówka bloku by(cid:239) równy numerowi znanemu
jako cel albo mniejszy. Ten cel jest automatycznie dostosowywany
przez system w odniesieniu do mocy obliczeniowej ca(cid:239)ej sieci, by
(cid:258)rednio potwierdzenie bloków Bitcoina wymaga(cid:239)o 10 minut.
Wracaj(cid:200)c do przyk(cid:239)adu, przypu(cid:258)(cid:202)my, (cid:285)e Kuba znalaz(cid:239) odpo-
wiednie x, które daje mu po(cid:285)(cid:200)dan(cid:200) liczb(cid:218) zer na pocz(cid:200)tku. Wysy-
(cid:239)a on wtedy swój blok do sieci razem z odpowiedni(cid:200) znalezion(cid:200)
warto(cid:258)ci(cid:200) x. Inni uczestnicy sieci mog(cid:200) zweryfikowa(cid:202), (cid:285)e x jest po-
prawnym rozwi(cid:200)zaniem zagadki b(cid:218)d(cid:200)cej dowodem pracy. Wów-
czas wszyscy aktualizuj(cid:200) w(cid:239)asne (cid:239)a(cid:241)cuchy bloków, dodaj(cid:200)c nowy
blok transakcji.
Pojawia si(cid:218) kolejny problem. Bez odpowiedniej zach(cid:218)ty nikt
nie b(cid:218)dzie chcia(cid:239) weryfikowa(cid:202) transakcji poprzez udost(cid:218)pnianie
Kup książkęPoleć książkę36
Sekrety Bitcoina i innych kryptowalut
swojej mocy obliczeniowej, by pomaga(cid:202) potwierdza(cid:202) transakcje
innych osób.
W protokole Bitcoin ten proces potwierdzania nazywany jest
kopaniem (ang. mining).
Ka(cid:285)da osoba, która zweryfikowa(cid:239)a blok transakcji, otrzymuje
od systemu ustalon(cid:200) liczb(cid:218) bitcoinów jako zap(cid:239)at(cid:218). Wszystkie bit-
coiny, które s(cid:200) w obiegu, powsta(cid:239)y w(cid:239)a(cid:258)nie w taki sposób, czyli jako
nagrody za potwierdzanie transakcji.
System z puli 21 mln uwalnia kolejne bitcoiny; gdy powsta-
wa(cid:239)a ta ksi(cid:200)(cid:285)ka, by(cid:239)o uwolnionych 13 mln bitcoinów.
Na pocz(cid:200)tku z ka(cid:285)dego bloku transakcji uwalniano 50 bit-
coinów. Po ka(cid:285)dych 210 000 zweryfikowanych bloków (w przybli-
(cid:285)eniu jest to co 4 lata) uwalniana nagroda jest zmniejszana o po-
(cid:239)ow(cid:218). W historii systemu Bitcoin taka redukcja nagrody odby(cid:239)a si(cid:218)
ju(cid:285) jeden raz i z pocz(cid:200)tkowej nagrody 50 bitcoinów za blok spad(cid:239)a
do 25 bitcoinów.
Takie zmniejszanie nagrody mniej wi(cid:218)cej co 4 lata b(cid:218)dzie kon-
tynuowane do oko(cid:239)o 2140 roku. Warto(cid:258)(cid:202) ostatniej nagrody spad-
nie wtedy poni(cid:285)ej 10–8 bitcoina za blok, czyli poni(cid:285)ej najmniejszej
cz(cid:218)(cid:258)ci bitcoina, nazwanej satoshi, odpowiednika jednego grosza
(z tym (cid:285)e warto(cid:258)(cid:202) 1 grosza to 0,01 z(cid:239)otego, a warto(cid:258)(cid:202) 1 satoshi —
0,00000001 bitcoina).
Oko(cid:239)o 2140 roku poda(cid:285) przestanie rosn(cid:200)(cid:202), jednak nie spowo-
duje to eliminacji zach(cid:218)ty na potwierdzanie transakcji, poniewa(cid:285)
w protokole Bitcoin zastosowano mo(cid:285)liwo(cid:258)(cid:202) ustalenia prowizji za
transakcje trafiaj(cid:200)ce do „górników”, którzy pomagaj(cid:200) je weryfikowa(cid:202).
Prowizje za transakcje pocz(cid:200)tkowo wynosi(cid:239)y 0, ale kiedy bit-
coin zdoby(cid:239) popularno(cid:258)(cid:202), stopniowo ros(cid:239)y i gdy powstawa(cid:239)a ta ksi(cid:200)(cid:285)-
ka, wynosi(cid:239)y oko(cid:239)o 0,0001 BTC za jedn(cid:200) transakcj(cid:218). Co to oznacza
dla zwyk(cid:239)ego u(cid:285)ytkownika? W sieci Bitcoin op(cid:239)aty za transakcje s(cid:200)
Kup książkęPoleć książkęJak działa protokół Bitcoin?
37
dobrowolne. Je(cid:258)li zaakceptujemy nisk(cid:200) op(cid:239)at(cid:218) za nasz(cid:200) transakcj(cid:218),
zostanie ona zrealizowana szybciej ni(cid:285) ta, która nie ma op(cid:239)aty.
Ka(cid:285)da transakcja powoduje wpis, który potrzebuje odrobin(cid:218)
mocy obliczeniowej. Górnicy poprzez swoje dowody pracy kon-
kuruj(cid:200) ze sob(cid:200) w szybko(cid:258)ci potwierdzenia transakcji. Generalnie
ka(cid:285)dy górnik ma mo(cid:285)liwo(cid:258)(cid:202) wygrania tej konkurencji na poziomie
zale(cid:285)nym od tego, ile (procentowo) dostarcza mocy obliczeniowej.
Powiedzmy, (cid:285)e dany górnik dostarcza 1 mocy obliczeniowej ca(cid:239)ej
sieci, ma zatem 1 szansy na wygranie konkurencji i tym samym
otrzymanie nagrody. Je(cid:258)li mu si(cid:218) to nie uda, przy wydobywaniu
nast(cid:218)pnych bloków b(cid:218)dzie mia(cid:239) kolejn(cid:200) mo(cid:285)liwo(cid:258)(cid:202).
Rozwi(cid:200)zanie to powoduje, (cid:285)e przy du(cid:285)ej mocy obliczeniowej
oraz przy sporej konkurencji nieuczciwy górnik b(cid:218)dzie mia(cid:239) ma(cid:239)e
szanse, aby zak(cid:239)óci(cid:202) potwierdzanie transakcji.
Wa(cid:285)n(cid:200) spraw(cid:200) w dzia(cid:239)aniu protoko(cid:239)u Bitcoin jest kolejno(cid:258)(cid:202),
w której przeprowadzane s(cid:200) transakcje. Je(cid:258)li sie(cid:202) Bitcoin nie mia-
(cid:239)aby tego typu porz(cid:200)dkowania, to w danym momencie mog(cid:239)oby
by(cid:202) niemo(cid:285)liwe okre(cid:258)lenie, do kogo nale(cid:285)y dany bitcoin.
W protokole Bitcoin ka(cid:285)dy nowy blok zawiera wska(cid:283)nik (hash
wcze(cid:258)niejszego bloku) do ostatnio zweryfikowanego bloku w (cid:239)a(cid:241)-
cuchu. Wska(cid:283)nik ten jest dodawany do zatwierdzonych ju(cid:285) trans-
akcji. Wi(cid:218)c (cid:239)a(cid:241)cuch bloków (blockchain) to liniowy (cid:239)a(cid:241)cuch trans-
akcji; bloki s(cid:200) u(cid:239)o(cid:285)one jeden po drugim, przy czym ostatni z nich
zawiera wska(cid:283)niki bloku wykonanego bezpo(cid:258)rednio przed nim. Sche-
mat takiego liniowego (cid:239)a(cid:241)cucha transakcji prezentuje rysunek 2.2.
Rysunek 2.2. Najnowszy blok wygenerowany z haszem bloku poprzedniego
Kup książkęPoleć książkę192
Sekrety Bitcoina i innych kryptowalut
Kup książkęPoleć książkę
Pobierz darmowy fragment (pdf)