Sven Rautenberg: Login-System

Beitrag lesen

Moin!

Ich vertraue auf folgendes System:

Ich nicht.

  • bei Accounterzeugung aus User-ID und Kennwort einen String erzeugen (z.B. mit Crypt: $hash=CRYPT($pass,$name); ), und daraus die MD5-Checksumme errechnen (z.B. $hash=MD5($hash);)

Dank crypt kürzt du dir das Ergebnis auf 8 gültige Zeichen - und daraus mit MD5 noch irgendeine 128-Bit-Checksumme zu machen ist dann etwas sehr sinnlos.

  • diese Checksumme zusammen mit User-ID in Datenbank ablegen
  • Login-Form zielt auf Script, welches aus eingegebenem Benutzernamen/Kennwort das Passwort neu errechnet

Oh Wahnsinn! Warum so kompliziert? Wenn du das Kennwort nicht als Klartext in der Datenbank ablegen willst, dann schicke es (und zwar allein) durch die MD5-Funktion oder alternativ auch durch SHA1 (hat noch ein paar Bits mehr, rechnet auch etwas anders - dürfte angesichts der normalerweise anzutreffenden Passwortlänge allerdings irrelevant sein) - da werden wenigstens alle eingegebenen Zeichen für die Prüfsumme berücksichtigt.

  • zur User-Id gehörigen Hash aus der Datenbank ziehen und mit dem neu berechneten vergleichen

Was spricht eigentlich dagegen, der Datenbank die Arbeit zu überlassen?
SELECT passende_felder FROM userdaten WHERE username=$USERNAME AND password=$MD5PASSWORD;

Du hast hier ein System vorgestellt, bei dem du mit viel kompliziert aussehenden Operationen letztendlich weniger Sicherheit erzeugt hast, als wenn du dir nichts kompliziertes ausgedacht hättest, sondern einfach md5() oder auch gar nichts genommen hättest, um das Passwort in die Datenbank zu schreiben bzw. zu vergleichen.

Das ist leider bei Kryptographie genau das Problem: Viele denken, sie wüßten, was sie da tun und entwickeln deshalb ihre eigenen Algorithmen mit großem Eifer.  Und wenn ihr Resultat dann einer strengeren Prüfung unterzogen wird, ist in vielen Fällen das Erstaunen groß, wenn der als so sicher und unknackbar gewähnte Mechanismus sich ganz spontan in Wohlgefallen auflöst.

Beispiele von sich blamierenden Profis gibt es viele:

  • Microsofts Excel-Verschlüsselung (in früheren Versionen, mittlerweile können sie es)
  • ZIP-Datei-Verschlüsselung
  • Die Deutsche Telekom mit ihrem Beitrag zum AES-Algorithmus

Ich bin kein Krypto-Experte. Ich würde niemals hingehen und sagen "Hallo, das Ding hier ist sicher". Umgekehrt aber auf potentielle Schwachstellen hinzuweisen ist wesentlich einfacher, weil man ja nicht für alle Angriffsformen zeigen muss, dass sie erfolglos bleiben, sondern nur für eine Angriffsform deren Erfolg.

Und genau deshalb rate ich von aufwendigen Eigenkonstruktionen im Kryptobereich ab, weil man sich damit sehr schnell selbst ein Bein stellen kann. MD5 ist ein anerkannter Standard, der im Moment als ausreichend sicher angesehen wird - warum also noch was Selbstausgedachtes draufsetzen?

  • Sven Rautenberg