Un HMAC è fondamentalmente un "hash con chiave". Solo il messaggio corretto e la chiave corretta produrrà un particolare hash digest in modo efficiente.
Concettualmente, lo stesso si può dire per un hash salato; solo il messaggio corretto e lo stesso valore di sale produrrà un particolare valore di hash in modo efficiente. In effetti, l'algoritmo HMAC è poco più di un hash annidato e salato, in cui i sali anteposti al messaggio per ciascuno dei due hash annidati si basano su una semplice derivazione della chiave.
Se un vero sale, quindi, veniva tenuto segreto come chiave (o in modo equivalente, se una chiave simmetrica segreta condivisa veniva usata come sale), è ovvio che qualsiasi primitiva hash crittografica diventasse un MAC efficace.
Quindi, suppongo che due domande seguano naturalmente. Primo, questa supposizione è corretta? In secondo luogo, in tal caso, che cosa fa l'algoritmo HMAC a superare la primitiva hash incorporata, oltre a ridurre la velocità di calcolo della metà e aggiungere un ordine di grandezza alla complessità della forza bruta di trovare un messaggio di preimage usando una chiave costante (o vice- versa)?