Dies ist eine alte Version des Dokuments!


Nitrokey 3A mini in der Praxis unter ArchLinux

Bild: Nitrokey 3A Mini USB-Stick In diesem Kapitel befassen wir uns eingehend mit dem Nitrokey 3A Mini (Daten-/Infoblatt) unter Arch Linux. Weitere Informationen zu den Nitrokey-Sticks findet man auch hier bzw. im Support Forum.

Der sichere Schlüssel zu Ihrem digitalen Leben.
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. Verschlüsselt Ihre E-Mails, Dateien und Server/SSH-Zugriffe. Schützt gegen Hacker und Spionage – privat und beruflich. Dabei wird der kryptografische Schlüssel sicher im Nitrokey gespeichert und ist gegen Verlust, Diebstahl und Computerviren geschützt. Mit starker Hardware-Verschlüsselung, vertrauenswürdig dank Open Source, Qualität made in Germany.
Anwendungsfälle sind z.B. für jeden als Schutz gegen Massenüberwachung und Hacker, für Unternehmen, Kanzleien und Selbstständige, sowie für IT-Administratoren und Sicherheitsexperten, die jeweils kritische Infrastruktur schützen, wollen und müssen. Die Firmware und der Software SourceCode der Nitrokey-Familie in Github hinterlegt, einsehbar und somit überprüfbar.
Quelle: https://shop.nitrokey.com/de/shop/nk3am-nitrokey-3a-mini-149

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 Start welcher hier für einen überschaubaren Betrag von gerade mal 29€ erstanden werden kann. In dem folgenden Beitrag gehen wir auf die Verwendung unter Arch Linux ein.

Informationen über den Stick können wir z.B. mit Hilfe des Befehls usb-devices aus dem ArchLinux-Paket usbutils dem System abverlangen.

 # usb-devices
T:  Bus=01 Lev=03 Prnt=06 Port=01 Cnt=01 Dev#= 20 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.07
S:  Manufacturer=Nitrokey
S:  Product=Nitrokey 3
C:  #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=0b(scard) Sub=00 Prot=00 Driver=(none)
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

Mit dem Befehl lshw aus dem gleichnamigen ArchLinux-Paket lshw können wir uns ebenso anzeigen lassen, ob der Stick angesteckt und erkannt wird. Da der USB-Stick unter die Klasse generic fällt suchen wir gezielt nach diesen Geräte-Typus.

 # lshw -short -C generic
H/W path             Device          Class          Description
===============================================================
/0/100/2/0           input7          input          DP-2
/0/100/14/0/6/1/2                    input          Nitrokey 3
/0/100/14/0/6/1/3    input10         input          USB OPTICAL MOUSE  Keyboard
/0/100/14/0/6/2      input1          input          Das Keyboard Das Keyboard P13 Keyboard
/0/100/1f.3/0        input15         input          HDA Intel PCH Line Out
/0/100/1f.3/1        input16         input          HDA Intel PCH Headphone
/0/100/1f.3/2        input17         input          HDA Intel PCH HDMI/DP,pcm=3
/0/100/1f.3/3        input18         input          HDA Intel PCH HDMI/DP,pcm=7
/0/100/1f.3/4        input19         input          HDA Intel PCH HDMI/DP,pcm=8
/2                   input0          input          Power Button
/3                   input14         input          PC Speaker

Mit Hilfe des Befehls lsusb aus dem Arch-Linux-Paket usbutils können wir auch die Produkt- und Hersteller-Identifikationsnummer des Nitrokey-Sticks ermitteln.

 # lsusb | grep Nitrokey
Bus 001 Device 022: ID 20a0:42b2 Clay Logic Nitrokey 3A Mini/3A NFC/3C NFC

Im Journal wird uns beim Anstecken des Sticks dies entsprechend protokolliert:

 # journalctl -f
