Blockchain - Guida rapida

Negli ultimi anni c'è molto scalpore su Blockchain. Molti l'hanno descritta come la tecnologia più dirompente del decennio. Soprattutto, i mercati finanziari potrebbero essere i più colpiti.

La tecnologia è stata adattata a molti settori verticali come sanità, farmaci, assicurazioni, proprietà intelligenti, automobili e persino governi.

Tuttavia, finora l'implementazione di maggior successo di Blockchain è il Bitcoin - A Peer-to-Peer Electronic Cash System, che per inciso è anche la prima implementazione della tecnologia blockchain. Pertanto, per comprendere la tecnologia blockchain, è meglio capire come viene progettato e implementato Bitcoin System.

In questo articolo imparerai cos'è Blockchain, la sua architettura, come viene implementata e le sue varie funzionalità. Localizzerò l'implementazione di Bitcoin mentre descrivo le complessità della blockchain.

L'architettura blockchain non è così banale e molti hanno scritto buoni articoli, tutorial inclusi diversi video. Questi vanno dal pubblico principiante ai professionisti. In questo tutorial, mi concentrerò sulla comprensione concettuale dell'architettura blockchain, tenendo a mente sia i principianti che i professionisti. Prima di addentrarci nella blockchain, è importante sapere perché è emersa la necessità di questa nuova tecnologia? La risposta a questa domanda sta in ciò che è noto comeDouble − Spending.

Considera una situazione mostrata nell'immagine -

Come si vede chiaramente qui, Bob sta offrendo una fattura di $ 10 a Lisa in cambio di un libro. Una volta che Lisa riceve questa banconota fisica da $ 10, Bob non ha modo di riutilizzare questo denaro per qualche altra transazione, poiché la valuta fisica è ora in possesso di Lisa.

Ora, considera una situazione in cui il denaro viene pagato in forma digitale. Questo è illustrato nell'immagine -

Poiché il formato per lo scambio di denaro è in formato digitale, si tratta essenzialmente di un file fisico binario archiviato da qualche parte sul dispositivo di Bob. Dopo che Bob ha dato questo file (denaro digitale) a Lisa, può anche dare una copia del file ad Alice. Entrambi ora pensano di aver ricevuto il denaro senza avere alcun mezzo per autenticare la moneta digitale e quindi consegnerebbero i rispettivi beni a Bob. Questo è chiamatodouble-spending dove il mittente spende lo stesso denaro in più di un luogo per ottenere servizi o beni da più fornitori.

Per risolvere questo problema della doppia spesa, si impiegherebbe un'autorità centralizzata per monitorare tutte le transazioni. Questo è illustrato nell'immagine -

L'autorità centralizzata, che in termini comuni è la tua banca, mantiene un libro mastro che registra tutte le transazioni. Ora, Bob deve inviare il suo denaro digitale alla banca che farebbe una voce nel suo libro mastro addebitando il conto di Bob. Dopo essersi assicurato che Bob abbia un saldo sufficiente per pagare il denaro digitale che desidera inviare, invierà il denaro a Lisa accreditando il suo conto nel suo libro mastro.

Ora, è garantito che Bob non può spendere il doppio dei soldi. Se ogni transazione digitale fosse instradata attraverso un'autorità centralizzata come questa, il problema della doppia spesa sarebbe risolto. Ciò fornisce anche un altro vantaggio nel convalidare l'autenticità di ogni moneta (moneta digitale) che riceve nella transazione. Quindi il denaro falso (denaro duplicato come nel caso di Bob che paga ad Alice usando una copia) sarebbe facilmente rilevato e impedito dalla circolazione.

L'introduzione dell'autorità centralizzata sebbene risolva il problema della doppia spesa, introduce un altro problema importante: il costo della creazione e del mantenimento dell'autorità centralizzata stessa.

Poiché le banche hanno bisogno di denaro per le loro operazioni, iniziano a tagliare le commissioni su ogni transazione in valuta che fanno per i loro clienti. Questo a volte può diventare molto costoso, specialmente nel trasferimento di denaro all'estero in cui più agenti (banche) possono essere coinvolti nell'intera operazione.

Tutti i problemi di cui sopra sono risolti dall'introduzione della valuta digitale, chiamata Bitcoin. Ora ti fornirò un breve background su cosa sia Bitcoin prima di approfondire il suo design e architettura.

Il Bitcoin è stato introdotto in questo mondo da Satoshi Nakamoto attraverso un white paper in stile ricerca intitolato Bitcoin: A Peer-to-Peer Electronic Cash System nell'anno 2008.

Il Bitcoin non solo ha risolto il problema della doppia spesa, ma ha anche offerto molti altri vantaggi, uno di questi vantaggi che vale la pena menzionare qui è l'anonimato nelle transazioni. Satoshi che ha creato il sistema e ha effettuato transazioni con poche monete su questo sistema è totalmente anonimo per il mondo intero.

Immagina, in questo mondo di social media, quando è in gioco la privacy di ogni individuo, il mondo non è in grado di risalire fino ad ora chi è Satoshi? In effetti, non sappiamo se Satoshi è un individuo o un gruppo di persone. Cercarlo su Google ha anche rivelato il fatto che i bitcoin detenuti da Satoshi Nakamoto valgono circa $ 19,4 miliardi - quel denaro ora rimane non reclamato nel sistema Bitcoin. Allora, cos'è Bitcoin - diamo un'occhiata!

Cos'è Bitcoin?

Come hai visto in precedenza, la banca mantiene un registro che registra ogni transazione. Questo libro mastro è tenuto privatamente e gestito dalla banca. Satoshi ha proposto di lasciare che questo libro mastro fosse pubblico e mantenuto dalla comunità.

Nel momento in cui rendi pubblico un tale libro mastro, ti verranno in mente diverse considerazioni. Questo libro mastro deve essere a prova di manomissione in modo che nessuno possa modificare le sue voci. Poiché ogni voce del libro mastro è pubblicamente visibile, dovremo capire come mantenere l'anonimato - ovviamente non vorresti che tutti nel mondo sapessero che ti ho pagato un milione di dollari.

Inoltre, poiché esiste un solo registro che tiene traccia di ogni singola transazione nel mondo, la dimensione del registro sarebbe un'altra grande preoccupazione. Fornire una soluzione a queste complessità non è stato banale ed è quello che sto tentando qui per farti capire l'architettura sottostante di Bitcoin in parole semplici.

Questa architettura sottostante è Blockchained è di questo che tratta questo tutorial. Per comprendere l'architettura Blockchain, è necessario comprendere alcune caratteristiche chiave su cui si basa. Quindi, iniziamo con PKI - Crittografia a chiave pubblica.

La crittografia a chiave pubblica o in breve PKI è anche nota come crittografia asimmetrica. Utilizza due coppie di chiavi: pubblica e privata. Una chiave è un numero binario lungo. La chiave pubblica è distribuita in tutto il mondo ed è veramente pubblica come suggerisce il nome. La chiave privata deve essere mantenuta strettamente privata e non si dovrebbe mai perderla.

In caso di Bitcoin, se dovessi perdere la chiave privata del tuo portafoglio Bitcoin, l'intero contenuto dei tuoi portafogli sarebbe immediatamente vulnerabile al furto e prima che tu te ne accorga, tutti i tuoi soldi (i contenuti del tuo portafoglio) sarebbero spariti senza meccanismo nel sistema per rintracciare chi l'ha rubato: questo è l'anonimato nel sistema di cui ho parlato prima.

La PKI accompagna due funzioni: l'autenticazione e la privacy del messaggio tramite il meccanismo di crittografia / decrittografia. Spiegherò ora entrambe queste funzioni:

Autenticazione

Quando le due parti si scambiano messaggi, è importante stabilire un rapporto di fiducia tra il mittente e il destinatario. In particolare, il destinatario deve fidarsi della fonte del messaggio. Andando al nostro scenario precedente (illustrato nella Figura 1) di Bob che invia dei soldi a Lisa per l'acquisto di alcuni beni da lei, vediamo come la PKI costruisce questa fiducia tra Bob e Lisa. Guarda l'immagine qui sotto -

In primo luogo, se Bob vuole inviare del denaro a Lisa, deve creare una sua chiave pubblica / privata. Tieni presente che entrambe le chiavi sono sempre accoppiate e non puoi combinare le chiavi private e pubbliche di individui diversi o istanze diverse.

