Moin!
Sieh mal, solange der Typ der das PW hat nicht die Verschlüsselungsfunktion hat weiß er nicht wie er ans richtige kommt!
Wie gerade durch den Heise-Ticker läuft, hat jemand die Support-Foren dreier großer Boardsoftware-Anbieter gehackt - bzw. ist durch einen kompromittierten FTP-Zugang eingedrungen und konnte ein Vollbackup sowohl von Webspace als auch Datenbank ziehen.
Dieses Szenario ist auch bei dir nicht unwahrscheinlich: Oft ist die Datenbank von außen gar nicht direkt erreichbar, d.h. Angriffspunkte treffen immer zuerst den PHP-Teil und schleusen dort Code ein - Code, der zum einen zum Auslesen aller gespeicherten PHP-Skripte führt (man benötigt ja schließlich die DB-Zugangsdaten), danach dann zum Zugriff auf die Datenbank.
Dein Verschlüsselungs- und Entschlüsselungscode würde dem Angreifer also zusammen mit den verschlüsselten Passworten in die Hände fallen. Wozu dann noch verschlüsseln? Klartextpassworte sind da eindeutig einfacher - sowohl beim Handling, weil sich keine Fehler in die Schlüsselfunktionen einschleichen, als auch vom Sicherheitsgefühl her: Du weißt, dass es keine Sicherheit gibt, also verhältst du dich auch nicht so, als gäbe es eine.
BTW ist SHA-1 nicht knackbar?
md5 auch!
"Knackbar" ist ein relativer Begriff.
Alle Hashfunktionen sind durch Rainbow-Tabellen angreifbar, in denen für ausgewählte uncodierte Worte deren Hashwert gespeichert ist. Auf diese Weise kann man im Glücksfall ganz leicht zurückermitteln, welches Wort gehasht wurde.
MD5 ist darüber hinaus noch in einem anderen Aspekt angreifbar: Man kann mehrere unterschiedliche uncodierte Strings herstellen, deren MD5-Hashwert identisch ist. Zuletzt wurde das mit einem deutlich längeren Dokument demonstriert, in dem der Gewinner der US-Präsidentenwahl genannt wurde: Alle 11 Kandidaten wurden in 11 Dokumenten als Sieger bezeichnet, der MD5-Hashwert aller 11 Dokumente war identisch.
Dieser Angriff funktioniert aber nur dann, wenn man in der Wahl seines "Ausgangsmaterials" frei ist. Es ist bislang noch kein Weg bekannt geworden, der es erlaubt, zu einem bekannten MD5-Hashwert mit unbekanntem Quellmaterial ein anderes Quellmaterial zu berechnen, welches den identischen Hashwert liefert.
Wenn MD5 das einzige ist, was leicht verfügbar genutzt werden kann, sollte man es nutzen, anstelle sich selbst etwas zu basteln. Die Anfälligkeit gegen Rainbow-Tabellen eliminiert man, indem man (unterste Sicherheitsstufe) einen konstanten Stringwert zum Passwort hinzufügt bzw. (bessere Sicherheitsstufe) zu jedem Passwort einen unterschiedlichen Stringwert hinzufügt (und den separat ungehasht speichert, sonst weiß man hinterher nicht mehr, welcher String zu einem konkreten Passwort hinzugefügt werden muß, um den Hash zu erhalten).
Sofern SHA-1 verfügbar ist, ist das die bessere Alternative zu MD5, soll aber laut den Kryptografen ähnliche Strukturen und Sicherheitsprobleme haben, wie MD5. Die Kombination von MD5 und SHA-1 (also zwei Hashwerte parallel zu berechnen und zu vergleichen) macht es einem Angreifer aber schon mal schwerer, was zu drehen.
Es ist sicherlich für Passwörter keine schlechte Idee, sowieso immer den höchsten verfügbaren Hashgenerator zu nutzen, ab SHA-256 aufwärts.
- Sven Rautenberg
"Love your nation - respect the others."