Vysvětlení problému dvojité útraty
Obsah
Co je dvojitá útrata?
Jak lze zabránit dvojité útratě?
Dvojitá útrata v Bitcoinu
Závěrem
Vysvětlení problému dvojité útraty
Domovská stránkaČlánky
Vysvětlení problému dvojité útraty

Vysvětlení problému dvojité útraty

Pokročilí
Published Feb 17, 2020Updated Dec 30, 2021
7m

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. 

K tomu, aby banka vydala uživatelům digitální aktivum napodobující hotovost (umožňující anonymní a peer-to-peer směnu), může použít tzv. slepé podpisy – jak podrobně popsal kryptograf David Chaum ve svém článku Blind Signatures for Untraceable Payments z roku 1982.

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í.

Největší novinkou představenou v bílé knize Bitcoinu bylo řešení problému dvojí útraty. Ačkoli to tak není přímo nazváno, Satoshi navrhl datovou strukturu, která je dnes všeobecně známá jako blockchain.
Blockchain je ve skutečnosti jen databáze s některými jedinečnými vlastnostmi. Účastníci sítě (označovaní jako uzly) provozují specializovaný software, který jim umožňuje synchronizovat svou kopii databáze se ostatními peer účastníky. Výsledkem je, že celá síť může kontrolovat historii transakcí sahající až k prvnímu bloku. Díky tomu, že je blockchain veřejně přístupný, je snadné odhalit podvodnou činnost a zabránit jí, například transakcím, které se pokoušejí o dvojitou útratu.
Když uživatel odešle transakci, není okamžitě přidána do blockchainu – musí být nejprve zařazena do bloku prostřednictvím těžby. Příjemce by proto měl transakci považovat za platnou až poté, co je její blok přidán do chainu. V opačném případě riskuje, že o prostředky přijde, protože odesílatel může stejné coiny utratit jinde. 
Jakmile je transakce potvrzena, coin nelze utratit dvakrát, protože vlastnictví je přiděleno novému uživateli – a celá síť to může ověřit. Právě z tohoto důvodu mnozí doporučují počkat na několik potvrzení, než platbu přijmete jako platnou. Každý další blok drasticky zvyšuje úsilí potřebné k úpravě nebo přepsání chainu (k čemuž může dojít při 51% útoku).

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. 

Erin mu sdělí veřejnou adresu, na kterou musí poslat finanční prostředky. Dan odešle transakci, která je v podstatě podepsanou zprávou o tom, že 0,005 BTC, které byly v Danově vlastnictví, jsou nyní v Erinině vlastnictví. Aniž bychom zacházeli do přílišných podrobností, každý, komu je předložena Danova podepsaná transakce, si může ověřit, že coiny skutečně vlastnil, a měl tedy oprávnění je odeslat.

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.

Naštěstí však použití slepých podpisů nabízí pro centralizované finanční systémy zajímavé řešení. Později se díky vytvoření mechanismů Proof of Work a technologie blockchainu zrodil Bitcoin jako mocná forma decentralizovaných peněz – což následně inspirovalo tisíce dalších kryptoměnových projektů.