Vai al contenuto

Zerocoin

Da BitcoinWiki.
Zerocoin
Zerocoin.

Zerocoin è un protocollo crittografico progettato per spezzare il collegamento pubblico tra la creazione di una moneta e il suo successivo riscatto. Ian Miers, Christina Garman, Matthew Green e Aviel D. Rubin della Johns Hopkins University lo presentarono in 2013 come estensione proposta di Bitcoin. I suoi strumenti centrali sono commitment crittografici, un accumulatore e prove a conoscenza zero.[1]

Il nome si riferisce sia a un protocollo sia alle monete temporanee create al suo interno. È distinto da Zcoin, la criptovaluta in seguito rinominata Firo, e da Zerocash, un successivo sistema di ricerca associato a Zcash. Diverse criptovalute indipendenti implementarono progetti derivati da Zerocoin; le loro versioni, i parametri e le risposte di sicurezza erano diversi.[2][3][4][5]

Contesto e finalità

Bitcoin registra le transazioni in un registro pubblico. Gli indirizzi fungono da pseudonimi, ma non garantiscono l'anonimato: le relazioni tra transazioni e le informazioni esterne alla blockchain possono collegare l'attività a una persona. Cambiare indirizzo da solo non elimina le informazioni contenute nel grafo delle transazioni.[1]

Un servizio di mixing custodial cerca di nascondere quel grafo accettando e restituendo fondi. Il gestore può apprendere i collegamenti o non restituire i depositi. Zerocoin proponeva invece di controllare il riscatto tramite regole di consenso e prove crittografiche, senza incaricare una banca o un gestore di servizi di mixing di emettere monete private. Ciò elimina una forma di fiducia nella custodia, ma lascia le ipotesi crittografiche e quelle sulla configurazione iniziale.[1][6]

Come funzionano la creazione e la spesa

Creazione e commitment della moneta

Per creare una moneta, l'utente genera un numero di serie segreto S e un valore casuale r, quindi crea un commitment C. Il paper usa un commitment in stile Pedersen, scritto come C = g^S h^r mod p. Il valore pubblico C nasconde S; conoscendo r, il proprietario può in seguito collegare C a quel numero di serie. Un commitment non è una cifratura: la spesa usa una prova sul valore impegnato invece di decifrare C per tutti.[1][6]

La transazione di creazione impegna il valore corrispondente nella valuta di base, più eventuali commissioni. Il prototipo originale usava un valore fisso per moneta. L'integrazione proposta con Bitcoin sottraeva quel valore alla spesa ordinaria, così da poterlo riscattare solo tramite le regole di Zerocoin; l'utente conservava i dati segreti della moneta in un wallet.[6]

L'accumulatore e la witness di appartenenza

I commitment pubblici validi vengono combinati in un accumulatore crittografico, un valore compatto che rappresenta un insieme. Una witness di appartenenza fornisce le informazioni necessarie a dimostrare che uno specifico commitment appartiene a quell'insieme. Chi spende dimostra di possedere tale witness senza rivelare il commitment. La rappresentazione compatta evita di elencare ogni possibile creazione di moneta in ciascuna prova.[1][6]

Spesa e prevenzione della doppia spesa

Una spesa pubblica S e una prova a conoscenza zero che la collega a una moneta valida contenuta nell'accumulatore, la cui apertura è nota a chi spende. I nodi verificano la prova e confrontano S con i numeri di serie già accettati. Il riutilizzo di un numero di serie viene respinto come doppia spesa. La destinazione e il taglio riscattato restano visibili; la prova mira a nascondere quale creazione di moneta abbia fornito quel valore.[6][3][5]

Per esempio, più utenti possono creare monete dello stesso taglio. Una spesa successiva dimostra il diritto di riscattarne una senza indicare il commitment originale. Pubblicare un numero di serie permette alla rete di respingere una richiesta ripetuta senza obbligare chi spende a rivelare la creazione originale. È una descrizione concettuale del protocollo, non un'istruzione a inviare transazioni Zerocoin a Bitcoin.[6][5]

Gli autori realizzarono un prototipo di bitcoind modificato. La proposta completa richiedeva nuove regole di validazione delle transazioni; introdurla in una blockchain esistente comportava quindi una modifica del consenso oltre al problema dell'implementazione crittografica. La libreria separata libzerocoin forniva le routine crittografiche di base; le applicazioni dovevano comunque implementare i formati delle transazioni, la validazione delle monete create, il tracciamento dei numeri di serie spesi e il riscatto.[1][7][6]

Garanzie e limiti della privacy

