Dies ist eine alte Version des Dokuments!
Nitrokey 3A mini in der Praxis unter ArchLinux
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 von Hard- und Software
Hardwareinformationen
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.
udev-Regeln
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
erster Test
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 gpg2
abfragen.
$ 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]
Anwendungsfälle - Software
Viele Informationen rund um den Nitrokey 3A Mini findet man auf der Nitrokey 3 Dokumentationsseite.
Nitrokey Start und GnuPG
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.
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 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
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 Brainpool P-256.
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? 6
Bei dem erscheinenden Eingabefeld zur PIN-Eingabe geben wir hier und bei den nachfolgenden Änderungen jeweils die Default-Admin-PIN 12345678>
ein.
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? 6 The card will now be re-configured to generate a key of type: brainpoolP256r1
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? 6
gpg/card>