martes, 3 de abril de 2007

HASH

Internet lo usamos para enviar y recibir información. Toda esa información la podríamos considerar archivos formados paquetes de datos, por lo que podemos decir que estamos subiendo y descargando archivos continuamente, desde el texto de una página web, como sus enlaces, cookies... o símplemente informando al servidor que seguimos conectados a la red.

A veces la integridad de los archivos es esencial y puede ser crítica, y aunque no los veamos, se producen errores de datos más común de lo que nos imaginamos. Para comprobar la integridad de un archivo existen algoritmos resumen llamados hash que tienen la particularidad de variar notablemente por pequeño que sea el error. Programas p2p los usan siempre, ya que detectan quién tiene un archivo a pesar de que se le cambie el nombre. Como pueden haber hashes repetidos, se acompañan del tamaño del archivo en bytes.

Hay muchísimos tipos de HASH, pero los más usados en P2P son:
MD4: Resumen de 128 bits, también llamado ED2K Hash es el precursor de MD5 y SHA-1.
MD5: Resumen de 128 bits, surgido al encontrar debilidades criptográficas en MD4.
SHA-1: Salida de 160 bits, tamaño máximo de archivo de 264 bits.
TTH: Resumen de 192 bits.

Estas formas de hashing se han desarrollado inicialmente en criptografía, para aportar seguridad como formas de contraseña o firmas digitales "inviolables" pero algunas de estas formas ya han sido "rotas" por fuerza bruta o están en el límite, por lo que en criptografía se busca que sean más grandes. A pesar de todo, aquí sólo estamos tratando la integridad, no la seguridad, por lo que el tamaño no es tan importante.

Cuando vemos un resumen HASH lo vemos en formato hexadecimal, de la forma:

da39a3ee5e6b4b0d3255bfef95601890afd80709 
y hay programas dedicados a verificar los hash, en concreto éste verifica el md5, muy usado en descargas directas http y ftp.

eMule utiliza el hashing de la siguiente forma:
  1. Divide el fichero en partes de 9.28 MB => MD4 a cada parte
  2. Recopila el conjunto de hashes en un fichero => MD4 al fichero de hashes (hash de fichero utilizado en enlaces ed2k)
  3. Divide cada parte en 53 bloques => SHA-1 a cada bloque
  4. Combinación de hashes SHA-1 hasta llegar a un hash raíz
  5. El conjunto de hashes calculado se le llama AICH3

Si sólo hubiera un único hash final y fuera incorrecto deberíamos volver a descargarnos el archivo, al hacerlo por bloques primero se ve cuál es la parte afectada y después los bloques, de forma que automáticamente el programa recupera las partes (bloques) dañadas.

No hay comentarios: