suse:nitrokey:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
suse:nitrokey:start [04.08.2020 17:24. ] – angelegt djangosuse:nitrokey:start [18.11.2024 18:51. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 177: Zeile 177:
  
 gpg/card></code> gpg/card></code>
 +
 +== 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
 +<code>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
 +</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
 +<code>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</code>
 +
 +=== 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 Start** unterstützt **__RSA__-Schlüssellängen** von **1024** und maximal von **2048**! 
 +
 +<WRAP center round important 80%>
 +Mit Hinblick auf die möglichen Unsicherheiten im Bezug auf die [[https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.pdf|RSA-Schlüssellänge]] werden wir uns später noch eingehend mit der Erstellung eines [[start#ed25519-schluessel_generieren|ED25519]] beschäftigen!
 +
 +</WRAP>
 +
 +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 **[[https://www.nitrokey.com/documentation/openpgp-create-on-device|offiziellen Doku]]** auf der [[https://www.nitrokey.com|Nitrokey Webseite]]. 
 +   $ gpg --card-edit
 +
 +   gpg/card> admin
 +
 +  Admin commands are allowed
 +
 +   gpg/card> generate
 +<code>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@nausch.org
 +Comment: Bastard Operator from Hell
 +You selected this USER-ID:
 +    "Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>"
 +
 +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
 +</code>
 +
 +Nun wird auf der Karte der gewählte Schlüssel erzeugt. 
 +
 +<WRAP center round tip 95%>
 +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.
 +</WRAP>
 +
 +<code>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 2020-08-04 [SC]
 +      E65B2BDF79A2E2E4C28F6E062E22436430385B49
 +uid                      Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>
 +sub   rsa2048 2020-08-04 [A]
 +sub   rsa2048 2020-08-04 [E]</code>
 +
 +=== ED25519-Schlüssel generieren ===
 +
 +In dem Artikel **[[https://www.nitrokey.com/de/news/2017/nitrokey-start-unterst%C3%BCtzt-elliptische-kurven-ecc|Nitrokey Start unterstützt elliptische Kurven (ECC)]]** wird sehr ausführlich das Zusammenspiel des Nitrokey Start und ECC beschrieben.
 +
 +Damit auf einem **Nitrokey Start** Schlüssel auf Basis elliptischer Kurven generiert werden können, muss dieser mindestens die Firmware Version 1.2 verfügen. Dies kontrolliert man am einfachsten mi Folgendem Befehl.
 +   $ gpg2 --card-status | grep Reader
 +
 +  Reader ...........: Nitrokey Nitrokey Start (FSIJ-1.2.10-14081967) 00 00
 +
 +Ferner 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 open SUSE leap 15.2 ist dies kein Problem da aktuell((August 20)) die Version 2.2.5 bereitgestellt wird. Bei Bedarf können wir die Version z.B. wie folgt abfragen.
 +   $ gpg2 --version | grep gpg
 +
 +  gpg (GnuPG) 2.2.5
 +
 +Nun werden wir uns Schlüsselpaar auf Basis elliptischer Kurven auf dem Nitrokey Start generieren. Bevor wir die eigentlichen [[https://de.wikipedia.org/wiki/Curve25519|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 
 +
 +<code>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> </code>
 +
 +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**.
 +<code>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
 +   (4) NIST P-384
 +Your selection? 1
 +The card will now be re-configured to generate a key of type: ed25519
 +Note: There is no guarantee that the card supports the requested size.
 +      If the key generation does not succeed, please check the
 +      documentation of your card to see what sizes are allowed.
 +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
 +   (4) NIST P-384
 +Your selection? 1
 +The card will now be re-configured to generate a key of type: cv25519
 +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
 +   (4) NIST P-384
 +Your selection? 1
 +The card will now be re-configured to generate a key of type: ed25519
 +
 +gpg/card></code>
 +
 +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 ...: ed25519 cv25519 ed25519
 +
 +Nun erstellen wir uns unsere gewünschten Schlüssel auf der SmartCard der Nitrokey Start. Wie schon beim [[#rsa-schluessel_generieren|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.
 +
 +   $ gpg2 --card-edit 
 +<code>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 ...: ed25519 cv25519 ed25519
 +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> </code>
 +
 +Die Schlüsselgenerierung erfolgt im Adminmenü, 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
 +<code>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) 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@nausch.org
 +Comment: Bastard Operator from Hell
 +You selected this USER-ID:
 +    "Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>"
 +
 +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
 +gpg: key 9308FC78386863AC marked as ultimately trusted
 +gpg: revocation certificate stored as '/home/django/.gnupg/openpgp-revocs.d/3E61A50347B523824132EC069308FC78386863AC.rev'
 +public and secret key created and signed.</code>
 +
 +Fragen wir nun den Inhalt der SmartCard mit dem Befehl ''**verify**'' ab, finden wir unsere gerade erstellten Schlüssel.
 +  gpg/card> verify 
 +<code>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 ...: ed25519 cv25519 ed25519
 +Max. PIN lengths .: 127 127 127
 +PIN retry counter : 3 3 3
 +Signature counter : 4
 +Signature key ....: 3E61 A503 47B5 2382 4132  EC06 9308 FC78 3868 63AC
 +      created ....: 2020-08-04 21:26:26
 +Encryption key....: FB2B D8AD 4660 EADE 0108  852D BF1E A3F7 0320 3D8A
 +      created ....: 2020-08-04 21:26:26
 +Authentication key: 9131 32BE D5AF D08E 4464  89B6 77F0 A5B2 F32A 76AE
 +      created ....: 2020-08-04 21:26:26
 +General key info..: pub  ed25519/9308FC78386863AC 2020-08-04 Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>
 +
 +sec>  ed25519/9308FC78386863AC  created: 2020-08-04  expires: never     
 +                                card-no: FFFE 43243711
 +ssb>  ed25519/77F0A5B2F32A76AE  created: 2020-08-04  expires: never     
 +                                card-no: FFFE 43243711
 +ssb>  cv25519/BF1EA3F703203D8A  created: 2020-08-04  expires: never     
 +                                card-no: FFFE 43243711</code>
 +Wir verlassen nun das Programm **''gpg2''** wieder und werden anschließend den Stick [[#card-edit_-_stick_personalisieren|personalisieren]].
 +  gpg/card> quit
 +
 +<code>pub   ed25519 2020-08-04 [SC]
 +      3E61A50347B523824132EC069308FC78386863AC
 +uid                      Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>
 +sub   ed25519 2020-08-04 [A]
 +sub   cv25519 2020-08-04 [E]
 +</code>
 +
 +=== 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
 +<code>sec>  rsa2048 2020-08-04 [SC]
 +      E65B2BDF79A2E2E4C28F6E062E22436430385B49
 +      Card serial no. = FFFE 43243711
 +uid           [ultimate] Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>
 +ssb>  rsa2048 2020-08-04 [A]
 +ssb>  rsa2048 2020-08-04 [E]
 +</code>
 +
 +=== Öffentlichen Schlüssel ausgeben ===
 +Damit wir später unseren öffentlichen Schlüssel auch weitergeben oder zu einem [[https://keys.openpgp.org/|Keyserver]] hoch laden, exportieren wir diesen in eine Datei.
 +  $ gpg --export --armor secmail@nausch.org > secmail@nausch.org.pubkey
 +
 +Diese Datei enthält unseren Schlüssel in ASCII-lesbarer Form.
 +  $ cat secmail@nausch.org.pubkey
 +<file key secmail@nausch.org.pubkey>-----BEGIN PGP PUBLIC KEY BLOCK-----
 +
 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
 +=WNYT
 +-----END PGP PUBLIC KEY BLOCK-----</file>
 +
 +=== 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 **admin**in den Admin Bereich wechseln.
 +   $ gpg --card-edit
 +
 +<code>gpg: detected 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 ...: ed25519 cv25519 ed25519
 +Max. PIN lengths .: 127 127 127
 +PIN retry counter : 3 3 3
 +Signature counter : 17
 +Signature key ....: B9D7 123A 1FEF B68D B901  937C 4F5A E805 485F 5308
 +      created ....: 2020-08-04 21:25:33
 +Encryption key....: 57E6 DB7D 7A1C 5CA8 5373  C448 499C 2669 B5F5 7A76
 +      created ....: 2020-08-04 21:25:33
 +Authentication key: 40CB FA55 DC16 F513 B5F8  7F9C 79BA 5416 C05A DFEB
 +      created ....: 2020-08-04 21:25:33
 +General key info..: [none]
 +
 +gpg/card> </code>
 +
 +   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=0x074ECF6150A6BFED
 +
 +Somit ergeben sich folgende benutzerindividuellen Daten auf der Karte:
 +   gpg/card> verify 
 +
 +<code>Application ID ...: D276000124010200FFFE140819670000
 +Version ..........: 2.0
 +Manufacturer .....: unmanaged S/N range
 +Serial number ....: 14081967
 +Name of cardholder: Michael Nausch
 +Language prefs ...: de
 +Sex ..............: male
 +URL of public key : [not set]
 +Login data .......: django
 +Signature PIN ....: forced
 +Key attributes ...: 2048R 2048R 2048R
 +Max. PIN lengths .: 127 127 127
 +PIN retry counter : 3 3 3
 +Signature counter : 4
 +Signature key ....: B9D7 123A 1FEF B68D B901  937C 4F5A E805 485F 5308
 +      created ....: 2020-08-04 21:25:33
 +Encryption key....: 57E6 DB7D 7A1C 5CA8 5373  C448 499C 2669 B5F5 7A76
 +      created ....: 2020-08-04 21:25:33
 +Authentication key: 40CB FA55 DC16 F513 B5F8  7F9C 79BA 5416 C05A DFEB
 +      created ....: 2020-08-04 21:25:33
 +General key info..: [none]
 +</code>
 +
 +Nun können wir die Erstinitialisierung abschliessen und den Einstellungsdialog mit dem Befehl **quit** verlassen.
 +   gpg/card> quit
 +
 +=== change-pin ===
 +<WRAP center round alert 95%>
 +**WICHTIG**:
 +Unbedingt vor dem ersten Ändern der PINs ist es notwendig, erst einmal Schlüssel zu generieren bzw. zu importieren! Denn sonst schlägt das Ändern der Benutzer-PIN fehl, bzw. wird die Benutzer-PIN beim Überschreiben von Schlüsseln auf den Default-Wert von **123456** zurückgesetzt. Die Default-PIN für den Admin lautet **12345678**.
 +
 +Es ist sehr wichtig dass als erstes die **Admin-PIN** und dann erst im Anschluss die **Nutzer-PIN** geändert wird! Denn sonst der **//[[http://www.fsij.org/doc-gnuk/gnuk-passphrase-setting.html#|admin-less mode]]//** aktiviert! 
 +</WRAP>
 +
 +Mit Hilfe des Befehls ''**gpg %%--%%change-pin**'' können wir 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.
 +
 +<WRAP center round important 95%>
 +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!
 +
 +Ferner ist darauf zu achten, dass zunächst die Admin-PIN und erst dann die Nutzer-PIN geändert. Ansonsten wird nämlich der //[[http://www.fsij.org/doc-gnuk/gnuk-passphrase-setting.html#|admin-less mode]]// aktiviert.
 +</WRAP>
 +
 +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 Start 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
 +<code>gpg: OpenPGP Karte Nr. D276000124010200FFFE432437110000 erkannt
 +
 +1 - change PIN
 +2 - unblock PIN
 +3 - change Admin PIN
 +4 - set the Reset Code
 +Q - quit
 +
 +Ihre Auswahl?</code>
 +
 +Wir ändern also zu erste die **Admin-PIN** durch Auswahl des Menüpunkts **3** aus und erst anschliessend die **Benutzer-PIN** mit **1**. Wir werden dann nach der aktuellen PIN gefragt und müssen die neue PIN 2x eingeben zum Abändern.
 +
 +{{ :centos:nitrokey:nitrokey-gpg_01.png?nolink&275 |Bild: PIN-Eingabedialog beim Abändern der Benutzer-/Admin-PIN}}
 +
 +<code>gpg/card> passwd
 +gpg: OpenPGP card no. D276000124010200FFFE432437110000 detected
 +
 +1 - change PIN
 +2 - unblock PIN
 +3 - change Admin PIN
 +4 - set the Reset Code
 +Q - quit
 +
 +Your selection? 3
 +gpg: 3 Admin PIN attempts remaining before card is permanently locked
 +
 +Please enter the Admin PIN
 +                 
 +New Admin PIN
 +                     
 +New Admin PIN
 +PIN changed.     
 +
 +1 - change PIN
 +2 - unblock PIN
 +3 - change Admin PIN
 +4 - set the Reset Code
 +Q - quit
 +
 +Your selection? 1
 +
 +Please enter the PIN
 +           
 +New PIN
 +               
 +New PIN
 +PIN changed.     
 +
 +1 - change PIN
 +2 - unblock PIN
 +3 - change Admin PIN
 +4 - set the Reset Code
 +Q - quit
 +
 +Your selection? 4
 +gpg: 3 Admin PIN attempts remaining before card is permanently locked
 +
 +Please enter the Admin PIN
 +                 
 +New Reset Code
 +               
 +New Reset Code
 +gpg: Reset Code is too short; minimum length is 8
 +Error setting the Reset Code: bad passphrase
 +
 +1 - change PIN
 +2 - unblock PIN
 +3 - change Admin PIN
 +4 - set the Reset Code
 +Q - quit
 +
 +Your selection? q
 +
 +gpg/card> quit</code>
 +
 +=== Verschlüsseln und entschlüsseln === 
 +Nun werden wir kurz einmal testen, ob wir mit Hilfe der Hardware-Schlüssel-Karte eine Datei ver- und wieder entschlüsseln können.
 +
 +  - Zunächst Wir legen uns erst einmal ein beliebiges Testdokument an. <code> $ cat /etc/os-release > testdatei.txt</code> Die Datei hat nun folgenden Inhalt:<code> $ cat testdatei.txt</code><code>NAME="openSUSE Leap"
 +VERSION="15.2"
 +ID="opensuse-leap"
 +ID_LIKE="suse opensuse"
 +VERSION_ID="15.2"
 +PRETTY_NAME="openSUSE Leap 15.2"
 +ANSI_COLOR="0;32"
 +CPE_NAME="cpe:/o:opensuse:leap:15.2"
 +BUG_REPORT_URL="https://bugs.opensuse.org"
 +HOME_URL="https://www.opensuse.org/"</code>
 +  - Nun verschlüsseln wir dieses Textdokument: <code> $ gpg2 -o testdatei.txt.pgp -a -r secmail@nausch.org -e testdatei.txt</code> <code>gpg: BF1EA3F703203D8A: There is no assurance this key belongs to the named user
 +sub  cv25519/BF1EA3F703203D8A 2018-11-27 Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>
 + Primary key fingerprint: 3E61 A503 47B5 2382 4132  EC06 9308 FC78 3868 63AC
 +      Subkey fingerprint: FB2B D8AD 4660 EADE 0108  852D BF1E A3F7 0320 3D8A
 +
 +It is NOT certain that the key belongs to the person named
 +in the user ID.  If you *really* know what you are doing,
 +you may answer the next question with yes.
 +
 +Use this key anyway? (y/N)</code> Wir haben also nun zwei Dokumente auf der Platte liegen. <code> $ ll testdatei.txt*</code><code>-rw-r--r-- 1 django users 265  4. Aug 20:02 testdatei.txt
 +-rw-r--r-- 1 django users 525  4. Aug 20:23 testdatei.txt.pgp</code>Die Datei **testdatei.txt.pgp** können wir nun soweit nicht mehr lesen.<code> $ cat testdatei.txt.pgp</code><code>-----BEGIN PGP MESSAGE-----
 +
 +hF4Dvx6j9wMgPYoSAQdAhvFZiNZWBjduajM7OWUr2yM2KC9jfzgvd0SEHael4zUw
 +XXie4+DZ25g7urXNBfnbwiHOw3z5j8P3vcblM8rpzB/u6+DmbZFFkiY6H5cVsCcs
 +0sAxARxA2p4YtPLOKyfGmxHifk6JqM19iUk2mht1MM2WqNtYUDLXKtos/2a4l+Xa
 +SPBwdilxMkMQ+jEfNI8t66a2FXcqucjrXPXhKiyZK8C+EJQyLZAbml5W00UKJZHI
 +lXQHfh1HCU+h1aOtmHM0kQSzOMprXRiEgyrrlG1ab5lZKMeIo7V7jwkQCOafs+PO
 +SXUm1Hq4KPwuPDsGjQ3sQo7ErQZFsiVrSWD67lXqtqNhg8a/0diRdSayYgQcAX1F
 +Rj1weIqZroiOvBW/9tY7vNCHS13pMNyZknZBFp7Gx36YqCnWGLkX/0BXvB0KTrMz
 +AQeUjQ==
 +=9ebq
 +-----END PGP MESSAGE-----</code>
 +  - Nun entschlüsseln wir unser Dokument wieder.<code> $ gpg2 --decrypt testdatei.txt.pgp > testdatei-entschlüsselt.txt</code><code>gpg: encrypted with 256-bit ECDH key, ID BF1EA3F703203D8A, created 2018-11-27
 +      "Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>"</code> {{ :suse:nitrokey:nitrokey-start-suse-01.png?direct&350 |Bild: Bildschirmhardcopy der gpg-keyentry Abfrage}} Den Inhalt dieser Datei können wir nun nach erfolgter Entschlüsselung natürlich wieder lesen.<code> $ cat testdatei-entschlüsselt.txt</code><code>NAME="openSUSE Leap"
 +VERSION="15.2"
 +ID="opensuse-leap"
 +ID_LIKE="suse opensuse"
 +VERSION_ID="15.2"
 +PRETTY_NAME="openSUSE Leap 15.2"
 +ANSI_COLOR="0;32"
 +CPE_NAME="cpe:/o:opensuse:leap:15.2"
 +BUG_REPORT_URL="https://bugs.opensuse.org"
 +HOME_URL="https://www.opensuse.org/"</code>
 +
 +=== Signieren === 
 +Nun werden wir kurz einmal testen, ob wir mit Hilfe der Hardware-Schlüssel-Karte eine Datei signieren und die Signatur auch wieder prüfen können.
 +
 +  - Zunächst Wir legen uns erst einmal ein beliebiges Testdokument an. <code> $ date > textdatei.txt</code> Die Datei hat nun folgenden Inhalt:<code> $ cat textdatei.txt</code><code>Di 4. Aug 20:34:27 CEST 2020</code>
 +  - Nun signieren wir dieses Textdokument: <code> $ gpg --sign textdatei.txt</code> {{ :suse:nitrokey:nitrokey-start-suse-01.png?direct&350 |Bild: Bildschirmhardcopy der gpg-keyentry Abfrage}} Wir haben also nun zwei Dokumente auf der Platte liegen. <code> $ ll textdatei.txt*</code><code>-rw-r--r-- 1 django users  29  4. Aug 20:57 textdatei.txt
 +-rw-r--r-- 1 django users 177  4. Aug 20:57 textdatei.txt.gpg</code>Die Datei **textdatei.txt.pgp** können wir nun soweit nicht mehr lesen.<code> $ cat textdatei.txt.gpg</code><code>������!6��O�EF���5I�%�%)�%��z%%��W�d*��)8��+X��[+8��yF\�,b �b�,v�K�ݷ*79��a����2���S&�����Gq��}���o������u��Ȗ_�Wu_����&����y��G�P�z����ۙ��(;xn��4</code> Die Datei beinhaltet die Signatur zu unserer Datei, also entsprechender Zahlensalat.<code> $ file textdatei.txt.gpg</code><code>textdatei.txt.gpg: data</code>  Dieses Vorgehen macht jedoch nur Sinn, wenn mit der Option ''%%--%%encrypt'' gleichzeitig die Datei verschlüsselt werden soll. Wir signieren nun die Datei mit dem privat-key und verschlüsseln die Datei mit dem public-key unseres eigenen Schlüssels auf dem Nitrokey Start. So kann die Datei nur von uns selbst wieder aufgemacht werden, sofern man im Besitz des Nitrokey Start und der zugehörigen PIN ist!<code> $ gpg: BF1EA3F703203D8A: There is no assurance this key belongs to the named user
 +sub  cv25519/BF1EA3F703203D8A 2018-11-27 Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>
 + Primary key fingerprint: 3E61 A503 47B5 2382 4132  EC06 9308 FC78 3868 63AC
 +      Subkey fingerprint: FB2B D8AD 4660 EADE 0108  852D BF1E A3F7 0320 3D8A
 +
 +It is NOT certain that the key belongs to the person named
 +in the user ID.  If you *really* know what you are doing,
 +you may answer the next question with yes.
 +
 +Use this key anyway? (y/N)</code> {{ :suse:nitrokey:nitrokey-start-suse-01.png?direct&350 |Bild: Bildschirmhardcopy der gpg-keyentry Abfrage}} Wir haben nunmehr eine neue verschlüsselte und signierte Datei.<code> $ file textdatei.txt.gpg</code>Im nun folgendem Beispiel signieren wir unsere Datei und konvertieren sie so, dass wir sie einfach per eMail verschicken können. Hierzu nutzen wir die Option ''%%--%%armor''.<code> $ gpg --sign --armor textdatei.txt</code> {{ :suse:nitrokey:nitrokey-start-suse-01.png?direct&350 |Bild: Bildschirmhardcopy der gpg-keyentry Abfrage}} Nun können wir uns die erstellte signierte Datei ansehen. <code> $ cat textdatei.txt.asc</code><code>-----BEGIN PGP MESSAGE-----
 +
 +owGbwMvMwCE2meNPhUVG8hrGNQZJvCWpFSUpiSWpmXolFSXxmhs2uWQqmOgpOJam
 +KxgZWJmaWxkZKzi7BocAeUYGXB2lLAxiHAyyYoosdolLmd23Kjc5Gr1hg5nIygQy
 +gYGLUwAmon6JkWHXDc+AWrfjeyokWNeoLrqruH9DfsNrPi7hRWdz9smcem/MyPCy
 +4YL17MjAT/Vm/NVllzI/Hphm4Kptt2rRI9FMm3LN97wA
 +=BXv/
 +-----END PGP MESSAGE-----</code> Soll die Originaldatei zusammen mit der Signatur in der erzeugten Datei stehen, so verwendet man die Option ''%%–-%%clearsign''.<code> $ gpg --clearsign --armor textdatei.txt</code> {{ :suse:nitrokey:nitrokey-start-suse-01.png?direct&350 |Bild: Bildschirmhardcopy der gpg-keyentry Abfrage}} Die erzeugte Testdatei.asc enthält dann sowohl den Originaltext, wie auch die Dateisignatur: <code> $ cat textdatei.txt.asc</code><code>-----BEGIN PGP SIGNED MESSAGE-----
 +Hash: SHA256
 +
 +Di 4. Aug 20:57:23 CEST 2020
 +-----BEGIN PGP SIGNATURE-----
 +
 +iHUEARYIAB0WIQQ+YaUDR7UjgkEy7AaTCPx4OGhjrAUCXymw/AAKCRCTCPx4OGhj
 +rBwEAP0dZtolkQCmLYuccDEjTWVK/Pa8we40nHyJ+SZgmxVlcQD/YT/H/X25TADr
 +eR1Z/bLn3y61laBbGLhOaElPSNtJfQ0=
 +=76rm
 +-----END PGP SIGNATURE-----</code> Mit ''gpg %%-–%%verify'' können wir die Signatur der Datei überprüfen:<code> $ gpg --verify textdatei.txt.asc</code><code>gpg: Signature made Di 04 Aug 2020 21:03:24 CEST
 +gpg:                using EDDSA key 3E61A50347B523824132EC069308FC78386863AC
 +gpg: Good signature from "Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>" [unknown]
 +gpg: WARNING: This key is not certified with a trusted signature!
 +gpg:          There is no indication that the signature belongs to the owner.
 +Primary key fingerprint: 3E61 A503 47B5 2382 4132  EC06 9308 FC78 3868 63AC
 +gpg: WARNING: not a detached signature; file 'textdatei.txt' was NOT verified!Wir verändern nun zu Testzwecken den Inhalt der Testdatei, in dem wir den Text verfälschen. (**''2099''** als Jahresangabe) <code> $ vim textdatei.txt.asc</code><code>-----BEGIN PGP SIGNED MESSAGE-----
 +Hash: SHA256
 +
 +Di 4. Aug 20:57:23 CEST 2099
 +-----BEGIN PGP SIGNATURE-----
 +
 +iHUEARYIAB0WIQQ+YaUDR7UjgkEy7AaTCPx4OGhjrAUCXymw/AAKCRCTCPx4OGhj
 +rBwEAP0dZtolkQCmLYuccDEjTWVK/Pa8we40nHyJ+SZgmxVlcQD/YT/H/X25TADr
 +eR1Z/bLn3y61laBbGLhOaElPSNtJfQ0=
 +=76rm
 +-----END PGP SIGNATURE-----</code>Nun überprüfen wir die Signatur der Testdatei, was natürlich postwendend als **BAD signature** angeprangert wird. <code> $ gpg --verify textdatei.txt.asc</code><code>gpg: Signature made Di 04 Aug 2020 21:03:24 CEST
 +gpg:                using EDDSA key 3E61A50347B523824132EC069308FC78386863AC
 +gpg: BAD signature from "Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>" [unknown]</code>
 +
 +==== Nitrokey Start und Thunderbird ==== 
 +Nachdem wir nun unsere Schlüssel auf dem Kryptografie-Stick erstellt haben, wollen wir diesen nun verwenden um bei Thunderbird unsere elektronische Kommunikation per eMail abzusichern. 
 +Für die Unterstützung der PGP-Schlüssel installieren wir uns über das Menü von Thunderbird das **add-on //Enigmail//** von https://addons.thunderbird.net.
 +
 +=== Schlüssel einem Konto zuweisen ===
 +Damit wir unser Kryptodevice unter Thunderbird nutzen können müssen wir erst einmal den Schlüssel dem betreffenden Konto zuweisen. 
 +Über das Menü wählen wir den Punkt **Konten-Einstellungen** aus.
 +
 +{{ :fedora:nitrokey:fedora-nitrokey-01.png?nolink&850 |Bild: Thunderbird - Menüpunkt Konten-Einstellungen}}
 +
 +Beim passenden Konto wählen wir dann die Option **OpenPGP-Sicherheit** aus.
 +
 +{{ :fedora:nitrokey:fedora-nitrokey-02.png?nolink&800 |Bild: Thunderbird - Menüpunkt OpenPGP-Sicherheit }}
 +
 +Hier wählen wir nun den Schlüssel aus, den wir zuvor erstellt und auf die SmartCard des Kryptostick Start verschoben hatten.
 +
 +{{ :fedora:nitrokey:fedora-nitrokey-03.png?nolink&600 |Bild: Thunderbird - Auswahl des Schlüssels auf dem Kryptostick. }}
 +
 +=== eMail signieren ===
 +Nun erstellen wir eine Testnachricht und wählen die Option **Signieren** aus.
 +
 +{{ :fedora:nitrokey:fedora-nitrokey-04.png?nolink&600 |Bild: Thunderbird - Erstellen einer neuen Nachricht. }}
 +
 +Sobald wir nun eine Nachricht verschicken die signiert werden soll, wird vor dem Versand die PIN abgefragt und die Nachricht mit dem Signatur-Unterschlüssel unterschrieben.
 +
 +{{ :fedora:nitrokey:fedora-nitrokey-05.png?nolink&300 |Bild: Thunderbird - PIN-Abfrgae beim Signieren und Versenden einer Nachricht. }}
 +
 +=== eMail entschlüsseln ===
 +Bekommen wir nun eine verschlüsselte Nachricht, die mit dem öffentlichen Schlüssel unseres Schlüssels der sich auf dem Nitrokey Start befindet, benötigen wir natürlich zum Entschlüsseln unseren Kryptostick. Falls der Stick noch nicht angesteckt wurde, werden wir entsprechend aufgefordert dies nachzuholen.
 +
 +{{ :fedora:nitrokey:fedora-nitrokey-06.png?nolink&850 |Bild: Thunderbird - Zum Entschlüsseln einer Nachricht ist der Stick anzustecken. }}
 +
 +Sobald wir eine verschlüsselte Nachricht öffnen, werden wir nach der PIN gefragt, damit der Schlüssel zum Entschlüsseln auf der SmartCard freigeschalten werden kann.
 +
 +{{ :fedora:nitrokey:fedora-nitrokey-07.png?nolink&300 |Bild: Thunderbird - PIN-Abfrgae beim Signieren und Versenden einer Nachricht. }}
 +
 +Haben wir die PIN richtig eingegeben, wird die entschlüsselte Nachricht angezeigt.
 +
 +{{ :fedora:nitrokey:fedora-nitrokey-08.png?nolink&850 |Bild: Thunderbird - Anzeige der entschlüsselten Nachricht }}
 +
 +Über das Schlosssymbol in der Nachricht können wir uns Details zu den Enigmail-Sicherheitsinformationen anzeigen lassen.
 +
 +{{ :fedora:nitrokey:fedora-nitrokey-09.png?nolink&585 |Bild: Thunderbird - Anzeige der Enigmail-Sicherheitsinformationen der entschlüsselten Nachricht }}
 +
 +==== Nitrokey Start und Secure Shell  ==== 
 +
 +<WRAP center round important 90%>
 +Ob man in Zeiten von Überwachungsphantasten in Unternehmen und vor allem auch bei einer NSA oder BND, noch **[[http://www.golem.de/news/elliptische-kurven-die-herkunft-der-nist-kurven-1309-101567.html|RSA-Schlüssel]]** einsetzen kann und mag, muss natürlich jeder Admin für sich selbst entscheiden. 
 +
 +Der Sicherheitsguru Bruce Schneier hat in seinem **[[https://www.schneier.com/blog/archives/2013/09/the_nsa_is_brea.html#c1675929|Blog]]** hierzu eine eindeutige Aussage getätigt: 
 +
 +<wrap em>//"On the crypto bits in your guardian piece, I found especially interesting that you suggest classic discrete log crypto over ecc. I want to ask if you could elaborate more on that." __I no longer trust the constants. I believe the NSA has manipulated them through their relationships with industry.__//</wrap>
 +
 +**[[https://de.wikipedia.org/wiki/Curve25519|EED25519]]** ist ein Elliptic Curve Signature Schema, welches beste Sicherheit bei vertretbaren Aufwand verspricht, als ECDSA oder DSA dies der Fall ist. Zur Auswahl sicherer kryptografischer Kurven bei der //Elliptic-Curve Cryptography// findet man auf der Seite [[https://safecurves.cr.yp.to/|hier]] hilfreiche Erklärungen und eine Gegenüberstellung der möglichen verschiedenen Alternativen.
 +</WRAP>
 +
 +Auf RSA Schlüssel muss man aber nicht mehr zwingend zurückgreifen, stehen doch aktuellere und zeitgemäßere Cipher, MACs, Schlüssel Typen und Key Exchange Algorithmen zur Verfügung. Als Alternative zu einem RSA-Keys haben wir uns bereits im Abschnitt **[[#ed25519-schluessel_generieren|Nitrokey Start und GnuPG - ED25519-Schlüssel generieren]]** Schlüsselmaterial auf Basis elliptischer Kurven erstellt, unter anderem auch einen //**Authentication Key**// erstellt. 
 +Diesen Schlüssel wollen wir nun auch zur Serveradministration verwenden.
 +
 +
 +=== SSH Client vorbereiten ===
 +Damit wir beim Verbindungsaufbau auf den Authentication Key zugreifen können, müssen wir unseren Client entsprechend vorbereiten.
 +
 +Hierzu aktivieren wir zunächst die Option ''**enable-ssh-support**'' in der Konfigurationsdatei //**~/.gnupg/gpg-agent.conf
 +**// des GPG-Agenten.
 +   $ vim ~/.gnupg/gpg-agent.conf
 +<file bash ~/.gnupg/gpg-agent.conf># File re-created by pEp
 +# See backup in '/home/django/.gnupg/gpg-agent.conf.1.pep.bkp'
 +
 +# File re-created by pEp
 +# See backup in '/home/django/.gnupg/gpg-agent.conf.0.pep.bkp'
 +
 +default-cache-ttl 300
 +max-cache-ttl 999999
 +
 +# Django : 2020-08-05
 +#          SSH-Unterstützung beim gnupg-agent aktiviert 
 +enable-ssh-support</file>
 +
 +Anschließend müssen wir noch die Datei //**~/.bashrc**// erweitern, damit der **SSH_AUTH_SOCK** für den Zugriff des SSH-Schlüssels auf dem Nitrokey Start genutzt werden kann.
 +   $ vim ~/.bashrc
 +<file bash ~/.bashrc># .bashrc
 +
 +# Source global definitions
 +if [ -f /etc/bashrc ]; then
 +        . /etc/bashrc
 +fi
 +
 +# User specific environment
 +PATH="$HOME/.local/bin:$HOME/bin:$PATH"
 +export PATH
 +
 +# Uncomment the following line if you don't like systemctl's auto-paging feature:
 +# export SYSTEMD_PAGER=
 +
 +# User specific aliases and functions
 +
 +# Django : 2020-08-05
 +#          Definition des SSH_AUTH_SOCK für den Zugriff des SSH-Schlüssels auf dem Nitrokey Start
 +unset SSH_AGENT_PID
 +        if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
 +        export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
 +fi</file>
 +
 +Damit unsere Änderungen aktiv werden, müssen wir nun zum Schluss noch den **pgp-agent** restarten bzw. einen Neustart des Clients erwirken. Der Einfachheit halber für den pragmatischen weg und melden uns einmal von unserer X-Session an unserem Clientrechner ab und wieder an!
 +
 +=== Public-Key des ED25519 SSH exportieren ===
 +Für den Zugriff auf unser Ziel-System mit Hilfe der SSH  benötigen wir noch den öffentlichen Schlüssel unseres Authentication Keys, den wir nun exportieren werden.
 +Zunächst besorgen wir uns die betreffende Schlüsselkennung des Autentication Keys, genauer gesagt die 4 letzten Zahlenreihen des nachfolgenden Aufrufs.
 +   $ gpg2 --card-status | grep Authentication\ key
 +
 +  Authentication key: 9131 32BE D5AF D08E 4464  89B6 77F0 A5B2 F32A 76AE
 +In diesem Konfigurationsbeispiel ist die Schlüssel-ID des Autentication Keys also die Nummer ''**77F0A5B2F32A76AE**''.
 +
 +Nun exportieren wir den öffentlichen Schlüssel und schreiben diesen in eine separate Datei.
 +   $ gpg2 --export-ssh-key 77F0A5B2F32A76AE >> ~/.ssh/77F0A5B2F32A76AE.pub
 +
 +Der Öffentliche Schlüssel in diesen Konfigurationsbeispiel lautet also:
 +   $ cat ~/.ssh/77F0A5B2F32A76AE.pub
 +
 +  ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJA+NwP2KzxqkrhKxi6JDRDUyE/ofPtiWwOb0ZjbQJW7 openpgp:0xF32A76AE
 +
 +Diesen Schlüssel kopieren wir nun auf das entsprechende Zielsystem an Ort und Stelle ''**~/.ssh/authorized_keys**''.
 +   $ scp ~/.ssh/77F0A5B2F32A76AE.pub zielhost.dmz.nausch.org: && ssh zielhost.dmz.nausch.org 'cat authorized_keys >> ~/.ssh/authorized_keys'
 +
 +=== SSH-Verbindung aufbauen ===
 +Nun können wir wie gewohnt eine Verbindung zu unserem entfernten System aufbauen. 
 +   $ ssh zielhost.dmz.nausch.org
 +
 +Da der SSH-Key zur Authentication nicht im Dateisystem liegt, sondern auf der SmartCard des Nitrokey werden wir nun nach der User-PIN gefragt, damit auf den privaten Schlüssel der Karte zugegriffen werden kann.
 +
 +{{ :suse:nitrokey:nitrokey-start-suse-01.png?direct&350 |Bild: PIN Abfrage beim Zugriff auf den Authentication Key der SmartCard des Nitrokeys}}
 +
 +Der entsperrte Schlüssel der SmartCard des Nitrokey Start wird nur für den Verbindungsaufbau zum Zielsystem verwendet. Bei jedem erneuten SSH-Verbindung müssen wir erneut bei angestecktem Nitrokey Start die PIN Nummer zum Entsperren eingeben!
 +
 +
 +==== Nitrokey Start und X.509 / S/MIME ====
 +=== micro-ca-tool ===
 +== Vorbereitung ==
 +   $ mkdir ~/nitrokey
 +
 +   $ cd  ~/nitrokey
 +
 +   $ git clone https://github.com/sektioneins/micro-ca-tool.git
 +
 +   $ ln -s ~/nitrokey/micro-ca-tool/micro-ca-tool ~/bin/micro-ca-tool
 +
 +   $ micro-ca-tool -h
 +<code>                 mmm    mm         mmmmmmm               ""#
 +           m"   "   ##            #     mmm    mmm     #
 + #   #         #       #  #           #    #" "#  #" "#    #
 + #   #   """   #       #mm#   """     #    #   #  #   #    #
 + #mmm#        "mmm" #    #          #    "#m#"  "#m#"    "mm
 + #
 + "               (C) 2015 SektionEins GmbH / Ben Fuhrmannek
 +                 https://sektioneins.com/
 +                 https://github.com/sektioneins/micro-ca-tool
 +[#] Version: 0.1
 +
 +Welcome to µ-CA.
 +This tool will help you to perform basic tasks with your CA:
 +* Create CA as files
 +* or Create CA on a SmartCard
 +* or Create CA as files and store on SmartCard
 +* Create intermediate CA
 +* Sign other certificates
 +* Backup CA key with n-of-m scheme key sharing
 +* Create client certificates
 +* Basic SmartCard functions: Info, Read, Write, Generate keys, Reset
 +
 +SECURITY NOTE: This tool handles secret keys. As such it is best to follow the 
 +following guidelines:
 +* Use this tool only on single-user and non-networked systems.
 +* Make sure files are stored on an encrypted filesystem only. E.g. copy this 
 +script to a crypto-container.
 +* Do not leave unencrypted private keys when done. Better encrypt them for 
 +backup or store them on an HSM.
 +* When done, unmount the encrypted filesystem.
 +
 +[#] Usage: /home/django/bin/micro-ca-tool [-c <config>] [-v] [-h] [<menu> <submenu>]
 +[#]   -c  specify alternative config file
 +[#]   -v  be verbose
 +[#]   -h  show this help message
 +[#]  optional [<menu> <submenu>] directly calls a function, then exits.</code>
 +
 +== PIN Setzen ==
 +Zunächst setzen wir die Admin und anschließend die User PIN.
 +   $ micro-ca-tool gpg pin
 +<code>                 mmm    mm         mmmmmmm               ""#
 +           m"   "   ##            #     mmm    mmm     #
 + #   #         #       #  #           #    #" "#  #" "#    #
 + #   #   """   #       #mm#   """     #    #   #  #   #    #
 + #mmm#        "mmm" #    #          #    "#m#"  "#m#"    "mm
 + #
 + "               (C) 2015 SektionEins GmbH / Ben Fuhrmannek
 +                 https://sektioneins.com/
 +                 https://github.com/sektioneins/micro-ca-tool
 +[#] Version: 0.1
 +gpg: OpenPGP Karte Nr. D276000124010200FFFE432438190000 erkannt
 +
 +1 - change PIN
 +2 - unblock PIN
 +3 - change Admin PIN
 +4 - set the Reset Code
 +Q - quit
 +
 +Ihre Auswahl?</code>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +/*
 +https://github.com/OpenSC/OpenSC/wiki/OpenPGP-card
 +
 +   $ openpgp-tool
 +
 +  Using reader with a card: Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00
 +
 +[django@T410 Schreibtisch]$ gpg2 --card-status
 +Reader ...........: Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00
 +Application ID ...: D276000124010200FFFE432108430000
 +Version ..........: 2.0
 +Manufacturer .....: unmanaged S/N range
 +Serial number ....: 43210843
 +Name of cardholder: [nicht gesetzt]
 +Language prefs ...: [nicht gesetzt]
 +Sex ..............: unbestimmt
 +URL of public key : [nicht gesetzt]
 +Login data .......: [nicht gesetzt]
 +Signature PIN ....: zwingend
 +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]
 +[django@T410 Schreibtisch]$ gpg2 --card-edit
 +
 +Reader ...........: Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00
 +Application ID ...: D276000124010200FFFE432108430000
 +Version ..........: 2.0
 +Manufacturer .....: unmanaged S/N range
 +Serial number ....: 43210843
 +Name of cardholder: [nicht gesetzt]
 +Language prefs ...: [nicht gesetzt]
 +Sex ..............: unbestimmt
 +URL of public key : [nicht gesetzt]
 +Login data .......: [nicht gesetzt]
 +Signature PIN ....: zwingend
 +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> 
 +
 +Reader ...........: Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00
 +Application ID ...: D276000124010200FFFE432108430000
 +Version ..........: 2.0
 +Manufacturer .....: unmanaged S/N range
 +Serial number ....: 43210843
 +Name of cardholder: [nicht gesetzt]
 +Language prefs ...: [nicht gesetzt]
 +Sex ..............: unbestimmt
 +URL of public key : [nicht gesetzt]
 +Login data .......: [nicht gesetzt]
 +Signature PIN ....: zwingend
 +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> admin
 +Admin-Befehle sind erlaubt
 +
 +gpg/card> help
 +quit           Menü verlassen
 +admin          Zeige Admin-Befehle
 +help           Diese Hilfe zeigen
 +list           Alle vorhandenen Daten auflisten
 +name           Kartenbesitzernamen ändern
 +url            Schlüssel-holen-URL ändern
 +fetch          Holen des Schlüssels mittels der URL auf der Karte
 +login          Ändern der Logindaten
 +lang           Ändern der Spracheinstellungen
 +sex            Ändern des Geschlechts des Kartenbesitzers
 +cafpr          Ändern des CA-Fingerabdrucks
 +forcesig       Umschalten des "Signature-force-PIN"-Schalters
 +generate       neue Schlüssel erzeugen
 +passwd         Menü für Ändern oder Entsperren der PIN
 +verify         überprüfe die PIN und liste alle Daten auf
 +unblock        die PIN mit dem Rückstellcode wieder freigeben
 +factory-reset  alle Schlüssel und Daten löschen
 +kdf-setup      Einrichten der KDF zur Authentifizierung
 +key-attr       Das Schlüsselattribut ändern
 +
 +gpg/card> name
 +Familienname des Kartenbesitzers:Nausch
 +Vorname des Kartenbesitzers:Michael
 +
 +gpg/card> lang
 +Spracheinstellungende
 +
 +gpg/card> sex
 +Geschlecht: (Männlich (M), Weiblich (F) oder Leerzeichen): m
 +
 +gpg/card> passwd
 +gpg: OpenPGP Karte Nr. D276000124010200FFFE432108430000 erkannt
 +
 +1 - change PIN
 +2 - unblock PIN
 +3 - change Admin PIN
 +4 - set the Reset Code
 +Q - quit
 +
 +Ihre Auswahl? 3
 +PIN changed.
 +
 +1 - change PIN
 +2 - unblock PIN
 +3 - change Admin PIN
 +4 - set the Reset Code
 +Q - quit
 +
 +Ihre Auswahl? 1
 +Error changing the PIN: Nutzungsvorraussetzungen nicht erfüllt
 +
 +1 - change PIN
 +2 - unblock PIN
 +3 - change Admin PIN
 +4 - set the Reset Code
 +Q - quit
 +
 +Ihre Auswahl? 
 +
 +1 - change PIN
 +2 - unblock PIN
 +3 - change Admin PIN
 +4 - set the Reset Code
 +Q - quit
 +
 +Ihre Auswahl? q
 +
 +gpg/card> list
 +
 +Reader ...........: Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00
 +Application ID ...: D276000124010200FFFE432108430000
 +Version ..........: 2.0
 +Manufacturer .....: unmanaged S/N range
 +Serial number ....: 43210843
 +Name of cardholder: Michael Nausch
 +Language prefs ...: de
 +Sex ..............: männlich
 +URL of public key : [nicht gesetzt]
 +Login data .......: [nicht gesetzt]
 +Signature PIN ....: zwingend
 +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> quit
 +
 +
 +$ opensc-explorer
 +OpenSC Explorer version 0.19.0
 +Using reader with a card: Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00
 +Failed to connect to card: Reader in use by another application
 +
 +
 +$ opensc-explorer
 +OpenSC Explorer version 0.19.0
 +Using reader with a card: Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00
 +OpenSC [3F00]> 
 +
 +
 +$ openpgp-tool --erase
 +Using reader with a card: Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00
 +Erase card
 +
 +
 +$ opensc-explorer
 +OpenSC Explorer version 0.19.0
 +Using reader with a card: Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00
 +OpenSC [3F00]> help
 +Supported commands:
 +  echo [<string> ..]                         display arguments
 +  ls [<pattern> ..]                          list files in the current DF
 +  find [<start id> [<end id>]]               find all files in the current DF
 +  find_tags [<start tag> [<end tag>]]        find all tags of data objects in the current context
 +  cd {.. | <file id> | aid:<DF name>       change to another DF
 +  cat [<file id> | sfi:<sfi id>            print the contents of an EF
 +  info [<file id>                          display attributes of card file
 +  create <file id> <size>                    create a new EF
 +  mkdir <file id> <size>                     create a new DF
 +  delete <file id>                           remove an EF/DF
 +  rm <file id>                               remove an EF/DF
 +  verify {CHV|KEY|AUT|PRO}<key ref> [<pin> present a PIN or key to the card
 +  change CHV<pin ref> [[<old pin>] <new pin> change a PIN
 +  unblock CHV<pin ref> [<puk> [<new pin>]]   unblock a PIN
 +  put <file id> [<input file>              copy a local file to the card
 +  get <file id> [<output file>             copy an EF to a local file
 +  do_get <hex tag> [<output file>          get a data object
 +  do_put <hex tag> <data>                    put a data object
 +  erase                                      erase card
 +  random <count>                             obtain <count> random bytes from card
 +  update_record <file id> <rec no> <rec offs> <data>  update record
 +  update_binary <file id> <offs> <data>      update binary
 +  apdu <data>                              send a custom apdu command
 +  asn1 [<file id>                          decode an ASN.1 file
 +  sm open|close                              call SM 'open' or 'close' handlers, if available
 +  debug [<value>                           get/set the debug level
 +  quit                                       quit this program
 +  exit                                       quit this program
 +  help                                       show this help
 +OpenSC [3F00]> exit
 +
 +
 +Pairs of key & certificate from P12 file:
 +$ pkcs15-init --verbose --delete-objects privkey,pubkey --id 3 --store-private-key michael.nausch.p12 --format pkcs12 --auth-id 3 --verify-pin
 +Using reader with a card: Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00
 +Connecting to card in reader Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00...
 +Using card driver OpenPGP card.
 +Found OpenPGP card
 +User PIN required.
 +Please enter User PIN [Admin PIN]: 
 +About to delete object(s).
 +NOTE: couldn't find privkey 03 to delete
 +NOTE: couldn't find pubkey 03 to delete
 +Deleted 0 objects
 +About to store private key.
 +error:23076071:PKCS12 routines:PKCS12_parse:mac verify failure
 +Please enter passphrase to unlock secret key: 
 +Importing 3 certificates:
 +  0: /C=DE/CN=Michael Robert Nausch/emailAddress=michael@nausch.org
 +  1: /OU=GlobalSign Root CA - R3/O=GlobalSign/CN=GlobalSign
 +  2: /C=BE/O=GlobalSign nv-sa/CN=GlobalSign PersonalSign 2 CA - SHA256 - G3
 +Failed to store private key: Invalid arguments
 +
 +Vermutliche Ursache, private key zu groß!
 +
 +*/
 +
 +... coming soon!
 +
 +
 +
 +# zypper install opensc
  
  • suse/nitrokey/start.1596561841.txt.gz
  • Zuletzt geändert: 04.08.2020 17:24.
  • von django