Friday, May 23, 2014

Standardne transakcije


U Bitcoinu (verziji klijenta 0.9) postoji pet vrsta standardnih transakcija koje se razvrstavaju prema formatu izalza. Tih pet vrsta su: plaćanje na javni ključ (pay to public key, P2PK), plaćanje na hash javnog ključa (pay to publick key hash, P2PKH), plaćanje na hash skripte (pay to script hash, P2SH), višepotpisna transakcija te null transakcija

Plaćanje na javni ključ (P2PK)


Ovakav se način plaćanja izbjagava jer nije siguran. Koristi se jedino u coinbase transakcijama kad rudaru treba isplatiti nagradu za točno riješen blok.

scriptSig: <sig>
scriptPubKey: <pubKey> OP_CHECKSIG

Plaćanje na hash javnog ključa (P2PKH)


Ovo je najčešći način plaćanja. Ne koristi se direktno javni ključ nego bitcoin adresa (hash javnog ključa).

scriptSig: <sig> <pubKey>
scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG


Plaćanje na hash skripte (P2SH)

Ovo je kompleksniji način plaćanja od gornja dva. Umjesto hash javnog ključa u skripti se nalazi hash druge skripte. Onaj tko hoće potrošiti bitcoine iz takve tranaskcije, mora umjesto javnog ključa dati skriptu koja kad se hashira, odgovara hashu iz potpisa.

scriptSig: <sig><redeemscript>
scriptPubKey: OP_HASH160 <redeemscripthash> OP_EQUAL

Višepotpisna transakcija (multisig)

Transakcije za koje je potrebno m od n potpisa da bi ih se moglo potrošiti.

scriptSig: <sig1> <sig2>
scriptPubKey: OP_2 <pubKey1> <pubKey2> <pubKey3> OP_3 OP_CHECKMULTISIG

Null transakcija

Tranaskcija koja se ne može potrošit inego je označana kao nevaljala. U nju je moguće dodati malu količinu podataka koju određeni klijenti mogu interpretirati. Tako rade protokoli izgrađeni na bitcoinu, npr. Colored coins.

scriptSig: OP_RETURN <data>


Sve su ostale transakcije nestandardne. To znači da ako izlaz nije u jednom od pet gorenabrojenih formata, rudari neće prihvaćati niti rudariti takve transakcije.

 

 

 



Saturday, May 17, 2014

Naprednije Bitcoin skripte

Transakcija s više potpisa



Transakcije s više potpisa (engl. multisignature/multisig) zathijevaju više od jednog ključa (potpisa) da se pristupi bitcoinima, npr. dva od tri.


Primjer 2-od-3: scriptSig: <sig1> <sig2>
scriptPubKey: OP_2 <pubKey1> <pubKey2> <pubKey3> OP_3 OP_CHECKMULTISIG


Za ovu je transakciju potrebno dva od tri potpisa. Prva transakcija ima dva potpisa koji su potrebni za otključavanje sredstava na adresi. Za transakciju s više potpisa scriptPubKey dio ima posebnu konstrukciju. Prvo se navodi koliko je potpisa potrebno za otključavanje, zatim javni ključevi (ne hashevi kao kod standardnih), koliko tih ključeva ima te na kraju naredba za provjeru potpisa.


Stog
Naredba
Opis
<sig2>
<sig1>

Potpisi se stavljaju na stog.
<2>
<sig2>
<sig1>

Dodaje se broj potpisa potreban za otključavanje.
<pubKey3>
<pubKey2>
<pubKey1>
<2>
<sig2>
<sig1>

Dodaju se javni ključevi pomoću koji se verificiraju potpisi. Potpisi i ključevi verificiraju se u parovima.
<3>
<pubKey3>
<pubKey2>
<pubKey1>
<2>
<sig2>
<sig1>
OP_CHECKMULTISIG
Dodaje se broj javnih ključeva. Sad su na stogu svi potrebni ulazi za provjeru transakcije.
<1>

Na stogu je rezulat izvršavanja OP_CHECKMULTISIG naredbe

 
Tehnički gledano, OP_CHECKMULTISIG zbog buga uzima jedan parametar previše te se u scriptSig prije potpisa dodaje OP_0 kao lažni parametar.

Odd/Event Bet



Slijedi prijmjer kompleksne skripte koja nasumično izvršava podskripte. Može se, na primjer, koristiti za nasumično određivanje koji korisnik plaća naknadu na transakciju.


Naredba OP_2DUP duplira dva elementa s vrha stoga. OP_SWAP zamijeni dva elementa s vrha stoga. OP_LEFT zadrži samo n lijevih znakova. OP_ADD zbraja dva elementa s vrha stoga. OP_MOD je ostatak pri dijeljenju gornja dva elementa stoga.


Primjer: scriptSig: <Sig><pubKey>
scripPubKey: <7bb...><5aa...> OP_2DUP OP_HASH160 <aHash> OP_EQUALVERIFY OP_HASH160 <bHASH> OP_EQUALVERIFY OP_1 OP_LEFT OP_SWAP OP_1 OP_LEFT OP_ADD OP_2
OP_SWAP OP_MOD
OP_IF
     OP_DUP OP_HASH160 <pubKeyAHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
     OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF

 
Stog
Naredba
Opis
<5aa...>
<7bb...>
<pubKey>
<sig>
OP_2DUP
Na stog se prvo stavljaju svi elementi i gornja se dva dupliraju.
<5aa...>
<7bb...>
<5aa...>
<7bb...>
<pubKey>
<sig>
OP_HASH160
Hashiranje vrha stoga
<aHash>
<aHash>
<7bb...>
<5aa...>
<7bb...>
<pubKey>
<sig>
OP_EQUALVERIFY
Dodavanje hasha i provjera jesu li jednaki
<7bb...>
<5aa...>
<7bb...>
<pubKey>
<sig>
OP_HASH160
Hashiranje vrha stoga
<bHash>
<5aa...>
<7bb...>
<pubKey>
<sig>

Dodavanja hasha na stog
<bHash>
<bHash>
<5aa...>
<7bb...>
<pubKey>
<sig>
OP_EQUALVERIFY
Provjera jesu li jednaki
<5aa...>
<7bb...>
<pubKey>
<sig>

Dodaje se 1 na stog
<1>
<5aa...>
<7bb...>
<pubKey>
<sig>
OP_LEFT
Uzima se <1> znak hash <5aa...>
<5>
<7bb...>
<pubKey>
<sig>
OP_SWAP
Zamijena dva gornja elementa
<7bb...>
<5>
<pubKey>
<sig>

Na stog se dodaje <1>
<1>
<7bb...>
<5>
<pubKey>
<sig>
OP_LEFT
Uzima se <1> znak hash <7bb...>
<7>
<5>
<pubKey>
<sig>
OP_ADD
Gornja se dva elementa zbrajaju
<12>
<pubKey>
<sig>

Dodaje se 2
<2>
<12>
<pubKey>
<sig>
OP_SWAP
Zamjena
<12>
<2>
<pubKey>
<sig>
OP_MOD
Ostatak pri dijeljenju <12> s <2>
<0>
<pubKey>
<sig>
OP_IF
Ako je na vrhu element isitni != 0 izvrši sljedeću naredbu
<pubKey>
<sig>
OP_ELSE
Ako nije (=0)
<pubKey>
<sig>
OP_DUP OP_HASH160 <pubKeyBHash> OP_EQUALVERIFY OP_CHECKSIG
Izvrši ovo

 
Ova skripta ne može se zapravo izvršiti budući da su naredbe OP_LEFT i OP_MOD onemogućene. Ovdje je stavljena samo kao primjer kompleksne skripte.

Thursday, May 15, 2014

Matematika ključeva


Javni i privatni ključevi u Bitcoin protokolu generiraju se pomoću eliptičke krivulje. To su specijalne krivulje trećeg stupnja definirane nad nekim poljem i najčešći im je oblik:

(1)  y2 = x3 + ax + b


Gdje su a, b, x, y elementi nekog polja (realnih brojeva, kompleksnih brojeva, racionalnih brojeva itd.). Za potrebe kriptografije eliptičke se krivulje definiraju nad konačnim poljima Fp. To su polja koja za razliku od prije navedenih imaju konačan broj elemenata p. U kriptografiji p je najčešće neparan prost broj. Tako se jednadžba (1) pretvara u:

(2)  (y2 = x3 + ax + b) mod p

Eliptička krivulja koja se koristi u protokolu Bitcoin ima službeni naziv secp256k1 te 
ima jednadžbu:

(3)  (y2 = x3 + 7) mod p

Parametri krivulje šest su elemenata T = (p, a, b, G, n, h).

p je veličina konačnog polja nad kojim je krivulja definirana. U ovom je slučaju p = 2256 – 232 – 29 – 28 – 27 – 26 – 24 – 1 odnosno u heksadecimalnom obliku p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
a i b su već opisani koeficijenti jednadžbe: a = 0, b = 7.

G je točka generator eliptičke krivulje, slično generatoru cikličke grupe. Ciklička grupa je grupa koju je moguće generirati iz jednog njezinog elementa. Takav element naziva se generator grupe i označava s g. Ostali se elementi generiraju potenciranjem generatora: gn, n Є [0, p - 1] gdje je p broj elemenata u grupi (veličina polja). Za secp256k1:

G = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8

Analogno cikličkoj grupi, sve se točke mogu izvesti iz generatora eliptičke krivulje. Mogu se prikazati u dva oblika, kompresiranom i nekompresiranom. To se prepoznaje prema broju na početku generatora. Ako je broj 0x04 kao u gornjem primjeru znači da je format nekompresiran, a ako je broj 0x02 ili 0x03 radi se o kompresiji. U gornjem je primjeru x koordinata točke generatora 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798, a y
483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8.

n je red generatora, odnosno broj koji zadovoljava jednadžbu:

(4) n ∙ G = 0 (mod p)

U ovom je primjeru n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141.

Parametar h je kofaktor, omjer broja točaka na eliptičkoj krivulji i reda generatora te iznosi h = 1.

Generiranje ključeva



Privatni ključ d koji se koristi za pristup sredstvima na adresi je slučajno odabrani element iz intervala [1, n – 1] gdje je n red generatora:

(5) d Є [0, FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364140]

Javni ključ Q dobiva se iz privatnog ključa d pomoću generatorske točke na krivulji:

(6) Q = d ∙ G (mod p)

Dakle javni ključ Q je zapravo točka na krivulji dobivena matematičkom operacijom množenja. Glavna karakteristika ovakvog množenja je da je ono ireverzibilno. Poznajući Q i G nemoguće je dobiti privatni ključ d.

Jednadžba (6) preciznije napisana je:

(7)  Q = d ∙ (xG, yG) = (xQ, yQ)

Koordinate ključa veličine su 32 bajta. U protokolu Bitcoin te se koordinate konkateniraju i dobiva se javni ključ veličina 64 bajta. On se zatim hashiranjem pretvara u adresu na koju se primaju bitcoini.

Sunday, May 11, 2014

Osnove Bitcoin skripti


Transakcije u Bitcoin protokolu temelje se na skriptama. Skripte su niz instrukcija pisanih u Bitcoinovom skriptnom jeziku Script. Script je modeliran prema programskom jeziku Forth. Temelji se na stogu i izvršava s lijeva nadesno. To znači da se svaki podatak, ulaz ili izlaz, stavlja na stog. Script ne podržava petlje.

Skripte opisuju kako osoba na koju se prenose bitcoini može tim bitcoinima pristupiti. Osoba koja želi potrošiti bitcoine mora osigurati dvije stvari: javni ključ koji kad se hashira podudara s adresom odredišta u skripti i potpis kojim dokazuje privatni ključ koji je vezan uz tu adresu.

Transakcija je ispravna ako se skripta uspješno izvrši i vrijednost na vrhu stoga je različita od nule (istinita). Osoba koja šalje bitcoine određuje uvjete pod kojima se oni prenose primatelju. Primatelj mora dati ulaze pošiljateljevoj skripti kako bi ona nakon izvršavanja dala istinit rezultat.


Primjeri skripti


 
Script sadrži nekoliko desetaka različitih naredbi. Ovdje će biti opisane samo one najčešće korištene.

