Criptovalute

Bitcoin spiegato dall’inventore

La traduzione del paper originale di Satoshi Nakamoto

Criptovalute

Bitcoin (+6.18% nelle ultime 24 ore) è ormai discusso da tutti. Ha trasceso il mondo della finanza fino a diventare un fenomeno culturale. Non tutti, però, conoscono il funzionamento o l’origine, avvolta nel mistero della figura di Satoshi Nakamoto, lo pseudonimo dell’inventore che rimane ad oggi non identificato.

La seguente è una traduzione del suo paper originale, in cui descrive il funzionamento di Bitcoin e le potenzialità della sua invenzione.

 

Bitcoin: un sistema di moneta elettronica peer-to-peer

Sommario

Una versione puramente peer-to-peer di denaro elettronico permetterebbe di spedire direttamente pagamenti online da un’entità ad un’altra senza passare tramite un’istituzione finanziaria. Le firme digitali offrono una soluzione parziale al problema, ma i benefici principali sono persi se una terza persona di fiducia è ancora richiesta per prevenire la doppia spesa.

Proponiamo una soluzione al problema della doppia spesa mediante l’utilizzo di una rete peer-to-peer. La rete stampa un marcatore temporale sulle transazioni facendo hashing sulle stesse e incatenandole in una catena di proof-of-work basata sugli hash, formando una registrazione che non può essere modificata senza rifare la proof-of-work.

La catena più lunga non solo serve come prova della sequenza di eventi ai quali si è assistito, ma anche come prova che essa proviene dal gruppo più grande di potenza CPU. Fintanto che la maggior parte della potenza CPU è controllata da nodi che non cooperano per attaccare la rete, questi genereranno la catena più lunga e supereranno gli utenti malintenzionati.

La rete stessa richiede una struttura minimale. I messaggi sono trasmessi su base best effort, e i nodi possono lasciare e ricongiungersi con la rete a loro piacimento, accettando la catena proof-of-work più lunga come prova di quello che è avvenuto mentre erano non erano presenti.

 

1. Introduzione

Il commercio su Internet fa affidamento quasi esclusivamente sulle istituzioni finanziarie che servono come terze parti di fiducia per elaborare i pagamenti elettronici. Nonostante il sistema funzioni abbastanza bene per la maggior parte delle transazioni, esso soffre ancora delle debolezze intrinseche di un modello basato sulla fiducia.

Transazioni totalmente irreversibili non sono realmente possibili, dal momento che le istituzioni finanziarie non possono evitare le dispute di mediazione. Il costo dell’intermediazione aumenta i costi di transazione, limitando la dimensione minima delle transazioni praticabili ed escludendo la possibilità di piccole transazioni occasionali, e c’è un costo più ampio collegato alla perdita della capacità di effettuare pagamenti irreversibili per quei servizi che sono anch’essi irreversibili.

Con la possibilità di reversibilità, si diffonde la necessità di fiducia. I commercianti devono diffidare dei loro clienti, tormentandoli con maggiori richieste di informazioni rispetto a quanto non sarebbe altrimenti necessario. Una certa percentuale di frodi è accettata come inevitabile. Tali costi e le incertezze di pagamento possono essere evitati utilizzando moneta fisica di persona, ma non esiste alcun meccanismo per effettuare pagamenti attraverso un mezzo di comunicazione senza un’entità di fiducia.

È dunque necessario un sistema di pagamento elettronico basato su prova crittografica invece che sulla fiducia, che consenta a due controparti qualsiasi negoziare direttamente tra loro senza la necessità di una terza parte di fiducia. Le transazioni che sono computazionalmente impraticabili da invertire proteggerebbero i venditori dalle frodi, e meccanismi consuetudinari di deposito di garanzia potrebbero essere facilmente implementati per proteggere gli acquirenti.

In questo lavoro, proponiamo una soluzione al problema della doppia spesa utilizzando un server di 1 marcatura temporale distribuito peer-to-peer per generare la prova computazionale dell’ordine cronologico delle transazioni. Il sistema è sicuro fintanto che i nodi onesti controllano collettivamente più potenza CPU rispetto a qualsiasi gruppo collaborativo di nodi attaccanti.

 

