Co je dvojí utrácení?

Dvojí útrata je potenciální problém v digitálním hotovostním systému, kde jsou stejné prostředky odesílány dvěma příjemcům současně. Bez jakýchkoli adekvátních protiopatření je protokol, který problém neřeší, zásadně podkopán – uživatelé nemají žádný způsob, jak ověřit, že prostředky, které obdrželi, již nebyly vynaloženy jinde.

Pokud jde o digitální hotovost, je nanejvýš důležité zajistit, aby nebylo možné duplikovat konkrétní jednotky. Celý systém by byl narušen, pokud by Alice mohla přijmout 10 jednotek, desetkrát je zkopírovat a vložit a zjistila by, že vlastní 100 jednotek. Podobně takové schéma nemůže fungovat, pokud může poslat stejných 10 jednotek Bobovi i Carol současně. Aby tedy digitální peníze fungovaly, musí existovat mechanismy, které tomuto chování zabrání.


Jak lze zabránit dvojímu utrácení?

Centralizovaný přístup

Centralizovaná cesta je podstatně jednodušší na implementaci než decentralizované alternativy. To obvykle zahrnuje jednoho dozorce, který řídí systém a kontroluje vydávání a distribuci jednotek. Dobrým příkladem centralizovaného řešení problému dvojího utrácení je eCash Davida Chauma.

K vydávání digitálních aktiv napodobujících hotovost (schopné anonymní a peer-to-peer výměny) může banka uživatelům použít slepé podpisy – jak podrobně popsal kryptograf David Chaum ve svém dokumentu Blind Signatures for Untraceable Payments z roku 1982.

V takovém kontextu, pokud si uživatel (říkejme mu Dan) přeje získat 100 $ v digitální hotovosti, je povinen nejprve informovat banku. Pokud má zůstatek na svém účtu, vygeneruje náhodné číslo (nebo mnoho, u menších nominálních hodnot). Předpokládejme, že vytvoří pět čísel, z nichž každému bude přiřazena hodnota 20 $. Aby banka zabránila ve sledování konkrétních jednotek, Dan zatemní náhodná čísla tím, že ke každé z nich přidá oslepující faktor.

Poté tato data předá bance, která z jeho účtu strhne 100 USD, a podepíše zprávy potvrzující, že každou z pěti informací lze vyměnit za 20 USD. Dan nyní může utratit finanční prostředky vydané bankou. Jde do Erininy restaurace a koupí si jídlo, které ho stojí 40 dolarů.

Dan může odstranit oslepující faktor a odhalit náhodné číslo spojené s každým digitálním peněžním „účtem“, které slouží jako jedinečný identifikátor pro každou jednotku (podobně jako sériové číslo). Dvě z nich odhalí Erin, která je nyní musí okamžitě vykoupit v bance, aby zabránila Danovi utratit je u jiného obchodníka. Banka zkontroluje, zda jsou podpisy platné, a pokud vše vypadá správně, připíše na Erin účet 40 dolarů.

Použité bankovky jsou nyní v podstatě spálené a pokud chce Erin utratit svůj nový zůstatek stejným způsobem, musí se vydat další.

Nastavení Chaumian eCash může být užitečné pro soukromé převody. Ale selhává v odolnosti, protože banka je ústředním bodem selhání. Vydaná směnka sama o sobě nestojí za nic, protože její hodnota je odvozena pouze od ochoty banky ji vyměnit za dolary. Zákazníci jsou vydáni na milost a nemilost banky a musí spoléhat na její dobrou vůli, aby peníze fungovaly. To je přesně ten problém, který se kryptoměna snaží napravit.


Decentralizovaný přístup

Zajistit, aby finanční prostředky nemohly být utraceny dvakrát v ekosystému bez dozorce, je náročnější. Stejně silní účastníci se musí koordinovat kolem souboru pravidel, která zabraňují podvodům a motivují všechny uživatele, aby jednali čestně.

Největší inovací představenou v bílé knize o bitcoinech bylo řešení problému dvojího utrácení. Ačkoli to tak není uvedeno, Satoshi navrhl datovou strukturu, která je nyní široce známá jako blockchain.

Blockchain je ve skutečnosti jen databáze s některými jedinečnými vlastnostmi. Účastníci v síti (označované jako uzly) provozují specializovaný software, který jim umožňuje synchronizovat kopii databáze se svými kolegy. Výsledkem je, že celá síť může auditovat historii transakcí od počátku bloku. Tím, že je blockchain veřejně viditelný, je snadné odhalit a zabránit podvodným aktivitám, jako jsou transakce, které se snaží utratit dvakrát.

Když uživatel odvysílá transakci, není okamžitě přidána do blockchainu – musí být nejprve zahrnuta do bloku prostřednictvím těžby. Příjemce by jako takový měl transakci považovat za platnou až poté, co je její blok přidán do řetězce. V opačném případě riskují ztrátu finančních prostředků, protože odesílatel by mohl stejné mince utratit jinde.

