Czym jest Double Spending w Kryptowalutach?
Strona G艂贸wna
Artyku艂y
Czym jest Double Spending w Kryptowalutach?

Czym jest Double Spending w Kryptowalutach?

艢rednio zaawansowany
Opublikowane Feb 17, 2020Zaktualizowane Jan 31, 2023
7m

Czym jest podw贸jne wydatkowanie?

Podw贸jne wydatkowanie stanowi potencjalny problem w przypadku wszystkich cyfrowych system贸w got贸wkowych. Polega ono na tym, 偶e te same 艣rodki zostaj膮 przeznaczone do p艂atno艣ci dwukrotnie. Bez odpowiedniej architektury systemowej, kt贸ra chroni膰 b臋dzie protok贸艂 przed tym zagro偶eniem, u偶ytkownicy nie maj膮 mo偶liwo艣ci zweryfikowania czy otrzymane 艣rodki nie zosta艂y ju偶 gdzie艣 wcze艣niej wydane.

W przypadku kryptowalut, niezwykle wa偶ne jest zapewnienie, 偶e okre艣lonych jednostek cyfrowych monet nie mo偶na powieli膰. Ca艂y system by艂by zagro偶ony, gdyby Alice mog艂a otrzyma膰 10 monet, skopiowa膰 je i powieli膰 dziesi臋ciokrotnie, staj膮c si臋 posiadaczem 100 jednostek kryptowaluty. Podobny problem pojawi艂by si臋, je艣li Alice mog艂aby wys艂a膰 te same 10 monet jednocze艣nie do Boba i Carol. Aby pieni膮dze cyfrowe mog艂y funkcjonowa膰, musz膮 istnie膰 mechanizmy zapobiegaj膮ce podw贸jnemu wydatkowaniu.


Jak mo偶na zapobiec podw贸jnemu wydatkowaniu?

Rozwi膮zanie scentralizowane

Scentralizowane rozwi膮zanie tego problemu jest znacznie 艂atwiejsze do wdro偶enia ni偶 zdecentralizowane alternatywy. W takim wypadku do systemu dodaje si臋 jednego nadzorc臋, kt贸ry zarz膮dza systemem oraz posiada prawo emisji jednostek cyfrowej got贸wki. Dobrym przyk艂adem scentralizowanego rozwi膮zania problemu podw贸jnego wydatkowania jest system zastosowany w eCash Davida Chauma.

W celu zapewnienia u偶ytkownikom cyfrowych monet, b臋d膮cymi substytutem tradycyjnej got贸wki (mo偶liwymi do anonimowego obrotu w stylu聽peer-to-peer), bank jest w stanie wykorzysta膰 艣lepe sygnatury (blind signatures). Opisuje to kryptograf David Chaum w 1982 roku, w swojej pracy聽Blind Signatures for Untraceable Payments.

Sp贸jrzmy na prosty przyk艂ad. Je艣li u偶ytkownik (nazwijmy go Dan) chce otrzyma膰 100 USD w got贸wce cyfrowej, musi najpierw poinformowa膰 o tym bank. O ile posiada wystarczaj膮ce 艣rodki na swoim koncie, mo偶e przyst膮pi膰 do tego procesu. Wpierw wygeneruje on losow膮 liczb臋 (lub wiele, dla mniejszych nomina艂贸w). Za艂贸偶my, 偶e losuje pi臋膰 liczb, z kt贸rych ka偶da ma przypisan膮 warto艣膰 20 USD. Aby uniemo偶liwi膰 bankowi 艣ledzenie okre艣lonych jednostek, Dan zaciemnia losowe liczby, dodaj膮c do ka偶dej z nich聽"blinding factor"聽.

