Dies ist eine alte Version des Dokuments!
Nitrokey Start in der Praxis unter open SUSE leap 15.2
In diesem Kapitel befassen wir uns eingehend mit dem Nitrokey Start (Daten-/Infoblatt) unter openSUSE Leap 15.2. Weitere Informationen zu den Nitrokey-Sticks findet man auch hier bzw. im Support Forum.
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 openSUSE Leap 15.2 ein.
Hardwareinformationen
Informationen über den Stick können wir mit Hilfe des Befehls usb-devices
aus dem RPM-Paket usbutils dem System abverlangen.
# usb-devices
T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=02 Dev#= 16 Spd=12 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=20a0 ProdID=4211 Rev=02.00 S: Manufacturer=Nitrokey S: Product=Nitrokey Start S: SerialNumber=FSIJ-1.2.10-14081967 C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 3 Cls=0b(scard) Sub=00 Prot=00 Driver=(none)
Mit dem Befehl lshw
können wir uns ebenso anzeigen lassen, ob der Stick angesteckt und erlkannt 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/b generic Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Power Management Controller /0/100/14/0/3/2 generic Nitrokey Start /0/100/1a generic Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Trusted Execution Engine
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 016: ID 20a0:4211 Clay Logic
Im Syslog wird uns beim Anstecken des Sticks dies entsprechend protokolliert:
2020-08-04T19:04:25.081522+02:00 localhost kernel: [35273.158119] usb 1-3.2: new full-speed USB device number 17 using xhci_hcd 2020-08-04T19:04:25.285566+02:00 localhost kernel: [35273.363947] usb 1-3.2: New USB device found, idVendor=20a0, idProduct=4211, bcdDevice= 2.00 2020-08-04T19:04:25.285603+02:00 localhost kernel: [35273.363954] usb 1-3.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 2020-08-04T19:04:25.285608+02:00 localhost kernel: [35273.363957] usb 1-3.2: Product: Nitrokey Start 2020-08-04T19:04:25.285610+02:00 localhost kernel: [35273.363959] usb 1-3.2: Manufacturer: Nitrokey 2020-08-04T19:04:25.285612+02:00 localhost kernel: [35273.363963] usb 1-3.2: SerialNumber: FSIJ-1.2.10-140181967 2020-08-04T19:04:25.304993+02:00 localhost mtp-probe: checking bus 1, device 17: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.2" 2020-08-04T19:04:25.330612+02:00 localhost mtp-probe: bus: 1, device: 17 was not an MTP device 2020-08-04T19:04:25.383546+02:00 localhost systemd[1]: Reached target Smart Card.
udev-Regeln
Für den Betrieb unter openSUSE Leap 15.2 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
Damit unser System die neue udev-Regel auch erkennt und anwendet, lassen wir diese nun erneut einlesen; hierzu verwenden wir folgenden Befehl:
# udevadm control --reload-rules
Sobald wir nun unseren Nitrokey Start in einen USB-Port stecken können wir den Status der Karte z.B. mit der Option –card-status
beim Befehl gpg2
abfragen.
$ gpg2 --card-status
Reader ...........: Nitrokey Nitrokey Start (FSIJ-1.2.10-14081967) 00 00 Application ID ...: D276000124010200FFFE140819670000 Version ..........: 2.0 Manufacturer .....: unmanaged S/N range Serial number ....: 43243711 Name of cardholder: [not set] Language prefs ...: [not set] Sex ..............: unspecified 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 3 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none]
Paketabhängigkeiten
Für den Zugriff auf die SmartCard bzw. auf den Nitrokey Start benötigen wir z.B. für GPG den SmartCard-Daemon scdeamon welcher bei openSUSE leap 15.x mit Hilfe es Pakets gpg2 bereitgestellt wird.
In der Regel wurde das Paket bei der Erstinstallation bereits mitinstalliert. Sollte es noch fehlen können wir mit Hilfe vomn zypper
das dieses Paket einfach nach installieren.
# zypper install gpg2
$ gpg2 --version
gpg (GnuPG) 2.2.5 libgcrypt 1.8.2 Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Home: /home/django/.gnupg Supported algorithms: Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 Compression: Uncompressed, ZIP, ZLIB, BZIP2
Anwendungsfälle - Software
Nitrokey Start und GnuPG
Da es sich bei der Chipkarte des Nitrokey Start 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 ...........: Nitrokey Nitrokey Start (FSIJ-1.2.10-43243711) 00 00 Application ID ...: D276000124010200FFFE140819670000 Version ..........: 2.0 Manufacturer .....: unmanaged S/N range Serial number ....: 14081967 Name of cardholder: [not set] Language prefs ...: [not set] Sex ..............: unspecified 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 3 3 Signature counter : 0 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 ...........: Nitrokey Nitrokey Start (FSIJ-1.2.10-14081967) 00 00 Application ID ...: D276000124010200FFFE140819670000 Version ..........: 2.0 Manufacturer .....: unmanaged S/N range Serial number ....: 14081967 Name of cardholder: [not set] Language prefs ...: [not set] Sex ..............: unspecified 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 3 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none] gpg/card>