Qt-SESAM
SESAM — Super-Einfaches & Sicheres Authentifizierungs-Management
Qt-SESAM generiert und verwaltet Passwörter für dich — sicher und kostenlos.
Mit Qt-SESAM kannst du Passwörter für beliebige Dienste generieren und verwalten, zum Beispiel für Webseiten, PINs, Konten oder Apps. Die Passwörter werden in Echtzeit aus deinem Master-Passwort und einigen dienstspezifischen Einstellungen berechnet.
In dem so gut wie unmöglichen Fall, dass es einem Angreifer gelingt, die verschlüsselten Programmeinstellungen zu entschlüsseln, kommt er deshalb nicht an deine Passwörter, weil ihm dann immer noch das Master-Passwort fehlt. Für Dienste, bei denen man das Passwort nicht wählen kann, beispielsweise Pins von Bezahlkarten, kann Qt-SESAM auch klassisch eingegebene Passwörter speichern.
Qt-SESAM speichert die Login-Parameter verschlüsselt in einer lokalen Datei ab. Du kannst deine Einstellungen rechnerübergreifend auf dem aktuellen Stand halten, wenn du Qt-SESAM erlaubst, sie auf einem Cloud-Laufwerk abzulegen. Das geht auch mit Hilfe eines unter eigener Regie geführten Synchronisierungsservers. Die Daten bleiben auch hier von Ende zu Ende sicher verschlüsselt.
Qt-SESAM läuft unter Windows, Linux, and Mac OS X. Eine dazu kompatible Android-App ist so gut wie fertig.
Qt-SESAM herunterladen
- Für Windows und Mac OS X stehen Installer bereit.
- Linux-Anwender müssen Qt-SESAM aus dem Quellcode selber kompilieren.
Los geht's
Beim ersten Aufruf verlangt Qt-SESAM nach der Angabe eines Master-Passworts. Dieses Passwort ist der Generalschlüssel zur Entschlüsselung der Login-Daten und sollte daher nicht nur möglichst lang sein, sondern auch keinesfalls in falsche Hände gelangen. Das verwendete Verschlüsselungsverfahren (AES im CBC-Modus mit einem 256 Bit langen Schlüssel) gilt als sicher. Die Sicherheit aller mit Qt-SESAM verwalteten Daten hängt ausschließlich von der Stärke des Master-Passworts ab. Um sicherzustellen, dass du das Master-Passwort auch wirklich korrekt eingegeben hast, fragt dich Qt-SESAM zwei Mal danach:
Während du tippst, zeigt das Dialogfenster an, wie stark das bisher eingegebene Passwort ist.
Die Wertungen reichen von nutzlos
über schlecht
, mittelmäßig
, gut
und sehr gut
bis zu sagenhaft
, brutalst stark
und supercalifragilisticexpialigetisch
.
Der OK-Knopf wird erst aktiv, wenn du zwei Mal das gleiche Passwort eingegeben hast.
Erst synchronisieren!
Wenn du Qt-SESAM auf einem Computer das allererste Mal startest, wirst du gefragt, ob du einen Synchronisierungsserver betreiben oder deine Qt-SESAM-Einstellungen über eine Datei auf mehreren Rechnern synchron halten willst. Ist das der Fall, solltest du im Optionen-Dialog die Synchronisieren-Parameter setzen und dann sofort synchronisieren. Sonst läufst du Gefahr, später Probleme mit falschen Passwörtern zu bekommen.
Das liegt daran, dass Qt-SESAM beim allerersten Start einen sogenannten Schlüsselerzeugungsschlüssel (key generation key, KGK) per Zufall generiert. Aus dem KGK berechnet Qt-SESAM unter anderem die Dienstpasswörter. Auch wenn sonst alle Einstellungen gleich sind, führen unterschiedliche KGKs deshalb zu unterschiedlichen Dienstpasswörtern. Lädst du die Einstellungen — sie enthalten den KGK — jedoch zunächst aus der Synchronisierungsdatei oder vom Server, verwendet Qt-SESAM immer den gleichen KGK.
Synchronisierungsdatei und -server lassen sich in Optionen/Synchronisierung einstellen. Die Datei befindet sich sinnvollerweise in einem Cloud-Laufwerk.
Wie man den Server einrichtet, steht im c't-SESAM-Server-Wiki. Wenn du die Konfiguration beendet hast, klicke auf Verbindung prüfen.
Wenn die Einstellungen korrekt sind, zeigt Qt-SESAM die Zertifikatskette des Servers an. Bitte prüfe, ob die angezeigten Informationen mit den Einstellungen auf dem Server übereinstimmen. Am leichtesten geht das durch Vergleichen der Fingerabdrücke. Stimmen die Fingerabdrücke überein, kannst du die Zertifikate Akzeptieren.
Qt-SESAM versucht dann, die Einstellungen vom Server zu lesen. Ist alles glatt gegangen, zeigt Optionen/Synchronisierung neben dem Knopf Verbindung prüfen ein kleines Vorhängeschloss an.
Erste Schritte
Los gehts mit der Eingabe des ersten Logins. Die Logins werden nach dem Domain-Namen unterschieden, den du in die entsprechende Combobox einträgst:
Das generierte Passwort ändert sich während des Eintippens. Das hängt damit zusammen, dass der Algorithmus zur Passwortgenerierung den Domain-Namen in das generierte Passwort einflechtet. Gleiches gilt für den Benutzernamen.
Einzigartig und einfach
In den meisten Fällen sind die voreingestellten Passwortparameter vollkommen ausreichend (16 Zeichen, bestehend aus Ziffern, Klein- und Großbuchstaben). Wenn du mehr Kontrolle darüber ausüben willst, wie das Passwort zusammengesetzt wird, solltest du das Feature ausprobieren, das nur Qt-SESAM hat — den Easy Selector. Mit diesem Bedienelement kannst du Passwortlänge und -komplexität mit nur einem Mausklick festlegen. Ein rotes Feld bedeutet ein schlechtes Passwort, grün ein gutes. Verschiebe die Markierung in der Horizontalen, um die Länge zu ändern, in der Vertikalen, um die Zeichenmenge auszuwählen, aus denen das Passwort bestehen soll. Drei Zeichenmengen sind vorgegeben: Ziffern, Klein- und Großbuchstaben. Eine weitere kannst du selbst durch Eingabe in das Feld darunter bestimmen. Ein paar Sonderzeichen sind darin schon eingetragen:
Nettes Gimmick: Das Widget zeigt beim Darüberfahren mit der Maus an, wie lange ein Angreifer benötigen würde, um das Passwort auf dem Supercomputer Tianhe-2 (oder auf deinem Computer) zu knacken. Dabei ist schön zu sehen, dass vor allem die Passwortlänge zur Stärke beiträgt, weniger der Umfang der Zeichenmenge. Das liegt daran, dass die Länge exponenziell in die Berechnung der Stärke einfließt, Brute-Force-Angriffe darauf demnach exponenziell mit der Länge schwieriger werden.
Unter der Haube
Grundlagen
Schlüsselerzeugungsschlüssel (KGK)
Dreh- und Angelpunkt der Verschlüsselung, Entschlüsselung und Passwortgenerierung in Qt-SESAM ist der Schlüsselerzeugungsschlüssel (key generation key, KGK). Beim KGK handelt es sich um einen 512 Bit langen, zufällig bei ersten Start von Qt-SESAM auf deinem Computer ermittelten Wert. Aus ihm entstehen die generierten Passwörter sowie die Schlüssel zur Verschlüsselung der Programmeinstellungen.
Salt
Das Salt besteht ebenfalls aus Zufallsdaten. Es dient dazu, die generierten Passwörter und kryptografischen Schlüssel gegen Wörterbuch- und Rainbow-Table-Attacken abzusichern.
Schlüsselberechnung
Jedes Mal, wenn Qt-SESAM die Einstellungen in eine Datei schreibt oder über das Netz zum Synchronisierungsserver überträgt, werden sie per AES im CBC-Modus verschlüsselt. Qt-SESAM verwendet dabei die stärkstmögliche Schlüssellänge von 256 Bit.
Zu Beginn einer Ver- oder Entschlüsselung muss AES mit einem 128 Bit großen Wert initialisiert werden. Dieser sogenannte Initialisierungsvektor (IV) wird zusammen mit dem AES-Schlüssel aus dem Master-Passwort mit einem Verfahren namens Schlüsselerweiterung berechnet. Eine ausführlich überprüfte und sichere Schlüsselerweiterungsmethode ist die Password-Based Key Derivation Function 2 (PBKDF2). Die Eingaben (Master-Password, Salt) werden darin 32768 Mal in einen Keyed-Hash Message Authentication Code (HMAC) gespeist.
Das wiederholte Hashing erschwert Brute-Force-Angriffe erheblich: Während Qt-SESAM diesen Vorgang für den AES-Schlüssel nur einmal durchführen muss — was nahezu verzögerungsfrei gelingt — muss ein Angreifer das für jeden Versuch tun.
Qt-SESAM verwendet einen HMAC mit SHA-384, weil dieses Verfahren einen Hash mit 384 Bit Länge produziert, die auf 256 Bit für den AES-Schlüssel und 128 Bit für den IV aufgeteilt werden.
Passwort-Generierung
Mit einer ähnlichen Methode werden die Dienstpasswörter generiert: Zunächst hängt Qt-SESAM den KGK an den Domain- und Benutzernamen an. Das Resultat wird zusammen mit einem Salt in PBKDF2 gespeist.
Das Salt entsteht just in dem Moment, in dem du einen neuen Domain-Eintrag anlegst oder das generierte Passwort durch Drücken des Knopfes links neben dem Passwort-Feld erneuerst. Die Länge des Salt lässt sich unter Optionen/Diverse/Salt-Länge einstellen. Voreingestellt (und sinnvoll) sind 16 Byte. Mehr als 64 Byte verbessern die Sicherheit nicht.
Du kannst die Anzahl der PBKDF2-Iterationen in der Spinbox einstellen. Sie wird sichtbar, wenn du die Erweiterten Einstellungen ausklappst. Der Vorgabewert lässt sich über Optionen/Diverse/PBKDF2-Iterationen (Vorgabe) festlegen. Je mehr Iterationen, umso sicherer das Passwort. Höhere Werte führen nämlich zu längeren Berechnungszeiten, die wiederum den Aufwand für Brute-Force-Angriffe erhöhen. Die erhöhte Berechnungsaufwand schlägt sich allerdings auch in der Bedienbarkeit nieder: Je nach Rechner wirkt die Bedienung schon ab wenigen tausend Iterationen zäh. Der Default-Wert 8192 ist mehr als ausreichend. Zum Beispiel verwendet das WLAN-Sicherheitsprotokoll WPA2 4096 Iterationen.
Das Resultat der Operation ist ein 512 Bit langer Schlüssel
. Aus diesem Wert berechnet Qt-SESAM schließlich das Dienstpasswort (siehe die Methode Password::mix()).
Verschlüsselung
Das Verschlüsselungsverfahren von Qt-SESAM wirkt auf den ersten Blick ziemlich kompliziert, ist aber vergleichsweise einfach (siehe Bild unten):
- Weil Qt-SESAM den KGK zum Berechnen der Dienstpasswörter benötigt, muss er zusammen mit den Domain-Einstellungen abgespeichert werden.
Weil der KGK außerdem für die Verschlüsselung der Domain-Einstellungen benötigt wird, muss er separat verschlüsselt werden.
Zunächst wird ein zweites Salt/IV-Paar für später generiert und dem KGK vorangestellt.
Zur der Verschlüsselung kommen der Schlüssel und der IV zum Einsatz, die aus
Crypter::makeKeyAndIVFromPassword()
hervorgegangen sind. Die Daten werden demnach effektiv mit deinem Master-Passwort verschlüsselt. - Der 256-Bit-AES-Schlüssel wird aus dem KGK mit Hilfe von PBKDF2 berechnet. Das in Schritt 1 generierte Salt schützt den Schlüssel dabei gegen Wörterbuch- und Rainbow-Table-Attacken.
- Die Domain-Einstellungen liegen intern im JSON-Format vor. Das ist ein recht aufgeplustertes Format, das sich leicht auf einen Bruchteil seiner ursprünglichen Größe komprimieren lässt. Die Komprimierung spart nicht nur Speicherplatz, sondern erschwert auch Angriffe gegen den Schlüssel, weil die Daten bei jedem Crack-Versuch dekomprimiert werden müssen.
- Der Schlüssel aus Schritt 2 wird zusammen mit dem in Schritt 1 ausgewürfelten IV zum Verschlüsseln der Domain-Einstellungen herangezogen, nachdem sie komprimiert wurden.
- Nun kann Qt-SESAM die verschlüsselten Daten zusammenfügen: Das erste Byte ist eine Versionskennung (derzeit wird nur
0x01
verwendet). Darauf folgt das Salt, das verwendet wurde, um den Schlüssel und IV aus dem Master-Passwort zu berechnen. Dann folgen der verschlüsselte KGK von Schritt 1 und das Ergebnis von Schritt 4. Dieses Komplettpaket kann man nun sorglos abspeichern oder übertragen, ohne Gefahr zu laufen, dass es ein Hacker in endlicher Zeit knacken kann, selbst wenn er dauerhaften Zugang zu Supercomputern hat. Die Sicherheit der im Paket enthaltenen Daten hängt einzig und allein von der Stärke des Master-Passworts ab — und wie gut du es vor allzu neugierigen Blicken schützt.
Entschlüsselung
Die Verschlüsselung läuft in umgekehrter Richtung ab. Als Eingabe ist nur das Master-Passwort vonnöten. Alle anderen währenddessen erforderlichen Werte werden aus den verschlüsselten Daten Stück für Stück extrahiert:
- Nach der Prüfung, ob die Versionskennung
0x01
ist, zerlegt Qt-SESAM die verschlüsselten Daten in ihre drei Hauptbestandteile. - Das Master-Passwort ergibt zusammen mit dem Salt den Schlüssel und den IV, die erforderlich sind, um …
- … den verschlüsselten KGK, das Salt und den IV zu entschlüsseln.
- Mit dem Salt und dem KGK lässt sich nun der AES-Schlüssel berechnen.
- Mit diesem Schlüssel und dem IV von Schritt 3 kann Qt-SESAM jetzt die Domain-Einstellungen entschlüsseln. Nach der Dekomprimierung stehen sie zur weiteren Verwendung bereit.
Wichtige Informationen
- FAQ
- Qt-SESAM unter Linux kompilieren (Englisch)
- Qt-SESAM unter Windows kompilieren (Englisch)
- Mitwirken an Qt-SESAM (Englisch)
Literatur
- Johannes Merkert, Fensterbeschwörung, PySide: grafische Programme mit Python und Qt, c't 1/16, S. 178
- Oliver Lau, Sesam, synce dich!, Den c't-SESAM-Synchronisierungsserver installieren, c't 23/15, S. 182
- Johannes Merkert, Passwort-Erinnerer, Programmieren lernen mit Python, Teil 2, c't 21/15, S. 158
- Oliver Lau, Sesam, öffne dich!, Passwörter verwalten mit c't SESAM, c't 20/15, S. 182
- Johannes Merkert, Schlangenbeschwörung für Einsteiger, Programmieren lernen mit Python, c't 18/15, S. 118
- Oliver Lau, Aus kurz wird lang, Passwörter sicher speichern mit Hilfe von PBKDF2, c't 17/15, S. 180
- Jürgen Schmidt, Eines für alle, Ein neues Konzept für den Umgang mit Passwörtern, c't 18/14, S. 82