Sunteți pe pagina 1din 32

Capitolul 2

Bitcoin

2.1 Exemple simple de monede electronice


Înainte de a trata detaliat modul de definire şi utilizare a principalelor monede electronice
existente, vom ı̂ncepe cu două exemple simple, pentru a vedea care sunt mecanismele de
securitate implicate. Cele două monede “de jucărie” prezentate ı̂n [3] sunt GoofyCoin şi
ScroogeCoin.

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:

• Va genera un ID de monedă unic (uniqueCoinID) care nu a mai fost niciodată


generat anterior.
• Cu ajutorul lui construieşte secvenţa α = CreateCoin[uniqueCoinID].
• Folosind cheia sa secretă de semnătură SKGoof y , generază sigSKGoof y (α).

Perechea (α, sigSKGoof y (α)) este o monedă.


Oricine poate verifica că această monedă conţine semnătura validă a lui Goofy
pentru secvenţa α, verificare care constituie proba de validitate a monedei.

2. Orice monedă deţinută de o entitate poate fi transferată altei entităţi.


Să presupunem că Goofy vrea să transmită lui Alice o monedă HC = (α, sigSKGoof y (α))
creată de el. Pentru aceasta:

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ă cu existenţa publică a cuplului (T C, sigSKGoof y (T C)) (care reprezintă tranzacţia


lui Goofy semnată de el), Alice devine posesoarea monedei HC. Ea poate demon-
stra oricui că deţine moneda, deoarece aceasta are semnătura validă a lui Goofy,
care este emiţătorul monedei.

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:

1. CreateCoins, care generează o monedă nouă. Ea este identică cu operaţia similară


din GoofyCoin. Aici putem generaliza puţin, adăugând un bit la secvenţă, pentru
a permite crearea mai multor monede cu o singură tranzacţie.

Exemplul 2.1. Să considerăm o tranzacţie tip CreateCoins care generează trei
monede:

transID tip: CreateCoins


Monede create
nume valoare recipient
0 3.2 0x . . .
1 1.4 0x . . .
2 7.1 0x . . .
4 CAPITOLUL 2. BITCOIN

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

• Tranzacţia este semnată de deţinătorii tuturor monedelor consumate.

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.

• Scrooge poate genera oricâte monede noi doreşte.

• 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

Nume Simbol An Alg.hash Observaţii


Auroracoin AUR 2014 Scrypt Alternativă la moneda islandeză
Bitcoin BTC 2009 SHA-256 Prima monedă descentralizată
BlackCoin BC,BLK 2014 Scrypt Securizată ı̂n reţea prin minting
Dash DASH 2014 X11 Confidenţialitate prin sistemul Darksend
Diogecoin DOGE 2013 Scrypt Bazat numai pe Internet
Ethereum ETH 2015 Dagger Bazat pe maşini Turing
Litecoin LTC 2011 Scrypt Prima monedă securizată cu Scrypt
Mastercoin MSC 2013 SHA-256d E şi protocol de comunicare bazat pe lanţul Bitcoin
MazaCoin MZC 2014 SHA256d Software derivat din moneda electronică ZetaCoin
Monero XMR 2014 CryptoNight Bazată pe protocolul CryptoNote
NameCoin NMC 2011 SHA-256d Are şi o variantă descentralizată DNS
Nxt NXT 2013 SHA-256d Dispune şi de o platformă pentru aplicaţii financiare
Peercoin PPC 2012 SHA-256d Prima monedă care a folosit o ştampilă de timp POS
Ripple XPR 2013 ECDSA Bazată pe transfer peer-to-peer
Titcoin TIT 2014 SHA-256d Prima monedă nominalizată la un premiu din industrie

Bitcoin este o monedă electronică, ı̂nsoţită de un protocol şi un software. Funcţionarea


combinată a acestor elemente permite realizarea aproape instantaneu a tranzacţiilor la
nivel mondial, deci cu costuri de procesare aproape nule.
Ea a fost creată astfel ca să satisfacă toate cerinţele unei monede electronice de plată,
să elimine posibilitatea de double-spending şi – mai ales – să evite dependenţa de o
autoritate monetară centrală (care ar controla emisia şi controlul valutar). Tehnologia de
bază utilizată este peer-to-peer, care nu permite manipularea valorii monedei bitcoin sau
o eventuală inflaţie prin supraproducţie de monedă. Tranzacţiile şi crearea de bitcoini
sunt reglementate de reţea, crearea de bani fiind asigurată ı̂ntr-o manieră controlată şi
descentralizată prin procesul cunoscut sub numele de “minerit”.
Securitatea tranzacţiilor este garantată prin utilizarea criptografiei. Bitcoinii pot fi
cheltuiţi doar de proprietarul lor şi pot fi utilizaţi ı̂ntr-o singură tranzacţie.
Instituţiile de supraveghere şi control care operează ı̂n sistemele monetare tradiţionale
nu există pentru moneda Bitcoin.

2.2.1 Origini şi autor


Prima apariţie publică a ideii de Bitcoin2 a avut loc ı̂n 2008 pe lista de discuţii https://www.
mail-archive.com/ cryptography@metzdowd.com/msg09959.html, când un utilizator cu pseu-
donimul Satoshi Nakamoto a postat că lucrează la un nou sistem electronic de plată,
arătând principalele sale proprietăţi şi făcând trimitere la o lucrare ([2]) disponibilă pe
site-ul http://www.bitcoin.org, unde a descris sistemul.
Pe 11 februarie 2009, un utilizator postează sub numele ”Satoshi Nakamoto” un mesaj
pe site-ul “P2Pfoundation” la rubrica “Bitcoin open source implementation of P2P cur-
2
Vom nota cu “Bitcoin” ı̂ntregul sistem de plată electronică, iar cu “bitcoin” moneda electronică
efectivă.
2.2. BITCOIN 7

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.

2.2.2 O nouă paradigmă


Noutatea sistemului Bitcoin constă ı̂n descentralizare; nu există o autoritate centrală
ı̂nsărcinată cu crearea de unităţi monetare noi sau cu verificarea tranzacţiilor. Datorită
arhitecturii sale distribuite, utilizatorii sistemului sunt cei care – implicit şi “democratic”
– iau aceste decizii la nivel mondial.
Exemplul 2.3. Modul de funcţionare al sistemului poate fi ilustrat prin două exemple:
1. Drept recompensă pentru colaborarea ı̂n reţea, utilizatorii primesc bitcoini. Nu este
posibil ı̂nsă ca ei să trişeze sistemul pentru a-şi mări recompensele deoarece, prin
modul de proiectare al sistemului, utilizatorii ı̂nşişi au posibilitatea ca ulterior să
verifice aceste recompense; astfel, dacă un anumit utilizator şi-ar mări răsplata pro-
prie, ceilalţi nu ar permite.

2. Un utilizator A face o plată către utilizatorul B folosind bitcoinul b. Pentru a evita


ca A să plătească cu acelaşi bitcoin b şi pe C, tranzacţiile Bitcoin sunt publice. În
cazul ı̂n care restul reţelei detectează a doua tranzacţie, nu o va permite.
Evoluţia sistemului este modelată de voinţa majorităţii. Sistemul de decizie este ı̂nsă
ponderat după regula “”x% din puterea de calcul = x% din voturi”. Astfel, atâta timp
cât mai mult de 50% din puterea de calcul a reţelei aparţine utilizatorilor oneşti, reţeaua
va evolua ı̂n direcţia ı̂n care decid ei ([2], pag.3). Avem deci de-a face cu o ”democraţie
ponderată”, determinată direct de amploarea implicării utilizatorilor ı̂n sistem.
Numărul de companii, bănci şi intreprinderi care acceptă Bitcoin ca mijloc de plată
este ı̂n creştere. În prezent, Bitcoin poate fi folosit pentru a cumpăra o gamă largă
de servicii, cum ar fi servicii de telefonie, internet hosting, tipuri de carduri, consiliere
juridică, turism etc.
8 CAPITOLUL 2. BITCOIN

Cu toate acestea, adoptarea sistemului nu este scutită de ı̂ncercări de a exercita un


