BITCOIN IN ITALIANO

BLOG


Perché Bitcoin funziona: Per i Neofiti

Traduzione dell'originale di Shinobi [SHI256] - Pubblicato il 29 gen 2021

Questo non è per i Bitcoiners, questo è per i nuovi arrivati. Ho tentato di ridurre ai minimi termini un'analisi completa di Bitcoin/blockchains (e perché non sono magici database nel cloud) che dovrebbe essere digeribile per i nuovi arrivati relativamente tecnici. Fatene un Bookmark per passarlo in giro se ne avete bisogno.

Bitcoin (e le blockchain in generale) sono un concetto molto contro intuitivo, anche per le persone che hanno familiarità con i sistemi tecnici distribuiti. Per capire veramente come funzionano questi sistemi, una cosa deve essere compresa sopra ogni altra: queste cose sono solo database. Sono database con speciali proprietà crittografiche, ma sono ancora solo database, 1 e 0 su un hard disk da qualche parte in cui la gente legge e scrive. O avete una copia di quel database, o vi fidate che qualcun altro mantenga una copia del database e vi permetta di leggere e scrivere su di esso.

La Criptovaluta

Ora passiamo alle speciali proprietà crittografiche utilizzate dalle blockchain: il primo pezzo importante da capire è una funzione hash.

Una funzione di hash prende in input un quantitativo di dati - di dimensioni arbitrarie - e restituisce come output un altro quantitativo di dati - di dimensioni fisse - unico per quell'input.

Per esempio, inserendo la frase precedente in questo generatore di hash produce il seguente hash:

86FEB086BB04E438E0EAC9AAE4C3092DC7E2CE453D41420E67555D5BE169D8D2

Quell'hash è un'impronta digitale unica della frase che l'ha creato, e le probabilità di trovare qualsiasi altro input per quella funzione hash che crei lo stesso hash è, per tutti gli scopi pratici, matematicamente impossibile. Questo è uno dei blocchi fondamentali utilizzati per fornire le speciali proprietà crittografiche di una blockchain.

Il prossimo pezzo importante della crittografia è un albero di Merkle. Questa è una struttura di dati che fa uso di hash sui singoli pezzi di dati per creare un hash aggregato di molti hash individuali. L'entità che costruisce l'albero di Merkle prende ogni singolo pezzo di dati (in questo caso, le singole transazioni sulla blockchain), e ne crea un hash. Da qui, ogni coppia di hash viene sottoposta a hash (se c'è un numero dispari di dati, allora l'hash dispari viene sottoposto a hash con un duplicato di se stesso), e così via fino a quando si ottiene un unico hash. Questo è il modo in cui le effettive transazioni individuali in un blocco sono impegnate crittograficamente in un modo che è impossibile da alterare. Pensatelo come una piramide dove ogni livello fino alla cima ha la metà degli hash di quello sotto di esso. Cambiare un singolo bit digitale di informazione in una singola transazione altererebbe l'hash per ogni punto di questo albero di merkle fino alla cima. Questo permette ad ogni pezzo di dati (transazioni) nell'albero di essere provato come incluso nell'albero con il pezzo di dati stesso, e tutti gli hash necessari su per l'albero per provare che è una parte del singolo hash della radice in cima.
Questa prova di inclusione da sola non fornisce alcuna garanzia sulla validità delle cose incluse nell'albero di Merkle, solo che i singoli elementi nell'albero erano presenti quando l'albero è stato creato (cioè spendere monete senza firme valide, creare monete dal nulla, ecc.)

Ogni aggiornamento al database della blockchain è un "blocco" discreto. Questo ci porta all'"intestazione del blocco", che fa anche uso di hash. L'intestazione del blocco è un pezzo di dati di 80 byte che contiene tutte le informazioni di cui sopra (notate la radice di Merkle? Questo è l'hash superiore dell'albero di tutte le transazioni nel blocco). La sezione Version è semplicemente un campo rilevante per gli aggiornamenti che sorvoleremo in una vista di alto livello come questa. IlPrevious Block Hash è l'hash dell'intestazione del blocco precedente nella blockchain. Il Timestamp è l'ora e la data in formato UNIX timestamp. Il Difficulty Target è una delle parti dell'intestazione relative al mining di bitcoin. Se ricordate da sopra l'hash della frase nell'esempio di hashing era:

86FEB086BB04E438E0EAC9AAE4C3092DC7E2CE453D41420E67555D5BE169D8D2

