El eMule emplea diversos medios para asegurarse que los ficheros se comparten en la red y se descargan sin errores. Si sucediese un error, denominado corrupción, eMule posee funciones avanzadas para corregir esa corrupción descargando de nuevo una cantidad mÃnima de datos.
Hash de ficheros e ICH - Gestión Inteligente de la Corrupción
Hash de ficheros, Hash de partes y Conjunto de Hashes
Para cada fichero que se comparte en la red se crea una identificación única empleando el algoritmo matemático de encriptación MD4. Este valor se llama Hash de Fichero y se encuentra en todos los enlaces eD2k normales, ej.
ed2k://|file|name|12043984|6744FC42EDA527B27F0B2F2538728B3E|/
donde 6744FC42EDA527B27F0B2F2538728B3E es el hash de fichero que hace que sea identificado de forma única en toda la red.
Este Hash de Fichero se calcula dividiendo todo el fichero en partes de 9.28 MB. Para cada una de estas partes se calcula un Hash de Parte empleando el mismo algoritmo MD4. Estos Hash de Partes, llamados Conjunto de Hashes, se emplean para calcular el Hash de Fichero final. Por ejemplo, un fichero de 600 MB se dividirÃa en 65 partes, cada una con su propio Hash de Parte, que se usan entonces para crear dicho Hash de Fichero.
Para asegurarse que eMule siempre recibe el Conjunto de Hashes correcto se puede crear un enlace especial que lo contenga, ej..
ed2k://|file|nombre|12043984|6744FC42EDA527B27F0B2F2538728B3E|p=264 E6F6B587985D87EB0157A2A7BAF40:17B9A4D1DCE0E4C2B672DF257145E98A|/
donde el valor de p= indica el Hashset. Cada Hash de Parte se separa por un ":". Este fichero tiene un tamaño de 12043984 Bytes (=11.49 MB) lo que significa que tiene una parte de 9.28 completa, y otra con el resto hasta los 11.49 MB lo que supone dos Hash de Partes.
ICH (Intelligent Corruption Handling) Gestión Inteligente de la Corrupción
Cada vez que eMule finaliza una de esas partes comprueba si los datos que se han descargado coinciden con el Hash de Parte para esa parte finalizada. Si es asÃ, esta parte se ofrece a otros clientes para ayudar en su distribución.
Si no coincide, ha habido un problema de corrupción y toda la parte necesita ser descargada de nuevo. Para evitar descargar los 9.28 MB, la ICH descarga 180KB del comienzo de la parte y comprueba toda la parte de nuevo para ver si el Hash de Parte ahora es correcto. Si no es asÃ, los siguientes 180 KB se descargan, se comprueban de nuevo etc. hasta que el Hash de Parte es finalmente correcto. En el mejor de los casos eMule solamente tiene que descargar 180 KB si la corrupción se encuentra justo al comienzo de la parte. En el peor de los casos toda la parte ha de ser descargado de nuevo si la corrupción se encuentra en la zona final de la misma. De media la ICH permite evitar descargar de nuevo el 50% de los datos cuando hay corrupciones.
AICH - (Advanced Intelligent Corruption Handling) Sistema Avanzado de Gestión Inteligente de la Corrupción
El sistema ICH normal es bastante efectivo, aunque tiene sus limitaciones ya que sólo se puede comprobar el bloque de 9.28 MB, no partes más pequeñas. Si más de una posición está corrupta o si algún cliente dañino envÃa datos corruptos continuamente o incluso falsifica todo un Hash de Parte, la ICH deja de ser efectivo.
Aquà es donde el AICH ayudará a obtener una integridad de los datos completa con un gasto mÃnimo de redescarga o de sobrecarga creando hashes mucho más pequeños.
Hash RaÃz, Hashes de Bloques y Conjunto de Hashes AICH

