La Sección 2 de RFC 2104 define que la clave utilizada en HMAC debe completarse con cero bytes hasta la longitud de bloque del algoritmo de hash subyacente. ¿No es esto una vulnerabilidad de seguridad potencial ya que cualquier clave que finalice en un byte cero produciría el mismo resultado que una clave sin ese último byte?
El siguiente código PHP ilustra el ejemplo:
$key = "key";
$message = "message";
var_dump(hash_hmac("SHA256", $message, $key));
var_dump(hash_hmac("SHA256", $message, $key.chr(0x00)));
y produce el siguiente resultado:
string(64) "6e9ef29b75fffc5b7abae527d58fdadb2fe42e7219011976917343065f58ed4a"
string(64) "6e9ef29b75fffc5b7abae527d58fdadb2fe42e7219011976917343065f58ed4a"
Soy consciente de que la sección 3 de la misma RFC recomienda claves de una longitud mínima, lo que eliminaría este problema, al igual que algún tipo de paso de generación de clave con hash. Sin embargo, me parece que esto podría ser un problema potencial, o ¿estoy siendo demasiado paranoico?