Una funzione di hash trasforma un messaggio m di un certa lunghezza (variabile) in un codice di hash
Grazie alla funzione di hash possiamo garantire l'integrità dei dati. Anche un file, passato ad un funzione di hash, ha un suo codice di hash. Molti siti mostrano il codice di hash di un certo file, prima del download, in modo tale che, una volta che il file è disponibile sul proprio computer, è passabile alla medesima funzione di hash, che deve restituire, per dimostrare che il file non è stato compromesso durante la fase di download, lo stesso codice di partenza (in questo caso quello indica sulla pagina di chi ha reso disponibile il file). Questo è uno dei tanti usi che si può fare di questo strumento.
Può succedere che due messaggi (file, testo, ...) abbiano lo stesso codice di hash.
Questo può succedere, poiché il numero di messaggi è maggiore rispetto al numero di codici hash:
La collisione di diversi messaggi, nel medesimo codice hash presenta un altro problema: la falsificazione dei messaggi, infatti se due messaggi collidono, un attaccante potrebbe sostituire un messaggio originale con un altro contenente dati dannosi, ma con lo stesso valore di hash.
user:password
nella forma user:hash(password)
. Il database potrebbe subire un attacco e finire nella mani di un attaccante che potrebbe voler decifrare l'hash per essere a conoscenza della password, allora effettua un attacco di forza bruta per trovare un messaggio il cui hash corrisponda con quello trovato nel database.Le ultime due proprietà sembrano uguali, ma non lo sono. Nella seconda è dato un valore
La risposta è con un attacco di forza bruta. L'attaccante studia la funzione di hash e tenta brutalmente di trovare delle collisioni.
Gli attacchi di forza bruta possono essere facilitati molto sfruttando il paradosso del compleanno.
Il problema può essere formulato in questo modo: quante persone devono essere presenti in una stanza affinché la probabilità sia del 50% affinché almeno due persone nel gruppo siano nate lo stesso giorno?
La risposta breve è
Chiamiamo
Immaginiamo di avere valori di hash su 128 bit. Intuitivamente, un generico attaccante se volesse generare una collisione, avrebbe bisogno di testare almeno
Il concetto del paradosso del compleanno può essere generalizzato come segue:
Nel contesto della sicurezza informatica e in particolare delle comunicazioni:
Come abbiamo detto, se sono possibili le collisioni, è possibile trovare messaggi che abbiano lo stesso valore hash di altri messaggi, questo è noto come birthday attack (letteralmente attacco del compleanno). Supponiamo di avere una funzione di hash
Il problema è il seguente: dato un intero casuale, che può assumere un valore tra
Diciamo che esistono due insiemi,
Questo è vero perché abbiamo supposto che il valore di
Se generiamo
Dunque, la probabilità che ci sia almeno una corrispondenza è
Assumiamo adesso che, tutti gli elementi di
Un attaccante, potrebbe utilizzare una certa funzione di hash
Trovata la collisione, l'attaccante conosce i due messaggi che generano la collisione e può falsificare messaggi nella funzioni di hash: per esempio l'attaccante invia uno dei due messaggi (considerati legittimi), e dopo che la funzione hash è stata applicata, può sostituire il messaggio con l'altro (illegittimo) che genera la collisione.
Il birthday attack è un esempio di chosen message attack, in cui l'attaccante sceglie il messaggio da cifrare.
Diciamo che
Un attaccante (Eva) trova un messaggio
Alice è una dirigente di una grande azienda e comunica con i suoi dipendenti attraverso un sistema di messaggistica sicuro. Utilizzando un meccanismo di autenticazione basato su firme digitali, dove i messaggi legittimi sono firmati e autenticati dal mittente attraverso una funzione di hash crittografica H.
Eva, ha un'idea di quali messaggi sono considerati legittimi (
Eva decide di sfruttare questa collisione per indurre Alice a riautenticare il messaggio legittimo
Alice, fidandosi del sistema di autenticazione, firma digitalmente il messaggio
Ora, Eva ha un messaggio illegittimo firmato digitalmente che sembra essere stato autenticato da Alice.
Successivamente, Eva invia il messaggio
L'attacco è di tipo chosen message attack perché Eva sceglie un messaggio
I valori di hash, risultati da una funzione di hash, devono essere molto grandi, per ridurre la probabilità di riuscita di un attacco di questo tipo.
Il messaggio viene diviso in
Non approfondiremo il funzionamento di questi due algoritmi, ne daremo solo un infarinatura molto generale.
Nello schema MD5/SHA-1, il messaggio viene diviso in blocchi di
Nel caso in cui (spesso l'ultimo blocco del messaggio), non abbia un dimensione di
Cosa è necessario consocere:
Ogni byte di padding che viene aggiunto ha il valore corrispondente alla dimensione da riempire, ad esempio se il è necessario riempire
Alla fine di tutto si ottiene il digest (letteralmente riassunto), ovvero il valore hash per il messaggio che gli è stato passato in input.
Prossimo argomento: Autenticazione e firma elettronica.