Sunteți pe pagina 1din 32

Capitolul 2

Bitcoin
2.1

Exemple simple de monede electronice

Inainte de a trata detaliat modul de definire si utilizare a principalelor monede electronice


existente, vom ncepe cu doua exemple simple, pentru a vedea care sunt mecanismele de
securitate implicate. Cele doua monede de jucarie prezentate n [3] sunt GoofyCoin si
ScroogeCoin.

2.1.1

GoofyCoin

In moneda GoofyCoin vom pune n evidenta numai doua reguli de baza:


1. O entitate desemnata aici Goofy poate crea monede noi ori de cate ori doreste,
iar aceste monede create i apartin.
Pentru a crea o moneda, Goofy:
Va genera un ID de moneda unic (uniqueCoinID) care nu a mai fost niciodata
generat anterior.
Cu ajutorul lui construieste secventa = CreateCoin[uniqueCoinID].
Folosind cheia sa secreta de semnatura SKGoof y , generaza sigSKGoof y ().
Perechea (, sigSKGoof y ()) este o moneda.
Oricine poate verifica ca aceasta moneda contine semnatura valida a lui Goofy
pentru secventa , verificare care constituie proba de validitate a monedei.
2. Orice moneda detinuta de o entitate poate fi transferata altei entitati.
Sa presupunem ca Goofy vrea sa transmita lui Alice o moneda HC = (, sigSKGoof y ())
creata de el. Pentru aceasta:
1

CAPITOLUL 2. BITCOIN

Genereaza o secventa care semnifica Plateste asta lui Alice unde termenul
asta este un pointer hash care se refera la moneda HC (notat aici phHC ), iar
Alice este de fapt cheia publica a lui Alice.
Fie T C = P ay(phHC , P KAlice ) aceasta secventa (pe care o vom numi tranzactie1 ).
Semneaza secventa astfel creata: sigSKGoof y (T C).
De fapt, deoarece Goofy este cel care a creat moneda HC, el va trebui sa
semneze orice tranzactie n care este implicata aceasta moneda.
Odata cu existenta publica a cuplului (T C, sigSKGoof y (T C)) (care reprezinta tranzactia
lui Goofy semnata de el), Alice devine posesoarea monedei HC. Ea poate demonstra oricui ca detine moneda, deoarece aceasta are semnatura valida a lui Goofy,
care este emitatorul monedei.
Odata intrata n posesia monedei, Alice o poate cheltui la randul ei. Pentru aceasta,
creeaza o secventa similara celei anterioare, de genul T C = P ay(phHC , P KBob ) pe care o
nsoteste cu semnatura proprie: sigSKAlice (T C).
Orice autoritate care va verifica moneda (T C, sigSKAlice (T C)) va constata ca ea apartine
lui Bob, iar moneda a fost emisa de Goofy.
Deci:
Goofy poate genera monede semnand de fiecare data o secventa care semnifica o
moneda noua, caracterizata de un ID unic.
Orice detinator al unei monede o poate transmite mai departe semnand o secventa cu
semnificatia Da aceasta moneda lui X (unde X este cheia publica a unei entitati).
Oricine poate verifica validitatea monedei urmarind lantul de pointeri hash pana la
data de origine (creata de Goofy) si verificand toate semnaturile din acest lant.
In aceasta constructie exista nsa o falie majora de securitate, numita double-spending:
Alice, poate genera secvente diferite prin care declara ca transmite moneda pe care o
detine (unica) catre doua entitati diferite. Ambele entitati vor avea copii valide ale unei
singure monede generata de Goofy. Deci Alice a cheltuit aceeasi moneda de doua ori.
Atacul double-spending este una din problemele majore pe care trebuie sa le rezolve
sistemele electronice de plata. Sistemul GoofyCoin nu l rezolva, deci nu este un sistem
bun de plata (desi elementele sale se regasesc n toate sistemele electronice de plata,
inclusiv Bitcoin).
1

Deoarece si crearea unei monede este o modalitate prin care Goofy se plateste pe el nsusi cu aceast
a
moned
a, o tranzactie semnific
a de fapt oricare din cele doua operatii (Creare, Transfer). Vom defini
riguros mai t
arziu acest concept.

2.1. EXEMPLE SIMPLE DE MONEDE ELECTRONICE

2.1.2

ScroogeCoin

Sa ncercam sa rezolvam problema double-spending cu un alt sistem de plata, ceva mai


complex (ca structura de date), numit ScroogeCoin ([3]).
Aici, entitatea Scrooge publica un istoric al tuturor tranzactiilor care au avut loc cu o
moneda. Pentru aceasta, el construieste un lant de blocuri, pe care l semneaza. Lantul
este o secventa de blocuri de date, fiecare continand cel putin o tranzactie semnata.
Fiecare bloc are ID-ul tranzactiei, continutul tranzactiei si un pointer hash catre blocul
precedent. Scrooge semneaza ultimul pointer hash care reprezinta de fapt ntreaga
structura si face publica semnatura mpreuna cu tot lantul de blocuri.
H( )


prev: H( )

prev: H( )

trans ID: 71

trans ID: 72

prev: H( )
trans ID: 73

trans

trans

trans

In ScroogeCoin o tranzactie este valida numai daca este n lantul de blocuri semnat
de Scrooge. Oricine poate verifica ca o tranzactie a fost acceptata de Scrooge prin simpla
verificare a semnaturii acestuia pe blocul care o contine. Pe de-alta parte, Scrooge nu va
accepta o dubla utilizare a unei monede deja cheltuite. Daca el vrea sa adauge sau sa
elimine o tranzactie din lantul de blocuri, acest fapt va afecta toate blocurile urmatoare
din cauza pointerilor hash. Acest fapt va fi vizibil oricui va controla ultimul pointer hash
publicat de Scrooge.
In ScroogeCoin sunt definite doua tipuri de tranzactii:
1. CreateCoins, care genereaza o moneda noua. Ea este identica cu operatia similara
din GoofyCoin. Aici putem generaliza putin, adaugand un bit la secventa, pentru
a permite crearea mai multor monede cu o singura tranzactie.
Exemplul 2.1. Sa consideram o tranzactie tip CreateCoins care genereaza trei
monede:
transID
tip: CreateCoins
Monede create
nume
valoare recipient
0
3.2
0x . . .
1
1.4
0x . . .
2
7.1
0x . . .

CAPITOLUL 2. BITCOIN

Fiecare moneda are un numar serial (n cadrul tranzactiei), o valoare (multiplu de


unitatea ScroogeCoin) si un recipient o cheie publica care defineste pe detinatorul
monedei la momentul creerii ei.
Deci CreateCoins poate genera monede noi, cu valori diferite, pe care le asigneaza
ca detinatori initiali unor entitati diferite.
Ne vom referi la o anumita moneda prin CoinID-ul ei: o combinatie ntre ID-ul
tranzactiei si numarul serial al monedei n interiorul tranzactiei.
O tranzactie CreateCoins devine valida dupa ce este semnata de Scrooge.
2. P ayCoins, care schimba anumite monede (le distruge si creaza monede noi cu
aceeasi valoare totala).
Noile monede pot apartine unor alte entitati (identificate prin cheile lor publice).
Aceasta tranzactie trebuie semnata de cel care a platit; adica daca detii o moneda
si o cheltui n tranzactie trebuie sa semnezi tranzactia, pentru a dovedi ca esti de
acord cu cheltuirea monedei.
Exemplul 2.2. Astfel, similar exemplului precedent, o tranzactie 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 . . .
Semnaturi
Fiecare moneda are un numar serial (n cadrul tranzactiei), o valoare (multiplu de unitatea ScroogeCoin) si un recipient o cheie publica care defineste detinatorul monedei la
momentul creerii ei..
O tranzactie P ayCoins este valida daca sunt ndeplinite urmatoarele patru cerinte:
Monedele consumate sunt valide (au fost create n tranzactii anterioare).
Monedele consumate nu au fost deja cheltuite n tranzactii anterioare (nu avem
double-spending).
Valoarea totala a monedelor care ies dintr-o tranzactie este egala cu valoarea totala
a monedelor care au intrat.

2.2. BITCOIN

Tranzactia este semnata de detinatorii tuturor monedelor consumate.


