Bitcoin: Un Sistema di Pagamento Elettronico Peer-to-Peer (2008)

Bitcoin Service Italia Logo - Sfondo Bianco

Bitcoin: Un Sistema di Pagamento Elettronico Peer-to-Peer

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

Sommario

Una versione puramente peer-to-peer di denaro elettronico consentirebbe di inviare pagamenti online direttamente da una parte all'altra senza passare attraverso un istituto finanziario. Le firme digitali forniscono parte della soluzione, ma i principali vantaggi vengono persi se è ancora necessaria una terza parte fidata per prevenire il doppio utilizzo. Proponiamo una soluzione al problema del doppio utilizzo utilizzando una rete peer-to-peer. La rete marca temporalmente le transazioni eseguendo l'hashing in una catena continua di proof-of-work basata su hash, formando un registro che non può essere modificato senza rifare la proof-of-work. La catena più lunga non solo serve come prova della sequenza degli eventi testimoniati, ma prova che proviene dal pool più grande di potenza CPU. Finché la maggior parte della potenza CPU è controllata da nodi che non cooperano per attaccare la rete, genereranno la catena più lunga e supereranno gli attaccanti. La rete stessa richiede una struttura minima. I messaggi vengono trasmessi con il massimo impegno e i nodi possono lasciare e rientrare nella rete a piacimento, accettando la catena proof-of-work più lunga come prova di ciò che è accaduto mentre erano assenti.

1. Introduzione

Il commercio su Internet si è affidato quasi esclusivamente agli istituti finanziari come terze parti fidate per elaborare i pagamenti elettronici. Sebbene il sistema funzioni abbastanza bene per la maggior parte delle transazioni, soffre ancora delle debolezze intrinseche del modello basato sulla fiducia. Le transazioni completamente non reversibili non sono realmente possibili, poiché gli istituti finanziari non possono evitare di mediare le controversie. Il costo della mediazione aumenta i costi delle transazioni, limitando la dimensione minima pratica delle transazioni ed eliminando la possibilità di piccole transazioni occasionali, e c'è un costo più ampio nella perdita della capacità di effettuare pagamenti non reversibili per servizi non reversibili.

Quello che serve è un sistema di pagamento elettronico basato su prove crittografiche invece che sulla fiducia, che consenta a due parti qualsiasi di effettuare transazioni direttamente tra loro senza la necessità di una terza parte fidata. Le transazioni computazionalmente impraticabili da invertire proteggerebbero i venditori dalle frodi, e i meccanismi di deposito a garanzia di routine potrebbero essere facilmente implementati per proteggere gli acquirenti.

2. Transazioni

Definiamo una moneta elettronica come una catena di firme digitali. Ogni proprietario trasferisce la moneta al successivo firmando digitalmente un hash della transazione precedente e la chiave pubblica del proprietario successivo e aggiungendoli alla fine della moneta. Un beneficiario può verificare le firme per verificare la catena di proprietà.

Il problema è ovviamente che il beneficiario non può verificare che uno dei proprietari non abbia speso due volte la moneta. Una soluzione comune è quella di introdurre un'autorità centrale fidata, o zecca, che controlli ogni transazione per il doppio utilizzo. Dopo ogni transazione, la moneta deve essere restituita alla zecca per emettere una nuova moneta, e solo le monete emesse direttamente dalla zecca sono considerate affidabili per non essere state spese due volte.

3. Server Timestamp

La soluzione che proponiamo inizia con un server timestamp. Un server timestamp funziona prendendo un hash di un blocco di elementi da marcare temporalmente e pubblicando ampiamente l'hash. Il timestamp dimostra che i dati devono essere esistiti in quel momento, ovviamente, per entrare nell'hash. Ogni timestamp include il timestamp precedente nel suo hash, formando una catena, con ogni timestamp aggiuntivo che rafforza quelli precedenti.

4. Proof-of-Work

Per implementare un server timestamp distribuito peer-to-peer, dovremo utilizzare un sistema di proof-of-work simile a Hashcash di Adam Back. Il proof-of-work comporta la scansione di un valore che quando viene sottoposto ad hash, come con SHA-256, l'hash inizia con un numero di bit zero. Il lavoro medio richiesto è esponenziale nel numero di bit zero richiesti e può essere verificato eseguendo un singolo hash.

Per la nostra rete timestamp, implementiamo la proof-of-work incrementando un nonce nel blocco finché non viene trovato un valore che fornisce all'hash del blocco i bit zero richiesti. Una volta che lo sforzo della CPU è stato speso per soddisfare la proof-of-work, il blocco non può essere modificato senza rifare il lavoro.

5. Rete

I passaggi per eseguire la rete sono i seguenti:

  1. Le nuove transazioni vengono trasmesse a tutti i nodi.
  2. Ogni nodo raccoglie 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 una proof-of-work, trasmette il blocco a tutti i nodi.
  5. I nodi accettano il blocco solo se tutte le transazioni in esso contenute sono valide e non già spese.
  6. I nodi esprimono la loro accettazione del blocco lavorando alla creazione del blocco successivo nella catena, utilizzando l'hash del blocco accettato come hash precedente.