Dec 15 15:55:32 nitropc kernel: usb 1-6.1.2: new full-speed USB device number 23 using xhci_hcd
Dec 15 15:55:33 nitropc kernel: usb 1-6.1.2: New USB device found, idVendor=20a0, idProduct=42b2, bcdDevice= 1.07
Dec 15 15:55:33 nitropc kernel: usb 1-6.1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Dec 15 15:55:33 nitropc kernel: usb 1-6.1.2: Product: Nitrokey 3
Dec 15 15:55:33 nitropc kernel: usb 1-6.1.2: Manufacturer: Nitrokey
Dec 15 15:55:33 nitropc kernel: hid-generic 0003:20A0:42B2.0011: hiddev99,hidraw7: USB HID v1.11 Device [Nitrokey Nitrokey 3] on usb-0000:00:14.0-6.1.2/input1
Dec 15 15:55:33 nitropc systemd[1]: Reached target Smart Card.
Dec 15 15:55:33 nitropc systemd[1153]: Reached target Smart Card.

Für den Betrieb unter Arch Linux müssen wir uns noch passende udev-Definitionen hier besorgen.

Ein manuelles Holen und Installieren ist unter Arch Linux nicht notwendig, die Installation des Paketes libnitrokey reicht hier aus!

 # pacman -Sy libnitrokey

Bei Bedarf können wir uns hier gezielt informieren woher das Paket kommt und was es beinhaltet.

 # pacman -Qil libnitrokey

Paketinhalt und -info des Pakets libnitrokey

Die erforderliche udev-Regel findet sich also in der Datei /usr/lib/udev/rules.d/41-nitrokey.rules*. Bei Bedarf können wir uns auch hier gezielt informieren welche Konfigurationsoptionen hier in der Datei definiert wurden.

 # bat /usr/lib/udev/rules.d/41-nitrokey.rules

Konfigurationsdefinitionen in der Datei Datei 41-nitrokey.rules

Sobald wir nun unseren Nitrokey Start in einen USB-Port unseres Adminrechners stecken, können wir den Status der Karte z.B. mit der Option –card-status beim Befehl gpg2abfragen.

 $ gpg2 --card-status
Reader ...........: 20A0:42B2:X:0
Application ID ...: D276000124010304000F6447F2530000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Nitrokey
Serial number ....: 6447F253
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
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

Viele Informationen rund um den Nitrokey 3A Mini findet man auf der Nitrokey 3 Dokumentationsseite.

Da es sich bei der Chipkarte des Nitrokey 3A Mini um eine standardkompatible OpenPGP-Karte handelt, kann der Kryptostick mit Hilfe von GnuPG verwaltet werden.

Alle Sicherheitsfunktionen wie z.B. das Erzeugen/Speichern von PGP-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 bzw. gpg2 gesteuert werden.

card-status

Mit der Option card-status können wir uns mit dem Befehl gpg --card-status den Kartenstatus ausgeben lassen.

 $ gpg2 --card-status
