Dies ist eine alte Version des Dokuments!


Nitrokey 3C NFC in der Praxis unter Linux Mint 20.2 Cinnamon

Bild: Nitrokey 3C NFC USB-Stick 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.

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!

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

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

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
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

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.

card-edit

Mit Hilfe des Befehls gpg --card-edit haben wir entsprechend umfangreiche Zugriffs-, Erstellungs- und Änderungsoptionen auf die Daten und das Schlüsselmaterial, welches auf der Smartcard gespeichert wurden und werden. Viele hilfreiche Informationen zum Umgang mit den Befehlen die uns das Programm gpg bietet, findet man in der zugehörigen Dokumentation auf der Projektseite von https://www.gnupg.org/.

 $ gpg --card-edit
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]
User-Befehle

Mit Hilfe des Befehls help können wir uns anzeigen lassen, welche Optionen im jeweiligen Modus Benutzer oder Admin zur Verfügung stehen.

gpg/card> help
quit           quit this menu
admin          show admin commands
help           show this help
list           list all available data
fetch          fetch the key specified in the card URL
passwd         menu to change or unblock the PIN
verify         verify the PIN and list all data
unblock        unblock the PIN using a Reset Code
Admin-Befehle

Mit dem Befehl admin können wir in den Admin-Modus/-Bereich wechseln und auch dort alle Befehle mit Hilfe von help anzeigen lassen.

gpg/card> admin
Admin commands are allowed
gpg/card> help
quit           quit this menu
admin          show admin commands
help           show this help
list           list all available data
name           change card holder's name
url            change URL to retrieve key
fetch          fetch the key specified in the card URL
login          change the login name
lang           change the language preferences
sex            change card holder's sex
cafpr          change a CA fingerprint
forcesig       toggle the signature force PIN flag
generate       generate new keys
passwd         menu to change or unblock the PIN
verify         verify the PIN and list all data
unblock        unblock the PIN using a Reset Code
factory-reset  destroy all keys and data
kdf-setup      setup KDF for PIN authentication
key-attr       change the key attribute

RSA-Schlüssel generieren

Wir wollen uns nun einen neuen PGP-Schlüssel in der SmartCard erzeugen und rufen hierzu den Befehl generate auf. Der Nitrokey 3C NFC unterstützt RSA-Schlüssellängen von 2048 und maximal von 4096.

Laut der opencard-rs2) werden folgende Algorithmen unterstützt:

  • RSA-2048
  • RSA-3072 (nur Schlüssel-Import, keine Schlüssel-Generierung!)
  • RSA-4096 (nur Schlüssel-Import, keine Schlüssel-Generierung!)
  • EcDSA und ECDH für P256
  • EdDSA und ECDH für Curve25519

Mit Hinblick auf die möglichen Unsicherheiten im Bezug auf die RSA-Schlüssellänge werden wir uns später noch eingehend mit der Erstellung eines ED25519 beschäftigen.

Welche RSA-Schlüssellänge eingestellt ist, können wir mit den Befehl gpg2 –card-status erfragen; die definierten Werte finden wir dann beim Punkt Key attributes.

 $ gpg2 --card-status | grep Key\ attributes
Key attributes ...: rsa2048 rsa2048 rsa2048

FIXME FIXME FIXME FIXME

Bevor wir nun unseren RSA-Schlüssel erzeugen, werden wir noch die Schlüssellänge von 2048 auf 4096 abändern. Zum Ändern der Vorgabewerte benutzen wir die Option --card-edit beim Befehl gpg2.

 $ gpg2 --card-edit
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]

Im Admin-Bereich finden wir den Befehl key-attr mit Hilfe dessen wir die Definition des Schlüsseltyps definieren können. Wir wechseln also erst einmal in den Admin Bereich.

gpg/card> admin
Admin commands are allowed

Hier rufen wir dann den Befehl key-attr auf.

gpg/card> key-attr

Im folgenden ändern wir dann für die drei (Unterschlüssel) die Schlüssellänge der RSA-Keys von 2048 auf 4096 .

Changing card key attribute for: Signature key
Please select what kind of key you want:
   (1) RSA
   (2) ECC
Your selection? 1
What keysize do you want? (2048) 4096
The card will now be re-configured to generate a key of 4096 bits
Changing card key attribute for: Encryption key
Please select what kind of key you want:
   (1) RSA
   (2) ECC
Your selection? 1
What keysize do you want? (2048) 4096
The card will now be re-configured to generate a key of 4096 bits
Changing card key attribute for: Authentication key
Please select what kind of key you want:
   (1) RSA
   (2) ECC
Your selection? 1
What keysize do you want? (2048) 4096
The card will now be re-configured to generate a key of 4096 bits

Die Default-Admin-Pin die hier abgefragt wird, lautet 12345678.

Zum Schluss verlassen wir das Programm gpg2 mit quit.

gpg/card> quit

Fragen wir nun erneut mit den Befehl gpg2 –card-status welcher Schlüssel-Typ eingestellt ist, finden wir unsere geänderten Werte.

 $ gpg2 --card-status | grep Key\ attributes
Key attributes ...: rsa4096 rsa4096 rsa4096

Nun erstellen wir uns unsere gewünschten Schlüssel auf der SmartCard der Nitrokey 3C NFC. Wie schon beim Gernerieren der RSA-Schlüssel werden wir dabei menügeführt durch eine Reihe von Standardfragen gelost, welche alle relevante Daten abfragen, die zur Generierung des Hauptschlüssels wie auch der Unterschlüssel die für die Aufgaben Signatur, Verschlüsselung und Authentifizierung benötigt werden. Hilfreiche Informationen zur Schlüsselerzeugung auf dem Kryptostick findet man in der offiziellen Doku auf der Nitrokey Webseite.

 $ gpg2 --card-edit
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 ...: rsa4096 rsa4096 rsa4096
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 Schlüsselgenerierung erfolgt im Admin-Menü, in welches wir nun erst einmal wechseln werden.

gpg/card> admin
Admin commands are allowed

Die Erzeugung der Schlüssel erfolgt wie immer mit dem Befehk generate.

gpg/card> generate
 gpg/card> generate
Admin commands are allowed

gpg/card> generate
Make off-card backup of encryption key? (Y/n) n

Please note that the factory settings of the PINs are
   PIN = '123456'     Admin PIN = '12345678'
You should change them using the command --change-pin

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: Django aka [BOfH]
Email address: secmail@mailserver.guru
Comment: Bastard Operator from Hell
You selected this USER-ID:
    "Django aka [BOfH] (Bastard Operator from Hell) <secmail@mailserver.guru>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o

Nun wird auf der Karte der gewählte Schlüssel erzeugt.

Die Erzeugung eines Schlüssels mit einer Länge von 2048 dauert ca. 5 Minuten, also keinesfalls den Nitrokey Start abziehen oder die Generierung abbrechen! Während der Erzeugung der Schlüssel leuchtet die rote LED im Stick.

gpg: key 2E22436430385B49 marked as ultimately trusted
gpg: revocation certificate stored as '/home/django/.gnupg/openpgp-revocs.d/E65B2BDF79A2E2E4C28F6E062E22436430385B49.rev'
public and secret key created and signed.

gpg/card> quit
pub   rsa2048 2018-11-26 [SC]
      E65B2BDF79A2E2E4C28F6E062E22436430385B49
uid                      Django aka [BOfH] (Bastard Operator from Hell) <secmail@mailserver.guru>
sub   rsa2048 2018-11-26 [A]
sub   rsa2048 2018-11-26 [E]

change-pin

FIXME Platzhalter für später - aktuell noch nicht relevant!!! FIXME

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.

Bild: PIN-Eingabedialog beim Abändern der Benutzer-/Admin-PIN

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.

Bild: Bildschirmhardcopy Firefox "about:config"

Mit einem Doppelklick würden wir die Option aktivieren indem wir den Parameter auf auf true setzen..

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. Bild: Bildschirmhardcopy -  Anmelden an unserer Cloud

Die Einrichtung unseres Nitrokey 3C NFC erfolgt über das Menü [ Einstellungen ] und Sicherheit. Hier finden wir im Abschnitt Zwei-Faktor-Authentifizierung den entsprechenden Abschnitt.

Bild: Bildschirmhardcopy -  Menü der Sicherheitseinstellungen im Cloud-Konto

Zum An- bzw. Einbinden unseres Nitrokey 3C NFC klicken wir auf die Schaltfläche [U2F-Gerät hinzufügen].

Bild: Bildschirmhardcopy -  Hinweis beim Anlernen des Nitrokey 3C NFC

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.

Bild: Bildschirmhardcopy -  Hinweis beim Anlernen des Nitrokey 3C NFC

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.

Bild: Bildschirmhardcopy -  Anmelden an unserer Cloud

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.