I tagli fissi rendono confrontabili le monete ammissibili, ma limitano i pagamenti. La proposta originale consentiva diversi tagli tramite istanze separate del protocollo che condividevano i parametri pubblici. Un pagamento che comprende più monete a taglio fisso richiede più spese, ciascuna con la propria prova. Un riscatto poteva anche creare un'altra moneta, permettendo di trasferire valore tra istanze con tagli diversi.[1][8]

L'insieme accumulato delle monete create non garantisce permanentemente quel numero di possibili origini. Il paper presenta un caso limite: se tutte le creazioni precedenti sono state riscattate, una nuova creazione può essere l'unica fonte possibile della spesa successiva. Il numero di creazioni e spese, la scelta dei tagli e i tempi incidono su ciò che un osservatore può dedurre. L'anonimato effettivo dipende quindi dall'attività degli altri utenti oltre che dalla correttezza delle prove.[1][8]

La privacy del registro non nasconde automaticamente l'origine di rete di una transazione. Il paper tratta separatamente l'anonimato a livello di rete; la compromissione del wallet può esporre i dati segreti che collegano le monete alle rispettive creazioni. Nascondere il collegamento tra creazione e spesa non nasconde neppure tutte le destinazioni e gli importi pubblici delle transazioni. Questi limiti distinguono la costruzione originale da un sistema che supporta trasferimenti interamente privati all'interno di un registro schermato.[1][6][3]

Parametri RSA e configurazione iniziale fidata

L'accumulatore usa un modulo RSA N formato da fattori primi segreti. Chiunque conservi tali fattori può compromettere la protezione dell'accumulatore contro prove di appartenenza contraffatte, consentendo potenzialmente la creazione di monete false. La generazione sicura dei parametri e la distruzione dei fattori segreti sono quindi questioni distinte dall'assenza di un servizio di mixing custodial.[1][8]

Il paper originale discute sia la generazione dei parametri con una configurazione fidata e la distruzione dei fattori, sia un'alternativa proposta senza trapdoor chiamata RSA UFOs. Le implementazioni vanno valutate in base al metodo effettivamente usato per generare i parametri. Il fatto che Zerocoin non richieda un emittente fidato per ogni transazione non dimostra che ogni implementazione abbia una configurazione priva di fiducia.[1][8]

Costi prestazionali e ricerche successive

Zerocoin offre una separazione più netta tra creazioni e spese al costo di prove più grandi e calcoli aggiuntivi. Rational Zero descrive il progetto originale con sicurezza di 80 bit: la prova di spesa è di circa 25 KB e la verifica richiede circa 0.5 secondi con quei parametri. Sono misurazioni storiche di ricerca, non specifiche o benchmark per Bitcoin oggi o per ogni successiva implementazione di Zerocoin.[8]

Anche gli autori di 2013 testarono blocchi in un client Bitcoin modificato. L'esperimento comprendeva blocchi di 200, 400 e 800 transazioni con diverse proporzioni di creazioni e spese; un blocco di 800 transazioni composto da transazioni Zerocoin venne verificato in meno di cinque minuti nella loro configurazione. Il risultato dipendeva dall'hardware di prova, dai parametri e dal carico di lavoro. Non significa che blocchi arbitrari attuali abbiano lo stesso costo.[1]

Il paper Rational Zero del 2014 studiava un anonimato più forte nel lungo periodo, la divisibilità e prove più piccole. Un'ottimizzazione proposta riduceva i parametri di solidità assumendo che un contraffattore razionale dal punto di vista economico non spendesse per attaccare una moneta più del valore recuperabile. Era un modello di minaccia specifico, con limiti per gli attaccanti motivati da obiettivi diversi dal profitto finanziario; non costituiva una garanzia generale di sicurezza con parametri ridotti.[8]

Implementazioni e proposte storiche

ZeroVert

Un annuncio degli sviluppatori di ZeroVert del novembre 2014 descriveva una criptovaluta basata su Zerocoin e includeva un collegamento al rilascio di un wallet. In seguito, i ricercatori che studiarono le vulnerabilità di Zerocoin descrissero ZeroVert come un predecessore abbandonato di Zcoin. Questo esperimento precedente rende fuorviante affermare senza riserve che Zcoin sia stata la prima implementazione. Il rilascio storico non dimostra che oggi esista una rete attiva. L'annuncio del progetto indicava il merge mining Scrypt-N con Vertcoin e una fornitura totale prevista di 8.4 milioni di ZER. Sono specifiche annunciate dagli sviluppatori, non dati attuali sulla rete o sull'offerta verificati indipendentemente.[9][5]

