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:
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.