Co to są podwójne wydatki?

Podwójne wydatki to potencjalny problem w systemie pieniądza cyfrowego, w którym te same środki są wysyłane do dwóch odbiorców jednocześnie. W przypadku braku odpowiednich środków zaradczych protokół, który nie rozwiązuje problemu, jest zasadniczo skazany na niepowodzenie. Użytkownicy nie mają możliwości sprawdzenia, czy otrzymane środki nie zostały już wydane gdzie indziej.

Jeśli chodzi o pieniądze cyfrowe, należy koniecznie zadbać o to, aby nie można było powielać określonych jednostek. Cały system byłby zagrożony, gdyby Alicja mogła otrzymać 10 jednostek, skopiować je i wkleić 10 razy i otrzymać 100 jednostek. Podobnie taki system nie może działać, jeśli może jednocześnie wysłać te same 10 jednostek do Boba i Carol. Aby pieniądz cyfrowy mógł działać, muszą istnieć mechanizmy zapobiegające takiemu zachowaniu.


Jak uniknąć podwójnych wydatków?

Podejście scentralizowane

Podejście scentralizowane jest znacznie łatwiejsze do wdrożenia niż alternatywy zdecentralizowane. Zwykle dotyczy to przełożonego, który zarządza systemem i kontroluje wydawanie i dystrybucję jednostek. Dobrym przykładem scentralizowanego rozwiązania problemu podwójnych wydatków jest eCash Davida Chauma.

Aby wydać użytkownikom zasób cyfrowy imitujący pieniądze (nadający się do anonimowej wymiany peer-to-peer), bank może użyć ślepych podpisów, jak szczegółowo opisał kryptolog David Chaum w swojej pracy z 1982 r. Blind Signatures for Untraceable Payments.

W takim kontekście, jeśli użytkownik (nazwijmy go Dan) chce otrzymać 100 dolarów w postaci cyfrowych pieniędzy, musi najpierw poinformować o tym bank. Jeśli mają saldo na swoim koncie, wygenerują losową liczbę (lub kilka, w przypadku małych nominałów). Załóżmy, że podaje pięć liczb, z których każdej przypisano wartość 20 dolarów. Aby uniemożliwić bankowi wykrycie konkretnych jednostek, Dan miesza losowe liczby, dodając do każdej z nich współczynnik oślepiania.

Następnie przekazuje te dane bankowi, który obciąża jego konto kwotą 100 dolarów i podpisuje wiadomości potwierdzające, że każda z pięciu monet jest wymienialna na 20 dolarów. Dan może teraz wydawać środki wyemitowane przez bank. Idzie do restauracji Erin i kupuje posiłek, który kosztuje go 40 dolarów.

Dan może usunąć czynnik zaślepiający, aby odsłonić losową liczbę powiązaną z każdym „banknotem” pieniądza cyfrowego, która służy jako unikalny identyfikator każdej jednostki (podobnie jak numer seryjny). Ujawnia dwa Erin, która teraz musi je natychmiast wymienić w banku, aby uniemożliwić Danowi wydanie ich u innego kupca. Bank sprawdzi, czy podpisy są ważne i jeśli wszystko będzie w porządku, zasili konto Erin kwotą 40 dolarów.

Wykorzystane bilety są teraz w zasadzie bezużyteczne i należy wystawić ich więcej, jeśli Erin chce wydać nowe saldo w ten sam sposób.

System eCash firmy Chaumian może być przydatny w przypadku przelewów prywatnych. Jednak nie udaje mu się to, jeśli chodzi o odporność, ponieważ bank jest centralnym punktem upadłości. Wyemitowany banknot sam w sobie jest nic nie warty, gdyż jego wartość wynika wyłącznie z chęci banku do wymiany go na dolary. Klienci są zdani na łaskę banku i muszą polegać na jego dobrej woli, aby pieniądze zadziałały. To jest właśnie problem, który kryptowaluty chcą rozwiązać.


Zdecentralizowane podejście

Trudniej jest zapewnić, że fundusze nie zostaną wydane dwukrotnie w ekosystemie bez nadzorcy. Równie potężni uczestnicy muszą koordynować działania wokół zestawu zasad zapobiegających oszustwom i zachęcających wszystkich użytkowników do uczciwego działania.

Największą innowacją zaprezentowaną w białej księdze Bitcoina było rozwiązanie problemu podwójnych wydatków. Chociaż nie wspomniano o tym jako takiej, Satoshi zaproponował strukturę danych znaną obecnie jako blockchain.

Blockchain to w rzeczywistości po prostu baza danych o pewnych unikalnych właściwościach. Uczestnicy sieci (tzw. węzły) uruchamiają specjalistyczne oprogramowanie, które pozwala im synchronizować kopię bazy danych z urządzeniami równorzędnymi. W rezultacie cała sieć może sprawdzić historię transakcji i prześledzić ją aż do bloku genezy. Ponieważ blockchain jest publicznie dostępny, łatwo jest wykryć i zapobiec oszustwom, takim jak transakcje mające na celu podwojenie wydatków.

Gdy użytkownik rozgłasza transakcję, nie jest ona natychmiast dodawana do łańcucha bloków, musi najpierw zostać uwzględniona w bloku poprzez wydobycie. Dlatego odbiorca powinien uznać transakcję za ważną dopiero po dodaniu jego bloku do łańcucha. W przeciwnym razie ryzykują utratę środków, ponieważ nadawca mógłby wydać te same jednostki gdzie indziej.

