Co to jest podwójne wydatki?

Podwójne wydatki to potencjalny problem w cyfrowym systemie kasowym, w którym te same środki są wysyłane do dwóch odbiorców jednocześnie. Bez odpowiednich środków zaradczych protokół, który nie rozwiązuje problemu, zostaje zasadniczo podważony – użytkownicy nie mają możliwości sprawdzenia, czy otrzymane środki nie zostały już wydane gdzie indziej.

Jeśli chodzi o cyfrową gotówkę, niezwykle ważne jest zapewnienie, że określone jednostki nie będą mogły się duplikować. Cały system zostałby osłabiony, gdyby Alicja mogła otrzymać 10 jednostek, skopiować je i wkleić 10 razy i znaleźć się w posiadaniu 100 jednostek. Podobnie taki schemat nie może zadziałać, jeśli może wysłać te same 10 jednostek jednocześnie Bobowi i Carol. Aby zatem pieniądz cyfrowy mógł funkcjonować, muszą istnieć mechanizmy zapobiegające takiemu zachowaniu.


Jak można zapobiegać podwójnym wydatkom?

Scentralizowane podejście

Scentralizowana trasa jest znacznie łatwiejsza do wdrożenia niż zdecentralizowane alternatywy. Zwykle wymaga to jednego nadzorcy zarządzającego systemem i kontrolującego wydawanie i dystrybucję jednostek. Dobrym przykładem scentralizowanego rozwiązania problemu podwójnych wydatków jest rozwiązanie eCash Davida Chauma.

Aby udostępnić użytkownikom cyfrowe aktywa imitujące gotówkę (umożliwiające anonimową wymianę peer-to-peer), bank może zastosować ślepe podpisy – 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 cyfrowej gotówce, ma obowiązek najpierw poinformować o tym bank. Jeśli ma saldo na koncie, wygeneruje losową liczbę (lub wiele, w przypadku mniejszych nominałów). Załóżmy, że podaje pięć liczb, którym przypisuje się wartość 20 dolarów. Aby uniemożliwić bankowi śledzenie konkretnych jednostek, Dan zaciemnia losowe liczby, dodając do każdej z nich współczynnik zaś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żdą z pięciu informacji można wymienić 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 cyfrowym „rachunkiem gotówkowym”, która służy jako unikalny identyfikator każdej jednostki (podobnie jak numer seryjny). Wyjawia dwa z nich Erin, która musi teraz natychmiast je 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 się zgadzać, zasili konto Erin kwotą 40 dolarów.

Zużyte rachunki zostały w zasadzie spalone i należy wystawić ich więcej, jeśli Erin chce wydać swoje nowe saldo w ten sam sposób.

Konfiguracja Chaumian eCash może być przydatna w przypadku przelewów prywatnych. Jednak nie jest odporny, ponieważ bank jest centralnym punktem upadłości. Wystawiony weksel 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 aby pieniądze mogły funkcjonować, muszą polegać na jego dobrej woli. To jest właśnie problem, któremu kryptowaluta ma zaradzić.


Zdecentralizowane podejście

Większym wyzwaniem jest zapewnienie, że fundusze nie będą mogły być podwójnie wydawane w ekosystemie bez nadzorcy. Równie wpływowi 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. Choć nie wspomniano o tym jako o tym, Satoshi zaproponował strukturę danych obecnie powszechnie znaną jako łańcuch bloków.

Blockchain to tak naprawdę baza danych o pewnych unikalnych właściwościach. Uczestnicy sieci (zwani węzłami) uruchamiają specjalistyczne oprogramowanie, które umożliwia im synchronizację kopii bazy danych z rówieśnikami. W rezultacie cała sieć może kontrolować historię transakcji sięgającą bloku genezy. Dzięki publicznemu wyświetlaniu łańcucha bloków można łatwo wykryć i zapobiec nieuczciwym działaniom, takim jak transakcje mające na celu podwójne wydatki.

