Introduzione alle criptovalute e alla sicurezza informatica

Chi non ha sentito parlare di blockchain nel 2020? È una delle tecnologie del futuro: se ne è parlato per il voto elettronico, per il tracciamento “sicuro” dei contagiati durante l’epidemia di COVID-19, per l’economia e molto altro. I casi di applicazioni sono tantissimi e vari: dal sistema ospedaliero a funzioni notarili, sembra che la tecnologia blockchain possa costituire una rivoluzione e il punto di partenza per la nuova “età dell’oro” di Internet.

Per poter apprendere questa tecnologia e le future implicazioni in campo economico, bisogna prima porsi due questioni: da che presupposto è stata ideata e su cosa si basa. Come vedremo nelle sezioni sucessive, sfateremo alcuni tra i miti più accreditati nell’ambito delle criptovalute, tra cui quella più gettonata “la blockchain è applicabile in tutti i progetti”. Spesso, infatti menzionare la parola “blockchain” (in italiano catena-di-blocchi) in ambito progettuale significa anche attrarre più investitori, curiosi di scoprire l’ennesima applicazione di questa tecnologia al campo lavorativo più disparato.

Il problema della fiducia

Prima di affrontare il tema di come la blockchain sia nata e applicata, è essenziale premettere alcuni concetti dell’economia moderna e successivamente alcuni problemi riguardo l’affidabilità dei sistemi informatici.

Supponiamo che James voglia acquistare dal negozio di Barbara un nuovo vestito: per poterlo fare James utilizza una carta di credito, ottenuta attraverso un accordo stipulato con la banca “QWERTY”. Barbara compone sul POS la cifra dell’acquisto e acquisisce la carta. In meno di mezzo secondo, la banca di Barbara, “Pagto LLC”, comunica con il server centrale del circuito di pagamento che si occupa di chiedere alla banca “QWERTY” se James può pagare oppure no.

In tutto questo, il dettaglio più evidente: non c’è spostamento di denaro fisico. Entrambe le banche si impegnano a modificare i propri database contenenti le informazioni di James e Barbara: per James ci sarà un addebito, mentre per Barbara un accredito. Questa modifica tuttavia comporta una questione: in che modo la banca di James assicura all’intero sistema bancario di non aver creato fondi dal nulla? Il sistema dovrà riporre la stessa fiducia che i propri clienti ripongono nella banca.

Un database di una banca infatti contiene tutte le informazioni riguardanti le transazioni effettuate dal cliente e i suoi dati anagrafici. Il bilancio finale per il conto corrente di un cliente sarà la differenza tra tutti gli accrediti e gli addebiti. Potreste pensare che queste informazioni vengano protette, ma non c’è alcun sistema di sicurezza che possa garantire il corretto mantenimento delle transazioni. Pensiamo ad un dipendente malitenzionato che conoscendo le nostre abitudini potrebbe manipolare alcune transazioni facendoci spendere di più. Oppure, ancora peggio forse, ad un dipendente che abusando dei propri poteri, riesce a pagare un prodotto a minor prezzo.

Esistono protocolli standard di comunicazione e di storage che riducono questo rischio. Vi sono persone che controllano giornalmente e periodicamente bonifici, algoritmi che monitorano giorno e notte transazioni riportando alle autorità quelle sospette, e così 2, 3, ennessime volte. Ma chi controlla i controllori (Quis custodiet ipsos custodes?)? I meccanismi di controllo non dimostrano che la manipolazione di questi dati non sia possibile.

Il rischio è intrinseco al sistema digitale e pur riducendolo al minimo attraverso l’utilizzo di procedure standard, esiste. Non è nuovo infatti sentire spesso recenti casi di persone che si ritrovano accreditate cifre milionarie, potenzialmente “denunciabili” nel caso in cui li spendano.

Così come la gravità costituisce un rischio non eliminabile per il settore dell’aviazione, il tasto “edit” è lo stesso per tutti i sistemi informativi. Traspondendo il rischio al sistema di pagamenti digitali, è possibile modificare le transazioni, potendo anche creare soldi dal nulla!

In verità l’attuale sistema economico funziona allo stesso modo: le banche centrali (entità centrali, talvolta pubbliche – BCE - ma anche private – Federal Reserve) che emettono monete creano valore dal nulla. Nel contesto digitale, questo sembra più facile da fare rispetto a stampare denaro fisico. Nei sistemi monetari moderni, il denaro di per sé non ha alcun valore, ma il suo valore dipende dalla fiducia che gli investitori ripongono nella valuta come mezzo di scambio di beni e servizi.