Ora, Bob dice che sta inviando $ 10 a Lisa. Quindi crea un messaggio (un messaggio di testo normale) contenente la chiave pubblica di Bob (mittente), la chiave pubblica (destinatario) di Lisa e l'importo ($ 10).

Nel messaggio viene aggiunto anche lo scopo di questa rimessa come "Voglio comprare la zucca da te". L'intero messaggio è ora firmato utilizzando la chiave privata di Bob. Quando Lisa riceve questo messaggio, utilizzerà l'algoritmo di verifica della firma di PKI e la chiave pubblica di Bob per assicurarsi che il messaggio provenga effettivamente da Bob. Il funzionamento della PKI va oltre lo scopo di questo tutorial. Il lettore interessato è rinviato a questo sito per una discussione più dettagliata su PKI. Ciò stabilisce l'autenticità del mittente del messaggio. Ora, esaminiamo la privacy del messaggio.

Privacy dei messaggi

Ora, poiché Lisa ha ricevuto il pagamento, desidera inviare il link al suo ebook che Bob desidera acquistare. Quindi Lisa creerebbe un messaggio e lo invierebbe a Bob come mostrato nell'immagine -

Lisa crea un messaggio del tipo "Ecco il collegamento al mio ebook che avevi richiesto", lo firma con la chiave pubblica di Bob che ha ricevuto nel messaggio di richiesta di Bob e crittografa anche il messaggio utilizzando una chiave segreta condivisa tra i due durante l'handshake HTTPS.

Ora, Lisa è sicura che solo Bob può decodificare il messaggio utilizzando la chiave privata detenuta da Bob da solo. Inoltre, qualcuno che intercetta il messaggio non sarebbe in grado di recuperarne il contenuto perché i contenuti sono crittografati da una chiave segreta detenuta solo da Bob e Alice. Ciò garantisce a Lisa che l'accesso al suo ebook è concesso solo a Bob.

Avendo visto entrambe le funzionalità, Autenticazione e Privacy dei messaggi, implicite da PKI, andiamo avanti per vedere come Bitcoin utilizza PKI per proteggere il registro pubblico che ho menzionato nel capitolo "Che cos'è Bitcoin?".

Per tua conoscenza - Gli algoritmi PKI più popolari sono RSA ed ECDSA , Bitcoin utilizza quest'ultimo.

Una delle funzioni più importanti in PKI è la funzione di hashing. Una funzione hash mappa i dati di qualsiasi dimensione arbitraria su dati di dimensione fissa. Bitcoin utilizza la funzione hash SHA-256 che produce un hash (output) di dimensioni 256 bit (32 byte). Questo è illustrato nell'immagine -

Bob, mentre effettua un ordine con Lisa, crea un messaggio simile a quello mostrato sopra. Questo messaggio viene sottoposto a hashing tramite una funzione hash che produce un hash di 32 byte. La bellezza di questo hash è a tutti gli effetti che l'hash (il numero a 256 bit) è considerato unico per il contenuto del messaggio. Se il messaggio viene modificato, il valore hash cambierà. Non solo dato un valore hash, è impossibile ricostruire il messaggio originale.

Dopo aver visto l'importanza dell'hashing, passiamo a un altro concetto di Bitcoin che è il mining.

Quando Bob crea una richiesta di acquisto per Lisa, non la invia solo a Lisa. Piuttosto il messaggio di richiesta viene trasmesso su tutta la rete a cui è connesso. La rete di Bob è rappresentata nell'immagine.

Il messaggio va a tutti i nodi (macchine) collegati. Alcuni dei nodi nel diagramma sono contrassegnati come minatori. Queste sono le macchine che eseguono un software per l'estrazione del messaggio bitcoin. Ora ti spiegherò cosa significa questo mining.

Processo minerario

Poiché l'intera rete è ampiamente distribuita, ogni minatore nella rete dovrebbe ricevere più messaggi da più fornitori in un dato periodo di tempo. Quello che fa il minatore è combinare questi messaggi in un unico blocco. Questo è illustrato nell'immagine -

