Ist es möglich, MD5-Hashes zu entschlüsseln?


260

Jemand hat mir erzählt, dass er Softwaresysteme gesehen hat, die:

  1. MD5-verschlüsselte Passwörter von anderen Systemen abrufen;
  2. entschlüsseln Sie die verschlüsselten Passwörter und
  3. Speichern Sie die Kennwörter in der Datenbank des Systems mit dem systemeigenen Algorithmus.

Ist das möglich? Ich dachte, dass es nicht möglich / machbar ist, MD5-Hashes zu entschlüsseln.

Ich weiß, dass es MD5-Wörterbücher gibt, aber gibt es einen tatsächlichen Entschlüsselungsalgorithmus?


7
Das Zurücksetzen des MD5 würde auch mehrere Passwörter ergeben.
Carles Company

230
MD5 ist ein Digest-Algorithmus. Stellen Sie sich vor, Sie verwandeln eine Kuh in ein Steak. Versuchen Sie nun, das umzukehren.
Mechanische Schnecke

5
@Arst von dem, was ich verstehe, ja, aber nur, wenn Sie viele davon hatten. Und selbst wenn Sie dies tun würden, könnten Sie nicht rückwärts gehen, da der Algorithmus absichtlich Informationen verliert.
Jordanien

8
@mechanicalsnail Angesichts dieser Analogie könnte man aus der DNA auf dem Steak einen vollkommen perfekten Klon machen. :))
Trimikha Valentius

8
@TrimikhaValentius MD5 ist ein Verdauungsalgorithmus. Betrachten Sie es als Steak essen> Verdauung> Ausgabe. Versuchen Sie nun, das umzukehren.
user4157124

Antworten:


424

Nein. MD5 ist keine Verschlüsselung (obwohl es als Teil einiger Verschlüsselungsalgorithmen verwendet werden kann), sondern eine Einweg- Hash-Funktion . Ein Großteil der Originaldaten geht im Rahmen der Transformation tatsächlich "verloren".

Denken Sie darüber nach: Ein MD5 ist immer 128 Bit lang. Das bedeutet, dass es 2 128 mögliche MD5-Hashes gibt. Das ist eine ziemlich große Zahl, und doch ist sie definitiv endlich. Und doch gibt es unendlich viele mögliche Eingaben für eine bestimmte Hash-Funktion (und die meisten von ihnen enthalten mehr als 128 Bit oder nur 16 Bytes). Es gibt also tatsächlich unendlich viele Möglichkeiten für Daten, die denselben Wert haben würden. Das, was Hashes interessant macht, ist, dass es unglaublich schwierig ist, zwei Daten zu finden, die den gleichen Wert haben, und die Wahrscheinlichkeit, dass es versehentlich passiert, ist fast 0.

Ein einfaches Beispiel für eine (sehr unsichere) Hash-Funktion (und dies veranschaulicht die allgemeine Idee, dass es sich um eine Einwegfunktion handelt) wäre, alle Bits eines Datenelements zu nehmen und als große Zahl zu behandeln. Führen Sie als nächstes eine Ganzzahldivision mit einer großen (wahrscheinlich Primzahl) n durch und nehmen Sie den Rest (siehe: Modul ). Sie erhalten eine Zahl zwischen 0 und n . Wenn Sie dieselbe Berechnung erneut ausführen (jederzeit, auf jedem Computer und überall) und dabei genau dieselbe Zeichenfolge verwenden, wird derselbe Wert angezeigt. Und doch gibt es keine Möglichkeit herauszufinden, was der ursprüngliche Wert war, da es unendlich viele Zahlen gibt, die genau diesen Rest haben, wenn sie durch n geteilt werden .

Es wurde jedoch festgestellt, dass MD5 einige Schwächen aufweist, so dass es mit einer komplexen Mathematik möglich sein kann, eine Kollision zu finden, ohne 2 128 mögliche Eingabezeichenfolgen auszuprobieren. Und die Tatsache, dass die meisten Passwörter kurz sind und häufig gemeinsame Werte verwendet werden (wie "Passwort" oder "geheim"), bedeutet, dass Sie in einigen Fällen das Passwort einer Person einigermaßen gut erraten können, indem Sie nach dem Hash googeln oder einen Regenbogen verwenden Tabelle . Dies ist ein Grund, warum Sie Hash-Passwörter immer " salzen " sollten , damit zwei identische Werte beim Hash nicht auf denselben Wert hashen.

Sobald ein Datenelement eine Hash-Funktion durchlaufen hat, gibt es kein Zurück mehr.


22
Es gibt jedoch mehr Kollisionen als ursprünglich angenommen im MD5-Hash-Bereich. Es wird nicht mehr als optimaler Hash für Passwörter angesehen.
Cheeso

12
Da die meisten Passwörter kürzer als der MD5-Hash sind, gibt es normalerweise nur ein Passwort für jeden Hash. (Und eines zu finden, auch wenn es nicht das Original ist, reicht aus, um auf das Konto zuzugreifen.) Der Punkt der Einwegfunktion besteht nicht darin, dass es mehrere verschiedene Vorbilder gibt, sodass wir nicht wissen können, welches das Original war , aber es ist wirklich schwer, auch nur einen ursprünglichen Wert zu finden .
Paŭlo Ebermann

2
@ Nick: Eigentlich sagt RFC1321 explizit: "Der Algorithmus nimmt als Eingabe eine Nachricht beliebiger Länge"
Adam Batkin

