Los detalles son importantes.
Como @Ricky señala, mostrar valores HMAC truncados no ayudará al atacante a encontrar la clave secreta, en comparación con una situación similar en la que los valores HMAC no se truncarían. Esto tiene sentido: el truncamiento solo elimina información.
Sin embargo , el atacante no está en última instancia después de la clave secreta. Lo que realmente quiere el atacante es hacer falsificaciones , es decir, calcular algunos valores HMAC que la computadora aceptará como propios. Descubrir la clave secreta permite realizar falsificaciones, pero la capacidad de realizar falsificaciones no implica necesariamente el conocimiento de la clave privada.
Afortunadamente , HMAC tiende a comportarse como un PRF , por lo que existen dos métodos conocidos para hacer una falsificación:
-
Realice una enumeración de fuerza bruta de las claves posibles hasta que se encuentre la correcta (una que coincida con algunos valores conocidos + pares HMAC). Este ataque se derrota al elegir que la clave esté en el espacio lo suficientemente grande como para hacer que la enumeración sea poco realista (es decir, se genera una clave de 128 bits con un PRNG criptográficamente sólido).
-
Suerte. El atacante envía una secuencia aleatoria de bits como valor HMAC y espera que funcione. Este ataque se derrota al no truncar los valores de HMAC en una longitud demasiado pequeña y / o aplicar otras mitigaciones como permitir solo un intento y rechazar de forma irrevocable los dispositivos que una vez mostraron incluso un solo valor HMAC falso (como lo hace usted).
El ataque "suerte" funciona con probabilidad 2 - n , donde n es el tamaño (en bits) de su salida HMAC truncada . Es decir. con una salida de 32 bits, entonces una falsificación basada en la suerte tiene una probabilidad de 1 en 4 billones o menos que no se detecte. Esto es lo mejor que se puede hacer con una salida de 32 bits, en general; que HMAC se comporte como un PRF significa que es "óptimo" a ese respecto. Si trunca a 8 bits, entonces la probabilidad de éxito de ataque es de 1 en 256, lo que probablemente sea demasiado para la comodidad. Pero esta es tu decisión, según tu contexto de uso.
También (nuevamente, como lo señala @Ricky), ten cuidado con los ataques de repetición . Un MAC válido, asumiendo que no hubo falsificación, solo demuestra al equipo que vio y "aprobó" el contenido del mensaje en algún momento, pero no que fue el mensaje último que vio. Un dispositivo falso puede volver a enviar los antiguos pares de mensajes HMAC. Para anular los ataques de reproducción, debe mantener cierto estado en la computadora (la computadora debe recordar algo sobre el dispositivo, por ejemplo, un "número de secuencia de mensaje", que es parte de los datos sobre los que se calcula el MAC, y se incrementa para cada mensaje) .