Frage:
Reversible Hash-Funktion?
Geek
2014-07-13 21:40:58 UTC
view on stackexchange narkive permalink

Gibt es eine reversible Hash-Funktion?

Die Hash-Funktion wie SHA und MD5 ist nicht reversibel. Ich würde gerne wissen, ob es einige reversible Hash-Funktionen gibt?

Wenn es reversibel ist, ist es kein Hash.
Reversibler Hash wird als Verschlüsselung bezeichnet. Dies ist möglicherweise besser für Crypto SE geeignet
Der Kontext hier, "security.stackexchange", ist Kriptographie ... Aber nehmen wir an, das ist nicht: ** Der Begriff "Hash-Funktion" schließt Kryptographie nicht aus **, er ist allgemein und "krytographische Hash-Funktion" ist nur aspezielle Unterklasse von * Hash-Funktion * ... Diese Frage scheint also allgemeiner zu sein als die hier veröffentlichten Antworten und Kommentare."reversible Funktion" ist ein existenzielles Konzept ... "reversible Hash-Funktion" ist nur eine Annahme über die Existenz von [inverse Funktion] (https://en.wikipedia.org/wiki/Inverse_function) (wie @EricLagergren kommentierte).
Die Hauptantwort hier, ** über die generische Hash-Funktion **, ist die weniger gewählte, siehe @Rich's-Antwort.
Informieren Sie sich über den Unterschied zwischen Pseudozufallsfunktionen (PRFs) und Pseudozufallspermutationen (PRPs).
Ich denke, Sie möchten nur Daten codieren / decodieren.Wenn Sie wirklich eine Art Indizierung benötigen, können Sie die Trie-Familie von Datenstrukturen für eine ähnliche Leistung wie Hashes verwenden.Jeder Zweig des Trie-Baums enthält so viele Elemente, und Ihr Gesamtpfad besteht aus einem Array von Indizes.fast wie eine URL `myTree / 23/4/240/12`.Erstellen Sie einfach ein Array aus jedem Index, codieren () diese Indizes, senden Sie das Array als json oder Ihr Lieblingsformat und decodieren () sie später.Wenn Sie alle Indizes unter 256 halten, können Sie einfach in / von ASCII oder UtF-8 konvertieren und anstelle eines Arrays eine Zeichenfolge verwenden, die auch verschlüsselt werden KÖNNTE
Sechs antworten:
Tom Leek
2014-07-13 21:50:10 UTC
view on stackexchange narkive permalink

Die Definition einer kryptografischen Hash-Funktion beinhaltet die Resistenz gegen Vorbilder: Bei h (x) sollte es unmöglich sein, x . Eine Hash-Funktion, die "reversibel" ist, ist das genaue Gegenteil dieser Eigenschaft. Daher können Sie nicht mehr eine "reversible Hash-Funktion" haben als einen Fisch, der gegen Wasser allergisch ist.


Möglicherweise möchten Sie eine Hash-Funktion, die für die meisten Menschen kryptografisch ist Hash-Funktion mit all ihren Eigenschaften, die aber auch eine Art Falltür enthält, die es ermöglicht, sie umzukehren, wenn Sie ein bestimmtes Geheimnis kennen. Diese Art von Dingen könnte existieren, erfordert jedoch Mathematik wie asymmetrische Kryptographie. Eine solche Konstruktion ist mir derzeit nicht bekannt, aber man könnte möglicherweise etwas basierend auf einem RSA-Modul oder einer elliptischen Kurve mit Koordinaten, die modulo einem RSA-Modul entnommen wurden, als Jury-Rig verwenden (ich habe aber kein genaues Design im Sinn, aber Ich habe die Intuition , dass es so gemacht werden kann).

Ich weiß, dass OP die Antwort bereits akzeptiert hat, aber ich habe die Frage so interpretiert, als ob OP nach einer nicht kryptografischen Hash-Funktion suchen würde.
Der Kontext hier, "security.stackexchange", ist Kriptographie ... Aber nehmen wir an, das ist nicht: ** Der Begriff "Hash-Funktion" schließt Kryptographie nicht aus **, er ist allgemein und "krytographische Hash-Funktion" ist nur aspezielle Unterklasse von * Hash-Funktion *.
Nicht gerade ein Hash, da er von variabler Größe wäre, sondern einfach eine Längencodierung (oder eine andere Komprimierung der Daten, z. B. zlib) und eine anschließende Xoring-Codierung gegen einen bekannten geheimen Pseudo-Zufallswert würde theoretisch einen reversiblen Hash ergeben.Es ist jedoch möglicherweise nicht viel kleiner als die Originaldaten
Damon
2014-07-14 19:54:03 UTC
view on stackexchange narkive permalink

Selbst ein nicht kryptografischer Hash kann normalerweise nicht rückgängig gemacht werden (unabhängig von anderen speziellen Eigenschaften kryptografischer Hashes wie Kollisions- / Vorbildbeständigkeit). Der Grund, warum dies normalerweise nicht möglich ist, ist, dass Sie einfach nicht genügend Informationen haben.

Eine Hash-Funktion wandelt (im Allgemeinen) N Eingabebits in M Ausgabebits, wobei M eine kleine Konstante ist und die meiste Zeit N > M wahr ist. Natürlich muss N nicht größer als M sein, es ist durchaus möglich, z. Ein SHA-Hash aus einem einzelnen Byte, aber normalerweise ist die Hash-Nachricht länger (oft viel länger) als der Hash-Wert.

Das bedeutet nicht mehr und nicht weniger als das, um den Hash umzukehren und die ursprüngliche Nachricht wiederherzustellen, müssten Sie Wahrsagungsmagie verwenden, um die fehlenden Informationen auszufüllen. Es gibt 2 NM sup> -Lösungen, und jede einzelne ist genauso korrekt wie jede andere.

Wenn Sie also beispielsweise eine 36-Byte-Zeichenfolge mit SHA hashen und versuchen Um dies umzukehren, gibt es 2 128 Lösungen, die alle gleichermaßen korrekt sind.
Wenn bekannt ist, dass die Eingabe bestimmte bekannte Eigenschaften aufweist (z. B. beginnend mit einer bekannten Sequenz, wie From: oder eine besonders niedrige Entropie) können Sie möglicherweise die meisten Lösungen ausschließen und schließlich einen plausiblen Klartext finden, vielleicht sogar den richtigen - aber das ist bei weitem nicht trivial, und Sie kann niemals beweisen, dass Sie die richtige haben, es sei denn, Sie haben es bereits vorher gewusst oder Sie haben eine andere Art der Überprüfung.

Dies sollte die akzeptierte Antwort sein. Hashing verliert Informationen, da der Hash immer die gleiche Anzahl von Informationsbits enthält - während Ihre Eingabe beliebig lang sein kann. Wenn es keine Informationen verliert, ist es per Definition kein Hashing.
Dies hängt von Ihrem Anwendungsfall ab. Sicher, wenn Sie N> M haben, dann gibt es viele N, die zu M hashen. Angenommen, Sie verwenden einen trivialen Hash, z. B. eine einfache Prüfsumme aller Bytes in N (oder etwas ausführlicher eine [CRC] (https://en.wikipedia.org/wiki/Cyclic_redundancy_check). Für eine Kennwortprüfung können Sie schnell ein N finden, das mit M hascht - es ist möglicherweise nicht das Kennwort, das der Benutzer eingegeben hat, aber es meldet sie trotzdem an. Für eine Unterschrift ähnlich.Bei einem bekannten N können Sie ein anderes herstellen, das ebenfalls mit M hascht, dessen Wert sich jedoch erheblich geändert hat.
@Rich: Das ist richtig, aber ein Preimage-Angriff und das Umkehren des Hash sind nicht dasselbe.Ein Preimage-Angriff findet _some_ Klartext, aber nicht den ursprünglichen (außer durch zufällige Chance, die Lotterie zu gewinnen).Die Frage betrifft nicht die Passwortsicherheit oder Preimage-Angriffe, sondern das Umkehren des Hashs, d. H. Das Wiederherstellen der ursprünglichen Informationen, und dies ist einfach nicht möglich (es sei denn, N <= M).Wenn es möglich wäre, könnten Sie ein Komprimierungsprogramm schreiben, das eine Datei jeder Größe auf 4 Bytes komprimiert (nun, das ist möglich, nur der Dekomprimierungsteil ist ... ähm, ein bisschen knifflig).
Rich
2017-04-11 10:05:50 UTC
view on stackexchange narkive permalink

Einige Hash-Algorithmen, wie z. B. CRCs (wie oben erwähnt), sind reversibel. Einen Ansatz hierzu finden Sie in diesem Dokument. (CRCs sind schnell zu berechnen und ideal, um Daten vor Korruption zu schützen, wenn keine Sicherheitsanforderungen bestehen.)

Das Design von kryptografisch sicheren Hashes soll sicherstellen, dass es keine solche Verknüpfung gibt und dass das Finden einer Hash-Übereinstimmung erforderlich ist eine vollständige Suche im Schlüsselraum.

Reversible Hash-Funktionen liegen zwar weitgehend außerhalb des Informationssicherheitskontexts (daher die Hauptantworten), sie existieren jedoch: siehe https://stackoverflow.com/questions/4273466/reversible-hash-function
Scott Duffy
2016-10-28 19:16:34 UTC
view on stackexchange narkive permalink

Vielleicht suchen Sie nach etwas wie PKI, bei dem eine Zeichenfolge an einem Ende mit einem öffentlichen Schlüssel und am anderen Ende mit einem privaten Schlüssel entschlüsselt werden kann. Offensichtlich kein Hash, aber eine Möglichkeit, eine Zeichenfolge zu verschlüsseln / zu entschlüsseln, um ein Geheimnis weiterzugeben.

jchook
2019-04-05 06:11:42 UTC
view on stackexchange narkive permalink

Sie können sich Knuths multiplikativen Hash ansehen, der eine reversible, zufällige Zuordnung zwischen Ganzzahlen innerhalb der Grenzen der Hash-Tabelle generiert.

Zum Beispiel Optimus implementiert Knuths Algorithmus in PHP, um sequentielle IDs zu verschleiern. Verwenden Sie diesen Algorithmus jedoch nicht aus Sicherheitsgründen .

Sie können ihn ausführlich in seinem Buch Art of Computer Programming, Vol. 3, No. 3 insbesondere ab Seite 513.

ThoriumBR
2019-04-08 18:33:28 UTC
view on stackexchange narkive permalink

ELI5: Was ist ein Hash?

Stellen Sie sich vor, Sie haben Probleme, Dinge in Ihren Schrank zu stellen, und erstellen ein System, das definiert, in welche Schublade Sie je nach Barcode alles legen. Sie haben 7 Schubladen, scannen also den Barcode auf Ihrem Telefon und erfahren, wo Sie ihn abgelegt haben, 1 bis 7.

Stellen Sie sich vor, Sie erhalten jetzt Ihre Einkaufsliste mit 30 Artikeln, nachdem Sie alles gespeichert haben und was um zu wissen, was sich in Schublade 3 befindet, ohne die Schublade zu öffnen. Was tust du? Sie durchlaufen jedes Element auf Ihrer Liste, setzen Ihr Programm ein und schreiben alle Elemente auf, die sich in Schublade 3 befinden. Einfach.

Stellen Sie sich nun vor, Ihre Liste enthält etwas zwischen beispielsweise 10 30 sup> bis 10 9000 sup> Artikel, und Ihr Schrank hat 2 160 sup> Artikel. Wie können Sie wissen, was sich in jeder Schublade befindet, ohne die Schubladen zu öffnen? Sie führen einen Bruteforce-Angriff durch: Testen Sie jeden einzelnen Code immer wieder, bis Sie einen Code erhalten, der in die Schublade 3 passt. Die Leute sagen, dass sie einen Hash umkehren , auch wenn ein Hash niemals rückgängig gemacht werden kann. Sie können es nur erneut ausführen, bis Sie das gleiche Ergebnis erhalten.

Eine Hash-Funktion kann per Definition niemals rückgängig gemacht werden. Wenn Sie können, ist es kein Hash. Es handelt sich um eine Codierung oder Verschlüsselung.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...