Passwortmanager "KeepassXC" mit Security-Token "Nitrokey" öffnen

Firewalls, Virenscanner, ... zusätzliche Sicherheit
Rupert
Beiträge: 6
Registriert: So 10. Jul 2022, 16:10
Been thanked: 3 times

Passwortmanager "KeepassXC" mit Security-Token "Nitrokey" öffnen

Beitrag von Rupert »

Eines vorneweg: Neben der Inbetriebnahme des Nitrokeys, sind nur drei der nachfolgenden Befehlszeilen wichtig. Zwei, zum Erstellen der KeepassXC-Datenbank (1., 2.) und eine, um dieselbe zu öffnen (3.). Da ich, insbesondere beim Thema Verschlüsselung, der Meinung bin, man sollte genau wissen, was man tut, ist das Wiki etwas umfangreicher geworden, als ursprünglich geplant.


Einführung
Mittlerweile haben wohl die meisten von uns zahlreiche Online-Konten für Online-Shops, Webmailer, Internetforen und Ähnlichem. Um diese Zugangsdaten sicher zu verwalten eignen sich Passwortmanager, wie z.B. das quelloffene KeepassXC sehr gut. Selbstredend muss das Masterpasswort, zum Öffnen des Passwortmanagers höchsten Sicherheitsansprüchen genügen, da ein schwaches Masterpasswort die Sicherheit aller gespeicherten Zugangsdaten gefährdet.

Als Ersatz für sichere - und damit meist schwer zu merkende - Passwörter eignen sich Security-Tokens. Diese garantieren einen sicheren Identitätsnachweis, wie er z.B. bei der Zwei-Faktor-Authentisierung (2FA) zum Einsatz kommt.

KeepassXC unterstützt Security-Tokens, allerdings nur den Marktführer YubiKey. Ich bevorzuge jedoch den Nitrokey. Im Gegensatz zum YubiKey sind beim Nitrokey Hard- und Firmware als „Open Source“ veröffentlicht. Das ermöglicht unabhängigen Sicherheitsexperten, die Fehlerfreiheit des Nitrokeys zu überprüfen. Anwender sind damit nicht allein auf die Versprechen des Herstellers angewiesen.

Obwohl KeepassXC den Nitrokey nicht direkt unterstützt, ermöglicht ein Trick die Zusammenarbeit beider Systeme. Dazu dient das auf dem Nitrokey gespeicherte OpenPGP-Schlüsselpaar.

Für den Einsatz mit KeepassXC eignen sich die Nitrokey-Modelle „Start”, „Pro 2“ und „Storage 2“.


Funktionsprinzip
  1. Ein sicheres Passwort für die KeepassXC-Datenbank wird, mit dem öffentlichen Schlüssel des Nitrokeys verschlüsselt, in einer Passwort-Datei gespeichert.
  2. Mit der Passwort-Datei wird eine KeepassXC-Datenbank erstellt.
  3. Zum Öffnen der KeepassXC-Datenbank wird die Passwort-Datei mit dem geheimen Schlüssel des Nitrokeys entschlüsselt und an KeepassXC übergeben.
Ohne die Notwendigkeit, das Datenbank-Passwort manuell einzugeben, kann es beliebig lang und komplex sein. Zum Entschlüsseln wird der Anwender nach der Benutzer-PIN des Nitrokeys gefragt. Da die Benutzer-PIN - wie bei einer EC-Karte - nach dreimaliger Falscheingabe automatisch gesperrt wird, bietet ein sechsstelliger Zahlencode zuverlässigen Schutz.


Vorbereitungen
Für den Einsatz des Nitrokeys müssen zunächst die notwendigen Programmpakete unter Linux installiert und ein OpenPGP-Schlüsselpaar erstellt werden, wie in der Nitrokey-Dokumentation beschrieben.
Für die Nitrokeys Pro und Storage beschränkt sich die Installation unter Debian und dessen Derivaten auf folgende Pakete aus dem Repository:

Code: Alles auswählen

sudo apt update && sudo apt install libccid scdaemon nitrokey-app -y
Beim Nitrokey Start ist die Installation etwas anders - weitere Details in der Online-Dokumentation.

Es spielt keine Rolle, ob auf dem Nitrokey das OpenPGP-Schlüsselpaar als RSA- oder ECC-Schlüssel erzeugt wird.
Ich empfehle jedoch ECC-Schlüssel, da diese bei gleichem Sicherheitsniveau mit deutlich kürzeren Schlüssellängen auskommen, was sich durch eine spürbar geringere Reaktionszeit bemerkbar macht.

