TL;DR

Mentre Electric Coin Co. (ECC) e la comunità di Zcash si preparano per le retrospettive pubbliche di Network Upgrade 5 (NU5) e di quello che è diventato noto come l’attacco sandblasting, questo post descrive in dettaglio le motivazioni, le sfide e i risultati dell’ECC in relazione a ciascuno.

  • L’aggiornamento di NU5 è stata un’impresa ambiziosa per eliminare la necessità del trusted setup, aumentando la fiducia degli utenti e migliorando la sicurezza e la scalabilità di Zcash.
  • L’implementazione di Halo, un’innovazione crittografica, su Zcash che ha reso possibile per la prima volta le transazioni schermate e prive di fiducia sui telefoni cellulari.
  • Un attacco dannoso in seguito all’aggiornamento ha portato a significativi problemi di prestazioni del portafogli, spingendo ECC ad entrare in modalità di emergenza. La nostra risposta ha comportato diversi aggiornamenti tecnici, miglioramenti delle prestazioni e il rilascio di nuovi SDK per portafogli mobile.
  • Nonostante le sfide e i ritardi, ECC è riuscita a migliorare la sicurezza e la resilienza di Zcash.

Retrospettiva pubblica: mercoledì 13 dicembre alle 22:00 UTC/17:00 EST; link in arrivo


Che cos’è il FUD?

La missione dell’ECC è quella di potenziare la libertà economica e la maggior parte delle organizzazioni che lavorano su progetti legati a Zcash, come la Zcash Foundation (ZF) e Zcash Community Grants (ZCG), hanno obiettivi simili per il miglioramento dell’umanità.

Tuttavia, da quando Zcash è venuto al mondo nel 2016, un flusso di disinformazione e propaganda coordinata sono state fatte circolare sui social media, sui forum e su altre piattaforme con lo scopo di incitare il FUD (paura, incertezza e dubbio).

Le voci sostenevano che Zcash fosse stato compromesso, che fosse vulnerabile, o che ci fosse una backdoor che avrebbe permesso a terzi di accedere alle informazioni sulle transazioni di un utente senza il loro consenso.

E sfortunatamente, fino al rilascio di NU5, c’era un grosso ostacolo nell’affrontare questi attacchi: il trusted setup. Quando Zcash è stato lanciato, le sue prove a conoscenza zero richiedevano una cerimonia, od una configurazione affidabile (trusted setup), per produrre parametri pubblici che consentissero agli utenti di costruire e verificare transazioni private.

Questa tecnica è stata sperimentata dall’ECC e richiedeva a più parti in luoghi diversi utilizzare complesse misure di sicurezza.

Indipendentemente dalla pianificazione e dall’esecuzione estremamente attente, oltre alla sicurezza ridondante, gli utenti e gli osservatori di Zcash hanno dovuto fidarsi del fatto storico che i partecipanti alla cerimonia non stavano cospirando per ingannare il pubblico. Le configurazioni affidabili non consentono una fornitura matematicamente verificabile e, finché queste complicate procedure fossero necessarie per i principali aggiornamenti di Zcash, ci sarebbero stati sempre dubbi e detrattori. E i dubbiosi avrebbero ragione: la matematica è verificabile, ma la storia non lo è. La reputazione e l’integrità di Zcash erano messe in discussione e, dal punto di vista di ECC, questo era un problema che la comunità non poteva permettersi di ignorare.

NU5: Un invito all’azione

Nel 2019, gli ingegneri ECC Sean Bowe, Daira Emma Hopwood e Jack Grigg stavano lavorando alla progettazione della scalabilità e sperimentando una soluzione per una ricorsione efficiente quando Bowe ha fatto una scoperta.

“Mi sono appena imbattuto in una tecnica per fare questa costruzione a prova di conoscenza zero su curve ellittiche completamente ordinarie”, ha detto Bowe. “E così, nel corso di circa 24 ore, si è passati da: ‘Ooh, è davvero eccitante, sarà bello se riusciamo a farlo’ a ‘Porca miseria, ora che non abbiamo trusted setup o altro, è tutto molto più semplice. È stata una serie di passaggi che si sono trasformati da una bella intuizione in un completo cambio di paradigma”.

Halo, come sarebbe diventato noto, è un sistema di prova a conoscenza zero che consente la ricorsione senza una configurazione affidabile (trusted setup) in modo efficiente.

La scoperta di Bowe è stata una svolta crittografica acclamata dal settore e nel 2021 ECC si è impegnata a implementare Halo in Zcash.

Halo su Zcash avrebbe reso possibili per la prima volta transazioni private e prive di fiducia anche sui telefoni cellulari. Servirebbe da catalizzatore per la fiducia degli utenti di Zcash e fornirebbe un sentiero verso una scalabilità molto maggiore, rendendo il protocollo più attraente, più veloce e più economico su cui sviluppare.

Dal blog di ECC:

Halo su Zcash consentirebbe gli aggiornamenti del circuito senza la necessità del trusted setup, rendendo il protocollo schermato di Zcash più agile per miglioramenti futuri, come il supporto di risorse aggiuntive come Zcash Shielded Assets (ZSA). Vogliamo rendere più facile per altri progetti e token beneficiare delle funzionalità di Zcash, come la privacy attraverso la crittografia. Il trusted setup diventerà un residuo del passato.
Inoltre, questo aggiornamento aprirebbe la strada alla scalabilità schermata di Zcash attraverso l’aggregazione delle prove e la concisione della blockchain, due miglioramenti della scalabilità. Ciò migliorerebbe l’esperienza dell’utente eliminando il frustrante tempo di sincronizzazione che affligge tutte le blockchain oggi, riducendo il tradizionale sovraccarico della blockchain e consentendo commissioni non crescenti con l’aumento dell’utilizzo. Nelle conversazioni con le grandi piattaforme che hanno espresso interesse per il supporto nativo di Zcash, è stato indicato un percorso praticabile per la scalabilità come requisito a breve termine.

A gennaio 2021, dopo più di un anno di ricerca e sviluppo di Halo, ECC ha concluso che i vantaggi di Halo su Zcash superavano le altre priorità del protocollo e abbiamo proposto di implementarlo in NU5.

Guarda il video di Zcash Media sulla cerimonia originale, i suoi partecipanti (incluso Edward Snowden) e su come Halo rende obsolete i trusted setup.

Obiettivi e ostacoli di NU5

I nostri obiettivi per NU5 sono stati fin dall’inizio: (1) rendere Zcash più sicuro, (2) dare fiducia agli utenti di Zcash rendendo l’offerta matematicamente verificabile, (3) facilitare gli aggiornamenti futuri e (4) consentire agli aggiornamenti futuri di beneficiare delle prove ricorsive per migliorare la scalabilità e la programmabilità.

La nostra stima iniziale di 6-7 mesi si è rivelata eccessivamente ottimistica – man mano che venivano fatte nuove scoperte, si rivelavano opportunità nel processo e sorgevano complessità tecniche – e alla fine il viaggio è durato quasi un anno e mezzo.

Lungo il percorso, abbiamo affrontato una serie di sfide tecniche. Ad esempio, la complessità di includere il supporto di Orchard nel portafoglio zcashd non è stata adeguatamente valutata nelle stime originali per la timeline di NU5.

ECC ha dovuto affrontare ostacoli ingegneristici dispendiosi in termini di tempo, come la costruzione di un circuito complicato per Halo-plus-Orchard per farlo funzionare sui dispositivi mobile. E durante il processo, abbiamo preso la decisione di implementare gli indirizzi unificati (UA) per abilitare lo shielded by default nei portafogli supportati. La progettazione e la realizzazione degli UA sono state difficili, e se all’epoca ECC avesse praticato una pianificazione e uno sviluppo orientati al prodotto (come facciamo ora) crediamo che avremmo identificato prima la necessità degli UA e la loro implementazione sarebbe stata più semplice.

