UUHash


UUHash — это алгоритм хеширования, используемый клиентами в сети FastTrack . Он используется из-за его способности хешировать очень большие файлы за очень короткий период времени даже на старых компьютерах. Однако это достигается только хешированием части файла. Эта слабость делает тривиальным создание коллизии хэшей, позволяя полностью изменять большие разделы без изменения контрольной суммы .

Этот метод используется Kazaa . Агентства по борьбе с p2p используют слабость UUHash для искажения загрузок . [1]

UUHash — это 160-битная строка, которая обычно кодируется Base64 для представления. Это объединение хэша MD5 и суммы CRC32 выбранных фрагментов файла. [2] [3]

Первые 307 200 байт (300 кибибайт , один «размер фрагмента») файла хэшируются MD5 (меньше, если файл короче). 32-битное целое число с прямым порядком байтов smallhash инициализируется равным 0.

Если файл строго больше одного размера фрагмента, серия фрагментов со смещением файла 2 n MiB (n ≥ 0) и один фрагмент в самом конце файла хэшируются с использованием CRC32 (многочлен 0xEDB88320 в обратном порядке, 0x04C11DB7 в обычном режиме). . Последний фрагмент последовательности степени двойки заканчивается строго более чем за один размер фрагмента до конца файла, т. е. между двумя последними фрагментами всегда есть хотя бы один непрочитанный байт (если фрагментов столько). [сноска 1] Фрагмент конца файла может быть короче одного размера фрагмента; он начинается с одного размера фрагмента в файле или после него. CRC инициализируется с помощью smallhash и сохраняется в smallhash .

Наконец, побитовое дополнение smallhash (по-прежнему ноль для файлов размером до 300 КиБ) подвергается операции XOR вместе с размером файла в байтах. 160-битный UUHash теперь представляет собой конкатенацию 128-битного хэша MD5 и окончательного 32-битного значения smallhash .