UUHash ist ein Hash-Algorithmus der von Clients des FastTrack-Netzwerks benutzt wird. In kurzer Zeit können Prüfsummen für sehr große Dateien erstellt werden, auch auf leistungsschwachen Computern. Allerdings wird nur für einige Teile der Datei die Prüfsumme gebildet. Diese Schwäche erleichtert das Auffinden von Hash-Kollisionen, und Verfälschungen oder Korrumpierungen an den übrigen Teilen der Datei bleiben unbemerkt, da die Prüfsumme dadurch nicht betroffen wird.
UUHash wird zum Beispiel von Kazaa benutzt und die RIAA nutzt diese Schwachstelle aus, um verfälschte oder kaputte Dateien im Netzwerk zu verbreiten.
Algorithmus
UUHash bildet eine MD5-Prüfsumme auf die ersten 300 kB der Datei, danach jeweils im Abstand von 2^n MB (n = 0 und wird jeweils um 1 erhöht, bis das Dateiende erreicht wird) für die nächsten 300 kB-Blöcke. Dafür verwendet UUHash eine eigene Smallhash-Funktion. Am Schluss wird auf die letzten 300 KB der Datei die Prüfsumme gebildet. Falls sich die letzten 300 kB mit dem letzten 2^n Block überschneidet, wird dieser vorher wieder verworfen.
Beispiel:
- Abstand 1 MB, 300 kB Prüfsumme
- Abstand 2 MB, 300 kB Prüfsumme
- Abstand 4 MB, 300 kB Prüfsumme
- Abstand 8 MB, 300 kB Prüfsumme
- ...
- letzte 300 kB der Datei Prüfsumme
Die 128 Bit MD5-Prüfsumme und die 32 Bit Smallhash ergeben dann zusammen die 160 Bit Prüfsumme für die Identifizierung der Datei im FastTrack-Netzwerk. Die so erhaltene Prüfsumme wird nun mit Base64 kodiert und ergibt den UUHash.
Sig2Dat
Der Name UUHash ist eigentlich eine unglückliche Wahl. Dieser stammt ursprünglich vom sig2dat (Memento vom 22. Januar 2008 im Internet Archive) Tool. Dieses erstellt von URIs Referenzdateien für Kazaa. Die URIs (das Format entspricht nicht dem RFC-Standard.) sehen mit sig2dat so aus:
sig2dat://|File: surprise.mp3|Length:5845871Bytes|UUHash:=1LDYkHDl65OprVz37xN1VSo9b00=
UUHash verwendet aber Base64-Kodierung für die Prüfsumme und nicht die Prüfsumme selber.