Warum Längenbeschränkungen für Passwörter nichts taugen

Neulich hatte ich mich im Twitter wieder einmal darüber aufgeregt, dass ein Dienst die Länge meines Passworts auf 18 Zeichen beschränkt. Dabei kamen von mehreren Leuten nachfragen, ob das denn nicht auch reichen würde. Deswegen hier mal eine kleine Übersicht warum die Längenbeschränkungen immer sehr stark auf eine Sicherheitslücke hindeuten.

Fangen wir bei einem sehr generellen Thema an: Wie oft verwendet Ihr ein und das gleiche Passwort? Nutzt Ihr für alle Dienste (E-Mail Postfach, Facebook, Twitter, Dienst X) das gleiche Passwort oder habt Ihr für jeden Dienst ein eigenes Passwort? Ich nehme an, dass der Großteil meiner Leser jetzt in Gedanken antworten wird "Natürlich nutze ich ein Passwort. Wie sollte ich mir das sonst merken?". Durchaus eine sehr logische Herangehensweise, hat aber leider einen großen Nachteil. Erstens werdet Ihr das Passwort wohl kaum wie es sich gehört alle paar Monate spätestens ändern, da Ihr euch dann überall einloggen müsst um es zu ändern und weil Ihr euch wieder ein neues Passwort merken müsst.

Zweitens allerdings ist noch viel schlimmer: Gehen wir mal davon aus ich wollte an euer Passwort kommen. Ich könnte eine Webanwendung schreiben, die euch einen Mehrwert anbietet und dafür eine Anmeldung haben möchte. Ihr meldet euch also mit eurer E-Mail Adresse und eurem Passwort (was ja überall gleich ist) an. Ich wiederum speichere das Passwort im Klartext zusammen mit der E-Mail Adresse in der Datenbank. Da das Passwort das gleiche ist wie für eure E-Mail Adresse gehe ich danach zu GMX, GMail oder wo auch immer eure E-Mail Adresse ist und logge mich mit dem Passwort und eurer E-Mail Adresse ein. Schon kann ich alle E-Mails lesen und weiß auch wo ihr sonst noch angemeldet seid. Da das Passwort dort auch gleich ist, kann ich sämtliche eurer Accounts übernehmen, ohne dass Ihr groß etwas dagegen tun könnt.

Nachdem Ihr also das Worst-Case-Szenario kennt werdet Ihr mir wahrscheinlich zustimmen, dass es nicht wirklich schön ist wenn das Passwort im Klartext in der Datenbank steht. Natürlich könnte man argumentieren, dass die Dienstebetreiber ja nicht böse sind und das nicht machen. Ein Cracker hingegen kann durchaus in die Datenbank einbrechen und die Datensätze kopieren. Diese Person ist daran interessiert möglichst großen Schaden anzurichten.

Warum gehe ich also jetzt davon aus, dass das Passwort im Klartext in der Datenbank steht wenn die Länge begrenzt ist? Ganz einfach: Normalerweise wird ein sogenannter "Hash" eures Passworts gespeichert. Das ist eine Prüfsumme eures Passworts, aus der sich das Passwort nicht wieder errechnen lässt. Man kann die Prüfsumme aus eurem Passwort errechnen, nicht jedoch das Passwort aus der Prüfsumme. Im folgenden ein paar Beispiele mit der beliebtesten Methode (MD5-Summe) einen solchen Hash zu erzeugen:

Passwort: 'a'
Hash: 0cc175b9c0f1b6a831c399e269772661

Passwort: 'c5uSFgqT'
Hash: d4f6db40cf62ee2df4dbe3cb9d98dfdb

Passwort: 'XnGQD9LPAGf3FpRY9i6WxJAPCuArn4'
Hash: 8d58d08905dbffff3813880078083e43

Passwort: 'o4LrhqU96H1Gw3mafomn1hxkr1Lm51Jwj9n3y7XK3vGc7nzg5JDof4U2fNHzr7x9'
Hash: 2c66831462501a4e06207a335e8ade3f

Was man hieran sehr gut sehen kann: Die Hashs sind immer gleich lang. Es kommt dabei auch nicht darauf an, welche Methode man verwendet um diesen Hash zu erzeugen, da die meisten davon eine feste Länge des Hashs haben. Ergo es muss immer eine bestimmte Anzahl Zeichen in der Datenbank gespeichert werden, egal wie lang das Passwort vorher war. Welchen Grund gibt es also die Passwortlänge zu begrenzen? Richtig: Keinen!

Somit muss ich leider davon ausgehen, dass ein Dienst, der mir vorschreibt nur maximal 18 Zeichen im Passwort zu verwenden, ein Datenbankfeld mit der Länge 18 Zeichen hat, in dem er das Passwort im Klartext ablegt. In dem Fall würde er Probleme bekommen, wenn ich ein 20-Stelliges Passwort verwende, da es nicht mehr in das Datenbankfeld passt.

Genau hier sieht man auch recht deutlich warum ich allergisch darauf reagiere wenn ein Dienst meine Passwortlänge beschränkt. Bei mir ist es zwar nicht möglich sich mit dem Passwort für Dienst A auch bei Dienst B einzuloggen, da ich jedem Login ein individuelles Passwort zuweise aber leider handhaben das sehr viele Leute anders, so dass das Problem durchaus vorhanden ist.

Wie seht Ihr das? Habt Ihr überall verschiedene oder für alle Dienste nur ein Passwort? Wenn Ihr nur ein Passwort habt, ist es euch egal, dass der Administrator jedes Dienstes, der das Passwort im Klartext speichert, in jeden eurer Accounts schauen kann?