control din partea guvernelor şi a organismelor de reglementare. De exemplu, la mij-
locul anului 2013, statul California a scris Fundaţiei Bitcoin, informând-o că, dacă nu
s-a ı̂nregistrat ca unitate financiar-bancară, nu va avea voie să funcţioneze ı̂n acest stat;
similar, ı̂n decembrie 2013, Banca Naţională Chineză a interzis instituţiilor financiare
operarea de tranzacţii cu bitcoini.
Cu toate acestea: din februarie 2014 eBay permite tranzacţii ı̂n Bitcoin (pentru mo-
ment doar ı̂n Marea Britanie), iar Google şi-a confirmat ineresul pentru a opera ı̂n această
monedă. Sunt doar două exemple, dar numărul ţărilor unde se permite operarea cu bit-
coini este ı̂n continuă creştere (România este inclusă din 2014 pe această listă).

2.3 Modul de funcţionare al sistemului Bitcoin


Dintre participanţii la sistemul Bitcoin se detaşează trei grupuri importante (nu neapărat
disjuncte):

• Utilizatori normali: utilizatorii sistemului Bitcoin, care folosesc ca monedă bitcoin


pentru a cumpăra bunuri şi servicii, producând “tranzacţii”.

• 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.

• Dezvoltatori: Echipa de clienţi care ı̂ntreţine şi asigură dezvoltarea sistemului.


Principalul client “oficial” Bitcoin.org este susţinut de şase dezvoltatori ([14]). Totuşi,
deoarece sistemul este un protocol free, oricine poate deveni un nou client Bitcoin;
ı̂n [15] este o listă cu clienţi activi ı̂n dezvoltarea Bitcoin.

Î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:

1. Bob face o plată ı̂n bitcoini către Alice.

2. Alice şi Bob trimit această tranzacţie la reţeaua peer-to-peer Bitcoin.

3. Un miner primeşte noua tranzacţie şi verifică validitatea ei.

4. Minerul creează un set de tranzacţii noi, inclusiv cea din pasul 1, şi lucrează
la confirmarea lui.

5. Minerul trimite noul bloc de tranzacţii confirmate la reţeaua peer-to-peer Bit-


coin.

6. Restul utilizatorilor Bitcoin ı̂şi actualizează statusul, incluzând noul bloc de


tranzacţii, şi ı̂i verifică validitatea.

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

2.4 Sisteme şi protocoale folosite ı̂n Bitcoin


Securitatea sistemului Bitcoin se bazează pe standarde criptografice de nivel maxim, care
sunt upgradate permanent.

2.4.1 Primitive criptografice


Primitivele criptografice de care face uz Bitcoin sunt:

• 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ă:

– Chei şi semnături de lungime mică.


– Algoritmi rapizi de generare şi verificare.

• Funcţii de dispersie criptografică (hash)


Este folosit standardul SHA − 256, iar dacă se cer amprente mici – RIP EM D −
160. În mod normal, calculele unei amprente sunt efectuate ı̂n două etape: prima
cu SHA − 256, iar a doua – ı̂n funcţie de lungimea dorită – cu SHA − 256 sau
RIP EM D − 160.

• Numere pseudoaleatoare şi nonce-uri:


În Bitcoin, numerele pseudoaleatoare şi nonce-urile sunt utilizate direct ı̂n formarea
blocurilor. După cum vom vedea, la generarea unui bloc nou, trebuie folosit un
număr generat aleator, care satisface anumite cerinţe. Indirect, Bitcoin foloseşte
numere pseudoaleatoare şi ı̂n algoritmul de semnătură ECDSA (de menţionat că
ECDSA solicită explicit ca numerele pseudoaleatoare folosite la semnături diferite
să fie distincte).

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

Dovezile-de-muncă (Proofs-of-work) constituie principalul instrument ı̂n garantarea