Abbiamo da considerare un altro problema: i furti. Vi sono alcuni aggressori particolarmente abili che hanno passato tutta la vita a capire i segreti delle banconote, stampandone false copie. Ci sono molte soluzioni in commercio volta a identificare le banconote false, ma anche in questo caso sono strumenti aggiuntivi e non c’è garanzia da parte del sistema.

Il punto chiave dei numerosi problemi che affliggono il moderno sistema di pagamento è la fiducia. Un valore fondamentale è il mantenimento di un’autorità (che non dovrebbe essere centralizzata) che ha il compito di verificare la correttezza delle transazioni e che è responsabile di gestire indirettamente l’emissione della moneta.

La soluzione: rete distribuita e decentralizzata

Come possiamo garantire e sviluppare un sistema che mantenga tutte queste proprietà? Esiste una rete che aiuti a sostenere questa idea? L’elaborazione di una rete critica che deve gestire particolari dati finanziari è difficile e complessa: identificare i reali requisiti e le tecnologie da impiegare non richiede poco lavoro.

Introduciamo la proprietà della “distribuzione”. Possiamo individuare due tipi di “distribuzione”: distribuzione logica e geografica.

Diverse banche hanno alcuni datacenter in cui i database funzionano 24 ore al giorno, 365 giorni all’anno con un metodo chiamato “Parallel Computing”. È un tipo di calcolo utilizzato nei sistemi critici (come banche, ospedali e università) che utilizza N core per eseguire simultaneamente e in parallelo programmi specifici che producono dati. Questi dati vengono solitamente confrontati per verificare se tutti i core calcolano correttamente le informazioni. In questo caso si parla di distribuzione logica perché il sistema distribuisce il carico lavorativo su più unità “intelligenti”: questo permette di risparmiare tempo computazionale, ma dal punto di vista economico fa lievitare i costi.

Si ha poi la distribuzione geografica, ovvero distribuire le proprie unità di calcolo su diversi punti geografici. Principalmente utilizzato per avere i dati ridondanti, ciò permette di avere un’infrastruttura quasi sempre online. Un evento avverso, per esempio un incendio ad un datacenter, o un problema non compromette l’intera rete di nodi.

È importante ricordare che la distribuzione di una risorsa non sempre implica il decentramento delle risorse. Tutti i core distribuiti logicamente o geograficamente possono essere sempre comandati da un’autorità centrale. Immaginate di avere 100 macchine, ma c’è un solo proprietario, cioè voi: potrebbe essere distribuito ma non decentralizzato, poiché una persona può eseguire far eseguire lo stesso comando a tutte le macchine.

La distribuzione delle risorse si adatta perfettamente al modello della rete Peer to Peer (chiamate anche P2P successivamente). Tutti i partecipanti sono chiamati “nodi” e contribuiscono allo stesso obiettivo. In questo modello non ci sono “client” che richiedono un servizio al server o viceversa; ogni nodo si unisce alla rete con lo scopo di richiedere la risorsa e soddisfare qualsiasi invocazione. Oltre a questo, ogni peer è uguale agli altri.

In pratica vi sono delle eccezioni: deve esistere, infattti, un discovery server - che è un fattore discriminante - o un master node, cioè il primo peer a cui un nodo si connette prima di entrare nella rete. Questo nodo master ha però solo la funzione di connettere l’utente che vuole entrare nella rete ed unirsi. In caso di compromissione del nodo master o di un qualsiasi altro nodo, la rete non andrà offline.

Potremmo identificare tre tipi di tecniche per accedere alla rete P2P: directory centralizzata, peer-flooding based o seed-based. Nella prima, abbiamo un nodo master che ha il compito di comunicare attraverso i nodi una lunga lista di peer disponibili a connettersi: c’è una dipendenza con il nodo centrale per connettersi ad altri nodi.

Nella seconda, ogni nodo propaga una lista dei nodi disponibili (creata con un “polling” continuo, cioè ping e pong verso altri dispositivi). Una volta ricevuta questa lista di peer, i nodi faranno “polling” agli altri peer per assicurare che la lista sia mantenuta aggiornata.

Nella terza opzione, abbiamo un misto di entrambi i metodi: il dispositivo richiede un elenco aggiornato dei peer disponibili per la connessione al nodo centrale (seed-nodes); questo elenco sarà poi utilizzato dal dispositivo per connettersi ad altri nodi e richiedere successivamente altri dispositivi.

Nella rete P2P, è importante sottolineare che ogni nodo non deve essere collegato ad tutti gli altri nodi; se avessimo una rete da decine di migliaia di nodi, si avrebbero più di migliaia di connessioni contemporaneamente. Un nodo quindi è connesso ad un numero limitato di altri nodi sufficientemente “affidabili”: i nodi infatti non devono inviare informazioni contrastanti.

