La Blockchain è probabilmente una delle tecnologie più significative e dirompenti che sono nate dalla nascita di Internet. Mettendo da parte tutto il clamore intorno al prezzo di Bitcoin e delle altre criptovalute, l’obiettivo di questa guida è di fornirti un’introduzione pratica alla tecnologia blockchain.
Ho usato Bitcoin come mezzo per spiegare la tecnologia “Blockchain“, la maggior parte dei concetti descritti in questo post sono applicabili ad altre cripto-valute.
Index
ma prima di tutto
Cosa è una Blockchain
In sostanza, una blockchain è un database distribuito che permette transazioni dirette tra due parti senza la necessità della presenza di un’autorità centrale. Questo concetto semplice ma potente ha grandi implicazioni per molte istituzioni come banche, governi e mercati, solo per citarne alcuni. Qualsiasi azienda o organizzazione che si basi su un database centralizzato può potenzialmente essere introdotta alla tecnologia blockchain.
Un po di Storia | Corso Blockchain
Tutto è iniziato con un white paper pubblicato nel 2008 da una persona o entità sconosciuta con lo pseudonimo di Satoshi Nakamoto. Il white paper era intitolato “Bitcoin: A Peer-to-Peer Electronic Cash System” e pose le basi di ciò che in seguito divenne noto come Blockchain. Nel white paper originale di Bitcoin, Satoshi ha descritto come creare un sistema di pagamento elettronico peer-to-peer che consente di inviare pagamenti online immediati, da una parte all’altra, senza passare per un’istituzione centralizzata. Questo sistema risolve un problema importante nel denaro digitale chiamato Double-Spending.
Leggi anche: Come scrivere White Paper
Cos’è il Double-Spending | Corso Blockchain
Supponiamo che Maria voglia pagare Luigi 1 $. Se Maria e Luigi utilizzano denaro fisico, allora Maria non avrà più 1 $ dopo l’esecuzione della transazione. Se Maria e Luigi usano denaro digitale, il problema diventa più complicato. Il denaro digitale è in forma digitale e può essere facilmente duplicato. Se Maria invia un file digitale da 1 $ a Luigi via e-mail, ad esempio, Luigi non può sapere con certezza se Maria ha cancellato la sua copia del file. Se Maria ha ancora il file digitale da 1 $, può scegliere di inviare lo stesso file a Laura. Questo problema è chiamato Double-Spending.
Un modo per risolvere il Double-Spending è avere una terza parte fidata (una banca per esempio) tra Maria, Luigi e tutti gli altri partecipanti alla rete. Questa terza parte è responsabile della gestione di un registro centralizzato che tiene traccia e convalida tutte le transazioni nella rete. Lo svantaggio di questa soluzione è che, affinché il sistema funzioni, richiede fiducia in una terza parte centralizzata.
Blockchain: una soluzione decentralizzata per il problema del
Double-Spending |
Corso Blockchain
Per risolvere il problema del Double-Spending, Satoshi propose un libro mastro pubblico, cioè la blockchain di Bitcoin per tenere traccia di tutte le transazioni nella rete. La blockchain di Bitcoin ha le seguenti caratteristiche:
- Distribuita: il libro mastro viene replicato su più computer, anziché essere archiviato su un server centrale. Qualsiasi computer con una connessione Internet può scaricare una copia completa della blockchain.
- Crittografia: la crittografia viene utilizzata per assicurarsi che il mittente sia proprietario del Bitcoin che sta tentando di inviare e per decidere in che modo le transazioni vengono aggiunte alla blockchain.
- Immutabile: la blockchain è immutabile. In altre parole, le transazioni possono essere aggiunte alla blockchain ma non possono essere cancellate o modificate.
- Utilizza Proof of Work (PoW): un tipo speciale di partecipanti alla rete chiamati miner competono alla ricerca della soluzione di un puzzle crittografico che consenta loro di aggiungere un blocco di transazioni alla blockchain di Bitcoin. Questo processo è chiamato Proof of Work e consente al sistema di essere sicuro (ne parleremo più avanti).
Come inviare Bitcoin:
- Passaggio 1 (una tantum): crea un portafoglio bitcoin. Ogni persona che invia o riceve bitcoin, deve creare un portafoglio bitcoin. Un portafoglio (wallet) bitcoin memorizza 2 informazioni: una chiave privata e una chiave pubblica. La chiave privata è un numero segreto che consente al proprietario di inviare bitcoin a un altro utente o di spendere bitcoin sui servizi che li accettano come metodo di pagamento. La chiave pubblica è un numero necessario per ricevere bitcoin. La chiave pubblica viene anche chiamata indirizzo bitcoin (non completamente vero, ma per semplicità assumeremo che la chiave pubblica e l’indirizzo bitcoin siano la stessa cosa). Si noti che il portafoglio non memorizza i bitcoin. Le informazioni sui saldi bitcoin sono memorizzate sulla blockchain di Bitcoin.
- Passaggio 2: creare una transazione bitcoin. Se Maria vuole inviare 1 BTC a Luigi, Maria deve connettersi al suo portafoglio bitcoin usando la sua chiave privata, e creare una transazione che contenga la quantità di bitcoin che desidera inviare e l’indirizzo dove vuole inviarli (in questo caso L’indirizzo pubblico di Luigi).
- Passaggio 3: Trasmettere la transazione alla rete di Bitcoin. Una volta che Maria ha creato la transazione Bitcoin, ha bisogno di trasmettere questa transazione all’intera rete di Bitcoin.
- Passaggio 4: confermare la transazione. Un minatore che ascolta la rete di Bitcoin autentica la transazione utilizzando la chiave pubblica di Maria, conferma che Maria ha abbastanza bitcoin nel suo portafoglio (in questo caso almeno 1 BTC) e aggiunge un nuovo record alla Blockchain di Bitcoin contenente i dettagli della transazione.
- Passaggio 5: Trasmetti la modifica della blockchain a tutti i miner. Una volta confermata la transazione, il minatore dovrebbe trasmettere la modifica blockchain a tutti i miner per assicurarsi che le loro copie della blockchain siano tutte sincronizzate.
Approfondimento tecnico sulla Blockchain | Come funziona la Blockchain
L’obiettivo di questa sezione è di approfondire gli elementi tecnici che costituiscono la blockchain. Tratteremo la crittografia, chiave pubblica, le funzioni di hashing, il mining e la sicurezza della blockchain.
Leggi anche: Come diventare Blockchain Developer
Crittografia a chiave pubblica
La crittografia a chiave pubblica, o crittografia asimmetrica, è un sistema crittografico che utilizza coppie di chiavi: chiavi pubbliche che possono essere diffuse ampiamente e chiavi private che sono conosciute solo dal proprietario. Questo assolve a due funzioni: autenticazione, in cui la chiave pubblica verifica il titolare della chiave privata abbinata inviata il messaggio e la crittografia, in cui solo il titolare della chiave privata accoppiato può decrittografare il messaggio crittografato con la chiave pubblica.
RSA e Elliptic Curve Digital Signature (ECDSA) sono gli algoritmi di crittografia a chiave pubblica più diffusi.
Nel caso di Bitcoin, l’algoritmo ECDSA viene utilizzato per generare portafogli Bitcoin. Bitcoin utilizza una varietà di chiavi e indirizzi, ma per semplicità, assumeremo in questo post del blog che ogni portafoglio Bitcoin ha una coppia di chiavi private / pubbliche e che un indirizzo Bitcoin è la chiave pubblica del portafoglio. Raccomando questo articolo, se sei interessato ai dettagli tecnici completi dei portafogli Bitcoin.
Per inviare o ricevere BTC, un utente inizia generando un portafoglio che contiene un paio di chiavi private e pubbliche. Se Maria vuole inviare a Luigi alcuni BTC, crea una transazione in cui inserisce le chiavi pubbliche di entrambi e la quantità di BTC che desidera inviare. Quindi firma la transazione utilizzando la sua chiave privata. Un computer sulla blockchain utilizza la chiave pubblica di Maria per verificare che la transazione sia autentica e aggiunge la transazione a un blocco che verrà successivamente aggiunto alla blockchain.
Hashing e Mining
Tutte le transazioni Bitcoin sono raggruppate in file chiamati blocchi. La Blockchain di Bitcoin aggiunge un nuovo blocco di transazioni ogni 10 minuti. Una volta aggiunto un nuovo blocco alla blockchain, diventa immutabile e non può essere cancellato o modificato. Un gruppo speciale di partecipanti alla rete chiamati miner o miner è responsabile della creazione di nuovi blocchi di transazioni. Un minatore deve autenticare ogni transazione utilizzando la chiave pubblica del mittente, confermare che il mittente ha abbastanza coin per la transazione richiesta e aggiungere la transazione al blocco. I miner sono completamente liberi di scegliere quali transazioni includere nei blocchi, pertanto i mittenti devono includere una commissione di transazione per incentivare i miner ad aggiungere prima le loro transazioni ai blocchi.
Affinché un blocco venga accettato dalla blockchain, deve essere “estratto”. Per minare un blocco, i miner devono trovare una soluzione estremamente rara a un puzzle crittografico. Se un blocco estratto viene accettato dalla blockchain, il minatore riceve una ricompensa in bitcoin, che è un ulteriore incentivo per le spese di transazione. Il processo di mining è indicato anche come Proof of Work (PoW) ed è il meccanismo principale che consente alla blockchain di essere affidabile e sicura (vedremo più avanti una sezione dedicata alla sicurezza della blockchain).
Puzzle crittografico
Per comprendere il puzzle crittografico della blockchain, dobbiamo iniziare con le funzioni di hash. Una funzione di hash è una funzione che può essere utilizzata per mappare i dati di dimensioni arbitrarie a dati di dimensioni fisse. I valori restituiti da una funzione di hash sono chiamati hash. Le funzioni di hash vengono solitamente utilizzate per accelerare la ricerca del database rilevando i record duplicati e sono anche ampiamente utilizzati nella crittografia. Una funzione di hash crittografica consente di verificare facilmente che alcuni dati di input siano mappati su un dato valore hash, ma se i dati di input sono sconosciuti, è volutamente difficile ricostruirli conoscendo il valore hash memorizzato.
Bitcoin usa una funzione di hash crittografica chiamata SHA-256. SHA-256 viene applicata a una combinazione dei dati del blocco (transazioni bitcoin) e un numero chiamato nonce. Modificando i dati del blocco o il nonce, otteniamo degli hash completamente diversi. Affinché un blocco sia considerato valido o “estratto”, il valore di hash del blocco e il nonce devono soddisfare una determinata condizione. Ad esempio, le quattro cifre iniziali dell’hash devono essere uguali a “0000”. Possiamo aumentare la complessità del mining rendendo la condizione più complessa, ad esempio possiamo aumentare il numero di 0 che il valore hash deve iniziare.
Il puzzle crittografico che i miner devono risolvere è trovare un valore nonce che faccia sì che il valore hash soddisfi le condizioni di estrazione.
Dai blocchi alla blockchain
Come visto nella sezione precedente, le transazioni sono raggruppate in blocchi e i blocchi vengono aggiunti alla blockchain. Per creare una catena di blocchi, ogni nuovo blocco utilizza l’hash del blocco precedente come parte dei suoi dati. Per creare un nuovo blocco, un minatore seleziona un insieme di transazioni, aggiunge l’hash del blocco precedente e estrae il blocco in un modo simile descritto in precedenza.
Qualsiasi modifica ai dati in qualsiasi blocco influirà su tutti i valori hash dei blocchi che verranno dopo di essa e diventeranno non validi. Ciò conferisce alla blockchain la sua caratteristica di immutabilità.
Aggiunta di blocchi alla Blockchain
Tutti i miner della rete Bitcoin competono tra loro per trovare un blocco valido che verrà aggiunto alla blockchain allo scopo di ottenere il premio dalla rete. Trovare un nonce che convalida un blocco è un’attività molto complessa, ma a causa del numero di miner, la probabilità che un miner nella rete convalidi un blocco è estremamente alta. Il primo minatore a presentare un blocco valido ottiene il suo blocco aggiunto alla blockchain e riceve la ricompensa in bitcoin. Ma cosa succede se due miner o più risolvono i loro blocchi allo stesso tempo?
Risolvere i conflitti
Se 2 miner risolvono un blocco quasi allo stesso tempo, allora avremo 2 diverse blockchain nella rete, e dobbiamo aspettare il prossimo blocco per risolvere il conflitto. Alcuni miner decideranno di minare sopra la blockchain 1 e altri sopra la blockchain 2. Il primo minatore a trovare un nuovo blocco risolve il conflitto. Se il nuovo blocco è stato estratto in cima alla blockchain 1, la blockchain 2 diventa non valida, la ricompensa del blocco precedente va al minatore dalla blockchain 1 e le transazioni che facevano parte della blockchain 2 e non sono state aggiunte alla blockchain indietro al pool di transazioni e vengono aggiunti ai blocchi successivi. In breve, se c’è un conflitto sulla blockchain, allora vince la catena più lunga.
Blockchain e Double-Spending
In questa sezione, tratteremo i modi più comuni per eseguire attacchi Double-Spending sulla blockchain e le misure che gli utenti dovrebbero adottare per evitare danni.
Race Attack
Un attaccante invia la stessa coin in rapida successione a due indirizzi diversi. Per evitare questo attacco, si consiglia di attendere almeno una conferma del blocco prima di accettare il pagamento.
Finney Attack
Un utente malintenzionato preleva un blocco con una transazione e spende le stesse coin in una seconda transazione prima di rilasciare il blocco. In questo scenario, la seconda transazione non verrà convalidata. Per evitare questo attacco, si consiglia di attendere almeno 6 conferme di blocchi prima di accettare il pagamento.
Majority Attack (anche chiamato 51% attack)
In questo attacco, l’attaccante possiede il 51% della potenza di calcolo della rete. L’attaccante inizia facendo una transazione che viene trasmessa su tutta la rete, e poi estrae una blockchain privata dove spende le monete della transazione precedente. Poiché l’attaccante possiede la maggior parte della potenza di calcolo, è garantito che a un certo punto avrà una catena più lunga della rete “onesta”. Può quindi rilasciare la sua blockchain più lunga che sostituirà la blockchain “onesta” e annullare la transazione originale. Questo attacco è altamente improbabile, in quanto è molto costoso nelle reti blockchain come Bitcoin.