Nast臋pnie przekazuje te dane bankowi, kt贸ry pobiera 100 USD z jego konta, i podpisuje wiadomo艣ci potwierdzaj膮ce, 偶e ka偶d膮 z pi臋ciu "informacji" mo偶na wymieni膰 za 20 USD. Dan mo偶e teraz wydawa膰 艣rodki wyemitowane przez bank. Idzie na przyk艂ad do restauracji Erin i kupuje obiad kosztuj膮cy 40 USD.聽

Dan mo偶e usun膮膰 blinding factor, w celu ods艂oni臋cia liczby losowanej zwi膮zanej z ka偶dym 鈥瀝achunkiem鈥 cyfrowej got贸wki. Taka liczba s艂u偶y jako unikalny identyfikator dla ka偶dej jednostki monety cyfrowej (podobnie jak numer seryjny w pralce). Ujawnia dwie z nich Erin, a restauracja musi teraz natychmiast "odkupi膰" je od banku, aby uniemo偶liwi膰 Danowi podw贸jne wydatkowanie - czyli wykorzystanie tych samych monet z przypisanymi liczbami losowanymi u innego sprzedawcy. Bank sprawdzi, czy podpisy s膮 wa偶ne, a je艣li wszystko b臋dzie wygl膮da艂o poprawnie, do艂aduje konto Erin kwot膮 40 USD.

Pierwotnie zastosowane rachunki s膮 teraz zasadniczo "spalane" albo po prostu usuwane. Konieczne jest wi臋c stworzenie nowych przez bank, je艣li Erin zdecyduje si臋 na wydanie swoich pieni臋dzy cyfrowych. Przyznacie, 偶e jest to ma艂o ergonomiczne rozwi膮zanie.

ECash Chauma m贸g艂by zadzia艂a膰 w systemie ograniczonym do prywatnych transakcji. Ale nie jest on (system) odporny na ataki, poniewa偶 jeden bank sprawuje kontrol臋. Wydany rachunek sam w sobie nie jest nic wart, poniewa偶 jego warto艣膰 wynika wy艂膮cznie z gotowo艣ci banku do wymiany go na dolary. Klienci s膮 wi臋c na 艂asce banku i musz膮 polega膰 na jego dobrej woli, aby cyfrowe pieni膮dze dzia艂a艂y. Problem ten zosta艂 po raz pierwszy w pe艂ni rozwi膮zany w Bitcoinie.


Rozwi膮zanie zdecentralizowane

Zapewnienie, 偶e funduszy nie mo偶na wyda膰 podw贸jnie w systemie monetarnym bez centralnego nadzorcy, jest sporym wyzwaniem. Uczestnicy sieci musz膮 koordynowa膰 zbi贸r zasad, kt贸re zapobiegaj膮 oszustwom i zach臋caj膮 wszystkich u偶ytkownik贸w do uczciwego dzia艂ania w obr臋bie ekosystemu.

Najwi臋ksz膮 innowacj膮 przedstawion膮 w whitepaper Bitcoina by艂o rozwi膮zanie problemu podw贸jnego wydatkowania. Satoshi zaproponowa艂 struktur臋 danych, obecnie powszechnie znan膮 jako blockchain, rozwi膮zuj膮c膮 problem podw贸jnego wydatkowania monet.

Blockchain to tak naprawd臋 tylko baza danych z pewnymi unikalnymi w艂a艣ciwo艣ciami. Uczestnicy sieci (zwani聽w臋z艂ami) korzystaj膮 ze specjalistycznego oprogramowania, kt贸re umo偶liwia synchronizacj臋 kopii bazy danych z reszt膮 uczestnik贸w systemu. Rezultat jest taki, 偶e ca艂a sie膰 mo偶e kontrolowa膰 histori臋 transakcji, od czasu pierwszego bloku Bitcoina, zwanego聽genesis. Dzi臋ki publicznej przejrzysto艣ci blockchaina, 艂atwo jest wykry膰 nielegalne dzia艂ania i im aktywnie zapobiega膰. Nale偶膮 do nich r贸wnie偶 transakcje w ramach, kt贸rych kto艣 pr贸buje podw贸jnie wyda膰 te same bitcoiny.