unui comportament legitim pe reţea al sistemului Bitcoin. Deoarece verificarea/
calcularea noilor blocuri de tranzacţionare presupune un cost mare de calcul, un
intrus care ar prelua controlul reţelei (şi, prin urmare a ceea ce este verificat sau nu)
ar avea nevoie de o putere extraordinară de calcul pentru a-şi ı̂ndeplini obligaţiile3 .
Concret, acest control de complexitate ı̂n calcularea noilor blocuri se realizează prin
solicitarea ca amprenta (hash-ul) fiecărui bloc nou să ı̂nceapă cu un anumit număr
de zerouri. Aşa cum vom vedea, ı̂n calculul acestei amprente sunt implicate datele
blocurilor mai vechi ı̂mpreună cu un nonce4 . Cum funcţiile de dispersie criptografică
nu sunt inversabile, singura alternativă pentru intrus ı̂n generarea unui nou bloc
valid constă ı̂n obţinerea de nonce-uri până se găseşte unul care ı̂ndeplineşte cerinţa.

2.4.2 Arhitectura sistemului


Funcţionarea nodurilor unei reţele Bitcoin se bazează pe un sistem de comunicare peer-
to-peer. După cum am menţionat deja, ideea principală 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 reţea şi de a menţine o listă a lor actualizată permanent. În plus, anumiţi
clienţi Bitcoin (exemplu: https://en.bitcoin.it/wiki/Satoshi Client Node Discovery) vin
cu propriile lor mecanisme suplimentare. Printre principalele opţiuni se remarcă mesajele
adr şi getaddr; acestea permit unui client să trimită/solicite altuia o listă de clienţi
conectaţi la reţea ı̂n momentul curent. În codul clientului este de asemenea inclusă by-
default o listă de noduri primare; acest lucru poate fi folosit pentru pornirea procesului
de racordare la reţea atunci când celelalte mecanisme se defectează.

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].

2.4.3 Structuri de date


Să arătăm acum modul ı̂n care primtivele criptografice menţionate anterior sunt folosite
ı̂n componentele de bază ale sistemului Bitcoin.

1. Adrese şi portofele


O adresă Bitcoin se construieşte astfel:
1. Se consideră o pereche (pubK , secK ) de chei ECDSA care aparţin utilizatorului.

2. Acestei perechi i se aplică o funcţie de dispersie criptografică, la care se adaugă –


prin concatenare – suma de control (checksum).

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:

• Intrări: Înregistrări care fac referire la tranzacţii anterioare.

• Ieşiri: Înregistrări care determină noul proprietar al monedelor bitcoin transferate.

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

Tranzacţie Tranzacţie Tranzacţie

Cheia publică 1 Cheia publică 2 Cheia publică 3


- - -
?? ? - ?? ? - ??
Hash Hash Hash

? - ? -
Semnătura 0 - Semnătura 1 - Semnătura 2
6 6

Cheia secretă 1 - Cheia secretă 2 - Cheia secretă 3

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

Bloc Header (Bloc Hash)

PrevBlock Nonce

RootHash
i

*
 
Hash01 Hash23
3 }  }

Hash0 Hash1 Hash2 Hash3


6 6 6 6

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ă.

2.5 Protocoalele de funcţionare


Să detaliem modul de funcţionare al sistemului Bitcoin, descriere bazată pe conceptele
definite mai sus. Pentru claritate vom prezenta fiecare pas printr-un exemplu.
2.5. PROTOCOALELE DE FUNCŢIONARE 17

2.5.1 Blocul generator


Pentru a porni sistemul Bitcoin a fost creat un prim bloc, cunoscut sub numele de block
genesys, cu o recompensă de 50 bitcoini, prima plată numerar din reţea.
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 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.

2.5.2 Procesarea unei tranzacţii


Aşa cum am văzut, o tranzacţie constă din mai multe câmpuri, inclusiv intrările şi ieşirile.
Exemplul 2.6. Să presupunem că avem tranzacţia:

3acbc0f 5209ab34f a55f 91c497bf 9d66bd1cb5f 93991a6cab258f 696319a707f

(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

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 }
Fără a intra ı̂n analiza fiecărei linii de cod, să punctăm următoarele date importante:

1. Tranzacţia are trei intrări şi două ieşiri.


20 CAPITOLUL 2. BITCOIN

2. Adresele anterioare legate de această tranzacţie sunt:

(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).

3. Plătitorul utilizează cheile secrete corespunzătoare cheilor publice ”0260 . . . caba”,


