Come Funziona Bitcoin: Il Protocollo (3/3) [Understanding Bitcoin-Part 2]

Verdi
12 min readSep 21, 2018

--

Questo articolo è la traduzione della seconda sezione di ‘Understanding Bitcoin’, un ebook guida gratuito prodotto da Silas Barta e Robert P. Murphy, scaricabile visitando questo sito, dove è anche possibile donare agli autori. Silar Barta scrive sul suo blog in merito a diversi argomenti, tra cui Bitcoin, finanza e teoria dell’informazione, mentre Robert P. Murphy è autore di diversi libri nel campo della scuola austriaca di economia, oltre ad essere co-host del podcast Contra Krugman insieme a Tom Woods.

Sezione precedente — Come Funziona Bitcoin: Il Protocollo (2/3)

Come Accordarsi sull’Ordine delle Transazioni: I Sistemi Proof-of-Work

Sebbene il processo che abbiamo descritto nella sezione precedente sia ingegnoso, si tratta di una soluzione al problema della firma digitale già conosciuta, e non è certo l’innovazione più importante che Bitcoin ha introdotto. L’elemento rivoluzionario del protocollo è la soluzione al secondo problema che abbiamo indicato: Come mettere tutti d’accordo sulle transazioni da includere nel registro globale? Le firme digitali, di cui abbiamo parlato nella sezione precedente, garantiscono la capacità di dimostrare che una transazione è stata effettivamente autorizzata; impediscono a un estraneo di spendere i soldi di qualcun altro. Ma cosa succede se qualcuno firma due transazioni contenenti gli stessi bitcoin (o gli stessi numeri, per continuare la nostra analogia) verso due persone diverse? Del resto, se Jack il truffatore è in grado di generare firme correttamente per i suoi indirizzi in modo da dimostrare di aver eseguito un comando per trasferire bitcoin a un’altra persona, la comunità necessita di un metodo per verificare che, innanzitutto, tali bitcoin appartengano davvero a Jack! In altre parole, la comunità deve premunirsi contro un proprietario legittimo che cerca di spendere i propri soldi più di una volta. Questa minaccia è conosciuta come il problema del “double spending.”

Ecco dove la brillante soluzione di Bitcoin entra in gioco. Per inciso, noi, gli autori di questa guida (Barta e Murphy), siamo sempre stati interessati alla possibilità teorica della moneta emessa a titolo privato, ma abbiamo sempre dato per scontato la necessità di un ente centrale in veste di “autorità” che decidesse quali transazioni all’interno del suo network fossero da considerare valide, ipotizzando che la competizione tra monete avrabbe impedito l’abuso di tale potere. Tuttavia, abbiamo scoperto che anche questo presupposto non è necessario: è possibile risolvere contenziosi monetari e contabili senza un ente di fiducia. E’ questa la vera innovazione integrata nella elegante whitepaper di Satoshi Nakamoto su Bitcoin. In seguito descriviamo il metodo utilizzato per risolvere il problema del double spending.

La Blockchain: Coordinare lo Stesso Registro di Transazioni

In una frase, il modo in cui Bitcoin convince tutti a convenire su un registro è una regola stabilita nel protocollo, che possiamo describere come:

Il trucco centrale di Bitcoin: Di tutti i registri validi, usa quello in cui è stata investita la maggior quantità di lavoro comprovato.

Ovviamente, per chiunque non conosca il sistema, e non sia ferrato nel campo della crittografia, questa soluzione solleva nuovi interrogativi:

1) Come faccio a sapere quanto lavoro è stato investito in qualcosa?

2) Come fanno le persone a investire lavoro nel registro?

3) Per quale motivo le persone investono lavoro nel registro?

Rispondiamo a queste domande una alla volta.

Proof of Work: Tiriamo a Indovinare

Prima di tutto, un’analogia: immagina un gioco in cui provi a indovinare un numero scelto da un tuo amico, compreso tra 1 e 1000. Il tuo amico sceglie un numero in segreto e dopo ogni tentativo ti dice se hai trovato quello giusto. (Ti dice solo “si” o “no”, senza dare altre informazioni.)

In media, ti serviranno 500 tentativi per vincere. Se tu e il tuo amico giocate per un gran numero di volte, possiamo supporre che, facendo appunto la media, otterremo approssimativamente questa cifra. In questo senso, possiamo dedurre che il numero totale di tentativi fatti si aggiri intorno al numero di vittorie moltiplicato per 500. Quindi il gioco funziona come una specie di “proof of work,” simile al processo utilizzato da Bitcoin: il fatto che sei riuscito a vincere X volte è la prova (anche solo statistica) che hai realizzato 500*X tentativi.