Bild: Bildschirmhardcopy -  Anmelden an unserer Cloud

Nach einer Sekunde werden wir automatisch angemeldet und wir können den Stick wieder vom USB-Port abziehen.

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:

  1. Nachdem wir uns an unserem GitHub-Konto angemeldet haben, klicken wir in der rechten oberen Ecke unseres Browserfensters auf den Menüpunkt Settings Bild: GitHub Settings-Einstellungsmenüpunkt
  2. Links finden wir nun in den persönlichen Einstellungsmöglichkeiten die Option Account security. Bild: GitHub Settings-Einstellungsmenüpunkt
  3. Hier aktivieren wir nun den Punkt [ Enable two-factor authentication ]. Bild: GitHub Einstellungsoption: Two-factor authentication
  4. Beim Einstellunkspunkt Two-factor authentication wählen wir die Option Set up using SMS und klicken auf die Schaltfläche [ Continue ]. Bild: GitHub Einstellungsoption: Set up using SMS
  5. Unter Authentication verification, wählen wir den Country Code unseres Landes aus und geben unsere Mobiltelefonnummer (ohne führende Null) ein und klicken anschließend auf die Schaltfläche [ Send authentication code ]. Bild: GitHub Einstellungsoption: Set up using SMS
  6. 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. Bild: GitHub Einstellungsoption: Set up using SMS
  7. Die Codes speichern wir am besten auf einem sicheren Speichergerät ab. Anschließend klicken wir auf die Schaltfläche [ I have saved my recovery codes ] zum Aktivieren der Zweifaktorauthentifizierung unseres Bneutzerkontos. Bild: GitHub Erfolgreiche Aktivierung der SMS-2FA
  8. Zu guter Letzt melden wir uns einmal ab und erneut bei GitHub an. Nach Eingabe des Passwortes wird uns nun per SMS der Zugangscode zugeschickt den wir in das betreffende Feld eingeben. Bild: GitHub Abfrage des per SMS zugesandten Zugangscode bei SMS-2FA
  9. 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. Bild: GitHub Settings-Einstellungsmenüpunkt
  10. Links finden wir nun, wie schon zuvor bei der Einrichtung der 2FA mit Textnachrichten/SMS, in den persönlichen Einstellungsmöglichkeiten die Option Account security. Bild: GitHub Settings-Einstellungsmenüpunkt
  11. Hier wählen wir die Option Security Keys aus in dem wir auf die Schaltfläche [ Add ] klicken. Bild: GitHub Hinzufügen eines Hardware-Sicherheits-Schlüssels
  12. Unter Security keys wählen wir nun die Schaltfläche [ Register new security key ] an. Bild: GitHub Hinzufügen eines Hardware-Sicherheits-Schlüssels
  13. Anschließend geben wir einen „sprechenden Namen“ für unseren Krypto-Stick an, damit wir es bei ggf. mehreren Geräten leichter haben, diesen zuzuordnen. Bild: GitHub Hinzufügen eines Hardware-Sicherheits-Schlüssels
  14. Nach Eingabe des Namen werden wir nun gebeten unseren Nitrokey 3C NFC-Stick anzustecken bzw. die Touch-Taste darauf zu drücken bzw. genauer gesagt zu berühren. Bild: GitHub Hinzufügen eines Hardware-Sicherheits-Schlüssels
  15. Wurde der Nitrokey 3C NFC erkannt, wird dies in unserem Benutzerkonto entsprechend positiv vermerkt. Bild: GitHub definierter Nitrokey 3C NFC als 2FA

Anmelden mit zwei Faktor-Authentifizierung

Wenn wir uns nun zukünftig bei GitHub anmelden, werden wir wie gewohnt nach dem User und Passwort gefragt.

Bild: Anmeldedialog bei GitHub

Anschließend werden wir aufgefordert den Nitrokey 2C NFC anzustecken und die Touch-Taste darauf zu drücken bzw. genauer gesagt zu berühren.

Bild: Anmeldedialog bei GitHub

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.

Bild: Anmeldedialog bei GitHub

Nach einer Sekunde werden wir automatisch angemeldet und wir können den Stick wieder vom USB-Port abziehen.

Links


1)
Stand : 01.11.2021
2)
v1.0.0 - Stand Mai 2023
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
  • nitrokey/linuxmint/3cnfc.1683995248.txt.gz
  • Zuletzt geändert: 13.05.2023 16:27.
  • von django