UHash


UUHash es un algoritmo hash empleado por clientes en la red FastTrack . Se emplea por su capacidad para procesar archivos muy grandes en un período de tiempo muy corto, incluso en computadoras más antiguas. Sin embargo, esto se logra mediante el hash de una fracción del archivo. Esta debilidad hace que sea trivial crear una colisión hash, lo que permite que grandes secciones se alteren por completo sin alterar la suma de comprobación .

Este método es utilizado por Kazaa . Las agencias anti- p2p explotan la debilidad de UUHash para corromper las descargas. [1]

El UUHash es una cadena de 160 bits que generalmente está codificada en Base64 para la presentación. Es una concatenación de un hash MD5 y una suma CRC32 de fragmentos seleccionados del archivo. [2] [3]

Los primeros 307 200 bytes (300 Kibibyte , un "tamaño de fragmento") del archivo tienen un hash MD5 (menos si el archivo es más corto). El valor entero little endian de 32 bits smallhash se inicializa en 0.

Si el archivo es estrictamente más grande que un tamaño de fragmento, una serie de fragmentos en desplazamientos de archivo de 2 n MiB (n ≥ 0) y un fragmento justo al final del archivo se codifican mediante un CRC32 (polinomio 0xEDB88320 invertido, 0x04C11DB7 normal) . El último fragmento de la serie potencia de dos termina estrictamente más de un tamaño de fragmento antes del final del archivo, es decir, siempre hay al menos un byte sin leer entre los dos últimos fragmentos (si hay tantos fragmentos). [nota al pie de página 1] El fragmento del final del archivo puede tener menos de un tamaño de fragmento; comienza en o después de un tamaño de fragmento en el archivo. El CRC se inicializa usando smallhash y se almacena en smallhash .

Finalmente, el complemento bit a bit de smallhash (todavía cero para archivos de hasta 300 KiB) se somete a XOR junto con el tamaño del archivo en bytes. El UUHash de 160 bits ahora es la concatenación del hash MD5 de 128 bits y el valor final del hash pequeño de 32 bits.