EDIT2: esta discusión se redujo a "¿son las colisiones realmente más difíciles de crear cuando se agrega una restricción de longitud?" Lo que es más relevante para el intercambio de Crypto. Crearé una pregunta allí y la vincularé cuando exista. Gracias a todos los que participaron en la discusión
EDITAR: el término "Ataque de colisión" en Wikipedia parece hablar solo de encontrar una colisión aleatoria, quise decir "Ataque de preimagen ".
Me parece una buena idea, ya que evitaría todos los ataques de colisión que requieran que el atacante modifique la longitud de los datos. El atacante tendría que encontrar una colisión con la misma longitud, que obviamente es mucho más difícil que encontrar una colisión general.
Los ataques de colisión generalmente requieren que el atacante modifique la longitud de los datos (agregando más bloques a los datos existentes o algo así), ¿no?
El único inconveniente que veo es que requerirá que los resultados de hash sean más largos (la forma en que lo veo solo por 2-4 bytes es "La longitud del módulo de datos 2 ^ 16-2 ^ 32" debería ser suficiente) así que no por mucho.
Por supuesto, esto no tiene por qué ser parte de la función hash, podría ser una recomendación de seguridad general: "Verifique la longitud esperada de los datos, no solo que coincida con el hash calculado, para evitar muchas formas de ataques de colisión ".
Aunque nunca antes había escuchado esta recomendación o mencionada esta recomendación, a pesar de la forma en que la veo, tiene mucho sentido.
Entonces, en general, estoy preguntando aquí: ¿Por qué no es una buena idea? ¿Debería estar codificado en funciones hash para que lo aplique automáticamente cualquiera que use esas funciones, o debería ser una recomendación de seguridad general que el usuario de la función hash puede implementar solo, por separado de la función hash?
¿O tal vez me estoy perdiendo algo que hace que esta idea sea ridícula?