MySQL Passwort Entschlüsseln

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    den Link hab ich nicht gesehen...
    Ich guck mir das wenn ich später Zeit habe inruhe an und melde mich nochmal wenn ich es hinbekomme oder eben nicht :) Sag ich erstmal danke :)
    Ich melde mich spätestens in den nächsten Tagen wieder :)
    petaod hat es eigentlich perfekt erklärt: Ein Hash funktioniert nur in eine Richtung.

    Zur Erklärung, wozu ein Hash dient: Ein Hash ist dafür da, damit ein Passwort nicht unverschlüsselt in einer Datenbank steht. Je nach Anwendung wird das Passwort auch schon auf der Client-Seite gehasht und erst dann an die Datenbank übertragen. In diesem Fall kann ein Angreifer, wenn er die Datenbank hackt oder die Übertragung des Hashes abfängt, nicht auf das Passwort schließen, ohne viele Passwortmöglichkeiten zu testen.

    Ein Hash ist nicht dafür da, zu verschlüsseln, sondern um das Passwort zu verfälschen, sodass es nicht im Klartext gespeichert wird.
    Ein Programm macht am Beispiel der Quersumme als Algorithmus folgendes:
    Neuer Benutzer wird mit Passwort angelegt, Benutzername wird in Datenbank geschrieben, Passwort wird gehasht (mit einer Quersumme) abgelegt.
    Beispiel mit der Quersumme: Benutzer wird mit Kennwort "12345" angelegt, das Programm bildet die Quersumme (1+2+3+4+5 = 15) und speichert den "Hash" 15 ab. Wenn du jetzt diesen Hash hast, woher soll jetzt ein Programm wissen, ob sich die Quersumme aus 12345 ist oder 555 gebildet hat, ergo ist es nicht möglich, ein Passwort aus dem Hash neu zu bilden.
    Wenn sich der Benutzer anmeldet, bildet das Programm wieder die Quersumme und vergleicht sie mit der in der Datenbank abgelegten Quersumme. Stimmt sie überein, ist der Benutzer angemeldet.
    Allerdings wie du siehst ist eine Quersumme ein UNSICHERER HASH, denn auch 555 wäre ein richtiges Passwort, da auch 555 die gleiche Quersumme ergibt wie 12345.
    Ein Angreifer könnte einfach sämtliche Zahlenkombinationen ausprobieren, bis er eine Zahl hat, die die gleiche Quersumme hat wie 12345 (und das geht sehr schnell).

    Deshalb sind Hashing-Algorithmen weitaus komplexer und benötigen mehr Rechenzeit. Aber auch bei komplexeren Algorithmen wie md5 schleichen sich Sicherheitslücken ein, auch dort kann es passieren, dass zwei verschiedene Passwörter den gleichen Hash bilden. Außerdem ist md5 ein zu schneller Algorithmus. Denn ein Angreifer kann einfach sämtliche möglichen Passwörter ausprobieren, bis er drin ist (das geht automatisiert und nennt sich "Brute-Force-Attacke").

    Bei Hashing-Algorithmen wird also versucht, einen möglichst eindeutigen Hash zu erzeugen und eine Balance zu finden zwischen Sicherheit und hoher Anwendungsgeschwindigkeit.

    MD5 kann sehr schnell geprüft werden, mehr als 1000 mal pro Sekunde. Das heißt, dass ein Angreifer in einer Stunde über 3,6 mio Passwörter ausprobieren. Deshalb wird heutzutage auf "langsamere" Algorithmen gesetzt, um Brute-Force-Attacken zu verzögern (zum Beispiel bcrypt). Bei bcrypt kann man auch die Ablaufgeschwindigkeit angeben, zum Beispiel ein Passwort alle 2 Sekunden (das wäre allerdings recht langsam). Ein Angreifer kann dann in einer Stunde nur 108000 Passwörter testen im Vergleich zum MD5.

    Außerdem sind weitere Sicherheitsmechanismen das Sperren eines Zuganges, Terminals oder einer IP bei mehrmaliger Falscheingabe.

    Damit solltest du dich dringend beschäftigen, bevor du Benutzerverwaltungen über Datenbanken managest.

    Edit: Noch etwas:
    Wenn du dich fragst, wie dann ein Administrator seinen Benutzern Passwörter zuteilen kann oder wie mit verloren Passwörtern umgegangen wird: Beim Anlegen des Passwortes wird das Passwort im Klartext zum Beispiel per E-Mail an den Benutzer geschickt oder vom Administrator mündlich mitgeteilt.
    Vergisst der Benutzer sein Passwort, wird ihm einfach ein neues zugewiesen, anstatt das alte auszulesen. Das hat auch den Vorteil, dass der Administrator das Kennwort der Benutzer nicht kennt (wenn der Benutzer sein Kennwort ändert, was durchaus Standard ist, zum Beispiel gibt es bei Servern oft den Zwang, sein Kennwort bei der ersten Anmeldung zu ändern), denn auch ein Administrator ist eine potentielle Sicherheitslücke. Trotzdem kann der Administrator Benutzerkennwörter problemlos verwalten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Broco“ ()

    Danke für die Antwort :) Zum größten Teil benutze ich eig immer md5 zum Verschlüsseln, nur halt für das Login der Datenbank den Hash... werde ich bei Zeiten ändern !! :) Problem bei meinen md5 ist, dass das Passwort zum entschlüsseln im Programm gespeichert ist, was wiederum zur Unsicherheit führt... Aber meine Programme sind immoment ja noch nicht öffentlich, erst wenn ich alles sicher verschlüsselt habe und mein Problem gelöst habe, weswegen ich diesen Thread eröffnet habe. Selbst dann wird es dauern bis ich meine Programme über haupt an fremde menschen weiter gebe :) Mann lernt ja immer dazu deswegen deswegen frage ich ja in diesem Forum bis jetzt habe ich mir alles selbst beigebracht und gegooglet ;)

    CVB97 schrieb:

    Zum größten Teil benutze ich eig immer md5 zum Verschlüsseln, nur halt für das Login der Datenbank den Hash... werde ich bei Zeiten ändern !! Problem bei meinen md5 ist, dass das Passwort zum entschlüsseln im Programm gespeichert ist, was wiederum zur Unsicherheit führt...

    a) Hash ist keine Verschüsselung (nochmal...)
    b) Wie meinst du das "Passwort zum entschlüsseln ist im Programm"?


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    MD5 ist eine kryptographische Hashfunktion, es wurde als Quasi Standard in der (Verschlüsselung) von Datenbankpasswörtern gerne eingesetzt. Heute ist diese Methode unsicher, da genug Rainbowtables existieren, die diese Passwörter in Sekundenschnelle in eine lesbare Phrase umwandeln.

    Eine Blockverschlüsselung (die echte Verschlüsselung) welche auf einem aus einer kryptographischen Hashfunktion basierenden Schlüssel aufbaut, ist oft dann schwach, wenn der Schlüssel auf einem schwachen Passwort basiert, wie "test", "12345" "Otto" sehr kurze Worte unter 8 Buchstaben, keine Zahlen, Sonderzeichen etc.

    Trotzdem darf man gerne bei MD5 von Verschlüsselung reden, denn es ist eine kollisionsresistente Einwegfunktion bei der keine Entschlüsselung möglich(?) ist. Wobei es erfolgreiche Angriffe bei md5 gibt. heise.de/security/artikel/Kons…riffe-auf-MD5-270106.html

    Versuche dein Glück bei dieser Webseite, die haben eine große Rainbowtable.
    md5-passwort.de/
    noch einmal - zum Mitschreiben:

    eine Hash-Funktion ist keine Verschlüsselung!!
    Als Verschlüsselung kann man nur Verfahren bezeichnen, die auch eine Entschlüsselung vorsehen.

    Dass man MD5-Hashes mit Rainbow-Tables knacken kann, macht MD5 nicht zu einer Verschlüsselungs-Verfahren (denn das ist nicht vorgesehen).
    Sondern es zeigt, dasses eine ungenügende HashFunktion ist, nach Stand der Technik.

    Bitte verwendet Begriffe korrekt. Ihr legt einem Anfänger lauter StolperFallen in seinen gesamten weiteren Weg, wenn ihr schwammige oder gar falsche Begrifflichkeiten verwendet.