L'obiettivo di difficoltà (Difficulty Target) in Bitcoin è più o meno un requisito: l'hash dell'intestazione del blocco deve avere un certo numero di zeri sulla parte anteriore dell'hash. Ora, se facciamo finta che la frase usata per ottenere quell'hash sia un blocco, è chiaro che non ha assolutamente nessuno zero sul davanti, quindi è inutile come blocco. Immaginate se aggiungessi il numero 1 alla fine della frase. E se potessi cambiarlo in 2 se l'hash non ha abbastanza zeri, e 3, e così via. Ecco a cosa serve il Nonce. Se fate un albero Merkle di transazioni e mettete il suo hash radice nell'intestazione del blocco, e l'hash non ha abbastanza zeri iniziali per soddisfare l'obiettivo di difficoltà, potete cambiare il Nonce e di conseguenza l'hash. Tutti sulla rete tengono traccia della difficoltà (e controllano che il nuovo blocco soddisfi o superi il Difficulty Target), e i minatori competono per generare un blocco con abbastanza zeri iniziali da essere considerato valido. Ogni 2016 blocchi (circa due settimane) la difficoltà della rete cambia per cercare di mantenere il tempo tra i blocchi su una media di 10 minuti. Il software Bitcoin stima statisticamente la quantità di potenza di calcolo richiesta ad un certo Difficulty Target per produrre blocchi su una media di 10 minuti, e la confronta con la frequenza con cui i blocchi sono stati creati in base ai loro Timestamp.

Questo è essenzialmente ciò che è una blockchain: una catena di intestazioni di blocchi consecutivi con obiettivi di difficoltà che soddisfano l'attuale requisito di difficoltà della rete, che hanno Timestamp per verificare che tutti i cambiamenti per l'obiettivo di difficoltà sono stati fatti accuratamente per ottenere blocchi di 10 minuti (almeno nel caso di Bitcoin, altre blockchain possono puntare a intervalli arbitrari).

Da qui passiamo all'ultimo pezzo di crittografia coinvolto, le firme digitali. Se volete fare un'immersione profonda nel lato matematico delle cose, c'è un link e fatelo. In caso contrario, cercherò di semplificare il più possibile per contestualizzare il tutto nella visione generale di alto livello di una blockchain.

Si genera un numero casuale molto grande, che può essere usato con una funzione matematica per ricavare un altro numero grande. Finché si può mantenere il primo numero completamente segreto, si può condividere il secondo con tutto il mondo. Usando il numero che condividi con il mondo intero, chiunque può prendere quel numero pubblico e verificare una "firma" che fai con il numero segreto. Questo viene realizzato con un protocollo per generare le firme con il numero segreto, e un secondo protocollo per verificare le firme dal numero segreto corrispondente usando quello pubblico. Un protocollo prende il numero segreto e un messaggio (una transazione Bitcoin), e sorvolando su molti dettagli matematici di basso livello, moltiplica effettivamente il messaggio per il numero segreto per ottenere una firma. Il secondo protocollo prende una firma prodotta dal primo, e il numero pubblico corrispondente, e con un'operazione matematica equivalente verifica che la firma provenga dal numero segreto corretto senza rivelarlo. Questo è ciò che permette di far rispettare la proprietà di Bitcoin. Ogni transazione sulla blockchain di Bitcoin è un insieme di input (monete esistenti) e output (monete create con la transazione) con firme per ogni input della transazione per dimostrare che è legittimamente autorizzata. Se si perdono le chiavi private (i numeri segreti) si perdono le monete.

Gli incentivi

