it-swarm.com.de

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

Jemand hat mir erzählt, dass er Software-Systeme gesehen hat, die:

  1. abrufen von MD5-verschlüsselten Kennwörtern von anderen Systemen;
  2. entschlüsseln Sie die verschlüsselten Passwörter und
  3. speichern Sie die Passwö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?

244
John Bubriski

Nein. MD5 ist keine Verschlüsselung (obwohl es möglicherweise als Teil einiger Verschlüsselungsalgorithmen verwendet wird), sondern eine Einweg-Funktion Hash-Funktion . Ein Großteil der ursprünglichen Daten 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 gibt128 mögliche MD5-Hashes. Das ist eine einigermaßen große Zahl, und doch ist sie definitiv endlich. Dennoch gibt es eine unendliche Anzahl möglicher Eingaben für eine bestimmte Hash-Funktion (und die meisten von ihnen enthalten mehr als 128 Bit oder nur 16 Byte). Es gibt also tatsächlich unendlich viele Möglichkeiten für Daten, die auf den gleichen Wert gehasht würden. Die Sache, die Hashes interessant macht, ist, dass es unglaublich schwierig ist, zwei Daten zu finden, die auf den gleichen Wert gehasht werden, und die Wahrscheinlichkeit, dass dies versehentlich passiert, beträgt fast 0.

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

Es wurde jedoch festgestellt, dass MD5 einige Schwächen aufweist, so dass es bei komplexer Mathematik möglich sein kann, eine Kollision zu finden, ohne 2 auszuprobieren128 mögliche Eingabezeichenfolgen. Und die Tatsache, dass die meisten Passwörter kurz sind und häufig gemeinsame Werte (wie "Passwort" oder "geheim") verwendet werden, bedeutet, dass Sie in einigen Fällen das Passwort eines anderen einigermaßen gut erraten können, indem Sie nach dem Hash googeln oder ein = verwenden Rainbow table . Dies ist ein Grund, warum Sie immer " salt " Passwörter hashen sollten, damit zwei identische Werte, wenn sie hashen, nicht denselben Wert haben.

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

399
Adam Batkin

Sie können nicht - in der Theorie. Der springende Punkt bei einem Hash ist, dass es nur eine Möglichkeit gibt. Dies bedeutet, dass jemand, der es schafft, die Liste der Hashes abzurufen, immer noch nicht an Ihr Passwort kommt. Außerdem bedeutet dies, dass selbst wenn jemand dasselbe Kennwort auf mehreren Websites verwendet (ja, wir alle wissen, dass wir dies nicht sollten, aber ...), niemand mit Zugriff auf die Datenbank von Website A das Kennwort des Benutzers verwenden kann Standort B.

Die Tatsache, dass MD5 ein Hash ist, bedeutet auch, dass es Informationen verliert. Wenn Sie für einen bestimmten MD5-Hash Passwörter beliebiger Länge zulassen, kann es mehrere Passwörter geben, die denselben Hash erzeugen. Für einen guten Hash wäre es rechnerisch unmöglich, sie über eine ziemlich triviale Maximallänge hinaus zu finden, aber dies bedeutet, dass es kein Garantie gibt, dass es definitiv das ursprüngliche Passwort ist, wenn Sie ein Passwort mit dem Ziel-Hash finden. Es ist astronomisch unwahrscheinlich, dass Sie zwei Nur-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 prüfen, ob Sie eines finden, das zu diesem Ziel passt. Salting hilft nicht bei dass Szenario, aber es hilft, es teurer zu machen, ein Passwort zu finden, das einem von mehreren Hashes mit verschiedenen Saltes entspricht.
  • Ich glaube, es sind Fehler bekannt, die das Auffinden von Kollisionen erleichtern, obwohl das Auffinden von Kollisionen in druckbarem Text (und nicht in willkürlichen Binärdaten) zumindest schwieriger wäre.

Ich bin kein Sicherheitsexperte und werde daher keine konkrete Empfehlung abgeben, die über "Rollen Sie nicht Ihr eigenes Authentifizierungssystem" hinausgeht. Finden Sie einen von einem seriösen Lieferanten und verwenden Sie diesen. Sowohl das Design als auch die Implementierung von Sicherheitssystemen ist eine schwierige Angelegenheit.