Daca sunt verificate toate aceste conditii, atunci tranzactia P ayCoins este valida si
Scrooge o va accepta. El o adauga n istoric la lantul de blocuri, dupa care oricine
poate vedea ca aceasta tranzactie a avut loc. Abia atunci participantii accepta validitatea tranzactiei.
In acest sistem monedele nu pot fi niciodata schimbate, combinate sau subdivizate.
Fiecare moneda este creata o singura data printr-o tranzactie CreateCoins, dupa care
poate fi consumata n diverse alte tranzactii P ayCoins.
Totusi operatia de subdivizare a unei monede poate fi simulata n felul urmator: Alice
genereaza o tranzactie care consuma o moneda si produce doua monede noi cu aceeasi
valoare totala, care pot fi asignate tot lui Alice.
ScroogeCoin este o moneda electronica cu multe avantaje: astfel, oricine poate verifica
validitatea monedei, si este exclus double-spending-ul (orice utilizator poate cerceta lantul
de blocuri si analiza toate tranzactiile efectuate, verificand validitatea lor si vazand daca
o moneda a fost cheltuita de doua ori).
Problema ridicata aici este centralizarea. Scrooge are prea multa influenta. Este
adevarat, nu poate genera tranzactii false (nu poate contraface alte semnaturi), dar poate
refuza aprobarea tranzactiilor anumitor entitati, refuzand serviciul si monedele acestora.
Daca Scrooge este lacom (numele sau sugereaza acest lucru) el poate conditiona
publicarea tranzactiilor de transferul unor anumite sume prin tranzactii adresate
lui.
Scrooge poate genera oricate monede noi doreste.
Sau, Scrooge se plictiseste de munca pe care trebuie sa o faca si nu mai updateaza
lanturile de blocuri.
Acesta este unul din motivele pentru care a fost creat Bitcoinul: o moneda n care factorul
de decizie n validarea tranzactiilor este descentralizat.

2.2

Bitcoin

Exista numeroase monede electronice aparute n ultimii ani, cu diverse motivatii si scopuri.
In august 2015 erau mai mult de 669 monede electronice de plata active pe pietele online,
dar numai opt din ele acopereau un capital de minim 10 milioane $.
O parte din aceste monede sunt listate n tabelul urmator ([12]);

CAPITOLUL 2. BITCOIN
Nume
Auroracoin
Bitcoin
BlackCoin
Dash
Diogecoin
Ethereum
Litecoin
Mastercoin
MazaCoin
Monero
NameCoin
Nxt
Peercoin
Ripple
Titcoin

Simbol
AUR
BTC
BC,BLK
DASH
DOGE
ETH
LTC
MSC
MZC
XMR
NMC
NXT
PPC
XPR
TIT

An
2014
2009
2014
2014
2013
2015
2011
2013
2014
2014
2011
2013
2012
2013
2014

Alg.hash
Scrypt
SHA-256
Scrypt
X11
Scrypt
Dagger
Scrypt
SHA-256d
SHA256d
CryptoNight
SHA-256d
SHA-256d
SHA-256d
ECDSA
SHA-256d

Observatii
Alternativa la moneda islandeza
Prima moneda descentralizata
Securizata n retea prin minting
Confidentialitate prin sistemul Darksend
Bazat numai pe Internet
Bazat pe masini Turing
Prima moneda securizata cu Scrypt
E si protocol de comunicare bazat pe lantul Bitcoin
Software derivat din moneda electronica ZetaCoin
Bazata pe protocolul CryptoNote
Are si o varianta descentralizata DNS
Dispune si de o platforma pentru aplicatii financiare
Prima moneda care a folosit o stampila de timp POS
Bazata pe transfer peer-to-peer
Prima moneda nominalizata la un premiu din industrie

Bitcoin este o moneda electronica, nsotita de un protocol si un software. Functionarea


combinata a acestor elemente permite realizarea aproape instantaneu a tranzactiilor la
nivel mondial, deci cu costuri de procesare aproape nule.
Ea a fost creata astfel ca sa satisfaca toate cerintele unei monede electronice de plata,
sa elimine posibilitatea de double-spending si mai ales sa evite dependenta de o
autoritate monetara centrala (care ar controla emisia si controlul valutar). Tehnologia de
baza utilizata este peer-to-peer, care nu permite manipularea valorii monedei bitcoin sau
o eventuala inflatie prin supraproductie de moneda. Tranzactiile si crearea de bitcoini
sunt reglementate de retea, crearea de bani fiind asigurata ntr-o maniera controlata si
descentralizata prin procesul cunoscut sub numele de minerit.
Securitatea tranzactiilor este garantata prin utilizarea criptografiei. Bitcoinii pot fi
cheltuiti doar de proprietarul lor si pot fi utilizati ntr-o singura tranzactie.
Institutiile de supraveghere si control care opereaza n sistemele monetare traditionale
nu exista pentru moneda Bitcoin.

2.2.1

Origini si autor

Prima aparitie publica a ideii de Bitcoin2 a avut loc n 2008 pe lista de discutii https://www.
mail-archive.com/ cryptography@metzdowd.com/msg09959.html, cand un utilizator cu pseudonimul Satoshi Nakamoto a postat ca lucreaza la un nou sistem electronic de plata,
aratand principalele sale proprietati si facand trimitere la o lucrare ([2]) disponibila pe
site-ul http://www.bitcoin.org, unde a descris sistemul.
Pe 11 februarie 2009, un utilizator posteaza sub numele Satoshi Nakamoto un mesaj
pe site-ul P2Pfoundation la rubrica Bitcoin open source implementation of P2P cur2

Vom nota cu Bitcoin ntregul sistem de plata electronica, iar cu bitcoin moneda electronic
a
efectiv
a.

2.2. BITCOIN

rency, unde anuntat site-ul oficial Bitcoin, mpreuna cu principalele informatii si prima
versiune a sistemului, gata pentru descarcare ([13]).
Observatia 2.1. Identitatea creatorului, sau creatorilor, de Bitcoin este necunoscut
a.
Satoshi Nakamoto este pseudonimul folosit de persoana sau grupul de persoane care a
proiectat si construit reteaua Bitcoin. Tot ce se stie despre Satoshi Nakamoto se afla n
profilul sau de pe site-ul P2Pfoundation: barbat de 38 de ani, japonez. Avand n vedere
ca proiectarea sistemului Bitcoin, cere un nivel avansat de cunostinte n criptografie si
algoritmi matematici, precum si faptul ca autorul foloseste o engleza perfecta, s-a generat o ntreaga literatura privind identitatea autorului. Unii l-au identificat cu Shinichi
Mochizuki, un matematician, profesor al Universitatii din Tokyo specializat n teoria numerelor. Altii au sugerat ca n spatele Nakamoto se afla zone legate de retelele mafiote.
2011, printr-un e-mail adresat unuia din dezvoltatorii Bitcoin, Satoshi Nakamoto
In
s-a disociat de proiect si a anuntat ca se dedica altor probleme.

2.2.2

O nou
a paradigm
a

Noutatea sistemului Bitcoin consta n descentralizare; nu exista o autoritate centrala


nsarcinata cu crearea de unitati monetare noi sau cu verificarea tranzactiilor. Datorita
arhitecturii sale distribuite, utilizatorii sistemului sunt cei care implicit si democratic
iau aceste decizii la nivel mondial.
Exemplul 2.3. Modul de functionare al sistemului poate fi ilustrat prin doua exemple:
1. Drept recompensa pentru colaborarea n retea, utilizatorii primesc bitcoini. Nu este
posibil nsa ca ei sa triseze sistemul pentru a-si mari recompensele deoarece, prin
modul de proiectare al sistemului, utilizatorii nsisi au posibilitatea ca ulterior s
a
verifice aceste recompense; astfel, daca un anumit utilizator si-ar mari rasplata proprie, ceilalti nu ar permite.
2. Un utilizator A face o plata catre utilizatorul B folosind bitcoinul b. Pentru a evita

ca A sa plateasca cu acelasi bitcoin b si pe C, tranzactiile Bitcoin sunt publice. In


cazul n care restul retelei detecteaza a doua tranzactie, nu o va permite.
Evolutia sistemului este modelata de vointa majoritatii. Sistemul de decizie este nsa
ponderat dupa regula x% din puterea de calcul = x% din voturi. Astfel, atata timp
cat mai mult de 50% din puterea de calcul a retelei apartine utilizatorilor onesti, reteaua
va evolua n directia n care decid ei ([2], pag.3). Avem deci de-a face cu o democratie
ponderata, determinata direct de amploarea implicarii utilizatorilor n sistem.
Numarul de companii, banci si intreprinderi care accepta Bitcoin ca mijloc de plata
este n crestere. In prezent, Bitcoin poate fi folosit pentru a cumpara o gama larga
de servicii, cum ar fi servicii de telefonie, internet hosting, tipuri de carduri, consiliere
juridica, turism etc.

