Passwortmanager mit Security Keys verwenden
Inhalt
Der Passwortmanager#
Das Netz ist voll mit verschiedenen Lösungen zum Passwortmanagement. Das ist Nachvollziehbar, denn wir haben immer mehr Accounts und niemand merkt sich eine dreistellige Anzahl an Passwörtern freiwillig. Kommen wir also gleich zur Sache:
Ich habe mir aus dem ganzen Wust drei Passwortmanager nach meinen Kriterien (Sicher, komfortabel, quelloffen, selbstverwaltbar) angesehen und wollte hieraus eine Wahl treffen:
- Firefox password manager (Online/Offline)
- Vaultwarden (Online)
- KeePassXC/KeePassDX (Offline)
Kein Firefox Password manager#
Firefox schied aus, da ich zum Entsperren meinen Hardware Security Key verwenden und mir kein langes Hauptpasswort merken möchte. Dafür sprachen hingegen die sehr einfache Verwendung, das automatische Ausfüllen von Passwortfeldern und die Möglichkeit der Synchronisation, wenn auch über eine fremde Infrastruktur.
Kein Vaultwarden#
Vaultwarden hatte ich lange im Visier. Es benötigt für den Betrieb im lokalen Netzwerk viele Vorbedingungen und Software drum herum, Stichworte HTTPS im LAN, ACME-Challenge. Daher ist im LAN ein eigener kleiner Rechner vorzusehen und idealerweise verfügt man sogar über einen virtuellen pricaten Server, der den HTTPS-Verkehr terminieren kann.
Dafür unterstützt Vaultwarden dann sogar die super bequeme Anmeldung per Passkey und kann die Passwortdatenbank zwischen allen Geräten im Netzwerk synchronisieren.
Doch am Ende scheute ich die aufwendige Einrichtung und die neuen Abhängigkeiten und Softwarepakete, die ich alle hätte zusätzlich warten müssen.
KeePassXC#
Ich habe mit verschiedenen Varianten von KeePass herumgespielt und mich am Ende für KeePassXC entschieden. Das Gesamtpaket fühlt sich einfach runder und moderner an, ich kann die Software betriebssystemunabhängig nutzen und die benötigten Erweiterungen zur Verwendung mit HSKs sind auch gleich dabei.
Einrichtung von KeePassXC mit einem HSK#

Üblicherweise erstellt man den geheimen Schlüssel auf dem Hardware Security Key und kopiert ihn dann in die Eingabemaske von KeePassXC - aber der Reihe nach, denn der Vorgang hängt ein wenig vom verwendeten HSK ab.
Yubikey#
Yubico hat eine Anleitung eigens für die Verwendung mit KeePass vorbereitet. Ein Yubikey hat zwei variabel verwendbare Slots, welche verschiedene kryptografische Funktionen unterstützen. In der Funktionsauswahl ist Challenge-response: program a challenge-response credential anzuwählen. Anschließend erzeugt der Yubikey einen 20-byte HEX code, welcher anschließend nach KeePassXC kopiert werden kann.
Wichtig dabei ist, dass der angezeigte Code später nicht mehr extrahiert werden kann. Soll die Datenbank also einen Zweitschlüssel bekommen (was anzuraten ist), so muss der Code notiert und anschließend ebenfalls im Zweitschlüssel hinterlegt werden.
Ich empfehle beim Yubikey, das Häkchen bei requires touch wegzulassen. Ansonsten muss man bei jeder Verwendung eines Passwortes den Yubikey berühren. Viel nerviger noch ist, dass für das Hinzufügen oder Ändern eines Passworteintrages ebenfalls ein Berühren des Schlüssels notwendig wird.
Nitrokey#
Nitrokey sieht die Erzeugung des Geheimnisses als 20-byte base32 code vor. Er kann genau ein HMAC-Geheimnis aufbewahren.
Auch Nitrokey hat eine Anleitung zum Hinterlegen des HMAC-Secrets für die Verwendung mit KeePassXC online. Wie bei Yubikey auch basiert diese Anleitung auf der Verwendung der App.
Kompatibilität Yubikey - Nitrokey#
Idealerweise würde ich nun den auf dem Yubikey erzeugten Schlüssel auf dem Nitrokey hinterlegen oder umgekehrt. So hätte ich einen Zweitschlüssel und könnte mit beiden auf die KeePassXC-Datenbank zugreifen.
Doch oh weh, der Nitrokey akzeptiert das Geheimnis des Yubikey nicht:

Genau so verhält es sich, wenn ich ein mit dem Nitrokey erzeugtes Geheimnis auf dem Yubikey hinterlegen will:

Hierfür benötige ich Abhilfe. Ich erstelle also ganz pragmatisch eine zweite Passwortdatenbank. Beide sollen denselben Inhalt haben, verwenden aber verschiedene Schlüssel zum Öffnen. Später lerne ich, dass das gar nicht nötig ist; dennoch hier erstmal meine provisorischen Lösungen.
Holzweg A: Einträge aus der Datenbank klonen#
Ich befülle die erste Datenbank mit Passwörtern, welche ich in Gruppen sortiere. Anschließend klone ich die Gruppe, öffne die zweite Datenbank und ziehe den Klon per drag-and-drop herüber.
Nachteile: Ich muss den Vorgang für jede Gruppe wiederholen, denn drag-und-drop für die root-Gruppe ist nicht vorgesehen. Bei jeder Änderung in Datenbank_yubikey muss ich Datenbank_nitrokey ebenfalls anpassen.
Das ist sehr anstrengend, wenn die Datenbank sich noch im Aufbau befindet.
Holzweg B: Die ganze Datenbank kopieren und HMAC updaten#
Hierfür speichert man die HMAC-Secrets der beiden Hardware Security Keys im Passwortmanager ab. Bei einer Änderung der Datenbank fertigt man eine Kopie der Datenbankdatei an, öffnet sie und kopiert sich das Secret des jeweils anderen HSK. Nun klickt man auf Database->Database Security->Change Challenge-Response und gibt das Secret dort ein. Schon funktioniert die Datenbank mit dem anderen Schlüssel.
Nachteil: Manuelle Aktualisierung beider Datenbanken erforderlich. Jedes mal ist challenge-response neu einzurichten.
Lösung: Konvertieren des HMAC-Secrets#
Ich fragte mich, ob ich für den Nitrokey zur Speicherung des HMAC-Geheimnisses für meinen Nitrokey auch die Kommandozeile statt der App verwenden kann. Kommanodzeilenanwendungen wie nitropy verfügen meist über mehr Optionen als ihr GUI-App-Pendant. Vielleicht kann ich damit das Kompatibilitätsproblem lösen. Hier der Link zur Installation von nitropy.
Auf der Suche nach einer geeigneten Dokumentation stoße ich auf diesen interessanten Post zum Thema challenge-response. Dort wird mir klar, was softwareaffine Leute schon lange wissen. Zumindest, falls sie entweder mal das Thema Kryptografie gestreift haben oder nahe an der Hardware unterwegs sind:
Daten der Größe von
20 Bytelassen sich inhexmit 40 Zeichen UND inbase32mit 32 Zeichen darstellen.
Folglich lässt sich ein HMAC-Geheimnis konvertieren und damit sowohl auf dem Yubikey als auch auf dem Nitrokey ablegen. Dafür verwende ich das kleine Werkzeug xxd und lasse mir aus dem Hexcode des Yubikey eine base32-Phrase für meinen Nitrokey erzeugen.
# open a new terminal
# make sure the secrets are not saved to history (command for zsh)
history -p
# c0ffee = secret hex key
# xxd convert input to binary (-r), output as plain hexdump (-p)
# interpret as base32 string
echo -n 'c0ffee' | xxd -r -p | base32
YD764===
# close terminal
Alternativ funktioniert auch der Rückweg:
# open a new terminal
# make sure the secrets are not saved to history (command for zsh)
history -p
# YD764=== = secret base32 key
echo -n 'YD764===' | base32 -d | xxd -p
c0ffee
# close terminal
KeePassXC: Passwörter schön geordnet hinterlegen#
Verzichtet man wie ich auf Dialoge wie “mit Google einloggen” bei Drittanbietern, so sammeln sich im Laufe des Lebens unter Umständen eine Menge Passwörter an. Zum vereinfachten Finden und verwenden der Passwörter sowohl mobil als auch auf dem Desktop bietet es sich an, sinnvolle Gruppen zu erstellen.
Passwortfamilien#
Nach ein paar Experimenten hat sich folgendes Schema für Titel bewährt, wenn ich mehrere verwandte Passwörter speichern möchte:
baseapp.attribute.specialization
So würde aus den Zugängen für mein gehärtetes Gitea-setup:
gitea.login.schallbert
gitea.login.testuser
gitea.runner.registration
gitea.recoverykey
Auf diese Weise bleiben verwandte Passwörter schön beisammen.
Gruppierung#
Ich halte folgende Gruppen von Passwörtern für sinnvoll:
| Group | Description |
|---|---|
| Devices | Computer, phone, router, keys |
| Finance | Banks, credit cards, insurances, payment |
| Identity | Email, identity providers, single sign-in |
| Shopping | Online stores, streaming, subscriptions |
| Games | Platforms, launchers, servers |
| Social | Forums, Messengers, Social networks |
| Backup | Recovery keys, licenses, passphrases |
Dabei achte ich darauf, nicht zu viele Untergruppen zu erstellen. Gerade in der Mobilansicht ist man sonst schnell verwirrt.

Icons 🔑#
KeePassXC bietet die wunderbare Möglichkeit, Favicons der Zielwebsite herunterzuladen und als Symbol zu verwenden. Damit gelingt die Navigation im Passwortmanager noch einfacher.
Die Favicons sind allerdings alles Bitmaps. Möchte man hochqualitative Vektorgrafiken verwenden bietet sich an, unter “Choose Icon” den Pfad eines Icon Packs anzugeben. Ich habe mir dafür die Aegis icons heruntergeladen und bin damit sehr zufrieden.