Da cosa si difende il Proof of Participation
Il Proof of Participation è stato progettato contro un attaccante forte: uno che può gestire un numero qualsiasi di nodi e account, vede ogni messaggio sulla rete, sfrutta qualsiasi difetto della logica e ha molto denaro. Presuppone soltanto che l'attaccante non possa falsificare firme, non possa trovare collisioni di hash e non possa comprare ogni token. Contro questo attaccante, mira a impedire quattro cose: il furto, la censura, la riscrittura della cronologia e il disturbo della catena. Questa pagina esamina i principali attacchi e le regole che vi rispondono.
Comprare la produzione dei blocchi
Nel Proof of Work il potere segue l'hardware; nel Proof of Stake, le monete. Entrambi si possono comprare in fretta. Nel Proof of Participation ogni seggio registrato non sospeso ha la stessa possibilità di essere estratto per il blocco successivo, qualunque sia il suo saldo o il suo hardware (vedi estrazione). Monete e macchine da sole non comprano nulla: il potere richiede seggi.
I seggi arrivano solo attraverso la coda, al ritmo fissato dal protocollo. Il primo nuovo arrivato entra 7 giorni dopo la genesi. Ogni ammissione fissa poi l'attesa per la successiva: 600 giorni divisi per i seggi conteggiati prima di quel nuovo arrivato, entro un minimo di 7 e un massimo di 90 giorni. I seggi genesi contano al massimo come 11, e i seggi sospesi non contano. Con 11 seggi l'attesa è di circa 54,5 giorni, quindi il secondo nuovo arrivato entra intorno al giorno 61,5. La coda è ordinata per stake moltiplicato per il tempo di attesa, quindi un attaccante deve anche superare le offerte dei candidati onesti.
Identità Sybil
Un attaccante Sybil crea molte identità per ottenere influenza. Nel Proof of Participation un'identità è un seggio del registro, e ogni seggio ha costi reali:
- Denaro. Uno stake bloccato almeno pari al minimo della coda, che parte da 100 ZBC (i seggi possono votarlo tra un'unità atomica e 250 ZBC, e all'ingresso la metà dello stake mediano in coda può alzarlo). Il 10 % è a rischio.
- Tempo. Un posto in una coda ordinata per stake × tempo di attesa, e un'ammissione cadenzata: settimane o mesi tra un nuovo arrivato e l'altro.
- Lavoro. Un nuovo seggio parte con un punteggio di partecipazione del 20 % e non guadagna nulla finché non è maturo: 4 unità di punteggio dopo l'ammissione più un blocco proprio, 2 giorni sotto i 2.880 nodi. Deve poi continuare a produrre ai suoi turni e a inoltrare.
Un seggio che diventa silenzioso conta come mancante, non guadagna nulla e perde punteggio; a zero viene espulso e il 10 % del suo importo bloccato va al pool di longevità. Lo stesso 10 % si perde uscendo mentre si è mancanti o sospesi, o lasciando la coda. Un'uscita in regola restituisce l'intero importo bloccato dopo un periodo di attesa di 7 giorni. Vedi turni mancati, sospensione ed espulsione e uscire dal registro.
Una maggioranza dei seggi
Supponiamo che un attaccante controlli davvero più della metà dei seggi. Produrrebbe la maggior parte dei blocchi e potrebbe costruire il ramo più pesante, che è ciò che una maggioranza compra in qualsiasi modello basato sulla catena più pesante. Potrebbe:
- ritardare o censurare transazioni escludendole dai propri blocchi;
- sostituire blocchi recenti, entro il limite di rollback, costruendo un ramo più pesante.
Non potrebbe falsificare nulla. Ogni nodo verifica ogni blocco: la firma di ogni transazione, la prova del seed di ogni blocco, ogni ricevuta e ogni importo della coinbase. Una maggioranza non può spendere gli ZBC di account di cui non detiene le chiavi, non può pagarsi più del piano fisso della coinbase e non può riscrivere la cronologia più vecchia di 720 blocchi (3 ore) o sotto l'ultimo checkpoint della spine (vedi finalità e rollback). Anche i blocchi prodotti dopo turni saltati pesano meno, e i seggi inattivi perdono reddito e punteggio.
Giocare con il seed
Il seed che guida ogni estrazione è l'output di una funzione casuale verificabile: un produttore non può sceglierlo tra più valori. La sua unica leva è trattenere il proprio blocco, il che costa un turno mancato, reddito e punteggio, e consegna soltanto il seed al nodo estratto successivo (vedi seed del blocco (VRF)).
Riscrivere la cronologia da molto indietro
Un attacco long-range costruisce una cronologia diversa partendo da molto indietro nel passato, per esempio con le vecchie chiavi di nodi usciti dal registro molto tempo prima. Ciascuna di queste difese lo ferma da sola:
- un nodo in funzione non fa mai rollback di più di 720 blocchi;
- nessun nodo si riorganizza sotto l'ultimo checkpoint co-firmato sulla catena spine;
- un nuovo nodo segue la spine, i cui blocchi richiedono due terzi dei seggi e che registra quali chiavi dei nodi sono entrate e quali sono uscite, quindi le chiavi uscite molto tempo prima non sono nella sua lista dei firmatari;
- la release che un nuovo nodo installa può contenere un pin della release, quindi una cronologia della spine falsificata viene rifiutata all'avvio.
Le chiavi non scadono, e nessuno esamina i rami a mano.
Eclipse
In un attacco eclipse, l'attaccante circonda un nodo con i propri peer così che il nodo veda solo la catena dell'attaccante. Contro un nodo registrato è difficile. I suoi peer assegnati, 12 su mainnet, vengono estratti dal seed di un blocco di periodo e riestratti ogni 40 blocchi (circa 10 minuti), quindi l'attaccante non può sceglierli (vedi ricevute e topologia della rete). I peer dimostrano le proprie chiavi del nodo con un handshake firmato che indica anche l'hash genesi della catena. E basta un solo peer onesto: la scelta del fork avviene per peso, quindi una sola connessione che segnala un ramo più pesante permette al nodo di scaricarlo e verificarlo blocco per blocco. Un nodo la cui punta è diventata obsoleta segue la punta che riportano due terzi di un campione di peer registrati.
Il traffico tra peer viaggia come semplice gRPC, senza cifratura: la protezione viene da firme e verifiche, non dalla segretezza.
Altri attacchi
- La doppia firma di un blocco viene dimostrata da un EquivocationReport e addebitata come turno mancato (vedi doppia firma (equivocazione)).
- Riprodurre una transazione firmata su un'altra catena ZooBC non funziona, perché ogni firma copre l'hash genesi della catena (vedi firme legate alla catena).
- Gli snapshot falsificati vengono intercettati dagli hash indicati nella spine co-firmata e da un campione verificato con i peer registrati (vedi snapshot e fast sync).