SuperGenPass

Dennis Schwerdel  security  web

Post Image

SuperGenPass ist ein Bookmarklet das für jede Webseite unterschiedliche Passwörter generiert.

Als moderner Mensch mit Erstwohnsitz im Internet hat man auf Hunderten von Webseiten Accounts. Damit die auch sicher sind braucht man für jeden einzelenen ein Passwort und genau hier fängt das Problem an: Kein Mensch kann sich sichere Passwörter zu Hunderten von Websites merken.

Zu diesem Problem gibt es zahlreiche Lösungsansätze die alle ihre eigenen Probleme haben:

  • Man nimmt das gleiche Passwort auf allen Seiten. Das ist prinzipiell keine gute Idee, denn auch wenn das Passwort super-sicher ist, ist unter den Webseiten bestimmt eine die nicht ordentlich mit dem Passwort umgeht. Wenn dann Hacker an das Passwort rankommen probieren die den Benutzernamen bzw. die Emailadresse und das Passwort auf verschiedenen Seiten aus. So wird aus einem gehackten Forenaccount schnell ein gehackter Amazon- oder Emailaccount.
  • Man hängt einen seitenspezifischen Text an das Passwort an, also z.B. den Namen der Seite. Diese Lösung hält zwar wahrscheinlich ein paar Hacker davon ab, das richtige Passwort für andere Seiten herauszufinden, aber eben nicht alle. Außerdem muss man sich dann zu jeder Webseite merken was man an das Passwort anhängen muss.
  • Man benutzt einen Passwortspeicher, das kann der Browser übernehmen, eine Textdatei oder eine spezielle Software. Dadurch kann man dann jeder Seite ein eigenes sicheres Passwort verpassen das man sich auch nicht merken muss. Trotzdem ergeben sich hier neue Probleme: Man muss die gespeicherten Passwörter auf dem eigenen Rechner schützen und evtl. sicher zwischen mehreren Rechnern synchronisieren.

SuperGenPass geht hier einen ganz anderen Weg: Das Passwort wird für jede Seite speziell aus der Domain und einem Master-Passwort generiert. Dann muss man sich nur noch dieses Master-Passwort merken, keine Passwörter werden gespeichert und trotzdem hat jede Seite ein völlig anderes Passwort.

Damit das ganze auch sinnvoll benutzbar ist, gibt es SuperGenPass als Bookmarklet. D. h. man legt sich ein Lesezeichen mit dem Javascript-Code von SuperGenPass als Adresse an und wenn man dann ein Passwort auf einer Webseite benötigt, klickt man darauf und ein Popup von SuperGenPass generiert dann das Passwort.

Passwort-Generierung

Das Verfahren mit dem die Passwörter generiert werden ist etwas kompliziert:

  • Bei der Domain werden sämtliche Subdomains entfernt, wobei spezielle Top-Level-Domains wie ''.co.uk'' erkannt werden.
  • Das Master-Passwort und die gekürzte Domain werden mit einem Doppelpunkt zusammengehängt, das ergibt den ersten Seed.
  • Dann wird ein Passwort folgendermaßen gebildet:
    • Der Seed wird mit dem MD5-Verfahren gehasht.
    • Der Hash wird mit einen modifizierten Base64 kodiert ("+" wird durch "9" ersetzt, "/" durch "8" und "=" durch "A").
    • Schritte 1 und 2 werden so lange wiederholt bis der Hash mit einem Kleinbuchstaben anfängt und mindestens eine Ziffer und einen Großbuchstaben beinhaltet, mindestens aber 10 mal. Bei jeder Wiederholung wird der letzte Hash als neuer Seed verwendet.
  • Der letzte Hash wird dann auf die gewünschte Länge gekürzt.
Hier kurz die Berechnung in Python, wenn die Domain bereits gekürzt wurde
def superGenPass(masterPassword, domainShort, length=10):
    import hashlib, re, base64
    h = masterPassword + ":" + domainShort
    i = 0
    while i < 10 or not (re.search("^[a-z]", h) and re.search("[A-Z]", h) and re.search("[0-9]", h)):
        h = hashlib.md5(h).digest()
        h = base64.b64encode(h).replace("+", "9").replace("/", "8").replace("=","A")
        i += 1
    return h[:length]

Sicherheit

Aus Sicherheitssicht ist das verwendete Hashverfahren MD5 ausreichend. Es gibt zwar besser geeignete Verfahren wie z.B. bcrypt aber auch bei MD5 ist das Master-Passwort relativ sicher, insbesondere weil das Verfahren mindestens 10 mal hintereinander angewendet wird. Das abgewandelte Base64 erzeugt Passwörter mit Ziffern, Klein- und Großbuchstaben aber leider ohne Sonderzeichen. Durch den Verzicht auf Sonderzeichen werden die Passwörter von fast allen Webseiten akzeptiert (manche fordern mittlerweile schon Sonderzeichen).

Durch die Implementierung als Bookmarklet läuft der Javascript-Code der das Passwort generiert im Kontext der Webseite ab, auf der man das Passwort eingeben will. Dadurch könnte diese Webseite das Master-Passwort bei der Eingabe oder während der Berechnung auslesen (Demo). Dieses Problem kann man umgehen wenn man SuperGenPass auf einer sicheren oder leeren Seite startet und die Domain manuell ändert, das ist natürlich etwas umständlich. Zu diesem Zweck gibt es SuperGenPass-Extensions für einige Browser: EnigmaPass für Chrome, Hash Password Generator für Firefox und SuperGenPass für Opera.

Software Info

Autor:Chris Zarate
Lizenz:GPL 2+
Programmiersprache:JavaScript
Betriebssystem:Browser
Beschriebene Version:2.0.1

Kommentare