Po potwierdzeniu transakcji jednostki nie mogą zostać wydane dwukrotnie, ponieważ własność zostaje przypisana nowemu użytkownikowi, a cała sieć może to zweryfikować. Z tego powodu wielu zaleca poczekanie na kilka potwierdzeń, zanim uznamy płatność za ważną. Każdy kolejny blok znacznie zwiększa wysiłek wymagany do modyfikacji lub przepisania ciągu (co może się zdarzyć w przypadku ataku 51%).

Wróćmy do scenariusza z restauracją. Dan wraca do restauracji i tym razem na oknie wisi naklejka z akceptacją Bitcoinów. Podobał mu się posiłek, który jadł ostatnim razem, więc zamawia go ponownie. Kosztuje go to 0,005 BTC.

Erin pokazuje mu adres publiczny, na który powinien wysłać środki. Dan transmituje transakcję, która jest zasadniczo podpisaną wiadomością stwierdzającą, że 0,005 BTC, które było w posiadaniu Dana, należy teraz do Erin. Bez zbyt wielu szczegółów każda osoba, której przedstawiono podpisaną transakcję Dana, może sprawdzić, czy rzeczywiście był on w posiadaniu środków i w związku z tym miał uprawnienia do ich wysłania.

Jak jednak wspomniano, transakcja jest ważna tylko wtedy, gdy jest ujęta w bloku, który jest potwierdzony. Akceptowanie niepotwierdzonych transakcji przypomina trochę przyjęcie 40 dolarów w eCash z poprzedniego przykładu, bez natychmiastowej wypłaty z banku, co pozwala nadawcy wydać je w międzyczasie gdzie indziej. Dlatego zaleca się, aby Erin odczekała co najmniej 6 potwierdzeń blokowych (około godziny) przed przyjęciem płatności od Dana.


Podwójne wydatki i Bitcoin

Bitcoin został starannie zaprojektowany, aby zapobiegać atakom z podwójnym wydawaniem, przynajmniej wtedy, gdy protokół jest używany zgodnie z przeznaczeniem. Oznacza to, że jeśli ludzie czekają na potwierdzenie transakcji w bloku, nadawca nie ma łatwego sposobu na ich anulowanie. Aby tego dokonać, musieliby „odwrócić” łańcuch bloków, co wymaga nierealistycznej ilości mocy mieszającej.

Jednak kilka ataków polegających na podwójnym wydatkowaniu atakuje strony, które akceptują niepotwierdzone transakcje. Na przykład w przypadku zakupów o niskiej wartości trader może nie chcieć czekać, aż transakcje zostaną uwzględnione w bloku. Zapracowana restauracja typu fast food prawdopodobnie nie może sobie pozwolić na czekanie, aż sieć przetworzy każdy zakup. Jeśli więc firma pozwala na płatności „natychmiastowe”, otwiera się na podwójne wydatki. Ktoś może zamówić hamburgera, zapłacić za niego i od razu tymi samymi środkami wysłać na swój adres. W przypadku wyższych opłat istnieje ryzyko, że nowa transakcja zostanie potwierdzona jako pierwsza, a tym samym unieważniona poprzednia.

Istnieją trzy popularne metody podwójnego wydawania pieniędzy:

  • Ataki 51%: gdy pojedynczy podmiot lub organizacja przejmuje kontrolę nad ponad 50% szybkości mieszania, co pozwala jej wykluczyć lub zmienić kolejność transakcji. Taki atak jest bardzo mało prawdopodobny w przypadku Bitcoina, ale miał miejsce w innych sieciach.

  • Ataki rasowe: transmitowane są kolejno dwie sprzeczne transakcje, przy użyciu tych samych środków, ale tylko jedna transakcja zostaje potwierdzona. Celem atakującego jest unieważnienie płatności poprzez zatwierdzenie wyłącznie transakcji, która przynosi mu korzyść (na przykład wysłanie tych samych środków na kontrolowany przez niego adres). Ataki rasowe zmuszają odbiorcę do zaakceptowania niepotwierdzonej transakcji jako płatności.

  • Ataki Finney: osoba atakująca przygotowuje transakcję w bloku bez natychmiastowego rozgłaszania jej w sieci. Zamiast tego wydaje te same monety w innej transakcji i emituje tylko swój wcześniej wydobyty blok, co może unieważnić płatność. Ataki Finney wymagają określonej sekwencji zdarzeń i wymagają również akceptacji przez odbiorcę niepotwierdzonych transakcji.

Jak widzimy, sprzedawca czekający na potwierdzenia blokowania znacznie zmniejsza ryzyko, że stanie się ofiarą podwójnych wydatków.


Podsumowując

Podwójne wydawanie pozwala użytkownikowi manipulować systemem pieniądza elektronicznego do własnych celów, wykorzystując te same środki więcej niż raz. Tradycyjnie dalszy postęp uniemożliwiał brak odpowiednich rozwiązań problemu.

Na szczęście jednak zastosowanie ślepych podpisów oferuje atrakcyjne rozwiązanie dla scentralizowanych systemów finansowych. Później stworzenie mechanizmów proof-of-work i technologii blockchain dało początek Bitcoinowi, formie zdecentralizowanej waluty, która z kolei zainspirowała tysiące innych projektów kryptowalutowych.