”0259 . . . 1715” şi ”0260 . . . caba” pentru a genera semnăturile digitale care arată
că fondurile sunt transferate de la fiecare adresă de intrare la adresele de ieşire.
Semnăturile produse sunt: ”3045 . . . ce01”, ”3045 . . . 9f 01” şi respectiv ”3046 . . . 3201”.
De reţinut că prima şi a treia cheie publică coincid; asta ı̂nseamnă că plătitorul uti-
lizează aceeaşi pereche de chei pentru ambele adrese.

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).

2.5.3 Exploatarea unui bloc nou


Mineritul este un proces de creare de noi blocuri, o sarcină de calcul destul de costisitoare.
Vom exemplifica modul de construcţie cu blocul următor (număr 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 FUNCŢ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), 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

Există o restricţie suplimentară, care contribuie la protejarea ı̂mpotriva atacurilor


asupra Bitcoin sau pentru scenarii neprevăzute: recompensele (inclusiv noile monede)
câştigate de mineri prin minerit nu pot fi cheltuite până nu sunt adăugate ı̂n lanţ 100
blocuri noi. Această condiţie este utilă, de exemplu, pentru a evita cazul când cei care
generează un bloc nou (creând astfel noi monede) – inclusiv minerul care ı̂l creează –
folosesc o parte din bitcoini, iar ulterior, blocul este respins pentru că nu face parte din
lanţul de blocuri lărgit. Termenul folosit pentru acest concept este “timp de maturare de
100 de blocuri”.

2.5.5 Confirmarea unei tranzacţii


Chiar dacă o nouă tranzacţie a fost inclusă ı̂ntr-un bloc şi blocul ı̂n lanţul de blocuri,
procesul poate fi anulat şi reluat de la ı̂nceput.
Acest lucru poate apare dacă sunt create, din diverse motive, două ramuri valide. Un
astfel de incident s-a ı̂ntâmplat ı̂n martie 2013. Sau, dacă doi mineri verifică şi validează
simultan blocuri noi – scenariu prezentat ı̂n figura următoare:
Miner B

Bloc n + 1

. . . Bloc n − 2  Bloc n − 1  Bloc n



}
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:

• Puterea de calcul mai mare are prioritate, sau

• Una din ramuri primeşte un bloc ı̂naintea celeilalte, ca ı̂n figură

Miner B Miner C

Bloc n + 1  Bloc n + 2

. . . Bloc n − 2  Bloc n − 1  Bloc n



}
Bloc n + 1

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ă.

2.6 Anonimitate şi confidenţialitate ı̂n Bitcoin


Să analizăm dacă Bitcoin satisface principalele cerinţe de securitate ale unui sistem: anoni-
mitatea şi confidenţialitatea (după cum am văzut, condiţia de protejare pentru double-
spending este asigurată prin construcţie).
În general, ı̂n toate construcţiile Bitcoin (inclusiv materialul de definire al lui Nakamoto)
se afirmă că ea este o reţea de plată care garantează anonimitatea şi confidenţialitatea
utilizatorilor.
În realitate, confom http://bitcoin.org/en/protect-your-privacy: “Bitcoin este, proba-
bil, reţeaua de plată cea mai transparentă din lume. [. . . ] Deoarece utilizatorii ı̂şi dezvăluie
de obicei identitatea pentru a beneficia de servicii sau bunuri, adresele Bitcoin nu pot
rămâne pe deplin anonime.”
Din modul de definire, oricine poate consulta istoricul tranzacţiilor; deşi există posibili-
tatea de a tăia noduri ı̂n arborele Merkle al tranzacţiilor cu scopul de a economisi spaţiul
de stocare, există totdeauna noduri (accesibile publicului), numite “noduri de arhivă”,
care deţin un istoric complet. Ele sunt păstrate pentru a oferi posibilitatea de a stabili
oricând ı̂n mod cert că nu au existat nereguli.
Chiar dacă nu există nici o legătură internă ı̂ntre adresele Bitcoin şi identităţile reale,
un utilizator care doreşte să facă o plată ı̂n bitcoini va trebui să ofere la un moment dat
nişte date de identificare celui care ı̂i oferă serviciul, pentru ca identitatea sa să fie legată
de adresa folosită pentru a face plata.