Uno dei primi esempi di reti P2P si ha nel servizio Napster, un famoso e popolare sistema di file sharing per file MP3 nato alla fine degli anni ‘90. La possibilità di scambiarsi informazioni (che in questo caso non erano altro che canzoni e album) con nodi distribuiti in tutto il globo ha migliorato la velocità di upload e download. Questo è uno dei tanti motivi per cui Napster ha avuto una così ampia diffusione: più diventava popolare e più nodi aderivano alla rete. Ciò significava che molte persone erano più vicine in termini geografici di alcuni nodi rispetto ad altri. La struttura decentralizzata della rete permetteva a chiunque di scaricare i file MP3, senza intermediari (come ad esempio negozi per dvd).

Napster, tuttavia, agli inizi degli anni 2000, diventò illegale dato che molti file in realtà erano copie piratate: molti associarono quindi la tecnologia del P2P alla criminalità cybernetica. Niente di più falso, nessuno si rese conto che quello sarebbe stato il punto di partenza per un nuovo sistema finanziario che vede nel network distribuito l’arma vincente.

Introduzione alla blockchain

Prima di introdurre la tecnologia della catena-a-blocchi, dobbiamo definire che cosa è un registro distribuito. Un libro mastro distribuito è un database che si trova distribuito in molte località geografiche con una rete P2P. Ogni nodo della rete ha una copia del database sincronizzata con tutte le altre dove tutte le informazioni devono essere conservate allo stesso modo.

Alla fine del 2008, con il crack finanziario e lo scoppio della bolla degli investimenti immobiliari, si è reso necessario progettare un nuovo sistema che doveva permettere la verifica delle transazioni in modo assolutamente imparziale. Un gruppo di sviluppatori, sotto il nome di “Satoshi Nakamoto”, rilascia il whitepaper di Bitcoin “Bitcoin: A Peer-to-Peer Electronic Cash System “, una criptovaluta basata sulla blockchain: è il primo documento che menziona la catena-di-blocchi.

Una blockchain è un particolare tipo di libro mastro distribuito in cui una sequenza di record strutturati chiamati blocchi contengono le informazioni; una rete Peer-to-Peer distribuita mantiene l’integrità delle informazioni attraverso delle regole prestabilite e condivise dai nodi chiamato “consenso”.

In sostanza, la catena di blocchi è la soluzione a lungo ricercata al rompicapo logico noto come “il problema dei generali bizantini” introdotto nel 1982 nell’omonimo paper redatto da Lamport, Shostak e Pease.

Un generale dell’esercito bizantino invia ordini tramite messaggeri ad altri generali per attaccare il nemico. Tuttavia, ogni generale sa che uno o più di loro è un traditore. Come può un generale essere sicuro che dopo aver ricevuto l’ordine di attaccare, che lo stesso ordine è stato inviato agli altri e che non è l’unico ad aver ricevuto l’ordine di attaccare? O che gli altri generali daranno fedelmente il giusto ordine alle loro truppe senza cercare di compromettere il piano? Finora non c’è stata alcuna soluzione che non richieda l’introduzione di una terza parte fidata che funga da garante.

Una criptovaluta è una particolare valuta digitale basata sulla tecnologia blockchain in una rete P2P decentralizzata e distribuita. Tutti i peer contribuiscono a mantenere una copia valida e aggiornata della blockchain. L’altra entità identificabile e preziosa è composta da minatori che hanno il compito fondamentale di verificare la validità di tutte le transazioni inviate dalla rete alla blockchain.

Sono anche una rappresentazione digitale di un valore che non è emesso da autorità centrali o pubbliche, poiché attualmente non esiste un’autorità centrale che le controlli. Non sono necessariamente legate ad alcun valore legale, ma possono essere utilizzate come mezzo di scambio: trasferite, memorizzate o commercializzate digitalmente.

Come funziona

Proprietà minime per definire una criptovaluta

  • Pseudo-privato: chiunque può scaricare il software e iniziare a inviare transazioni, senza registrarsi, rivelare dati personali o rivelare la propria identità. Si chiama pseudo-privato perché, se non si prendono certe precauzioni, c’è la possibilità che le transazioni siano comunque riconducibili all’identità dell’utente;
  • Nessuna autorità centrale: non dipende da nessuna terza parte privata o agenzia governativa, e quindi il valore di una moneta criptata è liberamente negoziata sul mercato.
  • Irreversibile: una volta che una transazione è stata effettuata ed è inclusa nella catena di blocco, non può più essere annullata, nemmeno dal mittente;
  • Non falsificabile: fino a quando la rete non è sicura, nessuna moneta può essere creata dal nulla; questo dovrebbe impedire qualsiasi copia non autorizzata;
  • Physical-less: i pagamenti non richiedono alcun intermediario o trasferimento fisico di valuta, e possono essere effettuati in qualsiasi momento a persone o istituzioni in qualsiasi parte del mondo;