Moneta, Zcoin e Firo

Moneta era un nome iniziale usato dal progetto poi diventato Zcoin. Il rilascio di dicembre 2015 riguardava una fase testnet; secondo la ricostruzione del progetto, il nome fu cambiato prima del lancio della rete reale. Firo data il lancio di Zcoin al 2016-09-28. Poramin Insom fu uno dei fondatori. La pubblicazione di una testnet e il lancio del mainnet sono traguardi distinti.[10][11][12][13]

La ricostruzione del progetto di 2019 afferma che Zerocoin fu usato da settembre 2016 ad aprile 2019. Sigma, il sistema sostitutivo senza configurazione fidata, entrò in funzione il 2019-07-30. Nell'ottobre 2020 Zcoin annunciò il cambio di nome in Firo sulla stessa blockchain. Le ricerche successive portarono ad altri protocolli per la privacy; Lelantus Spark entrò in funzione sul mainnet di Firo il 2024-01-18. Queste tappe descrivono l'evoluzione di quel progetto, non una migrazione universale di tutte le implementazioni Zerocoin.[14][15][2][16]

PIVX e zPIV

PIVX pubblicò il wallet 3.0.0 con zPIV basato su Zerocoin il 2017-10-16, presentandolo come la prima implementazione del protocollo su una criptovaluta proof-of-stake. Una FAQ successiva afferma che la creazione di zPIV fu disabilitata il 2019-03-07. La conversione degli zPIV esistenti in normali PIV rimase una questione distinta; un aggiornamento del novembre 2020 descrisse spese pubbliche per la conversione e annunciò la fine del supporto zPIV con la versione 5.0.[17][18][19]

Il successivo sistema SHIELD di PIVX usa una tecnologia per la privacy diversa ed entrò in funzione il 2021-01-30, secondo il rapporto sullo sviluppo. La sequenza comprende quindi il lancio, la disattivazione della creazione di nuove monete, un periodo di conversione e infine la sostituzione, non un'unica data in cui tutte le funzionalità zPIV scomparvero.[20][19]

SmartCash, Zoin, Hexxcoin e Veil

Nella divulgazione di aprile 2018, i ricercatori della FAU indicarono Zcoin, PIVX, SmartCash, Zoin e Hexxcoin come progetti che usavano Zerocoin. Riferirono che SmartCash aveva disabilitato la funzione. In seguito Veil documentò la propria implementazione basata su libzerocoin e la risposta di emergenza del 2019. Queste fonti datate attestano un'adozione storica, ma non dimostrano che ogni progetto menzionato offra oggi la stessa funzione.[5][21]

Anoncoin e sistemi a conoscenza zero correlati

Il repository di Anoncoin contiene una panoramica esplicitamente etichettata come vecchia e non aggiornata, che descrive Zerocoin come ancora in sviluppo. Documenta un piano, non prova che sia stata rilasciata un'implementazione Zerocoin funzionante. La vecchia affermazione al presente secondo cui Zerocoin veniva implementato lì richiede questa precisazione storica.[22]

CredaCash rientra nella storia più ampia dei sistemi di privacy a conoscenza zero e non va considerato, senza prove, un'implementazione dello schema di accumulatore di Zerocoin. Il suo repository descrive un sistema di transazioni distinto, progettato per nascondere input, output e importi. L'uso di tecniche a conoscenza zero non rende di per sé due sistemi implementazioni dello stesso protocollo. Le vecchie previsioni di lancio e le affermazioni sulle prestazioni richiedono fonti datate specifiche.[23][3]

Risultati e incidenti di sicurezza

Nel febbraio 2017 Zcoin subì un episodio inflazionistico dovuto a un errore di implementazione. Uno studio accademico sulla divulgazione descrive un operatore C++ errato e la creazione di monete aggiuntive. Fu un errore nella validazione del software, distinto dalle successive vulnerabilità delle costruzioni crittografiche di Zerocoin. Le stime storiche delle perdite variano; il meccanismo è documentato meglio di una singola cifra finanziaria priva di qualifiche.[24]

Ad aprile 2018 i ricercatori della FAU divulgarono un attacco che impediva la spesa: nelle condizioni descritte, un aggressore poteva rendere non spendibile la moneta di un utente onesto. Segnalarono separatamente errori di programmazione capaci di consentire la creazione non autorizzata o il furto di monete. Impedire una spesa, causare inflazione e sottrarre fondi sono esiti diversi, con implementazioni coinvolte e rimedi differenti.[5]

