La funzione crittografica di Hashing
Avete un talento particolare per incasinare e pasticciare tutto quello che fate? Le funzioni di hashing probabilmente saranno il vostro argomento preferito.
Da oggi in poi quando vi diranno “hai fatto un casino” potrete rispondere “ignorante, sto hashando”.
Complicare le cose semplici
Le funzioni di hashing sono strumenti molto utilizzati in crittografia.
Il termine deriva dall’inglese “to hash”, che vuol dire “incasinare, pasticciare”, e in effetti una funzione di hashing fa esattamente questo: prende una certa stringa di lettere e la incasina in modo da renderla non più riconoscibile.
La stringa pasticciata prende il nome di “hash” della stringa originale.
Un esempio: la stringa “Fabrizio è bellissimo“, sottoposta alla funzione di Hashing md5 tramite un comune generatore online, si trasforma in d73401f456df636d6aba1a526d0a1f59.
A che serve una cosa del genere? Più o meno a tutto.
Una funzione di hashing non si limita a sputare numeri e lettere a caso, segue delle regole ben precise che la rendono tremendamente utile nella protezione delle password o nella verifica dell’autenticità dei documenti.
Un pasticcio controllato
Una delle prime regole è produrre una stringa di lunghezza fissa.
È importante che la parola CIAO e la frase OH ROMEO ROMEO MA SEI PROPRIO TU ROMEO ottengano due hash della stessa lunghezza, altrimenti si potrebbe tentare di risalire alla lunghezza del messaggio originale a partire da quello dell’hash.
Inoltre, una funzione di hashing deve restituire un valore diverso per ogni stringa di partenza.
Vabbè, je piacerebbe..
Ottenere un hash diverso per ogni parola esistente, di fatto, non è possibile. Una buona funzione di hashing è in grado assegnare lo stesso valore a meno stringhe possibili.
Le poche stringhe a cui viene associato lo stesso valore prendono il nome di collisioni dell’hashing.
Le collisioni di una funzione di hashing, che esistono quasi certamente, non devono mai essere divulgate!
Conoscendone un buon numero si può tentare di risalire al funzionamento della funzione incasinatrice, rendendola così vulnerabile.
Infine (per noi, le regole per costruire delle buone funzioni di hashing sono decisamente più numerose), è importante che l’hash di due parole simili sia molto differente!
Password incasinate e sicure
La prima applicazione è quella di verificare la correttezza di una password senza doverla necessariamente conoscerla.
Quando inserite la vostra password su un qualsiasi sito/app su cui avete registrato un account, un computer va a pescare all’interno di un database il valore di confronto.
Il database però non deve contenere la vostra vera password, guai se fosse così! Se fosse salvata “in chiaro”, qualsiasi amministratore potrebbe entrare e scoprire che la password del nostro Facebook è “fabrizio@bellissim0”, e poi utilizzare questa informazione per pubblicare contenuti a nostro nome.
Ho fatto un esempio ironico, ma pensate alle potenziali implicazioni. La maggior parte delle persone utilizza, in modo imprudente, la stessa password per tutti gli account. Se una password di un servizio anche accessorio fosse salvata in chiaro, e quella password fosse la stessa della mail sulla quale sono stati registrati account importanti come quello della banca, delle poste, del lavoro… sarebbe un vero e proprio cavallo di Troia!
Memorizzando al suo interno l’hash della password, il sito/app è sempre in grado di sapere se abbiamo inserito i dati corretti per il login, ma nessun utente malintenzionato può appropriarsi della stringa originale, neanche accedendo al database! Si ritroverebbe con un mucchio di stringhe inutilizzabili.
Scarabocchi per firma
Altra applicazione interessante è quella delle firme digitali.
Immaginate un documento molto lungo, un foglio di calcolo con migliaia di numeri all’interno. Un malintenzionato potrebbe ottenere l’accesso al file e fare una modifica “lieve” durante la sua trasmissione nella speranza di fare arrivare a destinazione un messaggio sbagliato. Una truffa di cui si è sentito parlare recentemente nei notiziari si basa proprio su questa modalità: i truffatori intercettano documenti relativi ai pagamenti con all’interno l’indicazione dell’IBAN, e lo alterano in modo da fare arrivare il pagamento su un proprio conto.
Questa truffa, se venisse implementato un controllo di hashing, sarebbe impossibile!
Poiché anche un cambiamento minimo di una stringa altera l’hash in maniera sostanziale, basta confrontare l’hash del file inviato dall’utente originale con l’hash del file giunto a destinazione per capire in pochissimi istanti se il file è stato alterato!
Addio zeri aggiunti agli importi o IBAN sostituiti!
Occhio al rovescio della medaglia però: dopo aver firmato digitalmente qualcosa con questo metodo non sarà più possibile per voi dire “ah no non sono stato io, sono stati gli hackerzzz!”
Tanti auguri a te, e la password… a me!
Concludiamo con un interessante punto di contatto con un argomento di cui abbiamo già parlato sulla nostra pagina Facebook: il paradosso del compleanno.
Potete trovarlo a questo link:
Per praticità lo riporto molto in breve: il paradosso del compleanno ci mostra come, nonostante i giorni dell’anno siano 365, basta avere 25 persone in una stanza per avere più del 50% di probabilità che ce ne siano due che compiono gli anninello stesso giorno. Se nella stanza mettiamo 40 persone, questa probabilità è già circa il 90%.
Cosa c’entra con le funzioni di hashing?
Calcoli analoghi a quelli che portano alla definizione del paradosso ci mostrano come sia possibile tentare di sparare nell’incasinatore un certo numero di valori, RELATIVAMENTE piccolo, per cercare di individuare una collisione!
RELATIVAMENTE è scritto maiuscolo e grassettato perché la faccenda non è banale, tuttavia se ci si trova di fronte a una funzione di hashing non particolarmente resistente alle collisioni la strategia può portare al successo in un tempo accettabile.
Una volta trovate abbastanza collisioni, generalmente diventa possibile crackare la funzione di hashing e leggere in chiaro tutti i dati in precedenza criptati.
Un attacco di questo tipo, proprio perché basato sulla stessa matematica del paradosso, è chiamato “attacco del compleanno”!
Matematico per passione, dopo essermi laureato all’Università la Sapienza di Roma mi hanno spiegato che la matematica non è un lavoro vero e mi tocca guadagnarmi da vivere come consulente contro le frodi. Fortemente convinto che potremmo già avere i jetpack e le macchine volanti per uso comune, ho abbracciato la Missione Scienza nel 2016. Scrivo principalmente di matematica (ufficialmente argomento più noioso del terzo millennio) e occasionalmente di fisica, tecnologie e informatica.