Passa al contenuto principale

6. Sicurezza (Security)

La sicurezza di HMAC si basa su ipotesi ragionevoli sulla funzione di hash sottostante H. In particolare, la robustezza di HMAC dipende dall'ipotesi che H sia una funzione di hash crittograficamente forte (ovvero dotata di resistenza alle preimmagini e alle collisioni).

Le analisi di [BCK1] e [BCK2] mostrano che HMAC è sicuro come funzione di hash con chiave sotto l'ipotesi che H sia "vicina a una funzione pseudo-casuale (PRF)". Tale ipotesi è considerata ragionevolmente valida per le funzioni di hash ampiamente utilizzate come MD5 e SHA-1.

Per quanto riguarda la lunghezza della chiave, come indicato nella sezione 3, si raccomanda di utilizzare una chiave di almeno L byte. Una chiave di lunghezza inferiore a L byte riduce la robustezza di sicurezza della funzione.

Per quanto riguarda il troncamento, come indicato nella sezione 4, si raccomanda di utilizzare un output di almeno 10 byte (80 bit). Un troncamento inferiore a 10 byte potrebbe non fornire una robustezza sufficiente contro gli attacchi di forza bruta.

Per MD5, sono note recenti collisioni [Dobb], ma tale attacco non compromette l'uso di MD5 nella costruzione di HMAC. Ciò è dovuto al fatto che HMAC impiega una costruzione a due stadi (hash interno ed esterno) e una chiave segreta, per cui un semplice attacco di collisione non consente di falsificare l'output di HMAC. Ciononostante, per le applicazioni che richiedono una sicurezza più forte, si raccomanda l'uso di HMAC con SHA-1 o RIPEMD-160.

Gli implementatori devono prestare attenzione ai possibili progressi della crittoanalisi riguardanti la funzione di hash sottostante e sostituire la funzione di hash se necessario.