Documente Academic
Documente Profesional
Documente Cultură
Bitcoin
2.1
2.1.1
GoofyCoin
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.2
ScroogeCoin
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
2.2. BITCOIN
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
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
CAPITOLUL 2. BITCOIN
2.3
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.
10
CAPITOLUL 2. BITCOIN
2.4
2.4.1
Primitive criptografice
11
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
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:
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
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
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
19
20
CAPITOLUL 2. BITCOIN
2.5.3
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,
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
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.
23
2.5.5
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
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
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.7
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
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
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