SQL Passwort-Verschlüsselung

Physically

Lt. Commander
Registriert
Nov. 2010
Beiträge
1.708
[ERLEDIGT] Passwort-Verschlüsselung

Hallo,

wollte fragen, wie ich das Passwort eines Users in der Datenbank verschlüsseln kann, sodass dieser es wieder ändern kann, ohne ein neues per E-Mail geschickt zu bekommen. Bei md5 ist es ja so, das man das PW nicht mehr entschlüsseln kann habe ich gehört.

Wie macht das z.B. das Forensystem von ComputerBase, da geht es doch auch.

Gruß
 
Zuletzt bearbeitet:
Hi,

das hat doch nichts mit der Passwortverschlüsselung an sich zu tun. Du kannst doch auch ein MD5-verschlüsseltes Passwort einfach mit einem anderen MD5-Wert überschreiben.

Das hat weder etwas mit der Verschlüsselung noch mit SQL zu tun, sondern lediglich mit deiner Software, die damit arbeitet.

Was genau hast du vor / was genau ist das Szenario in deinem Fall?

BTW: MD5 ist keine Verschlüsselung sondern ein Hash!

VG,
Mad
 
Bei CB müsstest du ebenfalls ein neues bekommen bzw. ein neues einrichten. Das aktuelle kann nicht ausgelesen werden - eben weils irgendwie verschlüsselt ist.
 
Es wird ja nicht das verschlüsselte PW entschlüsselt und dann mit dem eingegebenen verglichen sondern das eingegebene wird ebenfalls verschlüsselt und dann werden beide MD5 Hashs verglichen.

Wie Madman1209 schon geschrieben hat, hat das absolut nichts mit der Verschlüsselung o.ä. zu tun.

Edit: Lass den Benutzer das aktuelle PW eingeben, verschlüssel es mit MD5 und vergleich dann diesen MD5 Wert mit dem in der DB. Stimmen beide überein, dann kann er ein neues PW eingeben welches verschlüsselt wird und anstelle des alten MD5 Wertes in die DB geschrieben wird.
 
Achso jetzt ist mir das klar. Jemand registriert sich, legt ein PW an das in md5 "konvertiert" wird (<-- wenn ma das so nennen darf). Jetzt hat der Jemand das PW vergessen und möchte ein neues anlegen. Er gibt das Aktuelle ein, und nun zweimal das neue. Dieses wird wieder in md5 "konvertiert" und überschreibt den alten Code.
Right?

Was ist der Unterschied zwischen Hash und Verschlüsselung?
 
Hi,

ziemlich genau so wie du es beschreibst, genau :)

Und: eine Verschlüsselung lässt sich umkehren :)

VG,
Mad
 
Eine Verschlüsselung ist umkehrbar:
ollah --entschlüsselung--> hallo

Ein Hash sollte keinerlei Hinweise auf den ursprünglichen Klartext hinterlassen. Man kann das Produkt nicht durch einen Schlüssel wieder in die ursprüngliche Form zurück verwandeln.

Zur Funktion in Foren: Die meisten Foren nutzen einen "Gesalzenen Hash" (Salted).
Wird das Passwort "Passwort" mit MD5 gehasht, ergibt das 0660b01b0c2429431f41407dc6ecf257
Je nach Verfahren wird das ganze dann mit einem zufälligen String ergänzt und noch einmal gehasht. Das bringt zusätzliche Sicherheit (bzw. Angreifer brauchen einfach mehr Zeit, einen Hash zu Cracken).

MfG
Damon
 
Na ja, Hashes werden nicht wirklich geknackt. Sie werden schlichtweg ausgelesen. Dafür gibt es ja diese tollen Rainbow Tables. Du schreibst für alle möglichen Zeichenkombinationen (innerhalb einer gewissen Länge und mit einem gewissen Zeichenumfang) einfach alle Hashes (egal ob nun md5, sha1 oder sonstwas) auf. Das ergibt dann eine Datei von meinetwegen 180GB.
Hast du jetzt ein gehashtes Passwort, dann prüfst du diesen Hash gegen alle deine Hashes in deiner Rainbow Table und kriegst den Klartext des Passwortes, der zu dem Hash gehört.

Der einzige Schutz dagegen ist eben ein Salt. Durch Hinzufügen eines geheimen (aber konsistenten) Strings wird der Hash verschmutzt und kann in der Rainbow Table nicht gefunden werden. Man bräuchte für jedes Salt eine eigene RT.
 
Cool danke für die Erklärungen. Was ist jetzt noch der Unterschied zwischen md5 und sha1 o.ä.?
 
Das sind schlichtweg verschiedene Hash-Verfahren. Was genau die jeweils anders machen als die anderen verrät dir am ehesten Wikipedia.
Im Endeffekt ist es egal, du musst nur wissen:
- niemals ungehashte Passwörter in einer Datenbank lagern
- niemals nur hashen, immer auch noch mindestens salzen. wirklich gut sind salt&pepper - Lösungen mit 2 "Zusätzen"
- dein Hash-Algorithmus kann ruhig etwas länger werden. Es spielt für deine Anwender keine Rolle, ob ihr Login 0,01s oder 0,1s dauert. Tatsächlich ist 0,1s sogar besser, da ein Angreifer, der es über Brute Force versucht, hier 10x so lange benötigt um zum Ziel zu kommen.
- versuch keinen eigenen Hash- oder Verschlüsselungsalgorithmus zu schreiben. Nutz bestehende Systeme. Das ist nicht nur leichter sondern auch viel sicherer.
 
Zurück
Oben