LEZIONE 03 – TRANSAZIONI IN BITCOIN (FUNZIONAMENTO GENERICO)

Una transazione è una comunicazione da parte di un utente della rete in cui il proprietario di un certo quantitativo di bitcoin autorizza il trasferimento di tutti o una parte di essi ad un altro.

Poiché una transazione avvenga nella rete bitcoin c’è bisogno di almeno 1 input e 1 output. Possiamo fare un facile esempio ipotizzando una transazione tra due indirizzi appartenenti a Pippo e Pluto.

Pippo genera una transazione da 0.3 btc che ha come input l’indirizzo di Pippo e come output l indirizzo di Pluto.

Questa è una transazione molto semplice che però deve farci capire una cosa. Poiché la blockchain di bitcoin è pubblica e verificabile da tutti in qualsiasi momento adesso Pluto è in grado di monitorare tutte le transazioni passate e future dell’ indirizzo da cui a ricevuto i fondi, cioè quello di Pippo e contemporaneamente anche Pippo può tener sotto controllo tutte le transazioni che Pluto farà ripartendo dall’indirizzo su cui a ricevuto i fondi.

Questo avviene fondamentalmente perché ogni transazione è collegata alla transazione precedente e di conseguenza ogni input di transazione è costituito dagli output della transazione precedente. Da questo si deriva una regola fissa nell’utilizzo di bitcoin ossia che

NON BISOGNA MAI RIUTILIZZARE GLI STESSI INDIRIZZI PER EFFETTUARE TRANSAZIONI

Facciamo ora un secondo esempio aggiungendo un fattore in più alla transazione.

Abbiamo Pippo che all interno del suo indirizzo possiede 0.6 btc e vuole inviare a Pluto 0.2 btc.

Poiché per le regole del protocollo Bitcoin non è possibile scorporare il saldo dell’indirizzo di Pippo, vale a dire gli 0.6 btc e spedirne solo 0.2 btc, Pippo dovrà generare una transazione diversa dove avremo :

1 input = 0.6 btc dell indirizzo di Pippo

2 output = 0.2 btc all’ indirizzo di Pluto e 0.4 btc che torneranno a Pippo come resto su un indirizzo differente ma appartenente sempre a lui.

Questo a livello privacy crea un problema importante perché adesso Pluto non solo è in grado di monitorare tutte le transazioni passate e future generate dall’ indirizzo di input di Pippo ma è anche in grado di conoscere tutti i movimenti dell indirizzo di resto che appartiene sempre a Pippo.

Alla fine di questo esempio possiamo dire che :

  1. Non bisogna mai riutilizzare gli stessi indirizzi per le transazioni
  2. Bisogna cercare ove possibile di generare transazioni senza resto
  3. Bisogna cercare di creare output con valori non interi in modo che un osservatore esterno non possa facilmente intuire quale sia il resto e quale sia l importo al destinatario.

Supponendo di avere un input da 1.1672 btc e 2 output uno da 1 btc e 1 da 0.1672 btc è facilmente intuibile che il resto che torna al mittente sia il secondo output

N.B. OVVIAMENTE IN QUESTI PRATICI ESEMPI NON STO TENENDO CONTO DELLE FEE (TASSE) DI TRANSAZIONE MA STO UTILIZZANDO IMPORTI INTERI PER RENDERE MEGLIO L’IDEA. LE FEE SONO DATE DALLA DIFFERENZA TRA GLI INPUT E GLI OUTPUT DI UNA TRANSAZIONE E SONO SOSTENUTE DALL ENTITÀ DELL INPUT.

Andiamo adesso con un terzo esempio un tantino più complesso….

Pippo vorrebbe inviare 1 bitcoin a Pluto ma all interno del suo wallet dove sono collocati i saldi dei suoi indirizzi non ne possiede uno che abbia un Bitcoin intero.

Noi ovviamente non ce ne accorgiamo ma nella maggior parte di tipi di wallet bitcoin che utilizziamo lo stesso wallet in maniera automatica fa il cosiddetto “merging” ossia mette insieme più input per generare una transazione. Di conseguenza avremo :

Avremo quindi una transazione con 3 input (0.3 btc, 0.2 btc e 0.6 btc) e 2 output (1 btc è 0.1 btc).

In questa transazione di esempio Pluto può monitorare tutte le transazioni passate e future dei tre indirizzi usati da Pippo come input così come sull indirizzo di resto di Pippo.

Da questi 3 esempio di transazione si chiarisce bene il fatto che Bitcoin non sia affatto anonimo ma pseudonimo perché nonostante le transazioni non siano riconducibili alla persona fisica (come per esempio un bonifico effettuato da un iban proprietario di un conto) si ha però a disposizione lo storico di tutti i movimenti che hanno fatto i bitcoin nelle transazioni dalla sua nascita a oggi.

Come si può quindi avere più privacy nella rete di Bitcoin? Una valida opzione ci viene data dal “mixing” ovvero per semplificare il concetto creando transazioni dove si ha la possibilità di mettere insieme input di più entità diverse..

In primo luogo viene generata una transazione contenente più input…

e avremo altrettanti o più output…. In questo caso un osservatore esterno non è in grado di capire a quali input corrispondino quali output….

C’è però da fare una considerazione analizzando questo caso….

Qui il mixing risulta inutile perché abbiamo 4 input e 4 output e anche se venissero scambiati di posizione come nell’esempio in foto sarebbe molto semplice per un osservatore esterno dedurre a quali input corrispondono quali output.

Diversamente nel vero e proprio mixing che chiameremo “coinjoin” non solo viene generata una transazione con più input di diverse entità e più output ma per far sì che gli input non vengano collegati agli output e viceversa vige la regola che tutti gli output debbano avere uguale denominazione. Facciamo un esempio..

  1. Input – Pippo da 1 btc
  2. Input – Pluto da 1.2 btc
  3. Input – Paperino da 1.5 btc
  4. Input – Topolino da 3.3 btc

Tutte queste entità uniscono i loro input e si crea una transazione che avrà più output con uguale denominazione per cercare di non far capire ad un osservatore esterno a quali input corrispondono quali output.

Poniamo il caso che per le regole di questo specifico mixer ogni output abbia denominazione di 1 btc. Avremo quindi questa situazione :

L osservatore esterno sulla blockchain dove è collocato il registro pubblico di tutte le transazioni non sarà in grado di associare a quali input corrispondino gli output del valore di 1 btc ma sicuramente potrà ben capire a chi appartengono i 3 output di resto da 0.2 btc, 0.5 btc e 0.3 btc.

Gli indirizzi di resto vanno quindi usati con molta cautela. Andrebbero rispesi in una transazione con un solo output senza resto oppure andrebbero remixati tra di loro quando raggiungono il valore di denominazione per effettuare un nuovo coinjoin.

Inoltre all interno del proprio wallet dove troviamo tutti gli input derivati da output di precedenti transazioni é possibile aggiungere delle etichette (label) per distinguere la provenienza di quegli input (resti, coinjoin o exchange) in modo da sapere come meglio trattarli quando si renderà necessario fare nuove transazioni.

Come vedremo in una delle prossime lezioni riguardante le transazioni bitcoin più nello specifico in sostanza le persone non si passano mai bitcoin ma semplicemente il diritto a poterli spendere in quanto possessori di specifiche chiavi privati. Metteremo più a fuoco questi concetti introducendo nuovi elementi fondamentali del protocollo Bitcoin….

Alla prossima !!!!

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: