Qualche info tecnica sui BitCoin

Mi è stato richiesto di aggiungere qualche dettaglio più tecnico sui Bitcoin, sul loro funzionamento e sulla sicurezza.

Vediamo quindi di affrontare i principali aspetti tecnici in maniera semplice ma sufficientemente esplicativa e per farlo andremo per gradi, dando per scontate molte informazioni, analizzandole successivamente una dopo l’altra aggiungendo complessità al quadro.

PRIMO ASPETTO : LA GESTIONE DI UNA TRANSAZIONE

Sappiamo che si tratta di una rete P2P (peer-to-peer) come quelle utilizzate da milioni di utenti per scambiare film e programmi, quindi lo scambio avviene tra due utenti senza un intermediario. E quindi chi controlla ? Abbiamo detto la rete stessa, ovvero i nodi che tengono traccia di tutte le transazioni e che contribuiscono alla vita della rete stessa.

Esempio : Mario vuole mandare 1 bitcoin a Luigi.

Mario utilizza il suo client per mandare 1 bitcoin a Luigi. Mario ha bisogno di un wallet (portafoglio) e dell’indirizzo del wallet di Luigi.

Mario può creare il proprio wallet con il suo client. Mario può avere più wallet, non uno solo, può averne quanti ne vuole. E’ come un conto corrente, possiamo averne quanti ne vogliamo. Luigi allo stesso modo può avere quanti wallet vuole e per crearli utilizzerà un client.  Luigi dovrà quindi dire a Mario su quale wallet ricevere il bitcoin e Mario dovrà dire al proprio client da quale wallet spostare il bitcoin.

Mario deve essere collegato in rete, mentre Luigi non è necessario che lo sia (esattamente come avviene per l’internet banking). I nodi manterranno traccia della transazione e, quando Luigi si collegherà con il proprio client e si sincronizzerà con la rete, troverà il bitcoin nel wallet indicato a Mario.

Sia Mario sia Luigi quando creano un wallet attraverso il proprio client disporranno di due informazioni : un indirizzo (pubblico) ed una chiave (privata). L’indirizzo può essere pensato come l’IBAN di  un conto corrente, mentre il concetto di chiave privata è più complesso ma può, anche se con eccessiva semplificazione, essere pensato come le credenziali dell’internet banking che ti permettono di disporre di ciò che hai sul conto. La grande differenza sta nel fatto che se smarrisci le credenziali di accesso ad un internet banking la banca può fornirtene di nuove e, in ogni caso, la banca può certificare che i soldi sono sul tuo conto, se perdi il tuo wallet o la chiave privata hai perso per sempre la possibilità di usare i bitcoin semplicemente perché NON C’E’ nessuna banca intermediaria, quindi i tuoi bitcoin rimarranno nella rete, tutte le transazioni avvenute tramite il tuo wallet sono e saranno memorizzati nei database distribuiti per sempre ma NESSUNO potrà mai farne uso senza avere la chiave privata del wallet. E’ un concetto base, importantissimo : nessuno ti può certificare, perché la transazione è (concettualmente) anonima, un po’ come i libretti al portatore…se li perdi, ciccia i soldi li tiene la banca.

A questo punto nasce la questione della messa in sicurezza dei wallet e delle chiavi, ma questo è un tema che affronteremo più avanti. Torniamo a dettagliare l’esempio.

Luigi ha dato l’indirizzo di un suo wallet a Mario il quale utilizza il client dando indicazione di spostare 1 bitcoin da un suo wallet a quello indicato da Luigi. Bene. Non sta dando istruzioni ad una Banca, sta propagando nella rete la sua transazione, chiedendo che venga inclusa nel prossimo blocco di transazioni dal primo nodo che lo genererà. Mario e Luigi devono aspettare che venga generato il prossimo blocco contenente la transazione perché sia avvenuto effettivamente lo spostamento virtuale del bitcoin dal suo wallet a quello di Luigi, dopodiché la transazione sarà memorizzata per sempre nella catena dei blocchi distribuita mondialmente sui nodi e quindi anche i due client di Mario e Luigi sincronizzandosi vedranno, il primo, un bitcoin in meno, il secondo un bitcoin in più.