Für das Arbeiten mit dem OpenPGP-Schlüsselpaar muss auf dem PC das Programm gpg installiert sein, was mit folgendem Kommando überprüft werden kann.
   

Code: Alles auswählen

gpg --version
Sollte `gpg` noch nicht installiert sein, kann das mit folgendem Befehl nachgeholt werden.
   

Code: Alles auswählen

sudo apt install gpg
Ob auf den Nitrokey zugegriffen werden kann, zeigt der folgende Befehl.
   

Code: Alles auswählen

gpg --card-status
Sollte das Kommando kein Ergebnis zeigen, den Nitrokey kurz ab- und neu einstecken, dann das Kommando wiederholen.

Wird der Nitrokey korrekt erkannt, meldet er sich mit seinen Statusinformationen.
Die Zeile Key attributes zeigt, dass auf diesem Nitrokey ECC-Schlüssel vom Typ Brainpool mit einer Schlüssellänge von 512 Bit erzeugt wurden.
Die Zeile Signature key zeigt den Fingerprint des Schlüssels, den wir später zum Verschlüsseln benötigen.

Code: Alles auswählen

user@deb11:~$ gpg --card-status
Reader ...........: 20A0:4109:0000000000000:0
Application ID ...: D1860001242303030005000073C10000
Application type .: OpenPGP
Version ..........: 3.3
Manufacturer .....: ZeitControl
Serial number ....: 000082A5
Name of cardholder: [nicht gesetzt]
Language prefs ...: de
Salutation .......: 
URL of public key : [nicht gesetzt]
Login data .......: [nicht gesetzt]
Signature PIN ....: zwingend
Key attributes ...: brainpoolP512r1 brainpoolP512r1 brainpoolP512r1
Max. PIN lengths .: 64 64 64
PIN retry counter : 3 0 3
Signature counter : 4
KDF setting ......: off
Signature key ....: D5FF 1F24 2453 A3A4 78EF  6512 0635 326F 3446 172F
      created ....: 2022-09-03 15:10:22
Encryption key....: B176 C5F5 D1EC 0A34 112B  B31A 435D 90D1 3AF7 460C
      created ....: 2022-09-03 15:10:22
Authentication key: C73D DC31 FEED 2594 9057  433C 0569 A09C 0766 82AC
      created ....: 2022-09-03 15:10:22
General key info..: [none]
Funktioniert der Nitrokey, muss als letzte Vorbereitung noch KeepassXC installiert werden. Am einfachsten installiert man es über die Paketverwaltung der Linux-Distribution. Bei Debian und dessen Derivaten mit dem Kommando:

Code: Alles auswählen

sudo apt install keepassxc -y


Erstellen der KeepassXC-Datenbank

1. Erster Schritt: 
Als Passwort für die KeepassXC-Datenbank, erstellen wir eine zufällige Zeichenfolge mit dem Kommandozeilen-Tool keepassxc-cli.

Code: Alles auswählen

keepassxc-cli generate --length 64 -l -U -n | gpg --encrypt --recipient 3446172F --output ~/keepassxc-pw_encrypted.gpg
Das Kommandozeilen-Tool von KeepassXC `keepassxc-cli` erzeugt eine zufällige Zeichenfolge (`generate`) mit einer Länge von 64 Zeichen (`--length 64`). Die Zeichenfolge enthält Kleinbuchstaben (`-l` lowercase characters), Großbuchstaben (`-U` uppercase characters) und Ziffern (`-n` numbers). Sonderzeichen (`-s` special characters) sollte man nicht im Datenbank-Passwort verwenden. Diese könnten das später verwendete Kommando `printf` aus dem Tritt bringen.

Das Ergebnis wird über das Pipe-Kommando, den senkrechten Strich (`|`), an das Verschlüsselungsprogramm `gpg` übergeben. Dieses verschlüsselt (`--encrypt`) die übergebene Zeichenfolge mit dem öffentlichen Schlüssel des Nitrokeys (`--recipient 3446172F`). Gespeichert (`--output`) wird das Ergebnis im Homeverzeichnis des angemeldeten Nutzers (`~/`) in der Datei `keepassxc-pw_encrypted.gpg`.

(Die ID hinter `--recipient` ist der Wert in der Zeile „Signature key“ des Kommandos `gpg --card-status`, ohne Leerzeichen. Man muss nicht unbedingt die gesamte ID angeben, es genügen die letzten 8 Zeichen, sofern diese innerhalb des gpg-Keyrings eindeutig sind.)

Mit folgenden Befehl können Sie das Datenbank-Passwort aus der verschlüsselten Passwort-Datei auslesen. Dabei wird die Benutzer-PIN des Nitrokeys abgefragt.

Code: Alles auswählen

gpg --decrypt ~/keepassxc-pw_encrypted.gpg
Ich empfehle dringend, das unverschlüsselte Datenbank-Passwort auszudrucken und an einem sicheren Ort aufzubewahren. Sollte einmal der Nitrokey verloren oder kaputt gehen, ist dieser Ausdruck die einzige Möglichkeit, die Keepass-Datenbank zu öffnen.

Bitte speichern Sie keinesfalls das unverschlüsselte Datenbank-Passwort auf Ihrer Festplatte. Dies wäre ebenso so unsinnig, wie den Schlüssel Ihrer Wohnungstür unter die Fußmatte zu legen. Erschwerend kommt hinzu, dass bei modernen SSD-Laufwerken, Dateien nicht zuverlässig unwiederbringlich gelöscht werden können.

2. Zweiter Schritt:
Mit der verschlüsselten Passwort-Datei wird die Keepass-Datenbank erstellt.

Code: Alles auswählen

printf "`gpg --quiet --decrypt ~/keepassxc-pw_encrypted.gpg`\n`gpg --quiet --decrypt ~/keepassxc-pw_encrypted.gpg`" | keepassxc-cli db-create -p ~/keepassxc-datenbank.kdbx 2> /dev/null
Die Befehlszeile sieht verwegen aus, ist aber relativ schnell erklärt:

Die Keepass-Datenbank wird mit dem Kommando am Ende der Befehlszeile erstellt.

Code: Alles auswählen

keepassxc-cli db-create -p ~/keepassxc-datenbank.kdbx
`keepassxc-cli` erstellt (`db-create`) eine Datenbank mit Namen `keepassxc-datenbank.kdbx` im Home-Verzeichnis des Benutzers. (Der Datenbankname ist natürlich frei wählbar). Geschütz wird die Datenbank mit einem Passwort (`-p`).

Für sich alleine eingegeben, würde `keepassxc-cli` an der Konsole auf die Eingabe des Datenbank-Passworts durch den Benutzer warten. Wir wollen das Datenbank-Passwort aber nicht manuell eingeben, sondern die im ersten Schritt erstellte Zeichenfolge als Passwort übergeben. Dies erledigt das folgende Befehlsfragment.

Code: Alles auswählen

`gpg --quiet --decrypt ~/keepassxc-pw_encrypted.gpg`
Es entschlüsselt (`--decrypt`) die Passwortdatei `keepassxc-pw_encrypted.gpg` mit dem geheimen Schlüssel des Nitrokeys und gibt das Ergebnis dieser Aktion (also das unverschlüsselte Datenbank-Passwort) als Zeichenkette zurück. Der Schalter (`--quiet`) sorgt dafür, dass nur das unverschlüsselte Datenbank-Passwort übergeben wird und nicht zusätzlich die Metadaten der Passwortdatei. Die „Backticks“, die nach links kippenden Hochkommata (`), sorgen dafür, dass das Resultat des Befehls und nicht das Befehlsfragment selbst als Argument zurückgegeben wird.
Dass `gpg` den geheimen Schlüssel des Nitrokeys für die Entschlüsselung benötigt und nicht irgendeinen anderen, liest `gpg` aus den Metadaten von `keepassxc-pw_encrypted.gpg`.

Wie bei Passwortdefinitionen üblich, erwartet auch `keepassxc-cli` zweimal nacheinander die Eingabe des Passworts. Darum ist das Befehlsfragment zur Entschlüsselung der Passwortdatei zweimal angegeben, getrennt durch das Steuerzeichen „New Line“ (`\n`), welches das Drücken der Eingabetaste simuliert.

`printf` ist ein Kommando zum Formatieren von Zeichenketten. Hier bringt es alles, was zwischen den doppelten Anführungszeichen (") steht in die erforderliche Form und „piped“ es als Passworteingabe zu `keepassxc-cli`.

Die Sequenz ganz am Ende ist rein kosmetischer Natur.

Code: Alles auswählen

2> /dev/null
Sie schickt nichtssagende Fehlermeldungen zum „Null-Device”, also ins Daten-Nir­wa­na.
Die Befehlszeile zum Erstellen der Keepass-Datenbank meldet dann nur noch die erfolgreiche Ausführung.

Code: Alles auswählen

Successfully created new database


Öffnen der Keepass-Datenbank

3. Dritter Schritt:
 Folgende Befehlszeile öffnet die Keepass-Datenbank mit Hilfe des Nitrokeys. Abgefragt wird dabei nicht das Datenbank-Passwort, sondern die Benutzer-PIN zum Entsperren des Nitrokeys.

Code: Alles auswählen

gpg --decrypt ~/keepassxc-pw_encrypted.gpg | keepassxc ~/keepassxc-datenbank.kdbx --pw-stdin
Die mit dem Nitrokey entschlüsselte Passwort-Datei wird an KeepassXC übergeben und die Keepass-Datenbank damit geöffnet.
KeepassXC
KeepassXC
Benutzeravatar
josefine
Beiträge: 169
Registriert: So 11. Jul 2021, 14:33
Has thanked: 123 times
Been thanked: 104 times

Re: Passwortmanager "KeepassXC" mit Security-Token "Nitrokey" öffnen

Beitrag von josefine »

WOW - Danke für die ausführliche Erklärung.

Ich verwende KeepassXC aber auch auf einem Android Handy bzw. Android Tablet.

Wie öffne ich die Datenbank-Tabelle dann dort?
Ist das überhaupt möglich?

LG
Josefine
Bild ist mein Lieblings System :D
AMD FX-8350 (8) @ 4.000GHz - AMD ATI Radeon HD 6450/7450/8450
Manjaro Cinnamon - Manjaro KDE
Rupert
Beiträge: 6
Registriert: So 10. Jul 2022, 16:10
Been thanked: 3 times

Re: Passwortmanager "KeepassXC" mit Security-Token "Nitrokey" öffnen

Beitrag von Rupert »

Hallo josefine,

prinzipiell sollte das mit dem Nitrokey 3 NFC möglich sein, da dieser sich via NFC (Near Field Communication) per Funk mit dem Handy verbinden kann.
Leider ist der Nitrokey 3 noch nicht lieferbar, darum konnte ich das noch nicht testen.

LG
Rupert
Benutzeravatar
josefine
Beiträge: 169
Registriert: So 11. Jul 2021, 14:33
Has thanked: 123 times
Been thanked: 104 times

Re: Passwortmanager "KeepassXC" mit Security-Token "Nitrokey" öffnen

Beitrag von josefine »

Rupert hat geschrieben: So 25. Sep 2022, 10:27 Hallo josefine,

prinzipiell sollte das mit dem Nitrokey 3 NFC möglich sein, da dieser sich via NFC (Near Field Communication) per Funk mit dem Handy verbinden kann.
Leider ist der Nitrokey 3 noch nicht lieferbar, darum konnte ich das noch nicht testen.

LG
Rupert
Aber, da sehe ich wieder den Nachteil das ich den Nitrokey ständig mit mir rumschleppen muss... Ist dann doch ein wenig umständlich oder?
Bild ist mein Lieblings System :D
AMD FX-8350 (8) @ 4.000GHz - AMD ATI Radeon HD 6450/7450/8450
Manjaro Cinnamon - Manjaro KDE
Rupert
Beiträge: 6
Registriert: So 10. Jul 2022, 16:10
Been thanked: 3 times

Re: Passwortmanager "KeepassXC" mit Security-Token "Nitrokey" öffnen

Beitrag von Rupert »

Aber, da sehe ich wieder den Nachteil das ich den Nitrokey ständig mit mir rumschleppen muss... Ist dann doch ein wenig umständlich oder?
Das ist richtig.
Ein mehr an Sicherheit geht leider in der Regel zu Lasten des Benutzerkomforts.
Da aber im Keepass XC alle Deine Konten gespeichert sind, sollte man zugunsten der Sicherheit die Komforteinbuße akzeptieren. Ein kompromitiertes Keepass-Passwort ist hingegen nicht akzeptabel.
Die Idee beim Nitrokey (oder Yubikey) ist, ihn wie einen gewöhnlichen Schlüssel am Schlüsselbund zu tragen. Dann hat man ihn immer dabei.
Rupert
Beiträge: 6
Registriert: So 10. Jul 2022, 16:10
Been thanked: 3 times

Re: Passwortmanager "KeepassXC" mit Security-Token "Nitrokey" öffnen

Beitrag von Rupert »

Aber, da sehe ich wieder den Nachteil das ich den Nitrokey ständig mit mir rumschleppen muss... Ist dann doch ein wenig umständlich oder?
Vielleicht noch folgender Gedanke dazu:
Stell Dir vor, Du speicherst die KeepassXC-Datenbank in einem Cloud-Speicher. Der Cloud-Speicher wird von einem Angreifer gehackt und Deine Datenbank gestohlen. Dann steht nur noch ein sehr gutes Passwort zwischen dem Angreifer und allen in der Datenbank gespeicherten Konten. (Und hoffentlich ein fehlerfreier Programm-Code bei KeepassXC.)
Antworten Vorheriges ThemaNächstes Thema

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Registrieren

Sign in