Na czym polega problem podwójnych wydatków?

Problem podwójnych wydatków jest potencjalnym problemem w cyfrowych systemach kasowych, w których te same środki są wypłacane dwóm odbiorcom w tym samym czasie. Bez odpowiednich środków zaradczych sam protokół nie jest w stanie całkowicie rozwiązać tego problemu. W końcu użytkownicy nie mają możliwości sprawdzenia, czy otrzymane przez nich środki zostały wypłacone innym osobom.

W świecie cyfrowej gotówki należy zadbać o to, aby nie można było skopiować konkretnej jednostki waluty. Gdyby Alicja mogła otrzymać 10 jednostek waluty, skopiować je i wkleić 10 razy, a następnie sama mieć 100 jednostek waluty, cały system by się rozpadł. Podobnie, gdyby mogła wysłać te same 10 jednostek waluty Bobowi i Carol w tym samym czasie, system również by nie działał. Dlatego muszą istnieć mechanizmy zapobiegające takim sytuacjom, aby zapewnić prawidłowe funkcjonowanie walut cyfrowych.


Jak zapobiec problemowi podwójnego wydatkowania?

Scentralizowane podejście

Podejścia scentralizowane są łatwiejsze do wdrożenia niż rozwiązania zdecentralizowane, które zwykle wymagają nadzoru nad systemem i kontrolowania emisji i emisji jednostek walutowych. Rozwiązanie eCash Davida Chauma rozwiązuje problem podwójnych wydatków dzięki scentralizowanemu podejściu.​

Banki mogą używać ślepych podpisów do wydawania użytkownikom zasobów cyfrowych przypominających gotówkę (co może umożliwiać anonimowe transakcje peer-to-peer). Jest to szczegółowo opisane w artykule z 1982 r. „Techniki podpisu ślepego w przypadku płatności niewykrywalnych” autorstwa kryptologa Davida Chauma.

W takim przypadku, jeśli użytkownik Dan chce otrzymać 100 dolarów w cyfrowej gotówce, musi najpierw powiadomić bank. Jeśli na jego koncie będzie saldo, zostanie wygenerowana losowa liczba (więcej, jeśli nominał jest mniejszy). Załóżmy, że wygenerowano pięć liczb losowych, każda o wartości 20 dolarów. Aby uniemożliwić bankom śledzenie określonych jednostek waluty, Dan miesza sytuację, dodając do każdej losowej liczby czynnik zaślepiający.

Następnie przekazał te dane bankowi, który pobrał z jego konta saldo 100 dolarów i podpisał wiadomość, udowadniając, że każdą z pięciu wiadomości można wymienić na 20 dolarów. W tym czasie Dan może korzystać z cyfrowej gotówki wydawanej przez bank. Poszedł do restauracji Erin na posiłek i wydał 40 dolarów.​

Dan eliminuje czynnik zaślepiający i ujawnia wartość pojedynczą związaną z każdym cyfrowym „banknotem” gotówkowym, który jest unikalnym identyfikatorem każdej jednostki waluty (w przybliżeniu odpowiadającym numerowi seryjnemu). Ujawnia dwie losowe liczby Erin, która musi natychmiast wymienić środki z bankiem, aby uniemożliwić Danowi płacenie innym kupcom. Bank zweryfikuje, czy podpis jest ważny i jeśli będzie prawidłowy, wpłaci 40 dolarów na konto Erin.

Zużyte „banknoty” są następnie niszczone, a jeśli Erin chce w ten sam sposób wykorzystać saldo swojego konta, należy wyemitować więcej banknotów.

Mechanizm Chaumian eCash jest niezwykle cenny przy przelewach prywatnych. Jednak sam mechanizm eCash nie stawia żadnych oporów. Ponieważ banki są węzłami scentralizowanymi, w przypadku awarii systemu ucierpią wszyscy. Banknoty emitowane przez bank nie mają wartości same w sobie; ich wartość wynika wyłącznie z chęci banku do wymiany banknotów na dolary amerykańskie. Klienci podlegają bankowi i muszą polegać na reputacji banku, aby obsługiwać fundusze. To jest dokładnie problem, który kryptowaluty mają rozwiązać.


Podejście zdecentralizowane

Unikanie problemu podwójnych wydatków w ekosystemie bez mechanizmów nadzoru jest jeszcze większym wyzwaniem. Uczestnicy posiadający równe uprawnienia muszą współpracować ze sobą zgodnie z tym samym zestawem zasad, aby zapobiegać oszustwom i zachęcać wszystkich użytkowników do uczciwego działania.

Największą innowacją przedstawioną w białej księdze Bitcoin jest rozwiązanie problemu podwójnych wydatków. Satoshi Nakamoto zaproponował bezprecedensową strukturę danych znaną obecnie jako blockchain.

Blockchain to tak naprawdę baza danych z pewnymi unikalnymi właściwościami. Uczestnicy sieci (tzw. węzły) uruchamiają specjalistyczne oprogramowanie, które pozwala im synchronizować między sobą własne kopie bazy danych. W ten sposób cała sieć może kontrolować historię transakcji sięgającą bloku genezy. Ponieważ łańcuch bloków jest publicznie dostępny, łatwiej będzie wykryć oszustwa i zapobiegać im, np. identyfikować próby transakcji podwójnych wydatków.

Kiedy użytkownik publikuje transakcję, nie jest ona natychmiast dodawana do łańcucha bloków i musi zostać najpierw wydobyta, zanim będzie można załadować blok. Zatem dopiero po wprowadzeniu bloku do łańcucha odbiorca może potwierdzić ważność transakcji. W przeciwnym razie odbiorca będzie ryzykował utratę środków, jeśli nadawca zapłaci ten sam token gdzie indziej.​