Proof of Work Crittografica: Tiriamo a Indovinare con degli Scrambler

Le tecniche crittografiche permettono di giocare a un gioco simile, che coinvolge quelle che chiameremo “Funzioni Scrambler” (in gergo, funzioni unidirezionali crittograficamente sicure). Queste funzioni sono facili da calcolare in una direzione, ma difficili da invertire. Vale a dire che, dato un input A e una funzione scrambler f(A), è facile calcolare f(A). Tuttavia, conoscendo solo l’output f(A), è possibile trovare A solo tirando a indovinare tutti i possibili input. Il lettore potrebbe notare la somiglianza con le “Funzioni Speciali” di cui abbiamo parlato nella sezione precedente. Effettivamente, sono quasi la stessa cosa. L’unica differenza sta nel fatto che le “Funzioni Scrambler” non hanno una “trapdoor”, ovvero non c’è una conoscenza segreta che permette di invertirle velocemente.

Queste funzioni portano alla “variante crypto” del gioco precedente. Invece di scegliere un numero segreto, il tuo amico ti dice il suo numero, e la sfida sta nel trovare un numero di input che, inserito nella Funzione Scrambler, produce il numero scelto. E’ lo stesso grado di difficoltà del gioco originale, ma permette al tuo amico di pubblicare il suo numero in anticipo, di modo che tutti possano vederlo.

Esempio del Gioco Crittografico Descritto

Prendiamoci un momento per capire come funziona questa variante crittografica. Useremo una funzione scrambler semplice, troppo debole per funzionare nella pratica, ma complessa a sufficienza per dimostrare la difficoltà di “inversione” e provare che la mossa migliore è tirare a indovinare.

La funzione scrambler sarà “eleva alla 3° potenza, mod 17”, o:

f(x) = x3 mod 17

Cioè, moltiplica il numero di input per se stesso tre volte — se il numero è 5, l’operazione sarà 5 x 5 x 5 — e trova il resto della divisione tra il numero ottenuto e 17.

Alice e Bob giocano, Alice sceglie il numero segreto e Bob cerca di indovinare. Invece di tenerlo a mente, Alice “dichiara” pubblicamente la “scrambled version” del numero, conosciuta come la sua hash. Quindi, sceglie un numero, lo inserisce nella f(x) indicata sopra, e dichiara il valore ottenuto. Supponiamo che scelga il numero 9 (Gli unici numeri che può scegliere sono compresi tra 0 e 16 a causa dell’operazione mod 17.)

Utilizza la formula per calcolare f(9) = 15 e dichiara il valore di 15. (93 = 9x9x9 = 729. Poi 729 diviso per 17 fa 42 “più il resto.” Ma 42x17 = 714, quindi dividendo 729 per 17, il risultato è 42 con un resto di 15. (Notare che 729–714 = 15.)) Ora tocca a Bob tirare a indovinare e inserire numeri nella funzione fino a quando non trova quello che produce il risultato di 15. Potrebbe seguire la tabella riportata sotto:

Si fermerebbe a x=9, dato che ha ottenuto il risultato 15. (Tieni presente che non gli è servito chiedere a Alice di verificare i suoi tentativi, è in grado di stabilire da solo quale fosse quello giusto.) Come puoi vedere, ci sono 17 possibili input. Se ignoriamo lo zero e supponiamo che Alice abbia scelto il numero a caso, Bob deve controllare, in media, 8 numeri (la metà di 16), prima di trovare la risposta esatta per il numero dichiarato da Alice.

In questo modo è possibile stabilire che ci sono dei giochi “a prova di baro” in cui puoi essere ragionevolmente certo della quantità di “lavoro” che qualcuno ha investito per vincere. Se qualcuno vince un gioco di questo tipo, in cui ci sono N valori possibili, la persona ha, in un certo senso, dimostrato di aver “investito” N/2 tentativi. A volte può succedere di avere fortuna e vincere con un minor numero di tentativi, e a volte ne servono di più, ma il valore di media si trova dopo diverse vittorie.

Tuttavia, anche se puoi dimostrare di aver investito “lavoro pari a 500 tentativi,” rimane la domanda:

Come fanno le Persone a Investire Lavoro nel Registro di Bitcoin?

Abbiamo detto che è possibile giocare — e ottenere la risultante proof of work — basandosi su un numero pubblico. In Bitcoin, questo numero è generato in base al registro. Si prende il registro con la proof of work più grande, si aggiungono le nuove transazioni (firmate) ricevute e non ancora incorporate, e si produce un numero target, determinato unicamente da questi input.

