Passa al contenuto principale

4. Troncamento (Truncation)

4.1 Nota di implementazione (Implementation Note)​

HMAC è definito in modo da poter utilizzare la funzione di hash sottostante H senza modificarne il codice. In particolare, H viene utilizzata come una funzione dotata di un valore iniziale predefinito IV (un valore fisso che ogni funzione di hash iterativa specifica per inizializzare la propria funzione di compressione). Nelle implementazioni comuni delle funzioni di hash crittografiche, IV è memorizzato come una costante cablata. Un metodo efficiente per implementare HMAC consiste nel precalcolare tale IV come stato interno inizializzato con K XOR opad e K XOR ipad. (Tale ottimizzazione non fa tuttavia parte della specifica di HMAC; è un dettaglio di implementazione.)

4.2 Output troncato (Truncated Output)​

Alcune applicazioni potrebbero voler utilizzare solo n byte dell'output HMAC (dove n è minore o uguale alla lunghezza di hash L, ovvero n ≦ L). Si raccomanda che tale output troncato sia costituito dai primi n byte dell'HMAC. L'output troncato di HMAC è determinato in modo univoco per una data chiave e un dato testo. Per distinguere l'output troncato dalla specifica di HMAC, l'output troncato di n byte di un HMAC è indicato come HMAC-H-t (dove H è la funzione di hash e t la lunghezza dell'output in byte). Ad esempio, i primi 8 byte di HMAC-MD5 sono indicati come HMAC-MD5-80 (80 rappresenta la lunghezza in bit).

Quando si utilizza un output troncato di n byte, si raccomanda che n sia di almeno 10 byte (80 bit). Ciò fornisce una robustezza di sicurezza di 80 bit contro gli attacchi di forza bruta. Un troncamento inferiore a 10 byte è sconsigliato.