Mario e Luigi devono aspettare circa 10 minuti. Questo è il tempo medio di generazione di un blocco. Come mai? Il protocollo stabilisce un livello di complessità di generazione del blocco (rivedendolo ogni 2016 blocchi) in modo tale che, statisticamente, il tempo impiegato per crearlo sia di circa 10 minuti. Perché ? Per mantenere costante la generazione di blocchi a circa 6 all’ora. Perché? Poiché ad ogni generazione di blocco, il nodo più veloce che è riuscito a generarlo, verrà ricompensato con bitcoin nuovi “di zecca”, quindi in questo modo si limita da protocollo l’immissione di nuovi bitcoin in rete.

Come fa il protocollo a modulare la difficoltà di generazione di un blocco? Qui si scende in dettagli più tecnici di cui diamo una visione generale : la generazione di un blocco per essere valida ed accettata dalla rete deve contenere una PoW (proof of work) ovvero la prova che sia stato fatto del lavoro computazionale e questa PoW consiste nel trovare la soluzione ad un problema “matematico-informatico” ovvero generare un codice hash relativo ad alcune informazioni del blocco nuovo e di quello precedente (in una logica di concatenazione) che però abbia un certo numero di “zeri” davanti. In altre parole da una stringa contenente le informazioni sui blocchi si può generare un codice hash in un tempo infinitesimo, con un elaboratore di basse prestazioni. Il problema viene reso complesso dal fatto che non bisogna trovare l’hash della stringa data, ma bisogna aggiungere alla stringa una cifra in fondo (chiamata nonce), generare l’hash, se questo non ha un dato numero di zeri davanti (il numero di zeri rappresenta la complessità), occorre incrementare il nonce di un’unità e ricorsivamente continuare a generare un nuovo codice hash ogni volta, fintanto che non ne si trovi uno che abbia il numero di zeri richiesto, e ciò può richiedere fino a 10 minuti. Mi fermo qui, lasciandovi alla consultazione di Internet per ulteriori approfondimenti.

Luigi, dicevamo, avrà precedentemente creato un wallet (di cui dispone di indirizzo e chiave privata) dove intende ricevere il bitcoin da Mario e gli comunica l’indirizzo, senza necessariamente essere collegato in Rete. Mario, dal canto suo, deve avere già creato un proprio wallet (di cui dispone di indirizzo e chiave privata) sul quale abbia già depositato almeno 1 bitcoin (altrimenti come fa a pagare Luigi?) e utilizzerà il suo client per spostare 1 bitcoin dal suo wallet a quello indicatogli da Luigi. Entrambi aspetteranno 10 minuti per vedere la transazione confermata e i saldi aggiornati.

Siamo sicuri che Mario stia utilizzando il suo wallet e non quello di un altro? Certo, perché necessita di una chiave privata e si presuppone che non conosca chiavi private di altri.

E siamo sicuri che Luigi abbia dato a Mario l’indirizzo del proprio wallet e non quello di un altro? Ragionevolmente possiamo dire che non avrebbe nessun ritorno a far depositare il bitcoin nel portafogli elettronico di un altro, però senza una certificazione di questo indirizzo pubblico non possiamo esserne sicuri al 100%. Questa è una questione che non riguarda solamente i Bitcoin, ma il concetto di crittografia a chiave pubblica e privata. Mentre per l’IBAN in genere si fornisce anche l’identità del beneficiario, abbiamo visto che il BitCoin è un protocollo che prevede transazioni anonime, da wallet a wallet senza abbinamenti di identità.

Luigi, volendo, può certificare il proprio indirizzo pubblico, ma ne parleremo nella prossima puntata per il prossimo aspetto da approfondire

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.