Esta vez nuestro punto de partida son las partes de 9.28 MB en un fichero. Cada parte se divide en bloques de 180 KB, obteniendo 53 bloques en cada parte y para cada bloque se calcula un valor de hash empleando el algoritmo de hash SHA1. Estos valores se llaman Hash de Bloque y forman el nivel inferior en el Conjunto de Hashes AICH.
La imagen superior muestra cómo todo un árbol de hash se construye en base a los bloques de un fichero con 4 partes completas. Cada parte contiene 53 bloques por lo que obtenemos 212 Hashes de Bloque que constituyen un árbol de hash de 7 niveles hasta obtener el Hash RaÃz. El árbol completo se llama Conjunto de Hashes AICH.
Los puntos verdes y amarillos muestran las dependencias matemáticas de los Hashes de Bloque más pequeños hacia el Hash RaÃz. Esto significa que si tenemos un Hash RaÃz de confianza el árbol entero puede verificarse con él.
eMule puede crear enlaces que contengan el Hash RaÃz, ej.
ed2k://|file|nombre|12043984|6744FC42EDA527B27F0B2F2538728B3E|h=A2 NWOTYURUU3P3GCUB6KCNW3FTYYELQB|/
donde h= es el Hash RaÃz. Este valor deberÃa incluirse en los lanzamientos ya que mejora de forma significativa la resistencia a la corrupción del fichero al proporcionar un Hash RaÃz de confianza. Lee Confiar en el Hash RaÃz.
Reparando una corrupción
Cuando eMule detecta una corrupción en una parte solicita un Paquete de Recuperación de un cliente al azar que posea un Conjunto de Hashes AICH completo. Este Paquete de Recuperación contiene los 53 Hashes de Bloque de la parte corrupta y unos Hashes de Verificación del resto del árbol de hashes. La imagen superior muestra el Paquete de Recuperación para un fichero de 4 partes. El número de Hashes de Verificación se calcula en base al número de partes de un fichero (2^x >= 'número de partes', con x= Número de Hashes de Verificación).
Tras recibir el Paquete de Recuperación eMule comprueba los Hashes de Verificación con su Hash RaÃz de confianza. Si coinciden, eMule comprueba los 53 bloques de la parte corrupta con los Hashes de Bloque del Paquete de Recuperación. El AICH restaura entonces todos los bloques que coincidan con su Hash de Bloque y deja únicamente el(los) bloque(s) corrupto(s) para descargar de nuevo.
Una reparación correcta se mostrará en el log de la siguiente forma:
09.09.2004 02:43:43: Parte descargada 6 corrupta sad.gif ([fichero])
09.09.2004 02:43:46: AICH recuperó 8.22 MB de 9.28 MB de la parte 6 del archivo [fichero]
Confiar en el Hash RaÃz
La mejor opción es descargar de un enlace que contenga el Hash RaÃz. Suponiendo que la fuente de este enlace sea de confianza el Hash RaÃz se considera por tanto de confianza y se guarda para este fichero.
Si en el enlace no se proporciona un Hash RaÃz entonces eMule tiene que llegar a confiar en el Hash RaÃz, el cual se lo mandarán las fuentes de ese fichero. Solo confÃa en el Hash RaÃz si al menos 10 fuentes diferentes envÃan el mismo valor y al menos el 92% de todas las fuentes coinciden en ese valor. Dado que este Hash RaÃz no es realmente de confianza sólo es válido para la sesión actual y no se grabará a disco ni se pueden crear enlaces con dicho Hash RaÃz..
Una vez que eMule construye el Conjunto de Hashes AICH completo, es decir cuando ha finalizado el fichero, comienza a enviar el Hash RaÃz a otros clientes.
Notas: |
• |
Los ficheros recién lanzados o de ficheros difÃciles de encontrar posiblemente no poseen suficientes fuentes completas para generar un Hash RaÃz en el que confiar. Se recomienda distribuir los ficheros junto con el Hash RaÃz. |
• |
Si no existe el Hash RaÃz, o incluso aunque esté falsificado, eMule será capaz de descargar correctamente un fichero y finalizarlo en condiciones normales. La funcionalidad de AICH no podrá ser usada en este caso. |
• |
Dado que los Conjuntos de Hashes AICH son muy grandes no se guardan en memoria sino en el fichero known2.met y se leen únicamente cuando son necesarios.. |
• |
El AICH sólo será efectivo para clientes eMule iguales o superiores a la versión 0.44a aunque mantiene compatibilidad con los clientes antiguos. |
Resumen del Traductor:
Un fichero se divide en bloques de 9.28 MB que se denominan Partes, a cada parte se le aplica el MD4 y obtenemos su Hash de Parte (Part Hash). Si pones todos los hashes de Partes de un fichero juntos eso es el Conjunto de Hashes (Hashset). Si a este Conjunto de Hashes se le aplica el MD4 entonces se obtiene el Hash de Fichero (File Hash) que se usa en los enlaces eD2k.
A partir de la versión 0.44a del eMule existen unos nuevos tipos de Hash, comenzamos por las partes anteriores de 9.28 MB, las dividimos en 53 bloques y les aplicamos esta vez el SHA1, entonces obtenemos los Hashes de Bloque (Block Hashes). Estos Hashes se van combinando para obtener unos Hash parciales, y se siguen combinando hasta llegar a un solo hash combinación de todos los demás que es el Hash RaÃz (Root Hash). El conjunto de todos los hashes que se han calculado es el Conjunto de Hashes AICH (AICH Hashset), que tiene una estructura de árbol. El Hash RaÃz es el que se puede añadir a los enlaces eD2k a partir de la .44a, y sirve para verificar que los datos del Conjunto de Hashes AICH que nos envÃe otro cliente son válidos.
Para detectar dónde se produce una corrupción en una parte le pedimos a un cliente que tiene el Hash RaÃz correcto que nos envÃe un Paquete de Recuperación, que contiene los 53 Hashes de Bloque de la parte que tenemos dañada, junto con otros Hashes de Verificación necesarios para comprobar que los datos que nos ha enviado son correctos y los podemos verificar con el Hash RaÃz que tenemos.
Aplicable a: v.44a+
|