Hallo allemiteinander,
Hoffe mal, es ist das richtige Forum. Also ich suche eine Möglichkeit, Dateien mit definierten Hashwerten zu erzeugen. Also wenn man z.B eine Datei mit dem Hashwert „MIETZEKATZE56…“ erzeugen will, wie geht das?
Hallo!
Das ist i.d.R. nicht möglich.
Normalerweise sollte eine Hashfunktion ja so gestrickt sein, dass eine kleine Änderung der Eingabe eine starke Änderung der Ausgabe hervorruft.
Bei üblichen Hashfunktionen (bspw. MD5) ist das der Fall.
Gleichzeitig sind Hashfunktionen nicht umkehrbar, d.h. aus einem Hashwert lässt sich der Ausgangswert nicht herausrechnen.
Alle diesbezüglichen Möglichkeiten basieren m.W. nach darauf, sich in riesigen Tabellen die Hashwerte zum jeweiligen Klartext zu speichern, um so einen Wert zu finden, der einen gegebenen Hash erzeugt.
Das wird umso aufwändiger, je länger der zu hashende Wert ist - wenn Du ganze Dateien hashen willst, wird das alle vernünftigen Grenzen sprengen.
Interessehalber: Wofür brauchst Du sowas?
Gruß,
Martin
Hallo,
soll man ja eigentlich nicht sagen, aber:
Gibt’s nicht, geht nicht.
Eine Hashfunktion ist - wie heißt es doch so schön, nicht bijektiv, sprich umkehrbar.
Grüße
fribbe
dummyfeld zurückrechnen
Hallo,
Wenn Du in Deiner Datei ein Dummfeld etwa in Größe des Hashwertes freihalten kannst (ein „Korrekturfeld“), dann kannst Du das Korrekturfeld solange ändern, bis Dein Hash erscheint.
Bei kleinen Hashwerten (oder CRC-Prüfsummen) ist das noch praktikabel, bei großen solltest Du
- die Funktionsweise der Hashfunktion kennen
- daraufhin das Korrekturfeld so anlegen, dass es „ganz zum Schluss“ in die Berechnung eingeht
- dann versuchen, das Korrekturfeld gezielt zu manipulieren.
Z.B. mit 0 vorbelegen Hash-Bestimmen und dann das passende Korrekturfeld aus aktuellem und gewünschtem Wert berechnen.
Gruß
achim
Nix mit umkehren
Weiss jetzt nicht wie ihr alle auf das Thema Umkehrfunktion kommt. Eine Rückkonstruktion ist unmöglich, strebe ich aber auch nicht an.
Mir geht es darum, dass ein Hash vorliegt bei einer Datei
Eine Person ist im Besitz einer anderer Datei mit demselben Hashwert und behauptet, dass sich hierbei um Kopien handeln muss, da die Hashwerte identisch sind.
Eine andere Person möchte wissen, ob man nicht doch auch andere Dateien mit demselben Hashwert generieren könnte. Einer von euch hat auch netterweise die Theorie dazu gepostet, mich würde allerdings eher ein Praktisches Programm/tool interessieren, welches das drauf hat.
Und in Zukunft bitte nur posten, wenn ihr verraten könnt, wie es geht.
Hallo Zera,
zu:
„Weiss jetzt nicht wie ihr alle auf das Thema Umkehrfunktion kommt.“
Liegt ein wenig an deiner ursprünglichen Fragestellung, oder?
Willst du beweisen, daß es zu Kollisionen kommen kann: Unnötig, weil bewiesen. Oder willst du eine Kollision provozieren? Wohl eher.
Ein Tool könntet eine Datei mit Werten zu füllen, den Hash berechnen und überprüfen, ob dieser mit dem dem „gewünschtem“ Hash-Wert übereinstimmt.
Dies solange, bis es zu einer Kollision kommt. Dann hättest du entweder per „Zufall“ eine Kopie der Datei erstellt oder eben eine Kollision verursacht.
Und dies kann dauern, das der Sinn eines vernünftigen Hash-Algorithmus eben auf großmöglichste Kollisionsfreiheit optimiert ist.
Natürlich gibt es Angriffsmöglichkeiten, die eben ein solches ermöglichen sollen, indem mathematisch konzeptionelle Schwächen der verschiedensten Hash-Algorithmen berücksichtigt werden.
Siehe auch hier:
http://de.wikipedia.org/wiki/Kryptologische_Hashfunk…
Weiter:
„Preimage-Angriffe können auch mit den genannten Methoden noch nicht in sinnvoller Zeit durchgeführt werden. Dadurch ist es weiterhin unmöglich, nachträglich ein gefälschtes Dokument zu erstellen, das zu einem bestimmten, mit MD5 erzeugten Zertifikat passt. Es ist jedoch durch Kollisionsangriffe in vielen Fällen möglich, zwei Dokumente zu erstellen, die denselben MD5-Hashwert ergeben, dann das erste, legitime Dokument signieren zu lassen, und anschließend dieses durch das zweite, gefälschte Dokument auszutauschen. Vor diesem Hintergrund ist von einer Weiterverwendung von MD5 abzuraten.“
Quelle: http://de.wikipedia.org/wiki/Message-Digest_Algorithm_5
Bezüglich MD5 findest du hier
http://www.mscs.dal.ca/~selinger/md5collision/
http://de.comp.security.misc.narkive.com/8O14xrNM/ko…
Tools.
Grüße
fribbe
immer noch nix
Hallo Zera,
zu:
„Weiss jetzt nicht wie ihr alle auf das Thema Umkehrfunktion
kommt.“Liegt ein wenig an deiner ursprünglichen Fragestellung, oder?
Die da lautete „suche eine Möglichkeit, Dateien mit definierten Hashwerten zu erzeugen“
Mit keinem Deut erwähnte ich eine Umkehrfunktion oder sprach davon, den Ausgangswert zurückzurechnen. Daher die Verwunderung, weshalb manche Leute auf diese Aspekte antworteten.
Aber erstmal auch dir einen guten Tag.
Willst du beweisen, daß es zu Kollisionen kommen kann:
Unnötig, weil bewiesen. Oder willst du eine Kollision
provozieren?
Was ich will, sagte ich bereits, und dabei war auch gar keine Ambiguität, welche einer Nachfrage bedürfte, daher nochmal: Hätte gern einen Hash, welcher „Mietzekatze“ beinhält.
Hash-Algorithmus eben auf großmöglichste Kollisionsfreiheit
optimiert ist.
Natürlich gibt es Angriffsmöglichkeiten, die eben ein solches
ermöglichen sollen, indem mathematisch konzeptionelle
Schwächen der verschiedensten Hash-Algorithmen berücksichtigt
werden.
Ich als Computer Laie dachte bisher, dass Hashes grundsätzlich nur ein Hilfstool beim Download sind, z.B ein CRC Check zur Überprüfung von Bitübertragungsfehlern.
In den Letzten Jahren werden Hash Werte jedoch vermehrt von Anklägern bei Gerichten benutzt und die Argumentation lautet wie folgt:
Es existiert eine urheberrechtlich geschützte Datei mit dem Hashwert X sowie eine Person
welche irgendeine Datei besitzt, ebenfalls mit dem Hashwert X. Nun meint der Ankläger, dass es sich folglich bei der Datei von der Person ebenfalls um die urheberrechtlich geschützte Datei handeln muss, da die Hashwerte übereinstimmen. Ist das eine schlüssige Argumentation oder nicht gerichtsfest?
Mag jetzt eher eine rechtliche Frage sein, aber denke mal, ihr Leute aus der Programmierabteilung habt davon eine größere Ahnung.
Hallo nochmal!
Versuch’ ich’s halt mal etwas vereinfacht zu erklären - vielleicht verstehst Du’s ja dann:
Der Hashwert einer Datei ist eine Art Prüfsumme.
Da die Prüfsumme kürzer ist als die Datei selbst, wird es zwangsläufig mehrere Dateien geben, die die selbe Prüfsumme ergeben (einfache Logik/Mathematik).
Du möchtest jetzt also eine Datei erzeugen, die eine bestimmte Prüfsumme ergibt.
Je nachdem, wie die Hashfunktion gewählt ist, ist es einfach, schwer oder (für alle praktischen Zwecke) unmöglich, eine solche Datei gezielt zu erzeugen, auch wenn es einfach zu beweisen ist, dass es sie geben MUSS.
Nimmst Du bspw. einfach die Summe der einzelnen Bytes der Datei modulo 13 als Hashfunktion, dann kannst Du einfach durch Anhängen von 0 an die Originaldatei eine weitere Datei mit demselben Hash erzeugen.
„Summe mod 13“ ist aber auch keine gute Hashfunktion.
Wenn Du dagegen bspw. MD5 hernimmst, dann ist es eine gute Hashfunktion, da sich das Ergebnis bei kleinen Änderungen der Ausgangsdaten erheblich ändert und die Kollisionswahrscheinlichkeit gering ist (aber wie bei jeder Hashfunktion > 0!!!).
Bei MD5 kannst Du aber eben nicht hergehen und mit einfachen Regeln sagen, was Du machen musst um einen beliebigen Hashwert zu erhalten.
Lies’ (wie bereits von jemand anderem vorgeschlagen) mal bei Wikipedia nach. Das, was Du möchtest, bezeichnet man als Preimage-Angriff und der ist auch für MD5 nach wie vor nicht für beliebige Hashes möglich.
Um auf den Hashwert der „urheberrechtlich geschützen Datei“ zurückzukommen:
Dass der Hashwert übereinstimmt, beweist nicht , dass es sich um eine Datei mit gleichem Inhalt handelt.
Es gibt Kollisionen, aber die sind im richtigen Leben so unwahrscheinlich (und eben auch nicht „einfach so“ zu erzeugen), dass ein Gericht vermutlich davon ausgehen wird, dass Du die blöde Datei tatsächlich heruntergeladen hast und dass es sich nicht um eine andere Datei (zumal mit sinnvollem Inhalt) handelt, die nur zufällig die gleichen 1024 Bit Hashwert (bei MD5) hat.
Gruß,
Martin
Da du gerade schon mal CRC ansprichst… CRC ist kein kryptographischer Hash. Deswegen ist es dafür schon möglich, eine Datei zu finden, die einem vorgegebenen CRC-Code hat.
CRC funktioniert in etwa so:
Interpretiere die Bits einer Datei als Koeffizienten eines Polynoms (über GF(2)). teile dieses Polynom durch ein vorgegebenes Generatorpolynom. Der verbleibende unteilbare Rest ist der CRC-Code.
Steht dir nun eine Datei mit dem Code x zur Verfügung und du willst daraus eine Datei mit dem Code y erstellen, musst du einfach nur die Differenz (y - x) zu der Datei addieren.
Hier mal an einem etwas anschaulicherem Beispiel in GF(11).
Wir haben eine Datei und interpretieren sie als Zahl: m = 68423698
Nun teilen wir diese Datei durch 11 (das entspricht in etwa dem Generator von GF(11)) und betrachten den unteilbaren Rest:
68423698 : 11 = 6220336 Rest 2
Der CRC-Code wäre also 2.
Wenn wir daraus eine Datei mit dem Code 8 machen wollen, addieren wir einfach 8-2=6 zu der Datei. Dann haben wir:
m’ = 68423704
Und m’ / 11 = 6220336 Rest 8
Diese Datei hat also den CRC-Code 8.
Wie bereits mehrfach erwähnt hängt also immer vom gewählten Algorithmus ab, ob dessen Umkehrung (und nichts anderes suchen wir hier) möglich ist.
Nico
aus Interesse …
Hallo
In den Letzten Jahren werden Hash Werte jedoch vermehrt von
Anklägern bei Gerichten benutzt und die Argumentation lautet wie folgt:
Es existiert eine urheberrechtlich geschützte Datei mit dem Hashwert X
sowie eine Person welche irgendeine Datei besitzt, ebenfalls mit dem Hashwert X.
Nun meint der Ankläger, dass es sich folglich bei der Datei
von der Person ebenfalls um die urheberrechtlich geschützte
Datei handeln muss, da die Hashwerte übereinstimmen. Ist das
eine schlüssige Argumentation oder nicht gerichtsfest?
Wie bei Fingerabdrücken oder Gentests: Massenvergleich bringt massig Zufallsfunde mit sich.
Warum zieht man im Zweifel nicht die ganze Datei zurate? Diese kann doch eindeutig geprüft werden…
Gruß
achim