Co je dvojitá útrata?
Dvojitá útrata je potenciální problém v digitálním hotovostním systému, kdy jsou tytéž prostředky vydány dvěma příjemcům současně. Bez adekvátních protiopatření je protokol, který tento problém neřeší, zásadně ohrožen – uživatelé nemají možnost ověřit, že prostředky, které obdrželi, již nebyly utraceny jinde.
Pokud jde o digitální hotovost, je nesmírně důležité zajistit, aby konkrétní jednotky nemohly být duplikovány. Celý systém by byl ohrožen, pokud by Alice mohla obdržet 10 jednotek, desetkrát je zkopírovat a vložit a zjistit, že vlastní 100 jednotek. Stejně tak takový systém nemůže fungovat, pokud by mohla poslat stejných 10 jednotek současně Bobovi i Carol. Aby tedy digitální peníze fungovaly, musí existovat mechanismy, které takovému chování zabrání.
Jak lze zabránit dvojité útratě?
Centralizovaný přístup
Centralizovaná cesta je podstatně jednodušší na realizaci než decentralizované alternativy. Obvykle zahrnuje jednoho správce, který řídí systém a kontroluje emisi a distribuci jednotek. Dobrým příkladem centralizovaného řešení problému dvojité útraty je systém eCash Davida Chauma.
Pokud si v takovém případě uživatel (říkejme mu Dan) přeje obdržet 100 dolarů v podobě digitální hotovosti, musí o tom nejprve informovat banku. Za předpokladu, že má na svém účtu takový zůstatek, následně vygeneruje náhodné číslo (nebo více čísel, v případě menších částek). Předpokládejme, že vygeneruje pět čísel, z nichž každému bude přiřazena hodnota 20 USD. Aby banka nemohla sledovat konkrétní jednotky, Dan náhodná čísla zastře tím, že ke každému z nich přidá zaslepující faktor.
Poté předá tyto údaje bance, která z jeho účtu odečte 100 dolarů a podepíše zprávy potvrzující, že každá z pěti informací je směnitelná za 20 USD. Dan nyní může prostředky vydané bankou utratit. Jde do restaurace Erin a koupí si jídlo, které ho stojí 40 USD.
Dan může odstranit zaslepující faktor a odhalit náhodné číslo spojené s každou digitální „bankovkou“, které slouží jako jedinečný identifikátor každé jednotky (podobně jako sériové číslo). Dvě z nich odhalí Erin, která je nyní musí okamžitě uplatnit u banky, aby zabránila Danovi utratit je u jiného obchodníka. Banka zkontroluje, zda jsou podpisy platné, a pokud se vše zdá být v pořádku, připíše na Erinin účet 40 USD.
Použité bankovky jsou nyní v podstatě spálené, a pokud chce Erin stejným způsobem utratit svůj nový zůstatek, musí být vydány další.
Systém Chaumian eCash by mohl být cenný pro soukromé převody. Selhává však v odolnosti, protože banka je ústředním bodem selhání. Vydaná bankovka sama o sobě nemá žádnou hodnotu, protože její hodnota je odvozena pouze od ochoty banky směnit ji za dolary. Zákazníci jsou vydáni na milost a nemilost bance a musí se spoléhat na její dobrou vůli, že peníze budou fungovat. Právě tento problém se snaží kryptoměny odstranit.
Decentralizovaný přístup
Zajistit, aby v ekosystému bez dohledu nedocházelo k dvojité útratě, je náročnější. Účastníci na stejné úrovni se musí koordinovat na základě souboru pravidel, která zabrání podvodům a motivují všechny uživatele k poctivému chování.
Zopakujme si scénář s restaurací. Dan se vrátí do restaurace a tentokrát si všimne nálepky „Přijímáme bitcoiny“ na okně. Jídlo, které si dal minule, mu chutnalo, a tak si ho objedná znovu. Stojí ho to 0,005 BTC.
Jak již bylo zmíněno, transakce je platná pouze tehdy, pokud je zahrnuta do bloku, který je potvrzen. Přijímání nepotvrzených transakcí je podobné jako přijímání 40 dolarů v eCash z předchozího příkladu, aniž by je banka okamžitě vyplatila – umožňuje je odesílateli utratit jinde. Proto se doporučuje, aby Erin počkala na potvrzení alespoň 6 bloků (zhruba jednu hodinu), než Danovu platbu přijme.
Dvojitá útrata v Bitcoinu
Bitcoin je pečlivě navržen tak, aby zabránil útokům typu dvojité útraty, alespoň pokud je protokol používán podle očekávání. To znamená, že pokud jednotlivci čekají na potvrzení transakcí v bloku, neexistuje pro odesílatele snadný způsob, jak je zrušit. Aby tak mohli učinit, museli by „zvrátit“ blockchain, což vyžaduje nereálné množství hashovací síly.
Existuje však několik útoků typu dvojité útraty, které se zaměřují na strany přijímající nepotvrzené transakce. Například u nákupů s nízkou hodnotou nemusí obchodník chtít čekat na zařazení transakcí do bloku. Rušná restaurace s rychlým občerstvením si pravděpodobně nemůže dovolit čekat, až síť zpracuje každý nákup. Pokud tedy podnik umožní „okamžité“ platby, otevírá cestu k dvojí útratě. Někdo si může objednat hamburger, zaplatit za něj a pak okamžitě poslat stejné prostředky na svou vlastní adresu. Díky vyššímu poplatku bude tato nová transakce pravděpodobně potvrzena jako první, a tudíž zneplatní tu předchozí.
Existují tři oblíbené způsoby provedení dvojí útraty:
- 51% útoky: když se jednomu subjektu nebo organizaci podaří ovládnout více než 50 % hash rate, což jim umožní vyloučit nebo změnit pořadí transakcí. Takový útok je u Bitcoinu velmi nepravděpodobný, ale v jiných sítích k němu došlo.
- Útoky typu race attack: ke zpracování jsou odeslány dvě konfliktní transakce za sebou, přičemž jsou použity stejné prostředky – potvrzena je však pouze jedna transakce. Cílem útočníka je zneplatnit platbu tím, že potvrdí pouze tu transakci, která je pro něj výhodná (např. odesláním stejných prostředků na adresu, kterou ovládá). Útoky typu race attack vyžadují, aby příjemce přijal jako platbu nepotvrzenou transakci.
- Útoky typu Finney attack: útočník předtěží jednu transakci do bloku, aniž by ji okamžitě odeslal do sítě. Místo toho utratí stejné coiny v jiné transakci a teprve poté odešle svůj dříve vytěžený blok, čímž může platbu zneplatnit. Útoky typu Finney attack vyžadují, aby došlo k určité sekvenci událostí, a jsou také podmíněny přijetím nepotvrzených transakcí příjemcem.
Jak vidíme, obchodník, který čeká na potvrzení bloku, výrazně sníží riziko, že se stane obětí události typu dvojité útraty.
Závěrem
Dvojitá útrata umožňuje uživateli zneužívat elektronický peněžní systém s cílem získat finanční zisk a použít tytéž prostředky vícekrát. Pokroku v této oblasti tradičně stojí v cestě nedostatek vhodných řešení tohoto problému.