Oltre ad affrontare sfide tecniche come queste, oltre ad alcuni bug a sorpresa, l’ECC ha speso tempo e risorse significative per sostenere e difendere le nostre decisioni nella roadmap dalle critiche per: la nostra logica (sbarazzarsi del trusted setup non valeva il tempo e lo sforzo, gli ZSA erano più importanti), la nostra pianificazione (abbiamo dato il via alla discussione pubblicamente prima di pianificare abbastanza – e abbiamo pianificato troppo prima di iniziare il lavoro), la decisione di concedere la licenza di Orchard sotto la Bootstrap Open Source Licence (BOSL), la decisione di implementare gli indirizzi unificati (UA) e il nostro approccio generale agli aggiornamenti della rete (le nostre priorità erano arbitrarie e fuori tema).

È importante riconoscere che abbiamo avuto anche un significativo supporto da parte della comunità durante il processo. Nel complesso, il sentiment della comunità è stato positivo. Abbiamo ricevuto preziose informazioni e feedback dal nostro comitato consultivo scientifico e audit di sicurezza cruciali da Qedit e dal gruppo NCC.

Cronologia e risultati del NU5

Escludendo la ricerca e lo sviluppo pre-implementazione, NU5 è stato uno sforzo di 17 mesi che ha fornito una nuova tecnologia e migliorato l’esperienza utente di Zcash.

Linea temporale

Quando Zcash NU5 è stato attivato sulla mainnet il 31 maggio 2022, è stata una delle pietre miliari più importanti per Zcash dal lancio della criptovaluta nel 2016. Come ha detto il CEO dell’ECC Zooko Wilcox, “un passo avanti storico per la società umana”.

Con il lancio del protocollo di pagamento schermato Orchard che utilizza Halo, abbiamo eliminato il trusted setup per migliorare la sicurezza e la sostenibilità di Zcash, abbiamo reso la fornitura matematicamente verificabile, abbiamo migliorato la scalabilità perché i futuri aggiornamenti della rete non richiederanno una complicata cerimonia di impostazione, abbiamo aperto la strada a una maggiore interoperabilità fornendo un sistema in grado di sbloccare prove private cross-chain su scala, e abbiamo introdotto BOSL che ha restituito valore alla comunità di Zcash (ad esempio, le sovvenzioni della Filecoin Foundation e della Ethereum Foundation a Brave e Edge).

Si è trattato di uno sforzo enorme e, dopo quasi un anno e mezzo di costruzione e di lotta contro le sfide tecniche di NU5, il team ECC Core era pronto per un po’ di riposo. Ma quasi subito, Zcash è stata colpita da un altro problema che non potevamo ignorare.

L’attacco sandblasting

Nel giugno 2022, quasi subito dopo il lancio di NU5 da parte di ECC, è emerso un grave problema. La rete Zcash ha iniziato a registrare un enorme aumento delle dimensioni e dell’attività delle transazioni schermate. Questo carico di rete aggiuntivo ha causato un “accumulo di dati” che ha impedito ad alcuni wallet (Nighthawk, Edge e Unstoppable) di sincronizzarsi in un lasso di tempo ragionevole. I portafogli non si sincronizzavano e alcuni utenti non erano in grado di accedere ai propri fondi.

Questo era un problema che ECC, in qualità di principale manutentore di zcashd e fornitore di SDK per portafogli mobile, era nella posizione migliore per affrontare.

Attacco sandblasting: un invito all’azione

All’inizio, alcuni membri dell’ECC non volevano ipotizzare che questo insolito carico di transazioni fosse opera di un soggetto malintenzionato. Alla fine, però, le prove che si trattasse di un attore malintenzionato sono diventate schiaccianti e abbiamo motivo di credere che possa essere stato coordinato dallo stesso attore o gruppo di attori che hanno diffuso il FUD su Zcash e che potrebbero essere stati pagati per farlo.

Ma risolvere questo mistero era meno importante che risolvere il problema.

Attacco sandblasting: obiettivi e ostacoli

La nostra priorità assoluta era garantire che gli utenti potessero riottenere l’accesso e spendere le loro monete ZEC (Zcash). Questo è fondamentale per la nostra missione di libertà economica e un requisito per il denaro digitale privato e reale.

Come prima linea di difesa, abbiamo rilasciato miglioramenti delle prestazioni in zcashd 5.1.0 e 5.2.0 per ridurre i tempi di verifica fino all’80%. Abbiamo anche iniziato a lavorare sugli aggiornamenti delle prestazioni dei nostri SDK per portafogli mobili.

