Ce este cheltuirea dublă?

Cheltuirea dublă este o problemă potențială într-un sistem de numerar digital în care aceleași fonduri sunt trimise la doi destinatari în același timp. Fără contramăsuri adecvate, un protocol care nu rezolvă problema este subminat în mod fundamental – utilizatorii nu au nicio modalitate de a verifica dacă fondurile pe care le-au primit nu au fost deja cheltuite în altă parte.

Când vine vorba de numerar digital, asigurarea faptului că anumite unități nu pot fi duplicate este de o importanță capitală. Întregul sistem ar fi subminat dacă Alice ar putea primi 10 unități, le-ar copia și lipi de 10 ori și s-ar găsi în posesia a 100 de unități. În mod similar, o astfel de schemă nu poate funcționa dacă poate trimite aceleași 10 unități atât lui Bob, cât și lui Carol simultan. Deci, pentru ca banii digitali să funcționeze, trebuie să existe mecanisme care să prevină acest comportament.


Cum poate fi prevenită dublarea cheltuielilor?

Abordarea centralizată

Traseul centralizat este considerabil mai ușor de implementat decât alternativele descentralizate. Aceasta implică de obicei un supraveghetor care gestionează sistemul și controlează emiterea și distribuirea unităților. Un bun exemplu de soluție centralizată la problema dublei cheltuieli este cel al eCash-ului lui David Chaum.

Pentru a emite utilizatorilor un activ digital care imită numerar (capabil de schimb anonim și peer-to-peer), o bancă poate folosi semnături oarbe – așa cum detaliază criptograful David Chaum în lucrarea sa din 1982 Blind Signatures for Untraceable Payments.

Într-un astfel de context, dacă un utilizator (să-i spunem Dan) dorește să primească 100 USD în numerar digital, el trebuie să informeze mai întâi banca. Cu condiția să aibă soldul în cont, va genera apoi un număr aleatoriu (sau mai multe, pentru valori mai mici). Să presupunem că produce cinci numere, fiecăruia cărora i se atribuie o valoare de 20 USD. Pentru a împiedica banca să urmărească anumite unități, Dan ofusca numerele aleatorii adăugând un factor orb la fiecare dintre ele.

Apoi predă aceste date băncii, care îi debitează contul pentru 100 de dolari și semnează mesaje care atestă că fiecare dintre cele cinci informații poate fi răscumpărată cu 20 de dolari. Dan poate cheltui acum fondurile emise de bancă. Merge la restaurantul lui Erin și cumpără o masă care îl costă 40 de dolari.

Dan poate elimina factorul orbitor pentru a expune numărul aleatoriu asociat cu fiecare „factură” digitală de numerar, care servește ca un identificator unic pentru fiecare unitate (la fel ca un număr de serie). El îi dezvăluie două dintre acestea lui Erin, care acum trebuie să le răscumpere imediat cu banca pentru a-l împiedica pe Dan să le cheltuiască cu un alt comerciant. Banca va verifica dacă semnăturile sunt valide și, dacă totul pare corect, va credita contul lui Erin cu 40 USD.

Facturile folosite sunt acum arse în esență și trebuie emise mai multe dacă Erin dorește să-și cheltuiască noul sold în același mod.

Configurația Chaumian eCash ar putea fi valoroasă pentru transferuri private. Dar, eșuează în reziliență, deoarece banca este un punct central de eșec. O bancnotă emisă nu valorează nimic în sine, deoarece valoarea sa este derivată exclusiv din dorința băncii de a o schimba în dolari. Clienții sunt la cheremul băncii și trebuie să se bazeze pe bunăvoința acesteia pentru ca banii să funcționeze. Tocmai aceasta este problema pe care criptomoneda își propune să o remedieze.


Abordarea descentralizată

Este mai dificil să vă asigurați că fondurile nu pot fi cheltuite dublu într-un ecosistem fără supraveghetor. Participanții la fel de puternici trebuie să se coordoneze în jurul unui set de reguli care să prevină frauda și să stimuleze toți utilizatorii să acționeze cinstit.

Cea mai mare inovație prezentată în cartea albă Bitcoin a fost o soluție la problema dublei cheltuieli. Deși nu este menționat ca atare, Satoshi a propus structura de date cunoscută acum pe scară largă ca blockchain.

Un blockchain este de fapt doar o bază de date cu unele proprietăți unice. Participanții din rețea (denumite noduri) rulează software specializat, care le permite să-și sincronizeze copia bazei de date cu colegii lor. Rezultatul este că întreaga rețea poate audita istoricul tranzacțiilor care datează de la blocul geneză. Având blockchain-ul vizibil public, este ușor să detectați și să preveniți activitățile frauduloase, cum ar fi tranzacțiile care încearcă să cheltuiască dublu.

Atunci când un utilizator difuzează o tranzacție, aceasta nu este adăugată imediat în blockchain – trebuie mai întâi inclusă într-un bloc prin mining. Ca atare, destinatarul ar trebui să considere tranzacția valabilă numai după ce blocarea acesteia este adăugată în lanț. În caz contrar, riscă să piardă fondurile, deoarece expeditorul ar putea cheltui aceleași monede în altă parte.