Dopo che un blocco di messaggi è stato formato, il miner crea un hash sul blocco utilizzando la funzione di hashing descritta in precedenza. Ora, come sai se una terza parte modifica il contenuto di questo blocco, il suo hash diventerebbe non valido. Per inciso, ogni messaggio è timestampato in modo che nessuno possa modificare il suo ordine cronologico senza influenzare il valore hash del blocco. Pertanto, i messaggi nel blocco sono perfettamente protetti da manomissioni. Come questo fatto viene utilizzato per proteggere tutte le transazioni nella rete viene spiegato ulteriormente.

I blocchi creati da vari minatori sono concatenati insieme per formare quello che è noto come un registro pubblico veramente distribuito.

Ogni blocco nella catena contiene più messaggi (transazioni) come visto in precedenza nella Figura 8. Un blocco nella catena può provenire da qualsiasi miner. Durante la creazione della catena di blocchi, osserviamo la regola che l'hash del blocco precedente viene aggiunto al blocco corrente.

Pertanto, un minatore durante la creazione del blocco, raccoglie l'hash dell'ultimo blocco della catena, lo combina con il proprio set di messaggi e crea un hash per il blocco appena creato. Questo blocco appena creato diventa ora la nuova estremità per la catena e quindi la catena continua a crescere man mano che sempre più blocchi vengono aggiunti dai minatori.

Poiché tutte le transazioni sono contrassegnate dall'orario, è necessario implementare un server di marca temporale distribuito su una rete peer-to-peer. Ciò richiede un'implementazione aggiuntiva e questa è la prova di lavoro che descriverò ora. A ogni blocco, ora aggiungiamo un altro elemento chiamatoNonce come mostrato nella figura sotto -

Nonce è un numero tale che l'hash del blocco soddisfa un certo criterio. Questo criterio potrebbe essere che l'hash generato deve avere le sue quattro cifre iniziali per essere zero.

Pertanto, l'hash generato sarebbe 000010101010xxx. Generalmente, il miner inizia con un valore Nonce di 0 e continua ad incrementarlo fino a quando l'hash generato non soddisfa il criterio specificato.

Nota che la generazione di hash funziona in modo casuale ed è al di fuori del tuo controllo, ovvero non puoi forzare la funzione hash per generare un determinato hash. Pertanto, potrebbero essere necessarie diverse iterazioni prima che venga generato l'hash desiderato con quattro zeri iniziali. Il tempo previsto per la generazione di un blocco nel sistema bitcoin è di 10 minuti. Una volta che il minatore ha estratto con successo il blocco, lo rilascia nel sistema rendendolo ora l'ultimo blocco della catena.

Nota che ci sono più minatori in competizione per generare il blocco legittimo. Il sistema Bitcoin premia il primo minatore di successo dandogli determinati bitcoin. In generale, il miner con più potenza di calcolo potrebbe essere un vincitore iniziale. Ciò può causare attacchi all'intero sistema da parte di coloro che possiedono un'enorme potenza di elaborazione. Descriverò gli attacchi e come questi vengono mitigati verso la fine di questo tutorial.

Riassumo ora i passaggi sopra descritti; questo è ciò che accade nella rete -

  • Chiunque desideri ottenere servizi dalla terza parte che ha fatto pubblicità sulla rete crea prima una transazione (messaggio al destinatario desiderato).

  • In un dato periodo di tempo, potrebbero esserci molti mittenti (acquirenti) e destinatari (venditori) che creano tali transazioni.

  • Tutte le transazioni vengono trasmesse sulla rete a tutti i nodi. Notare che non è necessario che una determinata transazione raggiunga ogni altro nodo della rete.

  • Ogni nodo assembla le nuove transazioni in un blocco. Si noti che l'insieme di transazioni in ciascun blocco è indipendente dall'insieme di blocchi creati da altri e sarà naturalmente diverso dagli altri. Non importa; il sistema garantisce che ogni transazione trasmessa sulla rete venga inclusa in un blocco per un periodo di tempo ragionevole. Generalmente, il mittente incentiverà il nodo offrendo una certa quantità di bitcoin al miner per i suoi sforzi. Il miner può optare per dare priorità all'inclusione nel blocco a chi ha maggiori incentivi.

  • Il nodo ora lavora per trovare la prova di lavoro per il suo blocco assemblato.

  • Quando il nodo trova una prova di lavoro, trasmette il blocco assemblato sulla rete.

  • I nodi che riceveranno il nuovo blocco lo accetteranno solo dopo aver verificato che tutte le transazioni nel blocco siano valide e non già spese.

  • Se il blocco viene accettato come valido, il nodo che sta lavorando sul proprio nuovo blocco dovrà riassemblare le transazioni nel proprio blocco assicurandosi che le transazioni non vengano duplicate. Il nodo ora lavora per trovare la prova di lavoro nel blocco appena creato; mentre lo fai, prenderà l'hash del blocco accettato come l'hash precedente.

  • Allo stesso modo, la blockchain continua a crescere per sempre.

Ora, poiché abbiamo visto come funziona l'intero sistema, lasciatemi descrivere alcuni degli effetti collaterali e come risolverli.

Come abbiamo visto nel capitolo Bitcoin - Mining, un minatore può essere sommerso da molte transazioni in un dato periodo di tempo. La dimensione massima di un blocco è predefinita nel sistema, pertanto nel blocco deve essere incluso solo un certo numero di transazioni.

Il numero di transazioni nel blocco è determinato dalla dimensione del blocco predefinita e dalla lunghezza media di ogni blocco. Un suggerimento importante qui è che il mittente non dovrebbe includere troppe informazioni nel suo messaggio in modo da renderlo breve e quindi incentivare il miner ad accettarlo prima degli altri messaggi lunghi.

Un mittente in genere aggiungerà anche una commissione di transazione in termini di un certo numero di bitcoin in modo da incentivare il miner per l'inclusione anticipata nel suo blocco.

L'altra conseguenza nella costruzione della blockchain è la sua mera dimensione. Per un periodo di tempo, l'intera blockchain potrebbe diventare troppo grande per consentire a un nodo di memorizzarla sul proprio disco. Questo viene risolto utilizzando Merkle Tree che è descritto di seguito.

Il problema dello spazio su disco in un nodo è facilmente risolvibile perché tutte le transazioni in un blocco vengono sottoposte ad hashing in un Merkle Tree come mostrato nell'immagine -

L'intestazione del blocco ora contiene l'hash del blocco precedente, un Nonce e il file Root Hashdi tutte le transazioni nel blocco corrente in un Merkle Tree. Come questoRoot Hashinclude gli hash di tutte le transazioni all'interno del blocco, queste transazioni possono essere eliminate per risparmiare spazio su disco. Quindi ora la tua blockchain apparirà come nell'immagine qui sotto -

Ciò può comportare un notevole risparmio di spazio su disco. Questa strategia viene utilizzata da un normale cliente che è interessato solo a ricevere pagamenti da altri. Tuttavia, i miner devono salvare l'intera blockchain. Ora sorge la domanda, come un destinatario verifica il pagamento senza avere la possibilità di rintracciare una moneta ricevuta fino alla sua origine. Questo è spiegato di seguito.

Considera un caso in cui, come venditore, potresti voler verificare un determinato pagamento effettuato in passato. Poiché la blockchain che stai tenendo sulla tua macchina contiene solo le intestazioni di blocco come mostrato nella figura precedente, la transazione che stai cercando non è presente nella copia della tua blockchain.

Ora puoi cercare all'indietro nella tua copia della blockchain fino a trovare un blocco in cui la transazione desiderata è timestamp. Ora, richiedi l'albero merkle del blocco selezionato e avrai la transazione che stai cercando. Ciò è illustrato nella figura seguente:

Qui, supponiamo che tu stia cercando Tx103. Anche se potresti non essere in grado di vedere il contenuto di Tx103, sai che questo è stato accettato dal blocco a cui appartiene e da tutti i blocchi successivi nella catena. Pertanto, puoi fidarti in sicurezza di questa transazione e procedere con la tua attività.

Come abbiamo visto la rete Bitcoin contiene diversi minatori. È possibile che i due diversi minatori risolvano la prova di lavoro contemporaneamente e quindi aggiungano i loro blocchi all'ultimo blocco noto della catena. Ciò è illustrato nell'immagine sottostante:

Ora, abbiamo due rami dopo il blocco 3. Entrambi i rami sono validi. Quindi il blocco successivo estratto può essere aggiunto in uno dei rami. Supponiamo che il minatore aggiunga il blocco appena estratto al Blocco 104-A, il ramo contenente il Blocco 104-A sarà più lungo del ramo contenente il Blocco 104-B. Questo è illustrato nell'immagine sottostante -

