Mis on kordusmakse?
Kordusmakse on digitaalses rahasüsteemis potentsiaalne probleem, kus samad rahalised vahendid saadetakse korraga kahele saajale. Protokoll, mis ilma adekvaatsete vastumeetmeteta probleemi ei lahenda, on põhimõtteliselt ohtlik – kasutajad ei saa kuidagi kontrollida, et saadud raha pole juba mujal ära kulutatud.
Digitaalse raha puhul on ülimalt oluline tagada, et konkreetseid ühikuid ei saaks kopeerida. Kogu süsteemi saaks kahjustada, kui Alice saaks 10 ühikut, kopeeriks ja kleebiks neid 10 korda ning saaks endale 100 ühikut. Sarnaselt ei saa selline skeem toimida, kui on võimalik saata samad 10 ühikut nii Bobile kui ka Carolile. Seega digitaalraha toimimiseks peavad olema mehhanismid, mis seda käitumist takistavad.
Kuidas saab kordusmakset vältida?
Tsentraliseeritud lähenemine
Tsentraliseeritud lahendust on tunduvalt lihtsam rakendada kui detsentraliseeritud alternatiive. Tavaliselt kuulub sinna üks järelevaataja, kes haldab süsteemi ning kontrollib üksuste käibelelaskmist ja jaotust. Hea näide kordusmakse probleemi tsentraliseeritud lahendusest on David Chaumi eCash.
Pank võib kasutajatele sularaha jäljendava digitaalse vara väljastamiseks (võimalik anonüümne ja võrdõiguslik vahetus) kasutada pimedaid allkirju – nagu kirjeldas krüptograaf David Chaum oma 1982. aasta kirjutises Mittejälgitavate maksete pimedad allkirjad.
Sellisel juhul, kui kasutaja (nimetagem teda Daniks) soovib saada 100 dollari eest digitaalset raha, peab ta sellest kõigepealt panka teavitama. Eeldusel, et tema konto saldo on positiivne, genereerib ta juhusliku arvu (või mitu, väiksemate nimiväärtuste puhul). Oletame, et ta loob viis numbrit, millest igaühe väärtuseks omistatakse 20 dollarit. Et pank ei saaks konkreetseid ühikuid jälgida, hägustab Dan juhuslikud arvud, lisades igaühele neist pimeda teguri .
Seejärel annab ta need andmed üle pangale, kes debiteerib tema kontolt 100 dollarit ja allkirjastab sõnumid, mis kinnitavad, et kõik viis teabeühikut on lunastatavad 20 dollari eest. Dan saab nüüd panga väljastatud raha kulutada. Ta läheb Erini restorani ja ostab eine, mis maksab 40 dollarit.
Dan saab iga digitaalse raha "kupüüriga" seotud juhusliku arvu avaldamiseks eemaldada pimeda teguri, mis toimib iga ühiku kordumatu identifikaatorina (sarnaselt seerianumbriga). Ta avaldab neist kaks Erinile, kes peab need kohe pangas lunastama, et Dan ei kulutaks neid teise kaupmehe juures. Pank kontrollib allkirjade kehtivust ja kui kõik näib õige olevat, krediteerib Erini kontole 40 dollarit.
Kasutatud kupüürid on nüüd sisuliselt põletatud ja kui Erin soovib oma uut saldot samamoodi kulutada, tuleb neid veel väljastada.
Chaumian eCashi seadistus võib olla kasulik privaatsete ülekannete puhul. Kuid selle vastupidavus kukub läbi, sest pank on ebaõnnestumise kese. Välja antud rahatäht pole iseenesest midagi väärt, kuna selle väärtus tuleneb üksnes panga valmisolekust see dollariteks vahetada. Kliendid on panga meelevallas ja selle toimimiseks peavad lootma panga heale tahtele. See on just see probleem, mida krüptoraha soovib lahendada.
Detsentraliseeritud lähenemine
Veelgi keerulisem on tagada, et kordusmakse ei toimuks ökosüsteemis, kus puudub järelevaataja. Sama võimsad osalejad peavad kooskõlastama reeglite kogumi, mis hoiavad ära pettuseid ja motiveerivad kõiki kasutajaid ausalt tegutsema.
Suurim Bitcoini valges raamatus väljapakutud uuendus oli lahendus kordusmaksete probleemile. Ehkki sellele ei viidatud, pakkus Satoshi välja andmestruktuuri, mida praegu tuntakse kui plokiahelat.
Plokiahel on tegelikult lihtsalt andmebaas, millel on mõned ainulaadsed omadused. Võrgus osalejad (nimetatakse sõlmedeks) kasutavad spetsiaalset tarkvara, mis võimaldab neil sünkroonida oma andmebaasi koopia teistega. Tulemuseks on see, et kogu võrk saab auditeerida tehingute ajalugu, mis pärinevad geneesiblokist. Kui plokiahel on avalikult nähtav, on petturlikke tegevusi, näiteks kordusmakset üritavaid tehinguid lihtne tuvastada ja ära hoida.
Kui kasutaja edastab tehingu, ei lisata seda kohe plokiahelasse – esmalt tuleb see kaevandamise kaudu plokki kaasata. Seetõttu peaks saaja tehingut kehtivaks pidama alles pärast selle ploki ahelasse lisamist. Vastasel juhul võivad nad raha kaotada, kuna saatja võib samasi münte mujal kulutada.
Peale tehingu kinnitamist ei saa müntidega kordumakset teha, kuna omandiõigus määratakse uuele kasutajale ja kogu võrk saab seda kontrollida. Just sel põhjusel soovitavad paljud enne makse kehtivaks tunnistamist oodata mitut kinnitust. Iga järgmine plokk suurendab drastiliselt ahela muutmiseks või ümberkirjutamiseks vajalikku jõupingutust (võib juhtuda 51% rünnaku ajal).
Vaatame uuesti restorani stsenaariumi. Dan läheb tagasi restorani ja märkab seekord aknal 'Bitcoin Accepted Here' kleebist. Talle meeldis söök eelmisel korral, nii et tellib selle uuesti. See maksab talle 0,005 BTC-d.
Erin saadab talle avaliku aadressi, millele ta peab raha saatma. Dan esitab tehingu, mis on sisuliselt allkirjastatud sõnum, milles öeldakse, et Dani valduses olnud 0,005 BTC on nüüd Erini käes. Üksikasjadesse laskumata võib igaüks, kellele esitatakse Dani allkirjastatud tehing, kontrollida, et mündid olid tema omanduses ja seega oli tal õigus neid saata.
Nagu mainitud, kehtib tehing ainult siis, kui see sisaldub kinnitatavas plokis. Kinnitamata tehingute vastuvõtmine sarnaneb eelmises näites toodud 40-dollarilise eCashi vastuvõtmisega, ilma seda kohe pangast sularahana välja võtmata – see võimaldab saatjal kulutada seda mujal. Seetõttu on soovitatav, et Erin ootaks enne Dani makse vastuvõtmist vähemalt kuute blokeerimiskinnitust (umbes üks tund).
Bitcoini kordusmakse
Bitcoin on hoolikalt välja töötatud, et vältida kordusmakse rünnakuid, vähemalt siis, kui protokolli kasutatakse ootuspäraselt. See tähendab, et kui üksikisikud ootavad plokis tehingute kinnitamist, ei ole saatjal lihtne seda tagasi võtta. Selleks peaksid nad plokiahela „ümber pöörama“, mis nõuab ebarealistlikku räsivõimsust.
Siiski on käputäis kordusmaksete rünnakuid, mis on suunatud osapooltele, kes aktsepteerivad kinnitamata tehinguid. Näiteks väikese väärtusega ostude puhul ei pruugi kaupmees tahta oodata, kuni tehingud plokki kaasatakse. Tõenäoliselt ei saa hõivatud kiirtoidurestoran endale ootamist lubada, kui võrk igat ostu töötleb. Seega, kui ettevõte lubab „kiirmakseid“, avab ta end kordusmaksete võimalusele. Keegi võib tellida burgeri, maksta selle eest ja saata kohe samad rahalised vahendid enda aadressile. Kõrgema teenustasu korral kinnitatakse tõenäoliselt see uus tehing esimesena, mis muudab eelmise kehtetuks.
Kordusmaksete tegemiseks on kolm populaarset meetodit:
51% rünnakud: kui üks üksus või organisatsioon suudab kontrollida räsimäärast 50% või rohkem, siis see võimaldab neil välistada või muuta tehingute järjestust. Selline rünnak on Bitcoini suhtes väga ebatõenäoline, kuid seda on juhtunud teistes võrkudes.
Võistlusrünnakud: kaks vastandlikku tehingut edastatakse järjest, kasutades samu vahendeid, kuid ainult üks tehing kinnitatakse. Ründaja eesmärk on muuta makse kehtetuks, kinnitades ainult talle kasuliku tehingu (nt saates samad rahalised vahendid enda kontrollitavale aadressile). Võistlusrünnakute puhul on vaja, et saaja aktsepteeriks maksena kinnitamata tehingut.
Finney rünnakud: ründaja kaevandab eelnevalt plokki ühe tehingu ilma seda kohe võrku edastamata. Selle asemel kulutab ta samu münte mõne teise tehinguga ja alles seejärel edastab oma varem kaevandatud ploki, mis võib makse kehtetuks muuta. Finney rünnakute puhul peab toimuma teatud sündmuste jada ja need sõltuvad ka sellest, kas saaja nõustub kinnitamata tehingutega.
Nagu näeme, vähendab kaupmees, kes ootab ploki kinnitust, märkimisväärselt riske sattuda kordusmksete ohvriks.
Lõppmärkused
Kordusmakse võimaldab kasutajal rahalise kasu saamiseks elektroonilist sularahasüsteemi manipuleerida, kasutades samu vahendeid rohkem kui üks kord. Traditsiooniliselt on selle probleemi adekvaatsete lahenduste puudumine takistanud antud valdkonna arengut.
Õnneks pakkus pimedate allkirjade kasutamine tsentraliseeritud finantsskeemide puhul huvitava lahenduse. Hiljem kutsus töötõenduse mehhanismide ja plokiahela tehnoloogia loomine ellu Bitcoini kui võimsa detsentraliseeritud raha vormi, mis omakorda inspireeris tuhandeid teisi krüptorahaprojekte.