Nell’agosto del 2022, con ancora molto lavoro da fare per risolvere i problemi di prestazioni dei portafogli, l’ECC è entrata in modalità di emergenza. Questo è stato il nostro criterio per uscire dalla modalità di emergenza:

  • Gli utenti di Edge, Nighthawk e Unstoppable possono spendere i loro fondi attuali (fondi già sincronizzati all’apertura del portafoglio).
  • Gli utenti di questi portafogli possono ricevere e diventare in grado di spendere nuovi fondi in entrata al ritmo di un mese di transazioni in 1 ora.
  • Gli utenti di questi portafogli vedono gli aggiornamenti di sincronizzazione che sono leggermente confusi sui progressi.
  • Nessuno di questi portafogli è influenzato da frequenti arresti anomali o comportamenti incoerenti (come la mancata visualizzazione di alcune transazioni già sincronizzate), né richiedono comportamenti di aggiramento a causa dell’SDK ECC.

I problemi di prestazioni del portafoglio presentavano una serie complicata di sfide da affrontare e richiedevano lo sviluppo e l’implementazione di (1) un algoritmo più veloce che non richiedesse una sincronizzazione lineare di tutti i blocchi sulla catena e (2) modifiche agli strumenti che consentissero agli utenti di spendere fondi senza avere una catena completamente sincronizzata. La soluzione ha richiesto modifiche a tutti i componenti dello stack del portafoglio mobile schermato: zcashd, lightwalletd, gli SDK del portafoglio ECC e il prototipo di portafoglio ECC.

A livello interno, le modifiche alle fee sono state discusse fin dall’inizio, ma per i primi mesi il team ECC si è concentrato su ulteriori miglioramenti delle prestazioni e ha lavorato per risolvere il problema senza modificare le fee. In seguito, abbiamo deciso di implementare le modifiche alle fee per limitare l’attacco di spam.

Poiché gli utenti si sono sentiti frustrati dalla loro esperienza, alcuni membri della comunità hanno criticato pubblicamente l’ECC per non essere stato preparato all’attacco e per essere stato lento a rispondere.

A febbraio 2023, la società di sicurezza blockchain Halborn ci ha notificato delle vulnerabilità ereditate da Bitcoin Core che potrebbero aver interessato più di 280 blockchain, tra cui Zcash. Questa è stata un’altra emergenza che ha coinvolto tutti i problemi di prestazioni del portafoglio e, poiché ECC è stato l’unico team a cui è stata notificata la vulnerabilità, siamo stati gli unici a poter apportare le correzioni necessarie. Il coordinamento della divulgazione e della correzione ha richiesto circa un mese del nostro tempo.

A peggiorare le cose, ECC come organizzazione di ingegneria stava tentando di fare troppe cose contemporaneamente: manutenzione dei nodi principali, supporto di CEX come Coinbase, Binance e Gemini, backport da Bitcoin, SDK mobile, applicazioni di portafoglio mobile e futuri miglioramenti del protocollo. L’ECC è stato ristrutturato nel maggio 2023, il che ha messo a dura prova le risorse in modo temporaneo.

Sfide aggiuntive

  • All’epoca, le pratiche di comunicazione interna e di gestione dei progetti dell’ECC non erano organizzate per una situazione in modalità di emergenza. Ciò ha influito sulla nostra comprensione delle priorità e del flusso di lavoro tra i team.
  • Prima dell’attacco, la strategia dell’ECC si concentrava prima sull’adozione, invece che sulle prestazioni e sulla scalabilità. Gli utenti desiderano nuove funzionalità e lavorare per migliorare le prestazioni rallenta i rilasci delle funzionalità. Ma l’attacco ha portato immediatamente Zcash UX al limite.
  • Debito tecnico: avevamo implementato precedenti aggiornamenti di rete con miglioramenti delle prestazioni limitati.
  • ECC ha ampiamente sottovalutato il tempo necessario per risolvere i problemi di prestazioni dei portafogli.
  • Sono sorti altri problemi tecnici che hanno causato ritardi, ad esempio quando speed.z.cash è andato in bitrot e poi eliminato mentre ECC era senza un devops manager.
  • Il team principale dell’ECC aveva tre diversi manager durante la modalità di emergenza.
  • La modalità di emergenza ha rallentato lo sviluppo del nostro prodotto wallet pianificato, ora noto come Zashi. Tuttavia, siamo stati in grado di sfruttare il prototipo internamente per convalidare e testare i miglioramenti dell’SDK.

