Un HMAC es básicamente un "hash con clave". Solo el mensaje correcto y la clave correcta producirá un resumen de hash particular de manera eficiente.
Hablando conceptualmente, lo mismo se puede decir para un hachís salado; solo el mensaje correcto y el mismo valor de sal producirá un valor hash particular de manera eficiente. De hecho, el algoritmo HMAC es poco más que un hash anidado y salado, donde las sales que aparecen ante el mensaje para cada uno de los dos hashes anidados se basan en una simple derivación de la clave.
Si una verdadera sal, por lo tanto, se mantuviera secreta como una clave (o, de manera equivalente, si se utilizara una clave simétrica secreta compartida como una sal), es lógico que cualquier primitiva hash criptográfica se convierta en una MAC efectiva. p>
Entonces, supongo que dos preguntas siguen naturalmente. Primero, ¿es correcta esa suposición? En segundo lugar, si es así, ¿qué le permite al algoritmo HMAC superar el hash primitivo incorporado, aparte de reducir la velocidad de cálculo a la mitad y agregar un orden de magnitud a la complejidad de fuerza bruta de encontrar un mensaje de preimagen usando una tecla constante (o viceversa)? versa)?