Zum Inhalt springen

UUHash

aus Wikipedia, der freien Enzyklopädie

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 <templatestyles src="Webarchiv/styles.css" />{{#if:20080122053217

      | {{#ifeq: 20080122053217 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#if: sig2dat | {{#invoke:WLink|getEscapedTitle|sig2dat}} | {{#invoke:Webarchiv|getdomain|http://www.geocities.com/vlaibb/tools.html}} }} (Archivversionen)
    | {{#iferror: {{#time: j. F Y|20080122053217}}
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
         | {{#if: sig2dat | {{#invoke:WLink|getEscapedTitle|sig2dat}} | {{#invoke:Webarchiv|getdomain|http://www.geocities.com/vlaibb/tools.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y|20080122053217}} im Internet Archive{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
      }}
  }}
      | {{#if:
          | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
    | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
       | 16= {{#if: sig2dat | {{#invoke:WLink|getEscapedTitle|sig2dat}} | {{#invoke:Webarchiv|getdomain|http://www.geocities.com/vlaibb/tools.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | 9 = {{#if: sig2dat | {{#invoke:WLink|getEscapedTitle|sig2dat}} | {{#invoke:Webarchiv|getdomain|http://www.geocities.com/vlaibb/tools.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if:  || }}
      }}
    | c|{{{webciteID}}}}} {{#if: sig2dat | {{#invoke:WLink|getEscapedTitle|sig2dat}} | {{#invoke:Webarchiv|getdomain|http://www.geocities.com/vlaibb/tools.html}} }} (Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
  }}
          | {{#if: 
              | Vorlage:Webarchiv/Today
              | {{#if:
                      | Vorlage:Webarchiv/Generisch
                      | {{#if: sig2dat | {{#invoke:WLink|getEscapedTitle|sig2dat}} | {{#invoke:Webarchiv|getdomain|http://www.geocities.com/vlaibb/tools.html}} }}  
                 }}}}}}}}{{#if:
    | Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
     |all      = url=
     |opt      = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
     |cat      = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
     |errNS    = 0
     |template = Vorlage:Webarchiv
     |format   = *
     |preview  = 1
  }}{{#ifexpr: {{#if:20080122053217|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
    | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
        | web.archive.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
        | webcitation.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
        | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
         | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
             | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.geocities.com/vlaibb/tools.html}}
    || {{#if:  || }}
  }}{{#if: sig2dat
    | {{#if: {{#invoke:WLink|isBracketedLink|sig2dat}}
        | {{#if:  || }}
      }}
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|http://www.geocities.com/vlaibb/tools.html%7Carchiv}} |-1
    || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.geocities.com/vlaibb/tools.html%7C4}}%7Chttp}} |-1
         || {{#switch: {{#invoke:Webarchiv|getdomain|http://www.geocities.com/vlaibb/tools.html }}
              | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = 
              | #default = {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }} 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.