L’ECC ha avuto la fortuna di avere partner proattivi nel settore dei portafogli – Edge, Nighthawk e Unstoppable – che hanno collaborato con noi per testare le versioni e presentare i bug, e sono stati rapidi nell’implementare gli SDK 2.0 quando erano pronti.

Attacco Sandblasting: cronologia e risultati

In tutto, la risposta dell’ECC e l’implementazione da parte di wallet di terze parti hanno richiesto circa 16 mesi. A novembre 2023, Edge, Nighthawk e Unstoppable sono tornati a funzionare (meglio che mai) e abbiamo annunciato la fine della modalità di emergenza.

Linea temporale

  1. Giugno 2022: è iniziato lo spamming in rete; le transazioni schermate sono balzate da una media mensile di 42.600 a 21.622.590 nel solo mese di giugno
  2. Luglio 2022: abbiamo implementato miglioramenti delle prestazioni in zcashd 5.1.0 e 5.2.0 per ridurre i tempi di verifica fino all’80% e abbiamo iniziato a lavorare su miglioramenti delle prestazioni dei nostri SDK per portafogli mobile
  3. Agosto 2022: l’ECC è entrata ufficialmente in modalità di emergenza, anche se non abbiamo utilizzato questo termine nelle comunicazioni scritte pubbliche fino a marzo 2023; ha iniziato a fare ricerche su Spend before sync
  4. Settembre 2022: mentre lavoravamo su zcashd e sul miglioramento dell’esperienza di sincronizzazione mobile, abbiamo riaperto la ricerca sui possibili meccanismi di modifica delle commissioni (ZIP 317) e sulle efficienze di sincronizzazione (DAGSync/Spend Before Sync)
  5. Ottobre 2022: è stato rilasciato zcashd 5.3.0 con ulteriori miglioramenti delle prestazioni per ridurre l’utilizzo simultaneo della memoria durante la scansione, oltre ad altre ottimizzazioni relative alla memoria e alle prestazioni nel nodo zcashd
  6. Ottobre 2022: abbiamo riaffermato i nostri obiettivi immediati per quanto riguarda i problemi di sincronizzazione con i nostri SDK wallet e comunicato i nostri criteri per uscire dalla modalità di emergenza
  7. Ottobre 2022: abbiamo comunicato la nostra intenzione di risolvere i problemi di prestazioni del portafoglio entro la fine di febbraio 2023
  8. Ottobre 2022: le modifiche apportate a zcashd ne hanno aumentato la robustezza contro l’attacco
  9. Novembre 2022: sono stati identificati e corretti gli ultimi bug noti che bloccavano la prima fase dei rilasci dell’SDK, sono stati proseguiti i progressi su Spend Before Sync e abbiamo iniziato a preparare sia zcashd che i portafogli mobile per ZIP 317; eliminato gli ultimi bug noti di librustzcash che bloccavano il rilascio del wallet e completato l’integrazione dell’SDK Android e iOS
  10. Dicembre 2022: Completata l’implementazione delle ottimizzazioni di zcashd che dovrebbero risparmiare memoria e ridurre i tassi di orfanità per i miner
  11. Febbraio 2023: è stato rilasciato zcashd 5.4.0 per introdurre una serie di miglioramenti delle prestazioni, un aggiornamento per correggere i report di fornitura e una pulizia delle funzionalità legacy e di supporto per migliorare la manutenzione continua della base di codice
  12. Marzo 2023: pubblicato un aggiornamento e un programma di rilascio che prevede la fine della modalità di emergenza entro la fine di maggio
  13. Aprile 2023: ECC ha rilasciato la versione 5.5.0 con il completamento della modifica della struttura delle commissioni di transazione (ZIP 317) e i miglioramenti dell’infrastruttura che hanno gettato le basi per la versione 5.6.0.
  14. Maggio 2023: (Ristrutturazione presso ECC) La data di rilascio di zcashd 5.6.0, lightwalletd e SDK è stata posticipata a metà giugno. Quando zcashd 5.5.0 ha iniziato ad essere adottato dai miner sulla rete, le modifiche alla struttura delle commissioni hanno iniziato a smussare l’efficacia dell’attacco di sandblasting, riducendo il tasso di crescita della blockchain e il carico di scansione del portafoglio.
  15. Giugno 2023: Rilasciato zcashd 5.6.0, che introduce la funzionalità necessaria ai portafogli leggeri per accedere ai fondi spendibili senza scansionare completamente la blockchain; inclusi aggiornamenti per risolvere i problemi relativi all’implementazione di ZIP-317 e alle funzionalità dell’informativa sulla privacy.
  16. Luglio 2023: Lightwalletd 0.4.14 è stato rilasciato, il che significa che l’SDK del portafoglio mobile era l’unico pezzo in sospeso nel piano di ECC per risolvere i problemi di prestazioni del portafoglio e uscire dalla modalità di emergenza. A questo punto, speravamo di rilasciare gli SDK a metà luglio.
  17. Agosto 2023: entro la fine di luglio, l’adozione di zcashd 5.5.0 da parte della rete è stata completata e il carico delle transazioni di rete è tornato ai livelli pre-NU5. Tuttavia, i dati della catena accumulati fino a questo punto presentavano ancora un problema per la scansione del portafoglio, quindi per mitigare questo problema ECC ha annunciato la disponibilità pre-release della funzionalità Spend Before Sync nei nostri SDK mobile e ha reso questa funzionalità disponibile agli sviluppatori di portafogli per i test. Sono stati scoperti diversi bug e problemi di esperienza utente. La tempistica per i rilasci dell’SDK è stata spostata a metà settembre.
  18. Settembre 2023: sono emersi nuovi bug, problemi di esperienza utente e dipendenze che hanno spostato la data di rilascio degli SDK alla fine di settembre.
  19. 26 settembre 2023: ECC ha rilasciato l’SDK mobile 2.0 aggiornato per gli sviluppatori iOS e Android. Questo è stato il risultato finale per uscire dalla modalità di emergenza.
  20. 1 novembre 2023: dopo un mese di produzione, non sono stati segnalati problemi di portafoglio importanti e correlati ed ECC ha dichiarato l’uscita dalla modalità di emergenza.

Il culmine della nostra risposta di sabbiatura è stato che i portafogli Zcash di terze parti hanno ripreso a funzionare e i futuri aggressori sono stati ulteriormente svantaggiati.

Durante questo periodo, ECC ha rilasciato diversi aggiornamenti a zcashd e lightwalletd, oltre a nuovi SDK per dispositivi mobile che, insieme, hanno introdotto nuove innovazioni (e apprendimento) nel mondo della crittografia e del denaro decentralizzato. Questi rilasci forniscono aggiornamenti massicci alla privacy, alla scalabilità e all’esperienza utente di Zcash e hanno implicazioni per tutti i progetti di crittografia incentrati sulla privacy.

I lavori continuano

NU5 e l’attacco sandblasting hanno richiesto quasi tre anni. Ma di fronte alle avversità organizzate, alle emergenze e alle critiche della comunità (alcune delle quali giustificate), l’ECC non si è allontanata dal suo impegno a sviluppare. Con gli alleati lungo il percorso, la comunità ha superato sfide tecniche senza precedenti e limitazioni di risorse per rendere Zcash più resiliente, affidabile e sicuro.

Abbiamo imparato molto, e anche se vorremmo fare un passo indietro e prendere una pausa, sappiamo che il lavoro è ora più importante che mai. Non vediamo l’ora di estrarre le lezioni da queste esperienze nella prossima retrospettiva, e siamo onorati di continuare gli sforzi per costruire per la libertà economica e una user experience di Zcash di livello mondiale.

Articolo precedenteIl rilascio di Zebra 1.4.0
Articolo successivoUn benvenuto alla nuova stagione dell’ECC: Un messaggio del Consiglio di amministrazione di Bootstrap