CAPITOLUL 2. BITCOIN

Cu toate acestea, adoptarea sistemului nu este scutita de ncercari de a exercita un


control din partea guvernelor si a organismelor de reglementare. De exemplu, la mijlocul anului 2013, statul California a scris Fundatiei Bitcoin, informand-o ca, daca nu
s-a nregistrat ca unitate financiar-bancara, nu va avea voie sa functioneze n acest stat;
similar, n decembrie 2013, Banca Nationala Chineza a interzis institutiilor financiare
operarea de tranzactii cu bitcoini.
Cu toate acestea: din februarie 2014 eBay permite tranzactii n Bitcoin (pentru moment doar n Marea Britanie), iar Google si-a confirmat ineresul pentru a opera n aceasta
moneda. Sunt doar doua exemple, dar numarul tarilor unde se permite operarea cu bitcoini este n continua crestere (Romania este inclusa din 2014 pe aceasta lista).

2.3

Modul de functionare al sistemului Bitcoin

Dintre participantii la sistemul Bitcoin se detaseaza trei grupuri importante (nu neaparat
disjuncte):
Utilizatori normali: utilizatorii sistemului Bitcoin, care folosesc ca moneda bitcoin
pentru a cumpara bunuri si servicii, producand tranzactii.
Mineri: utilizatori speciali care-si folosesc puterea de calcul pentru a verifica noile
tranzactii, creand blocuri de tranzactionare. Deoarece costurile n putere de calcul
sunt destul de mari, acesti utilizatori sunt recompensati.
Dezvoltatori: Echipa de clienti care ntretine si asigura dezvoltarea sistemului.
Principalul client oficial Bitcoin.org este sustinut de sase dezvoltatori ([14]). Totusi,
deoarece sistemul este un protocol free, oricine poate deveni un nou client Bitcoin;
n [15] este o lista cu clienti activi n dezvoltarea Bitcoin.
In ciuda pozitiei lor aparent centrala, influenta dezvoltatorilor este limitata, ei neputand
impune singuri decizii pe sistem. De exemplu, daca dezvoltatorii ar decide sa creasca
recompensa pentru crearea unui nou bloc de la 50 la 100 de bitcoini, iar majoritatea
utilizatorilor (sau, mai exact cei care asigura mpreuna mai mult de jumatate din puterea
de calcul) se opune, dezvoltatorii nu pot pune n practica aceasta idee. In cazul extrem,
oricine si poate implementa propriul client, atat timp cat acest lucru este compatibil cu
protocolul.
Termenii principali folositi n descrierea unui sistem Bitcoin sunt:
Adres
a Bitcoin: Este adresa virtuala a unui utilizator, care contine bitcoini. Similar unui cont bancar, ea este folosita pentru a efectua plati. Un utilizator poate
genera oricate adrese considera ca i sunt necesare, ele fiind identificate de o cheie
publica.

2.3. MODUL DE FUNCT


IONARE AL SISTEMULUI BITCOIN

Portofele: Un spatiu virtual, echivalent cu un portofel fizic, n care sunt stocate si


gestionate adresele si platile unui utilizator Bitcoin.
Tranzactii: O tranzactie este un transfer de bani de la adresa Bitcoin A la o alta
adresa B. Pentru a crea o tranzactie, proprietarul adresei A va semna o copie a
adresei B (printre alte date) folosind cheia sa privata; astfel ntreaga retea va sti ca
noul proprietar legitim este cel de adresa B.
Blocuri: O structura compusa din tranzactii. Toate tranzactiile n curs de confirmare sunt grupate ntr-un bloc printr-un proces cunoscut sub numele de minerit.
Lant de blocuri: Structura publica de tranzactii verificate de Bitcoin n ordine
cronologica. Dupa confirmarea unui bloc (prin minerit), acesta este inclus n lant.
Minerit: Procesul de realizare a calculelor matematice n reteaua Bitcoin. Prin el
se creaza noi monede bitcoin si se confirma tranzactii.
Algoritmul general de functionare Bitcoin este:
1. Bob face o plata n bitcoini catre Alice.
2. Alice si Bob trimit aceasta tranzactie la reteaua peer-to-peer Bitcoin.
3. Un miner primeste noua tranzactie si verifica validitatea ei.
4. Minerul creeaza un set de tranzactii noi, inclusiv cea din pasul 1, si lucreaza
la confirmarea lui.
5. Minerul trimite noul bloc de tranzactii confirmate la reteaua peer-to-peer Bitcoin.
6. Restul utilizatorilor Bitcoin si actualizeaza statusul, incluzand noul bloc de
tranzactii, si i verifica validitatea.
Observatia 2.2.
Utilizatorii normali si minerii participa activ mpreuna n cadrul sistemului.
Sistemul este descentralizat; nu exista nici o interventie din partea unei autoritati.
Daca un miner refuza sub un motiv oarecare sa proceseze o tranzactie, procesul
va fi reluat de alt miner.
Datorita faptului ca puterea de calcul necesara verificarii tranzactiilor este mare, se
constituie grupuri (pools) de mineri care lucreaza mpreuna la verificarea aceluiasi
bloc de tranzactii; membrii grupului vor mparti apoi sumele cuvenite acestei operatii.

10

CAPITOLUL 2. BITCOIN

2.4

Sisteme si protocoale folosite n Bitcoin

Securitatea sistemului Bitcoin se bazeaza pe standarde criptografice de nivel maxim, care


sunt upgradate permanent.

2.4.1

Primitive criptografice

Primitivele criptografice de care face uz Bitcoin sunt:


Semn
aturile digitale.
Este folosit standardul ECDSA ([8]), cu parametrii recomandati de SEGC (Standards for Efficient Criptography Group). Semnaturile folosesc sistemul de codificare DER (vezi http://en.wikipedia.org/wiki/Distinguished Encoding Rules) pentru
mpachetarea lor ntr-o singura secventa de biti.
ECDSA ofera o serie de avantaje fata de alte sisteme de semnatura, care l fac ideal
lpentru utilizarea sa n protocoale Internet distribuite. Anume, el asigura:
Chei si semnaturi de lungime mica.
Algoritmi rapizi de generare si verificare.
Functii de dispersie criptografic
a (hash)
Este folosit standardul SHA 256, iar daca se cer amprente mici RIP EM D
160. In mod normal, calculele unei amprente sunt efectuate n doua etape: prima
cu SHA 256, iar a doua n functie de lungimea dorita cu SHA 256 sau
RIP EM D 160.
Numere pseudoaleatoare si nonce-uri:
In Bitcoin, numerele pseudoaleatoare si nonce-urile sunt utilizate direct n formarea
blocurilor. Dupa cum vom vedea, la generarea unui bloc nou, trebuie folosit un
numar generat aleator, care satisface anumite cerinte. Indirect, Bitcoin foloseste
numere pseudoaleatoare si n algoritmul de semnatura ECDSA (de mentionat ca
ECDSA solicita explicit ca numerele pseudoaleatoare folosite la semnaturi diferite
sa fie distincte).
august 2013 a fost detectata o vulnerabilitate ECDSA (vezi
Exemplul 2.4. In
http://bitcoin.org/en/alert/2013-08-11-android) cand o initializare slaba a generatorului de numere pseudoaleatoare din dispozitivele Android a permis aflarea cheilor
secrete asociate adreselor Bitcoin.
Proofs-of-work:

2.4. SISTEME SI PROTOCOALE FOLOSITE IN BITCOIN

11

Dovezile-de-munca (Proofs-of-work) constituie principalul instrument n garantarea


unui comportament legitim pe retea al sistemului Bitcoin. Deoarece verificarea/
calcularea noilor blocuri de tranzactionare presupune un cost mare de calcul, un
intrus care ar prelua controlul retelei (si, prin urmare a ceea ce este verificat sau nu)
ar avea nevoie de o putere extraordinara de calcul pentru a-si ndeplini obligatiile3 .
Concret, acest control de complexitate n calcularea noilor blocuri se realizeaza prin
solicitarea ca amprenta (hash-ul) fiecarui bloc nou sa nceapa cu un anumit numar
de zerouri. Asa cum vom vedea, n calculul acestei amprente sunt implicate datele
blocurilor mai vechi mpreuna cu un nonce4 . Cum functiile de dispersie criptografica
nu sunt inversabile, singura alternativa pentru intrus n generarea unui nou bloc
valid consta n obtinerea de nonce-uri pana se gaseste unul care ndeplineste cerinta.

2.4.2

Arhitectura sistemului

Functionarea nodurilor unei retele Bitcoin se bazeaza pe un sistem de comunicare peerto-peer. Dupa cum am mentionat deja, ideea principala este de a evita roluri de server,
care ar putea evolua spre centralizare.
Ca orice sistem peer-to-peer, Bitcoin cuprinde o serie de mecanisme pentru a descoperi
noduri noi n retea si de a mentine o lista a lor actualizata permanent. In plus, anumiti
clienti Bitcoin (exemplu: https://en.bitcoin.it/wiki/Satoshi Client Node Discovery) vin
cu propriile lor mecanisme suplimentare. Printre principalele optiuni se remarca mesajele
adr si getaddr; acestea permit unui client sa trimita/solicite altuia o lista de clienti
conectati la retea n momentul curent. In codul clientului este de asemenea inclusa bydefault o lista de noduri primare; acest lucru poate fi folosit pentru pornirea procesului
de racordare la retea atunci cand celelalte mecanisme se defecteaza.
decembrie 2013, nodurile primare incluse n clientul oficial Satoshi
Exemplul 2.5. In
erau:
seed.bitcoin.sipa.be
dnsseed.bluematt.me
dnsseed.bitcoin.dashjr.org
bitseed.xf2.org
Inafara mecanismelor a cautare a altor noduri din retea, Bitcoin foloseste frecvent si
alte tipuri de mesaje. De exemplu, mesajele tx si block sunt utilizate pentru a trimite
respectiv tranzactiona date si blocuri; ideea este ca toate nodurile retelei sa fie capabile
3
4

Aceast
a idee a ap
arut prima oar
a n 1997 la metoda Hashcash mpotriva trimiterii de spam.
Nonce (Number once) este o valoarea generata aleator care nu va mai apare ulterior n alte generari.

12

CAPITOLUL 2. BITCOIN

sa mentina sincronizarea ceruta de protocol. La fel, mesajele de tipul inv sunt utilizate
pentru a anunta/retransmite noi tranzactii.
O lista completa a tipurilor de mesaje, mpreuna cu definirea lor, poate fi consultata
n [16].

2.4.3

Structuri de date

Sa aratam acum modul n care primtivele criptografice mentionate anterior sunt folosite
n componentele de baza ale sistemului Bitcoin.
1. Adrese si portofele
O adresa Bitcoin se construieste astfel:
1. Se considera o pereche (pubK , secK ) de chei ECDSA care apartin utilizatorului.
2. Acestei perechi i se aplica o functie de dispersie criptografica, la care se adauga
prin concatenare suma de control (checksum).
3. Rezultatul se codifica n base58, care pastreaza zerourile din stanga (dupa codificare).
Observatia 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]), modificarile avand ca scop evitarea caracterelor non-alfanumerice si a literelor care ar prezenta
ambiguitati la imprimare.
Fata de base64 au fost omise: 0 (zero), O (litera mare), I (litera mare) si l (liter
a

mica), precum si caracterele non-alfanumerice + (plus) si / (slash). In plus, codificarea


cifrelor nu se aliniaza la marimea octet (multiplu de 8) cu limitele octet al datelor originale. Din acest motiv, base58 este adecvata pentru codificarea numerelor ntregi mari,
desi nu a fost proiectata sa codifice portiuni lungi de date binare.
Ordinea reala a literelor n alfabet depinde de aplicatie; 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 data o cheie publica ECDSA, toate operatiile de adresa pot fi realizate efectiv.
Portofele sunt deci grupari de chei publice si chei secrete. Nu se impune nici o limita
privind portofelele folosite, acestea fiind dedicate diverselor operatii, cum ar fi de exemplu
realizarea de tranzactii.

2.4. SISTEME SI PROTOCOALE FOLOSITE IN BITCOIN

13

2. Tranzactii
Tranzactiile Bitcoin sunt date semnate digital, care schimba dreptul de proprietate asupra
fondurilor Bitcoin prin atribuirea unei alte adrese.
O tranzactie este alcatuita din:
Intr
ari: Inregistrari care fac referire la tranzactii anterioare.
Iesiri: Inregistrari care determina noul proprietar al monedelor bitcoin transferate.
Tranzactie
-

In

Out

In

Out

In

..
.

..
.

Iesirile sunt utilizate ca noi intrari pentru tranzactiile ulterioare. In plus, toti bitcoinii
nominalizati n adresele de iesire sunt utilizati efectiv, adica suma de la iesire nu poate fi
partajata n mai multe sume, chiar si n situatia cand ea este mai mare decat suma care
trebuie platita.
Detaliind, o tranzactie Bitcoin este compusa din campurile:
C
amp

Descriere
Nr. versiune In prezent versiunea 1
Contor In
Numarul de intrari n tranzactie
Lista intrari Lista intrari n tranzactie
Contor Out Numarul de iesiri din tranzactie
Lista iesiri
Lista de iesiri din tranzactie
Lock time
Nr. de bloc sau amprenta de timp pana cand o tranzactie este blocata
Fiecare intrare n tranzactie este semnata de platitor, care deblocheaza fondurile
cuprinse n adresa asociata cu cheia privata folosita n semnatura.
In acest fel, numai proprietarul cheii private corespunzatoare celei din adresa poate
genera o semnatura valida. In subsidiar, acest lucru garanteaza ca numai proprietarul
banilor i poate folosi. Procesul este descris de figura urmatoare.

14

CAPITOLUL 2. BITCOIN

Tranzactie
Cheia publica 1

Tranzactie

Tranzactie

Cheia publica 2

Cheia publica 3
??

??

??

Hash

Hash

Semnatura 0

atura 1
- Semn

atura
- Semn

Cheia secreta 1

Hash

Cheia secreta 2

Cheia secreta 3

Iesirea consta din adresa beneficiarului si, eventual, o adresa a platitorului daca
acesta doreste sa primeasca un rest.
Intr-o tranzactie, suma intrarilor trebuie sa fie cel putin egala cu suma iesirilor. In
cazul n care cantitatea de bitcoini de la intrare este mai mare, diferenta este considerata
comision de tranzactie, si oricine include aceasta tranzactie n lantul de blocuri o poate
folosi. Acest bacsis actioneaza ca un stimulent pentru mineri, o recompensa pentru
eforturile lor, sub forma de bitcoini. Sunt utilizatori care stabilesc n mod explicit o taxa
care sa fie inclusa n platile lor (n mod normal clientii Bitcoin utilizeaza valorile implicite).
Prin urmare, este uzual ca tranzactiile cu taxe mai mari (de exemplu, recompense) vor fi
prelucrate mult mai rapid decat tranzactiile cu taxe mici.
Mai sunt, de asemenea tranzactii speciale, rezultate prin crearea de monede bitcoin
noi (prin minerit), pentru care nu exista intrari.
Observatia 2.4. Exista o diferenta ntre Bitcoin si sistemele monetare fizice, relativ
la furt. Cand cineva fura bani, proprietarul legitim nu-i mai poate utiliza, deoarece nu
cazul Bitcoin, daca cineva fura bitcoini prin nsusirea cheii secrete
mai sunt la el! In
asociate, furtul nu va deveni efectiv decat dupa ce hotul transfera acei bitcoini ntr-un
caz
cont propriu (evident, cat timp victima pastreaza cel putin o copie a cheii secrete). In
contrar, proprietarul legitim care stie cheia sa secreta poate transfera oricand banii
sai ntr-un cont nou, pentru care hotul nu cunoaste cheia secreta.
3. Blocuri
Un bloc este o nregistrare care contine confirmarile tranzactiilor aflate n lucru. Componenta
sa este data de tabelul urmator:

2.4. SISTEME SI PROTOCOALE FOLOSITE IN BITCOIN


C
amp
Numar
Blocksize
Blockheader
Contor tranzactie
Tranzactii

15

Descriere
Valoarea este totdeauna 0xd9b4bef 9
Numarul de octeti care urmeaza pana la sfarsitul blocului
Antet care contine metadate despre bloc si pointerii de nlatuire
Numarul de tranzactii din lista
Lista tranzactiilor cuprinse n bloc

Lista tranzactiilor contine noile tranzactii pe care minerul a decis sa le includa n bloc.
Antetul Blockheader include:
C
amp
Descriere
Versiune
Versiunea blocului
HashPrevBlock
Amprenta blocului precedent
HashMerkleRoot Amprenta radacinii arborelui Merkle
Timp
Stampila de timp a blocului creat
Bits
Specificatii privind complexitatea blocului
Nonce
Proof-of-work
1. Pointerii hash din liniile doi si trei au rolul de a stabili lantul de blocuri (definit mai
jos).
2. Campul Bits defineste nivelul de complexitate necesar n momentul generarii blocului. Aceasta complexitate variaza n functie de capacitatea generala de calcul; de
aceea ea este generata pentru fiecare bloc, n medie, la fiecare 10 minute.
3. Valoarea nonce este numarul care valideaza proof-of-work. Mai exact, aceasta
Bloc
Bloc Header (Bloc Hash)
Nonce

PrevBlock
RootHash


*



Hash01

Hash23

 }