Reader ...........: 20A0:42B2:X:0
Application ID ...: D276000124010304000F6447F2530000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Nitrokey
Serial number ....: 6447F253
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
UIF setting ......: Sign=off Decrypt=off Auth=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 herunter gesetzt. 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 Signatur-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 (Signatur-)Schlüssels.
created Datum und Uhrzeit an dem der Schlüssel erzeugt wurde
Authentication key Authentifizierung-Schlüssel (Unterschlüssel des primären (Signatur-)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 ...........: 20A0:42B2:X:0
Application ID ...: D276000124010304000F6447F2530000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Nitrokey
Serial number ....: 6447F253
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
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

gpg/card>
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
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
openpgp        switch to the OpenPGP app

gpg/card>
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
salutation     change card holder's salutation
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 (on/single/off)
key-attr       change the key attribute
uif            change the User Interaction Flag
openpgp        switch to the OpenPGP app

gpg/card>

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 3A Mini unterstützt RSA-Schlüssellängen von 2048 und maximal von 4096!

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!

Erst einmal befassen wir uns mit der Erzeugung eines RSA-Schlüsselpaaares. Wir werden dabei nun menügeführt durch eine Reihe von Standardfragen geführt, 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.

Bevor wir nun unser ersten Schlüsselpaar erzeugen, vergewissern wir uns nochmals kurz, welcher Schlüsseltyp und Schlüssellänge per Default beim Nitrokey 3A Mini denn voreingestellt sind.

 $ gpg --card-status | grep Key
Key attributes ...: rsa2048 rsa2048 rsa2048

Der Schlüsseltyp RSA passt soweit, aber wir möchten doch eher Ende 2024 auf einen 4k-Schlüssel zurückgreifen. Natürlich ist es ratsam hier genau auf den Einsatzzweck und der Zielsysteme bzw. Kommunikationspartner zu achten. Denn auch Ende 2024 gibt es durchaus noch Anwendungen die lediglich 2k-RSA-Schlüsselmaterial unterstützen!

Wir stellen nun als erstes mal die Schlüssellänge auf 4096 ein. Hierzu starten wir das Programm gpg mit der Option --card-edit.

 $ gpg --card-edit
gpg/card> admin
Admin commands are allowed

gpg/card>

Mit dem Befehl key-attr (change the key attribute) ändern wir nun die Schlüssel-Attribute. Die Admin-Pin lautet per Default 12345678. Wir werden die Admin-PIN wie auch die User-PIN später noch ändern!

gpg/card> key-attr
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

Bei dem erscheinenden Eingabefeld zur PIN-Eingabe geben wir hier und bei den nachfolgenden Änderungen jeweils die Default-Admin-PIN 12345678> ein. Bild: GnuPG Admin-PIN Eingabe Dialogfenster

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

Bild: GnuPG Admin-PIN Eingabe Dialogfenster

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

Bild: GnuPG Admin-PIN Eingabe Dialogfenster

The card will now be re-configured to generate a key of 4096 bits

gpg/card>

Nun werden wir unsere 4k-RSA-Schlüsselmaterial erzeugen. Hierzu verwenden wir den Admin-Befehl generate.

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

Da wir unseren private-key, der unter anderem zum Verschlüsseln verwendet wird, ausschliesslich in der Hardware-Schlüsselchips des Nitrokey 3A Mini vorhalten wollen bestätigen wir diese Frage hier mit der Eingabe von n!

 n

Bild: GnuPG User-PIN Eingabe Dialogfenster

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) 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: Michael Nausch
Email address: michael@nausch.org
Comment: 
You selected this USER-ID:
    "Michael Nausch <michael@nausch.org>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
gpg: revocation certificate stored as '/home/django/.gnupg/openpgp-revocs.d/8B7A57A942EEB952543C3447381D2F43DC9CB69E.rev'
public and secret key created and signed.

pub   rsa4096 2024-12-15 [SC]
      8B7A57A942EEB952543C3447381D2F43DC9CB69E
uid                      Michael Nausch <michael@nausch.org>
sub   rsa4096 2024-12-15 [A]
sub   rsa4096 2024-12-15 [E]


gpg/card>

Die Erzeugung eines 4k-Schlüssels dauert einige Minuten, also keinesfalls den Nitrokey 3A Mini abziehen oder die Generierung abbrechen! Während der Erzeugung der Schlüssel leuchtet bzw. blinkt die LED im Stick.

gpg: revocation certificate stored as '/home/django/.gnupg/openpgp-revocs.d/8B7A57A942EEB952543C3447381D2F43DC9CB69E.rev'
public and secret key created and signed.

pub   rsa4096 2024-12-15 [SC]
      8B7A57A942EEB952543C3447381D2F43DC9CB69E
uid                      Michael Nausch <michael@nausch.org>
sub   rsa4096 2024-12-15 [A]
sub   rsa4096 2024-12-15 [E]

Factory-Reset des Nitrokey 3A Mini

Die OpenPGP-Karte kann mit Hilfe des Befehls gpg –card-edit zurückgesetzt werden.

 $ gpg2 --card-edit