Primjer transakcije:

{
  "hash":"7c40250...",
  "ver":1,
  "vin_sz":1,
  "vout_sz":1,
  "lock_time":0,
  "size":224,
  "in":[
   {
     "prev_out":{
       "hash":"2007aec...",
       "n":0
     },
   "scriptSig":"signature"
  }
],
"out":[
  {
   "value":"0.31900000",
   "scriptPubKey":"script"
   }
  ]
}


Detalji transakcije opisani su ovdje i ovdje. U ovom će se postu opisivati boldani dijelovi.

Skripta se sastoji od dva dijela: scriptSig i scriptPubKey. scriptSig najčešće prima dva parametra <sig> i <pubKey>, odnosno javni ključ (ne adresu) novog vlasnika i ECDSA potpis hasha prethodne transakcije od koje je sadašnji vlasnik dobio bitcoine. scriptPubKey sadrži instrukcije kako tim bitcoinima pristupiti.

 Nepotrošiva transakcija



Najjednostavniji primjer transakcije je nepotrošiva transakcija ili nul-transakcija.


Primjer: scriptSig: OP_RETURN
             scriptPubKey: .....
 
Stog
Naredba
Opis
Prazan
OP_RETURN
Neispravna transakcija

Naredba OP_RETURN označuje transakciju kao neispravnu i što god se nalazilo u scriptPubKey dijelu neće se moći izvršiti. Ovakav oblik transakcije koristi se često ako se u lanac blokova samo želi pohraniti neki podatak. Nakon naredbe OP_RETURN u polje se mogu zapisati podaci koji neće imati nikakvo značenje za bitcoin klijente. Takve se transakcije koriste npr. u platformi Counterparty.

Bilotko može potrošiti


Primjer: scriptSig: (prazno)
             scriptPubKey: OP_TRUE


Stog
Naredba
Opis
Prazan
OP_TRUE
Stavlja 1 na stog
1

Transakcija ispravna

 
Ako transakcija nema javni ključ primatelja, bilo tko je može potrošiti. OP_TRUE označuje logičku istinu. Točnije na stog se stavlja broj 1. Budući da su u Scriptu sve vrijednosti istina osim nule, ovo označuje da je rezultat izvršavanja transakcije istinit te da se bitcoini smiju prebaciti novom vlasniku.

Coinbase transakcija



Ovo je pojednostavljeni primjer općenite transakcije. Coinbase transakcija donosi nagradu rudaru koji je uspješno izrudario prethodni blok.


Primjer: scriptSig: <sig>
             scriptPubKey: <pubkey> OP_CHECKSIG


Stog
Naredba
Opis
<pubKey>
<sig>
OP_CHECKSIG
Provjerava ispravnost potpisa koristeći javni ključ novog vlasnika
1

Potpis ispravan


Na stog se stavljaju digitalni potpis hasha transakcije koja prenosi bitcoine rudaru i njegov javni ključ. Ako naredba OP_CHECKSIG vrati istinu, transakcija je uspješno izvršena te rudar može preuzeti nagradu.

Osnovna transakcija



Ovo je primjer transakcije s jednim ulazom i jednim izlazom.


Primjer: scriptSig: <sig><pubKey>
             scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG


scriptSig dio sadrži već poznati potpis i javni ključ novog vlasnika. scriptPubKey je nešto složeniji i sastoji se od nekoliko koraka. OP_DUP kopira element s vrha stoga. OP_HASH160 hashira element s vrha stoga dva puta, prvo sa SHA256, a zatim s RIPEMD160. OP_EQUALVERIFY su dvije naredbe u jednoj: OP_EQUAL pa zatim OP_VERIFY. Prva vraća 1 (istinu) ako su najgornja dva elementa na stogu jednaka. Druga verificira rezultat, tj. označuje transakciju kao neispravnu ako gornji element nije istinit.


Stog
Naredba
Opis
<pubKey>
<sig>
OP_DUP
Kopira element s vrha stoga.
<pubKey>
<pubKey>
<sig>
OP_HASH160
RIPEMD160(SHA256(pubKey))
<pubKeyHash>
<pubKeyHash2>
<pubKey>
<sig>

