Magyarázat a dupla költéshez
Kezdőlap
Cikkek
Magyarázat a dupla költéshez

Magyarázat a dupla költéshez

Középszintű
Közzétéve Feb 17, 2020Frissítve Jan 31, 2023
7m

Mit jelent a dupla költés?

A dupla költés a digitális pénzrendszerek egy lehetséges problémája, amikor is ugyanazt az összeget egyidejűleg két címzettnek küldik el. Megfelelő ellenintézkedések nélkül egy olyan protokoll, amely nem oldja meg ezt a problémát, alapjaiban sérült — a felhasználóknak nincs módjuk ellenőrizni, hogy a kapott összeget nem költötték-e már el máshol.

A digitális pénz esetében kiemelkedő fontosságú annak biztosítása, hogy az egyes egységek ne legyenek másolhatók. Az egész rendszert aláásná, ha Alíz kaphatna 10 egységet, 10-szer lemásolhatná és beilleszthetné őket, így 100 egység birtokában találná magát. Hasonlóképpen, egy ilyen rendszer nem működhet, ha egyszerre ugyanazt a 10 egységet el tudja küldeni Robinak és Karolinának is. A digitális pénz működéséhez tehát olyan mechanizmusokra van szükség, amelyek megakadályozzák ezt a problémát.


Hogyan előzhető meg a dupla költés?

A centralizált megközelítés

A centralizált megoldás lényegesen könnyebben megvalósítható, mint a decentralizált alternatívák. Ez jellemzően egy felügyelőt alkalmazna, aki irányítja a rendszert, és ellenőrzi az egységek kiadását és elosztását. A dupla költés problémájának centralizált megoldására jó példa a David Chaum által kifejlesztett eCash. 

Ahhoz, hogy a felhasználóknak pénzt imitáló (névtelen és peer-to-peer kereskedésre alkalmas) digitális eszközt adjon ki, a bank használhat vak aláírást - ahogyan azt David Chaum kriptográfus 1982-ben megjelent Blind Signatures for Untraceable Payments(Vak aláírás a lenyomozhatatlan fizetésekhez) című munkájában részletezte.

Ilyen körülmények között, ha egy felhasználó (nevezzük Daninak) 100 dollárnyi digitális pénzt szeretne kapni, először a bankot kell értesítenie. Amennyiben rendelkezik a számláján az egyenleggel, ezután generál egy véletlen számot (vagy több számot, kisebb címletek esetén). Tegyük fel, hogy öt számot állít elő, amelyek mindegyikéhez 20 dollárnyi értéket rendel. Annak érdekében, hogy a bank ne tudja nyomon követni az egyes egységeket, Dani elrejti a véletlenszerű számokat azzal, hogy mindegyikhez hozzáad egy titkosító tényezőt .

Ezt követően átadja ezeket az adatokat a banknak, amely 100 dollárral megterheli a számláját, és aláírja azokat az üzeneteket, amelyek igazolják, hogy az öt egység mindegyike 20 dollárra váltható. Dani most már elköltheti a bank által kibocsátott pénzeszközöket. Elmegy Erika éttermébe, és vesz egy 40 dolláros ételt. 

Dani eltávolíthatja az elrejtési tényezőt, hogy felfedje az egyes digitális „bankjegyekhez” tartozó véletlenszerű számot, amely az egyes egységek egyedi azonosítójaként szolgál (hasonlóan a sorozatszámhoz). Ebből kettőt felfed Erikának, akinek be kell váltania őket a banknál, hogy Dani ne költhesse el őket egy másik kereskedőnél. A bank ellenőrzi, hogy az aláírások érvényesek-e, és ha minden rendben van, 40 dollárt jóváír Erika számláján.

A felhasznált bankjegyek lényegében elégetésre kerültek, és újabbakat kell kibocsátani, ha Erika ugyanígy szeretné elkölteni az új egyenlegét.

