Attacchi Basati Sulla Rete Di Nodi
Capitolo 4 di Breaking Cryptocurrencies
“Anche la spada più bella, posta in acqua salata, finirà per arrugginire." –Sun Tzu “L’Arte della Guerra”
Iniziamo ad entrare nel capitolo che tutti aspettavamo: gli attacchi alla rete di una cryptocurrency. Il network di una criptovaluta è vitale per la sua esistenza: infatti essa costituisce l’unico mezzo per i nodi per scambiare informazioni. Se grossi attacchi venissero eseguiti, si potrebbe avere, oltre che un danno di immagine, un danno economico per miliardi.
In questo capitolo, punto per punto, analizzeremo le dinamiche di ogni attacco e le effettive contromisure per evitare che non accada. Si darà molta importanza a tutte quelle operazioni che aggravano implicitamente lo stato di un attacco.
Consensus
Prima di iniziare il nostro viaggio, è bene precisare un paio di concetti tecnici: il consenso e la rete P2P.
La fiducia nella tecnologia blockchain si basa sulla sicurezza del meccanismo di consenso distribuito il cui ruolo è quello di determinare, secondo regole comuni tra i partecipanti, il contenuto del prossimo blocco che sarà collegato alla blockchain.
Un meccanismo di consenso è un insieme di regole e procedure che validano un insieme coerente di fatti tra partecipanti. Gli algoritmi di consenso permettono ad un insieme di nodi che formano un gruppo di concordare il contenuto del “libro mastro” comune condiviso assicurato dalla crittografia. Permette anche di essere tollerante ai guasti (resiliente), proprietà che garantisce il continuamento della funziona quando alcune macchine si guastano.
Lo scopo del meccanismo del consenso distribuito è quello di designare il nodo (più legittimo) per generare in un dato momento il prossimo blocco di transazioni, collegarlo alla blockchain esistente e garantire che:
- il contenuto del blocco è corretto (secondo un insieme di regole condivise dalla comunità);
- il blocco è collegato alla legittima blockchain (o al ramo valido: per definizione, il più lungo);
- c’è un accordo dei peer sulla convalida del blocco;
Il consenso è l’elemento chiave, perché in assenza di un’autorità centrale di certificazione, i partecipanti devono concordare le regole e condividerne l’applicazione ferrea. In aggiunta, i criteri da verificare sono fissati e mirano al controllo della correttezza e completezza delle informazioni, il rifiuto di transazioni duplicate e la conferma di requisiti tecnici.
Proprietà del consenso
Nel 1985, Fisher, Lynch (MIT) e Patterson hanno dimostrato che nessun algoritmo di consenso deterministico può soddisfare contemporaneamente le tre proprietà di Consistenza, Disponibilità e Tolleranza alle partizioni in una rete distribuita asincrona (vedi definizione di “modello asincrono”). Qualsiasi sistema di calcolo distribuito può garantire in un dato momento solo due di questi vincoli, ma non tutti e tre simultaneamente.
- Consistenza: garanzia che ogni nodo in un cluster distribuito restituisca la stessa, più recente, scrittura riuscita. La coerenza si riferisce a tutti i nodi che hanno la stessa vista dei dati.
- Disponibilità: ogni nodo deve restituire una risposta per tutte le richieste di lettura e scrittura in un periodo di tempo ragionevole. Per essere disponibili, ogni nodo (su entrambi i lati di una partizione di rete) deve essere in grado di rispondere in un ragionevole lasso di tempo.
- Tolleranza: Il sistema continua a funzionare e mantiene le sue garanzie di coerenza nonostante le partizioni di rete. Le partizioni di rete sono un dato di fatto. I sistemi distribuiti che garantiscono la tolleranza della partizione possono ripristinarsi con grazia dalle partizioni una volta che la partizione guarisce.