Tengo un sitio web donde los usuarios pueden cargar sus archivos; estos se almacenan en el servidor y sus metadatos se registran en una base de datos. Estoy implementando algunas comprobaciones simples de integridad, es decir, "¿es el contenido de este archivo ahora byte por byte idéntico a cuando se cargó?"¿Está utilizando 2 funciones de hash diferentes una buena manera de verificar la integridad del archivo?
Un ejemplo: para contenido de userfile.jpg
, MD5 hash es 39f9031a154dc7ba105eb4f76f1a0fd4
y SHA-1 hash es 878d8d667721e356bf6646bd2ec21fff50cdd4a9
. Si el contenido de este archivo cambia, pero tiene el mismo hash MD5 antes y después, ¿es probable que el hash SHA-1 también permanezca igual? (Con hash, a veces puede obtener una colisión hash - ¿podría suceder esto con dos algoritmos de hashing diferentes a la vez?)
O está calculando dos hash diferentes para un archivo inútil (y debería probar algún otro mecanismo para verificar la integridad)?
Editar: No estoy realmente preocupado por la corrupción accidental, pero se supone que debo evitar que los usuarios cambien el archivo desapercibido (birthday attack y amigos).
Probablemente vaya con un hash, SHA-512 - los controles no suelen ser un cuello de botella de rendimiento y, de todos modos, "como dice Bruce Schneier, ya hay suficientes sistemas rápidos e inseguros". @MichaelGG en los comentarios ".
No tengo conocimiento de ninguna vulnerabilidad en SHA1, a diferencia de MD5. Entonces, ¿por qué no solo vuelcas MD5 y usas SHA1? –
@Paul Tomblin: Sí, probablemente vaya con SHA-algo :) Editado para reflejar esto. – Piskvor
Como dice Bruce Schneier, ya hay suficientes sistemas rápidos e inseguros. – MichaelGG