Secure Hash

Meine Idee zum Thema, dass Hashes MD5 und SHA-1 inzwischen Kollisionsgefährdet sind.

Dies ist ein Auszug aus einem Posting im Heise-Forum:

Hier meine Idee dazu (ich bin Laie!):

  • Hn(X) sei die Signaturfunktion n mit dem Ergebnis Sn.
  • GZIP(X) ist die ZIP-Funktion von ZLIB einer bestimmten Version.
  • A##B ist die Konkatenierung von A und B
  • A in B: A ist binär irgendwo in B enthalten.
  • Header(X) sind die ersten 2 Bytes von X
  • M sei eine Nachricht, möglichst XML (wohlgeformt, UTF-8).
  • IV sei ein zufälligen String (128 Bit und darüber). Er hat folgende Eigenschaft:
    • Header(GZIP(IV)) in IV == false
    • IV in GZIP(IV) == false
Dann berechnet man:

  • H2(IV ## GZIP(IV ## M ## IV ## H1(M) ## IV))
  • Paranoiker können anschließend noch folgenden Test durchführen und ggf. IV verwerfen wenn es so ist:
    IV in GZIP(IV ## M ## IV ## H1(M) ## IV) == false
Dann übermittelt man an den Gegenüber:

  • S2 ## S1 ## IV
Wenn dann jemand mit einem Dokument vor Gericht auftaucht, das allen folgenden Kriterien übereinstimmt, dann muss es eigentlich mit dem Teufel zugehen:

  • H1(M) == S1
  • H2(IV ## GZIP(IV ## M ## IV ## S1 ## IV)) == S2
  • Header(GZIP(IV)) in IV == false
  • IV in GZIP(IV) == false
Anmerkungen:

  • H1 und H2 können auf Basis desselben Keys oder zweier verschiedener Keys erstellt werden.
  • Der IV sollte mindestens 128 Bit haben. Allerdings ist er variabel lang. Deshalb hängt er hinter den Signaturen (deren Länge meist ja bekannt ist).
  • Sowohl Nachricht M als auch der IV müssen vom Unterzeichner nicht gespeichert werden (das ist ja die Idee der Signatur, ich unterschreibe etwas und bekomme evtl. keine Kopie). Es ist Aufgabe des Empfängers, dies zu tun um die Echtheit der Nachricht M zu beweisen.
  • Allerdings macht es durchaus Sinn, diesen Vektor mit einem kurzen Kommentar zu speichern, nur um sicher zu gehen. Das hat keine Beweiskraft, aber trägt zum späteren Vertrauen bei. Wichtig ist auch hier: Es kann sein, dass das Speichern der Signaturen im Verfahren unerwünscht ist, z. B. weil die Signaturen selber schon ein Geheimnis darstellen (niemand außer dem originalen Empfänger soll prüfen können, dass ich einen bestimmten Text unterschrieben habe, sofern der Text auftaucht. Könnte ja ein öffentliches Flugblatt sein).
Es dürfte klar sein:

  • Da der vorhandene Signaturcheck enthalten ist, kann das Verfahren nicht schlechter sein als der existierende Signaturcheck.
  • Der IV wird bewusst so "verbaut", dass er möglichst viel Einfluß auf die Kompression hat. Somit ist das Verfahren algorithmisch schwer faßbar.
  • Selbstverständlich kann man den IV aus der Kompression ausnehmen, so dass gunzip keinen Fehler entdeckt. In diesem Fall gilt aber, dass man einen manipulierten GZIP verwenden muss, also der obige Paranoiker-Test fehlschlägt, was ein ziemlich deutlicher Hinweis darauf ist, dass man sich mal den Output vom verwendeten GZIP ansieht.