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:

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.

gpg --version

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

sudo apt install gpg

Ob auf den Nitrokey zugegriffen werden kann, zeigt der folgende Befehl.

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.

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:

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.

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.

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.

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.

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.

`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. Dassgpgden geheimen Schlüssel des Nitrokeys für die Entschlüsselung benötigt und nicht irgendeinen anderen, liestgpgaus den Metadaten vonkeepassxc-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.

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.

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.

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.

Ergänzungen aus dem Forum

Frage:
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?
Antwort:
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.

Frage:
Generelle Frage zu KeepassXC? Ich habe bis jetzt noch nie mit KeepassXC gearbeitet. Meine Accounts die ein Passwort erfordern, stehen auf einer Handgeschriebenen Liste, die sicher aufbewahrt wird. Grob gesagt sind es etwa 15 Accounts, die unterschiedliche Passwörter haben. Die meisten habe ich im Kopf und die sind zwischen 12 und 16 Zeichen. Die Konzentration läßt aber manchmal etwas nach und ich muss auch mal spickeln…
Meine einzige Frage wäre jetzt, denn KeepassXC Manager nutzen und die Daten für die Accounts nicht auf der Festplatte des benutzten Rechners selbst abspeichern, sondern auf einem USB-Stick, bzw. externer Festplatte. Dieses Video zum KeepassXC ist mir aufgefallen und hat für mich den Eindruck das es sich hierbei um ein viel genutztes Programm handelt. Ich war all die Jahre immer der Meinung, das Passwörter auf einem Rechner nichts zu suchen haben. Egal in welcher Form? Bin damit seit 25 Jahren immer gut gefahren.
Vielleicht sollte ich daran auch nicht rütteln…
Antwort:
Meine Meinung dazu:
ich bin ganz und gar nicht dafür das man Passwörter auf einem externen Medium, sei es jetzt ein USB Stick, Festplatte oder auch nur einem Zettel (dieser ist ja die unsicherste Lösung) speichert.
Wenn eben jemand in Besitz dieser Medien gelangt hat er /sie lange Zeit zu versuchen das Passwort zu knacken und bei einem Zettel besteht ja gar keine Passwort Möglichkeit.
Wenn schon speichern dann eben mit einem sehr sicheren Passwort (mindestens 16 Zeichen) eben auf dem Rechner den ich nutze.
Ich selbst habe es in einer Cloud (natürlich sage ich hier jetzt nicht in welcher) gespeichert. Damit kann ich eben mit all meinen Geräten von überall darauf zugreifen.
Weiters bietet KeepassXC auch die Möglichkeit, mittels der Browser-Erweiterung, viele Anmeldungen bzw. Passwort-Eingaben zu automatisieren.

Eine Alternative zum Zettel, für das Speichern von Passwörtern, wäre eventuell der „Nitrokey Storage 2” (https://www.nitrokey.com/de#comparison).
Dieser enthält einen verschlüsselten Datenspeicher. Ein Nachteil ist allerdings der hohe Preis von über 100 Euro.

Erstveröffentlichung: Sa 24. Sep 2022, 21:04, Rupert

Categories:

Tags:

Schreibe einen Kommentar

Noch keine Reaktion

Neue Themen im Forum
Debian installieren - für Anfänge …Hallo, jetzt gelingt mir die Installation auch über "Insta … Weiterlesen
Frage zu GrubDanke @juhu, das war für mich eine reine Verständnisfrage allge … Weiterlesen
Brother Drucker unter LinuxMit der Suche nach „Linux Brother HL-2030“ fand ich zur Seite htt … Weiterlesen
Kategorien im Wiki
WIKI-Beiträge des Monates

Die Beiträge des Monates finden Sie im Kalender unter den blau markierten Tageszahlen.

September 2023
M D M D F S S
 123
45678910
11121314151617
18192021222324
252627282930  
Archive