Reader ...........: 20A0:42B2:X:0
Application ID ...: D276000124010304000F6447F2530000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Nitrokey
Serial number ....: 6447F253
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 : 4
KDF setting ......: off
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: 8B7A 57A9 42EE B952 543C  3447 381D 2F43 DC9C B69E
      created ....: 2024-12-15 15:57:07
Encryption key....: A3C0 465D A803 2B0D 8698  45AF FDD8 A382 72CF C453
      created ....: 2024-12-15 15:57:07
Authentication key: 1ECA 9914 E932 D485 061E  087A 035C E93F 4258 5E99
      created ....: 2024-12-15 15:57:07
General key info..: 
pub  rsa4096/381D2F43DC9CB69E 2024-12-15 Michael Nausch <michael@nausch.org>
sec>  rsa4096/381D2F43DC9CB69E  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253
ssb>  rsa4096/035CE93F42585E99  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253
ssb>  rsa4096/FDD8A38272CFC453  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253

gpg/card>

Mit dem Befehl admin wechseln wir in dern Admin-Menübereich.

gpg/card> admin
Admin commands are allowed

gpg/card>

Zum Zurücksetzen des Krypto-Gerätes auf Werkseinstellungen verwenden wir hier nun den Befehl factory-reset

gpg/card> factory-reset
gpg: OpenPGP card no. D276000124010304000F6447F2530000 detected

gpg: Note: This command destroys all keys stored on the card!

Continue? (y/N)

Hier bestätigen wir unseren Wunsch mit Eingabe von y.

Really do a factory reset? (enter "yes")

Nach Eingabe von yes beginnt die LED des Nitrokey 3A Mini zu blinken und endet dann am Ende wenn der Factory-Reste abgeschlossen ist.

Rufen wir erneut den Status des Nitrokey 3A Mini ab, so sind alle unsere zuvor gemachten Änderungen wieder weg und wir können mit der Konfiguration wieder von vorne beginnen!

 $ gpg2 --card-status
Reader ...........: 20A0:42B2:X:0
Application ID ...: D276000124010304000F6447F2530000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Nitrokey
Serial number ....: 6447F253
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
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]

ED25519-Schlüssel generieren

Seit nummher einem Jahr - genauer gesagt seit 20223 - empfiehlt unter anderem das BSI1) keine RSA-Schlüssel mit einer Länge von 2048 Bit einzusetzen. Bei langen Nutzungsdauern von z.B. 5 Jahren und mehr ist es bereits jetzt notwendig, längere Schlüssel zu generieren. 3k oder 4-Schlüssel haben jedoch den Nachteil dass diese deutlich langsamer sind. Dank der Unterstützung bei der Verschlüsselung mittels beim Nitrokey 3A Mini können wir die deutlich Elliptische-Kurven-Kryptographie (ECC) verwednen! Dieses Verschlüsselungsverfahren gilt bei kleineren ECC-Schlüsseln als genauso sicher wie längere RSA-Schlüssel und ist zudem deutlich schneller!

Im Gegensatz zu RSA gibt es bei der Kryptographie mit elliptischen Kurven viele verschiedene Formen (sogenannte Kurven).

Nicht unerwähnt soll hier aber auch sein, dass die NSA2) an der Entwicklung der NIST-Kurven beteiligt war - auch wenn es keine Hinweise auf Hintertüren in den Kurven gibt, kann die Verwendung dieser bestimmten NIST-Kurve eine Frage des Vertrauens darstellen.

Glücklicherweise unterstützen die neuen Nitrokeyszwei Arten von Kurven, nämlich NIST und Brainpool, daher werden später statt der NIST-Kurven hier die Brainpool P-256-Kurven verwenden! Weiter ergänzende Informationen zum Thema ist in dem Artikel hier → Eine (relativ leicht verständliche) Einführung in die Kryptografie mit elliptischen Kurven zu finden!