Odată ce tranzacția este confirmată, monedele nu pot fi cheltuite dublu, deoarece proprietatea este atribuită unui nou utilizator - iar întreaga rețea poate verifica acest lucru. Din acest motiv, mulți recomandă să așteptați mai multe confirmări înainte de a accepta o plată ca fiind valabilă. Fiecare bloc ulterior crește drastic cantitatea de efort necesară pentru a modifica sau rescrie lanțul (care poate apărea în timpul unui atac de 51%).

Să revedem scenariul restaurantului. Dan se întoarce la restaurant și de data aceasta observă un autocolant Bitcoin Accepted Here pe geam. I-a plăcut masa pe care a avut-o data trecută, așa că o comandă din nou. Îl costă 0,005 BTC.

Erin îi prezintă o adresă publică la care trebuie să trimită fondurile. Dan transmite tranzacția, care este în esență un mesaj semnat care afirmă că 0,005 BTC care se aflau în posesia lui Dan sunt acum în Erin. Fără a intra în prea multe detalii, oricine i-a fost prezentat tranzacția semnată de Dan poate verifica că acesta era într-adevăr în posesia monedelor și, prin urmare, avea autoritatea de a le trimite.

După cum am menționat, însă, tranzacția este valabilă numai dacă este inclusă într-un bloc care este confirmat. Acceptarea tranzacțiilor neconfirmate seamănă cu acceptarea celor 40 USD în eCash din exemplul anterior, fără a le încasa imediat la bancă – permite expeditorului să-i cheltuiască în altă parte. Așadar, este recomandat ca Erin să aștepte cel puțin 6 confirmări de bloc (aproximativ o oră) înainte de a accepta plata lui Dan.


Cheltuieli duble în Bitcoin

Bitcoin este proiectat cu atenție pentru a preveni atacurile cu cheltuieli duble, cel puțin atunci când protocolul este utilizat conform așteptărilor. Adică, dacă persoanele așteaptă ca tranzacțiile să fie confirmate într-un bloc, nu există o modalitate ușoară ca expeditorul să o anuleze. Pentru a face acest lucru, ar trebui să „inverseze” blockchain-ul, care necesită o cantitate nerealistă de putere de hashing.

Cu toate acestea, există o mână de atacuri cu cheltuieli duble care vizează părțile care acceptă tranzacții neconfirmate. Pentru achiziții cu valoare mică, de exemplu, un comerciant poate să nu dorească să aștepte ca tranzacțiile să fie incluse într-un bloc. Un restaurant fast-food aglomerat probabil nu își poate permite să stea pe așteptare în timp ce rețeaua procesează fiecare achiziție. Așadar, dacă o companie permite plăți „instantanee”, se deschid la cheltuieli duble. Cineva ar putea să comande un burger, să plătească pentru el, apoi să trimită imediat aceleași fonduri la adresa proprie. Cu o taxă mai mare, este probabil ca această nouă tranzacție să fie confirmată mai întâi și, prin urmare, o va invalida pe cea anterioară.

Există trei metode populare pentru a efectua o cheltuială dublă:

  • 51% atacuri: atunci când o singură entitate sau organizație reușește să controleze mai mult de 50% din rata de hash, ceea ce le permite să excludă sau să modifice ordonarea tranzacțiilor. Un astfel de atac este foarte puțin probabil pe Bitcoin, dar s-a întâmplat în alte rețele.

  • Atacurile rasiale: două tranzacții conflictuale sunt difuzate succesiv, folosind aceleași fonduri – dar o singură tranzacție este confirmată. Scopul atacatorului este de a invalida plata doar validând tranzacția care îl avantajează (de exemplu, trimiterea acelorași fonduri la o adresă pe care o controlează). Atacurile de cursă necesită ca destinatarul să accepte o tranzacție neconfirmată ca plată.

  • Atacuri Finney: un atacator pre-minează o tranzacție într-un bloc fără a o transmite imediat în rețea. În schimb, el cheltuiește aceleași monede într-o altă tranzacție și abia apoi își difuzează blocul minat anterior, ceea ce poate invalida plata. Atacurile Finney necesită o anumită secvență de evenimente pentru a avea loc și sunt, de asemenea, condiționate de acceptarea de către destinatar a tranzacțiilor neconfirmate.

După cum putem vedea, un comerciant care așteaptă confirmări de blocare va reduce considerabil riscurile de a deveni victima dublei cheltuieli.


Gânduri de închidere

O cheltuială dublă permite unui utilizator să joace un sistem electronic de numerar pentru câștiguri financiare, utilizând aceleași fonduri de mai multe ori. În mod tradițional, lipsa unor soluții adecvate la problemă a stat în calea progresului în zonă.

Din fericire, însă, utilizarea semnăturilor oarbe a propus o soluție interesantă pentru schemele financiare centralizate. Mai târziu, crearea mecanismelor Proof of Work și a tehnologiei blockchain a dat naștere Bitcoin ca o formă puternică de bani descentralizați – care, la rândul său, a inspirat mii de alte proiecte de criptomonede.