2. Le Transazioni

Definiamo come valuta elettronica una catena di firme digitali. Ciascun proprietario trasferisce valuta al successivo firmando digitalmente un hash della transazione precedente e la chiave pubblica del proprietario successivo e aggiungendo le stesse alla fine della valuta. Colui che riceve un pagamento può verificare le firme digitali per validare la catena di proprietà.

Il problema, naturalmente, è che il beneficiario non può verificare che ciascuno dei proprietari precedenti non abbia speso due volte lo stesso ammontare di valuta. Una soluzione comune è quella di introdurre un’autorità fiduciaria centrale, o zecca, che controlli tutte le transazioni. Dopo ogni transazione, la moneta deve essere restituita alla zecca, la quale emette una nuova moneta, e si crede che solo le monete emesse direttamente dalla zecca non siano state spese due volte.

Il problema di questa soluzione è che il destino di tutto il sistema monetario dipende dalla società che gestisce la zecca, e ogni transazione deve passare attraverso di essa, proprio come una banca. Abbiamo bisogno di un modo per far sì che il beneficiario sappia che i precedenti proprietari non abbiano firmato alcuna transazione precedente a quella che lo riguarda. Per i nostri scopi, la prima operazione è quella che conta, e non ci importa nulla dei tentativi successivi di doppia spesa.

L’unico modo per confermare l’assenza di una transazione è di essere a conoscenza di tutte le transazioni. Nel modello basato sulla zecca, questa era a conoscenza di tutte le transazioni e decideva quale era avvenuta per prima.

Per fare lo stesso ma senza un’autorità di fiducia, le transazioni devono essere annunciate pubblicamente [1], e abbiamo bisogno di un sistema attraverso il quale i partecipanti concordino su un singolo passato dell’ordine in cui esse sono state ricevute. Il beneficiario ha bisogno di una prova che, al momento di ogni transazione, la maggior parte dei nodi è d’accordo che essa è la prima ricevuta.

 

3. Server di marcatura temporale

La soluzione proposta parte da un server di marcatura temporale. Un server di marcatura temporale agisce facendo hash di un blocco di oggetti in modo che siano marcati temporalmente e poi pubblica l’hash, ad esempio su un quotidiano o in un post su Usenet. La marcatura temporale prova ovviamente che i dati devono essere esistiti in quella determinata data, visto che sono finiti nell’hash. Ogni marcatura temporale comprende quella precedente nel suo hash, formando una vera e propria catena, e ogni marcatura temporale ovviamente rafforza quelle precedenti.

 

4. Proof-of-Work

Per implementare un server di marcatura temporale distribuito su base peer-to-peer, avremo bisogno di usare un sistema simile a quello di Hashcash di Adam Back [6], piuttosto che basarci sui messaggi di quotidiani o Usenet. La proof-of-work comporta la ricerca di un valore che, una volta sottoposto ad hash (ad esempio con SHA-256), restituisca un hash che inizia con un numero di zero bit. Il lavoro medio richiesto è esponenzialmente proporzionale al numero di zero bit richiesti e può essere verificato eseguendo un unico hash.

Per la nostra rete di marcatura temporale, implementiamo la proof-of-work incrementando un nonce nel blocco fino a quando è trovato un valore che dà all’hash del blocco gli zero bits necessari. Una volta che l’impegno della CPU è stato speso per soddisfare la proof-of-work, il blocco non può essere modificato senza rifare il lavoro. Poiché i blocchi successivi sono incatenati dopo di esso, il lavoro necessario per cambiare il blocco dovrebbe includere il rifacimento di tutti i blocchi successivi.

La proof-of-work risolve anche il problema della determinazione della rappresentatività in un sistema di decisioni prese a maggioranza. Se la maggioranza fosse basata sul principio “un indirizzo IP-un-voto”, potrebbe essere sovvertita da chiunque fosse in grado di allocare molti IPs. La proof-of-work invece segue essenzialmente il principio “una CPU-un voto”. La decisione di maggioranza è rappresentata dalla catena più lunga, su cui è stato speso il massimo sforzo di proof-of-work. Se la maggioranza di potenza della CPU è controllata da nodi onesti, la catena onesta crescerà più velocemente e supererà eventuali catene concorrenti.