Kiedy użytkownik rozgłasza transakcję, nie jest ona natychmiast dodawana do łańcucha bloków – musi najpierw zostać włączona do bloku poprzez wydobycie. W związku z tym odbiorca powinien uznać transakcję za ważną dopiero po dodaniu jej bloku do łańcucha. W przeciwnym razie ryzykują utratę środków, ponieważ nadawca mógłby wydać te same monety gdzie indziej.

Po potwierdzeniu transakcji nie można wydać monet podwójnie, ponieważ własność zostaje przypisana nowemu użytkownikowi – a cała sieć może to zweryfikować. Z tego powodu wielu zaleca poczekanie na wielokrotne potwierdzenia przed przyjęciem płatności jako ważnej. Każdy kolejny blok drastycznie zwiększa ilość wysiłku potrzebnego do modyfikacji lub przepisania łańcucha (co może wystąpić podczas ataku 51%).

Powróćmy do scenariusza z restauracją. Dan wraca do restauracji i tym razem zauważa na oknie naklejkę Bitcoin Accepted Here. Podobał mu się posiłek, który jadł ostatnim razem, więc zamawia go ponownie. Kosztuje go to 0,005 BTC.

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

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


Podwójne wydatki w Bitcoinie

Bitcoin został starannie zaprojektowany, aby zapobiegać atakom polegającym na podwójnym wydatkowaniu, przynajmniej wtedy, gdy protokół jest używany zgodnie z oczekiwaniami. Oznacza to, że jeśli poszczególne osoby czekają na potwierdzenie transakcji w bloku, nadawca nie może w łatwy sposób tego cofnąć. Aby to zrobić, musieliby „odwrócić” łańcuch bloków, co wymaga nierealistycznej ilości mocy mieszającej.

Istnieje jednak kilka ataków polegających na podwójnym wydatkowaniu, których celem są strony akceptujące niepotwierdzone transakcje. Na przykład w przypadku zakupów o niskiej wartości sprzedawca może nie chcieć czekać, aż transakcje zostaną uwzględnione w bloku. Zapracowana restauracja typu fast food prawdopodobnie nie może sobie pozwolić na bierne przyglądanie się, jak sieć przetwarza każdy zakup. Jeśli więc firma umożliwia płatności „natychmiastowe”, naraża się na podwójne wydatki. Ktoś może zamówić burgera, zapłacić za niego i od razu wysłać te same środki na swój adres. Przy wyższej opłacie prawdopodobnie nowa transakcja zostanie potwierdzona jako pierwsza, co spowoduje unieważnienie poprzedniej.

Istnieją trzy popularne metody dokonywania podwójnych wydatków:

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

  • Ataki rasistowskie: 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 jedynie transakcji, która przynosi mu korzyść (np. wysłanie tych samych środków na kontrolowany przez siebie adres). Ataki rasowe wymagają od odbiorcy zaakceptowania niepotwierdzonej transakcji jako płatności.

  • Ataki Finney: osoba atakująca wstępnie wyodrębnia jedną transakcję w blok, nie wysyłając jej natychmiast do sieci. Zamiast tego wydaje te same monety w innej transakcji i dopiero wtedy emituje swój wcześniej wydobyty blok, co może unieważnić płatność. Ataki Finney wymagają określonej sekwencji zdarzeń i są również uzależnione od akceptacji przez odbiorcę niepotwierdzonych transakcji.

Jak widzimy, sprzedawca czekający na potwierdzenia blokowania znacznie zmniejszy ryzyko stania się ofiarą podwójnych wydatków.


Zamykanie myśli

Podwójne wydatki umożliwiają użytkownikowi grę w elektronicznym systemie gotówkowym w celu uzyskania korzyści finansowych, wykorzystując te same środki więcej niż raz. Tradycyjnie na przeszkodzie postępowi w tej dziedzinie stał brak odpowiednich rozwiązań problemu.

Na szczęście jednak zastosowanie ślepych podpisów zaproponowało ciekawe rozwiązanie dla scentralizowanych schematów finansowych. Później stworzenie mechanizmów Proof of Work i technologii blockchain dało początek Bitcoinowi jako potężnej formie zdecentralizowanego pieniądza – co z kolei zainspirowało tysiące innych projektów kryptowalutowych.