6
@ Olathe - Ich bin nicht sicher, ob ich damit einverstanden bin. Bei einem Hash ist es im Allgemeinen unmöglich, die ursprüngliche Eingabe (mit 100% iger Sicherheit) zu bestimmen. Es gibt (normalerweise) unendlich viele Eingaben, die jede mögliche (gehashte) Ausgabe erzeugen. Ich sagte allgemein, weil, wenn Sie (zum Beispiel) wissen, dass Sie nach einer Zeichenfolge von ASCII-Zeichen suchen und diese weniger als beispielsweise 12 Bytes beträgt, es wahrscheinlich nur eine Eingabe gibt, die eine bestimmte Ausgabe erzeugt. Aber es wird immer Kollisionen geben (unendlich), und wenn Sie keine externen Einschränkungen haben (wie in meinem Beispiel), werden Sie nie wissen, welche richtig sind
Adam Batkin

2
@ Adam Batkin, du hast recht, aber ich meine nicht 100% ige Sicherheit. Das Brechen von Chiffren kann nicht mit 100% iger Sicherheit durchgeführt werden. Der Absender meinte möglicherweise eher zufälligen Kauderwelsch als englischen Klartext mit demselben Schlüssel, der andere englische Klartexte entschlüsselt, aber die Wahrscheinlichkeit des Englischen liegt sehr nahe bei 100%. In ähnlicher Weise liegt die Wahrscheinlichkeit des Gedichts nahe 100%, wenn Sie zwischen einem langen japanischen UTF-8-Gedichtkennwort und Kauderwelsch-Zeichenfolgen wählen. Dies kann unter Verwendung von nachträglichen Wahrscheinlichkeiten anstelle von vorgewählten Einschränkungen erfolgen. Es kann natürlich im Allgemeinen nicht gemacht werden, aber es ist immer noch sehr nützlich.
Olathe

154

Sie können nicht - theoretisch. Der springende Punkt bei einem Hash ist, dass es nur eine Möglichkeit ist. Dies bedeutet, dass jemand, der die Liste der Hashes erhält, Ihr Passwort immer noch nicht erhalten kann. Darüber hinaus bedeutet dies, dass selbst wenn jemand auf mehreren Websites dasselbe Kennwort verwendet (ja, wir alle wissen, dass wir dies nicht tun sollten, aber ...), jeder mit Zugriff auf die Datenbank von Standort A das Kennwort des Benutzers nicht verwenden kann Seite B.

Die Tatsache, dass MD5 ein Hash ist, bedeutet auch, dass Informationen verloren gehen. Wenn Sie für einen bestimmten MD5-Hash Kennwörter beliebiger Länge zulassen, kann es mehrere Kennwörter geben, die denselben Hash erzeugen. Für einen guten Hash wäre es rechnerisch unmöglich, sie über eine ziemlich triviale maximale Länge hinaus zu finden, aber es gibt keine Garantie dafür, dass es definitiv das ursprüngliche Passwort ist, wenn Sie ein Passwort finden, das den Ziel-Hash enthält. Es ist astronomisch unwahrscheinlich, dass Sie zwei ASCII-Passwörter mit angemessener Länge sehen, die denselben MD5-Hash haben, aber es ist nicht unmöglich.

MD5 ist ein schlechter Hash für Passwörter:

  • Es ist schnell, was bedeutet, wenn Sie einen "Ziel" -Hash haben, ist es billig, viele Passwörter auszuprobieren und zu sehen, ob Sie eines finden können, das zu diesem Ziel hasht. Salting hilft in diesem Szenario nicht, aber es hilft, es teurer zu machen, ein Passwort zu finden, das mit einem von mehreren Hashes unter Verwendung verschiedener Salze übereinstimmt .
  • Ich glaube, es sind Fehler bekannt, die das Auffinden von Kollisionen erleichtern, obwohl das Auffinden von Kollisionen in druckbarem Text (anstelle von willkürlichen Binärdaten) zumindest schwieriger wäre.

Ich bin kein Sicherheitsexperte und werde daher keine konkrete Empfehlung über "Rollen Sie nicht Ihr eigenes Authentifizierungssystem" abgeben. Finden Sie einen von einem seriösen Lieferanten und nutzen Sie diesen. Sowohl das Design als auch die Implementierung von Sicherheitssystemen ist ein heikles Geschäft.


2
Ja, es gibt andere Methoden, aber Sie müssen verstehen, was Jon oben gesagt hat - "Sie sollten ihnen nicht ihr Passwort per E-Mail senden - das sind vertrauliche Informationen, die möglicherweise vertraulich bleiben." - Auf der untersten Ebene können E-Mails abgefangen und vertrauliche Informationen abgerufen werden. Ein Passwort sollte so sicher wie möglich bleiben - normalerweise, indem es nur als Hash in einer Datenbank gespeichert wird.
Daniel Mai

3
Und auch die Tatsache, dass, wenn das Passwort umgekehrt werden kann, jeder, der Zugriff auf Ihre Datenbank erhält, auf die Passwörter der Benutzer zugreifen kann. Keine gute Idee. Einwegpasswörter sollten die Norm sein; Behalten Sie das echte Passwort (auch verschlüsselt) nur bei, wenn Sie es unbedingt müssen (z. B. um sich bei einem anderen System zu authentifizieren, das nichts tokenbasiertes hat).
Jon Skeet

1
Ich habe Antispam-Maßnahmen gesehen, bei denen der Empfänger-Webserver eine eingehende E-Mail ablehnt, nur um darauf zu warten, dass der Mailserver des Absenders es erneut versucht (Spambots versuchen es normalerweise nur einmal). Das könnte Ihre 10-minütige Zeitüberschreitung leicht überschreiten.
Schwester

1
@ravisoni: Das ist ein Wert, der den gleichen Hash hat, vermutlich über Brute Force oder Nachschlagetabellen. Es gibt keine Garantie dafür, dass es sich um den ursprünglichen Klartextwert handelt.
Jon Skeet

5
@ravisoni: Was meinst du hier mit "richtig"? Wenn das Passwort unbekannt ist, können Sie nicht wissen, ob das offenbarte das Original ist oder nicht. Der Punkt ist jedoch, dass Einweg-Hashes wie MD5 per Definition Informationen verlieren. Die Tatsache, dass Websites wie diese ein passendes Kennwort erhalten können, ist nur ein guter Beweis dafür, dass MD5 aus Sicherheitsgründen ein schlechter Algorithmus ist.
Jon Skeet

52

Technisch ist es "möglich" , aber unter sehr strengen Bedingungen ( Regenbogentabellen , Brute Forcing basierend auf der sehr geringen Wahrscheinlichkeit, dass sich das Passwort eines Benutzers in dieser Hash-Datenbank befindet).

Das heißt aber nicht, dass es so ist

  • Lebensfähig
    oder
  • Sichern

Sie möchten einen MD5- Hash nicht "umkehren" . Mit den unten beschriebenen Methoden müssen Sie dies nie tun. Das "Umkehren" von MD5 wird tatsächlich als bösartig angesehen - einige Websites bieten die Möglichkeit, MD5-Hashes zu "knacken" und zu bruteforce -, aber es handelt sich lediglich um umfangreiche Datenbanken, die Wörterbuchwörter, zuvor übermittelte Kennwörter und andere Wörter enthalten. Es besteht eine sehr geringe Wahrscheinlichkeit, dass der von Ihnen benötigte MD5-Hash umgekehrt wird. Und wenn Sie den MD5-Hash gesalzen haben, funktioniert dies auch nicht! :) :)


Anmeldungen mit MD5-Hashing sollten folgendermaßen funktionieren:

Während der Registrierung:
Benutzer erstellt Kennwort -> Kennwort wird mit MD5 gehasht -> In der Datenbank gespeicherter Hash

Während der Anmeldung:
Benutzer gibt Benutzername und Passwort ein -> (Benutzername überprüft) Passwort wird mit MD5 gehasht -> Hash wird mit gespeichertem Hash in der Datenbank verglichen

Wenn 'Passwort verloren' benötigt wird:

2 Optionen:

  • Der Benutzer hat ein zufälliges Passwort gesendet, um sich anzumelden, und ist dann beim ersten Anmelden fehlerhaft, um es zu ändern.

oder

  • Dem Benutzer wird ein Link zum Ändern seines Kennworts gesendet (mit zusätzlicher Überprüfung, ob Sie eine Sicherheitsfrage / usw. haben). Anschließend wird das neue Kennwort gehasht und durch das alte Kennwort in der Datenbank ersetzt

1
Ich habe ein paar Trottel. Regenbogentische sind kein brutales Forcen. Es gibt tatsächlich Programme und Websites, die (sehr einfache) Brute-Force-Passwörter mit wenigen Zeichen ausführen (im Allgemeinen werden sie nur über einige Stunden oder Tage wiederholt, und Sie können einen Hash ausfüllen und hoffen, dass er in der Schleife auftaucht). Und leider ist angesichts der mangelnden Qualität vieler Passwörter die Wahrscheinlichkeit, dass eines auftaucht, keine "sehr kleine Chance".
Maarten Bodewes

32

Nicht direkt. Aufgrund des Pigeonhole-Prinzips gibt es (wahrscheinlich) mehr als einen Wert, der mit einer bestimmten MD5-Ausgabe übereinstimmt. Daher können Sie es nicht mit Sicherheit umkehren. Darüber hinaus ist MD5 so konzipiert, dass es schwierig ist, einen solchen umgekehrten Hash zu finden (es gab jedoch Angriffe, die Kollisionen hervorrufen - das heißt, es werden zwei Werte erzeugt, die zum gleichen Ergebnis führen, aber Sie können nicht steuern, wie der resultierende MD5-Wert aussehen wird Sein).

Wenn Sie den Suchbereich jedoch beispielsweise auf häufig verwendete Kennwörter mit einer Länge unter N beschränken, verfügen Sie möglicherweise nicht mehr über die Irreversibilitätseigenschaft (da die Anzahl der MD5-Ausgaben viel größer ist als die Anzahl der Zeichenfolgen in der interessierenden Domäne). Dann können Sie einen Regenbogentisch oder ähnliches verwenden, um Hashes umzukehren.


1
Ich würde hinzufügen, dass das Finden eines anderen Werts, der auf dieselbe Ausgabe hascht, als "Kollision" bezeichnet wird. Dies ist die häufigste Methode zum Aufbrechen von MD5-Hash-Systemen.
Nicole

5
@Renesis: Das Auffinden von Daten, die auf einen zuvor bekannten Wert gehasht werden, wird als "Vorbild" bezeichnet und ist viel, viel schwieriger als nur eine Kollision. Es wurde noch kein Vorbildangriff gegen MD5 demonstriert, es wurden jedoch Kollisionsangriffe verwendet.
Bdonlan

Der Sinn von Hash-Funktionen (wenn sie zum Speichern von Passwörtern verwendet werden) ist nicht, dass es viele mögliche Passwörter gibt, die denselben Hash geben (es gibt, aber die meisten sind länger als der Hash selbst), sondern dass es selbst schwer zu finden ist einer von ihnen (was ausreichen würde, um auf das System zuzugreifen). Und ja, wegen der Regenbogentabellen verwenden Sie keine ungesalzenen Hashes. Und wegen des kleinen Passwortraums verwenden Sie einen langsamen Hash (wie bcrypt oder scrypt) anstelle eines schnellen (wie MD5 / SHA - * / ....)
Paŭlo Ebermann

1
Aus technischen Gründen können Sie MD5 nicht mit Sicherheit ausführen, da die Hardware möglicherweise fehlerhaft funktioniert hat. Auf die gleiche Weise können Sie möglicherweise nicht sicher sein, dass das Kennwort passwordeher als alle anderen unendlichen Eingaben verwendet wurde, die denselben Hash erzeugen, aber alle ziemlich zufällig aussehen, aber Sie können nah genug dran sein.
Olathe

Das Pigeonhole-Prinzip gilt natürlich, aber es ist immer noch rechnerisch nicht möglich , eine zweite Eingabe zu finden, die auf einen bestimmten Wert hasht , z. B. einen Hash über einem normalen Passwort. Wenn Sie ein X finden, das mit einem bestimmten H (X) hasht, können Sie sicher sein, dass X die richtige Eingabe ist. Dies macht den gesamten ersten Abschnitt dieser Antwort und den größten Teil des Restes falsch.
Maarten Bodewes

13

Nicht möglich, zumindest nicht in angemessener Zeit.

Die Art und Weise, wie dies häufig gehandhabt wird, ist ein Passwort "Zurücksetzen". Das heißt, Sie geben ihnen ein neues (zufälliges) Passwort und senden ihnen dieses per E-Mail.


5
Wenn der Hash nicht gesalzen wäre, wären Sie überrascht, wie oft nur eine Google-Suche nach dem Hash-Wert erforderlich ist ...
Michael Borgwardt

1
Nicht wirklich praktisch für ein Passwortabrufsystem, auch für ein ungesalzenes :)
Matthew Groves

12

Sie können ein MD5-Passwort nicht zurücksetzen (in einer beliebigen Sprache).

Doch kannst du:

Geben Sie dem Benutzer eine neue.

Checken Sie eine Regenbogentabelle ein, um vielleicht die alte zu finden.


1
Nix die Idee des Regenbogentischs. Wenn Sie salzen - und Sie sollten es sein - dann würde es sowieso nicht funktionieren.
Steven Sudit

1
@StevenSudit Wenn sie immer noch MD5 zum Hashing von Passwörtern verwenden, anstatt einen starken Passwort-Hash zu verwenden, können Sie nicht davon ausgehen, dass sie ein Salt verwenden. Vielleicht tun sie es, wahrscheinlich nicht.
Maarten Bodewes

10

Nein, er muss über die MD5-Wörterbücher verwirrt gewesen sein.

Kryptografische Hashes (MD5 usw.) sind eine Möglichkeit, und Sie können nur mit dem Digest zur ursprünglichen Nachricht zurückkehren, es sei denn, Sie haben andere Informationen über die ursprüngliche Nachricht usw., die Sie nicht sollten.


8

Entschlüsselung (direktes Abrufen des Klartextes aus dem Hash-Wert auf algorithmische Weise), Nr.

Es gibt jedoch Methoden, die einen sogenannten Regenbogentisch verwenden . Es ist ziemlich machbar, wenn Ihre Passwörter ohne Salz gehasht werden.


7

MD5 ist ein Hashing-Algorithmus. Sie können den Hash-Wert nicht zurücksetzen.

Sie sollten die Funktion "Kennwort ändern" hinzufügen, bei der der Benutzer ein anderes Kennwort angibt, den Hash berechnet und als neues Kennwort speichert.


7

Es gibt keine einfache Möglichkeit, dies zu tun. Dies ist eine Art Punkt, an dem das Passwort in erster Linie gehasht wird. :) :)

Eine Sache , die Sie sollen tun können, wird ein temporäres Passwort für sie manuell und sende sie das.

Ich zögere, dies zu erwähnen, da es eine schlechte Idee ist (und es garantiert sowieso nicht funktioniert), aber Sie könnten versuchen, den Hash in einer Regenbogentabelle wie milw0rm nachzuschlagen, um zu sehen, ob Sie das alte Passwort auf diese Weise wiederherstellen können.


6

Sehen Sie hier alle anderen Antworten darüber, wie und warum es nicht umkehrbar ist und warum Sie es sowieso nicht möchten.

Der Vollständigkeit halber gibt es jedoch Regenbogentabellen, auf denen Sie mögliche Übereinstimmungen nachschlagen können. Es gibt keine Garantie dafür, dass die Antwort in der Regenbogentabelle das von Ihrem Benutzer gewählte Originalkennwort ist, was sie stark verwirren würde.

Dies funktioniert auch nicht für gesalzene Hashes. Das Salzen wird von vielen Sicherheitsexperten empfohlen.


Falsch . Wenn eine Übereinstimmung gefunden wird, ist es sicher, dass es sich um das ursprüngliche Passwort handelt. Wenn dies nicht der Fall wäre, wäre es möglich, Kollisionen bei jedem H (X) zu erzeugen, wobei X eine Nachricht ohne eine vom Gegner bestimmte vordefinierte Struktur ist. Es ist rechnerisch nicht möglich, eine solche Kollision für eine kryptografisch sichere Hash-Funktion zu finden, selbst wenn es sich um eine fehlerhafte Hash-Funktion wie MD5 handelt.
Maarten Bodewes

@ MaartenBodewes: "Wenn eine Übereinstimmung gefunden wird, ist es sicher, dass es sich um das ursprüngliche Passwort handelt." Ich kann nicht sehen, wie das der Fall ist, wenn wir eine unbegrenzte Länge von Passwörtern annehmen. Ich würde sagen , es ist sehr wahrscheinlich , das Original - Passwort sein, aber es nicht haben zu sein. Die Tatsache, dass es mehr mögliche Passwörter als MD5-Hashes gibt, bedeutet, dass es möglich sein muss , dass zwei Passwörter mit demselben Hash vorhanden sind. Nur weil es rechnerisch unmöglich ist, solche Kollisionen zu finden , heißt das nicht, dass sie nicht existieren. Oder habe ich dich missverstanden?
Jon Skeet

@JonSkeet Wenn es rechnerisch unmöglich ist , eine Kollision zu finden absichtlich dann einen zu finden , durch Zufall ist ebenso unwahrscheinlich , oder noch schlimmer. Aufgrund des begrenzten Ausgabespeichers von MD5 und des Geburtstagsproblems beträgt die Wahrscheinlichkeit, dass Sie eine Kollision finden, ungefähr 1 zu 2 ^ 64 (dh ungefähr die Hälfte des Ausgabespeichers) - und das nach dem Abgleichen von ungefähr 2 ^ 64 Hashes. Dabei wird nicht einmal berücksichtigt, dass die Nachricht wahrscheinlich klein sein und ein bestimmtes Format haben muss, um als Kennwort zu gelten. Die meisten Passwörter haben eine Entropie deutlich unter 2 ^ 64 Bit.
Maarten Bodewes

1
@ MaartenBodewes: Aber es gibt einen großen Unterschied zwischen "astronomisch unwahrscheinlich" und "unmöglich". Ihre Aussage, dass es sicher ist, dass es das richtige Passwort ist, ist zu stark, IMO. Das deutet auf eine mathematische Gewissheit hin, die nicht vorhanden ist.
Jon Skeet

Sie können auch einen 2 ^ 128-Bit-AES-Schlüssel auf einmal erraten. Es ist "nur" äußerst unwahrscheinlich. Die Kryptographie beruht auf solchen Chancen. Wenn Sie eine Eingabenachricht / ein Passwort finden, ist dies für alle praktischen Zwecke diejenige, nach der Sie gesucht haben. Dass es theoretisch möglich ist , eine andere Eingabenachricht zu finden, ist schön, aber für diese Frage in StackOverflow besteht keine Notwendigkeit, sie zu berücksichtigen. Und Regenbogentabellen werden nur mit möglichen Passwörtern gefüllt. Sie werden dort nicht genügend Daten enthalten, um überhaupt die Möglichkeit einer Kollision zu haben (sie würden entweder das Mapping unwissentlich überschreiben oder berühmt werden).
Maarten Bodewes

4

Es gibt keine Möglichkeit, eine Hash-Funktion "zurückzusetzen", um die Umkehrfunktion für sie zu finden. Wie bereits erwähnt, ist dies der springende Punkt bei einer Hash-Funktion. Es sollte nicht reversibel sein und eine schnelle Berechnung des Hashwerts ermöglichen. Die einzige Möglichkeit, eine Eingabezeichenfolge zu finden, die einen bestimmten Hashwert ergibt, besteht darin, alle möglichen Kombinationen auszuprobieren. Dies wird aus diesem Grund als Brute-Force-Angriff bezeichnet.

Das Ausprobieren aller möglichen Kombinationen nimmt viel Zeit in Anspruch, und dies ist auch der Grund, warum Hash-Werte verwendet werden, um Passwörter auf relativ sichere Weise zu speichern. Wenn ein Angreifer mit allen darin enthaltenen Benutzerkennwörtern auf Ihre Datenbank zugreifen kann, verlieren Sie auf jeden Fall. Wenn Sie Hash-Werte und (idealistisch gesehen) sichere Passwörter haben, ist es viel schwieriger, die Passwörter aus den Hash-Werten für den Angreifer herauszuholen.

Das Speichern der Hash-Werte ist ebenfalls kein Leistungsproblem, da die Berechnung des Hash-Werts relativ schnell ist. Die meisten Systeme berechnen also den Hash-Wert des Kennworts, das der Benutzer eingegeben hat (was schnell ist), und vergleichen ihn dann mit dem gespeicherten Hash-Wert in seiner Benutzerdatenbank.


An dieser Antwort ist nicht viel auszusetzen, außer dass die Geschwindigkeit der Hash-Funktion ein großes Problem darstellt, da die meisten Passwörter nicht sicher genug sind und es einem Gegner ermöglichen, einen Wörterbuchangriff durchzuführen. Aus diesem Grund werden langsame Passwort-Hash-Funktionen anstelle schneller kryptografisch sicherer Hash-Funktionen verwendet.
Maarten Bodewes

3

MD5 wird als fehlerhaft angesehen, nicht weil Sie den ursprünglichen Inhalt aus dem Hash zurückholen können, sondern weil Sie mit der Arbeit zwei Nachrichten erstellen können, die denselben Hash haben.

Sie können einen MD5-Hash nicht entfernen.


3
Alle gleich langen Hashes leiden konstruktionsbedingt unter Kollisionen. Dies ist unvermeidlich, wenn Daten mit variabler Länge eingeschränkt werden. MD5 gilt aufgrund seiner Kollisionsrate als veraltet, nicht aufgrund der Kollisionsrate.
Jonathan Lonowski

MD5 wird aufgrund der nachgewiesenen Möglichkeit, kollidierende Eingaben zu konstruieren, als fehlerhaft angesehen.
Ned Batchelder

3

Sie können Online-Tools finden, die ein Wörterbuch verwenden, um die ursprüngliche Nachricht abzurufen.

In einigen Fällen ist die Wörterbuchmethode möglicherweise unbrauchbar:

  • wenn die Nachricht mit einer SALT-Nachricht gehasht wird
  • wenn die Nachricht mehr als einmal Hash ist

Hier ist zum Beispiel ein Online-Tool für MD5-Entschlüsseler .


Regenbogentabellen - keine Wörterbuchangriffe - sind nutzlos, wenn ein Salz verwendet wird. Mehrmals Hashing - ohne Salz - ermöglicht immer noch Regenbogentabellen, obwohl es sicherlich weniger wahrscheinlich ist , eine bereits vorhandene online zu finden.
Maarten Bodewes

2

Das Einzige, was funktionieren kann, ist (wenn wir erwähnen, dass die Passwörter nur gehasht sind, ohne Salz hinzuzufügen, um die Wiederholungsangriffe zu verhindern, wenn es so ist, dass Sie das Salz kennen müssen), erhalten Sie übrigens ein Wörterbuch-Angriffstool Die Dateien mit vielen Wörtern, Zahlen usw. erstellen dann zwei Zeilen, eine Zeile ist ein Wort, eine Zahl (im Wörterbuch), die andere ist ein Hash des Wortes, und vergleichen Sie die Hashes, wenn Sie übereinstimmen ...

Das ist der einzige Weg, ohne in die Kryptoanalyse einzusteigen.


2

Ja, genau das, wonach Sie fragen, ist möglich. Es ist nicht möglich, ein MD5-Passwort ohne Hilfe zu "entschlüsseln", aber es ist möglich, ein MD5-Passwort erneut in einen anderen Algorithmus zu verschlüsseln, nur nicht alle auf einmal.

Sie sorgen dafür, dass sich Ihre Benutzer mit dem alten MD5-Kennwort bei Ihrem neuen System anmelden können. Zum Zeitpunkt der Anmeldung haben sie Ihrem Anmeldeprogramm eine nicht verwaschene Version des Kennworts gegeben, von dem Sie nachweisen, dass es mit Ihrem MD5-Hash übereinstimmt. Sie können dieses nicht verwaschene Kennwort dann in Ihren neuen Hashing-Algorithmus konvertieren.

Dies ist natürlich ein erweiterter Prozess, da Sie warten müssen, bis Ihre Benutzer Ihnen die Kennwörter mitteilen, aber es funktioniert.

(NB: sieben Jahre später, na ja, hoffentlich findet es jemand nützlich)


Danke für die Antwort. Allerdings werde ich dich "1 up" machen :) Ich kann mich nicht erinnern, ob ich das tatsächlich getan habe, aber theoretisch sollte es funktionieren. Anstatt darauf zu warten, dass sich jeder einzelne Benutzer anmeldet, damit wir sein Passwort erneut verschlüsseln können, können Sie einfach die Hash-Version seines Passworts verschlüsseln. Jedes Passwort wird also mit MD5 gehasht und dann verschlüsselt. Aktualisieren Sie einfach die Kennwortprüfung, um dasselbe zu tun, und die Benutzerdaten sollten sicher sein, ohne dass ein Benutzereingriff erforderlich ist.
John Bubriski

Noch eine Einschränkung zu meinem obigen Kommentar. Ich bin kein Experte für Verschlüsselung, daher bin ich mir nicht sicher, ob dies weitere Auswirkungen auf die Sicherheit hat. Zum Beispiel könnte das Verschlüsseln schwacher Passwörter, die vor dem Verschlüsseln schwach gehasht wurden, möglicherweise die Sicherheit der Verschlüsselung gefährden (möglicherweise auch ein anderes Salt verwenden?). Möglicherweise sind auch Backups mit diesen MD5-Hash-Passwörtern im Umlauf. Wahrscheinlich ist es besser, bei dieser Art von Upgrade eine vollständige Ungültigmachung aller vorhandenen Kennwörter durchzuführen.
John Bubriski

Kryptografen sorgen sich um doppelte Verschlüsselung, aber ich denke, sie haben nur triviale Fälle gefunden, in denen es ein Problem ist. Aber ich denke nicht, dass es in diesem Fall nützlich ist, da MD5 immer noch für (nicht zu lange, Text-) Passwörter sicher ist. Trotzdem könnte doppeltes Hashing nützlich sein, wenn der vorherige Entwickler vergessen hat, Salz hinzuzufügen. Andernfalls kann ich mir keinen Fall vorstellen, in dem Sie nicht jedem sagen müssten, dass die Passwörter als pwned angesehen werden sollten. Hoffentlich gehen Ihre Backups nicht verloren und werden trotzdem verschlüsselt.
user3710044

1

Nein, das geht nicht. Entweder können Sie ein Wörterbuch verwenden oder Sie können versuchen, verschiedene Werte zu hashen, bis Sie den gewünschten Hash erhalten. Es kann aber nicht "entschlüsselt" werden.


Ich habe diese Website gesehen, die den MD5 in den Originaltext umkehrt: md5.gromweb.com . Wie ist es dann möglich?
Samach

2
@ samach321 - Einfach: Sie haben eine Datenbank mit Hash-Strings. Was auch immer Sie in das Feld "Konvertieren einer Zeichenfolge in einen MD5-Hash" eingeben, wird der Datenbank hinzugefügt. Versuchen Sie, einen MD5-Hash von einer anderen Quelle zu erhalten, und geben Sie diesen ein. Wenn es sich nicht um etwas in ihrer Datenbank handelt, erhalten Sie kein Ergebnis.
Vilx

1

MD5 hat seine Schwächen (siehe Wikipedia ), daher gibt es einige Projekte, die versuchen, Hashes vorab zu berechnen. Wikipedia weist auch auf einige dieser Projekte hin. Eine, die ich kenne (und respektiere), ist Ophrack. Sie können dem Benutzer kein eigenes Passwort mitteilen, aber Sie können ihm möglicherweise ein funktionierendes Passwort mitteilen. Aber ich denke: Mailen Sie einfach ein neues Passwort, falls sie es vergessen haben.


Die Tatsache, dass MD5 defekt ist (für bestimmte, aber wichtige Verwendungen der Funktion), hat absolut nichts mit Regenbogentabellen zu tun (worauf Sie hinweisen, wenn Sie die Vorberechnung von Hashes erwähnen).
Maarten Bodewes

1

Der MD5-Hash-Algorithmus ist nicht umkehrbar, sodass eine MD5-Dekodierung nicht möglich ist. Einige Websites verfügen jedoch über eine große Anzahl von Kennwortübereinstimmungen, sodass Sie online versuchen können, MD5-Hash zu dekodieren.

Versuchen Sie es online:

MD5 entschlüsseln

md5online

md5decrypter


Ja, aber dies wird bereits von der Frage wie im Satz "Ich weiß, dass es Wörterbücher gibt" abgedeckt. Nur auf die Wörterbücher hinzuweisen, zählt daher nicht als Antwort.
Maarten Bodewes

1

Theoretisch ist es nicht möglich, einen Hashwert zu entschlüsseln, aber Sie haben einige schmutzige Techniken, um den ursprünglichen Klartext zurückzubekommen.

  1. Bruteforcing : Alle Computersicherheitsalgorithmen leiden unter Bruteforcing . Basierend auf dieser Idee verwendet die heutige GPU die Idee der parallelen Programmierung, mit der sie den Klartext zurückerhalten kann, indem sie ihn mit einem beliebigen Grafikprozessor massiv brutal erzwingt. Dieses Tool Hashcat erledigt diesen Job. Als ich das letzte Mal die Cuda- Version überprüft habe, konnte ich innerhalb von sechs Minuten einen 7 Buchstaben langen Charakter brutal erzwingen .
  2. Internetsuche : Kopieren Sie einfach den Hash und fügen Sie ihn in Google ein. Sehen Sie, ob Sie dort den entsprechenden Klartext finden. Dies ist keine Lösung, wenn Sie etwas pentestieren, aber es ist definitiv einen Versuch wert. Einige Websites verwalten den Hash für fast alle Wörter im Wörterbuch.

2
Wörterbuchangriffe sind eine andere Möglichkeit oder ein Vergleich mit anderen Datenbanken, für die Sie die Eingabekennwörter kennen.
Maarten Bodewes

1

Nein, es ist nicht möglich, eine Hash-Funktion wie MD5 umzukehren: Angesichts des Ausgabe-Hash-Werts ist es unmöglich, die Eingabenachricht zu finden, wenn nicht genügend Informationen über die Eingabenachricht bekannt sind.

Die Entschlüsselung ist keine Funktion, die für eine Hash-Funktion definiert ist. Verschlüsselung und Entschlüsselung sind Funktionen einer Verschlüsselung wie AES im CBC-Modus; Hash-Funktionen werden weder verschlüsselt noch entschlüsselt . Hash-Funktionen werden verwendet, um eine Eingabenachricht zu verarbeiten. Wie der Name schon sagt kein Reverse - Algorithmus möglich ist , durch Design .


MD5 wurde als kryptografisch sichere Einweg- Hash-Funktion entwickelt. Es ist jetzt einfach, Kollisionen für MD5 zu generieren - selbst wenn ein großer Teil der Eingabenachricht vorbestimmt ist. MD5 ist also offiziell defekt und MD5 sollte nicht mehr als kryptografisch sicherer Hash betrachtet werden. Es ist jedoch immer noch unmöglich, eine Eingabenachricht zu finden, die zu einem Hashwert führt: Finden Sie X, wenn nur H (X) bekannt ist (und X keine vorberechnete Struktur mit mindestens einem 128-Byte-Block vorberechneter Daten hat). . Es sind keine Pre-Image-Angriffe gegen MD5 bekannt.

Im Allgemeinen ist es auch möglich, Passwörter mithilfe von Brute-Force- oder (erweiterten) Wörterbuchangriffen zu erraten, Datenbanken zu vergleichen oder zu versuchen, Passwort-Hashes in sogenannten Regenbogentabellen zu finden. Wenn eine Übereinstimmung gefunden wird, ist rechnerisch sicher, dass die Eingabe gefunden wurde. Hash-Funktionen sind auch gegen Kollisionsangriffe sicher: Finden X', dass H(X') = H(X)gegeben H(X). Wenn also ein Xgefunden wird, ist es rechnerisch sicher, dass es tatsächlich die Eingabenachricht war. Andernfalls hätten Sie doch einen Kollisionsangriff durchgeführt. Regenbogentabellen können verwendet werden, um die Angriffe zu beschleunigen, und es gibt spezielle Internetressourcen, mit denen Sie ein Kennwort für einen bestimmten Hash finden können.

Es ist natürlich möglich, den Hash-Wert erneutH(X) zu verwenden, um Kennwörter zu überprüfen, die auf anderen Systemen generiert wurden. Das empfangende System muss lediglich das Ergebnis einer deterministischen Funktion speichern F, die H(X)als Eingabe verwendet wird. Wann Xwird dem System dann gegeben H(X)und Fkann daher neu berechnet und die Ergebnisse verglichen werden. Mit anderen Worten, es ist nicht erforderlich , den Hash-Wert zu entschlüsseln, um nur zu überprüfen, ob ein Kennwort korrekt ist, und Sie können den Hash weiterhin als einen anderen Wert speichern.


