PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MD5 und Salz



blabub
11.04.11, 15:54
Edit:
Nachdem ich es jetzt geschrieben habe, wird mir alles klar. :)
Es geht natürlich darum die Passwörter von einem Wörterbuchangriff zu schützen. Mit dem Salt müsste man natürlich dann alles neu ausrechnen, was Zeit kostet und so unattraktiv wird.
Abgesehen davon, dass sichere Passwörter entsprechend eh schwer zu knacken sind.


Hallo zusammen


Ich habe mich jetzt die letzten Tage in sichere Passwotverschlüsselung eingelesen. Jedoch verstehe ich ein paar Aspekte nicht so ganz.


Laut diversen Quellen sollte der Vorgang wie folgt ablaufen:

- Passwort md5en und salzen
- Den Salz-String separat abspeichern vom Passwort
- Der Salz-String sollte für jedes Passwort anders sein

- Benutzer meldet sich an
- Password md5en und salzen mit dem Salz-String der beim Erstellen gespeichert wurde


Offene Fragen:

Gehe ich jetzt davon aus, dass jemand Zugriff auf den Server erhält, erhält er Zugriff auf die verschlüsselten Passwörter, die Salz-Strings und die Zuweisungen von Passwort zu Salz-String.

In diesem Moment war ja die ganze Aktion für nichts gewesen?


Ich bin nun nicht sicher, ob ich einfach grundlegend etwas falsch verstanden habe. Ich muss in absehbarer Zeit ein Loginsystem implementieren und möchte es sicher haben. Daher will ich die Materie verstehen und anwenden können, bevor ich was Implementiere.


Danke und Gruss
blabub

derRichard
11.04.11, 16:14
hi!

gespeichert wird die md5-summe vom gesaltzenen passwort und das salz.
dadurch kann man verhindern, dass ein angreifer sieht, dass zwei oder mehr benutzer das selbe passwort haben.
und vorausberechnete md5-summen werden nutzlos.

hth,
//richard

blabub
01.05.11, 18:45
Hallo


Danke für die Antwort. So macht dies natürlich Sinn. Zum Teil schwer von der richtigen Seite her auf das ganze zu schauen, damit das richtige Bild ensteht. :)

Eine letzte Frage hätte ich noch zum Thema Datensicherheit:

Ich habe jetzt diverse Felder in einer Tabelle (postgresql) mit pgp_pub_encrypt verschlüsselt. So weit so gut, mit dem Private Key und dem dazugehörigen Passwort kann ich alles wieder sauber entschlüsseln.
Doch wie sichere ich jetzt den Privaten Schlüssel ab? Irgendwo muss ich ihn ja angeben und das Passwort auch. Die Systemlandschaft besteht aus einem DB- und einem Webserver.
Der Webserver schickt die Anfrage an die Datenbank, in meinem Szenario würde der Private Key und das Passwort auf dem Webserver liegen. Jedoch gefällt mir das irgendwie nicht aber eine andere Lösung fällt mir nicht ein.


Gruss und Danke
blabub

Roger Wilco
01.05.11, 19:54
- Passwort md5en und salzen
Nein. MD5 (oder SHA1 und Varianten) noch als "sicheren" Hash-Algorithmus einzusetzen ist heutzutage mutig. Rechenzeit ist heutzutage viel zu einfach zu erhalten. Man kann für 2 Stunden 10 EC2-Instanzen bei Amazon mieten (oder einem "Cloud"-Provider deiner Wahl) und dann nützt dir auch ein MD5-Hash mit Salt nichts mehr, da MD5 und die SHA1-Familie auf Geschwindigkeit optimiert wurden und man mit Bruteforce das Passwort immer knacken kann. Wenn der entsprechende Hash-Algorithmus zu schnell ist, wird ein Bruteforce-Angriff billiger.

Allerdings haben sich glücklicherweise schon schlaue Leute über dieses Problem viele Gedanken gemacht und haben mit bcrypt durchaus einen brauchbaren Algorithmus entwickelt.

Einen lesenwerten Artikel dazu findest du unter http://codahale.com/how-to-safely-store-a-password/.

tl;dr: Use bcrypt.

blabub
01.05.11, 20:24
Nein. MD5 (oder SHA1 und Varianten) noch als "sicheren" Hash-Algorithmus einzusetzen ist heutzutage mutig. Rechenzeit ist heutzutage viel zu einfach zu erhalten. Man kann für 2 Stunden 10 EC2-Instanzen bei Amazon mieten (oder einem "Cloud"-Provider deiner Wahl) und dann nützt dir auch ein MD5-Hash mit Salt nichts mehr, da MD5 und die SHA1-Familie auf Geschwindigkeit optimiert wurden und man mit Bruteforce das Passwort immer knacken kann. Wenn der entsprechende Hash-Algorithmus zu schnell ist, wird ein Bruteforce-Angriff billiger.

Allerdings haben sich glücklicherweise schon schlaue Leute über dieses Problem viele Gedanken gemacht und haben mit bcrypt durchaus einen brauchbaren Algorithmus entwickelt.

Einen lesenwerten Artikel dazu findest du unter http://codahale.com/how-to-safely-store-a-password/.

tl;dr: Use bcrypt.

Hallo Roger


Dieses Problem müsste ich eigentlich mit


crypt('12345', gen_salt('bf', 16))

aus dem pgcrypto-Modul gelöst haben. Die Referenz verweist mind. auf die bcrypt-Seite. Und die Ideen hören sich identisch an.