Il client prenderebbe un pezzo di dati, tipicamente il corpo del messaggio stesso e userebbe un algoritmo di hashing che prende due input: l'input e una lunga chiave pre-condivisa a caso, normalmente la chiave sarebbe concatenata al messaggio prima dell'hashing per rendere più difficile determinare la chiave da un blocco di testo cifrato.
Questo crea un codice di autenticazione dei messaggi con hash HMAC, può essere creato con molti algoritmi di hashing come md5 o la famiglia SHA. HMAC offre una garanzia di integrità dei dati poiché l'hash non verrebbe corretto se una parte del messaggio fosse stata modificata.
Il client esegue un'operazione nel formato MAC = Hash (chiave, dati) e invia questo con il messaggio.
Al ricevimento, il server che conosce la chiave è in grado di eseguire la stessa operazione e verificare che provenga dalla fonte rivendicata. Per essere più precisi, dimostra solo che proviene da una fonte che conosce la chiave segreta.
La sicurezza HMAC dipende dall'algoritmo scelto e dalla lunghezza della chiave, gli attacchi comuni sono tentativi di forza bruta sulla chiave.
Ulteriori informazioni
RFC 2104 HMAC
Wiki - Codice di autenticazione del messaggio
Domanda di StackExchange sulla sicurezza