Gdy u偶ytkownik rozg艂asza transakcj臋 w sieci, nie jest ona od razu dodawana do 艂a艅cucha blok贸w - musi najpierw zosta膰 uwzgl臋dniona w bloku poprzez聽g贸rnictwo (mining). W zwi膮zku z tym odbiorca powinien uzna膰 transakcj臋 za wa偶n膮 dopiero po dodaniu jej do 艂a艅cucha blok贸w kryptowaluty. W przeciwnym razie ryzykuj膮 utrat膮 艣rodk贸w, poniewa偶 nadawca m贸g艂by teoretycznie wyda膰 te same monety w innym miejscu.聽

Po potwierdzeniu transakcji monet nie mo偶na wyda膰 podw贸jnie, poniewa偶 coin zostaje przypisany nowemu u偶ytkownikowi - i ca艂a sie膰 jest w stanie to zweryfikowa膰. Z tego powodu wielu zaleca czekanie na kilka potwierdze艅 przed zaakceptowaniem p艂atno艣ci w kryptowalucie. Ka偶dy kolejny blok drastycznie zmniejsza szanse, 偶e otrzymane monety zostan膮 podw贸jnie wydatkowane (cho膰 mo偶e to wyst膮pi膰 w przypadku skutecznego聽ataku 51%).

Powr贸膰my do scenariusza p艂atno艣ci w restauracji. Dan wraca do restauracji i tym razem zauwa偶a na oknie naklejk臋 "Akceptujemy Bitcoina". Smakowa艂 mu ostatni posi艂ek, wi臋c zamawia go ponownie. Kosztuje go to 0,005 BTC.聽

Erin podaje mu聽adres publiczny, na kt贸ry Dan musi wys艂a膰 fundusze. Dan tworzy transakcj臋, kt贸ra jest w zasadzie podpisanym komunikatem stwierdzaj膮cym, 偶e 0,005 BTC, kt贸re by艂y w posiadaniu Dana, s膮 teraz w posiadaniu Erin. Nie wchodz膮c w szczeg贸艂y, ka偶dy kto zobaczy podpisan膮 transakcj臋 Dana mo偶e sprawdzi膰, czy rzeczywi艣cie by艂 on w posiadaniu monet, a zatem mia艂 uprawnienia do ich wys艂ania.

Jak ju偶 wspomniano, transakcja jest wa偶na tylko wtedy, gdy zostanie zawarta w bloku, a blok potwierdzony przez sie膰 (g贸rnik贸w). Akceptowanie niepotwierdzonych transakcji przypomina przyjmowanie 40 USD w eCash z poprzedniego przyk艂adu, bez natychmiastowej wyp艂aty otrzymanych pieni臋dzy w banku - pozwala to nadawcy wyda膰 je gdzie indziej. Dlatego zaleca si臋, aby Erin czeka艂a na co najmniej 6 potwierdze艅 z sieci (co trwa oko艂o godziny) przed finalnym zaakceptowaniem p艂atno艣ci Dana.


Podw贸jne wydatkowanie w Bitcoinie