Damit auf einem Nitrokey 3A Mini Schlüssel auf Basis elliptischer Kurven generiert werden können, muss auf dem Rechner, an dem der Stick angesteckt und administriert werden soll, GnuPG in Version 2.1.16 oder höher installiert sein. Bei Arch Linux ist dies kein Problem da aktuell3) die Version 2.4.7 bereitgestellt wird. Bei Bedarf können wir die Version z.B. wie folgt abfragen.

 $ gpg2 --version | grep gpg
gpg (GnuPG) 2.4.7

Die Version der Karten-Firmware können wir bei Bedarf wie folgt ermiteln:

 $ gpg2 --card-status | grep Ver
Version ..........: 3.4

Nun werden wir uns Schlüsselpaar auf Basis elliptischer Kurven auf dem Nitrokey 3A Mini generieren. Bevor wir die eigentlichen ED25519-Schlüssel generieren können, müssen wir unseren Stick erst einmal von den vorbelegten RSA-Schlüssel auf ECC-Schlüssel umstellen. Welcher Typ 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

Zum Ändern der Vorgabewerte benutzen wir die Option --card-edit beim Befehl gpg2.

 $ gpg2 --card-edit
Reader ...........: 20A0:42B2:X:0
Application ID ...: D276000124010304000F6447F2530000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Nitrokey
Serial number ....: 6447F253
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
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

gpg/card>

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üsselart von ECC und bei der Frage nach der elliptischer Kurve wählen wir dann die Option Curve 25519 *default*.

Changing card key attribute for: Signature key
Please select what kind of key you want:
   (1) RSA
   (2) ECC
Your selection? 2
Please select which elliptic curve you want:
   (1) Curve 25519 *default*
   (4) NIST P-384
   (6) Brainpool P-256
Your selection? 1

Bei dem erscheinenden Eingabefeld zur PIN-Eingabe geben wir hier und bei den nachfolgenden Änderungen jeweils die Default-Admin-PIN 12345678> ein. Bild: GnuPG Admin-PIN Eingabe Dialogfenster

Changing card key attribute for: Encryption key
Please select what kind of key you want:
   (1) RSA
   (2) ECC
Your selection? 2
Please select which elliptic curve you want:
   (1) Curve 25519 *default*
   (4) NIST P-384
   (6) Brainpool P-256
Your selection? 1
The card will now be re-configured to generate a key of type: brainpoolP256r1

Bild: GnuPG Admin-PIN Eingabe Dialogfenster

Changing card key attribute for: Authentication key
Please select what kind of key you want:
   (1) RSA
   (2) ECC
Your selection? 2
Please select which elliptic curve you want:
   (1) Curve 25519 *default*
   (4) NIST P-384
   (6) Brainpool P-256
Your selection? 1

Bild: GnuPG Admin-PIN Eingabe Dialogfenster

gpg/card>

Zur Erfolgskontrolle können wir den Status wir folgt abfragen:

 $ gpg2 --card-status | grep Key
Key attributes ...: ed25519 cv25519 ed25519

Nun werden wir unser ED25519-Schlüsselmaterial erzeugen. Hierzu verwenden wir den Admin-Befehl generate.

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

Da wir unseren private-key, der unter anderem zum Verschlüsseln verwendet wird, ausschliesslich in der Hardware-Schlüsselchips des Nitrokey 3A Mini vorhalten wollen bestätigen wir diese Frage hier mit der Eingabe von n!

 n

Bild: GnuPG User-PIN Eingabe Dialogfenster

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) 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: Michael Nausch
Email address: michael@nausch.org
Comment: 
You selected this USER-ID:
    "Michael Nausch <michael@nausch.org>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
gpg: revocation certificate stored as '/home/django/.gnupg/openpgp-revocs.d/F5F0CD13074BA693D950F92A0A56C9A3A69FE291.rev'
public and secret key created and signed.

pub   ed25519 2024-12-15 [SC]
      F5F0CD13074BA693D950F92A0A56C9A3A69FE291
