Le blockchain consentono di memorizzare dati in modo sicuro e inalterabile, e costituiscono quindi dei perfetti registri digitali. La loro sicurezza, però, tocca diversi aspetti, da quelli di rete all’implementazione del software
Una blockchain è un registro digitale in cui le informazioni vengono scritte in blocchi, e ogni blocco contiene una impronta hash crittografica del blocco precedente. Pertanto, per alterare una transazione in un blocco bisogna modificare il contenuto di tutti i blocchi successivi, altrimenti i conti non tornano. Per lo stesso motivo, in una blockchain non si possono né modificare né cancellare i dati in essa memorizzati; si possono solamente aggiungere nuovi dati, in fondo alla catena. Inoltre, le blockchain sono gestite da una rete peer-to-peer (P2P) di computer, ciascuno dei quali memorizza una copia dell’intera catena. In altre parole, una blockchain è un registro digitale decentralizzato. Tra i tanti tipi di blockchain esistenti consideriamo quelle permissioned, di particolare interesse per il mondo industriale. Spesso usate per memorizzare informazioni sulla qualità e la tracciabilità dei prodotti, vengono gestite da consorzi di aziende, che devono collaborare ma sono potenzialmente in competizione l’una con l’altra. L’inalterabilità delle blockchain consente di utilizzarle per notarizzare le informazioni, garantendo la non ripudiabilità delle stesse e la loro esistenza a una certa data. In una situazione simile, è evidente che gli aspetti di sicurezza sono molto rilevanti. Poiché le blockchain operano su più livelli tecnologici, dobbiamo considerare la sicurezza di ciascuno di essi. Partendo dal livello della rete, i nodi della rete P2P comunicano tra loro su Internet, tramite opportuni protocolli.
A seconda di dove sono posizionati i computer della rete, e a seconda della capacità di controllo delle connessioni di rete da parte dell’attaccante, è possibile che la rete venga segmentata. In tal modo, ciascuna porzione di rete farà evolvere in maniera autonoma – e incompatibile con le altre – le proprie copie della blockchain. A livello di operazioni crittografiche è molto difficile imbrogliare, facendo riconoscere come valide transazioni o informazioni che violano i protocolli. Nel caso delle blockchain permissioned, però, gli utenti scrivono le informazioni sulla blockchain utilizzando apposite credenziali crittografiche, emesse e gestite da una Certification Authority (CA). Anche se la CA fosse affidabile e onesta al 100%, costituisce un single point of failure, in quanto chi dovesse prenderne il controllo potrebbe creare e revocare credenziali a proprio piacimento. Rendendo indisponibile la CA, invece, si può evitare che possa gestire correttamente la revoca delle credenziali non più valide.
A livello di software, è possibile che un utente utilizzi un client – per interagire con la blockchain – modificato in maniera malevola da un attaccante. Questo consentirebbe di mostrare all’utente informazioni diverse da quelle che vengono effettivamente lette o scritte nella blockchain, ingannandolo sulle quantità di criptovaluta usate nei pagamenti, o sulla validità delle informazioni visualizzate. Attacchi simili effettuati sul software che consente ai nodi della rete P2P di gestire la blockchain sono molto più difficili, e molto meno probabili, in quanto se un nodo della rete devia dal protocollo previsto gli altri nodi se ne accorgono. Infine, c’è il problema della correttezza degli smart contract, che sono programmi memorizzati sulla blockchain e che vengono eseguiti dai nodi della rete P2P. Poiché gli smart contract possono scrivere informazioni sulla blockchain, eseguendo per esempio transazioni pre-programmate di criptovalute, banali errori di programmazione possono avere conseguenze spiacevoli e importanti. Quando si implementa (e si usa) una blockchain occorre tenere conto di tutti questi aspetti. E del fatto che gli attaccanti possono avere ottime capacità tecniche, e molta fantasia.
Alberto Leporati comitato scientifico CLUSIT – professore associato del dipartimento di Informatica, Sistemistica e Comunicazione dell’Università di Milano-Bicocca