La persona che ha effettuato il tentativo vincente (trovando un numero che, quando inserito nello Scrambler, porta al target o a un valore abbastanza vicino), ottiene una proof of work associata a un aggiornamento del registro (conosciuto nel mondo del Bitcoin come un blocco). In senso stretto, il “numero target” viene combinato con il tuo tentativo e inserito nella funzione, con l’obiettivo di produrre un output che si avvicini abbastanza allo zero, ma i problemi sono equivalenti.

Quando altri utenti decidono quale registro di transazioni considerare quello definitivo, contano tutto il lavoro comprovato investito negli aggiornamenti precedenti, più il lavoro associato all’aggiornamento che stai proponendo. Questo significa che ti viene presentato un incentivo che porta a scegliere il “set di aggiornamenti del registro” (blockchain) che possiede attualmente la maggior quantità di lavoro investito, dato che andrai a reclamare tale lavoro, aggiungendo il lavoro che hai investito per il tuo aggiornamento.

Per quale Motivo le Persone Investono Lavoro nel Registro?

In breve, il motivo è dato da un’altra regola nel protocollo: Se trovi una soluzione puoi reclamare 25 nuovi bitcoin per te o per qualsiasi indirizzo di tua scelta. (Con nuovi bitcoin si intende unità che non erano precedentemente in circolazione.) Questa ricompensa è ciò che ha portato al “mining,” come viene chiamato nel settore: l’uso di computer specializzati per generare soluzioni il più velocemente possibile, con l’intento di trarre profitto dai bitcoin guadagnati in questo modo.

Un’ultima complicazione: Forse ti stai chiedendo se l’introduzione di miner specializzati e “incentivati” porta a una produzione più veloce di soluzioni. In realtà, un’altra regola nel protocollo specifica che il “coefficiente di difficoltà” aumenta o diminuisce (ogni due settimane) per fare in modo che le soluzioni vengano prodotte ogni dieci minuti circa. E’ facile modificare una Funzione Scrambler per renderla più facile o più difficile da risolvere: basta richiedere la corrispondenza di un maggiore o minore numero di caratteri. All’inizio, una soluzione potrebbe aver richiesto la corrispondenza con l’ultimo carattere. In seguito, con l’aumento della frequenza delle soluzioni, la “update formula” richiederà sempre più caratteri corrispondenti.

Il lettore potrebbe aver notato che in questa sezione assumiamo che gli utenti seguiranno il protocollo (considerare il registro con il maggior lavoro come definitivo, richiedere una certa soglia di difficoltà, respingere double spend e firme invalide, ecc.) senza spiegare perché. Gli utenti seguono il protocollo non per una qualche legge o norma, ma semplicemente perché se non lo fanno verranno isolati dal resto del network, proprio come succede a qualsiasi furfante nel mondo reale. Approfondiremo questa dinamica in una sezione futura.

Tornando a Bitcoin

La discussione nei paragrafi precedenti dovrebbe fornire un’intuizione generale del funzionamento di Bitcoin. Facciamo un passo indietro per riassumere. Ecco la versione semplificata di quello che succede nel network di Bitcoin:

1) Quando gli utenti vogliono trasferire i propri bitcoin a qualcun altro, trasmettono un messaggio che descrive la transazione e lo firmano con la propria chiave privata.

2) Quando un utente riceve un messaggio che indica una transazione, controlla prima di tutto che la firma sia valida, e che l’indirizzo non spenda più di quanto indicato di sua proprietà nell’ultimo registro “confermato”. Se tutto quadra, l’utente conserva il messaggio e lo trasmette ad altri.

3) Tutti gli utenti che vogliono reclamare la ricompensa per una soluzione (aka “miner”) raggruppano le transazioni che conoscono (ovvero quelle nuove più quelle contenute nel registro confermato più recente) e le convertono nella “variante crypto” del gioco per quel set di transazioni. Quindi lavorano per risolvere il problema.

4) Quando qualcuno trova una soluzione, la trasmette, insieme al gruppo di transazioni conosciute (il nuovo registro più recente), a tutti gli altri utenti. Come per le transazioni individuali, chiunque la riceve ne controlla la validità e, in caso positivo, la trasmette agli altri.

5) I Miner che ricevono una nuova soluzione valida interrompono la loro ricerca, quindi prendono il nuovo registro come definitivo. A questo punto ripetono il processo partendo da 3), raggruppano nuove transazioni che conoscono, le aggiungono a questo nuovo registro, e provano a risolvere un nuovo problema matematico specifico per il nuovo set di transazioni, e il processo continua a ripetersi all’infinito.

Analisi della Sicurezza

Dato che potrebbero non essere ovvie, esaminiamo le implicazioni per la sicurezza di questa configurazione.