Jakmile je transakce potvrzena, nelze coiny utratit dvakrát, protože vlastnictví je přiděleno novému uživateli – a celá síť to může ověřit. Z tohoto důvodu mnozí doporučují počkat na více potvrzení, než přijmou platbu za platnou. Každý následující blok drasticky zvyšuje množství úsilí potřebného k úpravě nebo přepsání řetězce (ke kterému může dojít během 51% útoku).

Vraťme se ke scénáři restaurace. Dan se vrací do restaurace a tentokrát si na okně všimne nálepky Bitcoin Accepted Here. Jídlo, které měl minule, si užil, tak si ho objedná znovu. Stojí ho to 0,005 BTC.

Erin mu předloží veřejnou adresu, na kterou musí poslat peníze. Dan odvysílá transakci, což je v podstatě podepsaná zpráva uvádějící, že 0,005 BTC, které měl Dan v držení, je nyní v Erin. Aniž bychom zacházeli do přílišných podrobností, každý, komu byla předložena Danova podepsaná transakce, může ověřit, že skutečně vlastnil mince, a měl tedy pravomoc je poslat.

Jak již bylo zmíněno, transakce je platná pouze tehdy, je-li zahrnuta v bloku, který je potvrzen. Přijímání nepotvrzených transakcí je podobné jako přijímání eCash ve výši 40 USD z předchozího příkladu, aniž byste je okamžitě inkasovali v bance – umožňuje to odesílateli utratit je jinde. Proto se doporučuje, aby Erin počkala na alespoň 6 potvrzení blokování (zhruba jednu hodinu), než přijme Danovu platbu.


Dvojité utrácení v bitcoinech

Bitcoin je pečlivě navržen tak, aby zabránil útokům typu double-spending, alespoň když je protokol používán podle očekávání. To znamená, že pokud jednotlivci čekají na potvrzení transakcí v bloku, odesílatel nemá snadný způsob, jak to vrátit zpět. Aby tak učinili, museli by „obrátit“ blockchain, což vyžaduje nerealistické množství hashovací síly.

Existuje však několik útoků s dvojitým utrácením, které se zaměřují na strany, které přijímají nepotvrzené transakce. Například u nákupů s nízkou hodnotou nemusí obchodník chtít čekat na zahrnutí transakcí do bloku. Rušná restaurace rychlého občerstvení si pravděpodobně nemůže dovolit čekat, protože síť zpracovává každý nákup. Pokud tedy firma umožňuje „okamžité“ platby, otevírá se dvojnásobné útratě. Někdo by si mohl objednat burger, zaplatit za něj a pak okamžitě poslat stejné prostředky na svou vlastní adresu. S vyšším poplatkem bude tato nová transakce pravděpodobně potvrzena jako první, a tedy zneplatní předchozí.

Existují tři oblíbené způsoby, jak provést dvojí útratu:

  • 51% útoky: když se jednomu subjektu nebo organizaci podaří kontrolovat více než 50 % hash rate, což jim umožňuje vyloučit nebo upravit řazení transakcí. Takový útok je u bitcoinu vysoce nepravděpodobný, ale stal se v jiných sítích.

  • Závodní útoky: dvě konfliktní transakce se vysílají za sebou se stejnými prostředky – ale pouze jedna transakce je potvrzena. Cílem útočníka je zneplatnit platbu pouze ověřením transakce, která je pro něj výhodná (např. zasláním stejných prostředků na adresu, kterou ovládá). Rasové útoky vyžadují, aby příjemce přijal nepotvrzenou transakci jako platbu.

  • Finney útoky: Útočník předem vytěží jednu transakci do bloku, aniž by ji okamžitě vyslal do sítě. Místo toho utratí stejné coiny v jiné transakci a teprve poté odvysílá svůj dříve vytěžený blok, což může platbu zneplatnit. Finneyho útoky vyžadují, aby došlo k určitému sledu událostí, a jsou také závislé na přijetí nepotvrzených transakcí příjemcem.

Jak vidíme, obchodník, který čeká na potvrzení blokování, výrazně sníží riziko, že se stane obětí dvojího utrácení.


Závěrečné myšlenky

Dvojitá útrata umožňuje uživateli hrát elektronický hotovostní systém za účelem finančního zisku a použít stejné prostředky více než jednou. Pokroku v této oblasti tradičně stojí v cestě nedostatek adekvátních řešení tohoto problému.

Naštěstí však použití slepých podpisů navrhlo zajímavé řešení pro centralizovaná finanční schémata. Později vytvoření mechanismů Proof of Work a technologie blockchain dalo vzniknout bitcoinu jako silné formě decentralizovaných peněz – což zase inspirovalo tisíce dalších projektů v oblasti kryptoměn.