A Chaumian eCash beállítása hasznos lehet a privát átutalásokhoz. A rugalmasság terén azonban kudarcot vall, mert a bank a központi hibalehetőség. A kibocsátott bankjegy önmagában semmit sem ér, mivel értéke kizárólag abból származik, hogy a bank hajlandó azt dollárra váltani. Az ügyfelek ki vannak szolgáltatva a banknak, és a bank jószándékára kell hagyatkozniuk, hogy a pénzük működjön. A kriptovaluták pontosan ezt a problémát hivatottak orvosolni.


A decentralizált megközelítés

Nagyobb kihívást jelent annak biztosítása, hogy a pénzeszközöket ne lehessen kétszer elkölteni egy olyan ökoszisztémában, ahol nincs felügyelő. Az egyenlő hatalommal rendelkező résztvevőknek olyan szabályok szerint kell eljárniuk, amelyek megakadályozzák a csalást, és minden felhasználót tisztességes magatartásra ösztönöznek.

A Bitcoin fehér könyvében bemutatott legnagyobb újítás a dupla költés problémáját hivatott megoldani. Bár nem így hivatkozott rá, Satoshi korábban már felvetette a ma már széles körben blokklánc néven ismert adatstruktúrát.

A blokklánc tulajdonképpen egy adatbázis, néhány egyedi tulajdonsággal. A hálózat résztvevői (a csomópontok) speciális szoftvert futtatnak, amely lehetővé teszi számukra, hogy szinkronizálják az adatbázis másolatát társaikkal. Az eredmény az, hogy a hálózat egésze ellenőrizni tudja a tranzakciós előzményeket a genezisblokkig visszamenőleg. Azáltal, hogy a blokklánc nyilvánosan megtekinthető, könnyen felismerhetők és megelőzhetők a csalárd tevékenységek, például a dupla költéses tranzakciók.

Amikor egy felhasználó közvetít egy tranzakciót, az nem kerül fel azonnal a blokkláncra – először bányászat útján kell egy blokkba foglalni. Így a címzett csak azt követően tekintheti a tranzakciót érvényesnek, hogy a blokkot hozzáadták a lánchoz. Ellenkező esetben kockáztatják a pénz elvesztését, mivel a feladó máshol is elköltheti ugyanazokat az érméket. 

A tranzakció megerősítése után az érméket nem lehet kétszer elkölteni, mivel a tulajdonjog egy új felhasználóhoz kerül, és ezt az egész hálózat ellenőrizni tudja. Ezért is javasolják sokan, hogy várjon több visszaigazolásra, mielőtt érvényesnek fogadja el a fizetést. Minden további blokk drasztikusan megnöveli a lánc módosításához vagy újraírásához szükséges erőfeszítést (ami egy 51%-os támadás során előfordulhat).

Térjünk vissza az éttermes példánkhoz. Dani visszatér az étterembe, és ezúttal észreveszi, hogy az ablakon egy Bitcoin elfogadóhely matrica van. Ízlett neki a múltkori étel, ezért újra megrendeli. 0,005 BTC-be kerül. 

Erika mutat neki egy publikus címet, ahová el kell küldenie a pénzt. Dani továbbítja a tranzakciót, amely lényegében egy aláírt üzenet, amely szerint a 0,005 BTC, mely Dan birtokában volt, most már Erika birtokában van. Anélkül, hogy túlságosan belemennénk a részletekbe, bárki, akinek Dani aláírt tranzakcióját bemutatják, meggyőződhet arról, hogy valóban az ő birtokában voltak az érmék, és ezért volt felhatalmazása arra, hogy elküldje őket.

Mint említettük, a tranzakció azonban csak akkor érvényes, ha egy megerősített blokkban szerepel. A meg nem erősített tranzakciók elfogadása olyan, mintha az előző példában említett 40 dolláros eCash-t fogadnánk el anélkül, hogy azt azonnal beváltanánk a banknál – ez lehetővé teszi a küldő számára, hogy máshol is elköltse azt. Ezért ajánlott, hogy Erika legalább 6 blokk visszaigazolását (nagyjából egy óra) megvárja, mielőtt elfogadja Dani fizetését.