Per modificare un blocco passato, un utente malintenzionato dovrebbe rifare la proof-of-work del blocco e di tutti i blocchi successivi ad esso e poi raggiungere e superare il lavoro dei nodi onesti. Mostreremo in seguito che la probabilità che un utente malintenzionato raggiunga il lavoro dei nodi onesti diminuisce in modo esponenziale a mano a mano che vengono aggiunti blocchi successivi.

Per compensare l’aumento della velocità dell’hardware e il variare dell’interesse dei nodi operativi col tempo, la difficoltà della proof-of-work è determinata da una media mobile che ha come obiettivo la creazione di un numero medio di blocchi ogni ora. Se i blocchi vengono generati troppo velocemente, la difficoltà aumenta.

 

5. La Rete

I passi per far girare la rete sono i seguenti:

1) Le nuove transazioni sono trasmesse a tutti i nodi.

2) Ogni nodo immagazzina le nuove transazioni in un blocco.

3) Ogni nodo lavora per trovare una proof-of-work difficile per il suo blocco.

4) Quando un nodo trova un proof-of-work, trasmette il blocco a tutti gli altri nodi.

5) I nodi accettano il blocco solo se tutte le transazioni in esso sono valide e non sono già state spese.

6) I nodi esprimono l’accettazione del blocco mediante il tentativo di creare il prossimo blocco nella catena, utilizzando l’hash del blocco accettato come hash precedente.

I nodi considerano sempre come corretta la catena più lunga e continueranno a lavorare per allungarla. Se due nodi trasmettono diverse versioni del blocco successivo contemporaneamente, alcuni nodi possono ricevere l’una o l’altra prima. In tal caso, questi lavorano sul primo che hanno ricevuto, ma salvano l’altra ramificazione nel caso diventi più lunga.

Questo impasse sarà risolto quando la proof-of-work successiva viene trovata e una delle ramificazioni diventa più lunga; i nodi che stavano lavorando sull’altra ramificazione a quel punto si sposteranno su quella più lunga. Le trasmissioni delle nuove transazioni non devono necessariamente raggiungere tutti i nodi.

Fintanto che raggiungono numerosi nodi, non ci vorrà molto affinchè vengano inserite in un blocco. Le trasmissioni dei blocchi tollerano anche i messaggi troncati. Se un nodo non riceve un blocco, lo richiederà quando riceverà il blocco successivo e capirà di averne saltato uno.

 

6. L’Incentivo

Per convenzione, la prima transazione in un blocco è una transazione speciale che “conia” una nuova moneta di proprietà del creatore del blocco. Questo fornisce un incentivo ai nodi affinché sostengano la rete, e fornisce un modo per la distribuzione iniziale di monete in circolazione, dato che non vi è alcuna autorità centrale che possa emetterle.

L’aggiunta costante di una data quantità di nuove monete è analoga al processo dei minatori d’oro, che spendono risorse per incrementare la quantità di oro in circolazione. Nel nostro caso, viene spesa potenza CPU e viene consumata energia elettrica. L’incentivo può essere anche finanziato con costi di transazione. Se il valore di uscita di una transazione è inferiore al suo valore di ingresso, la differenza è una tassa di transazione che viene aggiunta al valore di incentivazione del blocco contenente la transazione.

Nel momento in cui sia entrato in circolazione un ammontare predeterminato di monete, l’incentivo può migrare interamente ai costi di transazione e essere completamente privo di effetti inflazionari. L’incentivo può contribuire ad incoraggiare i nodi a rimanere onesti. Se un utente malintenzionato fosse avidamente in grado di assemblare più potenza di CPU rispetto a tutti i nodi onesti, dovrebbe scegliere tra un utilizzo truffaldino (ritornando al mittente tutti i suoi pagamenti), o un utilizzo volto a coniare nuove monete.

Dovrà necessariamente trovare più redditizio giocare secondo le regole, dato che tali regole lo favoriscono con più monete nuove di tutti gli altri messi insieme, piuttosto che minare la sicurezza del sistema e la validità della propria ricchezza.

 

PaginaPrecedente
PaginaSuccessiva