Double spending w krypto jest jak czarownica z bajki – służy do straszenia niegrzecznych dzieci. Po bliższym zbadaniu tematu okazuje się, że choć niebezpieczeństwo jest realne, to wcale nie tak łatwo zostać oszukanym. Na ogół wystarczy zachować minimum ostrożności.
Podwójne wydatkowanie – czym jest i skąd się bierze
Double spending pojawił się, kiedy odeszliśmy od płatności przy pomocy złotych monet czy papierowych banknotów. Wtedy sprawa była jasna – pieniądz przechodził z ręki do ręki i nie sposób były wydać go drugi raz.
Problem wzrósł, kiedy pojawiły się waluty cyfrowe, bazujące nie na fizycznej zmianie właściciela przedmiotu, ale na przesyłaniu informacji.
Ponieważ sieci blockchain są rozproszone i nie mają nadzorcy, pilnującego przestrzegania reguł, mogą być one podatne na problem podwójnego wydatkowania. O ile zjawisko to nie jest groźne dla ogromnych sieci, liczących tysiące węzłów, może stać się problemem dla mniejszych, zabezpieczonych gorzej niż Bitcoin czy Ethereum.
Podwójne wydatki oznaczają możliwość wydania zasobu cyfrowego w kilku transakcjach jednocześnie. Prawdopodobieństwo, że tak się stanie, jest bardzo małe, gdyż reguły blockchain wymagają, aby każda transakcja została zatwierdzona. W specyficznych wypadkach zabezpieczenie to może jednak zostać przełamane.
Mechanizm podwójnych wydatków pozwala zatem oszustom kupić, co tylko chcą. Wydana kwota nie uszczupla ich majątku, zupełnie jak złota moneta, magicznie wracająca do kieszeni w bajce z dzieciństwa.
Zabezpieczenie przeciw double spending
Teoretycznie blockchain jest całkowicie bezpieczny. Gdy portfel użytkownika zgłasza przesłanie komuś kryptowaluty, taka informacja nie jest automatycznie dodawana do łańcucha bloków. Trafia ona do najbliższego pełnego węzła, a następnie ląduje w mempool (rodzaju poczekalni) i czeka na włączenie do kolejnego bloku.
Odbiorca powinien uznać transakcję za pewną dopiero wtedy, gdy zawierający ją blok zostanie dodany do łańcucha. Wówczas monety nie mogą już zostać wydane podwójnie, gdyż zmiana ich właściciela została potwierdzona przez całą sieć.
Blok może jednak wciąż jeszcze zostać odrzucony, toteż warto poczekać, aż transakcja stanie się ostateczna. W przypadku BTC nastąpi to po zapisaniu 6 bloków czyli około godzinie: wtedy wycofanie płatności wymagałoby zmiany stanu całego łańcucha, co jest skrajnie nieprawdopodobne.
Skoro tak, to dlaczego double spending jednak czasem się zdarza?
Jak dochodzi do podwójnego wydatkowania
Kryptowaluty z każdym rokiem stają się ważniejszą częścią cyfrowej gospodarki, więc hackerzy inwestują sporo czasu w obchodzenie ich zabezpieczeń. Wymyślili także kilka sposobów na double spending.
Atak 51%
Rodzaj ataku na sieć blockchain, w którym wroga grupa uzyskuje kontrolę nad więcej niż połową mocy obliczeniowej sieci. Daje jej to zdolność do manipulowania łańcuchem bloków. Atakujący mogą anulować już zatwierdzone transakcje i wydać te same monety ponownie. Co więcej, mogą utworzyć nowe bloki, zawierające sfałszowane informacje np. co do stanu kont, a jednocześnie uniemożliwić weryfikację transakcji uczciwym węzłom.
Jest to jedyny rodzaj ataku, który może zmienić informację już zapisaną na blockchainie. Na szczęście, im więcej węzłów i im większy hashrate ma sieć, tym trudniej jest przejąć nad nią kontrolę.
Z zasady atak 51% zagraża sieciom opartym o Proof of Work i zabezpieczonym mocą obliczeniową. Teoretycznie jest również możliwy w sieciach Proof of Stake, jednak doprowadziłby on do znacznego spadku wartości tokenów, posiadanych przez atakującego.
Atak typu Race
Typ ataku, w którym atakujący wysyła dwie wykluczające się transakcje w bardzo krótkim odstępie czasu. Celem jest zakup czegoś w ramach niepotwierdzonej transakcji. Zaraz potem następuje wysyłanie drugiej transakcji z tymi samymi funduszami na swój adres, ale z wyższym priorytetem (większą opłatą).
Węzły sieci weryfikują obie transakcje. Ponieważ druga transakcja ma wyższy priorytet, zostaje ona zatwierdzona jako pierwsza i dodana do łańcucha bloków. Poprzednia transakcja, przesyłająca środki na konto ofiary, jest odrzucana.
Ofiarą ataku możemy stać się, jeśli zaakceptujemy płatność i wykonamy swoją część transakcji przed potwierdzeniem wpływu kryptowalut na nasze konto.
Atak Finney’a
Możliwy do wykonania wyłącznie przez górnika. Trudny do przeprowadzenia, gdyż jego powodzenie zależy od mocy haszującej nieuczciwego górnika oraz akceptacji przez ofiarę transakcji niepotwierdzonej w sieci.
Atakujący przeprowadza transakcję, w ramach której wysyła monety na własny adres. Następnie wydobywa blok, w którym zawarta jest ta transakcja. Po wydobyciu nie przesyła go jednak do sieci, ale dokonuje nieuczciwego zakupu za równowartość pierwszej transakcji.
Po akceptacji przez sprzedającego, atakujący przesyła uprzednio wydobyty blok do sieci. To działanie powoduje, że sieć uznaje blok za ważny, jednocześnie unieważniając transakcję dokonaną na rzecz sprzedawcy.
Ataki Finney’a wymaga określonej sekwencji zdarzeń i pewnego łutu szczęścia, by blok nie został w międzyczasie wykopany przez innego górnika.
Atak Finney’a został tak nazwany na cześć jednego z pierwszych użytkowników Bitcoina i współpracownika Satoshi Nakamoto, programisty Hala Finneya.
Atak Vector76
Jest to kombinacja ataku Race i ataku Finney’a, której celem mogą być giełdy lub kantory krypto. Tutaj nawet transakcja, która ma jedno potwierdzenie, nadal może zostać cofnięta.
W tym ataku górnik tworzy dwa węzły, z których jeden (A) jest podłączony do węzła giełdy, a drugi (B) do wielu innych węzłów sieci blockchain. Po nawiązaniu niezbędnych połączeń górnik generuje ważny blok, ale chwilowo nie publikuje go w sieci. W tym momencie tworzona jest para transakcji: o wysokiej (powiedzmy 10 BTC) i niskiej (0,1 BTC) wartości.
Następnie górnik wysyła do węzła A transakcję o dużej wartości. Gdy giełda potwierdzi transakcję, atakujący wycofuje z giełdy taką samą ilość kryptowalut, jakiej użył do transakcji (10 BTC). Następnie z węzła B wysyła drugą transakcję (0,1 BTC), aby utworzyć fork, który spowoduje odrzucenie przez sieć pierwszej transakcji. Jeśli ten fork przetrwa, pierwsza transakcja, przenosząca na giełdę wartość 10 BTC zostanie unieważniona. Atakujący odniesie sukces, a giełda straci 10 BTC.
Przykłady udanych ataków double spending
Jak dotąd nie udało się skutecznie przeprowadzić podwójnego wydatkowania w łańcuchu Bitcoina. Ethereum również się obroniło, choć doszło do kilku potencjalnie groźnych incydentów o innym charakterze (afera The DAO, kłopoty z portfelem Parity).
W gorszej sytuacji są natomiast te sieci PoW, które dysponują relatywnie niewielkim hashrate. Najbardziej znane ataki to:
- atak 51% na Ethereum Classic (ETC). W roku 2020 padło ono ofiarą kilku takich ataków, w efekcie których hakerom udało się pozyskać przeszło 800 tysięcy ETC o ówczesnej wartości prawie 6 milionów dolarów,
- również atak 51%, tym razem na sieć Vertcoin (VTC). W 2019 roku hakerzy przejęli 51% węzłów sieci i wypłacili sobie VTC o wartości 100 000 $,
- kolejną ofiarą takiego ataku padł Bitcoin Gold (BTG). Hakerzy przejęli kontrolę nad większością hashrate sieci i dokonali podwójnego wydatkowania o wartości ponad 18 milionów dolarów.
W 2021 r gruchnęła wieść, że sam Bitcoin padł ofiarą double spending, co zaowocowało jego przeceną o prawie 11%. Okazało się to jednak plotką, nie mającą pokrycia w rzeczywistości
Obrona przed podwójnym wydatkowaniem
Double spending wcale nie jest tak powszechnym niebezpieczeństwem, jak się wydaje.
Po pierwsze: choć technicznie możliwy, double spending nie jest ekonomicznie opłacalny w sieciach opartych o Proof of Stake. Przy właściwie dobranych parametrach zabezpieczenia sieci, atakujący więcej straci wskutek spadku wartości zablokowanych kryptowalut, niż zyska wskutek wielokrotnego wydatkowania. Istnieją przypadki szczególne, określane jako Nothing at Stake, jednak co do zasady dobrze zaprojektowana sieć PoS jest relatywnie odporna na ten proceder.
Jak wspomnieliśmy, odporne pozostają sieci PoW o dostatecznie dużej i zdecentralizowanej sieci, zagrożone pozostają natomiast sieci o mniejszym hashrate. W tym wypadku powinny być stosowane następujące środki ostrożności:
- Należy poczekać na potwierdzenie transakcji przez sieć, a jeszcze lepiej – aż stanie się ona ostateczna. W sieci Bitcoin zajmuje to około godziny, ale nowoczesne sieci używające PoW jak Zilliqa osiągają ostateczność w ciągu kilku sekund.
- Jeśli nie chcemy przechodzić na protokół PoS, świetnie radzą sobie sieci, które łączą wydobycie oparte o PoW z jakąś odmianą konsensusu BFT.
- Niektóre portfele krypto, jak np. Exodus czy Guarda, mają mechanizmy wykrywające podwójne wydatki i zapobiegające im. Przeprowadzają one weryfikację łańcucha bloków i sprawdzanie sygnatur pod kątem wykrywania double spending,
- Solidny mechanizm konsensusu nie powinien dopuszczać do podwójnego wydatkowania. Z tego powodu warto sprawdzić, czy protokół którego używamy, poddał smartkontrakty audytowi i czy jego zalecenia zostały wdrożone.
- Ograniczaniu tego procederu służy także scentralizowana kontrola nad przepływem funduszy. W ten sposób zamieniamy jednak ryzyko podwójnych wydatków na ryzyko centralnego punktu awarii.
Double spending groźniej brzmi, niż wygląda w realu. Owszem, jest możliwy, jednak przypomina bardzo rzadki atak rekina ludojada. Jeśli się zdarzy, jest o nim głośno, nikt nie pamięta jednak o znacznie liczniejszych pechowcach, którzy po prostu utonęli, wchodząc to morza po paru drinkach.
Najczęściej zadawane pytania (FAQ)
Jak działa podwójne wydatkowanie?
Jest to próba jednoczesnego wysłania tej samej kwoty w kilku różnych transakcjach różnym odbiorcom. W 99,9% wypadków taka próba zostanie jednak wychwycona przez węzły sieci, które zrealizują tylko transakcję otrzymaną jako pierwsza.
Wraz z rozwojem blockchain takie ryzyko spada czy rośnie?
Jedno i drugie. Spada, bo istniejące sieci są coraz większe i lepiej zabezpieczone. Rośnie, bo wciąż powstają nowe sieci, mogące być podatne na atak.
Czy zdarzył się udany atak Vector76?
Do czasu opublikowania tego artykułu nie było wiarygodnych doniesień o udanym ataku tego typu. Może to oznaczać, że nigdy się nie udał, ale też, że nie został jeszcze odkryty.
Inwestowanie jest ryzykowne. Inwestuj odpowiedzialnie.