Po potwierdzeniu transakcji własność tokena zostaje przypisana nowemu użytkownikowi i zweryfikowana przez całą sieć, dzięki czemu nie można już podwójnie wydawać tokenów. Z tego powodu wiele osób zaleca poczekanie na wielokrotne potwierdzenia przed przyjęciem ważnej płatności. Każdy kolejny blok znacznie zwiększa ilość pracy potrzebnej do modyfikacji lub przepisania łańcucha (jak w przypadku ataku 51%).

Wróćmy do sytuacji w restauracji. Dan wrócił do restauracji i tym razem zauważył naklejkę na oknie z napisem „Ten sklep obsługuje płatności Bitcoin”. Nie mógł zapomnieć swojego ostatniego posiłku i ponownie zamówił to samo, co kosztowało 0,005 Bitcoina.​

Erin pokazuje Danowi adres publiczny, który jest adresem przesiadkowym. Ogłoszenie Dana o transakcji jest zasadniczo podpisaną wiadomością ogłaszającą, że posiadane przez niego 0,005 Bitcoinów jest teraz własnością Erin. Bez wchodzenia w szczegóły każdy, kto zobaczy podpisaną przez Dana transakcję, może potwierdzić, że tokeny rzeczywiście należą do niego i dlatego Dan ma prawo je wysłać.

Jednakże, jak wspomniano wcześniej, transakcja jest ważna dopiero po załadowaniu do bloku i potwierdzeniu. Otrzymanie niepotwierdzonej transakcji przypomina otrzymanie wcześniej 40 dolarów w eCash. Jeśli nie zostanie ona natychmiast zrealizowana za pośrednictwem banku, nadawca może wydać środki gdzie indziej. Dlatego Erin powinna poczekać co najmniej 6 potwierdzeń blokowych (około godziny) przed przyjęciem płatności od Dana.


Problem podwójnych wydatków Bitcoina

Bitcoin został starannie zaprojektowany, aby zapobiegać atakom polegającym na podwójnym wydatkowaniu, przynajmniej jeśli protokół jest używany zgodnie z przeznaczeniem. Oznacza to, że jeśli ktoś czeka na potwierdzenie zablokowania transakcji, nadawca nie będzie mógł łatwo cofnąć transakcji. Tylko poprzez „odwrócenie” łańcucha bloków można odwrócić transakcję, co wymaga ogromnych ilości mocy mieszającej.

Jednak niektóre ataki związane z podwójnymi wydatkami są skierowane w szczególności do użytkowników, którzy akceptują niepotwierdzone transakcje. Na przykład w przypadku małych zakupów sprzedawcy nie chcą czekać, aż transakcja zostanie uwzględniona w bloku. Zajęte restauracje typu fast food mogą nie być w stanie czekać tak długo, jak sieć potrzebuje na przetworzenie każdej transakcji. Dlatego też, jeśli sprzedawca ma włączone płatności „natychmiastowe”, może napotkać problem podwójnych wydatków. Ktoś może zamówić burgera i zapłacić za niego, a następnie od razu wysłać te same środki na swój adres. O ile opłata manipulacyjna późniejszej transakcji jest wyższa, może ona zostać potwierdzona w pierwszej kolejności, co spowoduje unieważnienie poprzedniej transakcji.

Obecnie istnieją trzy popularne ataki polegające na podwójnym wydatkowaniu:

  • Atak 51%: pojedynczemu podmiotowi lub organizacji udaje się kontrolować ponad 50% szybkości mieszania w celu usunięcia lub zmodyfikowania kolejności transakcji. Jest bardzo mało prawdopodobne, aby tego typu atak miał miejsce w sieci Bitcoin, ale miał on miejsce w innych sieciach.

  • Atak wyścigowy: publikowane są kolejno dwie sprzeczne transakcje z wykorzystaniem tych samych środków, ale tylko jedna transakcja zostaje potwierdzona. Celem atakującego jest unieważnienie innej płatności poprzez zatwierdzenie transakcji na jego korzyść. Na przykład wysłanie środków na adres, który kontroluje. Atak rasowy zazwyczaj polega na tym, że odbiorca akceptuje niepotwierdzoną transakcję jako płatność.

  • Ataki Finney: osoba atakująca wstępnie wydobywa transakcję i umieszcza ją w bloku, ale nie publikuje jej natychmiast w sieci. Zamiast tego wpłacił ten sam token do innej transakcji przed opublikowaniem wcześniej wydobytego bloku, tym samym unieważniając płatność. Warunkiem koniecznym ataku Fenney jest to, że zdarzenia zachodzą w określonej kolejności, a powodzenie zależy również od tego, czy odbiorca zaakceptuje niepotwierdzoną transakcję.

Jak widzimy, sprzedawcy mogą znacznie zmniejszyć ryzyko i uniknąć podwójnego wydawania pieniędzy, po prostu czekając cierpliwie na potwierdzenia blokowania.


Podsumować

Użytkownicy mogą wykorzystywać ataki typu double-spend w celu manipulowania elektronicznymi systemami gotówkowymi typu peer-to-peer i wielokrotnie wykorzystywać te same środki w celu uzyskania niesprawiedliwych zysków. W przeszłości, ponieważ problem ten musiał zostać dobrze rozwiązany, rozwój tej dziedziny był stagnacyjny.

Na szczęście stosowanie ślepych podpisów stało się rozwiązaniem przyciągającym wzrok w scentralizowanych rozwiązaniach finansowych. Następnie rozwój mechanizmu proof-of-work i technologii blockchain dał początek Bitcoinowi, potężnej formie zdecentralizowanej waluty, która z kolei stała się inspiracją dla tysięcy projektów kryptowalutowych.