Bitcoin: magia, frode o 'tecnologia sufficientemente avanzata'?

di Konrad S. Graf, 19 settembre 2014
articolo originale:
http://konradsgraf.squarespace.com/blog1/2014/9/19/bitcoin-magic-fraud-or-sufficiently-advanced-technology.html

La famosa terza legge di Arthur C. Clarke afferma: "Ogni tecnologia sufficientemente avanzata è indistinguibile dalla magia". A prima vista, quello che Bitcoin rende possibile, può sembrare quasi magico, o semplicemente impossibile (e quindi molto probabilmente fraudolento o in qualche modo da condannato). Qui di seguito vengono descritti gli elementi tecnici che stanno alla base di Bitcoin, come questo li unisce in modi nuovi e perché rende ciò che sembra magia possibile nel mondo reale.

La seconda legge di Clarke afferma: "L'unico modo di scoprire i limiti del possibile è avventurarsi un poco oltre, nell’impossibile". E questo, in retrospettiva, è fondamentalmente quello che ha fatto il creatore di Bitcoin Satoshi Nakamoto. Pochi a quel tempo, anche tra i massimi esperti in materia, pensavano che avrebbe funzionato.

Funziona.

Un motivo per cui molte persone hanno difficoltà a capire Bitcoin è che usa molte e diverse tecnologie e metodologie, ognuna delle quali è storicamente abbastanza recente. I principali ingredienti sono: un modello di software libero e open-source, la rete peer-to-peer, le firme digitali e gli algoritmi di hashing. I primi sviluppi pionieristici in ciascuna di queste aree sono stati quasi tutti negli anni dal 1970 al 2000. Nessuna di queste cose esisteva prima di circa 40 anni fa, un microsecondo in tempo storico, ma un'era geologica nel tempo della rivoluzione digitale.

Alcune importanti pietre miliari in ogni area sono state: per il software open-source, il progetto GNU (1983) e il progetto Linux (1991); per il peer-to-peer, ARPANET (1979) e Napster (1999); per le firme digitali, la teoria Diffie-Hellman (1976) e il primo concetto di verifica RSA (1978); per algoritmi di hashing, le prime idee (circa 1953) e le innovazioni chiave da Merkle-Damgård (1979). Bitcoin combina alcuni dei migliori sviluppi in ​​ciascuno di questi settori per rendere possibili cose nuove.

Dal momento che poche persone al mondo conoscono molto di ognuno di questi componenti essenziali, comprendere senza un minimo di studio quanto sia innovativo Bitcoin nel combinarli in modi nuovi e sorprendenti, cosa corprendente anche per gli esperti di ciascuno di questi campi, è naturalmente una sfida. Non solo la maggior parte delle persone non capiscono come il puzzle Bitcoin stia insieme tecnicamente, essi non capiscono nemmeno uno qualsiasi dei pezzi del puzzle! L'intento non è quello di entrare in dettaglio sul contenuto di uno di questi campi tecnici, ma piuttosto di fornire un appena sufficiente dettaglio per ottenere un rapido aumento del livello generale di comprensione.

Bitcoin in una sola parola: verifica.
Questo può aiutare per cominciare a concentrarsi non sui dettagli di ogni campo, ma al modo in cui ogni parte contribuisce in modo strategico alla funzione centrale di Bitcoin. Questa è quella di creare e mantenere un singolo registro non falsificabile che mostra l'assegnazione delle unità bitcoin ai rispettivi indirizzi. Questo regitstro è strutturato come una catena collegata di blocchi di operazioni. Il protocollo Bitcoin, la rete, e tutte le sue parti mantengono e aggiornano questa catena di blocchi (blockchain) in modo che chiunque la possa verificare. Bitcoin riscrive il proverbio russo "doveryai, no proveryai", "fidati, ma verifica" a solo "verifica."