Hash0

Hash1

Hash2

T 0

T 1

T 2

Hash3
6

T 3

16

CAPITOLUL 2. BITCOIN

dovada consta n calcularea amprentei (SHA 256) celor sase valori care formeaza
antetul; valoarea rezultata trebuie sa fie mai mica decat valoarea codificata n
campul Bits.
Pentru a optimiza spatiul ocupat pe disc pentru a stocarea lantului de blocuri, tranzactiile
incluse n fiecare bloc sunt aranjate arborescent ca o structura Merkle:
Deci folosind proprietatile unei astfel de structuri o mare parte a tranzactiilor
incluse n arbore poate fi eliminata sau redusa, fara a compromite integritatea blocului.
4. Lant de blocuri
Lantul de blocuri din reteaua Bitcoin este o lista creata n mod colectiv a tuturor
tranzactiilor confirmate si verificate de catre reteaua de sine, formata din blocurile de
tranzactionare ncorporate.
Ca structura de date, nlantuirea de blocuri este stabilita prin campurile hash PrevBlock si RootHash.
Cand un nod din retea creeaza un bloc nou, l trimite la restul nodurilor. Acestea
verifica daca blocul este valid si n caz afirmativ l adauga la lantul lor si-l disemineaza.
Astfel, noul bloc este adaugat la sfarsit (evident, daca nu a fost creata ntre timp o alta
ramura n lantul de blocuri la care au participat un numar de utilizatori cu o capacitate
de calcul mai mare).
Urmarind lista de tranzactii se poate obtine un istoric al posesiei tuturor monedelor
bitcoins din sistem. Datorita acestui fapt, un utilizator nu poate cheltui bani deja folositi,
deoarece reteaua ar bloca tranzactia. Pe site-ul https://blockchain.info/double-spends sunt
listate cazuri recente de double-spending detectate si blocate.
Totusi pot exista cazuri de reutilizare de bitcoini fara rea intentie; de exemplu n cazul
cand apar ntreruperi de comunicatii n retea, sau atunci cand sunt create ramuri noi n
lant, fiecare continand aproximativ jumatate din puterea de calcul a sistemului. Din acest
motiv este recomandat ca beneficiarul platii Bitcoin sa lase un interval de asteptare pentru
a confirma o tranzactie nainte de a lua n considerare plata efectiva primita.
Practic, majoritatea clientilor obisnuiti cu tranzactii Bitcoin includ un timp de asteptare
de sase blocuri; avand n vedere ca durata medie pentru generarea de blocuri noi este de
aproximativ 10 minute, timpul de confirmare al unei tranzactii este estimat la o ora.

2.5

Protocoalele de functionare

Sa detaliem modul de functionare al sistemului Bitcoin, descriere bazata pe conceptele


definite mai sus. Pentru claritate vom prezenta fiecare pas printr-un exemplu.

2.5. PROTOCOALELE DE FUNCT


IONARE

2.5.1

17

Blocul generator