uid                      Michael Nausch <michael@nausch.org>
sub   ed25519 2024-12-15 [A]
sub   cv25519 2024-12-15 [E]

gpg/card>

Die Erzeugung eines ED255194k-Schlüssels dauert wenige Sekunden, also auch hier keinesfalls den Nitrokey 3A Mini abziehen oder die Generierung abbrechen! Während der Erzeugung der Schlüssel leuchtet bzw. blinkt die LED im Stick.

gpg: revocation certificate stored as '/home/django/.gnupg/openpgp-revocs.d/F5F0CD13074BA693D950F92A0A56C9A3A69FE291.rev'
public and secret key created and signed.

pub   ed25519 2024-12-15 [SC]
      F5F0CD13074BA693D950F92A0A56C9A3A69FE291
uid                      Michael Nausch <michael@nausch.org>
sub   ed25519 2024-12-15 [A]
sub   cv25519 2024-12-15 [E]

Wir verfügen als nun über unser gewünschte ED25519-Schlüsselmaterial.

 $ gpg2 --card-status 
Reader ...........: 20A0:42B2:X:0
Application ID ...: D276000124010304000F6447F2530000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Nitrokey
Serial number ....: 6447F253
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 ...: ed25519 cv25519 ed25519
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 4
KDF setting ......: off
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: F5F0 CD13 074B A693 D950  F92A 0A56 C9A3 A69F E291
      created ....: 2024-12-15 17:08:38
Encryption key....: DBBD 5355 D9D0 334A A3FA  751F A89D D54D AE0E 394A
      created ....: 2024-12-15 17:08:38
Authentication key: EE7C 3807 4F0A 8F2A 5601  BF91 1E61 4A9A 36D4 DF53
      created ....: 2024-12-15 17:08:38
General key info..: pub  ed25519/0A56C9A3A69FE291 2024-12-15 Michael Nausch <michael@nausch.org>
sec>  ed25519/0A56C9A3A69FE291  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253
ssb>  ed25519/1E614A9A36D4DF53  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253
ssb>  cv25519/A89DD54DAE0E394A  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253

privaten Schlüsselbund

Fragen wir nun den privaten Schlüsselbund ab, finden wir den gerade angelegten Schlüssel bzw. den zugehörigen Proxy-Eintrag mit dem Verweis auf den Kryptostick. Dazu verwenden wir den Befehl gpg2 --list-secret-key bzw. die Kurzform dieses Befehls gpg2 -K.

 $ gpg2 -K
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   6  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 6u
/home/django/.gnupg/pubring.kbx
-------------------------------
sec>  ed25519 2024-12-15 [SC]
      F5F0CD13074BA693D950F92A0A56C9A3A69FE291
      Card serial no. = 000F 6447F253
uid           [ultimate] Michael Nausch <michael@nausch.org>
ssb>  ed25519 2024-12-15 [A]
ssb>  cv25519 2024-12-15 [E]

Öffentlichen Schlüssel ausgeben

Damit wir später unseren öffentlichen Schlüssel auch weitergeben oder zu einem Keyserver hoch laden, exportieren wir diesen in eine Datei.

$ $ gpg --export --armor michael@nausch.org> ~/.gnupg/michael@nausch.org_F5F0CD13074BA693D950F92A0A56C9A3A69FE291.pubkey

Diese Datei enthält unseren Schlüssel in ASCII-lesbarer Form.

$ cat ~/.gnupg/secmail@nausch.org.pubkey
secmail@nausch.org.pubkey
-----BEGIN PGP PUBLIC KEY BLOCK-----
 
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
Vo7asIbAswY=
=6DCk
-----END PGP PUBLIC KEY BLOCK-----

card-edit - Stick personalisieren

Zunächst wollen wir unseren Stick personalisieren, also mit den Benutzerspezifischen Daten versorgen:

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!