Se si dovesse descrivere quello che fa la rete Bitcoin con una sola parola, questa sarebbe verifica. Per una valuta globale senza frontiere, il basarsi sulla fiducia sarebbe definitivamente una cattiva idea. I sistemi monetari precedenti hanno tutti lasciato a piedi gli utenti proprio perché non avevano altra alternativa che affidarsi a una qualche terza parte di fiducia.

In primo luogo il software principale di Bitcoin è open source e gratuito. Chiunque può usarlo, esaminarlo, proporre modifiche o derivare altro software con un nome diverso. Infatti, un gran numero di varianti del software di Bitcoin, con piccole differenze, esiste già da tempo. L'approccio open source può essere particolarmente buono per la sicurezza, perché più occhi che osservano danno più probabilità di trovare punti deboli e percorsi di miglioramento.

L'open source tende anche a promuovere naturalmente una meritocrazia. I collaboratori che dimostrano miglior giudizio tendono anche ad avere il maggior numero di contributi riconosciuti nel tempo. Forum di discussioni senza fine e controversie sono una caratteristica piuttosto che un difetto. Essi focalizzano l'attenzione sui problemi, sia reali che ipotetici, il che aiuta ad assicurare che tutto ciò che è implementato è stato esaminato e testato da diverse angolazioni.

Molti computer in tutto il mondo eseguono software che implementa il protocollo Bitcoin. Un protocollo è qualcosa simile ad una lingua parlata. I partecipanti devono parlare quella lingua e non un’altra, ed essi devono parlare abbastanza bene per far si che i loro messaggi si diffondano e vengano capiti dagli altri. Si possono definire protocolli alternativi, ma proprio come nel caso di nuovi linguaggi, di solito ciò è piuttosto improduttivo. Queste cose decollano e diventano utili solo se ci sono abbastanza elementi che vedono vantaggi nel partecipare veramente.

In secondo luogo, come in una rete peer-to-peer, non esiste un centro. Chiunque può scaricare il software di base Bitcoin e iniziare un nuovo nodo. Questo nodo scoprirà e inizierà a comunicare con altri nodi o "peers" (pari, compagni). Nessun nodo ha speciali autorità o posizioni particolari. Ogni nodo si collega con almeno otto pari (peers), ma a volte anche molti di più. Alcuni nodi più veloci e sempre attivi traferiscono maggiori informazioni ed hanno più connessioni, ma questo non comporta nessuno status speciale. Ogni nodo si può collegare e scollegare in qualsiasi momento, più volte. Un utente non deve avere un nodo completo per poter utilizzare Bitcoin tutti i giorni.
Si è soliti dire che Bitcoin è "decentrato", che non ha un centro. Ma allora, dove si trova? Migliaia di nodi attivi sono distribuiti in gran parte dei paesi del mondo e ognuno contiene una copia completa e aggiornata di tutto il blockchain.

Alcuni nodi non solo trasmettono operazioni e blocchi validi, ma anche concorrono al processo che scopre e aggiunge nuovi blocchi alla catena. Questa attività di "mining" (estrazione mineraria) assicura la verifica finale delle operazioni e assegna nuovi bitcoin come ricompensa ai nodi che hanno partecipato. Per capire come funziona di base il “mining” bisogna dare uno sguardo alle differenti funzioni dei diversi tipi di crittografia.

La crittografia di Bitcoin de-omogeneizzata
Bitcoin si basa su due diversi tipi di crittografia che poche persone capiscono. Entrambi sono contro-intuitivi in ​​quello che rendono possibile. Quando la maggior parte della gente sente la parola "crittografia" pensa al mantenere dati privati ​​e sicuri attraverso la crittografia. La crittografia di file può essere usata per tenere al sicuro un file contenente un portafoglio bitcoin, così come può essere utilizzata per proteggere con password un qualsiasi altro file. Questa si chiama crittografia a chiave simmetrica, il che significa che la stessa chiave viene utilizzata per crittografare e decrittografare (AES256 viene spesso usata a questo scopo). La crittografia può essere utilizzata anche per rendere sicura la comunicazione di transazioni tra utenti, come pure qualsiasi altro tipo di comunicazione. Questa si chiama crittografia a chiave asimmetrica, il che significa che la chiave pubblica cifra un messaggio e la corrispondente chiave privata lo decifra all'altro capo.