Nota che gli utenti possono considerare valido un solo registro, in quanto solo uno dei vari registri in qualsiasi momento avrà la maggior quantità di lavoro investito. Chi risolve un blocco (trova la soluzione per un registro più recente) ha tutto l’interesse a spargere la voce, in quanto facendolo garantisce che il resto del network accetterà e proseguirà partendo dalla sua soluzione, convalidando la sua ricompensa. Talvolta può capitare che diverse parti del network vedano diverse soluzioni per l’aggiornamento del registro, ciascuna delle quali diviene il “campione in carica” di tale sottogruppo. Il disaccordo viene risolto quando qualcun altro produce un registro aggiornato proseguendo da uno di questi due, fino a quando uno dei registri si distacca dall’altro di diversi aggiornamenti, rendendo molto improbabile una ‘’rimonta’’. Il termine tecnico per un aggiornamento del registro abbandonato in questo modo è “blocco orfano.” Per evitare di fare affidamento a (quello che potrebbe diventare) un blocco orfano, si raccomanda agli utenti di aspettare fino a quando il primo registro che lo contiene viene “aggiornato” 5 volte.

Cosa succede se dei furfanti cercano di ostacolare questa tranquilla configurazione? Come discusso nella sezione precedente, è tecnicamente (quasi) impossibile per qualsiasi utente malintenzionato falsificare una firma. Invece, supponiamo che l’obiettivo sia bloccare il network cercando soluzioni per “aggiornamenti del registro vuoti” — ovvero, cercano di are in modo che nessuno riesca a trasferire bitcoin. Mentre altri miner includono le transazioni che ricevono, questo gruppo di furfanti si comporta come se nessuno avesse trasferito bitcoin — equivale a dire, “Nope, niente da segnalare qui,” per la crypto-economy. Ovviamente, i miner onesti continuerebbero a pubblicare soluzioni contenenti le transazioni, ma i furfanti — in possesso di sufficiente potenza di calcolo — sarebbero in grado di to “superare” costantemente il resto del network, pubblicando un registro (che risulta essere vuoto) con la maggior quantità di lavoro comprovato.

In alternativa, immagina che questo gruppo di furfanti trovi soluzioni come gli altri miner legittimi, ma proceda a pubblicare aggiornamenti contradditori: per esempio, l’aggiornamento trasmesso a metà del network indica il trasferimento di 50 bitcoin a un indirizzo, mentre l’altra metà vede un aggiornamento in cui gli stessi vengono inviati a un altro indirizzo; questo è quello che intendiamo con il problema del “double spending”. Se questo accadesse, eventualmente la catena di un registro vincerebbe, mentre la sua controparte sarebbe costretta a subire la perdita in quanto tutti gli altri partecipanti del network hanno deciso che, in ultima analisi, quei 50 bitcoin non spettavano a loro.

Concretamente, lo scenario potrebbe evolversi in questo modo: Malicious Mallory firma una transazione di 5 bitcoin da un indirizzo a Charlie, quindi invia gli stessi bitcoin a Diane.

Mallory trova una soluzione (chiamiamola A) per la prima transazione, e un’altra soluzione (chiamiamola B) per la seconda. Naturalmente, non possono essere accettate entrambe. Mallory trasmette la soluzione A alla sezione del network in cui si trova Charlie, e la soluzione B a quella in cui si trova Diane. Mallory si prende (rapidamente) i martelli che ha comprato da Charlie con questi bitcoin, e i chiodi comprati da Diane. Tuttavia, la soluzione successiva prosegue dalla versione contenente la transazione a Charlie, e la transazione a Diane viene ignorata, lasciando Diane con un palmo di naso; ha scambiato i suoi chiodi per niente. Questo è lo stesso meccanismo di base dell’annullare un assegno prima che il commerciante possa versarlo sul proprio conto.

Come è possibile attaccare il network in questo modo? Per produrre costantemente soluzioni che “vincono” sul resto del network in investimento computazionale, il gruppo di furfanti dovrebbe possedere più “hashing power” del resto del network combinato. Di conseguenza, maggiore è il numero di nodi “onesti” — ovvero i nodi che includono semplicemente le transazioni che vedono nei propri aggiornamenti del registro, invece di provare a respingere ogni messaggio o double spend — presenti nel network, più sarà difficile attaccare con successo il network. Sebbene questo costante processo di calcolo possa sembrare uno spreco di risorse, svolge una funzione importante, ovvero spinge tutti i partecipanti a coordinarsi su un registro di transazioni non falsificabile, senza la necessità di fare affidamento su nessuno — purché i nodi disonesti non arrivino a dominare il network.

Sezione successiva —Come Funziona Bitcoin: Oltre il Protocollo

--

--