Na stog se stavlja bitcoin adresa na koju se šalje (hash javnog ključa)

<pubKeyHash>
<pubKeyHash2>
<pubKey>
<sig>
OP_EQUALVERIFY
Provjerava jesu li hash javnog ključa iz ulaza i bitcoin adresa isti
<pubKey>
<sig>
OP_CHECKSIG
Provjerava potpis pomoću javnog ključa
OP_TRUE

Transakcija je ispravna

 
Za transakciju iz prethodnog primjera parametri su:


scriptSig: <304502205014856cdf89da70ad9a4f223bac4e5477da5c6cb69ef2
b9f8b5f8548e21307e0221009bfe2698f1eb1c561f41981d8e78c11d9e685a70
e682f144ee6c8ab5ecb0497c01> <042b2d8def903dd62d0c4161ed8d4ccfa5967e11a28e65cb141235b7c27d8e
f6aa3bd63be077323cf3d7e0e8895b264b94feb4b40478b431da6f45dfc8e1004f62>
  
scriptPubKey: OP_DUP OP_HASH160 a7db6ff121871c65a8924b8e40f160d385515ad7 OP_EQUALVERIFY OP_CHECKSIG

 Blok geneze



Skripta za genesis blok: scriptSig: prazno
                                      scripPubKey: OP_HASH256 <hash> OP_EQUAL


Da bi se transakcija potrošila potrebno je naći niz znakova koji kad se dva puta hashiraju daju određeni hash (6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000).


Stog
Naredba
Opis
Prazan

Na stog je potrebno staviti podatke koji će zadovoljiti hash
<data>
OP_HASH256
Podaci se dva puta hashiraju
<hash>
<data_hash>

Na stogu su generirani hash i hash koji je potrebno izračunati (6fe...)
<hash>
<data_hash>
OP_EQUAL
Provjeri zadovoljava li generirani hash zadani hash
OP_TRUE

Transakcija ispravna

 
Detaljan popis Script naredbi nalazi se ovdje.

Thursday, May 1, 2014

Anonimnost u protokolu Bitcoin


Ponekad se može pročitati da je bitcoin anonimna valuta, odnosno anoniman sustav za plaćanje. Koliko je zapravo Bitcoin anoniman? Osnovna karakteristika Bitcoina je da su sve transakcije u sustavu vidljive svima. S druge strane, sudionici sustava ne moraju odavati svoj identitet ostalima kako bi mogli sudjelovati u sustavu. Koliko se može zaključiti o sudionicima sustava analizirajući transakcije i block chain?


Fergal Reid i Martin Harrigan objavili su prvo istraživanje anonimnosti u sustavu Bitcoin [1]. Istraživali su navodnu krađu 25.000 bitcoina objavljenu na forumu BitcoinTalk. Prije istraživanja Reid i Harrigan smatrali su da će biti vrlo teško ili čak nemoguće pratiti kretanje određene svote novca kroz sustav jer su pretpostavljali da će se transakcije vrlo brzo izgubiti u mreži. Istraživanje je pokazalo da je u detalje moguće pratit kretanje određenog iznosa bitcoina između korisnika u mreži.


U [2] su Dorit Ron i Adi Shamir objavili analizu block chaina iz svibnja 2012. Zanimalo ih je kretanje bitcoina kroz mrežu te procjena broja bitcoin korisnika. Analiza je pokazala da je broj korisnika oko dva i pol milijuna. Pokazano je i da se kroz mrežu većinom prenose mali iznosi bitcoina, no i da postoji oko 300 tranaskcija s >50 000 bitcoina (od kojih je većina potekla od jedne transakcije od 90 000 BTC-a). Identificirane su adrese koje pripadaju velikim mjenjačnicama te je oktriveno da većina bitcoina, 75%, ne napušta adresu jednom kad stigne na nju. Koristili su se dvjema metodama: prva je da su pretpostavili da ako transakcija prebacuje sredstva s dvaju (ili više) adresa na novu adresu, te adrese moraju biti u vlasništvu iste osobe (rafinirali su metodu koju su koristili Reid i Harrigan). Druga je da su pokušali otkriti change adrese, adrese na koje se vraća ostatak bitcoina nakon transfera, a koje nisu uvijek iste polaznoj adresi no pripadaju istom vlasniku.