Dupla költés a Bitcoinon

A Bitcoint gondosan úgy tervezték, hogy megakadályozza a dupla költéses támadásokat, feltéve, hogy a protokollt megfelelően használják. Ez azt jelenti, hogy ha valaki vár a tranzakció megerősítésére egy blokkban, a feladó nem tudja könnyen visszacsinálni azt. Ehhez „vissza kellene fordítaniuk” a blokkláncot, ami irreálisan nagy hash kapacitást igényel.

Van azonban pár dupla költéses támadás, amely a meg nem erősített tranzakciókat elfogadó feleket célozza. Kis értékű vásárlások esetén például előfordulhat, hogy a kereskedő nem akarja megvárni, hogy a tranzakciók bekerüljenek egy blokkba. Egy forgalmas gyorsétterem valószínűleg nem engedheti meg magának, hogy várakozzon, amíg a hálózat minden vásárlást feldolgoz. Tehát, ha egy vállalkozás lehetővé teszi az „azonnali” fizetést, kiteszi magát a dupla költés veszélyének. Lehet, hogy valaki rendel egy hamburgert, kifizeti, majd azonnal elküldi ugyanezt az összeget a saját címére. Magasabb díj mellett valószínűleg ezt az új tranzakciót fogják először megerősíteni, és így érvénytelenítik az előzőt.

Három népszerű módszer létezik a dupla költés végrehajtására:

  • 51%-os támadás: amikor egyetlen entitásnak vagy szervezetnek sikerül a hashráta több mint 50%-át irányítania, ami lehetővé teszi számára, hogy kizárjon tranzakciókat vagy módosítsa azok sorrendjét. Egy ilyen támadásra nagyon kicsi az esély a Bitcoin esetében, de más hálózatokon már előfordult.

  • Race támadás: két egymásnak ellentmondó tranzakciót továbbítanak egymás után, ugyanazzal a pénzeszközzel - de csak az egyik tranzakciót erősítik meg. A támadó célja, hogy érvénytelenítse a fizetést azáltal, hogy csak a számára előnyös tranzakciót validálja (pl. ugyanazt az összeget egy általa birtokolt címre küldi). A race támadások megkövetelik, hogy a címzett egy meg nem erősített tranzakciót fogadjon el fizetésként.

  • Finney-támadások: a támadó előre bányász egy tranzakciót egy blokkba anélkül, hogy azonnal továbbítaná a hálózatra. Ehelyett ugyanazt az érmét egy másik tranzakcióban költi el, és csak ezután továbbítja a korábban bányászott blokkját, ami érvénytelenítheti a fizetést. A Finney-támadások meghatározott eseménysorozatot követelnek meg, és attól is függnek, hogy a címzett elfogadja-e a meg nem erősített tranzakciókat.

Mint láthatjuk, egy olyan kereskedő, aki megvárja a blokkok visszaigazolását, nagymértékben csökkenti annak kockázatát, hogy dupla költések áldozatává váljon.


Záró gondolatok

A dupla költés lehetővé teszi, hogy a felhasználó pénzügyi haszonszerzés céljából kijátsszon egy elektronikus pénzrendszert, és ugyanazt az összeget többször is felhasználja. Jellemzően a probléma megfelelő megoldásának hiánya akadályozta a terület előrehaladását.

Szerencsére azonban a vak aláírások használata érdekes megoldást kínál a centralizált pénzügyi rendszerek számára. Később a Proof of Work mechanizmusok és a blokklánc technológia létrehozásával született meg a Bitcoin, mint a decentralizált pénz hatékony formája, ami viszont több ezer más kriptovaluta projektet inspirált.