I nodi considerano sempre la catena più lunga come quella corretta e continueranno a lavorare per estenderla. Se due nodi trasmettono simultaneamente versioni diverse del blocco successivo, alcuni nodi potrebbero ricevere prima l'uno o l'altro. In tal caso, lavorano sul primo ricevuto, ma salvano l'altro ramo nel caso diventi più lungo.

6. Incentivo

Per convenzione, la prima transazione in un blocco è una transazione speciale che avvia una nuova moneta di proprietà del creatore del blocco. Questo aggiunge un incentivo per i nodi a supportare la rete e fornisce un modo per distribuire inizialmente le monete in circolazione, poiché non esiste un'autorità centrale per emetterle. L'aggiunta costante di una quantità costante di nuove monete è analoga ai minatori d'oro che spendono risorse per aggiungere oro alla circolazione.

L'incentivo può anche essere finanziato con le commissioni sulle transazioni. Se il valore di output di una transazione è inferiore al suo valore di input, la differenza è una commissione sulle transazioni che viene aggiunta al valore di incentivo del blocco contenente la transazione.

7. Recupero dello Spazio su Disco

Una volta che l'ultima transazione in una moneta è sepolta sotto abbastanza blocchi, le transazioni spese prima di essa possono essere scartate per risparmiare spazio su disco. Per facilitare ciò senza rompere l'hash del blocco, le transazioni vengono sottoposte ad hash in un Merkle Tree, con solo la radice inclusa nell'hash del blocco. I vecchi blocchi possono quindi essere compattati eliminando i rami dell'albero. Gli hash interni non devono essere memorizzati.

8. Verifica del Pagamento Semplificata

È possibile verificare i pagamenti senza eseguire un nodo di rete completo. Un utente ha solo bisogno di mantenere una copia delle intestazioni dei blocchi della catena proof-of-work più lunga, che può ottenere interrogando i nodi della rete finché non è convinto di avere la catena più lunga, e ottenere il ramo Merkle che collega la transazione al blocco in cui è stata marcata temporalmente.

9. Combinare e Dividere il Valore

Sebbene sarebbe possibile gestire le monete individualmente, sarebbe scomodo effettuare una transazione separata per ogni centesimo in un trasferimento. Per consentire la divisione e la combinazione del valore, le transazioni contengono più input e output. Normalmente ci sarà un singolo input da una transazione precedente più grande o più input che combinano importi più piccoli, e al massimo due output: uno per il pagamento e uno che restituisce il resto, se presente, al mittente.

10. Privacy

Il modello bancario tradizionale raggiunge un livello di privacy limitando l'accesso alle informazioni alle parti coinvolte e alla terza parte fidata. La necessità di annunciare pubblicamente tutte le transazioni preclude questo metodo, ma la privacy può ancora essere mantenuta interrompendo il flusso di informazioni in un altro luogo: mantenendo anonime le chiavi pubbliche. Il pubblico può vedere che qualcuno sta inviando un importo a qualcun altro, ma senza informazioni che colleghino la transazione a nessuno.

11. Calcoli

Consideriamo lo scenario di un attaccante che cerca di generare una catena alternativa più velocemente della catena onesta. Anche se ciò viene realizzato, non apre il sistema a cambiamenti arbitrari, come creare valore dal nulla o prendere denaro che non è mai appartenuto all'attaccante. I nodi non accetteranno una transazione non valida come pagamento e i nodi onesti non accetteranno mai un blocco che le contenga.

12. Conclusione

Abbiamo proposto un sistema per le transazioni elettroniche senza affidarsi alla fiducia. Abbiamo iniziato con il solito framework di monete realizzate con firme digitali, che fornisce un forte controllo della proprietà, ma è incompleto senza un modo per prevenire il doppio utilizzo. Per risolvere questo problema, abbiamo proposto una rete peer-to-peer che utilizza la proof-of-work per registrare una storia pubblica delle transazioni che diventa rapidamente computazionalmente impraticabile per un attaccante da modificare se i nodi onesti controllano la maggior parte della potenza della CPU.

La rete è robusta nella sua semplicità non strutturata. I nodi lavorano tutti contemporaneamente con poca coordinazione. Non hanno bisogno di essere identificati, poiché i messaggi non vengono instradati in nessun posto particolare e devono solo essere consegnati nel miglior modo possibile. I nodi possono lasciare e rientrare nella rete a piacimento, accettando la catena proof-of-work come prova di ciò che è accaduto mentre erano via. Votano con la loro potenza CPU, esprimendo la loro accettazione dei blocchi validi lavorando per estenderli e rifiutando i blocchi non validi rifiutandosi di lavorarci sopra.


Fonte originale: Satoshi Nakamoto, ottobre 2008. Scarica il PDF originale su bitcoin.org