Il resoconto contemporaneo di Veil distingue un exploit dell'implementazione wrapped-serial avvenuto a marzo 2019 da un'altra vulnerabilità identificata dopo che Zcoin aveva rilevato un attacco ad aprile. La vulnerabilità di aprile consentiva spese contraffatte e inflazione. La risposta temporanea di Veil sacrificò l'anonimato delle monete create per chiudere l'exploit; il resoconto afferma che la misura non rivelò retroattivamente le creazioni precedenti. Altri progetti optarono per arresti, conversioni o sostituzioni diverse.[21][14]

Il repository originale di libzerocoin descrive oggi il proprio codice come abbandonato e non mantenuto, con exploit noti. È utile come documentazione storica dell'implementazione, non come riferimento di produzione attuale. La sicurezza di un fork derivato non si può dedurre dal paper originale, dal nome del progetto o dal fatto che un altro progetto abbia corretto un problema correlato.[7][24]

Zerocoin, Zerocash e Zcash

Il paper del 2014 su Zerocash sviluppò un sistema distinto per pagamenti privati usando prove succinte a conoscenza zero. Estese la privacy dall'origine della transazione alla destinazione e all'importo e supportò trasferimenti all'interno del sistema privato. I dati sulle prestazioni riguardano quella costruzione, non Zerocoin originale. Zcash nacque da questa linea di ricerca; non è un altro nome per Zcoin né per il protocollo Zerocoin originale.[3][4]

Risorse di ricerca e software

I paper originali su Zerocoin e Rational Zero illustrano la costruzione e i relativi compromessi; il paper su Zerocash documenta il successivo progetto distinto. Il repository archiviato di libzerocoin e le note d'integrazione mostrano quali funzioni forniva la libreria prototipale e quali restavano a carico dell'applicazione. Gli annunci storici dei progetti aiutano a datare le implementazioni, mentre le successive divulgazioni di sicurezza qualificano le affermazioni precedenti.[1][8][3][7][6]

Riferimenti

  1. ↑ 1,00 1,01 1,02 1,03 1,04 1,05 1,06 1,07 1,08 1,09 1,10 1,11 1,12 Miers, Garman, Green and Rubin, Zerocoin: Anonymous Distributed E-Cash from Bitcoin (2013)
  2. ↑ 2,0 2,1 Firo, Zcoin is becoming Firo, 2020-10-27
  3. ↑ 3,0 3,1 3,2 3,3 3,4 3,5 Ben-Sasson et al., Zerocash: Decentralized Anonymous Payments from Bitcoin (2014)
  4. ↑ 4,0 4,1 Zcash documentation, Project History
  5. ↑ 5,0 5,1 5,2 5,3 5,4 5,5 FAU researchers, A Cryptographic Flaw in Zerocoin (and Two Critical Coding Issues), 2018-04-12
  6. ↑ 6,0 6,1 6,2 6,3 6,4 6,5 6,6 6,7 6,8 Zerocoin authors, Integrating with Bitcoin clients
  7. ↑ 7,0 7,1 7,2 Zerocoin authors, archived libzerocoin repository and README
  8. ↑ 8,0 8,1 8,2 8,3 8,4 8,5 8,6 Garman et al., Rational Zero: Economic Security for Zerocoin with Everlasting Anonymity (2014)
  9. ↑ ZeroVert developer announcement, 2014
  10. ↑ Firo project, historical account of ZeroVert, Moneta and Zcoin
  11. ↑ Firo, sixth-anniversary retrospective, 2022-09-28
  12. ↑ Contemporaneous interview with Moneta founders, December 2015
  13. ↑ Firo project, founders and team
  14. ↑ 14,0 14,1 Firo, Zcoin: 2019 in Review, 2020-01-21
  15. ↑ Firo, Sigma is Live on Zcoin, 2019-07-30
  16. ↑ Firo, Lelantus Spark is live on Firo, 2024-01-18
  17. ↑ PIVX, zPIV launch announcement, 2017-10-16
  18. ↑ PIVX, FAQ on Zerocoin and PIVX, 2019
  19. ↑ 19,0 19,1 PIVX, development update, November 2020
  20. ↑ PIVX, development update Q1 2021
  21. ↑ 21,0 21,1 Veil, The libzerocoin exploit, security measure, and the future, 2019-05-15
  22. ↑ Anoncoin project repository, historical unedited overview
  23. ↑ CredaCash project source repository and protocol overview
  24. ↑ 24,0 24,1 Böhme et al., Responsible Vulnerability Disclosure in Cryptocurrencies