Hvad er et dobbeltforbrug?
Dobbeltforbrug er et potentielt problem i et digitalt kontantsystem, hvor de samme midler sendes til to modtagere på samme tid. Uden passende modforanstaltninger undermineres en protokol, der ikke løser problemet, grundlæggende – brugerne har ingen måde til at verificere, at de midler, de har modtaget, ikke allerede er brugt andre steder.
Når det drejer sig om digitale kontanter, er det af afgørende betydning at sikre, at specifikke enheder ikke kan duplikeres. Hele systemet ville blive undermineret, hvis Alice kunne modtage 10 enheder, kopiere og indsætte dem 10 gange og finde sig selv i besiddelse af 100 enheder. På samme måde kan en sådan ordning ikke fungere, hvis hun kan sende de samme 10 enheder til både Bob og Carol samtidigt. Så for at digitale penge skal fungere, skal der være mekanismer på plads for at forhindre denne adfærd.
Hvordan kan dobbeltforbrug forhindres?
Den centraliserede tilgang
Den centraliserede rute er betydeligt lettere at implementere end decentrale alternativer. Dette indebærer typisk, at en tilsynsmand styrer systemet og kontrollerer udstedelsen og distributionen af enheder. Et godt eksempel på en centraliseret løsning på problemet med dobbeltforbrug er David Chaums eCash.
For at give brugere et digitalt aktiv, der efterligner kontanter (med mulighed for anonym og peer-to-peer-veksling), kan en bank bruge blinde signaturer – som beskrevet af kryptograf David Chaum i hans afhandling fra 1982 Blind Signatures for Untraceable Payments.
I en sådan sammenhæng, hvis en bruger (lad os kalde ham Dan) ønsker at modtage 100 USD i digitale kontanter, er han forpligtet til at informere banken først. Forudsat at han har saldoen på sin konto, genererer han derefter et tilfældigt tal (eller mange for mindre pålydende værdier). Lad os antage, at han producerer fem tal, der hver skal tildeles en værdi på 20 USD. For at forhindre banken i at spore specifikke enheder tilslører Dan de tilfældige tal ved at føje en blændende faktor til hver enkelt af dem.
Han overdrager derefter disse data til banken, som debiterer hans konto for 100 USD, og underskriver meddelelser, der bekræfter, at hver af de fem oplysninger kan indløses for 20 USD. Dan kan nu bruge de midler, som banken har udstedt. Han går til Erins restaurant og køber et måltid, der koster ham 40 USD.
Dan kan fjerne blændingsfaktoren for at afsløre det tilfældige tal, der er knyttet til hver digital kontant "seddel", som fungerer som en unik identifikator for hver enhed (ligesom et serienummer). Han afslører to af disse for Erin, som nu straks skal indløse dem i banken for at forhindre Dan i at bruge dem hos en anden handlende. Banken vil kontrollere, at underskrifterne er gyldige, og hvis alt ser ud til at være korrekt, krediterer den Erins konto med 40 USD.
De anvendte sedler er nu i bund og grund brændt, og der skal udstedes flere, hvis Erin ønsker at bruge sin nye saldo på samme måde.
Chaumian eCash-opsætningen kan være værdifuld til private overførsler. Men den fejler i modstandsdygtighed, fordi banken er et centralt punkt for fiasko. En udstedt seddel er intet værd i sig selv, da dens værdi udelukkende stammer fra bankens vilje til at veksle den til USD. Kunderne er prisgivet banken og må stole på dens velvilje, for at pengene kan fungere. Dette er netop det problem, som kryptovaluta har til formål at afhjælpe.
Den decentraliserede tilgang
Det er mere udfordrende at sikre, at midler ikke kan dobbeltforbruges i et økosystem uden tilsyn. Lige magtfulde deltagere skal koordinere omkring et sæt regler, der forhindrer svig og tilskynder alle brugere til at handle ærligt.
Den største innovation, der blev præsenteret i Bitcoin-hvidbogen, var en løsning på problemet med dobbeltforbrug. Selvom der ikke henvises til den som sådan, foreslog Satoshi datastrukturen, der nu er almindeligt kendt som en blockchain.
En blockchain er egentlig bare en database med nogle unikke egenskaber. Deltagere på netværket (kaldet noder) kører specialiseret software, som gør det muligt for dem at synkronisere deres kopi af databasen med de andre deltagere. Resultatet er, at hele netværket kan revidere historikken over transaktioner, der går tilbage til genesis-blokken. Ved at have blockchainen offentligt synlig er det let at opdage og forhindre svigagtig aktivitet, såsom transaktioner, der forsøger at dobbeltforbruge.
Når en bruger sender en transaktion, føjes den ikke straks til blockchainen – den skal først inkluderes i en blok gennem mining. Som sådan bør modtageren kun betragte transaktionen som gyldig, efter at blokken er føjet til kæden. I modsat fald risikerer vedkommende at miste midlerne, da afsenderen kunne bruge de samme coins andre steder.
Når transaktionen er verificeret, kan coins ikke dobbeltforbruges, da ejerskabet tildeles en ny bruger – og hele netværket kan bekræfte dette. Det er af denne grund, at mange anbefaler, at man venter på flere bekræftelser, før man accepterer en betaling som gyldig. Hver efterfølgende blok øger drastisk den indsats, der kræves for at ændre eller omskrive kæden (hvilket kan forekomme under et 51 %-angreb).
Lad os vende tilbage til restaurantscenariet. Dan vender tilbage til restauranten, og denne gang bemærker han et skilt i vinduet, der siger, at bitcoin accepteres her. Han nød det måltid, han fik sidste gang, så han bestiller det igen. Det koster ham 0,005 BTC.
Erin præsenterer ham for en public address, som han skal sende midlerne til. Dan sender transaktionen, som i bund og grund er en underskrevet besked om, at de 0,005 BTC, der var i Dans besiddelse, nu er i Erins besiddelse. Uden at gå for meget i detaljer kan enhver, der præsenteres for Dans underskrevne transaktion, verificere, at han faktisk var i besiddelse af coinsene og derfor havde myndighed til at sende dem.
Som nævnt er transaktionen dog kun gyldig, hvis den er inkluderet i en blok, der bliver bekræftet. At acceptere ubekræftede transaktioner er meget som at acceptere de 40 USD i eCash fra det foregående eksempel uden straks at indløse dem med banken – det giver afsenderen mulighed for at bruge dem andre steder. Så det anbefales, at Erin venter på mindst 6 blokbekræftelser (ca. en time), før hun accepterer Dans betaling.
Dobbeltforbrug i Bitcoin
Bitcoin er omhyggeligt designet til at forhindre angreb med dobbeltforbrug – i det mindste, når protokollen bruges som det forventes. Det vil sige, hvis enkeltpersoner venter på, at transaktioner bliver bekræftet i en blok, så er der ingen nem måde for afsenderen at fortryde det. For at gøre det skulle de "vende" blockchainen, hvilket kræver en urealistisk mængde hashing-kraft.
Der er dog en håndfuld dobbeltforbrugsangreb, der er rettet mod parter, der accepterer ubekræftede transaktioner. For køb af lav værdi vil en handlende f.eks. muligvis ikke vente på, at transaktioner inkluderes i en blok. En travl fastfood-restaurant har sandsynligvis ikke råd til at vente på, at netværket behandler hvert køb. Så hvis en virksomhed muliggør "øjeblikkelige" betalinger, blotter de sig for dobbeltforbrug. Nogen kan bestille en burger, betale for den og derefter straks sende de samme midler til deres egen adresse. Med et højere gebyr vil denne nye transaktion sandsynligvis blive bekræftet først og vil derfor ugyldiggøre den forrige.
Der er tre populære metoder til at udføre et dobbeltforbrug:
51 %-angreb: Når en enkelt enhed eller organisation formår at kontrollere mere end 50 % af hashraten, hvilket giver dem mulighed for at ekskludere eller ændre rækkefølgen af transaktioner. Et sådant angreb er meget usandsynligt på Bitcoin, men er sket på andre netværk.
Race-angreb: To modstridende transaktioner udsendes efter hinanden ved hjælp af de samme midler – men kun én transaktion bliver bekræftet. Angriberens mål er at ugyldiggøre betalingen ved kun at validere den transaktion, der gavner vedkommende (f.eks. sende de samme midler til en adresse, som denne kontrollerer). Race-angreb kræver, at modtageren accepterer en ubekræftet transaktion som betaling.
Finney-angreb: En angriber præ-miner en transaktion i en blok uden at sende den til netværket med det samme. I stedet bruger vedkommende de samme coins i en anden transaktion og sender først derefter sin tidligere minede blok, hvilket kan ugyldiggøre betalingen. Finney-angreb kræver, at der opstår en bestemt række begivenheder, og er også betinget af modtagerens accept af ubekræftede transaktioner.
Som vi kan se, vil en handlende, der venter på blokbekræftelser, i høj grad reducere risikoen for at blive offer for dobbeltforbrug.
Sammenfatning
Et dobbeltforbrug giver en bruger mulighed for at narre et elektronisk kontantsystem til økonomisk gevinst ved at gøre brug af de samme midler mere end én gang. Traditionelt har mangel på passende løsninger på problemet stået i vejen for fremskridt på området.
Heldigvis foreslog brugen af blinde underskrifter imidlertid en interessant løsning for centraliserede finansielle ordninger. Senere blev bitcoin skabt som en kraftfuld form for decentraliserede penge med oprettelsen af Proof of Work-mekanismer og blockchain-teknologien – hvilket igen inspirerede tusindvis af andre kryptovaluta-projekter.