Hace poco aprendí sobre los códigos de autenticación de mensajes en la universidad y el profesor dijo que es importante usar un relleno para hacer que el mensaje sea un múltiplo entero de una cierta longitud antes del hash, ya que de otro modo la función de "muchos" hash permite agregar datos sin cambiarlos. el hash.
No lo he oído mal. Está en una diapositiva de la conferencia.
Esta diapositiva de la conferencia también muestra esta titulada "implementación real":
HMAC(Key, M) = H((Key ⊕ opad) ∥ H(Key ⊕ ipad ∥ M))
Significado de los símbolos:
M: message
H: cryptographic hash function
Key: symmetrical key
opad, ipad: inner/outer padding
∥: concatenation
⊕: XOR
En primer lugar, encuentro la "implementación real" bastante torpe. Eso probablemente debería ser opad
y ipad
n
veces con n*length(opad) ≥ length(key)
y n*length(ipad) ≥ length(key)
.
Pero sobre todo, me resulta difícil de creer y parece que no puedo encontrar nada al respecto en Internet. ¿Esto ocurre realmente con las funciones hash criptográficas ?