Dies ist eine alte Version des Dokuments!
Nitrokey 3C NFC in der Praxis unter Linux Mint 20.2 Cinnamon
In diesem Kapitel befassen wir uns eingehend mit dem Nitrokey 3C NFC unter Linux Mint 20.2 Cinnamon. Weitere Informationen zu den Nitrokey-Sticks findet man auch hier bzw. im Support Forum.
Der neue Nitrokey 3 mit NFC, USB-C, Rust, Common Criteria EAL 6+
Der neue Nitrokey 3 ist der beste Nitrokey den wir je entwickelt haben. Er bietet erstmals NFC, USB-C. Der Nitrokey 3 vereint die Funktionen vorheriger Nitrokey Modelle: FIDO2, Einmalpasswörter, OpenPGP Chipkarte, Curve25519, Passwort-Manager, Common Criteria EAL 6+ zertifiziertes Secure Element, Firmware-Updates. Damit werden Ihre Accounts zuverlässig gegen Phishing und Passwort-Diebstahl geschützt und Ihre Kommunikation und Daten verschlüsselt. Mit starker Hardware-Verschlüsselung, vertrauenswürdig dank Open Source, Qualität made in Germany.
Quelle: https://shop.nitrokey.com/de_DE/shop/product/nk3cn-nitrokey-3c-nfc-148
Mit Hilfe von asymmetrischen Schlüsselmaterials (PGP und S/MIME) können eMails sowie Dateien und ganze Festplatten verschlüsselt und natürlich auch wieder entschlüsselt werden. Hierzu verwenden wir den Nitrokey 3C NFC welcher hier für einen Betrag von 49 € erstanden werden kann. In dem folgenden Beitrag gehen wir auf die Verwendung unter Linux Mint 20.2 Cinnamon ein.
WICHTIGER HINWEIS (Stand Nov. 2021)
Stand November 2021:
Bei der aktuelle Auslieferung1) der Nitrokey 3C NFC handelt sich um eine Vorbestellung. Das ausgelieferte Gerät wird erst einmal nur FIDO2 sowie FIDO U2F unterstützen und bereits die Hardware (inkl. Secure Element) für alle aufgeführten Funktionen beinhalten.
Weitere Funktionen wie Einmalpasswörter, Passwortmanager und OpenPGP Chipkarte sind noch nicht implementiert, sondern werden erst später per Firmware-Updates bereitgestellt!
Hardwareinformationen
Informationen über den Stick können wir mit Hilfe des Befehls usb-devices
aus dem RPM-Paket usbutils dem System abverlangen.
# usb-devices
T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#= 11 Spd=12 MxCh= 0 D: Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=20a0 ProdID=42b2 Rev=01.04 S: Manufacturer=Nitrokey S: Product=Nitrokey 3 C: #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 2 Cls=0b(scard) Sub=00 Prot=00 Driver=usbfs E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms I: If#= 1 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid E: Ad=02(O) Atr=03(Int.) MxPS= 64 Ivl=5ms E: Ad=82(I) Atr=03(Int.) MxPS= 64 Ivl=5ms I: If#= 2 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=00 Driver=cdc_acm E: Ad=83(I) Atr=03(Int.) MxPS= 8 Ivl=255ms I: If#= 3 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=84(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
Mit dem Befehl lshw
können wir uns ebenso anzeigen lassen, ob der Stick angesteckt und erkannt wird. Da der USB-Stick unter die Klasse input
fällt suchen wir gezielt nach diesen Geräte-Typus.
# lshw -short -C input
H/W path Device Class Description ====================================================== /0/100/1a/1/1/2 input Nitrokey 3
Mit Hilfe des Befehls lsusb
aus dem RPM-Paket usbutils können wir auch die Produkt- und Hersteller-Identifikationsnummer des Nitrokey-Sticks ermitteln.
# lsusb
Bus 001 Device 005: ID 20a0:42b2 Clay Logic
Im Syslog wird uns beim Anstecken des Sticks dies entsprechend protokolliert:
Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [108360.162781] thinkpad_acpi: battery 1 registered (start 0, stop 0) Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.203649] usb 1-1.2: new full-speed USB device number 5 using ehci-pci Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.314951] usb 1-1.2: New USB device found, idVendor=20a0, idProduct=42b2, bcdDevice= 1.00 Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.314956] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.314958] usb 1-1.2: Product: Nitrokey 3 Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.314961] usb 1-1.2: Manufacturer: Nitrokey Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.316882] hid-generic 0003:20A0:42B2.0015: hiddev3,hidraw0: USB HID v1.11 Device [Nitrokey Nitrokey 3] on usb-0000:00:1a.0-1.2/input1 Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.317184] cdc_acm 1-1.2:1.2: ttyACM3: USB ACM device Nov 3 17:34:33 djangos-thinkpad-x230 mtp-probe: checking bus 1, device 5: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2" Nov 3 17:34:33 djangos-thinkpad-x230 mtp-probe: bus: 1, device: 5 was not an MTP device Nov 3 17:34:33 djangos-thinkpad-x230 snapd[1106]: hotplug.go:199: hotplug device add event ignored, enable experimental.hotplug Nov 3 17:34:33 djangos-thinkpad-x230 mtp-probe: checking bus 1, device 5: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2" Nov 3 17:34:33 djangos-thinkpad-x230 mtp-probe: bus: 1, device: 5 was not an MTP device
Paketabhängigkeiten
Für den Zugriff auf die SmartCard bzw. auf den Nitrokey Pro benötigen wir z.B. für GPG den SmartCard-Daemon scdeamon und die Bibliothek libccid welche bei Linux Mint bereits in der Basisinstallation enthalten ist und mit Hilfe der Pakets scdaemon und libccid bereitgestellt werden.
Diese Pakete installieren wir, falls diese nicht bereits im System vorhanden sind, bei Bedarf mit Hilfe von apt.
$ sudo apt install scdaemon libccid
udev-Regeln
Für den Betrieb unter Linux Mint 20 insbesondere beim NitroPad X230 müssen wir uns noch passende udev-Definitionen hier besorgen.
Wir wechseln also erst einmal in das entsprechende Konfigurationsverzeichnis /etc/udev/rules.d/
.
# cd /etc/udev/rules.d/
Dann holen wir uns die entsprechende Musterdatei auf unseren Rechner.
# wget https://www.nitrokey.com/sites/default/files/41-nitrokey.rules
Zum Aktivieren unserer neuen udev-Regeldatei lassen wir diese nun erneut einlesen; hierzu verwenden wir folgenden Befehl:
# udevadm control --reload-rules
nitropy
$ nitropy
Usage: nitropy [OPTIONS] COMMAND [ARGS]... Options: --help Show this message and exit. Commands: fido2 Interact with Nitrokey FIDO2 devices, see subcommands. list List Nitrokey devices (in firmware or bootloader mode) nethsm Interact with NetHSM devices, see subcommands. nk3 Interact with Nitrokey 3 devices, see subcommands. pro Interact with Nitrokey Pro devices, see subcommands. start Interact with Nitrokey Start devices, see subcommands. storage Interact with Nitrokey Storage devices, see subcommands. version Version of pynitrokey library and tool.
$ nitropy list
Command line tool to interact with Nitrokey devices 0.4.27 :: 'Nitrokey FIDO2' keys :: 'Nitrokey Start' keys: :: 'Nitrokey 3' keys /dev/hidraw0: Nitrokey 3 762D73d13B15C4eBEFECDDA5A9FFB4AA
$ nitropy nk3
Command line tool to interact with Nitrokey devices 0.4.27 Usage: nitropy nk3 [OPTIONS] COMMAND [ARGS]... Interact with Nitrokey 3 devices, see subcommands. Options: -p, --path TEXT The path of the Nitrokey 3 device --help Show this message and exit. Commands: fetch-update Fetches a firmware update for the Nitrokey 3 and stores... list List all Nitrokey 3 devices. reboot Reboot the key. rng Generate random data on the device. test Run some tests on all connected Nitrokey 3 devices. update Update the firmware of the device using the given image. validate-update Validates the given firmware image and prints the... version Query the firmware version of the device. wink Send wink command to the device (blinks LED a few times).
$ nitropy nk3 list
Command line tool to interact with Nitrokey devices 0.4.27 :: 'Nitrokey 3' keys /dev/hidraw0: Nitrokey 3 762D73d13B15C4eBEFECDDA5A9FFB4AA
$ nitropy nk3 version
Command line tool to interact with Nitrokey devices 0.4.27 v1.4.0
$ nitropy nk3 test
Command line tool to interact with Nitrokey devices 0.4.27 Found 1 Nitrokey 3 device(s): - Nitrokey 3 at /dev/hidraw0 Running tests for Nitrokey 3 at /dev/hidraw0 [1/3] UUID query SUCCESS 762D73BEFECDDA5A9FFB4A5E2C258DBA [2/3] Firmware version query SUCCESS v1.4.0 Please press the touch button on the device ... Please press the touch button on the device ... [3/3] FIDO2 SUCCESS 3 tests, 3 successful, 0 skipped, 0 failed Summary: 1 device(s) tested, 1 successful, 0 failed
$ nitropy nk3 wink
Command line tool to interact with Nitrokey devices 0.4.27
Anwendungsfälle - Software
GnuPG
Da es sich bei der Chipkarte des Nitrokey 3C NFC um eine standardkompatible OpenPGP-Karte handelt, kann der Kryptostick mit Hilfe von GnuPG verwaltet werden. Hierzu installieren wir uns das Paket gnupg2, sofern es nicht bereits bei der Erstkonfiguration unseres Rechner installiert wurde.
$ sudo apt install gpg
Alle Sicherheitsfunktionen wie z.B. das Erzeugen/Speichern von GPG-Schlüsseln, das Verschlüsseln/Entschlüsseln einer Datei, das Signieren einer Nachricht, die auf der Hardware ausgeführt werden, können mit Hilfe des Befehls gpg gesteuert werden.
Sollte beim Aufruf des Befehls gpg die Karte nicht sofort angesprochen werden können, einfach den Befehl nochmals ausführen:
$ gpg --card-status
gpg: selecting openpgp failed: Karte nicht vorhanden gpg: OpenPGP Karte ist nicht vorhanden: Karte nicht vorhanden
card-status
Mit der Option card-status können wir uns mit dem Befehl gpg –card-status
den Kartenstatus ausgeben lassen.
$ gpg --card-status
Reader ...........: Nitrokey Nitrokey 3 [CCID/ICCD Interface] 00 00 Application ID ...: D276000421030104000F662D73BB0000 Application type .: OpenPGP Version ..........: 3.4 Manufacturer .....: unknown Serial number ....: 762D73BE Name of cardholder: [not set] Language prefs ...: [not set] Salutation .......: URL of public key : [not set] Login data .......: [not set] Signature PIN ....: forced Key attributes ...: rsa2048 rsa2048 rsa2048 Max. PIN lengths .: 127 127 127 PIN retry counter : 3 0 3 Signature counter : 0 KDF setting ......: off Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none]
Die einzelnen Datenfelder haben hierbei folgende Bedeutung:
Datenfeld | Beschreibung |
---|---|
Application ID | Individuelle (unique) KartenID, diese beinhaltet: ° den Kartentyp ° die Version der Spezifikation ° den Hersteller und ° die Seriennummer des Cryptosticks Diese Application ID ist einmalig und bei jeder Karte anders. |
Version | verwendete OpenPGP Version |
Manufacturer | Hersteller der Karte |
Serial number | Seriennummer der Karte, die vom Hersteller vergeben wurde. |
Name of cardholder | Vorname und Nachname des Karteninhabers ( Es sind hier derzeit nur reines ASCII erlaubt, also keine deutschen Umlaute). Dieses Feld wird von GPG nicht verwendet. |
Language prefs | Gewählte/bevorzugte Sprache (Muttersprache) des Karteninhabers. Dieses Feld wird von GPG nicht verwendet. |
Sex | Geschlecht des Karteninhabers.: (Männlich (M), Weiblich (F) oder Leerzeichen) |
URL of public key | Angabe einer URL, mit der der public-key mit Hilfe des Befehls fetch unter gpg --edit-card auf die Karte geladen werden kann. |
Login data | Bei diesem Feld kann der Account-Name des Karteninhabers abgelegt werden, der bei Anmeldeversuchen genutzt werden kann. GPG führt hier keinerlei Abgleiche zwischen diesem Namen und dem Namen der in einem Schlüssel angegeben und verwendet wird durch! |
Signature PIN | Hier kann über die beiden Schalter zwingend und nicht zwingend eingestellt werden, ob bei jedem Signatur-Vorgang die PIN abgefragt werden soll, oder nicht. Bei der Option nicht zwingend kann GPG die PIN zwischenspeichern, solange der Nitrokey-Stick angesteckt bleibt. |
Key attributes | Angaben über Art und Umfang der hinterlegten Schlüssel |
Max. PIN lengths | Maximale Länge der einzelnen PINs, kann nicht verändert werden! |
PIN retry counter | Zähler für die verbleibenden Versuche zur Eingabe der richtigen PIN. Der max. Zählwert von 3 wird bei jeder Falscheingabe um eins heruntergesetzt. Sobald die richtige Admin-PIN eingegeben wurde, wir der max. Wert von 3 wieder zurück gesetzt. Die beiden ersten Werte (von links gesehen) werden für die User-PIN verwendet. GPG stellt hierbei sicher, dass beide werde synchronisiert werden. Der zweite (mittlere) Wert wird lediglich für Besonderheiten aus dem ISO-Standard 7816 (https://de.wikipedia.org/wiki/ISO_7816) verwendet. Der dritte (rechte) Wert wird als Fehlversuchszähler für die Admin_PIN verwendet. |
Signature counter | Zähler der generierten Signaturen bzw. Signaturvorgänge mit der KArte. Der Zähler kann nicht manipuliert werden und wird lediglich zurückgesetzt, sobald ein neuer Signature-Schlüssel erzeugt oder auf die Karte geladen wird. |
Signature key | Signatur-Schlüssel (primärer OpenPGP-Schlüssel) |
created | Datum und Uhrzeit an dem der Schlüssel erzeugt wurde |
Encryption key | Entschlüsselungs-Schlüssel (Unterschlüssel des primären (Signature-)Schlüssels. |
created | Datum und Uhrzeit an dem der Schlüssel erzeugt wurde |
Authentication key | Authentifizierung-Schlüssel (Unterschlüssel des primären (Signature-)Schlüssels. |
created | Datum und Uhrzeit an dem der Schlüssel erzeugt wurde |
General key info | Diese primäre USer ID wird angezeigt, sobald ein entsprechender öffentlicher Schlüssel (public-key) verfügbar ist. |
change-pin
Wie schon mit der Nitrokey App können wir auch mit Hilfe des Befehls gpg --change-pin
die Benutzer- und die Admin-PIN, wie auch die PIN zum Zurücksetzen der Benutzer-PIN, ändern.
Die Benutzer-PIN (Menüpunkt 1) wird benötigt für den täglichen Betrieb wie z.B. zum Entsperren des Token, oder zum Signieren und Verschlüsseln. Die Mindestlänge für den User-Pin beträgt 6 Zeichen.
Die Admin-PIN (Menüpunkt 3) wird für die Karten-/Token-Verwaltung verwendet, so z.B. für das Laden von Schlüsseln auf den Krypto-Stick, das Erzeugen von Schlüsseln oder das Ändern von Informationen wie die Inhaberdaten auf der Karte. Die Mindestlänge für die Admin-PIN beträgt 8 Zeichen.
Wird die Benutzer-PIN 3x falsch eingeben, wird die Karte gesperrt und kann dann nur mit der Admin-PIN oder dem Reset-Code zurückgesetzt werden. Wenn Sie den falschen Admin-Pin dreimal eingeben, wird die Karte unbrauchbar und kann dann lediglich mit einem Factory-Reset (Verlußt aller Kartendaten!) zurück gesetzt werden!
Die Reset-PIN (Menüpunkt 4) kann nur zum Zurücksetzen der Benutzer-PIN verwendet werden. Die Mindestlänge für den Reset-Code beträgt 8 Zeichen. Der Reset-Code Fehlerzähler kann wiederum mit der Admin-PIN zurückgesetzt werden. Wird nach zweimaliger Falscheingabe der Benutzer- wie auch der Admin-PIN und dann die richtige PIN eingeben, wird der Fehlerzähler zurückgesetzt.
Worin besteht nun aber der genaue Unterschied zwischen dem Reset-Code und der Admin-PIN? Möchte man in einer Organisation Nitrokey Pro an seine Mitarbeiter ausgeben, werden bestimmte Daten, wie z.B. Namen, die Public Key URL oder auch das erzeugte Schlüsselmaterial zentral vorgegeben. Da der Benutzer selbst diese Daten nicht verändern können soll, wird dieser auch nicht Kenntnis von der Admin-PIN haben. Sperrt sich nun der Mitarbeiter aus, weil er die Benutzer-PIN 3x falsch eingegeben hat, kann der Neutzer natürlich nicht die Admin-PIN eingeben, da er diese nicht kennt. Hier kommt nun der Reset-Code ins Spiel. Mit Hilfe dieses Codes kann der Benutzer nun die Benutzer-PIN zurücksetzen.
$ gpg --change-pin
gpg: OpenPGP Karte Nr. D276000124010303000500006FDA0000 erkannt 1 - change PIN 2 - unblock PIN 3 - change Admin PIN 4 - set the Reset Code Q - quit Ihre Auswahl?
Beim Menüpunkt 1 können wir z.B. die Benutzer-PIN abändern. Wir werden dann nach der aktuellen PIN gefragt und müssen die neue PIN 2x eingeben zum Abändern.
Browser
Verwenden wir den Browser Google Chrome bzw. Chromium müssen wir nichts besonderes unternehmen, da diese bereits bestens vorbereitet sind. Auch beim Browser Firefox 78.0.2esr (64-bit) bedarf es keiner gesonderten Konfiguration mehr. Im Zweifelsfall kann man sich aber auch vergewissern, ob die Option hier richtig gesetzt ist.
Im Zweifelsfall geben wir also in der Adresszeile about:config
ein und suchen dann nach der Option u2f.
Mit einem Doppelklick würden wir die Option aktivieren indem wir den Parameter auf auf true setzen..
Webserver/Anwendung
Nextcloud
Vorbereitende Arbeiten
Bevor wir unseren Nitrokey 3C NFC als zusätzliches Authentifizierungs-Gerät verwenden können, melden wir uns wie gewohnt an unserem Konto an.
Die Einrichtung unseres Nitrokey 3C NFC erfolgt über das Menü [ Einstellungen ] und Sicherheit. Hier finden wir im Abschnitt Zwei-Faktor-Authentifizierung den entsprechenden Abschnitt.
Zum An- bzw. Einbinden unseres Nitrokey 3C NFC klicken wir auf die Schaltfläche [U2F-Gerät hinzufügen].
Den Hinweisen entsprechend stecken wir nun den Kryptostick an den USB-C Port des Rechners und berühren die grün leuchtende Fläche auf dem Kryptostick.
Anschließend vergeben wir noch einen Namen für das verbundene Krypto-Device.
Anmelden mit zwei Faktor-Authentifizierung
Wenn wir uns nun zukünftig an unserer Cloud anmelden, werden wir wie gewohnt nach dem User und Passwort gefragt.
Nach dem Bestätigen der Daten werden wir nun gebeten unseren Nitrokey 3C NFC-Stick anzustecken und die Touch-Taste darauf zu drücken bzw. genauer gesagt zu berühren.
Nach einer Sekunde werden wir automatisch angemeldet und wir können den Stick wieder vom USB-Port abziehen.
GitHub
Im nächsten Konfigurationsbeispiel wollen wir unseren GitHub-Account mit einer Zweifaktorathentifizierungsoption mit Hilfe unseres Nitrokey 3C NFC ausstatten.
Vorbereitende Arbeiten
Das Einrichten eines zweiten Faktors ist hier ausfürlich beschrieben und mit Hilfe der dort beschreibenen Vorgehen werden wir nun auch vorgehen.
Bevor wir unser Krypto-Gerät als zweiten Faktor einrichten und verwenden können, müssen wir bei GitHub zunächst Textnachricht/SMS als zweiten Faktor aktivieren. Dazu gehen wir wie folgt beschrieben vor:
- Den sechsstelligen Code, den wir nun als SMS auf unser Mobiltelefon gesendet bekommen tragen wir nun in das Feld Enter the six-digit code sent to your phone ein und klicken anschließend auf die Schaltfläche [ Continue ]. Anschließend erhalten wir die recovery codes, die es ermöglichen im Notfall, falls z.B. der Nitrokey 3C NFC verloren gehen sollte, auf unser GitHub-Konto zuzugreifen.
- Nun können wir endlich unseren Nitrokey 3C NFC als zweiten Faktor einbinden. Die ggf. nötige originale Beschreibung hierzu findet sich hier. Zunächst verbinden wir unseren Krypto-Stck mit dem USB-C Port unseres Rechners. In der rechten oberen Ecke unseres Browserfensters klicken wir auf den Menüpunkt Settings.
Anmelden mit zwei Faktor-Authentifizierung
Wenn wir uns nun zukünftig bei GitHub anmelden, werden wir wie gewohnt nach dem User und Passwort gefragt.
Anschließend werden wir aufgefordert den Nitrokey 2C NFC anzustecken und die Touch-Taste darauf zu drücken bzw. genauer gesagt zu berühren.
Nach dem Bestätigen der Daten werden wir nun gebeten unseren Nitrokey 3C NFC-Stick anzustecken bzw. die Touch-Taste darauf zu drücken bzw. genauer gesagt zu berühren.
Nach einer Sekunde werden wir automatisch angemeldet und wir können den Stick wieder vom USB-Port abziehen.