154
Jon Skeet

Technisch ist es 'möglich' , aber unter sehr strengen Bedingungen (- Rainbow tables , Brute Forcing basierend auf der sehr geringen Wahrscheinlichkeit, dass sich das Kennwort 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 niemals tun . Das "Umkehren" von MD5 wird tatsächlich als bösartig angesehen . Einige Websites bieten die Möglichkeit, MD5-Hashes zu "knacken" und zu bruteforceen Wörterbuchwörter, zuvor übermittelte Passwörter und andere Wörter. Es gibt eine sehr kleine Chance, dass der MD5-Hash, den Sie benötigen, rückgängig gemacht wird. Und wenn Sie gesalzen den MD5-Hash haben - das wird auch nicht funktionieren! :)


Die Art und Weise, wie sich MD5 mit Hashing anmeldet sollte ist:

Während der Registrierung:
Benutzer erstellt Passwort -> Passwort wird mit MD5 gehasht -> Hash in Datenbank gespeichert

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 vergessen' benötigt wird:

2 Optionen:

  • Der Benutzer hat ein zufälliges Kennwort gesendet, um sich anzumelden. Bei der ersten Anmeldung wird das Kennwort nicht geändert.

oder

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

Nicht direkt. Aufgrund des Pigeonhole-Prinzips gibt es (wahrscheinlich) mehr als einen Wert, der für eine bestimmte MD5-Ausgabe gilt. Als solches kann man es nicht mit Sicherheit rückgängig machen. Darüber hinaus wurde MD5 entwickelt, um das Auffinden von solchen umgekehrten Hashes zu erschweren (es hat jedoch Angriffe gegeben, die Kollisionen - hervorrufen. Das heißt, Sie können zwei Werte erzeugen, die das gleiche Ergebnis haben, aber Sie können nicht steuern, wie der resultierende MD5-Wert aussehen wird.

Wenn Sie den Suchbereich jedoch auf beispielsweise allgemeine Kennwörter mit einer Länge unter N beschränken, ist die Irreversibilitätseigenschaft möglicherweise nicht mehr verfügbar (da die Anzahl der MD5-Ausgaben viel größer ist als die Anzahl der Zeichenfolgen in der gewünschten Domäne). Dann können Sie ein Rainbow-Tabelle oder Ähnliches verwenden, um Hashes umzukehren.

32
bdonlan

Nicht möglich, zumindest nicht in angemessener Zeit.

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

13
Matthew Groves

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

Doch kannst du:

geben Sie dem Benutzer einen neuen.

schauen Sie in einer Rainbow-Tabelle nach, um vielleicht die alte zu finden.

12
Nettogrof

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

Kryptografische Hashes (MD5, etc ...) sind einweg und Sie können nicht nur mit der Zusammenfassung zur ursprünglichen Nachricht zurückkehren es sei denn Sie haben einige andere Informationen über die ursprüngliche Nachricht usw., die Sie nicht sollten.

10
Robert Greiner

Entschlüsselung (direktes Abrufen des Klartextes vom Hash-Wert auf algorithmische Weise), nein.

Es gibt jedoch Methoden, die ein sogenanntes Rainbow-Tabelle verwenden. Es ist ziemlich machbar, wenn Ihre Passwörter ohne ein Salz gehasht werden.

8
Sinan Taifour

MD5 ist ein Hash-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 in erster Linie der Punkt, an dem das Passwort gehackt wird. :)

Eine Sache, die Sie tun sollten , ist, ein temporäres Passwort für sie manuell festzulegen und ihnen dieses zu senden.

Ich zögere, dies zu erwähnen, weil es eine schlechte Idee ist (und es wird sowieso nicht garantiert funktionieren), aber Sie könnten versuchen, den Hash in einer Rainbow-Tabelle wie milw0rm nachzuschlagen, um zu sehen, ob Sie das alte Passwort wiederherstellen können dieser Weg.

7
Bill the Lizard

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

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

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

6
Dinah

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, wenn Sie eine Hash-Funktion haben. Es sollte nicht umkehrbar sein und eine schnelle Hashwertberechnung 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 Kennwörter relativ sicher zu speichern. Wenn ein Angreifer mit allen darin enthaltenen Benutzerkennwörtern auf Ihre Datenbank zugreifen kann, verlieren Sie in jedem Fall. Wenn Sie Hash-Werte und (idealerweise) starke Passwörter haben, ist es sehr 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 vom Benutzer eingegebenen Passworts (der schnell ist) und vergleichen ihn mit dem in ihrer Benutzerdatenbank gespeicherten Hash-Wert.

4
Kage

MD5 wird als fehlerhaft angesehen, nicht weil Sie den ursprünglichen Inhalt des Hashs wiederherstellen können, sondern weil Sie mit der Arbeit zwei Nachrichten erstellen können, die denselben Hash enthalten.

Sie können einen MD5-Hash nicht enthacken.

3
Ned Batchelder

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 in einen anderen Algorithmus umzuschlü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. An dem Punkt, an dem sie sich anmelden, haben sie Ihrem Anmeldeprogramm eine ngeprüfte Version des Kennworts gegeben, von der Sie nachweisen, dass es mit dem von Ihnen verwendeten MD5-Hash übereinstimmt. Anschließend können Sie dieses nicht geschützte Kennwort in Ihren neuen Hashing-Algorithmus konvertieren.

Offensichtlich ist dies 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)

2
user3710044

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

In einigen Fällen ist die Dictionary-Methode möglicherweise unbrauchbar:

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

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

2
davitz38

Das Einzige, was funktionieren kann, ist (wenn wir erwähnen, dass die Passwörter nur gehasht werden, ohne dass Salz hinzugefügt wird, um die Wiederholungsangriffe zu verhindern, wenn Sie das Salz kennen müssen), nebenbei ein Wörterbuch-Angriffstool , die Dateien mit vielen Wörtern, Zahlen usw. erstellen dann zwei Zeilen, eine Zeile ist Word, Nummer (im Wörterbuch) die andere ist Hash des Wortes, und vergleichen Sie die Hashes, wenn Übereinstimmungen Sie es bekommen ...

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

2
berkay

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

1
Vilx-

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 Kennwort mitteilen, aber möglicherweise können Sie ihm ein funktionsfähiges Kennwort mitteilen. Aber ich denke: Maile einfach ein neues Passwort, falls sie es vergessen haben.

1
dz.

Nein, es ist nicht möglich, eine Hash-Funktion wie MD5 umzukehren: Angesichts des ausgegebenen Hash-Werts kann die Eingangsnachricht nur gefunden werden, wenn genügend Informationen über die Eingangsnachricht bekannt sind.

Die Entschlüsselung ist keine Funktion, die für eine Hash-Funktion definiert ist. Verschlüsselung und Entschlüsselung sind Funktionen eines Chiffre wie AES im CBC-Modus; Hash-Funktionen nicht verschlüsseln noch entschlüsseln. Hash-Funktionen werden verwendet, um eine Eingabemeldung zu verdauen . Wie der Name andeutet, ist kein umgekehrter Algorithmus möglich durch Design.


MD5 wurde als kryptografisch sichere Einweg-Hash-Funktion entwickelt. Es ist jetzt einfach, Kollisionen für MD5 zu generieren - auch wenn ein großer Teil der Eingabenachricht im Voraus festgelegt wurde. 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 Hash-Wert führt: Finde X, wenn nur H(X) bekannt ist (und X keine vorberechnete Struktur mit at hat Mindestens ein 128-Byte-Block vorberechneter Daten). Es sind keine Prä-Image-Angriffe gegen MD5 bekannt.

Generell ist es auch möglich, Passwörter mit Brute Force oder (erweiterten) Wörterbuchangriffen zu erraten, Datenbanken zu vergleichen oder Passwort-Hashes in sogenannten Rainbow-Tabellen zu finden. Wenn eine Übereinstimmung gefunden wird, ist rechnerisch sicher, dass die Eingabe gefunden wurde. Hash-Funktionen sind auch gegen Kollisionsangriffe gesichert: Finden Sie X', So dass H(X') = H(X)H(X) gegeben wird. Wenn also ein X gefunden wird, ist rechnerisch sicher, dass es sich tatsächlich um die Eingabenachricht handelt. Sonst hätten Sie doch einen Kollisionsangriff ausgeführt. Mithilfe von Rainbow-Tabellen können die Angriffe beschleunigt werden, und es gibt spezielle Internetressourcen, die Ihnen dabei helfen, ein Kennwort für einen bestimmten Hash zu finden.