Tuttavia, tutto questo è accessorio. Nulla è criptato all'interno del protocollo di Bitcoin e della rete. Nonostante questo vengono utilizzati ben due diversi tipi di crittografia. Non vengono utilizzati per mantenere la segretezza, ma per assicurare che venga detta la verità. Bitcoin è un sistema globale e robusto di verifica della verità. In questo senso è l'opposto del "buco della memoria" di George Orwell in 1984: è una catena che ricorda.

Il primo tipo di crittografia all'interno Bitcoin è utilizzato per creare un digest del messaggio (http://it.wikipedia.org/wiki/Funzione_crittografica_di_hash) o più informalmente un "hash". Bitcoin usa hashing a vari livelli (la più centrale è una doppia esecuzione di SHA256). Il secondo tipo è usato per creare e verificare le firme digitali. Questo utilizza una coppia di chiavi per la firma e la verifica (ECDSA sepc256k1 http://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm).

Le chiavi del regno
Nonostante quello che si può intuire dalle apparenze, i portafogli bitcoin non contengono alcun bitcoin! Essi contengono solo coppie di chiavi e indirizzi che permettono di fare firme digitali e verifiche. I programmi portafoglio, i “wallet”, cercano nel blockchain riferimenti all’indirizzo che contengono e utilizzano tutta la cronologia delle transazioni per ottenere il saldo da mostrare all’utente. Alcune delle cose apparentemente magiche che si possono fare con i bitcoin, come l'accesso al portafoglio da luoghi diversi, derivano dal fatto che l'utente ha a che fare solo con le chiavi, mentre il bitcoin reale "esiste", per così dire, solo all’interno delle registrazioni del blockchain, non nei portafogli. Si tratta solo di copie di chiavi che possono essere memorizzate in luoghi diversi allo stesso tempo. Comunque, l'effettivo possesso delle monete, cioè la capacità di farne uso, è esclusivamente di chi possiede la chiave privata, quella che firma.

Mentre i progettisti di software stanno lavorando duramente per rimuovere le complesse stringhe di numeri dalle interfacce utente e sostituirle o integrarle con nomi utente più intuitivi e così via, il nostro scopo è proprio quello di toccare con mano alcuni dettagli tecnici su come funziona il sistema, perciò ecco un esempio reale di un set di chiavi bitcoin. Si tratta di una vera chiave privata di firma (da non usare!):

5JWJASjTYCS9N2niU8X9W8DNVVSYdRvYywNsEzhHJozErBqMC3H

Da questa viene crittograficamente generata una unica chiave pubblica di verifica (versione compressa):

03F33DECCF1FCDEE4007A0B8C71F18A8C916974D1BA2D81F1639D95B1314515BFC

Da questa chiave di verifica viene poi generato tramite hash un indirizzo pubblico al quale possono essere inviati dei bitcoin. In questo caso è:

12ctspmoULfwmeva9aZCmLFMkEssZ5CM3x

