Cheltuielile duble explicate
Acasă
Articole
Cheltuielile duble explicate

Cheltuielile duble explicate

Intermediar
Publicat Feb 17, 2020Actualizat Jan 31, 2023
7m

Ce este cheltuirea dublă?

Cheltuirea dublă este o problemă potențială într-un sistem de numerar digital în care aceleași fonduri sunt trimise către 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 (copy-paste) 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ă ea poate trimite simultan aceleași 10 unități atât lui Bob, cât și lui Carol. Așadar, pentru ca banii digitali să funcționeze, trebuie să existe mecanisme care să prevină acest comportament.


Cum poate fi prevenită cheltuirea dublă?

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ă emisiunea și distribuirea unităților. Un bun exemplu de soluție centralizată la problema cheltuirii duble este cel al lui David Chaum eCash. 

Pentru a emite utilizatorilor un activ digital care imită numerarul (care permite un schimb anonim și peer-to-peer), o bancă poate utiliza semnăturile oarbe – conform celor detaliate de criptograful David Chaum în articolul său din 1982 Blind Signatures for Untraceable Payments (Semnături oarbe pentru plăți care nu pot fi urmărite).

Într-un astfel de context, dacă un utilizator (să-i spunem Dan) dorește să primească 100 USD în numerar digital, este obligat să informeze banca mai întâi. Dacă are soldul în cont, acesta va genera apoi un număr aleatoriu (sau mai multe, pentru valori mai mici). Să presupunem că produce cinci numere, fiecăruia fiindu-i atribuită o valoare de 20 USD. Pentru a împiedica banca să urmărească anumite unități, Dan disimulează numerele aleatorii adăugând un factor de orbire fiecăruia dintre ele.

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

Dan poate elimina factorul de orbire pentru a expune numărul aleatoriu asociat fiecărei „facturi” de numerar digital, care servește drept identificator unic pentru fiecare unitate (asemănător unui număr de serie). Acesta îi dezvăluie două dintre ele lui Erin, care acum trebuie să le valorifice imediat la bancă pentru a-l împiedica pe Dan să le cheltuiască la un alt comerciant. Banca va verifica dacă semnăturile sunt valide, iar dacă totul pare corect, va credita contul lui Erin cu 40 USD.

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

Configurația eCash propusă de Chaum poate fi valoroasă pentru transferurile private. Însă, eșuează în materie de reziliență, deoarece banca este un punct central al eșecului. O bancnotă emisă nu valorează nimic în sine, deoarece valoarea sa depinde exclusiv de dorința băncii de a o schimba în dolari. Clienții sunt la discreția 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ă

Asigurarea faptului că fondurile nu pot fi cheltuite dublu într-un ecosistem fără supraveghetor reprezintă o provocare. 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 cheltuiri. 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 anumite proprietăți unice. Participanții din rețea (denumiți noduri) rulează un software specializat, care le permite să-și sincronizeze copia bazei de date cu semenii lor. Rezultatul este că întreaga rețea poate audita istoricul tranzacțiilor care datează de la blocul genezei. Fiindcă blockchainul este vizibil public, este ușor să detectați și să preveniți activitățile frauduloase, cum ar fi tranzacțiile care încearcă cheltuirea dublă.

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 minerit. Astfel, destinatarul trebuie să considere tranzacția validă numai după ce blocul acesteia este adăugat în lanț. În caz contrar, riscă să piardă fondurile, deoarece expeditorul poate 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 validă. Fiecare bloc ulterior crește drastic volumul de efort necesar pentru a modifica sau rescrie lanțul (care poate apărea în timpul unui atac 51%).

Să reanalizăm situația restaurantului. Dan se întoarce la restaurant și de data aceasta observă pe fereastră un abțibild Bitcoin acceptat aici. I-a plăcut meniul pe care l-a comandat data trecută, așa că îl comandă din nou. Îl costă 0,005 BTC. 

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

După cum am menționat, însă, tranzacția este validă 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 îi încasa imediat la bancă – îi permite expeditorului să-i cheltuiască în altă parte. Așadar, este recomandat ca Erin să aștepte cel puțin 6 confirmări ale blocului (aproximativ o oră) înainte de a accepta plata lui Dan.


Cheltuirea dublă î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ă prin care expeditorul să le anuleze. Pentru a face acest lucru, ar trebui să „inverseze” blockchain-ul, ceea ce necesită un volum nerealist de putere de hashing.

Cu toate acestea, există câteva atacuri cu cheltuieli duble care vizează părțile care acceptă tranzacții neconfirmate. Pentru achiziții de 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 că nu își poate permite să aștepte în timp ce rețeaua procesează fiecare achiziție. Așadar, dacă o companie permite plăți „instantanee”, se face vulnerabilă în fața cheltuielilor duble. Cineva ar putea să comande un burger, să plătească pentru el, apoi să trimită imediat aceleași fonduri către propria adresă. Cu o taxă mai mare, este probabil ca această nouă tranzacție să fie confirmată mai întâi și, prin urmare, o va anula pe cea anterioară.

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

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

  • Atacurile de tip tranzacție dublă: două tranzacții conflictuale sunt difuzate succesiv, folosind aceleași fonduri – dar este confirmată o singură tranzacție. Scopul atacatorului este de a anula plata validând doar tranzacția care îl avantajează (de exemplu, trimiterea acelorași fonduri la o adresă pe care o controlează). Atacurile de tip tranzacție dublă 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, cheltuiește aceleași monede într-o altă tranzacție și abia apoi își difuzează blocul minat anterior, ceea ce poate anula plata. Atacurile Finney necesită desfășurarea unei anumite secvențe de evenimente ș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 ale blocului va reduce considerabil riscurile de a deveni victima cheltuielilor duble.


Gânduri de încheiere

O cheltuială dublă permite unui utilizator să manipuleze 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 pentru o problemă a stat în calea progresului în domeniu.

Din fericire, însă, utilizarea semnăturilor oarbe a propus o soluție interesantă pentru schemele financiare centralizate. Ulterior, 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 criptomonedă.