Bitcoin zosta艂 starannie zaprojektowany, aby zapobiega膰 atakom zwi膮zanym z podw贸jnym wydatkowaniem. Przynajmniej wtedy, gdy protok贸艂 jest u偶ywany zgodnie z za艂o偶eniami. Oznacza to, 偶e je艣li poszczeg贸lne osoby czekaj膮 na potwierdzenie transakcji w bloku, nadawca nie mo偶e cofn膮膰 transakcji. 呕eby to zrobi膰, musieliby 鈥瀘dwr贸ci膰鈥 ca艂y 艂a艅cuch blok贸w Bitcoina, co wymaga艂oby dost臋pu do absurdalnie wielkich pok艂ad贸w mocy obliczeniowej i wi膮za艂oby si臋 z ogromnymi kosztami.

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 akceptant mo偶e nie chcie膰 czeka膰 na w艂膮czenie transakcji do bloku. Restauracji typu fast food prawdopodobnie nie sta膰 na czekanie na potwierdzenia z sieci. Je艣li wi臋c firma umo偶liwia 鈥瀗atychmiastowe鈥 p艂atno艣ci, otwiera si臋 na atak z podw贸jnym wydatkowaniem. Kto艣 mo偶e zam贸wi膰 burgera, zap艂aci膰 za niego, a nast臋pnie natychmiast wys艂a膰 te same 艣rodki na sw贸j adres. Przy wy偶szej op艂acie ta nowa transakcja prawdopodobnie zostanie najpierw potwierdzona, a zatem uniewa偶ni poprzedni膮.

Istniej膮 trzy popularne metody przeprowadzania tych atak贸w:

  • atak 51%: gdy jednostka lub organizacja przejmie ponad 51% mocy obliczeniowej sieci kryptowaluty, umo偶liwi jej to odwr贸cenie 艂a艅cucha blok贸w i podw贸jne wydatkowanie transakcji. Taki atak jest mo偶liwy r贸wnie偶 w Bitconie, jednak na astronomiczne koszty z nim zwi膮zane oraz problemy logistyczne - nigdy nie mia艂 miejsca.

  • Wy艣cig: nadawane s膮 dwie transakcje z tymi samymi 艣rodkami, lecz tylko jedna z nich zostaje zaakceptowana. Celem atakuj膮cego jest uniewa偶nienie jednej transakcji i doprowadzenie do zatwierdzenia tej, dzi臋ki kt贸rej zyska monety dla siebie (np. wysy艂aj膮c kryptowaluty na adres, kt贸ry kontroluje). Przeprowadzenie ataku "wy艣cigowego" wymaga, 偶eby odbiorca akceptowa艂 p艂atno艣ci z niepotwierdzonymi transakcjami (0-conf transactions).

  • Atak Finney'a: atakuj膮cy przygotowuje jedn膮 transakcj臋, bez natychmiastowego rozg艂aszania jej do sieci. Nast臋pnie wydaje te same monety w ramach innej transakcji i dopiero wtedy rozsy艂a sw贸j wcze艣niej wydobyty blok, kt贸ry mo偶e p贸藕niej uniewa偶ni膰 p艂atno艣膰. Ataki Finney'a wymagaj膮 okre艣lonej sekwencji zdarze艅 i dobrej koordynacji, a tak偶e uzale偶nione s膮 od tego, czy odbiorca przyjmuje p艂atno艣ci 0-conf.

Jak mo偶emy zauwa偶y膰, sprzedawca, kt贸ry czeka na kilka potwierdze艅 transakcji w sieci, znacznie zmniejsza ryzyko stania si臋 ofiar膮 atak贸w polegaj膮cych na podw贸jnym wydatkowaniu.


Wnioski

Podw贸jne wydatkowanie w monetarnych systemach cyfrowych pozwala atakuj膮cym na uzyskania korzy艣ci finansowych, wykorzystuj膮c te same fundusze wi臋cej ni偶 raz. Tradycyjnie, brak odpowiednich rozwi膮za艅 problemu, przeszkadza艂 w dokonaniu post臋pu w tej dziedzinie.

Na szcz臋艣cie jednak u偶ycie 艣lepych podpis贸w zaproponowa艂o interesuj膮ce rozwi膮zanie dla scentralizowanych program贸w finansowych. P贸藕niejsze stworzenie mechanizm贸w聽Proof of Work i technologii blockchain da艂o pocz膮tek Bitcoinowi, jako pot臋偶nej formie zdecentralizowanego pieni膮dza. Zapocz膮tkowa艂 on er臋 kryptowalut jakie znamy dzi艣.