Red Hot Cyber

La cybersecurity è condivisione.
Riconosci il rischio, combattilo, condividi le tue esperienze ed 
incentiva gli altri a fare meglio di te.

Cerca

IL funzionamento della Blockchain e il Quantum Collision Attack.

Fernando Curzi : 28 Gennaio 2022 11:45

Autore: Fernando Curzi L. (CyberSecurity analyst, Web developer e autore di Hackerpunk)
Data Pubblicazione: 28/01/2021

Blockchain (catena di blocchi) è una tecnologia digitale per il trasferimento sicuro di beni, come il denaro. Spesso si fa confusione riferendosi al sistema del Blockchain con la moneta virtuale più famosa il Bitcoin (BTC), ma chiariamo subito che trattasi di due cose diverse:

  • Bitcoin è una cripto valuta basata sulla tecnologia Blockchain sulla quale si basano anche altre monete virtuali;
  • Blockchain è in realtà una meta-tecnologia che utilizza vari componenti: strumenti crittografici (hash, crittografia a chiave pubblica, protocolli condivisi, distributed ledger technology (DLT), rete P2P.

Blockchain risolve fondamentalmente il problema di trasferire denaro fra due entità diversamente da come avviene di solito, ma ultimamente si sente anche parlare di Metaverso in termini di cripto valute, si deduce che questa tecnologia sia in questo momento in forte espansione.

La struttura Blockchain è caratterizzata, come dice il termine stesso, da una catena di blocchi, ciascuno dei quali contiene informazioni differenti e dipendenti dal tipo di applicazione che lo utilizza. L’aspetto importante è che tali informazioni sono vincolate tra loro e ogni blocco è collegato con il precedente (in parte anche con il successivo).

Nella figura sottostante è visualizzato questo concetto; il blocco iniziale della catena è denominato “genesys block”.

Secondo l’applicazione utilizzata (Cripto valuta), il blocco può contenere varie informazioni; Nel caso dei Bitcoin, un blocco contiene informazioni sulle varie transazioni, in particolare su chi ha trasferito il denaro e sul ricevente e sulla somma trasferita.

Ovviamente le identità dei soggetti coinvolti nelle transazioni non sono in chiaro ma essi sono rappresentati dalla rispettiva chiave pubblica (un codice alfanumerico utilizzato per cifrare ulteriormente le transazioni attraverso la crittografia asimmetrica). Per comprendere eventuali vulnerabilità nel sistema Blockchain è doveroso analizzare a fondo la sua struttura e il funzionamento.

I blocchi

Ogni blocco fondamentalmente contiene:

  • I dati riguardanti le transazioni
  • L’hash del blocco precedente
  • L’hash del blocco attuale
  • hash del blocco successivo (inserito in un secondo tempo ma solo come riferimento e non

entra nel calcolo dell’hash del blocco attuale)

Questi parametri rappresentano un Fingerprint del blocco stesso, mentre per generare il “Digest” (output della funzione di hash) Blockchain utilizza l’algoritmo SHA-256 che ne garantisce l’integrità e ogni eventuale variazione di dati all’interno del blocco, poiché se in teoria questo accadesse, genererebbe un diverso hash.

Importante rilevare fin da subito, ma riprenderemo il discorso in seguito, che SHA-1 fu sostituito in maniera massiccia con SHA-2 e SHA-3, dopo che Google nel 2014 annunciò la sua violazione attraverso tecniche matematiche di alterazione binaria, questa categoria di attacco è di natura prettamente matematica e calcolo probatorio viene chiamato “Attacco a compleanno” o “Hash collision”. In realtà una violazione a SHA-1 avvenne alcuni anni prima, nel 2005 un team cinese di crittografi riuscì a generare collisioni efficaci nell’algoritmo.

L’hash di un blocco attuale del Blockchain (“attuale” per distinguerlo) è generato fornendo come input all’algoritmo SHA-256 i seguenti parametri:

  • dati riguardanti le transazioni appartenenti al blocco attuale
  • Hash del blocco precedente
  • valore di nonce (numero casuale da ricercare e testare tramite la Proof-of-Work)

Se un attaccante modificasse il contenuto di un blocco, l’hash di tale blocco varierebbe, invalidando conseguentemente tutti gli hash dei blocchi successivi, l’attaccante comunque, potrebbe ricalcolare anche tutti gli altri blocchi, non è così complesso rielaborare un hash al fine di rigenerare una catena valida. Tuttavia tale rielaborazione è resa più complessa dalla cosiddetta Proof-of-Work (PoW) che appunto complica tale calcolo.

Proof-of Work (PoW)

Proof-of-Work (PoW) è un meccanismo che rallenta la creazione di nuovi blocchi e insieme all’uso degli hash e alla crittografia garantisce un ottimo livello di sicurezza al Blockchain. La PoW è un problema crittografico computazionalmente complesso ma la cui verifica del risultato ottenuto è molto semplice.

Consiste nel trovare un numero casuale (nonce) tale che l’hash dei dati (SHA-256 o successivi) delle transazioni, dell’hash del blocco precedente e del nonce stesso sia tale da avere come cifre iniziali un numero di zeri definito (esempio 4 zeri: 000HGD636…).

Che cosa vuol dire questa frase?

Nulla di complesso vuol dire solo risolvere un puzzle crittografico attraverso l’uso delle potenze di calcolo messe a disposizione dalle CPU e GPU, aumentando il numero di zeri che dovrà avere l’hash per andare in convalida si aumenta anche il grado di difficoltà per i Miner, in questo momento questo valore dovrebbe essere impostato a 19 zeri iniziali.

Chi risolve questo Puzzle crittografico?

I Miner della rete Blockchain.

Vediamo un esempio di un attacco a questo sistema.

Esempio di un attacco a Blockchain

Possiamo notare nel Blocco #5 i tre parametri principali, contiene una transazione (per esempio 100.000€), l’hash del blocco#4 e un nonce=p##@1 che è il valore casuale ricercato con l’operazione di mining (tramite tentativi consecutivi) tale da produrre un hash valido (SHA-256) del blocco ovvero un hash che cominci in questo caso con 000000P3X22A.. (sette zero consecutivi). Il nonce e l’hash trovato costituiscono la soluzione della PoW per il Blocco #5.

Analogamente il Blocco #6 contiene dati similari (una transazione esempio da 350.000€) e l’hash del Blocco #5, si ripete il nonce=p##@1 che produce anche in questo blocco un hash valido. Lo stesso nonce e l’hash trovato costituiscono anche in questo caso la soluzione della PoW per il Blocco #6.

Per il blocco#7?

Trovare soluzioni di questo tipo (con questi requisiti di zero consecutivi) non è ovviamente complicatissimo anche se richiesto un ingente dispendio energetico per la potenza di calcolo. Questo appena descritto è solo un esempio ma PoW potrebbe essere complicato ulteriormente in base al livello di sicurezza che si vuole ottenere.

Una modifica fraudolenta ai dati in input all’algoritmo di hash (per esempio aumentare il valore della transazione nel Blocco #5 da 100€ a 100.000.000€) graverà sulla correttezza dell’hash del blocco che potrebbe non essere più strutturato con sette zeri iniziali 000000P3X22A e quindi essere invalidato.

Per riuscire nel suo intento l’attaccante che ha modificato la cifra di una transazione, con un’operazione di «mining», dovrà riuscire a trovare un nuovo nonce per il blocco in cui ha eseguito la modifica, tale che la PoW (nell’esempio sette zero consecutivi) sia nuovamente verificata. In seguito l’attaccante dovrà compiere una nuova operazione di mining per trovare un nuovo nonce anche per il blocco successivo tale da verificare anche per questo la relativa PoW; dovrà eseguire quest’operazione per ogni blocco della Blockchain, dalla posizione in cui è intervenuto in avanti.

Questo dimostra chiaramente il concetto del Blockchain e della sua capacità di gestire la non modificabilità dei dati. Se l’attaccante riuscisse a ricalcolare tutte le PoW di ogni blocco Blockchain, allora la sua modifica (falsa transazione) potrebbe andare a buon fine. Generalmente, con le potenze di calcolo in gioco, per il caso Bitcoin calcolare una PoW richiede circa 15-30 minuti a blocco.

La sicurezza Blockchain è garantita dalla difficoltà computazionale del Proof-of-Work ma tale livello è ulteriormente elevato dal fatto di utilizzare una rete Peer-to-Peer (P2P) e un Ledger distribuito (libro mastro). Ogni nodo della rete che partecipa a Blockchain possiede una copia sincronizzata e completa della Blockchain stessa (Distribuited Ledger). Il Ledger è appunto distribuito e visibile a tutti i nodi, non è detenuto da nessuno in particolare né tantomeno da un’unità centrale (Trusted-Third-Party). Ciò garantisce al contempo sia la sicurezza sia l’immutabilità del registro. I vari nodi possono entrare e uscire dalla rete P2P, ogni volta che un nodo rientra, riceve una copia del Ledger aggiornata.

Un attaccante che sia riuscito a ricalcolare i blocchi del Blockchain (come nell’esempio precedente) dovrebbe quindi guadagnare il consenso di almeno più del 50% dei nodi della rete P2P al fine di far accettare come valida la modifica fraudolenta a Blockchain. I nodi che si trovano in possesso della copia Blockchain falsa saranno quindi in numero ridotto e la copia Blockchain anomala sarebbe scartata. Il sistema, basandosi sulla rete P2P e sul concetto di Ledger pubblico e distribuito, riesce in autonomia a garantire la propria sicurezza.

Quantum Collision Attack SHA256 e SHA512

Ricercatori universitari, Centri di calcolo e altri enti come IACR, stanno studiando questa tipologia di attacchi basati sulle collisioni e sul calcolo probatorio, utilizzando per lo scopo i Computer quantistici. Questi particolari elaboratori sono in grado di migliorare notevolmente il tempo di esecuzione dei calcoli e le prestazioni, sfruttando le leggi della fisica e della meccanica quantistica, elaborando dati sfruttando come unità fondamentale il Qbit al posto del tradizionale Bit utilizzato nel calcolo elettronico.

All’Eurocrypt 2020 Hosoyamada e Sasaki hanno proposto il primo attacco quantistico dedicato alle funzioni di hash, precisamente a SHA-2 e SHA-3, in realtà hanno riprodotto una versione migliorata del classico “Attacco a compleanno” che genera collisioni sugli output degli algoritmi di hash sfruttando il calcolo probatorio come tecnica di violazione. Questo lavoro prettamente rivolto all’ambito dell’analisi matematica e della crittoanalisi apre una nuova prospettiva verso la sicurezza degli algoritmi utilizzati dalle funzioni di hash. Per il momento rimane uno studio di ricerca universitaria anche perchè non tutti dispongono in casa di questi prestanti e costosi elaboratori. Possiamo concludere che Blockchain è un sistema apparentemente sicuro, dico “apparentemente” perché anche se come abbiamo visto gode di sicurezza multilivello, come ogni tecnologia soffre potenziali vulnerabilità intrinseche che con l’avvento di nuove tecnologie come il Metaverso per esempio o altri sistemi entranti, potrebbero ampliare la sua superficie di attacco.

Nel prossimo articolo vedremo come svolgere un attacco di Password cracking, utilizzeremo tool che fanno uso di Rainbow table e cercheremo di comprendere come avvengono questo tipo di violazioni alle funzioni di hash e come migliorare la loro sicurezza.

Fernando Curzi
Ingegnere informatico, pentester certificato, cybersecurity analyst, web developer e freelancer collaborator di RHC. Autore dell’e-book Hackerpunk.