Introduzione alla sicurezza informatica

In qualsiasi sistema che comporti il trattamento delle informazioni in forma digitale, alcuni aspetti devono essere mantenuti per evitare attacchi informatici.

I tre pilastri da mantenere

Uno di questi aspetti si può trovare nella triade della CIA (Confidenzialità, Integrità e Disponibilità) che è una parte fondamentale di un sistema digitale. Attraverso alcuni esempi, nei prossimi paragrafi introdurremo i lettori a questi concetti.

Riservatezza (Confidentiality)

Con riservatezza, si intende quella proprietà volta a proteggere formalmente qualsiasi dato o informazione sensibile. Immaginate di avere in casa oggetti sensibili (come gioielli, o auto costose); dovete proteggerli da persone malintenzionate. La protezione dei beni comporta l’installazione di un dispositivo antifurto, porte di sicurezza e l’installazione di una cassaforte dove vengono conservati i beni costosi.

Questo funziona allo stesso modo per i dati. Tutte le infrastrutture (come ospedali, aeroporti, banche, ma anche attività commerciali) conservano informazioni critiche da cui potrebbero dipendere le loro attività. Dai dati dei clienti alle cartelle cliniche, è necessario che tali informazioni non siano condivise e non siano disponibili al pubblico ma solo alle persone interessate.

Il design delle cryptovalute rende il mantenimento di questa proprietà molto difficile. Il motivo è che i dati delle transazioni devono essere a disposizione di tutti i nodi partecipanti per verificarle in modo corretto: la blockchain resta uno dei metodi più insicuri di archiviare dati sensibili. Questo è uno dei principali svantaggi nelle criptovalute dato che i dati finanziari sono inviati in chiaro.

Integrità (Integrity)

L’integrità dei dati svolge un ruolo fondamentale nello sviluppo del business. Questa proprietà dovrebbe garantire che tutte le informazioni presentate in un database siano tecnicamente corrette, memorizzate nel modo corretto e nel caso delle criptovalute immutabili nel tempo.

L’integrità dei dati memorizzati in una catena di blocco è garantita dalla concatenazione di singoli blocchi utilizzando una funzione hash. Una volta che il blocco è stato aggiunto alla catena, non è possibile per un l’aggressore a manomettere successivamente i dati senza essere notato.

Disponibilità (Availability)

Se gestisci un’attività, soprattutto online, potresti immaginare cosa succede se il tuo negozio elettronico o il tuo sito web fallisce: i clienti non riescono a trovare informazioni commerciali o, peggio ancora, non possono acquistare i tuoi prodotti. La disponibilità è garantire la continuità del servizio per ogni utente che deve essere in grado di accedere e utilizzare le risorse e i dati in ogni momento. Questo è fondamentale per infrastrutture come quelle ospedaliere, dove se una macchina non funziona in una sala operatoria, può fare la differenza tra la vita e la morte.

La situazione in cui un sistema è inattivo si chiama “interruzione” ed è risolvibile solo elimando le cause per le quali non è attivo. Un’ulteriore soluzione per questo problema è data dalla continuità, servendosi di sistemi ausiliari. Ad esempio, in caso di interruzione dell’energia, i gruppi UPS potrebbero preservare la disponibilità dell’azienda. I server di emergenza ausiliari e il database ridondante aiutano a prendere in carico molte richieste. Come si vedrà nel captiolo 4, in generale, un più alto tasso di connessioni rafforza il rete contro le interruzioni dovute ad attacchi mirati o difetti tecnici.

Grazie alla distribuzione e al decentramento della rete, le informazioni sono disponibili con alta probabilità in ogni momento ovviamente, sempre nel caso in cui vi sia un numero sufficiente di nodi aventi memorizzati i dati completi.

È importante notare che la disponibilità copre solo i dati direttamente memorizzati nella blockchain. Se i dati venissero esternalizzati, ad esempio per motivi di dati protezione o riservatezza (vedi sezione precedente) e la blockchain venisse utilizzata solo per memorizzarne i riferimenti, essa non fornirebbe alcuna garanzia per la disponibilità di i dati reali.

Attacchi, 0day e Exploits

Remember that this type of content has not been proofreaded or edited. It is an extensive effort, and such lengthy resources are likely to contain mistake(s). If you find any technical issues or grammatical/spelling mistakes, please report your finding to: [email protected].

About

I am a security researcher, a writer, and contributor to the Monero project, a cryptocurrency focused on preserving privacy for transactions data. My publication Mastering Monero has became one of the best rated resources to learn about Monero. More about me

Follow me on Twitter or send me an email. I also appreciate donations, they allow me to continue doing my work and writing.

Mastering Monero book