Tutte le transazioni sulla rete Bitcoin consumano "input" (monete non spese) e creano output (le nuove monete non spese create quando una transazione è confermata). I minatori sono autorizzati a creare transazioni speciali che mettono in circolazione nuovi Bitcoin. (Questo è l'ultimo inciso per dire che altri sistemi possono fare altre cose, sto parlando di Bitcoin da qui in poi) Oltre a rivendicare nuove monete messe in circolazione, i minatori sono autorizzati a rivendicare commissioni dalle transazioni per la loro elaborazione. Le commissioni sono decise dall'entità che firma una transazione quando viene creata. Ogni input di transazione valida esistente ha un numero di satoshi (l'unità di base del Bitcoin) associato ad esso. Una transazione può creare un numero arbitrario di output con valori di satoshi non superiori a quelli degli input. Le transazioni possono creare un insieme di output con un valore aggregato che è inferiore a quello degli input. La differenza di questi importi (commissioni di transazione) può essere rivendicata dai minatori del blocco in cui le transazioni sono contenute, oltre alla nuova quantità di monete messe in circolazione. I minatori svolgono il ruolo di mettere in circolazione nuovi bitcoin ad un costo, guadagnando anche commissioni per l'elaborazione delle transazioni includendole nei loro blocchi.

Il funzionamento dell'hardware necessario per trovare intestazioni di blocco valide ha i costi dell'hardware stesso e dell'elettricità necessaria per farlo funzionare. Più persone fanno funzionare l'hardware di estrazione, più difficile (e più costoso) sarà estrarre bitcoin in relazione a quanto è redditizio. Questo è il motivo per cui la gente si riferisce a Bitcoin come "immutabile". Ogni blocco che aggiorna il database è parte di una catena di hash collegati insieme con un costo dimostrabile per creare ogni nuovo collegamento. Quel costo significa che per tornare indietro e modificare i blocchi precedenti nel database, bisogna rifare il lavoro e spendere il doppio dell'energia. Ogni persona con una copia della blockchain che osserva gli aggiornamenti (altri minatori, utenti che convalidano i fondi che ricevono, aziende, ecc.) considererà sempre la versione della blockchain con il maggior "costo" cumulativo affondato in essa lo stato valido del database, finché ogni transazione nella blockchain non viola alcuna regola. Una brevissima lista di esempi (anche se per nulla esaustiva):

Dato che tutti guardano e verificano, i minatori possono reclamare le loro entrate solo se forniscono una prova del costo sostenuto attraverso una valida intestazione di blocco e seguono tutte le regole della blockchain. Solo allora i partecipanti al mercato considereranno una transazione come avvenuta e onoreranno l'altro lato dell'interazione economica.

Il quadro più ampio

Quindi cosa diavolo è Bitcoin? È un database. Un database che rappresenta denaro con una fornitura predeterminata e un programma di inflazione. Un database che memorizza queste cose in un modo che permette la verifica della sua integrità. Come fai a sapere di possedere effettivamente la capacità di spendere vero Bitcoin se non hai verificato la validità di ogni singola transazione fino al momento in cui ogni satoshi di valore che ti è stato inviato è stato messo in circolazione dai minatori? Come fate a verificare quella catena di transazioni se non verificate tutte le transazioni nella blockchain? Ricorda, un blocco non è valido se una singola transazione non valida è in esso. Qualsiasi blocco costruito su un blocco non valido è anch'esso non valido.

In definitiva Bitcoin è solo una macchina della "verità", e ho messo la verità tra virgolette per un motivo. Cosa prova la verità? L'intestazione di un blocco prova che un certo numero approssimativo di hash sono stati fatti su di esso, spendendo energia, per soddisfare l'obiettivo di difficoltà. L'albero di merkle prova l'insieme di transazioni che una specifica intestazione di blocco ha impegnato. Ciò che queste cose non provano da sole è che tutto nella blockchain sia valido secondo le regole. Per provarlo, gli utenti devono effettivamente scaricare e verificare linearmente che ogni transazione in ogni blocco segua tutte le regole (oltre a verificare le intestazioni di blocco e gli alberi di merkle che si impegnano nelle transazioni).

Qui sta il paradosso del Bitcoin e delle blockchain. La crittografia incentiva la blockchain ad andare avanti, permette di garantire che i trasferimenti di proprietà siano legittimamente autorizzati, ma non garantisce da sola l'integrità del sistema globale monetariamente. L'unica cosa che lo garantisce sono gli utenti del sistema che verificano completamente la totalità della blockchain rispetto alle regole quando interagiscono con essa. Dovrebbe essere intuitivo perché questo può presentare problemi al sistema nel suo complesso se la maggior parte delle persone non può verificare la blockchain perché è troppo grande. Qual è la differenza tra questo e un database bancario o AWS? Se un utente non può verificare la blockchain da solo, deve fidarsi ciecamente di qualsiasi entità lo stia facendo per suo conto. Se verificare la blockchain diventa proibitivo, allora è possibile che un gruppo abbastanza piccolo finisca per essere gli unici verificatori per essere in grado di cambiare le regole che stanno seguendo senza che gli utenti se ne accorgano.

Bitcoin e la blockchain che lo alimenta possono realizzare cose rivoluzionarie nell'estendere l'accesso a un bene e una rete per trasferirlo che non può essere spenta o chiusa a persone indesiderabili. Ma può realizzare queste cose solo se è pratico per gli utenti scaricare e convalidare completamente la blockchain storica. Se gli utenti non possono farlo, allora fondamentalmente non è diverso dal cloud o dalle banche di una volta. Se non puoi verificare la blockchain, sei soggetto ai ciechi capricci di chiunque lo stia facendo per te. Proprio come JP Morgan o Twitter.

- Shinobi [SHI256]