Bitcoin
2.1.1 GoofyCoin
În moneda GoofyCoin vom pune ı̂n evidenţă numai două reguli de bază:
1. O entitate desemnată – aici Goofy – poate crea monede noi ori de câte ori doreşte,
iar aceste monede create ı̂i aparţin.
Pentru a crea o monedă, Goofy:
1
2 CAPITOLUL 2. BITCOIN
• Generează o secvenţă care semnifică “Plăteşte asta lui Alice unde termenul
“asta” este un pointer hash care se referă la moneda HC (notat aici phHC ), iar
“Alice” este de fapt cheia publică a lui Alice.
Fie T C = P ay(phHC , P KAlice ) această secvenţă (pe care o vom numi “tranzacţie1 )”.
• Semnează secvenţa astfel creată: sigSKGoof y (T C).
De fapt, deoarece Goofy este cel care a creat moneda HC, el va trebui să
semneze orice tranzacţie ı̂n care este implicată această monedă.
Odată intrată ı̂n posesia monedei, Alice o poate cheltui la rândul ei. Pentru aceasta,
creează o secvenţă similară celei anterioare, de genul T C = P ay(phHC , P KBob ) pe care o
ı̂nsoţeşte cu semnătura proprie: sigSKAlice (T C).
Orice autoritate care va verifica moneda (T C, sigSKAlice (T C)) va constata că ea aparţine
lui Bob, iar moneda a fost emisă de Goofy.
Deci:
• Goofy poate genera monede semnând de fiecare dată o secvenţă care semnifică o
monedă nouă, caracterizată de un ID unic.
• Orice deţinător al unei monede o poate transmite mai departe semnând o secvenţă cu
semnificaţia “Dă această monedă lui X” (unde X este cheia publică a unei entităţi).
• Oricine poate verifica validitatea monedei urmărind lanţul de pointeri hash până la
data de origine (creată de Goofy) şi verificând toate semnăturile din acest lanţ.
În această construcţie există ı̂nsă o falie majoră de securitate, numită “double-spending”:
Alice, poate genera secvenţe diferite prin care declară că transmite moneda pe care o
deţine (unică) către două entităţi diferite. Ambele entităţi vor avea copii valide ale unei
singure monede generată de Goofy. Deci Alice a cheltuit aceeaşi monedă de două ori.
Atacul double-spending este una din problemele majore pe care trebuie să le rezolve
sistemele electronice de plată. Sistemul GoofyCoin nu ı̂l rezolvă, deci nu este un sistem
bun de plată (deşi elementele sale se regăsesc ı̂n toate sistemele electronice de plată,
inclusiv Bitcoin).
1
Deoarece şi crearea unei monede este o modalitate prin care Goofy se plăteşte pe el ı̂nsuşi cu această
monedă, o tranzacţie semnifică de fapt oricare din cele două operaţii (Creare, Transfer). Vom defini
riguros mai târziu acest concept.
2.1. EXEMPLE SIMPLE DE MONEDE ELECTRONICE 3
2.1.2 ScroogeCoin
Să ı̂ncercăm să rezolvăm problema double-spending cu un alt sistem de plată, ceva mai
complex (ca structură de date), numit ScroogeCoin ([3]).
Aici, entitatea Scrooge publică un istoric al tuturor tranzacţiilor care au avut loc cu o
monedă. Pentru aceasta, el construieşte un lanţ de blocuri, pe care ı̂l semnează. Lanţul
este o secvenţă de blocuri de date, fiecare conţinând cel puţin o tranzacţie semnată.
Fiecare bloc are ID-ul tranzacţiei, conţinutul tranzacţiei şi un pointer hash către blocul
precedent. Scrooge semnează ultimul pointer hash – care reprezintă de fapt ı̂ntreaga
structură – şi face publică semnătura ı̂mpreună cu tot lanţul de blocuri.
H( )
6 6 6
prev: H( ) prev: H( ) prev: H( )
trans ID: 71 trans ID: 72 trans ID: 73
? ? ? ?
trans trans trans
În ScroogeCoin o tranzacţie este validă numai dacă este ı̂n lanţul de blocuri semnat
de Scrooge. Oricine poate verifica că o tranzacţie a fost acceptată de Scrooge prin simpla
verificare a semnăturii acestuia pe blocul care o conţine. Pe de-altă parte, Scrooge nu va
accepta o dublă utilizare a unei monede deja cheltuite. Dacă el vrea să adauge sau să
elimine o tranzacţie din lanţul de blocuri, acest fapt va afecta toate blocurile următoare
din cauza pointerilor hash. Acest fapt va fi vizibil oricui va controla ultimul pointer hash
publicat de Scrooge.
În ScroogeCoin sunt definite două tipuri de tranzacţii:
Exemplul 2.1. Să considerăm o tranzacţie tip CreateCoins care generează trei
monede:
Fiecare monedă are un număr serial (ı̂n cadrul tranzacţiei), o valoare (multiplu de
unitatea ScroogeCoin) şi un recipient – o cheie publică care defineşte pe deţinătorul
monedei la momentul creerii ei.
Deci CreateCoins poate genera monede noi, cu valori diferite, pe care le asignează
ca deţinători iniţiali unor entităţi diferite.
Ne vom referi la o anumită monedă prin CoinID-ul ei: o combinaţie ı̂ntre ID-ul
tranzacţiei şi numărul serial al monedei ı̂n interiorul tranzacţiei.
O tranzacţie CreateCoins devine validă după ce este semnată de Scrooge.
2. P ayCoins, care “schimbă” anumite monede (le distruge şi crează monede noi cu
aceeaşi valoare totală).
Noile monede pot aparţine unor alte entităţi (identificate prin cheile lor publice).
Această tranzacţie trebuie semnată de cel care a plătit; adică – dacă deţii o monedă
şi o cheltui ı̂n tranzacţie – trebuie să semnezi tranzacţia, pentru a dovedi că eşti de
acord cu cheltuirea monedei.
Exemplul 2.2. Astfel, similar exemplului precedent, o tranzacţie tip P ayCoins poate
avea forma:
transID:73 tip: PayCoins
coinID-uri consumate
68(1), 42(0), 72(3)
nume valoare recipient
0 3.2 0x . . .
1 1.4 0x . . .
2 7.1 0x . . .
Semnături
Fiecare monedă are un număr serial (ı̂n cadrul tranzacţiei), o valoare (multiplu de uni-
tatea ScroogeCoin) şi un recipient – o cheie publică care defineşte deţinătorul monedei la
momentul creerii ei..
O tranzacţie P ayCoins este validă dacă sunt ı̂ndeplinite următoarele patru cerinţe:
• Monedele consumate sunt valide (au fost create ı̂n tranzacţii anterioare).
• Monedele consumate nu au fost deja cheltuite ı̂n tranzacţii anterioare (nu avem
double-spending).
• Valoarea totală a monedelor care ies dintr-o tranzacţie este egală cu valoarea totală
a monedelor care au intrat.
2.2. BITCOIN 5
Dacă sunt verificate toate aceste condiţii, atunci tranzacţia P ayCoins este validă şi
Scrooge o va accepta. El o adaugă ı̂n istoric la lanţul de blocuri, după care oricine
poate vedea că această tranzacţie a avut loc. Abia atunci participanţii acceptă validi-
tatea tranzacţiei.
În acest sistem monedele nu pot fi niciodată schimbate, combinate sau subdivizate.
Fiecare monedă este creată o singură dată printr-o tranzacţie CreateCoins, după care
poate fi consumată ı̂n diverse alte tranzacţii P ayCoins.
Totuşi operaţia de subdivizare a unei monede poate fi simulată ı̂n felul următor: Alice
generează o tranzacţie care consumă o monedă şi produce două monede noi cu aceeaşi
valoare totală, care pot fi asignate tot lui Alice.
ScroogeCoin este o monedă electronică cu multe avantaje: astfel, oricine poate verifica
validitatea monedei, şi este exclus double-spending-ul (orice utilizator poate cerceta lanţul
de blocuri şi analiza toate tranzacţiile efectuate, verificând validitatea lor şi văzând dacă
o monedă a fost cheltuită de două ori).
Problema ridicată aici este centralizarea. Scrooge are prea multă influenţă. Este
adevărat, nu poate genera tranzacţii false (nu poate contraface alte semnături), dar poate
refuza aprobarea tranzacţiilor anumitor entităţi, refuzând serviciul şi monedele acestora.
• Dacă Scrooge este lacom (numele său sugerează acest lucru) el poate condiţiona
publicarea tranzacţiilor de transferul unor anumite sume prin tranzacţii adresate
lui.
• Sau, Scrooge se plictiseşte de munca pe care trebuie să o facă şi nu mai updatează
lanţurile de blocuri.
Acesta este unul din motivele pentru care a fost creat Bitcoinul: o monedă ı̂n care factorul
de decizie ı̂n validarea tranzacţiilor este descentralizat.
2.2 Bitcoin
Există numeroase monede electronice apărute ı̂n ultimii ani, cu diverse motivaţii şi scopuri.
În august 2015 erau mai mult de 669 monede electronice de plată active pe pieţele online,
dar numai opt din ele acopereau un capital de minim 10 milioane $.
O parte din aceste monede sunt listate ı̂n tabelul următor ([12]);
6 CAPITOLUL 2. BITCOIN
rency”, unde anunţat site-ul oficial Bitcoin, ı̂mpreună cu principalele informaţii şi prima
versiune a sistemului, gata pentru descărcare ([13]).
Observaţia 2.1. Identitatea creatorului, sau creatorilor, de Bitcoin este necunoscută.
Satoshi Nakamoto este pseudonimul folosit de persoana sau grupul de persoane care a
proiectat şi construit reţeaua Bitcoin. Tot ce se ştie despre Satoshi Nakamoto se află ı̂n
profilul său de pe site-ul P2Pfoundation: bărbat de 38 de ani, japonez. Având ı̂n vedere
că proiectarea sistemului Bitcoin, cere un nivel avansat de cunoştinţe ı̂n criptografie şi
algoritmi matematici, precum şi faptul că autorul foloseşte o engleză perfectă, s-a gen-
erat o ı̂ntreagă literatură privind identitatea autorului. Unii l-au identificat cu Shinichi
Mochizuki, un matematician, profesor al Universităţii din Tokyo specializat ı̂n teoria nu-
merelor. Alţii au sugerat că ı̂n spatele ”Nakamoto” se află zone legate de reţelele mafiote.
În 2011, printr-un e-mail adresat unuia din dezvoltatorii Bitcoin, ”Satoshi Nakamoto”
s-a disociat de proiect şi a anunţat că se dedică altor probleme.
• Mineri: utilizatori speciali care-şi folosesc puterea de calcul pentru a verifica noile
tranzacţii, creând “blocuri de tranzacţionare”. Deoarece costurile ı̂n putere de calcul
sunt destul de mari, aceşti utilizatori sunt recompensaţi.
În ciuda poziţiei lor aparent centrală, influenţa dezvoltatorilor este limitată, ei neputând
impune singuri decizii pe sistem. De exemplu, dacă dezvoltatorii ar decide să crească
recompensa pentru crearea unui nou bloc de la 50 la 100 de bitcoini, iar majoritatea
utilizatorilor (sau, mai exact cei care asigură ı̂mpreună mai mult de jumătate din puterea
de calcul) se opune, dezvoltatorii nu pot pune ı̂n practică această idee. În cazul extrem,
oricine ı̂şi poate implementa propriul client, atât timp cât acest lucru este compatibil cu
protocolul.
Termenii principali folosiţi ı̂n descrierea unui sistem Bitcoin sunt:
• Adresă Bitcoin: Este adresa virtuală a unui utilizator, care conţine bitcoini. Simi-
lar unui cont bancar, ea este folosită pentru a efectua plăţi. Un utilizator poate
genera oricâte adrese consideră că ı̂i sunt necesare, ele fiind identificate de o cheie
publică.
2.3. MODUL DE FUNCŢIONARE AL SISTEMULUI BITCOIN 9
• Portofele: Un spaţiu virtual, echivalent cu un portofel fizic, ı̂n care sunt stocate şi
gestionate adresele şi plăţile unui utilizator Bitcoin.
• Tranzacţii: O tranzacţie este un transfer de bani de la adresa Bitcoin A la o altă
adresă B. Pentru a crea o tranzacţie, proprietarul adresei A va semna o copie a
adresei B (printre alte date) folosind cheia sa privată; astfel ı̂ntreaga reţea va şti că
noul proprietar legitim este cel de adresă B.
• Blocuri: O structură compusă din tranzacţii. Toate tranzacţiile ı̂n curs de confir-
mare sunt grupate ı̂ntr-un bloc printr-un proces cunoscut sub numele de “minerit”.
• Lanţ de blocuri: Structura publică de tranzacţii verificate de Bitcoin ı̂n ordine
cronologică. După confirmarea unui bloc (prin minerit), acesta este inclus ı̂n lanţ.
• Minerit: Procesul de realizare a calculelor matematice ı̂n reţeaua Bitcoin. Prin el
se crează noi monede bitcoin şi se confirmă tranzacţii.
Algoritmul general de funcţionare Bitcoin este:
4. Minerul creează un set de tranzacţii noi, inclusiv cea din pasul 1, şi lucrează
la confirmarea lui.
Observaţia 2.2.
• Utilizatorii normali şi minerii participă activ ı̂mpreună ı̂n cadrul sistemului.
• Sistemul este descentralizat; nu există nici o intervenţie din partea unei autorităţi.
• Dacă un miner refuză – sub un motiv oarecare – să proceseze o tranzacţie, procesul
va fi reluat de alt miner.
• Datorită faptului că puterea de calcul necesară verificării tranzacţiilor este mare, se
constituie grupuri (pools) de mineri care lucrează ı̂mpreună la verificarea aceluiaşi
bloc de tranzacţii; membrii grupului vor ı̂mpărţi apoi sumele cuvenite acestei operaţii.
10 CAPITOLUL 2. BITCOIN
• Semnăturile digitale.
Este folosit standardul ECDSA ([8]), cu parametrii recomandaţi de SEGC (Stan-
dards for Efficient Criptography Group). Semnăturile folosesc sistemul de codifi-
care DER (vezi http://en.wikipedia.org/wiki/Distinguished Encoding Rules) pentru
ı̂mpachetarea lor ı̂ntr-o singură secvenţă de biţi.
ECDSA oferă o serie de avantaje faţă de alte sisteme de semnătură, care ı̂l fac ideal
lpentru utilizarea sa ı̂n protocoale Internet distribuite. Anume, el asigură:
Exemplul 2.4. În august 2013 a fost detectată o vulnerabilitate ECDSA (vezi
http://bitcoin.org/en/alert/2013-08-11-android) când o iniţializare slabă a genera-
torului de numere pseudoaleatoare din dispozitivele Android a permis aflarea cheilor
secrete asociate adreselor Bitcoin.
• Proofs-of-work:
2.4. SISTEME ŞI PROTOCOALE FOLOSITE ÎN BITCOIN 11
Exemplul 2.5. În decembrie 2013, nodurile primare incluse ı̂n clientul “oficial” Satoshi
erau:
• seed.bitcoin.sipa.be
• dnsseed.bluematt.me
• dnsseed.bitcoin.dashjr.org
• bitseed.xf2.org
Înafara mecanismelor a căutare a altor noduri din reţea, Bitcoin foloseşte frecvent şi
alte tipuri de mesaje. De exemplu, mesajele tx şi block sunt utilizate pentru a trimite
respectiv tranzacţiona date şi blocuri; ideea este ca toate nodurile reţelei să fie capabile
3
Această idee a apărut prima oară ı̂n 1997 la metoda Hashcash ı̂mpotriva trimiterii de spam.
4
Nonce (Number once) este o valoarea generată aleator care nu va mai apare ulterior ı̂n alte generări.
12 CAPITOLUL 2. BITCOIN
să menţină sincronizarea cerută de protocol. La fel, mesajele de tipul inv sunt utilizate
pentru a anunţa/retransmite noi tranzacţii.
O listă completă a tipurilor de mesaje, ı̂mpreună cu definirea lor, poate fi consultată
ı̂n [16].
3. Rezultatul se codifică ı̂n base58, care păstrează zerourile din stânga (după codifi-
care).
Observaţia 2.3. Base58 este un sistem de codificare utilizat ı̂n Bitcoin pentru a reprezenta
numere ı̂ntregi mari sub forma unui text alfanumeric. Este similar cu base64 ([1]), modi-
ficările având ca scop evitarea caracterelor non-alfanumerice şi a literelor care ar prezenta
ambiguităţi la imprimare.
Faţă de base64 au fost omise: 0 (zero), O (literă mare), I (literă mare) şi l (literă
mică), precum şi caracterele non-alfanumerice + (plus) şi / (slash). În plus, codificarea
cifrelor nu se aliniază la mărimea octet (multiplu de 8) cu limitele octet al datelor orig-
inale. Din acest motiv, base58 este adecvată pentru codificarea numerelor ı̂ntregi mari,
deşi nu a fost proiectată să codifice porţiuni lungi de date binare.
Ordinea reală a literelor ı̂n alfabet depinde de aplicaţie; de aceea termenul “Base58”
nu este suficient pentru a descrie pe deplin formatul de date.
Deci fomal:
BitcoinAddress = Base58Encode(KeyHash + Checksum)
KeyHash = V ersion + RIP EM D − 160/SHA − 256(P ublicKey)
Checksum = SHA − 256(SHA − 256(KeyHash))[0 − 3]
V ersion = 1 octet setat pe zero.
Fiind dată o cheie publică ECDSA, toate operaţiile de adresă pot fi realizate efectiv.
Portofele sunt deci grupări de chei publice şi chei secrete. Nu se impune nici o limită
privind portofelele folosite, acestea fiind dedicate diverselor operaţii, cum ar fi de exemplu
realizarea de tranzacţii.
2.4. SISTEME ŞI PROTOCOALE FOLOSITE ÎN BITCOIN 13
2. Tranzacţii
Tranzacţiile Bitcoin sunt date semnate digital, care schimbă dreptul de proprietate asupra
fondurilor Bitcoin prin atribuirea unei alte adrese.
O tranzacţie este alcătuită din:
Tranzacţie
- In Out -
- In Out -
- In ..
.
..
.
Ieşirile sunt utilizate ca noi intrări pentru tranzacţiile ulterioare. În plus, toţi bitcoinii
nominalizaţi ı̂n adresele de ieşire sunt utilizaţi efectiv, adică suma de la ieşire nu poate fi
partajată ı̂n mai multe sume, chiar şi ı̂n situaţia când ea este mai mare decât suma care
trebuie plătită.
Detaliind, o tranzacţie Bitcoin este compusă din câmpurile:
Câmp Descriere
Nr. versiune În prezent versiunea 1
Contor In Numărul de intrări ı̂n tranzacţie
Listă intrări Lista intrări ı̂n tranzacţie
Contor Out Numărul de ieşiri din tranzacţie
Listă ieşiri Lista de ieşiri din tranzacţie
Lock time Nr. de bloc sau amprenta de timp până când o tranzacţie este blocată
Fiecare intrare ı̂n tranzacţie este semnată de plătitor, care deblochează fondurile
cuprinse ı̂n adresa asociată cu cheia privată folosită ı̂n semnătură.
În acest fel, numai proprietarul cheii private corespunzătoare celei din adresă poate
genera o semnătură validă. În subsidiar, acest lucru garantează că numai proprietarul
banilor ı̂i poate folosi. Procesul este descris de figura următoare.
14 CAPITOLUL 2. BITCOIN
? - ? -
Semnătura 0 - Semnătura 1 - Semnătura 2
6 6
Ieşirea constă din adresa beneficiarului şi, eventual, o adresă a plătitorului – dacă
acesta doreşte să primească un rest.
Într-o tranzacţie, suma intrărilor trebuie să fie cel puţin egală cu suma ieşirilor. În
cazul ı̂n care cantitatea de bitcoini de la intrare este mai mare, diferenţa este considerată
comision de tranzacţie, şi oricine include această tranzacţie ı̂n lanţul de blocuri o poate
folosi. Acest “bacşiş” acţionează ca un stimulent pentru mineri, o recompensă pentru
eforturile lor, sub formă de bitcoini. Sunt utilizatori care stabilesc ı̂n mod explicit o taxă
care să fie inclusă ı̂n plăţile lor (ı̂n mod normal clienţii Bitcoin utilizează valorile implicite).
Prin urmare, este uzual ca tranzacţiile cu taxe mai mari (de exemplu, recompense) vor fi
prelucrate mult mai rapid decât tranzacţiile cu taxe mici.
Mai sunt, de asemenea tranzacţii speciale, rezultate prin crearea de monede bitcoin
noi (prin minerit), pentru care nu există intrări.
Observaţia 2.4. Există o diferenţă ı̂ntre Bitcoin şi sistemele monetare fizice, relativ
la furt. Când cineva fură bani, proprietarul legitim nu-i mai poate utiliza, deoarece nu
mai sunt la el! În cazul Bitcoin, dacă cineva “fură” bitcoini prin ı̂nsuşirea cheii secrete
asociate, furtul nu va deveni efectiv decât după ce hoţul transferă acei bitcoini ı̂ntr-un
cont propriu (evident, cât timp victima păstrează cel puţin o copie a cheii secrete). În caz
contrar, proprietarul legitim – care ştie cheia sa secretă – poate transfera oricând banii
săi ı̂ntr-un cont nou, pentru care hoţul nu cunoaşte cheia secretă.
3. Blocuri
Un bloc este o ı̂nregistrare care conţine confirmările tranzacţiilor aflate ı̂n lucru. Componenţa
sa este dată de tabelul următor:
2.4. SISTEME ŞI PROTOCOALE FOLOSITE ÎN BITCOIN 15
Câmp Descriere
Număr Valoarea este totdeauna 0xd9b4bef 9
Blocksize Numărul de octeţi care urmează până la sfârşitul blocului
Blockheader Antet care conţine metadate despre bloc şi pointerii de ı̂nlăţuire
Contor tranzacţie Numărul de tranzacţii din listă
Tranzacţii Lista tranzacţiilor cuprinse ı̂n bloc
Lista tranzacţiilor conţine noile tranzacţii pe care minerul a decis să le includă ı̂n bloc.
Antetul Blockheader include:
Câmp Descriere
Versiune Versiunea blocului
HashPrevBlock Amprenta blocului precedent
HashMerkleRoot Amprenta rădăcinii arborelui Merkle
Timp Ştampila de timp a blocului creat
Bits Specificaţii privind complexitatea blocului
Nonce Proof-of-work
1. Pointerii hash din liniile doi şi trei au rolul de a stabili lanţul de blocuri (definit mai
jos).
2. Câmpul Bits defineşte nivelul de complexitate necesar ı̂n momentul generării blocu-
lui. Această complexitate variază ı̂n funcţie de capacitatea generală de calcul; de
aceea ea este generată pentru fiecare bloc, ı̂n medie, la fiecare 10 minute.
3. Valoarea nonce este numărul care validează proof-of-work. Mai exact, această
Bloc
PrevBlock Nonce
RootHash
i
*
Hash01 Hash23
3 } }
T ×0 T ×1 T ×2 T ×3
16 CAPITOLUL 2. BITCOIN
dovadă constă ı̂n calcularea amprentei (SHA − 256) celor şase valori care formează
antetul; valoarea rezultată trebuie să fie mai mică decât valoarea codificată ı̂n
câmpul Bits.
Pentru a optimiza spaţiul ocupat pe disc pentru a stocarea lanţului de blocuri, tranzacţiile
incluse ı̂n fiecare bloc sunt aranjate arborescent ca o structură Merkle:
Deci – folosind proprietăţile unei astfel de structuri – o mare parte a tranzacţiilor
incluse ı̂n arbore poate fi eliminată sau redusă, fără a compromite integritatea blocului.
4. Lanţ de blocuri
Lanţul de blocuri din reţeaua Bitcoin este o listă – creată ı̂n mod colectiv – a tuturor
tranzacţiilor confirmate şi verificate de către reţeaua de sine, formată din blocurile de
tranzacţionare ı̂ncorporate.
Ca structură de date, ı̂nlănţuirea de blocuri este stabilită prin câmpurile hash Pre-
vBlock şi RootHash.
Când un nod din reţea creează un bloc nou, ı̂l trimite la restul nodurilor. Acestea
verifică dacă blocul este valid şi – ı̂n caz afirmativ – ı̂l adaugă la lanţul lor şi-l diseminează.
Astfel, noul bloc este adăugat la sfârşit (evident, dacă nu a fost creată ı̂ntre timp o altă
ramură ı̂n lanţul de blocuri la care au participat un număr de utilizatori cu o capacitate
de calcul mai mare).
Urmărind lista de tranzacţii se poate obţine un istoric al posesiei tuturor monedelor
bitcoins din sistem. Datorită acestui fapt, un utilizator nu poate cheltui bani deja folosiţi,
deoarece reţeaua ar bloca tranzacţia. Pe site-ul https://blockchain.info/double-spends sunt
listate cazuri recente de double-spending detectate şi blocate.
Totuşi pot exista cazuri de reutilizare de bitcoini fără rea intenţie; de exemplu ı̂n cazul
când apar ı̂ntreruperi de comunicaţii ı̂n reţea, sau atunci când sunt create ramuri noi ı̂n
lanţ, fiecare conţinând aproximativ jumătate din puterea de calcul a sistemului. Din acest
motiv este recomandat ca beneficiarul plăţii Bitcoin să lase un interval de aşteptare pentru
a confirma o tranzacţie ı̂nainte de a lua ı̂n considerare plata efectivă primită.
Practic, majoritatea clienţilor obişnuiţi cu tranzacţii Bitcoin includ un timp de aşteptare
de şase blocuri; având ı̂n vedere că durata medie pentru generarea de blocuri noi este de
aproximativ 10 minute, timpul de confirmare al unei tranzacţii este estimat la o oră.
38. ”scriptPubKey”:”04 678a fdb0 fe55 4827 1967 f1a6 7130 b710 5cd6 a828 e039
39. 09a6 7962 e0ea 1f61 deb6 49f6 bc3f 4cef 38c4 f355 04e5 1ec1
40. 12de 5c38 4df7 ba0b 8d57 8a4c 702b 6bf1 1d5f OP CHECKSIG”
41. }
42. ]
43. }
44. ],
45. ”mrkl tree”:[
46. ”4a5e 1e4b aab8 9f3a 3251 8a88 c31b c87f 618f 7667 3e2c c77a b212 7b7a fded
47. a33b”
48. ]
49. }
Ca un fapt interesant, creatorul acestui bloc a introdus ı̂n unul din parametrii săi
(“coinbase”, liniile 30 − 32), ı̂n format hexazecimal
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
Textul face trimitere la coperta revistei Times şi este o dovadă că reţeaua Bitcoin a
ı̂nceput să funcţioneze ulterior datei de 3 ianuarie 2009.
(o amprentă obţinută prin aplicarea funcţiei de dispersie SHA − 256 asupra domeniilor
concatenate). Ea se află copiată ı̂n linia 2 a codului sursă
2 ”hash” : ”3acbc0f 5209ab34f a55f 91c497bf 9d66bd1cb5f 93991a6cab258f 696319a707f ”,
3 ”ver” : 1,
4 ”vin sz” : 3,
5 ”vout sz” : 2,
6 ”lock time” : 0,
7 ”size” : 523,
8 ”in” : [
9{
10 ”prev out” : {
11 ”hash” : ”7303c1f 3ea6d6a0d47acf 52caa62474de072a7be052f 8f 9c9e75c5f 7a5357189”,
12 ”n” : 1
13 },
14 ”scriptSig” : ”30450221009f 66e972ba44157debcc6767e785b5c6c8272e1d4a1d307a6bef 7f 318
2.5. PROTOCOALELE DE FUNCŢIONARE 19
(a) A doua ieşire (”n: 1”) a tranzacţiei ”7303 . . . 7189” (liniile 9-17).
(b) A doua ieşire (”n: 1”) a tranzacţiei ”3b59 . . . 44e5” (liniile 19-28).
(c) Prima ieşire (”n: 0”) a tranzacţiei ”5f 90 . . . 0f cc” (liniile 29-38).
4. Ca rezultate, plătitorul specifică faptul că adresa ”f 91b . . . be99” primeşte 20 bitcoini,
iar adresa ”3e5f . . . 7d17” – 0.4807 bitcoini.
5. Plătitorul difuzează tranzacţia ı̂n reţea. Ea va ajunge ı̂n final la un miner, care va
decide să o includă ı̂ntr-un bloc. În acest exemplu, tranzacţia a fost inclusă ı̂n blocul
278569 (data de 4 ianuarie, 2014).
19 ”in” : [. . . ],
20 ”out” : [. . . ]
21 . . .
22 ],
23 ”mrkl tree” : [
24 ”573d733ad6f 6b7203ebee4e266cee48df 8ac1dc876185cdd1a5b4b188a1cb242”,
25 . . .
26 ”ea7f 525d9e7ab577063abf 00142e183022396e4b54ce7a813769172a48337c8d”
27 ]
28 }
El este format din trei componente principale: antetul (liniile 3-9), tranzacţii (liniile
11-22), şi arborele Merkle (liniile 23-27).
Antetul blocului include următoarele domenii:
• ”ver”: versiunea bloc; ı̂n acest caz, 2.
• ”prev block”: o amprentă a blocului anterior, cu valoarea ”00000000000000010 . . . a1e5”.
• ”mrkl root”: rădăcina arborelui de hashuri Merkle curent, cu valoarea ”ea7f . . . 7c8d”.
• ”time”: momentul (format Unix) de creaţie al blocului ”1388837339”.
• ”bits”: complexitatea blocului curent, setată la ”419628831”.
• ”nonce”: un nonce pentru proof-of-work; aici ”1183905159”.
Urmează informaţiile referitoare la tranzacţiile incluse ı̂n bloc:
• ”n tx”: numărul de tranzacţii incluse ı̂n bloc; aici ”267”.
• ”size”: numărul de octeţi care urmează.
• ”tx” (liniile 11-12): lista de tranzacţii, similară cu cea din secţiunea anterioară
(omisă aici pentru claritate).
În final, liniile 23-27 din exemplu descriu conţinutul arborelui Merkle (cu mai multe linii
intermediare omise), care permite verificarea includerii corecte a blocului ı̂n lanţ.
Partea cea mai interesantă ı̂n minerit se află ı̂n câmpurile ”bits” , ”nonce” şi ”hash”.
Câmpul ”hash” este calculat folosind antetele câmpurilor; ı̂n acest caz, valorile ”2”,
”00000000000000010 . . . a1e5”, ”ea7f . . . 7c8d”, ”1388837339”, ”419628831” şi ”1183905159”,
care corespund respectiv câmpurilor ”ver”, ”prev block”, ”mrkl root”, ”time”, ”bits”, ”nonce”
(sursa: https : //en.bitcoin.it/wiki/Block hashinga lgorithm).
Câmpul ”bits” este folosit pentru a testa validitatea unei amprente. El este o versi-
une codificată a valorii maxime care o poate avea amprenta blocului. Această limită se
determină astfel:
22 CAPITOLUL 2. BITCOIN
1. Valoarea câmpului ”bits” este convertită ı̂n hexazecimal. În acest caz, 419628831
din baza 10 este transformat ı̂n 0x1903071F ı̂n baza 16.
2. Se aplică formula
0x03071F ∗2∗∗(8∗(0x19−3)) = 0x3071F 0000000000000000000000000000000000000000000
Orice amprentă (hash) cu o valoare mai mică decât acest număr (scris ı̂n hexazecimal) va
fi validă.
Aplicarea funcţiei SHA − 256 la valorile antetului de mai sus (folosind codificarea
adecvată) conduce la valoarea din parametrul ”hash”:
00000000000000010d3c12aba4e30310a7ab44062a9acef 2a2ef 796ceaa0a313.
Ea este mai mică decât valoarea limită, deci avem o amprentă validă.
De remarcat că toate câmpurile incluse ı̂n calculul amprentei – exceptând ”nonce” –
sunt fixate. Deci ”nonce” este cel care determină ı̂n final valabilitatea amprentei; din acest
motiv minerii trebuie să caute diverse valori până la găsirea unui hash valid. Evident, cu
cât valoarea limită este mai mică, cu atât este mai dificil de a găsi un nonce valid.
2.5.4 Recompense
Deoarece calculul necesar generării de blocuri necesită costuri mari, minerul sau minerii
care găsesc blocuri noi vor primi o răsplată (drept cost de ı̂ntreţinere).
Această recompensă poate veni ı̂n două moduri:
• Bitcoin a stabilit ı̂ncă de la generarea sa o limită maximă de 21 de milioane bitcoini.
Până se va ajunge la ea, generarea fiecărui nou bloc este recompensată cu o cantitate
prestabilită de bitcoini noi.
De exemplu, până ı̂n noiembrie 2012, fiecare bloc nou era recompensat cu 50 bitcoins.
După aceea, recompensa s-a redus la 25 bitcoini, şi se estimează că ı̂n 2016 va avea
loc o nouă ı̂njumătăţire.
• Pentru ca motivaţia minerilor să rămână aceeaşi, ı̂n ciuda micşorării recompensei
(care ı̂n final va ajunge la zero), au fost introduse “taxe de tranzacţie”, prin care
utilizatorii pot “dona” o parte din banii implicaţi ı̂ntr-o tranzacţie către minerul
care o verifică.
Exemplul 2.7. Există diverse analize asupra modului ı̂n care au oscilat taxele de tranzacţie.
Astfel, undeva ı̂n jurul blocului cu numărul 255000 a existat un bloc pentru care s-au
plătit aproximativ 200 bitcoini –un salt extraordinar dacă se are ı̂n vedere faptul că pentru
primele aproximativ 120.000 de blocuri comisioanele de tranzacţie au fost practic neglija-
bile.
La fel, valoarea medie a taxelor creşte considerabil. De exemplu, ı̂n jurul blocului
150.000 taxa de tranzacţie a fost ı̂n medie 0, 02 bitcoini (20/1000), pentru a urca la 0, 09
bitcoini per tranzacţie ı̂n jurul blocului 270.000.
2.5. PROTOCOALELE DE FUNCŢIONARE 23
Bloc n + 1
Miner A
Când sunt generate două ramuri, fiecare va fi iniţial susţinută de un anumit număr de
mineri, care vor continua extinderea ei. Ramura care rămâne va fi decisă ı̂n două moduri:
Miner B Miner C
Bloc n + 1 Bloc n + 2
Miner A
24 CAPITOLUL 2. BITCOIN
Exemplul 2.8. Diverse probleme de ordin tehnic care pot apare ı̂n managementul lanţului
de blocuri sunt capabile să afecteze serios nivelul de ı̂ncredere (deci şi valoarea de piaţă a
monedei bitcoin). Astfel, ı̂ntre 11 şi 12 martie 2013 s-a produs o actualizare inconsecventă
a bazei de date, software-ul principal Bitcoin ”minerind” două versiuni ale monedei. Acest
lucru a dus la apariţia a două lanţuri paralele de valută, şi o perioadă de timp o parte din
utilizatorii Bitcoin au urmat un lanţ, ı̂n timp ce restul a urmat cealaltă versiune. A fost
o zonă temporală de confuzie, care a dus la o cădere apreciabilă a valorii bitcoinului.
Deoarece a ı̂ncepe valorificarea unui bloc care ı̂n final nu va fi acceptat de alte blocuri
nu este o idee bună, este recomandabil să se aştepte un anumit număr de blocuri ı̂nainte de
a considera o tranzacţie ca fiind confirmată. Acest buffer poate varia ı̂n funcţie de numărul
blocurilor implicate ı̂n tranzacie, şi – evident – de situaţii neprevăzute. Experienţa a arătat
că, după şase blocuri noi va fi dificil de returnat o tranzacţie. Oricum, probabilitatea de
returnare a unei tranzacţii scade exponenţial cu fiecare bloc nou care o urmează.
În [7] se arată că o posibilitate de afla identitatea cuiva care face o plată ı̂n bitcoini este
analiza traficului T CP/IP .
Conform protocolului Bitcoin, prima persoană care va face public un transfer va fi,
probabil, plătitorul. Deci aflarea primului utilizator care face public un transfer de bani
duce la identificarea plătitorului din tranzacţie, recte proprietarul adreselor de intrare
folosite.
Conform lui Dan Kaminsky ([17]), costurile pentru a stabili o conexiune către toate
nodurile active la un anumit moment sunt acceptabile. Dar aceste costuri variază ı̂n
funcţie de volumul reţelei Bitcoin, iar ı̂n prezent reţeaua a crescut considerabil: la 14
ianuarie 2014 erau aproximativ 127.741 noduri conectate (cf. getaddr Bitnodes service).
Oricum, deşi pare irealizabil (din punct de vedere al costurilor) să se stabilească o conexi-
une spre toate nodurile Bitcoin active, va fi ı̂ntotdeauna posibilă lansarea de atacuri strict
direcţionate, analiza segmentelor de reţea sau urmărite alte obiective specifice.
Un alt tip de analiză se poate realiza pe baza relaţiilor ce pot fi stabilite ı̂ntre adrese care
– la un anumit moment – apar ca intrări comune ı̂ntr-o tranzacţie. Faptul că o singură
entitate utilizează diverse adrese Bitcoin ca intrări ı̂n aceeaşi tranzacie garantează că ea
controlează cheile private asociate acestor adrese. Prin urmare, se poate presupune că
toate aceste adrese aparţin aceleiaşi persoane. Pe baza acestei observaţii s-au dezvoltat
diverse euristici pentru reducerea gradului de anonimitate al utilizatorilor Bitcoin ([8],[9]).
De exemplu ı̂n [8] se estimează că aproximativ 40% din utilizatorii Bitcoin ar putea fi
identificaţi cu ajutorul euristicii propuse.
3. Servicii combinate
1. Utilizatorul trebuie să aibă ı̂ncredere că serviciile nu ţin un jurnal de tranzacţii care
ar putea fi dezvăluit.
26 CAPITOLUL 2. BITCOIN
2. Stimulente
Prin convenţie, până la atingerea limitei de 21 milioane bitcoini, un miner care construieşte
un nou bloc este răsplătit cu o cantitate prestabilită de monede bitcoin. În acest fel, toate
nodurile au un stimulent pentru a sprijini reţeaua, iar modul de creare şi distribuire a
numerarului este clar definit, lucru necesar având ı̂n vedere că nu există nici o autoritate
centrală ı̂nsărcinată cu emiterea de bani noi.
Stimulentele pot fi furnizate, de asemenea, prin taxele percepute pentru verificarea
tranzacţiilor: utilizatorul care creează un bloc valid primeşte ca plată o parte din banii
implicaţi ı̂n fiecare tranzacţie verificată.
3. Criptografie
Utilizarea unui sistem criptografic puternic de semnătură cum ar fi ECDSA, şi algoritm
robust de dispersie ca SHA − 256 garantează integritatea sistemului. Dar, deoarece
capacitatea de calcul creşte permanent, iar progresele care se fac ı̂n zona atacurilor şi ı̂n
criptanaliză sunt remarcabile, trebuie avută ı̂n vedere actualizarea permanentă a acestor
algoritmi.
De aceea, sistemul este proiectat ı̂n aşa fel ı̂ncât să permită schimbarea sistemelor crip-
tografice actuale, folosind acelaşi management de conducere peer-to-peer al protocoalelor
şi tranzacţilor. Totul revine la a permite – ı̂n cadrul noilor tranzacţii – utilizarea de alte
sisteme criptografice de semnătură sau funcţii de dispersie5 .
5
Această filozofie de design care “ignoră” primitivele criptografice utilizate, considerate ca perfecte, şi
2.7. PUNCTE TARI ŞI PUNCTE SLABE ALE SISTEMULUI BITCOIN 27
4. Scalabilitate
Sistemul Bitcoin se bazează pe o comunicare peer-to-peer, deci dezvoltarea sa se realizează
prin aderarea de noi noduri la reţea.
Pe de-altă parte trebuie ţinut cont că funcţionarea Bitcoin se bazează pe sisteme
criptografice, ı̂n special pe semnături ECDSA (lăsând la o parte RIP EM D − 160 şi
funcţia de dispersie SHA−256, care sunt suficient de rapide pentru a nu afecta ı̂n vreun fel
scalabilitatea). Calculele necesare privind generarea şi verificarea semnăturilor ECDSA
indică faptul că un volum de aproximativ 8.000 verificări de semnătură digitală pe secundă
poate fi realizat cu un procesor desktop curent. Cele mai recente date de la Bitcoin Watch
(mai 2015) arată că au loc ı̂n jur de 2.500 tranzacţii pe oră – aproximativ 0, 7 pe secundă;
deci mai este destul loc până la atingerea limitelor teoretice de funcţionare.
La scalabilitate mai trebuie analizate şi necesităţile de stocare. Bitcoin păstrează o
listă a tuturor tranzacţiilor efectuate de la ı̂nceput ı̂n reţea; acest lucru sugerează că lanţul
de blocuri va creşte indefinit. Totuşi majoritatea tranzacţiilor pot fi eliminate din lanţ,
ceea ce permite o scădere notabilă a dimensiunilor acestuia.
În articolul inţial care descrie Bitcoin ([2]), se anticipa că antetul unui bloc poate
ajunge la 80 octeţi; luând ı̂n considerare că la fiecare 10 minute este creat un bloc nou,
lanţul de blocuri creşte cu aproximativ 4.2 MB pe an (80 octeţi ∗60 minute /10 minute
∗24 ore ∗365 zile).
5. Transparenţă
După cum se observă ı̂n multe referinţe, Bitcoin este – probabil – cel mai transparent
sistem electronic de plăţi care a existat vreodată. Oricine este capabil să consulte istoricul
complet al tranzacţiilor şi să afle provenienţa şi destinaţia fiecărei sume de bani. Acest
lucru permite, de exemplu “marcarea” banilor furaţi, sau bani care au fost utilizaţi ı̂n
activităţi ilegale, astfel ca orice plată potenţial suspectă poate fi respinsă ulterior.
Este o proprietate care ı̂nsă nu este considerată totdeauna ca pozitivă (vezi
http://osvdb.org/search?search[vuln title]=bitcoin).
2.7.2 Slăbiciuni
1. Vulnerabilităţi
Ca orice produs software accesibil ı̂n reţea, şi ı̂n implementările Bitcoin sunt descoperite
permanent vulnerabilităţi noi, potenţial exploatabile de către utilizatorii rău intenţionaţi
ı̂n diverse scopuri: de la furtul de bitcoini sau double-spending, până la sabotarea completă
a reţelei. O listă completă şi detaliată a vulnerabilităţilor poate fi găsită ı̂n Open Sourced
Vulnerability Database (http://osvdb.org/search?search[vuln title]=bitcoin.
3. Trafic necriptat
Comunicarea ı̂ntre peers este necriptată. Deşi acest lucru nu afectează prea tare sistemul
Bitcoin (orice utilizator se poate conecta la reţea şi accesa orice tranzacţie existentă ı̂n
lanţ), totuşi pe termen lung trebuie prevăzute şi ı̂n acest caz instituirea de protocoale
de securitate complementare. Actualmente, un utilizator rău intenţionat poate spiona
traficul altui utilizator şi poate identifica tranzacţiile efectuate de acesta prin simpla
comparare a tranzacţiilor de intrare şi de ieşire.
4. Consumul de energie
Valoarea unui bitcoin este indisolubil legată de consumul de energie. Un mining se reali-
zează prin calcule destul de laborioase, iar echipamentul pe care se procesează este conec-
tat la o sursă de energie, cu consumul de energie aferent.
Având ı̂n vedere dificultatea tot mai crescută introdusă de reţeaua Bitcoin pentru
minerit, precum şi costul energiei electrice, pe termen lung operaţia de minerit va ı̂nceta
să mai fie profitabilă. Din acest motiv, taxele de tranzacţie vor creşte pentru a menţine
sistemul, ceea ce va duce la o scădere a rentabilităţii, şi ı̂n final utilizatorii pot fi tentaţi
să renunţe la reţeaua Bitcoin pentru alte variante de plată cu costuri mai mici.
Exemplul 2.9. Una din controversele privind anonimitatea Bitcoin a fost ı̂n 2013 când,
pe 2 octombrie, site-ul Silk Road a fost ı̂nchis de FBI, deoarece tranzacţiile sale erau
utilizate ı̂n scopuri ilegale. Cum el accepta numai plăţi ı̂n bitcoini, FBI-ul a confiscat o
2.7. PUNCTE TARI ŞI PUNCTE SLABE ALE SISTEMULUI BITCOIN 29
parte din sumele tranzacţionate (aproximativ 144.336 bitcoini) pe care i-a transferat ı̂n
conturi controlate de agenţie, publicând şi identitatea utilizatorilor.
Ştiind că orice sumă de bitcoini, de la orice adresă este o informaţie disponibilă public,
nu numai că se poate deduce suma de bani deţinută de o persoană a cărei identitate a fost
compromisă, dar se poate afla sursa precum şi destinaţia bitcoinilor. Aceasta presupune
un atac la viaţa privată a oamenilor (şi posibil chiar la integritatea lor fizică), un pericol
real dacă Bitcoin ar fi adoptat pe scară largă de economie.
[4] D. Ron, A. Shamir – How Did Dread Pirate Roberts Acquire and Protect His Bitcoin
Wealth? (2013) http://eprint.iacr.org.
[11] D. Chaum – Untraceable Electronic Mail, Return Addresses, and Digital Pseudonyms,
Commun. ACM, vol. 24, no. 2, pp. 84-88 (1981).
[13] http://p2pfoundation.ning.com/forum/topics/bitcoin-open-source
[14] http://bitcoin.org/en/development
31
32 BIBLIOGRAFIE
[15] https://en.bitcoin.it/wiki/Clients.
[17] http://dankaminsky.com/2011/08/05/bo2k11/