PassCalc: Der Passwort-Berechner

Es hat mich schon lange genervt: Wie kriegt man es hin, sichere Passwörter zu verwenden und sich diese trotzdem noch merken zu können? Es gibt da mehrere Ansätze, die man verfolgen kann. Alle mir bekannten Systeme haben jedoch die Schwäche, dass man weitere Passwörter erraten kann, sobald man das eigentliche System verstanden hat. Das ganze kann man noch dadurch erschweren, indem man ein festes - möglichst sicheres - Passwort an den Anfang setzt: Doch sobald das Passwort bekannt ist (z.B. weil eine Passwort-Datenbank gehackt wurde), ist auch dieser Schutz ausgehebelt.

Aus diesem Grund habe ich mich gestern Abend mal dran gesetzt und einen Passwort-Berechner programmiert. Die Idee dahinter ist relativ simpel: Man entscheidet sich für ein festes Passwort (oder auch mehrere, wenn man paranoid ist). Zudem wählt man für jeden Login, der einem so begegnet eine Information. Diese kann z.B. der Domainname, der verwendete Loginname, irgendwelche Kurzformen oder ähnliches sein. Diese Information wird nun genommen und mit dem gewählten Passwort verschlüsselt. Dabei heraus kommt eine neue Information, die möglichst den Anforderungen für ein sicheres Passwort entsprechen sollte.
Sollte dieses generierte Passwort nun bekannt werden, entstehen keinerlei Probleme für alle anderen passwortgeschützten Dienste die man nutzt, da aus dem gestohlenen Passwort nicht das ursprüngliche Passwort wiederhergestellt werden kann, um weitere Passwörter zu erraten.

Für alle, die es technisch mögen, gibt es hier noch eine Erläuterung, was nun genau mit den eingegebenen Daten passiert. Ich muss zugeben, dass meine Variante, die Sonderzeichen zu behandeln, ziemlich einfach gestrickt ist. Aber für meine Bedürfnisse war es so ausreichend.

1
2
3
4
5
6
7
8
9
10
11
  Temp_Information = ""
  while (LengthOf(Temp_Information) < 128) do
    Temp_Information = Temp_Information + MD5Hash(Base64Encode(Information))

  Temp_Passwort = ""
  while (LengthOf(Temp_Passwort) < 128)
    Temp_Passwort = Temp_Passwort + MD5Hash(Base64Encode(Passwort))

  Temp_Ergebnis = Base64Encode(AESEncrypt(Temp_Passwort, Temp_Information))

  Ergebnis = HandleSpecialChars(Temp_Ergebnis)

Wenn wir nun beispielsweise das Passwort "test" benutzen, und die Information "test1" wählen, erhalten wir (bei Deaktivierung der Sonderzeichen) folgendes Passwort:

1
QVNxTopIHJqEJnHKuNaaREFTcU6KSByahCZxyrjWmkRBU3FOikgcmoQmccq41ppEQVNxTopIHJqEJnHKuNaaREFTcU6KSByahCZxyrjWmkRBU3FOikgcmoQmccq41ppEQVNxTopIHJqEJnHKuNaaREFTcU6KSByahCZxyrjWmkQ=

Wählen wir hingegen als Information den Text "test2", erhalten wir dieses Passwort:

1
mgmuAX7honvsg1e9500r9ZoJrgF04aJ77INXveftK0WaCa4BfuGie0yDV73n7Sv1mgmuAX7honvsg1e9500r9ZoJrgF04aJ77INXveftK0WaCa4BfuGie0yDV73n7Sv1mgmuAX7honvsg1e9500r9ZoJrgF04aJ77INXveftK0U=

Ihr habt am Ende wahrscheinlich das "=". Das ist ein Überbleibsel der Base64-Encodierung, die ich übersehen habe. Dieses werde ich in einer zukünftigen Version eventuell noch beseitigen - rein aus Konsistenzgründen (keine Sonderzeichen halt).

Was angemerkt werden sollte: Im Gegensatz zu zufällig generierten Passwörtern, sind die mit diesem Programm generierten Passwörter reproduzierbar - genau darin liegt der Sinn in dem Ganzen. Die "Zufälligkeit" der schlussendlich generierten Passwörter basiert primär auf der Entropie, die durch den MD5-Hash und durch die AES-Verschlüsselung erzeugt wird.

Wie immer könnt ihr natürlich sowohl die kompilierte Binärversion, als auch den Quelltext herunterladen. Da ich für die AES-Verschlüsselung Martin Offenwangers GPL-lizensierte Klasse verwendet habe, steht natürlich auch diese Anwendung unter der GPL.

Was haltet iht von dem Programm? Wie wählt ihr sichere Passwörter für die unzähligen Webdienste aus? Habt ihr irgendein spezielles System? Falls ja: Wären andere Dienste gefährdet, wenn man eurer System herausfindet? Würdet ihr euch für die Passwort-Generierung auf ein Programm verlassen wollen?

Zum Schluss noch etwas Rechtliches:
Der Autor dieses Programms haftet nicht für Schäden an Soft- oder Hardware oder Vermögensschäden, die durch das Benutzen des Programms entstehen, es sei denn, diese beruhen auf einem grob fahrlässigen oder vorsätzlichen Handeln des Autors, seiner Erfüllungsgehilfen oder seiner gesetzlichen Vertreter.
Berechnende Grüße, Kenny