23 de Marzo, 2003

MD5 incremental

Bueno, se me acaba de ocurrir una idea, seguramente en absoluto novedosa, mientras estaba bajando la última versión (9.0) de mi distribución actual, Slackware, y me gustaria compartirla con alguien (o con "todos").

Como supongo que muchos otros hacen, yo utilizo md5sum para verificar la correción de un determinado archivo (en este caso la imagen ISO) al terminar la descarga. No hay nada que más fastidie que comprobar después de haber bajado 600 y pico megas que el archivo es erroneo. Por tanto, se me ha ocurrido, ¿y si hubiese algun modo de verificar el MD5 en cualquier momento de la descarga?.

Primero se me ocurrió un modelo orientado a tablas de valores MD5, una para cada tamaño. El problema es que tendrían tantas entradas como bytes tenga el archivo en cuestión, y puesto que el valor MD5 tiene 32 bytes, la tabla ocuparía como mínimo 32 veces más que la iso original... así que es un método a descartar. No obstante, una implementación basada en partes, de digamos, un mega, sí sería bastante interesante, aunque el programa tendría que incorporar algún método para hacer la suma sólo hasta un determinado tamaño (como el comando "head", por ejemplo). De hecho soluciones similares ya han sido incluidas en programas como mldonkey (y supongo que sus equivalentes de otros sistemas operativos) para testear la validez de los "trozos" de un archivo más grande, aunque no con MD5 sino con MD4.

Después he pensado también en un esquema basado en una aplicación (un cgi mismamente) corriendo en el servidor de archivos que devolviese la suma hasta un determinado número de bytes del archivo remoto. El usuario comprobaría posteriormente su archivo actual, descartándolo si no es correcto. Todo ello se podría hacer incluso de una forma automática, mediante el cliente adecuado, teniendo algo similar a:

  $ md5sum --server servidor.remoto.com miarchivo.iso

Esto obtendría el tamaño actual del archivo en disco, hallaría su MD5 y lo compararía con el valor devuelto por el servidor remoto. Al servidor sólo sería necesario enviar un tamaño y un MD5. Por supuesto, para ejecutar el comando, la descarga debe estar parada para así no variar el tamaño del archivo. Y también habría que tener en cuenta la carga impuesta al servidor remoto, pues hacer sumas MD5 requiere bastante tiempo de procesador, con lo que sería recomendable advertir a los usuarios de la necesidad de hacer un uso responsable de este servicio. O incluso se podría usar otro algoritmo menos pesado que el MD5 y que consuma menos recursos.

En fin, creo que ya fue suficiente desvario por hoy. Lo anotaré como proyecto futuro. Voy a dormir, buenas noches.

Posteado por phestar en rayadas a las 01:57

Comentarios

Como siempre cojonudo cabrón, no defraudas con tus ideas. Nos vemos el lunes.

Posteado por: DHUNCAN (62.37.202.57) el 23 de Marzo, 2003, 04:53
Pon un comentario















Introduce el código de seguridad: