Čo je dvojité míňanie?
Dvojité míňanie označuje potenciálny problém v digitálnom hotovostnom systéme, kde sa rovnaké prostriedky pošlú súčasne dvom príjemcom. Bez akýchkoľvek adekvátnych protiopatrení je protokol, ktorý tento problém nerieši, zásadne narušený. Používatelia nemajú ako overiť, či prostriedky, ktoré dostali, už neboli minuté niekde inde.
Pokiaľ ide o digitálnu hotovosť, je mimoriadne dôležité zabezpečiť, aby nebolo možné duplikovať konkrétne jednotky. Ak by Alica mohla prijať 10 jednotiek, 10-krát ich skopírovať a vložiť a zistila by, že vlastní 100 jednotiek, celý systém by bol narušený. Podobne, takáto schéma nemôže fungovať, ak dokáže poslať tých istých 10 jednotiek súčasne Bobovi aj Carol. Aby teda digitálne peniaze fungovali, musia existovať mechanizmy, ktoré takémuto správaniu zabránia.
Ako je možné zabrániť dvojitému míňaniu?
Centralizovaný prístup
Implementácia centralizovanej cesty je podstatne jednoduchšie ako implementácia decentralizovaných alternatív. Súčasťou systému je štandardne jeden dozorca, ktorý riadi systém a kontroluje vydávanie a distribúciu jednotiek. Dobrým príkladom centralizovaného riešenia problému dvojitého míňania je elektronická hotovosť Davida Chauma.
Na vydávanie digitálnych aktív napodobňujúcich hotovosť používateľom (s možnosťou anonymnej a peer-to-peer výmeny) môže banka použiť slepé podpisy, ako to v roku 1982 podrobne opísal kryptograf David Chaum v dokumente Blind Signatures for Untraceable Payments.
V tomto kontexte, ak si používateľ (nazvime ho Dan) želá prijať 100 dolárov v digitálnej hotovosti, musí o tom najskôr informovať banku. Za predpokladu, že má dostatočný zostatok na účte, vygeneruje náhodné číslo (alebo viac čísel, v prípade menších nominálnych hodnôt). Predpokladajme, že vygeneruje 5 čísel, každému bude priradená hodnota 20 USD. Aby zabránil banke sledovať konkrétne jednotky, Dan použije zahmlievanie náhodných čísel a ku každému z nich pridá maskujúci faktor.
Potom tieto údaje pošle banke, ktorá z jeho účtu odpíše 100 USD, a podpíše správy potvrdzujúce, že každá z piatich informácií je zameniteľná za 20 USD. Dan teraz môže minúť prostriedky vydané bankou. Ide do Erininej reštaurácie a kúpi si jedlo, za ktoré zaplatí 40 USD.
Dan teraz môže odstrániť maskujúci faktor a tým odhaliť náhodné číslo spojené s každou digitálnou hotovostnou „bankovkou“, ktoré slúži ako jedinečný identifikátor pre každú jednotku (podobne ako sériové číslo). Dve z nich prezradí Erin, ktorá si ich teraz musí okamžite nechať vyplatiť v banke, aby zabránila tomu, že ich Dan minie v inom obchode. Banka skontroluje, či sú podpisy platné, a ak bude všetko vyzerať v poriadku, pripíše Erin na účet 40 USD.
Použité bankovky sú teraz v podstate spálené a ak chce Erin utratiť svoj nový zostatok rovnakým spôsobom, musia sa vydať nové bankovky.
Princíp Chaumovej elektronickej hotovosti môže byť cenný pre súkromné prevody. Zlyháva však v pružnosti, pretože banka je centrálnym bodom zlyhania. Vydaná bankovka je sama o sebe bezcenná, pretože jej hodnota je odvodená výlučne od ochoty banky vymeniť ju za doláre. Aby peniaze fungovali, zákazníci sú vydaní na milosť a nemilosť banky. Musia sa spoliehať na jej dobrú vôľu. Toto je presne problém, ktorý sa kryptomena snaží vyriešiť.
Decentralizovaný prístup
Zabezpečiť, aby sa v ekosystéme, kde neexistuje žiadny dozorca, nedali finančné prostriedky minúť dvakrát, je náročnejšie. Rovnako silní účastníci sa musia koordinovať okolo súboru pravidiel, ktoré zabraňujú podvodom a motivujú všetkých používateľov, aby konali čestne.
Najväčšou inováciou prezentovanou v bielej knihe Bitcoinu bolo riešenie problému dvojitého míňania. Hoci Satoshi to takto neoznačuje, navrhol štruktúru údajov, ktorá je teraz všeobecne známa pod názvom blockchain.
Blockchain je v podstate len databáza s určitými jedinečnými vlastnosťami. Účastníci v sieti (označovaní ako uzly) používajú špecializovaný softvér, ktorý im umožňuje synchronizovať kópiu databázy s osobami, ktoré sú im seberovné. Výsledkom je, že celá sieť dokáže kontrolovať históriu transakcií, ktoré sa datujú od vzniku prvého bloku. Tým, že blockchain je verejne viditeľný, je ľahké odhaliť a zabrániť podvodným aktivitám, ako sú transakcie, ktoré sa pokúšajú využiť dvojité míňanie.
Keď používateľ odvysiela transakciu, táto sa nepridá okamžite do blockchainu. Najprv musí byť zahrnutá do bloku prostredníctvom ťažby. Príjemca by mal považovať transakciu za platnú až po pridaní jej bloku do reťazca. V opačnom prípade riskuje stratu svojich prostriedkov, pretože odosielateľ by mohol tie isté coiny minúť niekde inde.
Po potvrdení transakcie sa coiny nedajú minúť dvakrát, pretože vlastníctvo je priradené novému používateľovi. A celá sieť to môže overiť. Práve z tohto dôvodu mnohí odporúčajú pred prijatím platby ako platnej počkať na viacero potvrdení. Každý nasledujúci blok dramaticky zvyšuje množstvo úsilia potrebného na úpravu alebo prepísanie reťazca (čo sa môže vyskytnúť počas útoku 51 %).
Vráťme sa znovu k scenáru z reštaurácie. Dan sa vracia do reštaurácie. Tentokrát si na okne všimne nálepku „Tu prijímame platby bitcoinom“. Jedlo, ktoré si dal naposledy, mu chutilo, tak si ho objedná znovu. Stojí ho to 0,005 BTC.
Erin mu predloží verejnú adresu, na ktorú musí poslať peniaze. Dan odvysiela transakciu, čo je v podstate podpísaná správa, v ktorej sa uvádza, že 0,005 BTC, ktoré doteraz vlastnil Dan, teraz vlastní Erin. Bez toho, aby sme zachádzali do prílišných podrobností, každý, komu je predložená Danova podpísaná transakcia, môže overiť, že tieto coiny skutočne vlastnil, a teda mal právomoc poslať ich.
Ako už bolo uvedené, transakcia je platná iba vtedy, ak je zahrnutá do bloku, ktorý sa potvrdí. Prijatie nepotvrdených transakcií je podobné ako prijatie 40 USD v elektronickej hotovosti z predchádzajúceho príkladu bez okamžitého preplatenia v banke. Odosielateľovi to umožňuje minúť ich niekde inde. Preto sa odporúča, aby pred prijatím Danovej platby Erin počkala aspoň na 6 potvrdení bloku (približne 1 hodinu).
Dvojnásobné míňanie v reťazci Bitcoin
Bitcoin je starostlivo navrhnutý tak, aby zabránil útokom dvojitého míňania. Minimálne v prípadoch, keď sa protokol používa podľa očakávania. To znamená, že ak jednotlivci čakajú na potvrdenie transakcií v bloku, odosielateľ nemá k dispozícii jednoduchý spôsob, ako vrátiť transakciu späť. Aby to dokázal, musel by „obrátiť“ blockchain, čo si vyžaduje nereálne množstvo hašovacej sily.
Existuje však niekoľko útokov dvojitého míňania, ktoré sa zameriavajú na strany, ktoré prijímajú nepotvrdené transakcie. Napríklad pri nákupoch s nízkou hodnotou sa obchodníkovi nemusí chcieť čakať na zahrnutie transakcií do bloku. Je pravdepodobné, že zaneprázdnená reštaurácia rýchleho občerstvenia nebude čakať na spracovanie každého nákupu. Ak teda obchodník umožňuje „okamžité“ platby, dáva tým priestor pre dvojité míňanie. Niekto si môže objednať hamburger, zaplatiť zaň a potom okamžite poslať prostriedky v rovnakej výške na svoju vlastnú adresu. Pri vyššom poplatku bude táto nová transakcia pravdepodobne potvrdená skôr, čím zruší platnosť predchádzajúcej transakcie.
Existujú 3 obľúbené spôsoby dvojitého míňania:
Útok 51 %: keď jeden subjekt alebo organizácia dokáže kontrolovať viac ako 50 % hash rate, čo mu umožňuje vylučovať transakcie alebo upravovať ich poradie. Takýto útok je v reťazci Bitcoin vysoko nepravdepodobný, vyskytol sa však v iných sieťach.
Race attack: dve protikladné transakcie s rovnakou výškou prostriedkov sa vyšlú za sebou, ale potvrdí sa iba jedna z nich. Cieľom útočníka je zneplatniť platbu overením iba tej transakcie, z ktorej má prospech (napr. zaslaním prostriedkov v rovnakej výške na adresu, ktorú ovláda). Race attack vyžaduje, aby príjemca prijal nepotvrdenú transakciu ako platbu.
Finneyho útok: útočník vopred vyťaží jednu transakciu do bloku bez toho, aby ju okamžite poslal do siete. Namiesto toho minie tie isté coiny v rámci inej transakcie a až potom odvysiela svoj predtým vyťažený blok, ktorý môže platbu zneplatniť. Finneyho útok si vyžaduje špecifickú postupnosť udalostí. Tento typ útoku je tiež podmienený prijatím nepotvrdených transakcií príjemcom.
Ako vidíme, obchodník, ktorý počká na potvrdenia bloku, výrazne znižuje riziko, že sa stane obeťou dvojitého míňania.
Záverečné myšlienky
Dvojité míňanie umožňuje používateľovi oklamať elektronický hotovostný systém, získať finančný zisk a použiť tie isté prostriedky viackrát. Pokroku v tejto oblasti už tradične bráni nedostatok primeraných riešení tohto problému.
Našťastie použitie slepých podpisov prinieslo návrh zaujímavého riešenia pre centralizované finančné schémy. Neskôr vytvorenie mechanizmov Proof of Work a technológie blockchain umožnilo zrod reťazca Bitcoin, ktorý predstavuje silnú formu decentralizovaných peňazí. A to zase inšpirovalo tisíce ďalších projektov v oblasti kryptomien.