Zum Ändern dieser Daten müssen wir nach der Anmeldung an der Karte mit dem Befehl adminin den Admin Bereich wechseln.

 $ gpg --card-edit
Reader ...........: 20A0:42B2:X:0
Application ID ...: D276000124010304000F6447F2530000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Nitrokey
Serial number ....: 6447F253
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 ...: ed25519 cv25519 ed25519
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 4
KDF setting ......: off
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: F5F0 CD13 074B A693 D950  F92A 0A56 C9A3 A69F E291
      created ....: 2024-12-15 17:08:38
Encryption key....: DBBD 5355 D9D0 334A A3FA  751F A89D D54D AE0E 394A
      created ....: 2024-12-15 17:08:38
Authentication key: EE7C 3807 4F0A 8F2A 5601  BF91 1E61 4A9A 36D4 DF53
      created ....: 2024-12-15 17:08:38
General key info..: 
pub  ed25519/0A56C9A3A69FE291 2024-12-15 Michael Nausch <michael@nausch.org>
sec>  ed25519/0A56C9A3A69FE291  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253
ssb>  ed25519/1E614A9A36D4DF53  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253
ssb>  cv25519/A89DD54DAE0E394A  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253
 gpg/card> admin
Admin commands are allowed

Wir ändern zunächst den Namen des Karteninhabers Name of cardholder:

 gpg/card> name
Cardholder's surname: Nausch
Cardholder's given name: Michael

Als nächstes definieren wir die Sprache des Kartenbenutzers:

 gpg/card> lang
Language preferences: de

Im nächsten Schritt setzen wir das Geschlecht des Karteninhabers:

 gpg/card> sex
Sex ((M)ale, (F)emale or space): m

Nun setzen wir noch den Anmelde-/Loginnamen entsprechend unserer Umgebung:

 gpg/card> login
Login data (account name): django

Zu guter Letzt setzen wir nun die URL, von der der public-key mit Hilfe des Befehls fetch unter gpg --edit-card auf die Karte geladen werden kann.

 gpg/card> url
URL to retrieve public key: https://keys.openpgp.org/search?q=get&search=0x0A56C9A3A69FE291

Somit ergeben sich folgende benutzerindividuellen Daten auf der Karte:

 gpg/card> verify 
Reader ...........: 20A0:42B2:X:0
Application ID ...: D276000124010304000F6447F2530000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Nitrokey
Serial number ....: 6447F253
Name of cardholder: Michael Nausch
Language prefs ...: de
Salutation .......: Mr.
URL of public key : https://keys.openpgp.org/search?q=get&search=0x0A56C9A3A69FE291
Login data .......: django
Signature PIN ....: forced
Key attributes ...: ed25519 cv25519 ed25519
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 4
KDF setting ......: off
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: F5F0 CD13 074B A693 D950  F92A 0A56 C9A3 A69F E291
      created ....: 2024-12-15 17:08:38
Encryption key....: DBBD 5355 D9D0 334A A3FA  751F A89D D54D AE0E 394A
      created ....: 2024-12-15 17:08:38
Authentication key: EE7C 3807 4F0A 8F2A 5601  BF91 1E61 4A9A 36D4 DF53
      created ....: 2024-12-15 17:08:38
General key info..: 
pub  ed25519/0A56C9A3A69FE291 2024-12-15 Michael Nausch <michael@nausch.org>
sec>  ed25519/0A56C9A3A69FE291  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253
ssb>  ed25519/1E614A9A36D4DF53  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253
ssb>  cv25519/A89DD54DAE0E394A  created: 2024-12-15  expires: never     
                                card-no: 000F 6447F253

Nun können wir die Erstinitialisierung abschliessen und den Einstellungsdialog mit dem Befehl quit verlassen.

 gpg/card> quit

1)
Bundesamt für Sicherheit in der Informationstechnik
2)
National Security Agency der USA
3)
Dezember '24
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/arch/3a.1734283316.txt.gz
  • Zuletzt geändert: 15.12.2024 17:21.
  • von django