El uso de hashes (digest o checksums*) MD5 se hace cada vez más popular como forma de verificar que un archivo descargado desde un sitio es efectivamente el que el autor colocó ahí. Aunque no haya llegado aún a las “masas” en sitios como download.com o Tucows.

Lo mejor de esto, es que además estas “firmas” son extremadamente sencillas de generar y verificar. Y pueden ser incorporadas en el día a día cuando se transfieren archivos cuya integridad es importante asegurar, por ejemplo una entrega de una versión de un software hacia un cliente.

Poniéndolo en términos sencillos un hash MD5 lo que hace es tomar un flujo de datos (archivo) y generar un número de 128 bits que representa un visión “sumarizada” o “resumida” del mismo.

Comúnmente incluido en las distribuciones linux está el programa md5sum que permite hacer una demostración rápida de como trabajan estos hashes:


ard-2.05a$ md5sum *
916f4c31aaa35d6b867dae9a7f54270d hola.txt
1e04bb3f9f396d3b71d93d326ebfc42d hola-mundo.txt
9649d2865859328b0eddb087160f2fc2 hilo-mundo.txt

Los archivos hola.txt, hola-mundo.txt e hilo-mundo.txt contienen exactamente los siguientes strings “hola”, “hola-mundo” e “hilo-mundo”.

Lo primero que se hace obvio es que los hashes calculados tienen la misma longitud, lo que seguiría cumpliendo aún para una archivo de varios megabytes. Y adicionalmente la más mínima variación en el texto genera un cambio desproporcionado en el hash, lo que es conocido como “efecto avalancha”.

Algo mucho menos obvio es que la posibilidad de un “colisión” no es relevante. Se habla de una colisión cuando dos entradas (Archivos) diferentes generan el mismo hash, cosa que obviamente no es deseable para un algoritmo de hash criptográfico.

¿Cómo usar las firmas MD5 en la práctica?

Sencillo, calculas el hash MD5 del archivo que quieres hacer disponible a terceros, colocas el archivo y el hash juntos. Una vez que otra persona tiene estos archivos en su poder puede calcular el hash y compararlo mediante simple inspección o suministrar el archivo con el hash y verificarlo.

Lo mejor de todo es que existen muchísimas implementaciones de estos algoritmos para todos los sistemas operativos, cada una más fácil de usar que la otra. Para Windows pueden probar con el MD5 Checksum Tool de Ferruh Mavituna con una interfaz gráfica que soporta drag’n drop, cut and paste, etc; y que además puede ser usado en la línea de comando.

Otros usos comunes de los hashes MD5

Son el hashing de passwords, que permite ocultar el password suministrador por los usuarios permitiendo siempre compararlo al momento de hacer login. Típicamente para este fin se agrega información aleatoria al password para prevenir ataques “reversos”, caso en el que se habla del uso de un algoritmo “salted” (es como añadir un pizca de sal ;-)

Y la tecnología de firmas digitales se basa en estos hashes como parte del proceso, ya que lo que se hace es firmar digitalmente el hash del documento que se quiere “certificar”.

Les recomiendo de sobremanera An Illustrated Guide to Cryptographic Hashes
en Steve Friedl’s Unixwiz.net Tech Tips si quieren más información sobre los hashes MD5, y adicionalmente el problema de las “colisiones” que últimamente ha movido mucho a la comunidad de gente que trabaja en criptografía.

* Término popular pero incorrecto, ya que los algoritmos de checksum no están construidos bajo los mismos principios que los algoritmos de hashing criptográfico, y si bien protegen contra errores accidentales en la transmisión de datos no lo hacen contra la manipulación intencional. En linux pueden usar el utilitario cksum para estos efectos, y en windows también hay utilitarios equivalentes disponibles.


2 Respuestas a “Verificando archivos mediante firmas MD5”

  1. 1 okickoff

    Me rindo, espero que esto sirva… siempre me banea diciendo que soy un spamer. Sorry.

  2. 2 William9co

    Muy buena tu explicación, es sencilla de entender, esto fué una de las cosas de las que se valieron los expertos de Interpol al analizar los computadores de “Raul Reyes” para aseverar publicamente que los archivos allí contenidos no fueron manipulados o alterados.


RSS feeds

Suscríbete a nuestros RSS Feeds