Elli Androulaki et al. proveli su istraživanje početkom 2013. u dva dijela [3]. Prvi dio je bio gotovo identičan goreopisanim analizama. U drugom su dijelu konstruirali složene modele i simulator za koji tvrde da vjerno simulira kako korisnici upotrebljavaju bitcoin u stvarnom životu. Rezultati simulatora pokazuju da je moguće utvrditi geografsku povezanost korisnika (npr. korištenje bitcoina u fizičkim dućanima).


Zaključak ovih istraživanja je da iako istraživači nisu uspjeli otkriti identitet niti jednog pojedinca, uspjeli su detaljno pratit kretanja bitcoina kroz mrežu, otkriti koji skupovi adresa pripadaju kojim mjenjačnicama te su čak uspjeli (barem teoretski) geografski povezati korisnike protokola Bitcoin. Čini se da je Bitcoin ipak dovoljno anoniman, no može li se ta anonimnost još poboljšati?


Već je sam Satoshi u svom radu predložio da se radi povećanja anonimnosti za svaku transakciju generira nova adresa i pripadajući tajni ključ. To može sakriti podatak tko šalje bitcoine, ali se još uvijek može vidjeti kome ti bitcoini idu. Problem skrivanja kome se šalju bitcoini može se riješiti korištenjem tzv. mixing services. Te usluge dozvoljavaju da im korisnici pošalju bitcoine i adresu na koju žele da ti bitcoini stignu. Usluga će zatim od svakog korisnika uzeti malo bitcoina (sve do iznosa koji korisnik želi poslati nekome) te ukupan iznos poslati na odabranu adresu. To omogućuje skrivanje relacije između adresa koje šalju bitcoine i adresa koje primaju bitcoine. Nedostatak je u tome što korisnik mora vjerovati centraliziranoj usluzi da će dobro i pošteno izmiješati bitcoine. Problem je i u tome što suluga mora imati dovoljan broj korisnika da bi mogla uspješno pomiješati bitcoine inače ih je moguće pratiti [4][5]. Također, ako se pošalje velik iznos bitcoina, vjerojatno je da se oni neće dobro izmiješati te će ih opet biti moguće pratiti kroz mrežu.


Uz nabrojene mogućnosti postoje i ZeroCoin i ZeroCash sustavi koji koriste tzv. zero knowledge dokaze te pružaju mogućnost distribuiranog "pranja novca" unutar samog Bitcoin protokola. Takvi sustavi mogu značajno poboljšati anonimnost transakcija, no još su u razvoju te se ne zna kakva će im biti budućnost.

Zaključak

 

Napravljeno je nekoliko istraživanja na temu anonimnosti protokola Bitcoin. Iako niti u jednom slučaju istraživačni nisu identificirali pojedince koji slali bitcoine, pokazali su da je poznavaljem makar jednog identiteta moguće detaljno pratiti njegove transakcije i otkriti koje adrese su u njegovom vlasništvu. Za Bitcoin korisnike koji žele više anonimnosti nego što sustav pruža po defaultu, preporučljivo je za svaku transakciju generirati nove adrese i korsitit pouzdane mixing usluge.

Literatura

 

[1] Fergal Reid and Martin Harrigan, An Analisys of Anonymity in the Bitcoin System. arXiv:1107.4524v2 [physics.soc-ph], 2012 http://arxiv.org/abs/1107.4524

[2] Dorit Ron and Adi Shamir, Quantitative Analysis of the Full Bitcoin Transaction Graph. 2012

[3] Elli Androulaki , Ghassan O. Karame , Marc Roeschlin, Tobias Scherer i Srđan Capkun, Evaluating User Privacy in Bitcoin. 2013

[4] Malte Möser, Anonymity of Bitcoin Transactions: An Analysis of Mixing Services, 2013

[5] Malte Möser, Rainer Böhme, Dominic Breuker , An Inquiry Into Money Loundering Tools in the Bitcoin Network, 2013