HMAC (keyed-hash message authentication code o hash-based message authentication code) è una modalità per l'autenticazione di messaggi (message authentication code) basata su una funzione di hash, utilizzata in diverse applicazioni legate alla sicurezza informatica.

Tramite HMAC è infatti possibile garantire sia l'integrità, sia l'autenticità di un messaggio. HMAC non si occupa di crittografare il messaggio: il messaggio (crittografato o meno) deve essere trasmesso insieme al codice HMAC. I destinatari che hanno una copia della chiave segreta potranno applicare l'algoritmo al messaggio ricevuto, e se il messaggio è autentico, potranno verificare che il codice ricevuto e quello calcolato da se stessi è identico. HMAC utilizza infatti una combinazione del messaggio originale e una chiave segreta per la generazione del codice.

Una caratteristica peculiare di HMAC è il non essere legato a nessuna funzione di hash in particolare, questo per rendere possibile una sostituzione della funzione nel caso non fosse abbastanza sicura. Nonostante ciò le funzioni più utilizzate sono MD5 e SHA-1, entrambe attualmente considerate poco sicure.

Funzionamento modifica

Il messaggio viene suddiviso in blocchi di lunghezza pari a j bit. Viene poi selezionata una chiave segreta K. Se questa risulta essere più lunga di j bit, a questa viene applicata la funzione H. Quello che si ottiene è detta K', la chiave di HMAC.

K' = K se |K| = j bit
K' = K + padding di zeri se |K| < j bit
K' = H(K) se |K| > j bit
ipad = 00110110 ripetuta j/8 volte
opad = 01011100 ripetuta j/8 volte

Una volta definita K' l'eventuale padding della chiave originale la funzione HMAC calcolerà il valore nel seguente modo:

 

dove

  indica una semplice concatenazione posizionale
  la suddivisione in blocchi del messaggio  .

Altri progetti modifica

Collegamenti esterni modifica