Una ricerca sul blockchain di questo indirizzo ne mostra l’utilizzo (https://blockchain.info/address/12ctspmoULfwmeva9aZCmLFMkEssZ5CM3x).

Dato che questa chiave privata è stata resa pubblica, dovrebbe rimanere inutilizzata perché è ormai insicura, è stata sacrificata per la causa della formazione sui bitcoin.

Farne un hash
L’hashing svolge un ruolo molto diverso da quello delle firme digitali. Dimostra che un messaggio non è stato alterato. Diverse esecuzioni di un hash su uno stesso messaggio producono sempre lo stesso risultato. Quando un hash non corrisponde a uno precedente, si è avvertiti che la versione attuale del messaggio non corrisponde all'originale.
Per dimostrarlo, questa è una frase tratta da “Man, Economy, and State” di Murray Rothbard:

“It must be reiterated here that value scales do not exist in a void apart from the concrete choices of action.” —Murray Rothbard, 1962

E questo è il risultato dell’hash SHA256 (lo stesso algoritmo che utilizza Bitcoin) di tutta la frase, nome e data compresa:

68ea16d5ddbbd5c9129710e4c816bebe83c8cf7d52647416302d590290ce2ba8

Qualsiasi messaggio di qualsiasi dimensione può essere processato da una funzione di hash. L'algoritmo scompone, mescola le parti, in altre parole "digerisce" il messaggio, fino a quando non ottiene un risultato di lunghezza fissa chiamato "digest", che per SHA256 prende la forma di cui sopra, ma che ha un contenuto differente per ogni caso.

Ci sono alcune caratteristiche fondamentali per un buon algoritmo di hash. In primo luogo, lo stesso messaggio produce sempre lo stesso digest. In secondo luogo, esso funziona solo in una direzione. Nulla del messaggio originale può essere ricostruito dal digest. Anche il più piccolo cambiamento produce un digest completamente diverso, senza alcuna relazione tra le modifiche in ingresso e le modifiche del risultato. Questo è chiamato "effetto valanga". Terzo, le probabilità di produrre lo stesso digest dopo che un messaggio è stato alterato sono minuscole. Questa si chiama "resistenza alla collisione". E' impossibile elaborare un messaggio alterato così da avere lo stesso digest del messaggio originale inalterato.

Per una dimostrazione, qui c’è la stessa citazione senza le due virgolette:

It must be reiterated here that value scales do not exist in a void apart from the concrete choices of action. —Murray Rothbard, 1962

Il digest prodotto è:

0a7a163d989cf1987e1025d859ce797e060f939e2c9505b54b33fe25a9e860ff

Confrontiamolo con il digest precedente:

68ea16d5ddbbd5c9129710e4c816bebe83c8cf7d52647416302d590290ce2ba8

Un piccolo cambiamento nel messaggio, la rimozione delle due virgolette, ha prodotto un digest completamente diverso che non ha alcun rapporto con il precedente. In definitiva, un digest risponde velocemente si o no ad una singola domanda: è il messaggio ancora esattamente come era prima? Se il messaggio è diverso, il digest non può indicare come e in quale misura, indica solo se è cambiato o no.

Come può uno strumento così apparentemente poco preciso essere utile? Bitcoin è una applicazione in cui gli algoritmi di hash hanno dimostrato di essere veramente molto utili. In Bitcoin, l’hash viene utilizzato nel ruolo chiave di rendere impossibile la modifica delle transazioni e delle registrazioni una volta che sono state fatte. Una volta che gli hash vengono collegati vincendevolmente nel blockchain tramite altri hash, falsificare il registro è impossibile.

Le transazioni e come i minatori fannno a gara per scoprire i blocchi
I software Wallet vengono utilizzati per creare le transazioni. Queste includono l'importo da inviare, l’indirizzo di invio e quello di ricezione, e alcune altre informazioni, il tutto unito assieme con l’hash. Questo hash è firmato con le chiavi di firma necessare per creare la firma digitale unica e valida solo per questa transazione e nessun'altra. Tutto questo viene trasmesso alla rete come informazione pubblica non criptata. Ciò è possibile perché non è possibile ottenere la chiave privata di firma partendo dalla firma stessa e dalla chiave pubblica di verifica.

Per evitare che qualcuno tenti di spendere la stessa unità due volte commettendo un tipo di frode chiamato doppia-spesa (doppia-spendibilità, double-spending), i nodi confrontano le nuove operazioni con il blockchain e con altre nuove operazioni per assicurarsi che le stesse unità non vengano utilizzate più di una volta.
Ogni minatore raccoglie le nuove operazioni valide e le incorpora in un blocco candidato per essere il successivo blocco riconosciuto della catena. Ogni minatore effettua l’hash dell’insieme di tutte le nuove transazioni. Questo produce un unico hash ("mrkl_root"), che rende interdipendenti le registrazioni di ogni operazione nel blocco.
Ogni hash di qualsiasi blocco candidato si differenzia da ogni altro blocco candidato, anche solo perché il minatore include nel blocco il proprio indirizzo univoco, così da poter raccogliere la ricompensa nel caso il suo blocco candidato venga riconosciuto come il successivo della catena.

Di chi sarà il blocco candidato vincitore?

Perché un blocco successivo venga riconosciuto valido dai minatori in competizione, il minatore deve generare un hash particolare dall'intestazione del suo blocco, che soddisfi una condizione rigorosa. Tutti gli altri minatori possono verificare subito questo hash di risposta e riconoscere il blocco come corretto o meno.

Tuttavia, anche in presenza di una soluzione corretta, questa lo è solo per il minatore che l’ha trovata processando il suo blocco. Nessuno può prendere la risposta corretta di un altro e utilizzarla per promuovere il proprio blocco candidato come reale vincitore. Questo è il motivo per cui la risposta corretta può essere pubblicata liberamente senza essere oggetto di appropriazione indebita da parte di altri. Questo unico hash qualificante è chiamato "prova di lavoro" (proof of work).

La natura e gli usi dei digest dei messaggi sono in un primo momento contro-intuitivo, ma sono elementi indispensabili per rendere possibile Bitcoin.

Un esempio di blocco ‘minato’, estratto
Ecco un esempio di alcuni dati chiave presi da un blocco reale.

"Hash": "0000000000000000163440df04bc24eccb48a9d46c64dce3be979e2e6a35aa13",
"Prev_block": "00000000000000001b84f85fca41040c558f26f5c225b430eaad05b7cc72668d",
"Mrkl_root": "83d3359adae0a0e7d211d983ab3805dd05883353a1d84957823389f0cbbba1ad",
"Nonce": 3013750715,

La prima riga ("hash") è l’hash “vincitrice” di questo blocco. Inizia con un gran numero di zeri poiché un hash per vincere deve avere un numero di 0 maggiore o uguale di quello impostato dal livello di difficoltà attuale. L'unico modo per trovare un vincitore è di continuare a provare in continuazione.
Questo processo è spesso descritto dalla stampa popolare come "risolvere un problema di matematica complessa", ma questo è un po' fuorviante. In realtà il compito è estremamente semplice e brutalmente stupido, uno lavoro che solo i computer possono tollerare. La funzione di hash deve semplicemente essere eseguita milioni e miliardi di volte fino a che non venga trovata una risposta soddisfacente da qualche miner (minatore) sulla rete. Le probabilità che un minatore trovi un hash vincitore per il blocco in un singolo tentativo sono minuscole, ma considerando tutti i miner della rete viene trovata una soluzione mediamente ogni 10 minuti circa. Il vincitore riceve la ricompensa di 25 nuovi bitcoin e le eventuali spese delle operazioni incluse.

Come è raccolta la ricompensa?
I blocchi candidati vengono anticipatamente preparati in modo che la ricompensa vada all’indirizzo del minatore vincente. Questo è possibile perché il minatore ha già incluso questo indirizzo nel proprio blocco candidato prima di essere risultato vincitore. L'indirizzo al quale inviare la ricompensa era già incorporato nei dati del blocco prima ancora di cominciare a fare gli hash. Alterare l'indirizzo della ricompensa in qualsiasi modo andrebbe ad inficiare l'hash vincente e invaliderebbe l’intero blocco candidato.

Inoltre, un minatore può spendere le ricompense solo dei blocchi che diventano parte della catena principale, perché solo questi blocchi possono essere referenziati in operazioni future. Questo design consente di specificare completamente il controllo iniziale di tutti i primi stanziamenti di nuovi bitcoin. Il vincitore di ogni blocco successivo è perfettamente casuale. Per aumentare la probabilità di vincere, un minatore può solo cercare di contribuire con una maggiore quota di capacità di calcolo hashing sul totale della rete, in concorrenza con tutti gli altri che cercano di fare lo stesso.

Come indicato sopra, con la citazione di Rothbard, dopo il minimo cambiamento al messaggio viene fuori un hash completamente diverso. Questo è il motivo per cui il protocollo prevede un posto per un numero che parte da zero e viene incrementato di uno ad ogni nuovo calcolo hash ("nonce"). Solo questa piccola alterazione, lasciando inalterato il resto dei dati del blocco candidato, genera un hash completamente diverso ogni volta, alla ricerca di un vincitore. Nell'esempio precedente, sembra che questo minatore abbia trovato un hash vincente per il suo blocco ad un certo punto dopo tre miliardi di tentativi ("nonce": 3013750715), e questo era solo per un solo minatore o gruppo di minatori, e non include i simili tentativi infruttuosi di tutti gli altri minatori, e tutto questo solo per la soluzione di un unico blocco.

Il punto fondamentale da capire è che trovare un hash che soddisfi il livello di difficoltà è estremamente competitivo e difficile, mentre è banale verificare che la soluzione è stata trovata. Il resto dei minatori lo fanno e poi vanno oltre. Questi prendono l'hash appena scoperto dall'intestazione del blocco vincente (precedente, "prev_block") e lo usano come uno degli input per il loro prossimo candidato blocco (ciò assicura l'integrità verticale della singola catena di blocchi) così la corsa continua utilizzando l’insieme di transazioni non ancora confermate.

Un potente network di verifica autofinanziato
La rete dei miner Bitcoin, ai primi di settembre 2014, elabora circa 200 petahashes al secondo e aumenta a un ritmo esponenziale (https://blockchain.info/charts/hash-rate). Ciò significa che circa 200 quadrilioni di hash sono attualmente sotto processo in rete ogni secondo, continuamente. Questa è di gran lunga la rete di calcolo distribuito più potente al mondo, e sta aumentando il vantaggio già da parecchio tempo.

Le ricompense per il blocco e le spese di transazione contribuiscono a promuovere la produzione e la manutenzione dell’intera rete in modo decentralizzato. Dato che la generazione del blocco è casuale e distribuita proporzionalmente al contributo di potenza di calcolo hash, tutti quelli che collaborano sono incentivati costantemente. Molti minatori si raggruppano in cooperative in modo da distribuire i premi in maniera più regolare.

La rete è stata progettata per essere completamente autofinanziata dai partecipanti dall'inizio e fino a un tempo indeterminato nel futuro. All'inizio, le ricompense sono grandi e i ricavi dai costi di transazione più piccoli. Alla fine invece resteranno solo guadagni dai costi di transazione, attraverso una lunga e graduale fase di transizione.

Se Bitcoin continuasse ad avere successo nel lungo periodo, quando arriverà il momento in cui i ricavi da transazione predomineranno, ci sarebbero probabilmente molti ordini di grandezza più operazioni per blocco per cui moltiplicare la tariffa media per transazione.

Questo è stato uno sguardo di sintesi ad alcuni degli elementi tecnici fondamentali di Bitcoin. Algoritmi di hash e firme digitali sono invenzioni particolarmente contro-intuitive e relativamente nuove, ma sapere cosa fanno è essenziale per capire come funziona Bitcoin. Ciascuno degli elementi principali di Bitcoin partecipa alla funzione centrale di verifica, di tenuta affidabile dei registri, e di prevenzione delle frodi. Queste basi tecniche e le funzioni che supportano sono quanto di più lontano possa esserci dagli inganni sistematici di una frode, come quello di uno schema Ponzi.


Canale Telegram: http://telegram.me/bitcoinit
Supergruppo Telegram: http://telegram.me/bitcoinitaly
Collezione Google+ (principalmente in inglese): https://plus.google.com/u/0/collection/QE4aX