Es ist natürlich möglich, den Hash-Wert H(X) erneut zu verwenden, um Passwörter zu überprüfen, die auf anderen Systemen generiert wurden. Das einzige, was das empfangende System tun muss, ist das Ergebnis einer deterministischen Funktion F zu speichern, die H(X) als Eingabe verwendet. Wenn X an das System übergeben wird, kann H(X) und damit F 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 dass ein Passwort korrekt ist, und Sie können den Hash trotzdem als ein anderes speichern Wert.


Anstelle von MD5 ist es wichtig, stattdessen einen Passwort-Hash oder PBKDF (passwortbasierte 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 generiert (von anderen Benutzern oder aus anderen Datenbanken). Aus diesem Grund erlauben Passwort-Hashes auch nicht die Verwendung von Rainbow-Tabellen, solange das Salt groß genug und ordnungsgemäß randomisiert ist.

Kennwort-Hashes enthalten auch einen Arbeitsfaktor (manchmal konfiguriert mit einer Iterationszahl), der Angriffe, die versuchen, erheblich verlangsamen kann Um das Passwort zu finden, muss der Salt- und Hash-Wert angegeben werden. 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 Passwort-Hash stehen möglicherweise auch andere Eingaben oder Konfigurationsoptionen zur Verfügung, z. B. ein Pepper oder der Umfang der Parallelisierung.

Es wird jedoch weiterhin jedem erlaubt, ein Passwort zu verifizieren, wenn H(X) angegeben wurde, auch wenn H(X) ein Passwort-Hash ist. Kennwort-Hashes sind immer noch deterministisch. Wenn also jemand alle Eingaben und den Hash-Algorithmus selbst kennt, kann X verwendet werden, um H(X) zu berechnen, und - erneut - die Ergebnisse können verglichen werden.

Häufig verwendete Passwort-Hashes sind bcrypt , scrypt und PBKDF2 . Es gibt auch Argon2 in verschiedenen Formen, das der Gewinner des einigermaßen aktuellen Passwort-Hashing-Wettbewerbs ist. Hier auf CrackStation ist ein guter Blog-Beitrag zum richtigen Umgang mit der Passwortsicherheit.


Es ist möglich, es für Gegner unmöglich zu machen, die Hash-Berechnung durchzuführen, um zu überprüfen, ob ein Passwort korrekt ist. Hierzu kann ein Pfeffer als Eingabe für den Passwort-Hash verwendet werden. Alternativ kann der Hash-Wert natürlich auch 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.

1
Maarten Bodewes

Der MD5-Hash-Algorithmus ist nicht umkehrbar, daher ist das Dekodieren von MD5 nicht möglich. Auf einigen Websites gibt es jedoch mehrere Übereinstimmungen mit Passwörtern, sodass Sie versuchen können, MD5-Hash online zu dekodieren.

Online versuchen:

MD5 entschlüsseln

md5online

md5decrypter

1
Girish Patidar

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

  1. Bruteforcing : Alle Computer-Sicherheitsalgorithmen leiden unter bruteforcing . Basierend auf dieser Idee verwendet die heutige GPU die Idee der parallelen Programmierung, mit der der Klartext wiederhergestellt werden kann, indem er mit einem beliebigen Grafikprozessor massiv brachialisiert wird. Dieses Tool hashcat erledigt diese Aufgabe. Das letzte Mal, als ich die cuda -Version davon überprüfte, konnte ich innerhalb von sechs Minuten ein 7 Buchstaben langes Zeichen brutal erzwingen.
  2. Internet-Suche : Kopieren Sie einfach den Hash und fügen Sie ihn in Google ein und sehen Sie, ob Sie dort den entsprechenden Klartext finden. Dies ist keine Lösung, wenn Sie etwas pentesting, aber es ist definitiv einen Versuch wert. Einige Websites pflegen den Hash für fast alle Wörter im Wörterbuch.
1
vikkyhacks

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 raten, was gehasht wurde, und es dann mit derselben Funktion hashen und prüfen, ob es passt. Wenn die gehashten Daten nicht sehr einfach zu erraten sind, kann dies jedoch lange dauern.

0
Ajanyan Pradeep