2.6.1 Urmărirea utilizatorilor Bitcoin


Să trecem ı̂n revistă principalele procedee de spargere a anonimităţii utilizatorilor Bitcoin.
2.6. ANONIMITATE ŞI CONFIDENŢIALITATE ÎN BITCOIN 25

1. Urmărirea pe baza analizei de trafic

Î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.

2. Urmărirea bazată pe euristică

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

O posibilitate de a ı̂mbunătăţi anonimatul utilizatorilor Bitcoin – şi deci şi confidenţialita-


tea – se poate realiza prin combinarea de servicii ([10]), după tipul de servicii omonime
propuse ı̂n 1981 de David Chaum ([11]) pentru anonimizarea comunicaţiilor. Aceste
servicii folosesc un set de adrese Bitcoin la care utilizatorii pot transfera bitcoini. După
o anumită ı̂ntârziere – pentru a preveni atacurile timing – bitcoinii sunt transferaţi la o
altă adresă, care nu poate fi legată ı̂n nici un fel cu adresa proprie a utilizatorului.
Un punct critic al acestei metode este acela că serviciile combinate necesită un grad
ridicat de ı̂ncredere din partea utilizatorilor (ceea ce este contrar filozofiei Bitcoin de a nu
apela la terţi de ı̂ncredere). Sunt două motive de reţinere:

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. Au existat cazuri de servicii neoneste, care nu au returnat monedele depuse (cum a


fost cazul serviciului BitMix, acum inactiv).

2.7 Puncte tari şi puncte slabe ale sistemului Bitcoin


Încheiem această prezentare a arhitecturii şi modului de funcţionare a sistemului electronic
de plată Bitcoin cu o trecere ı̂n revistă a principalelor avantaje şi slăbiciuni.

2.7.1 Puncte tari


1. Încredere distribuită
În modelele tradiţionale, ı̂ncrederea este dependentă de o autoritate sau o entitate care are
sub control toate informaţiile relevante. În Bitcoin nu există o astfel de autoritate; toată
informaţia este gestionată de către utilizatori constituiţi ca o singură entitate. Astfel, ori
de câte ori mai mult de jumătate din utilizatorii sistemului sunt oneşti, “regulile” stabilite
de sistem nu pot fi ı̂ncălcate de nici un utilizator necinstit.

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.

se focalizează pe securitatea protocoalelor de comunicare, este cunoscută ca sistem “Dolev-Yao”.


28 CAPITOLUL 2. BITCOIN

2. Furt din portofele


Formatul unui portofel electronic Bitcoin nu solicită nici o criptare, aceasta fiind o măsură
de securitate opţională (lăsată la latitudinea utilizatorului). În mod implicit, cele mai
multe portofele sunt stocate necriptat, ceea ce face posibilă apariţia de programe malware
concepute special pentru jefuirea conţinutului portofelelor. La cerere, există portofele care
includ posibilitatea de criptare.
În acest caz ı̂nsă trebuie acordată o atenţie deosebită ı̂n faza de backup a portofelelor:
din cauza modului ı̂n care funcţionează sistemul, bitcoinii stocaţi ı̂ntr-o versiune recentă
a portofelului pot fi accesaţi – cu o parolă veche –dintr-o copie back-up anterioară.

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.

5. Anonimitate şi confidenţialitate


Deşi Bitcoin nu cere utilizatorului să introducă date de identificare, nivelul de anonimat al
sistemului poate fi redus semnificativ prin mijloace independente, bazate pe construcţia
şi funcţionarea sa – deci uneori dificil de prevenit. Cu toate că Bitcoin poate atenua
această problemă prin managementul propriu de adrese, obţinerea ı̂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 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.

Cursul zilnic bitcoin in diverse tari:


https://coin.dance/charts
30 CAPITOLUL 2. BITCOIN
Bibliografie

[1] A.Atanasiu – Securitatea informaţiei, 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 Cryp-


tocurrency 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 BIBLIOGRAFIE

[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/

S-ar putea să vă placă și