Pentru a porni sistemul Bitcoin a fost creat un prim bloc, cunoscut sub numele de block
genesys, cu o recompensa de 50 bitcoini, prima plata numerar din retea.
1. }
2. hash:0000 0000 0019 d668 9c08 5ae1 6583 1e93 4ff7 63ae 46a2 a6c1 72b3 f1b6
3. 0a8c e26f,
4. ver:1,
5. prev block:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
6. 0000 0000 0000 0000,
7. mrkl root:4a5e 1e4b aab8 9f3a 3251 8a88 c31b c87f 618f 7667 3e2c c77a b212
8. 7b7a fded a33b,
9. time:1231006505,
10. bits:486604799,
11. nonce:2083236893,
12. n tx:1,
13. size:285,
14. tx:[
15. {
16. hash:4a5e 1e4b aab8 9f3a 3251 8a88 c31b c87f 618f 7667 3e2c c77a b212 7b7a
17. fded a33b,
18. ver:1,
19. vin sz:1,
20. vout sz:1,
21. lock time:0,
22. size:204,
23. in:[
24. {
25. prev out:
26. hash:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
27. 0000 0000 0000,
28. n:4294967295
29. },
30. coinbase:04 ffff 001d 0104 4554 6865 2054 696d 6573 2030 332f 4a61 6e2f
31. 3230 3039 2043 6861 6e63 656c 6c6f 7220 6f6e 2062 7269 6e6b 206f
32. 6620 7365 636f 6e64 2062 6169 6c6f 7574 2066 6f72 2062 616e 6b73
33. }
34. ],
35. out:[
36. {
37. value:50.00000000,

18

CAPITOLUL 2. BITCOIN

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 sai
(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 si este o dovada ca reteaua Bitcoin a
nceput sa functioneze ulterior datei de 3 ianuarie 2009.

2.5.2

Procesarea unei tranzactii

Asa cum am vazut, o tranzactie consta din mai multe campuri, inclusiv intrarile si iesirile.
Exemplul 2.6. Sa presupunem ca avem tranzactia:
3acbc0f 5209ab34f a55f 91c497bf 9d66bd1cb5f 93991a6cab258f 696319a707f
(o amprenta obtinuta prin aplicarea functiei de dispersie SHA 256 asupra domeniilor
concatenate). Ea se afla copiata n linia 2 a codului sursa
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 FUNCT


IONARE

19

15 a5648b5022011c3d3728df c842eeb8494759705972e22a371737254896df 13dc2a0


16 c6119ace0102608d4b6e1819212e9bc2921315ef 1dcdddb5f 262f 007f f 5f 92130f 3
17 2ef b4caba
18 },
19 {
20 prev out : {
21 hash : 3b5976b29f 32a7f 8ad920becd18da1511a14f 9318a3bcf 1705dc9cd6235d44e5,
22 n : 1
23 },
24 scriptSig : 304502200af 267ac7ca972b5da64f c547bb68bd160d06f f f ea2b53e1d357132d6d7
25 0f 5480221008f 4b2077909c88cc37bbbc3b4701c0f f b6154a01c632d20335034dca
26 30b8c79f 0102597c2f 2743aa205115b5f e3a3f ae3a51a638cc58ef ec47c0081f d03
27 5c82d1715
28 },
29 {
30 prev out : {
31 hash : 5f 90d3d02f c0ba4ee6f cbd8a4642d509a2b3f f cbebd4a4294cd3b75406bd0f cc,
32 n : 0
33 },
34 scriptSig : 30460221008ad5baee1e2a967af f 997826b3a93006e4eca08784a4d09ec40f 70278
35 f 0f a902022100b6e89c5815cf 61e980b56c760f ab9af af f 66bec968b9a9bb6ef 1f 9
36 aee50829320102608d4b6e1819212e9bc2921315ef 1dcdddb5f 262f 007f f 5f 92130
37 f 32ef b4caba
38 }
39 ],
40 out : [
41 {
42 value : 20.00000000,
43 scriptP ubKey : OP DU P OP HASH160f 91bd2092b0ed5dcc3f 989f e664d39f 40bc1be99
44 OP EQU ALV ERIF Y OP CHECKSIG
45 },
46 {
47 value : 0.40870000,
48 scriptP ubKey : OP DU P OP HASH1603e5f 4b5a6ca82a3e494ce0f c9422a3c68b9e7d17
49 OP EQU ALV ERIF Y OP CHECKSIG
50 }
51 ]
52 }
Fara a intra n analiza fiecarei linii de cod, sa punctam urmatoarele date importante:
1. Tranzactia are trei intrari si doua iesiri.

20

CAPITOLUL 2. BITCOIN

2. Adresele anterioare legate de aceasta tranzactie sunt:


(a) A doua iesire (n: 1) a tranzactiei 7303 . . . 7189 (liniile 9-17).
(b) A doua iesire (n: 1) a tranzactiei 3b59 . . . 44e5 (liniile 19-28).
(c) Prima iesire (n: 0) a tranzactiei 5f 90 . . . 0f cc (liniile 29-38).
3. Platitorul utilizeaza cheile secrete corespunzatoare cheilor publice 0260 . . . caba,
0259 . . . 1715 si 0260 . . . caba pentru a genera semnaturile digitale care arat
a
ca fondurile sunt transferate de la fiecare adresa de intrare la adresele de iesire.
Semnaturile produse sunt: 3045 . . . ce01, 3045 . . . 9f 01 si respectiv 3046 . . . 3201.
De retinut ca prima si a treia cheie publica coincid; asta nseamna ca platitorul utilizeaza aceeasi pereche de chei pentru ambele adrese.
4. Ca rezultate, platitorul specifica faptul ca adresa f 91b . . . be99 primeste 20 bitcoini,
iar adresa 3e5f . . . 7d17 0.4807 bitcoini.
5. Platitorul difuzeaza tranzactia n retea. Ea va ajunge n final la un miner, care va
acest exemplu, tranzactia a fost inclusa n blocul
decide sa o includa ntr-un bloc. In
278569 (data de 4 ianuarie, 2014).

2.5.3

Exploatarea unui bloc nou

Mineritul este un proces de creare de noi blocuri, o sarcina de calcul destul de costisitoare.
Vom exemplifica modul de constructie cu blocul urmator (numar 278569):
1{
2 hash : 00000000000000010d3c12aba4e30310a7ab44062a9acef 2a2ef 796ceaa0a313,
3 ver : 2,
4 prev block : 00000000000000010f 506a248cb023addb43b06874f 77e0e5f d78036af 0ea1e5,
5 mrkl root : ea7f 525d9e7ab577063abf 00142e183022396e4b54ce7a813769172a48337c8d,
6 time : 1388837339,
7 bits : 419628831,
8 nonce : 1183905159,
9 n tx : 267,
10 size : 146355,
11 tx : [
12 {
13 hash : 573d733ad6f 6b7203ebee4e266cee48df 8ac1dc876185cdd1a5b4b188a1cb242,
14 ver : 1,
15 vin sz : 1,
16 vout sz : 434,
17 lock time : 0,
18 size : 14879,

2.5. PROTOCOALELE DE FUNCT


IONARE

21

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), tranzactii (liniile
11-22), si arborele Merkle (liniile 23-27).
Antetul blocului include urmatoarele domenii:
ver: versiunea bloc; n acest caz, 2.
prev block: o amprenta a blocului anterior, cu valoarea 00000000000000010 . . . a1e5.
mrkl root: radacina arborelui de hashuri Merkle curent, cu valoarea ea7f . . . 7c8d.
time: momentul (format Unix) de creatie al blocului 1388837339.
bits: complexitatea blocului curent, setata la 419628831.
nonce: un nonce pentru proof-of-work; aici 1183905159.
Urmeaza informatiile referitoare la tranzactiile incluse n bloc:
n tx: numarul de tranzactii incluse n bloc; aici 267.
size: numarul de octeti care urmeaza.
tx (liniile 11-12): lista de tranzactii, similara cu cea din sectiunea anterioara
(omisa aici pentru claritate).
In final, liniile 23-27 din exemplu descriu continutul arborelui Merkle (cu mai multe linii
intermediare omise), care permite verificarea includerii corecte a blocului n lant.
Partea cea mai interesanta n minerit se afla n campurile bits , nonce si hash.
Campul hash este calculat folosind antetele campurilor; n acest caz, valorile 2,
00000000000000010 . . . a1e5, ea7f . . . 7c8d, 1388837339, 419628831 si 1183905159,
care corespund respectiv campurilor ver, prev block, mrkl root, time, bits, nonce
(sursa: https : //en.bitcoin.it/wiki/Block hashinga lgorithm).
Campul bits este folosit pentru a testa validitatea unei amprente. El este o versiune codificata a valorii maxime care o poate avea amprenta blocului. Aceasta limita se
determina astfel:

22

CAPITOLUL 2. BITCOIN

1. Valoarea campului bits este convertita n hexazecimal. In acest caz, 419628831


din baza 10 este transformat n 0x1903071F n baza 16.
2. Se aplica formula
0x03071F 2(8(0x193)) = 0x3071F 0000000000000000000000000000000000000000000
Orice amprenta (hash) cu o valoare mai mica decat acest numar (scris n hexazecimal) va
fi valida.
Aplicarea functiei SHA 256 la valorile antetului de mai sus (folosind codificarea
adecvata) conduce la valoarea din parametrul hash:
00000000000000010d3c12aba4e30310a7ab44062a9acef 2a2ef 796ceaa0a313.
Ea este mai mica decat valoarea limita, deci avem o amprenta valida.
De remarcat ca toate campurile incluse n calculul amprentei exceptand nonce
sunt fixate. Deci nonce este cel care determina n final valabilitatea amprentei; din acest
motiv minerii trebuie sa caute diverse valori pana la gasirea unui hash valid. Evident, cu
cat valoarea limita este mai mica, cu atat este mai dificil de a gasi un nonce valid.

2.5.4

Recompense

Deoarece calculul necesar generarii de blocuri necesita costuri mari, minerul sau minerii
care gasesc blocuri noi vor primi o rasplata (drept cost de ntretinere).
Aceasta recompensa poate veni n doua moduri:
Bitcoin a stabilit nca de la generarea sa o limita maxima de 21 de milioane bitcoini.
Pana se va ajunge la ea, generarea fiecarui nou bloc este recompensata cu o cantitate
prestabilita de bitcoini noi.
De exemplu, pana n noiembrie 2012, fiecare bloc nou era recompensat cu 50 bitcoins.
Dupa aceea, recompensa s-a redus la 25 bitcoini, si se estimeaza ca n 2016 va avea
loc o noua njumatatire.
Pentru ca motivatia minerilor sa ramana aceeasi, n ciuda micsorarii recompensei
(care n final va ajunge la zero), au fost introduse taxe de tranzactie, prin care
utilizatorii pot dona o parte din banii implicati ntr-o tranzactie catre minerul
care o verifica.
Exemplul 2.7. Exista diverse analize asupra modului n care au oscilat taxele de tranzactie.
Astfel, undeva n jurul blocului cu numarul 255000 a existat un bloc pentru care s-au
platit aproximativ 200 bitcoini un salt extraordinar daca se are n vedere faptul ca pentru
primele aproximativ 120.000 de blocuri comisioanele de tranzactie au fost practic neglijabile.
La fel, valoarea medie a taxelor creste considerabil. De exemplu, n jurul blocului
150.000 taxa de tranzactie a fost n medie 0, 02 bitcoini (20/1000), pentru a urca la 0, 09
bitcoini per tranzactie n jurul blocului 270.000.

2.5. PROTOCOALELE DE FUNCT


IONARE

23

Exista o restrictie suplimentara, care contribuie la protejarea mpotriva atacurilor


asupra Bitcoin sau pentru scenarii neprevazute: recompensele (inclusiv noile monede)
castigate de mineri prin minerit nu pot fi cheltuite pana nu sunt adaugate n lant 100
blocuri noi. Aceasta conditie este utila, de exemplu, pentru a evita cazul cand cei care
genereaza un bloc nou (creand astfel noi monede) inclusiv minerul care l creeaza
folosesc o parte din bitcoini, iar ulterior, blocul este respins pentru ca nu face parte din
lantul de blocuri largit. Termenul folosit pentru acest concept este timp de maturare de
100 de blocuri.

2.5.5

Confirmarea unei tranzactii

Chiar daca o noua tranzactie a fost inclusa ntr-un bloc si blocul n lantul de blocuri,
procesul poate fi anulat si reluat de la nceput.
Acest lucru poate apare daca sunt create, din diverse motive, doua ramuri valide. Un
astfel de incident s-a ntamplat n martie 2013. Sau, daca doi mineri verifica si valideaza
simultan blocuri noi scenariu prezentat n figura urmatoare:
Miner B
Bloc n + 1
. . . Bloc n 2 

Bloc n 1 

Bloc n

Bloc n + 1
Miner A
Cand sunt generate doua ramuri, fiecare va fi initial sustinuta de un anumit numar de
mineri, care vor continua extinderea ei. Ramura care ramane va fi decisa n doua moduri:
Puterea de calcul mai mare are prioritate, sau
Una din ramuri primeste un bloc naintea celeilalte, ca n figura
Miner B
Bloc n + 1 
. . . Bloc n 2 

Bloc n 1 

Bloc n

Bloc n + 1
Miner A

Miner C
Bloc n + 2

24

CAPITOLUL 2. BITCOIN

Exemplul 2.8. Diverse probleme de ordin tehnic care pot apare n managementul lantului
de blocuri sunt capabile sa afecteze serios nivelul de ncredere (deci si valoarea de piata a
monedei bitcoin). Astfel, ntre 11 si 12 martie 2013 s-a produs o actualizare inconsecvent
a
a bazei de date, software-ul principal Bitcoin minerind doua versiuni ale monedei. Acest
lucru a dus la aparitia a doua lanturi paralele de valuta, si o perioada de timp o parte din
utilizatorii Bitcoin au urmat un lant, n timp ce restul a urmat cealalta versiune. A fost
o zona temporala de confuzie, care a dus la o cadere apreciabila a valorii bitcoinului.
Deoarece a ncepe valorificarea unui bloc care n final nu va fi acceptat de alte blocuri
nu este o idee buna, este recomandabil sa se astepte un anumit numar de blocuri nainte de
a considera o tranzactie ca fiind confirmata. Acest buffer poate varia n functie de numarul
blocurilor implicate n tranzacie, si evident de situatii neprevazute. Experienta a aratat
ca, dupa sase blocuri noi va fi dificil de returnat o tranzactie. Oricum, probabilitatea de
returnare a unei tranzactii scade exponential cu fiecare bloc nou care o urmeaza.

2.6

Anonimitate si confidentialitate n Bitcoin

Sa analizam daca Bitcoin satisface principalele cerinte de securitate ale unui sistem: anonimitatea si confidentialitatea (dupa cum am vazut, conditia de protejare pentru doublespending este asigurata prin constructie).
In general, n toate constructiile Bitcoin (inclusiv materialul de definire al lui Nakamoto)
se afirma ca ea este o retea de plata care garanteaza anonimitatea si confidentialitatea
utilizatorilor.
In realitate, confom http://bitcoin.org/en/protect-your-privacy: Bitcoin este, probabil, reteaua de plata cea mai transparenta din lume. [. . . ] Deoarece utilizatorii si dezvaluie
de obicei identitatea pentru a beneficia de servicii sau bunuri, adresele Bitcoin nu pot
ramane pe deplin anonime.
Din modul de definire, oricine poate consulta istoricul tranzactiilor; desi exista posibilitatea de a taia noduri n arborele Merkle al tranzactiilor cu scopul de a economisi spatiul
de stocare, exista totdeauna noduri (accesibile publicului), numite noduri de arhiva,
care detin un istoric complet. Ele sunt pastrate pentru a oferi posibilitatea de a stabili
oricand n mod cert ca nu au existat nereguli.
Chiar daca nu exista nici o legatura interna ntre adresele Bitcoin si identitatile reale,
un utilizator care doreste sa faca o plata n bitcoini va trebui sa ofere la un moment dat
niste date de identificare celui care i ofera serviciul, pentru ca identitatea sa sa fie legata
de adresa folosita pentru a face plata.

2.6.1

Urm
arirea utilizatorilor Bitcoin

Sa trecem n revista principalele procedee de spargere a anonimitatii utilizatorilor Bitcoin.

2.6. ANONIMITATE SI CONFIDENT


IALITATE IN BITCOIN

25

1. Urm
arirea pe baza analizei de trafic
In [7] se arata ca o posibilitate de afla identitatea cuiva care face o plata n bitcoini este
analiza traficului T CP/IP .
Conform protocolului Bitcoin, prima persoana care va face public un transfer va fi,
probabil, platitorul. Deci aflarea primului utilizator care face public un transfer de bani
duce la identificarea platitorului din tranzactie, recte proprietarul adreselor de intrare
folosite.
Conform lui Dan Kaminsky ([17]), costurile pentru a stabili o conexiune catre toate
nodurile active la un anumit moment sunt acceptabile. Dar aceste costuri variaza n
functie de volumul retelei Bitcoin, iar n prezent reteaua a crescut considerabil: la 14
ianuarie 2014 erau aproximativ 127.741 noduri conectate (cf. getaddr Bitnodes service).
Oricum, desi pare irealizabil (din punct de vedere al costurilor) sa se stabileasca o conexiune spre toate nodurile Bitcoin active, va fi ntotdeauna posibila lansarea de atacuri strict
directionate, analiza segmentelor de retea sau urmarite alte obiective specifice.
2. Urm
arirea bazat
a pe euristic
a
Un alt tip de analiza se poate realiza pe baza relatiilor ce pot fi stabilite ntre adrese care
la un anumit moment apar ca intrari comune ntr-o tranzactie. Faptul ca o singura
entitate utilizeaza diverse adrese Bitcoin ca intrari n aceeasi tranzacie garanteaza ca ea
controleaza cheile private asociate acestor adrese. Prin urmare, se poate presupune ca
toate aceste adrese apartin aceleiasi persoane. Pe baza acestei observatii s-au dezvoltat
diverse euristici pentru reducerea gradului de anonimitate al utilizatorilor Bitcoin ([8],[9]).
De exemplu n [8] se estimeaza ca aproximativ 40% din utilizatorii Bitcoin ar putea fi
identificati cu ajutorul euristicii propuse.
3. Servicii combinate
O posibilitate de a mbunatati anonimatul utilizatorilor Bitcoin si deci si confidentialitatea se poate realiza prin combinarea de servicii ([10]), dupa tipul de servicii omonime
propuse n 1981 de David Chaum ([11]) pentru anonimizarea comunicatiilor. Aceste
servicii folosesc un set de adrese Bitcoin la care utilizatorii pot transfera bitcoini. Dupa
o anumita ntarziere pentru a preveni atacurile timing bitcoinii sunt transferati la o
alta adresa, care nu poate fi legata n nici un fel cu adresa proprie a utilizatorului.
Un punct critic al acestei metode este acela ca serviciile combinate necesita un grad
ridicat de ncredere din partea utilizatorilor (ceea ce este contrar filozofiei Bitcoin de a nu
apela la terti de ncredere). Sunt doua motive de retinere:
1. Utilizatorul trebuie sa aiba ncredere ca serviciile nu tin un jurnal de tranzactii care
ar putea fi dezvaluit.

26

CAPITOLUL 2. BITCOIN

2. Au existat cazuri de servicii neoneste, care nu au returnat monedele depuse (cum a


fost cazul serviciului BitMix, acum inactiv).

2.7

Puncte tari si puncte slabe ale sistemului Bitcoin

Incheiem aceasta prezentare a arhitecturii si modului de functionare a sistemului electronic


de plata Bitcoin cu o trecere n revista a principalelor avantaje si slabiciuni.

2.7.1

Puncte tari

1. Incredere distribuit
a
In modelele traditionale, ncrederea este dependenta de o autoritate sau o entitate care are
sub control toate informatiile relevante. In Bitcoin nu exista o astfel de autoritate; toata
informatia este gestionata de catre utilizatori constituiti ca o singura entitate. Astfel, ori
de cate ori mai mult de jumatate din utilizatorii sistemului sunt onesti, regulile stabilite
de sistem nu pot fi ncalcate de nici un utilizator necinstit.
2. Stimulente
Prin conventie, pana la atingerea limitei de 21 milioane bitcoini, un miner care construieste
un nou bloc este rasplatit cu o cantitate prestabilita de monede bitcoin. In acest fel, toate
nodurile au un stimulent pentru a sprijini reteaua, iar modul de creare si distribuire a
numerarului este clar definit, lucru necesar avand n vedere ca nu exista nici o autoritate
centrala nsarcinata cu emiterea de bani noi.
Stimulentele pot fi furnizate, de asemenea, prin taxele percepute pentru verificarea
tranzactiilor: utilizatorul care creeaza un bloc valid primeste ca plata o parte din banii
implicati n fiecare tranzactie verificata.
3. Criptografie
Utilizarea unui sistem criptografic puternic de semnatura cum ar fi ECDSA, si algoritm
robust de dispersie ca SHA 256 garanteaza integritatea sistemului. Dar, deoarece
capacitatea de calcul creste permanent, iar progresele care se fac n zona atacurilor si n
criptanaliza sunt remarcabile, trebuie avuta n vedere actualizarea permanenta a acestor
algoritmi.
De aceea, sistemul este proiectat n asa fel ncat sa permita schimbarea sistemelor criptografice actuale, folosind acelasi management de conducere peer-to-peer al protocoalelor
si tranzactilor. Totul revine la a permite n cadrul noilor tranzactii utilizarea de alte
sisteme criptografice de semnatura sau functii de dispersie5 .
5

Aceast
a filozofie de design care ignor
a primitivele criptografice utilizate, considerate ca perfecte, si

2.7. PUNCTE TARI SI PUNCTE SLABE ALE SISTEMULUI BITCOIN

27

4. Scalabilitate
Sistemul Bitcoin se bazeaza pe o comunicare peer-to-peer, deci dezvoltarea sa se realizeaza
prin aderarea de noi noduri la retea.
Pe de-alta parte trebuie tinut cont ca functionarea Bitcoin se bazeaza pe sisteme
criptografice, n special pe semnaturi ECDSA (lasand la o parte RIP EM D 160 si
functia de dispersie SHA256, care sunt suficient de rapide pentru a nu afecta n vreun fel
scalabilitatea). Calculele necesare privind generarea si verificarea semnaturilor ECDSA
indica faptul ca un volum de aproximativ 8.000 verificari de semnatura digitala pe secunda
poate fi realizat cu un procesor desktop curent. Cele mai recente date de la Bitcoin Watch
(mai 2015) arata ca au loc n jur de 2.500 tranzactii pe ora aproximativ 0, 7 pe secunda;
deci mai este destul loc pana la atingerea limitelor teoretice de functionare.
La scalabilitate mai trebuie analizate si necesitatile de stocare. Bitcoin pastreaza o
lista a tuturor tranzactiilor efectuate de la nceput n retea; acest lucru sugereaza ca lantul
de blocuri va creste indefinit. Totusi majoritatea tranzactiilor pot fi eliminate din lant,
ceea ce permite o scadere notabila a dimensiunilor acestuia.
In articolul intial care descrie Bitcoin ([2]), se anticipa ca antetul unui bloc poate
ajunge la 80 octeti; luand n considerare ca la fiecare 10 minute este creat un bloc nou,
lantul de blocuri creste cu aproximativ 4.2 MB pe an (80 octeti 60 minute /10 minute
24 ore 365 zile).
5. Transparent
a
Dupa cum se observa n multe referinte, Bitcoin este probabil cel mai transparent
sistem electronic de plati care a existat vreodata. Oricine este capabil sa consulte istoricul
complet al tranzactiilor si sa afle provenienta si destinatia fiecarei sume de bani. Acest
lucru permite, de exemplu marcarea banilor furati, sau bani care au fost utilizati n
activitati ilegale, astfel ca orice plata potential suspecta poate fi respinsa ulterior.
Este o proprietate care nsa nu este considerata totdeauna ca pozitiva (vezi
http://osvdb.org/search?search[vuln title]=bitcoin).

2.7.2

Sl
abiciuni

1. Vulnerabilit
ati
Ca orice produs software accesibil n retea, si n implementarile Bitcoin sunt descoperite
permanent vulnerabilitati noi, potential exploatabile de catre utilizatorii rau intentionati
n diverse scopuri: de la furtul de bitcoini sau double-spending, pana la sabotarea completa
a retelei. O lista completa si detaliata a vulnerabilitatilor poate fi gasita n Open Sourced
Vulnerability Database (http://osvdb.org/search?search[vuln title]=bitcoin.
se focalizeaz
a pe securitatea protocoalelor de comunicare, este cunoscuta ca sistem Dolev-Yao.

28

CAPITOLUL 2. BITCOIN

2. Furt din portofele


Formatul unui portofel electronic Bitcoin nu solicita nici o criptare, aceasta fiind o masura
de securitate optionala (lasata la latitudinea utilizatorului). In mod implicit, cele mai
multe portofele sunt stocate necriptat, ceea ce face posibila aparitia de programe malware
concepute special pentru jefuirea continutului portofelelor. La cerere, exista portofele care
includ posibilitatea de criptare.
In acest caz nsa trebuie acordata o atentie deosebita n faza de backup a portofelelor:
din cauza modului n care functioneaza sistemul, bitcoinii stocati ntr-o versiune recenta
a portofelului pot fi accesati cu o parola veche dintr-o copie back-up anterioara.
3. Trafic necriptat
Comunicarea ntre peers este necriptata. Desi acest lucru nu afecteaza prea tare sistemul
Bitcoin (orice utilizator se poate conecta la retea si accesa orice tranzactie existenta n
lant), totusi pe termen lung trebuie prevazute si n acest caz instituirea de protocoale
de securitate complementare. Actualmente, un utilizator rau intentionat poate spiona
traficul altui utilizator si poate identifica tranzactiile efectuate de acesta prin simpla
comparare a tranzactiilor de intrare si de iesire.
4. Consumul de energie
Valoarea unui bitcoin este indisolubil legata de consumul de energie. Un mining se realizeaza prin calcule destul de laborioase, iar echipamentul pe care se proceseaza este conectat la o sursa de energie, cu consumul de energie aferent.
Avand n vedere dificultatea tot mai crescuta introdusa de reteaua Bitcoin pentru
minerit, precum si costul energiei electrice, pe termen lung operatia de minerit va nceta
sa mai fie profitabila. Din acest motiv, taxele de tranzactie vor creste pentru a mentine
sistemul, ceea ce va duce la o scadere a rentabilitatii, si n final utilizatorii pot fi tentati
sa renunte la reteaua Bitcoin pentru alte variante de plata cu costuri mai mici.
5. Anonimitate si confidentialitate
Desi Bitcoin nu cere utilizatorului sa introduca date de identificare, nivelul de anonimat al
sistemului poate fi redus semnificativ prin mijloace independente, bazate pe constructia
si functionarea sa deci uneori dificil de prevenit. Cu toate ca Bitcoin poate atenua
aceasta problema prin managementul propriu de adrese, obtinerea n mod eficient a acestui
deziderat ar putea fi greu de realizat.
Exemplul 2.9. Una din controversele privind anonimitatea Bitcoin a fost n 2013 cand,
pe 2 octombrie, site-ul Silk Road a fost nchis de FBI, deoarece tranzactiile sale erau
utilizate n scopuri ilegale. Cum el accepta numai plati n bitcoini, FBI-ul a confiscat o

2.7. PUNCTE TARI SI PUNCTE SLABE ALE SISTEMULUI BITCOIN

29

parte din sumele tranzactionate (aproximativ 144.336 bitcoini) pe care i-a transferat n
conturi controlate de agentie, publicand si identitatea utilizatorilor.
Stiind ca orice suma de bitcoini, de la orice adresa este o informatie disponibila public,
nu numai ca se poate deduce suma de bani detinuta de o persoana a carei identitate a fost
compromisa, dar se poate afla sursa precum si destinatia bitcoinilor. Aceasta presupune
un atac la viata privata a oamenilor (si posibil chiar la integritatea lor fizica), un pericol
real daca Bitcoin ar fi adoptat pe scara larga de economie.
Cursul zilnic bitcoin in diverse tari:
https://coin.dance/charts

30

CAPITOLUL 2. BITCOIN

Bibliografie
[1] A.Atanasiu Securitatea informatiei, vol. 2, Protocoale de securitate, Ed. InfoData
2009
[2] S. Nakamoto Bitcoin: A Peer-to-Peer Electronic Cash System
[3] A. Narayanan, J. Bonneau, E. Felten, A. Miller, S. Goldfeder Bitcoin and Cryptocurrency Technologies, Draft, Jan 1, 2015
[4] D. Ron, A. Shamir How Did Dread Pirate Roberts Acquire and Protect His Bitcoin
Wealth? (2013) http://eprint.iacr.org.
[5] D. Chaum Security Without Identification: Transaction Systems to Make Big
Brother Obsolete, vol. 28, no. 10, 1985.
[6] Certicom Research SEC 2: Recommended Elliptic Curve Domain Parameters
(2010)
[7] F. Reid, M. Harrigan An Analysis of Anonymity in the Bitcoin System (2011)
[8] E. Androulaki, G. Karame, M. Roeschlin, T. Scherer, S. Capkun Evaluating User
Privacy in Bitcoin, vol. Financial Cryptography and Data Security (2013)
[9] S. Meiklejohn, M. Pomarole, G. Jordan, K. Levchenko, D. McCoy, G. M. Voelker,
S. Savage A Fistful of Bitcoins: Characterizing Payments Among Men with No
Names (2013)
[10] M. Mser Anonymity of Bitcoin Transactions, Mnster Bitcoin Conference (2013).
[11] D. Chaum Untraceable Electronic Mail, Return Addresses, and Digital Pseudonyms,
Commun. ACM, vol. 24, no. 2, pp. 84-88 (1981).
[12] https://en.wikipedia.org/wiki/List of cryptocurrencies
[13] http://p2pfoundation.ning.com/forum/topics/bitcoin-open-source
[14] http://bitcoin.org/en/development
31

32

[15] https://en.bitcoin.it/wiki/Clients.
[16] https://en.bitcoin.it/wiki/Protocol Specification#Message types
[17] http://dankaminsky.com/2011/08/05/bo2k11/

BIBLIOGRAFIE