Hash: cosa sono e come funzionano

Le funzioni crittografiche di hash reppresentano uno strumento molto utile; vengono utilizzate in molteplici casi, dalla verifica dell’identità all’individuazione dei malware, fino alla protezione dei file.

La funzione crittografica di hash, a cui spesso ci si rifesce semplicemente con la parola inglese hash, è un algoritmo matematico che trasforma ogni blocco arbitrario di dati in una stringa di nuovi caratteri di dimensione fissa. Indipendentemente dalla lunghezza del dato di entrata (input), il risultato (output) avrà sempre la stessa lunghezza.

Quindi, secondo SHA-1 hash generator (uno dei più utilizzati generatori di funzioni hash insieme a MD 5 e SHA-2), l’hash del mio nome, Brian, è 75c450c3f963befb912ee79f0b63e563652780f0. Come qualsiasi altro Brian ti direbbe, brain (cervello) è una parola pericolosa che può generare equivoci “ai Brian”. Infatti, per un periodo mi sono trovato con una patente di guida che riportava il nome “Brain Donohue”. Ma questa è un’altra storia. L’hash SHA-1 per brain, secondo il mio generatore online SHA-1, è 8b9248a4e0b64bbccf82e7723a3734279bf9bbc4.

Come potete osservare, questi due output sono abbastanza diversi, nonostante la differenza tra il nome Brian e la parola che rappresenta uno degli organismi fondamentali del nostro corpo dipenda interamente da due vocali (“ia” al posto di “ai”). Se vogliamo andare oltre, se io dò l’input al mio nome senza mettere la prima lettera in maiuscolo, il generatore SHA-1 crea un risultato hash diverso: 760e7dab2836853c63805033e514668301fa9c47.

Le funzioni crittografiche di hash reppresentano uno strumento molto utile; vengono utilizzate in molteplici casi, dalla verifica dell’identità all’individuazione dei malware, fino alla protezione dei file.

Potete osservare che tutti gli hash hanno una lunghezza di 40 caratteri ed è sorprendente, dato che ogni input è di soli 5 caratteri. Comunque sia, quello che ci soprende è che inserendo il testo completo di questo articolo nel generatore si ottiene il seguente hash: db8471259c92193d6072c51ce61dacfdda0ac3d7. Erano ben  1.637 caratteri (con spazi inclusi), ma il risultato è lo stesso. Con una parola di 5 caratteri o con una di 2.000 si avrà sempre un output di 40 caratteri. Con hash SHA-1 potreste raccogliere tutte la opera completa di William Shakespare e vi ritroverete con una funzione di 40 caratteri. Inoltre, due input non generano lo stesso hash.

Grazie alla gentile concessione di Wikimedia Commons, vi mostriamo ora una foto che illustra lo stesso concetto per coloro che preferiscono le immagini:

A cosa serve hash?

Buona domanda. Sfortunatamente, la risposta è che gli hash crittografici vengono usati per un sacco di cose.

Per tutti noi, la forma più comune di realizzare un hash ha a che vedere con le password. Per esempio, se dimenticate la password per un servizio online a cui siete iscritti, dovreste probabilmente realizzare un reset della password. Quando resettate la password , generalmente non ricevete indietro la password in plaintext (visibile e leggibile, non crittografata). Questo perché i servizi online non immagazzinano le password in plaintext ma attraverso un valore hash. Infatti, quel servizio (a meno che non stiate usando una password semplicissima per la quale il valore hash sia ampiamente noto) non ha idea di quale sia la vostra vera password.

Per essere precisi, se ricevete una password in plaintext, questo significa che il servizio online che state usando non sta applicando l’hash alla vostra password.

Potete testarlo voi stessi con un generatore inverso di hash. Se generate un valore hash per una password debole (come “password” o “123456”) e poi inserite quel valore nel generatore inverso di hash, ci sono molte probabilità che il generatore riconosca il valore hash e riveli la password. Nel mio caso, il generatore inverso ha riconosciuto l’hash di “brain e “Brian” ma non quello creato con il corpo di questo testo. E così l’integrità dell’output hash dipende interamente dal dato che si inserisce.

Su questo punto, secondo un report di TechCrunch dello scorso mese, il popolare servizio di storage Dropbox avrebbe bloccato uno dei suoi utenti per aver condiviso contenuti protetti dal Digital Millennium Copyright Act (DMCA), la legge statunitense sul diritto d’autore. In seguito, questo utente ha scritto su Twitter che lo avevano bloccato per aver condiviso alcuni contenuti; poco a poco la notizia si è diffusa sui social network e molta gente ha iniziato a lemantarsi del fatto che Dropbox avesse avuto accesso agli account degli utenti sebbene si dichiari contrario alla politica sulla privacy.

Dropbox, certamente, non è entrato nei contenuti degli utenti. Come è stato osservato da TechCrunch, probabilmente è accaduto che coloro che detenevano i diritti sui file menzionati (forse una versione digitale di una canzione o di un film) hanno creato una funzione hash per il file. Poi hanno preso il risultato del valore hash e hanno aggiunto la serie di 40 caratteri ad un sorta di blacklist dei materiali protetti da diritto d’autore. Quando l’utente ha cercato di condividere il materiale protetto da copyright, i sistemi di analisi di Dropbox hanno individuato che l’hash faceva parte di quella lista e hanno bloccato il tentativi di condividere il contenuto.

Quindi è possibile creare hash per password e file multimedia, ma a cosa servono le funzioni hash crittografiche? Di nuovo, la vera risposta è che le funzioni hash hanno diversi obiettivi, molti di più di quelli che io sappia. Tuttavia, l’applicazione principale di hash che più ci interessa è la seguente: le aziende di prodotti antivirus come Kaspersky Lab utilizzano le funzioni hash crittografiche per individuare i programmi dannosi.

Così come avviene nelle case discografiche e cinematografiche che creano blacklist di hash per proteggere i dati protetti da copyright, allo stesso modo esistono liste di hash di malware, molte delle quali pubbliche. Le liste di hash di malware, o signature di malware, si compongono del valore hash del malware o del valore di alcune piccole parti riconoscibili del malware. Da un lato, se un utente trova un file sospetto, può inserire il valore hash in uno dei tanti database o registri di hash di malware disponibili pubblicamente che informeranno l’utente se il file è dannoso o no. Dall’altro lato, i prodotti antivirus riconoscono e bloccano i malware comparando gli hash dei file con i propri database e con quelli pubblici.

Le funzioni crittografiche di hash sono inoltre usate per assicurare quello che viene chiamata integrità del messaggio. In altre parole, esaminando l’output di un hash generato sia prima che dopo la trasmissione di dati, potreste assicurarvi che le comunicazione o i file non sono stati manipolati. Se i risultati del prima e del dopo coincidono, la trasmissoine si considera autentica.

Consigli