Anstelle von MD5 ist es wichtig, stattdessen einen Kennwort-Hash oder PBKDF (kennwortbasierte Schlüsselableitungsfunktion) zu verwenden. Eine solche Funktion gibt an, wie ein Salz zusammen mit einem Hash verwendet wird. Auf diese Weise werden keine identischen Hashes für identische Kennwörter (von anderen Benutzern oder in anderen Datenbanken) generiert. Passwort-Hashes erlauben aus diesem Grund auch nicht die Verwendung von Regenbogentabellen, solange das Salz groß genug und richtig zufällig ist.

Kennwort-Hashes enthalten auch einen Arbeitsfaktor (manchmal mithilfe einer Iterationszahl konfiguriert ), der Angriffe, die versuchen, das Kennwort anhand des Salt- und Hash-Werts zu finden, erheblich verlangsamen kann. Dies ist wichtig, da die Datenbank mit Salzen und Hashwerten gestohlen werden kann. Schließlich kann der Passwort-Hash auch speicherintensiv sein, so dass eine erhebliche Menge an Speicher erforderlich ist, um den Hash zu berechnen. Dies macht es unmöglich, spezielle Hardware (GPUs, ASICs, FPGAs usw.) zu verwenden, damit ein Angreifer die Suche beschleunigen kann. Für einen Kennwort-Hash stehen möglicherweise auch andere Eingaben oder Konfigurationsoptionen zur Verfügung, z. B. ein Pfeffer oder der Umfang der Parallelisierung.

Es wird jedoch weiterhin jedem erlaubt, ein angegebenes Passwort zu überprüfen, H(X)selbst wenn H(X)es sich um einen Passwort-Hash handelt. Passwort-Hashes sind immer noch deterministisch. Wenn also jemand alle Eingaben und den Hash-Algorithmus selbst kennt, Xkönnen H(X)die Ergebnisse berechnet und erneut verglichen werden.

Häufig verwendete Passwort-Hashes sind bcrypt , scrypt und PBKDF2 . Es gibt auch Argon2 in verschiedenen Formen, das der Gewinner des relativ neuen Passwort-Hashing-Wettbewerbs ist. Hier auf CrackStation ist ein guter Blog-Beitrag darüber, wie man Passwortsicherheit richtig macht.


Es ist möglich, dass Gegner die Hash-Berechnung nicht durchführen können, um sicherzustellen, dass ein Kennwort korrekt ist. Hierzu kann ein Pfeffer als Eingabe für den Passwort-Hash verwendet werden. Alternativ kann der Hash-Wert natürlich mit einer Verschlüsselung wie AES und einer Betriebsart wie CBC oder GCM verschlüsselt werden. Dies erfordert jedoch die Speicherung eines Geheimnisses / Schlüssels unabhängig und mit höheren Zugriffsanforderungen als der Passwort-Hash.


0

MD5 ist eine kryptografische (Einweg-) Hash-Funktion, daher gibt es keine direkte Möglichkeit, sie zu dekodieren. Der gesamte Zweck einer kryptografischen Hash-Funktion besteht darin, dass Sie sie nicht rückgängig machen können.

Eine Sache, die Sie tun können, ist eine Brute-Force-Strategie, bei der Sie erraten, was gehasht wurde, dann mit derselben Funktion hashen und prüfen, ob es übereinstimmt. Wenn die gehashten Daten nicht sehr leicht zu erraten sind, kann dies jedoch lange dauern.


-1

Es ist noch nicht möglich, einen Hash eines Passworts in einen Algorithmus einzugeben und das Passwort wieder im Klartext abzurufen, da Hashing eine Einbahnstraße ist. Die Benutzer haben jedoch Hashes generiert und in einer großen Tabelle gespeichert, sodass bei der Eingabe eines bestimmten Hashs die Tabelle auf das Kennwort überprüft wird, das mit dem Hash übereinstimmt, und dieses Kennwort an Sie zurückgegeben wird. Ein Beispiel für eine Website, die dies tut, ist http://www.md5online.org/ . Ein modernes Passwortspeichersystem wirkt dem entgegen, indem es einen Salting-Algorithmus verwendet, bei dem bei der Eingabe des gleichen Passworts in ein Passwortfeld während der Registrierung verschiedene Hashes generiert werden.


-1

Nein, Sie können den md5 nicht entschlüsseln / umkehren, da es sich um eine Einweg-Hash-Funktion handelt, bis Sie keine umfangreichen Sicherheitslücken im MD5 gefunden haben. Eine andere Möglichkeit besteht darin, dass auf einer Website eine große Menge an Kennwortdatenbanken vorhanden ist. Sie können also online versuchen, Ihre MD5- oder SHA1-Hash-Zeichenfolge zu dekodieren. Ich habe eine Website wie http://www.mycodemyway.com/encrypt-and-decrypt/md5 ausprobiert und sie funktioniert für mich einwandfrei. Dies hängt jedoch vollständig von Ihrem Hash ab. Wenn dieser Hash in dieser Datenbank gespeichert ist, können Sie die tatsächliche Zeichenfolge abrufen .


1
Nein, MD5 ist keine Verschlüsselung, nicht einmal eine Einwegverschlüsselung (was überhaupt keinen Sinn macht).
Maarten Bodewes

@ MaartenBodewes Das ist mein Fehler, es ist keine Verschlüsselungsfunktion, es ist eine Hash-Funktion. Danke.
Rafi Ahmad
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.