Nell'architettura Bitcoin, il ramo più lungo vince sempre e quelli più corti vengono eliminati. Quindi il blocco 104-B deve essere eliminato. Prima di eliminare questo blocco, tutte le transazioni in questo blocco verranno restituite al pool di transazioni in modo che vengano estratte e aggiunte a un blocco futuro. In questo modo vengono risolti i conflitti e il sistema mantiene una sola catena di blocchi.

Poiché il libro mastro che sta registrando tutte le transazioni bitcoin è reso veramente pubblico, è in gioco la privacy. Qualcuno al mondo potrebbe sapere chi ha pagato chi? Il sistema bancario tradizionale è in grado di mantenere questo tipo di privacy mantenendo riservati i propri registri.

La privacy nel sistema Bitcoin si ottiene con una strategia diversa. Nota che abbiamo detto che il mittente di un bitcoin deve sapere chi pagare. Quindi chiede la chiave pubblica del venditore a cui desidera effettuare il pagamento. Questa chiave pubblica può essere anonima.

Nel senso, come venditore di alcuni servizi, quando qualcuno ti chiede dove inviare il pagamento, gli mandi semplicemente la tua chiave pubblica. L'associazione di questa chiave pubblica con te non è registrata da nessuna parte nel libro mastro. In questo modo chiunque al di fuori di questa transazione saprebbe solo quanto denaro viene negoziato e a quale chiave pubblica viene pagato il denaro.

Per ottenere un livello di privacy più elevato, per ogni transazione, puoi generare una nuova chiave privata / pubblica per ogni transazione in modo che più transazioni effettuate da te non possano essere raggruppate da terzi. Per un estraneo, ciò significherebbe semplicemente che sono state effettuate più transazioni di valore inferiore e non saranno mai collegate a una fonte comune.

Infine, qualsiasi sistema basato su Internet online è vulnerabile agli abusi. Descriverò ora alcuni possibili tipi di attacchi al sistema Bitcoin e come questi vengono mitigati.

Discuterò tre diversi tipi di probabili attacchi nel sistema Bitcoin -

Race Attack

In qualità di aggressore, puoi inviare la stessa moneta a diversi fornitori in rapida successione, probabilmente utilizzando due macchine diverse. Se i fornitori non attendono la conferma del blocco prima di consegnare la merce, si renderanno presto conto che la transazione è stata rifiutata durante il processo di mining. La soluzione a questo tipo di attacco è che il venditore deve attendere almeno una conferma di blocco prima di inviare la merce.

Finney Attack

In questo caso, l'attaccante è il minatore. Il minatore estrae un blocco con la sua transazione e non lo rilascia nel sistema. Ora utilizza le stesse monete in una seconda transazione e quindi rilascia il blocco pre-minato. Ovviamente, la seconda transazione verrebbe rifiutata alla fine da altri miner, ma ci vorrà del tempo. Per mitigare questo rischio, il venditore dovrebbe attendere almeno sei conferme di blocco prima di rilasciare la merce.

L'attacco del 51%

In questo tipo di attacco, ipotizziamo poco pratico che qualcuno possieda il 51% della potenza di calcolo della rete. L'aggressore in questo tipo di attacco estrae una blockchain privata dove spende due volte le monete.

Poiché possiede la maggior parte della potenza di calcolo, è garantito che la sua blockchain privata a un certo punto del tempo sarebbe più lunga della catena della rete "onesta". Quindi rilascia la sua blockchain privata nel sistema rendendo non valide tutte le transazioni registrate in precedenza nella blockchain onesta.

Questo tipo di attacco è fittizio in quanto è molto costoso acquisire una potenza di calcolo pari o superiore al 51% della potenza di calcolo dell'intera rete.

In questo breve tutorial sei stato introdotto a diversi concetti di Blockchain prendendo Bitcoin come caso di studio. Il Bitcoin è la prima implementazione di successo della blockchain. Oggi, il mondo ha trovato applicazioni della tecnologia blockchain in diversi settori, dove si desidera la fiducia senza il coinvolgimento di un'autorità centralizzata. Quindi benvenuto nel mondo di Blockchain.

Ulteriori letture -