Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:nitrokey:pro [17.11.2018 18:27. ] – [card-edit] django | centos:nitrokey:pro [18.11.2024 18:59. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
{{: | {{: | ||
- | In diesem Kapitel befassen wir uns eingehend mit dem [[https:// | + | In diesem Kapitel befassen wir uns eingehend mit dem [[https:// |
- | Hierzu verwenden wir den [[https:// | + | Hierzu verwenden wir den [[https:// |
Der **Nitrokey Pro** Cryptostick vereint in einem kleinen Plastikgehäuse einen Kartenleser mit zugehöriger manipulationssicheren OpenPGP Chipkarte, einem zu 100% Open Source und Open Hardware Device. Wie schon erwähnt wird das geheime Schlüsselmaterial (RSA 2048-4096 Bit, ECC 256-512 Bit) im manipulations- und PIN-geschützten integrierten Chipkarte gespeichert und somit bestens gegen Schadcode oder Verlust bzw. Diebstahl und gegen Hardware-Angriffe geschützt. | Der **Nitrokey Pro** Cryptostick vereint in einem kleinen Plastikgehäuse einen Kartenleser mit zugehöriger manipulationssicheren OpenPGP Chipkarte, einem zu 100% Open Source und Open Hardware Device. Wie schon erwähnt wird das geheime Schlüsselmaterial (RSA 2048-4096 Bit, ECC 256-512 Bit) im manipulations- und PIN-geschützten integrierten Chipkarte gespeichert und somit bestens gegen Schadcode oder Verlust bzw. Diebstahl und gegen Hardware-Angriffe geschützt. | ||
Anwendungsfälle und Einsatzszenarien: | Anwendungsfälle und Einsatzszenarien: | ||
- | * **Sicheres Login** \\ Einmallpassworte | + | * **Sicheres Login** \\ Einmalpassworte |
* **Verschlüsselung rund um eMails** \\ Zur vertraulichen Kommunikation via eMail kann das benötigte Schlüsselmaterial auf dem Kryptostick Nitrokey Pro erzeugt und sicher verwahrt werden. Eine Verwendung unter GnuPG, OpenPGP oder S/MIME ist somit gegeben. | * **Verschlüsselung rund um eMails** \\ Zur vertraulichen Kommunikation via eMail kann das benötigte Schlüsselmaterial auf dem Kryptostick Nitrokey Pro erzeugt und sicher verwahrt werden. Eine Verwendung unter GnuPG, OpenPGP oder S/MIME ist somit gegeben. | ||
- | * **Verschlüsselung von Dateien und Massenspeichern(Festplatten)** \\ Auch hier wird das geheime Schlüsselmaterial, | + | * **Verschlüsselung von Dateien und Massenspeichern(Festplatten)** \\ Auch hier wird das geheime Schlüsselmaterial, |
Weitere Informationen zum USB-Stick [[https:// | Weitere Informationen zum USB-Stick [[https:// | ||
Zeile 49: | Zeile 49: | ||
Nov 16 17:49:39 T410 systemd: Starting Smart C</ | Nov 16 17:49:39 T410 systemd: Starting Smart C</ | ||
+ | ===== Paketabhängigkeiten ===== | ||
+ | |||
+ | Für den Zugriff auf die SmartCard bzw. auf den Nitrokey Pro benötigen wir z.B. für GPG den SmartCard-Daemon **scdeamon** welcher bei CentOS 7 mit Hilfe es Pakets **gnupg2-smime** bereitgestellt wird. | ||
+ | |||
+ | Dieses Paket installieren wir nun noch via **yum**. | ||
+ | # | ||
+ | |||
+ | Leider ist das Paket an sich aus Sicht der Entwickler des Kryptostick in einer nicht aktuellen Version bei CentOS 7 verfügbar (CentOS 7: 2.0.22 - aktuelle Version: 2.2.11)((Stand November 2018)). Das hat leider zur Folge, dass wir die PGP-Schlüssel __nicht__ direkt [[centos: | ||
===== udev-Regeln ===== | ===== udev-Regeln ===== | ||
Für den Betrieb unter [[https:// | Für den Betrieb unter [[https:// | ||
Zeile 179: | Zeile 187: | ||
Wird die Benutzer-PIN mehr als 3x falsch eingeben, wird die Karte für den Benutzer gesperrt. Mit der Admin-PIN kann der Fehleingabezähler zurückgesetzt bzw. eine neue Benutzer-PIN vergeben werden. | Wird die Benutzer-PIN mehr als 3x falsch eingeben, wird die Karte für den Benutzer gesperrt. Mit der Admin-PIN kann der Fehleingabezähler zurückgesetzt bzw. eine neue Benutzer-PIN vergeben werden. | ||
<WRAP center round alert 80%> | <WRAP center round alert 80%> | ||
- | Wird jedoch die Admin-PIN mehr als 3x falsch eingegeben, wird die Smart-Crad komsperrt | + | Wird jedoch die Admin-PIN mehr als 3x falsch eingegeben, wird die Smart-Card komplett |
Hierzu kopiert man sich folgende Datei auf den Rechner: | Hierzu kopiert man sich folgende Datei auf den Rechner: | ||
Zeile 191: | Zeile 199: | ||
</ | </ | ||
+ | === Änderung der Default-PINs === | ||
Wir werden also zuerst einmal die beiden **PIN**s abändern. Hierzu klicken wir mit der rechten Maustaste auf das Nitrokey-Symbol oben auf dem Desktop und wählen Sie das Menü " | Wir werden also zuerst einmal die beiden **PIN**s abändern. Hierzu klicken wir mit der rechten Maustaste auf das Nitrokey-Symbol oben auf dem Desktop und wählen Sie das Menü " | ||
Zeile 198: | Zeile 207: | ||
{{ : | {{ : | ||
+ | |||
+ | === Passwort-Safe === | ||
+ | Der Kryptostick bietet uns die Möglichkeit bis zu 16 Passwörter anzuspeichern, | ||
+ | |||
+ | Damit wir unser ersten Passwort auf dem Stick ablegen können, ist es notwendig den Stick zu entsperren. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Nach der eingabe der PIN wird unser Kryptostick entsperrt und wir können anschließend | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Über den Menüpunkt **Konfiguration** gelangen wir zu den Einstellungen und wiederum auf dem Reiter **Passwort-Safe** dann die einstellungen zu den Anmeldedaten im Passwort-Safe. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Wollen wir uns nun später an einer (Web)-Anwendung anmelden, wählen wir aus der oberen Statusleiste die Nitrokey App aus und wählen beim Menüpunkt **Paswörter** den hinterlegte Passworteintrag aus. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Sobald wir diesen Eintrag anklicken wird das zugehörige Passwort in die Zwischenablage kopiert und wir können dies dann in das zugehörige Eingabemaske einfügen. | ||
+ | |||
+ | {{ : | ||
+ | |||
==== Nitrokey Pro und GnuPG ==== | ==== Nitrokey Pro und GnuPG ==== | ||
Zeile 237: | Zeile 270: | ||
</ | </ | ||
+ | Die einzelnen Datenfelder haben hierbei folgende Bedeutung: | ||
+ | ^ Datenfeld | ||
+ | ^ Application ID | Individuelle (unique) KartenID, diese beinhaltet: \\ ° den Kartentyp \\ ° die Version der Spezifikation \\ ° den Hersteller und \\ ° die Seriennummer des Cryptosticks \\ Diese // | ||
+ | ^ Version | ||
+ | ^ Manufacturer | ||
+ | ^ Serial number | ||
+ | ^ Name of cardholder | ||
+ | ^ Language prefs | Gewählte/ | ||
+ | ^ Sex | Geschlecht des Karteninhabers.: | ||
+ | ^ 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 // | ||
+ | ^ Key attributes | ||
+ | ^ Max. PIN lengths | ||
+ | ^ PIN retry counter | ||
+ | ^ Signature counter | ||
+ | ^ Signature key | Signatur-Schlüssel (primärer OpenPGP-Schlüssel) | ||
+ | ^ | ||
+ | ^ Encryption key | Entschlüsselungs-Schlüssel (Unterschlüssel des primären (Signature-)Schlüssels. | ||
+ | ^ | ||
+ | ^ Authentication key | Authentifizierung-Schlüssel (Unterschlüssel des primären (Signature-)Schlüssels. | ||
+ | ^ | ||
+ | ^ General key info | Diese primäre USer ID wird angezeigt, sobald ein entsprechender | ||
+ | |||
=== change-pin === | === change-pin === | ||
- | Wie schon mit der **[[centos: | + | Wie schon mit der **[[centos: |
+ | |||
+ | 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-/ | ||
+ | |||
+ | <WRAP center round important 80%> | ||
+ | Wird die Benutzer-PIN 3x falsch eingeben, wird die Karte gesperrt und kann dann nur mit der Admin-PIN oder dem Reset-Code zurückgesetzt werden. Wenn Sie den falschen Admin-Pin dreimal eingeben, wird die Karte unbrauchbar und kann dann lediglich mit einem Factory-Reset (Verlußt aller Kartendaten!) zurück gesetzt werden! | ||
+ | </ | ||
+ | |||
+ | Die Reset-PIN (Menüpunkt **4**) kann nur zum Zurücksetzen der Benutzer-PIN verwendet werden. Die Mindestlänge für den Reset-Code beträgt 8 Zeichen. Der Reset-Code Fehlerzähler kann wiederum mit der Admin-PIN zurückgesetzt werden. Wird nach zweimaliger Falscheingabe der Benutzer- wie auch der Admin-PIN und dann die richtige PIN eingeben, wird der Fehlerzähler zurückgesetzt. | ||
+ | |||
+ | Worin besteht nun aber der genaue Unterschied zwischen dem Reset-Code und der Admin-PIN? Möchte man in einer Organisation Nitrokey Pro an seine Mitarbeiter ausgeben, werden bestimmte Daten, wie z.B. Namen, die Public Key URL oder auch das erzeugte Schlüsselmaterial zentral vorgegeben. Da der Benutzer selbst diese Daten nicht verändern können soll, wird dieser auch nicht Kenntnis von der Admin-PIN haben. Sperrt sich nun der Mitarbeiter aus, weil er die Benutzer-PIN 3x falsch eingegeben hat, kann der Neutzer natürlich nicht die Admin-PIN eingeben, da er diese nicht kennt. Hier kommt nun der Reset-Code ins Spiel. Mit Hilfe dieses Codes kann der Benutzer nun die Benutzer-PIN zurücksetzen. | ||
$ gpg --change-pin | $ gpg --change-pin | ||
< | < | ||
Zeile 255: | Zeile 325: | ||
=== card-edit === | === card-edit === | ||
- | Mit Hilfe des Befehls '' | + | Mit Hilfe des Befehls '' |
$ gpg --card-edit | $ gpg --card-edit | ||
< | < | ||
Zeile 278: | Zeile 349: | ||
gpg/ | gpg/ | ||
+ | == 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. | Mit Hilfe des Befehls **help** können wir uns anzeigen lassen, welche Optionen im jeweiligen Modus Benutzer oder Admin zur Verfügung stehen. | ||
gpg/ | gpg/ | ||
Zeile 289: | Zeile 361: | ||
unblock | unblock | ||
+ | == Admin-Befehle == | ||
Mit dem Befehl **admin** können wir in den Admin-Modus/ | Mit dem Befehl **admin** können wir in den Admin-Modus/ | ||
gpg/ | gpg/ | ||
Zeile 312: | Zeile 385: | ||
unblock | unblock | ||
- | === Kartendaten === | + | == Individuelle Konfiguration - Stick personalisieren |
- | Über den Befehl | + | Zunächst wollen wir unseren Stick personalisieren, |
+ | \\ | ||
+ | \\ | ||
+ | | **Name of cardholder** | ||
+ | | **Language prefs** | ||
+ | | **Sex** | ||
+ | | **URL of public key** | Angabe einer URL, mit der der public-key mit Hilfe des Befehls fetch unter '' | ||
+ | | **Login data** | ||
+ | |||
+ | Zum Ändern dieser | ||
+ | $ gpg --card-edit | ||
- | $ gpg2 --card-status | ||
< | < | ||
Version ..........: 3.3 | Version ..........: 3.3 | ||
Zeile 333: | Zeile 415: | ||
Encryption key....: [none] | Encryption key....: [none] | ||
Authentication key: [none] | Authentication key: [none] | ||
- | General key info..: [none]</ | + | General key info..: [none] |
- | Die einzelnen Datenfelder haben hierbei folgende Bedeutung: | + | gpg/card></code> |
- | ^ Datenfeld | + | |
- | | Application ID | Individuelle (unique) KartenID, diese beinhaltet: \\ ° den Kartentyp \\ ° die Version der Spezifikation \\ ° den Hersteller und \\ ° die Seriennummer des Cryptosticks \\ Diese // | + | |
- | | Version | + | |
- | | Manufacturer | + | |
- | | Serial number | + | |
- | | Name of cardholder | + | |
- | | Language prefs | Gewählte/ | + | |
- | | Sex | Geschlecht des Karteninhabers.: | + | |
- | | 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 // | + | |
- | | Key attributes | + | |
- | | Max. PIN lengths | + | |
- | | PIN retry counter | + | |
- | | Signature counter | + | |
- | | Signature key | Signatur-Schlüssel (primärer OpenPGP-Schlüssel) | + | |
- | | created | Datum und Uhrzeit an dem der Schlüssel erzeugt wurde | | + | |
- | | Encryption key | Entschlüsselungs-Schlüssel (Unterschlüssel des primären (Signature-)Schlüssels. | + | |
- | | created | Datum und Uhrzeit an dem der Schlüssel erzeugt wurde | | + | |
- | | Authentication key | Authentifizierung-Schlüssel (Unterschlüssel des primären (Signature-)Schlüssels. | + | |
- | | created | Datum und Uhrzeit an dem der Schlüssel erzeugt wurde | | + | |
- | | General key info | Diese primäre USer ID wird angezeigt, sobald ein entsprechender | + | |
- | + | ||
+ | | ||
+ | Admin-Befehle sind erlaubt | ||
+ | Wir ändern zunächst den Namen des Karteninhabers **Name of cardholder**: | ||
+ | | ||
+ | |||
+ | Familienname des Kartenbesitzers: | ||
+ | Vorname des Kartenbesitzers: | ||
+ | |||
+ | Als nächstes definieren wir die Sprache des Kartenbenutzers: | ||
+ | | ||
+ | |||
+ | Spracheinstellungen de | ||
+ | |||
+ | Im nächsten Schritt setzen wir das Geschlecht des Karteninhabers: | ||
+ | | ||
+ | |||
+ | Geschlecht: (Männlich (M), Weiblich (F) oder Leerzeichen): | ||
+ | |||
+ | Nun setzen wir noch den Anmelde-/ | ||
+ | | ||
+ | |||
+ | Logindaten (Kontenname): | ||
+ | |||
+ | Zu guter Letzt setzen wir nun die URL, von der der public-key mit Hilfe des Befehls **fetch** unter '' | ||
+ | | ||
+ | |||
+ | URL um den öffentlichen Schlüssel zu holen: https:// | ||
+ | |||
+ | Somit ergeben sich folgende benutzerindividuellen Daten auf der Karte: | ||
+ | | ||
+ | |||
+ | < | ||
+ | Version ..........: 3.3 | ||
+ | Manufacturer .....: ZeitControl | ||
+ | Serial number ....: 00006FDA | ||
+ | Name of cardholder: Django aka BOfH | ||
+ | Language prefs ...: de | ||
+ | Sex ..............: | ||
+ | URL of public key : https:// | ||
+ | Login data .......: django | ||
+ | Signature PIN ....: nicht zwingend | ||
+ | Key attributes ...: 2048R 2048R 2048R | ||
+ | Max. PIN lengths .: 64 64 64 | ||
+ | PIN retry counter : 3 0 3 | ||
+ | Signature counter : 0 | ||
+ | Signature key ....: [none] | ||
+ | Encryption key....: [none] | ||
+ | Authentication key: [none] | ||
+ | General key info..: [none]</ | ||
+ | |||
+ | Nun können wir die Erstinitialisierung abschließen und den Einstellungsdialog mit dem Befehl **quit** verlassen. | ||
+ | | ||
Zeile 367: | Zeile 478: | ||
=== Schlüssel generieren ==== | === Schlüssel generieren ==== | ||
Wir wollen uns nun einen neuen GPG-Schlüssel in der SmartCard erzeugen und rufen hierzu den Befehl **generate** auf. Wir werden 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. | Wir wollen uns nun einen neuen GPG-Schlüssel in der SmartCard erzeugen und rufen hierzu den Befehl **generate** auf. Wir werden 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. | ||
+ | $ gpg --card-edit | ||
+ | |||
+ | | ||
+ | |||
+ | Admin-Befehle sind erlaubt | ||
+ | |||
+ | | ||
+ | < | ||
+ | Welche Schlüssellänge wünschen Sie für den Signatur-Schlüssel? | ||
+ | Welche Schlüssellänge wünschen Sie für den Verschlüsselungs-Schlüssel? | ||
+ | Welche Schlüssellänge wünschen Sie für den Authentisierungs-Schlüssel? | ||
+ | Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll. | ||
+ | 0 = Schlüssel verfällt nie | ||
+ | < | ||
+ | <n>w = Schlüssel verfällt nach n Wochen | ||
+ | <n>m = Schlüssel verfällt nach n Monaten | ||
+ | <n>y = Schlüssel verfällt nach n Jahren | ||
+ | Wie lange bleibt der Schlüssel gültig? (0) | ||
+ | Schlüssel verfällt nie | ||
+ | Ist dies richtig? (j/N) j | ||
+ | |||
+ | GnuPG erstellt eine User-ID um Ihren Schlüssel identifizierbar zu machen. | ||
+ | |||
+ | Ihr Name (" | ||
+ | Email-Adresse: | ||
+ | Kommentar: Bastard Operator from Hell | ||
+ | Sie haben diese User-ID gewählt: | ||
+ | " | ||
+ | |||
+ | Ändern: (N)ame, (K)ommentar, | ||
+ | |||
+ | \\ | ||
+ | |||
+ | <WRAP center round alert 90%> | ||
+ | Leider bricht die Generierung des Schlüssels an dieser Stelle mit dem folgenden Fehler ab: < | ||
+ | Schlüsselerzeugung fehlgeschlagen: | ||
+ | |||
+ | Dabei ist es unerheblich ob nun eine Schlüssellänge von **2048** oder **4096** ausgewählt wird. Auch auf einem aktuellen **//Fedora 29//** System tritt der gleiche fatale Fehler auf! | ||
+ | |||
+ | Ähnlich wie schon beim Vorgängermodell **[[centos: | ||
+ | |||
+ | </ | ||
+ | |||
+ | === vorhandenen Schlüssel importieren === | ||
+ | Da aktuell((Stand: | ||
+ | |||
+ | == PGP-Schlüssel generieren == | ||
+ | Zunächst erzeugen wir uns also einen PGP-Schlüssel, | ||
+ | $ gpg --gen-key | ||
+ | < | ||
+ | This is free software: you are free to change and redistribute it. | ||
+ | There is NO WARRANTY, to the extent permitted by law. | ||
+ | |||
+ | Please select what kind of key you want: | ||
+ | (1) RSA and RSA (default) | ||
+ | (2) DSA and Elgamal | ||
+ | (3) DSA (sign only) | ||
+ | (4) RSA (sign only) | ||
+ | Your selection? 1 | ||
+ | RSA keys may be between 1024 and 4096 bits long. | ||
+ | What keysize do you want? (2048) 4096 | ||
+ | Requested keysize is 4096 bits | ||
+ | Please specify how long the key should be valid. | ||
+ | 0 = key does not expire | ||
+ | < | ||
+ | <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: | ||
+ | You selected this USER-ID: | ||
+ | " | ||
+ | |||
+ | Change (N)ame, (C)omment, (E)mail or (O)kay/ | ||
+ | You need a Passphrase to protect your secret key. | ||
+ | |||
+ | We need to generate a lot of random bytes. It is a good idea to perform | ||
+ | some other action (type on the keyboard, move the mouse, utilize the | ||
+ | disks) during the prime generation; this gives the random number | ||
+ | generator a better chance to gain enough entropy. | ||
+ | gpg: key D1359446 marked as ultimately trusted | ||
+ | public and secret key created and signed. | ||
+ | |||
+ | gpg: checking the trustdb | ||
+ | gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model | ||
+ | gpg: depth: 0 valid: | ||
+ | pub | ||
+ | Key fingerprint = FA63 2892 1925 65D3 E006 DC75 2ECB E36F D135 9446 | ||
+ | uid Django aka BOfH < | ||
+ | sub | ||
+ | </ | ||
+ | |||
+ | In unserem PGP-Schlüsselbund befinden sich nun unser gerade angelegt Schlüssel. | ||
+ | $ gpg2 --list-secret-keys | ||
+ | < | ||
+ | ------------------------------ | ||
+ | sec | ||
+ | uid Django aka BOfH < | ||
+ | ssb | ||
+ | |||
+ | |||
+ | == PGP-Unterschlüssel - subkeys == | ||
+ | <WRAP center round tip 95%> | ||
+ | Bei der **[[https:// | ||
+ | </ | ||
+ | |||
+ | Werfen wir zur genaueren Betrachtung einfach einen Blick in unseren Schlüsselbund. | ||
+ | $ gpg2 --list-keys | ||
+ | |||
+ | < | ||
+ | ------------------------------ | ||
+ | pub | ||
+ | uid Django aka BOfH < | ||
+ | sub | ||
+ | </ | ||
+ | |||
+ | Obwohl wir zuvor "nur einen" // | ||
+ | |||
+ | Beide Schlüssel sehen wir auch, wenn wir uns den Inhalt des secrings anzeigen lassen: | ||
+ | $ gpg2 --list-secret-keys | ||
+ | < | ||
+ | ------------------------------ | ||
+ | sec | ||
+ | uid Django aka BOfH < | ||
+ | ssb | ||
+ | </ | ||
+ | |||
+ | * //**Worin besteht nun der genaue Unterschied? | ||
+ | * //**Warum nun der ganze Aufstand mit diesem Unterschlüssel? | ||
+ | |||
+ | Fragen wir den Status unseres Nitrokey Pro ab, so sehen wir dort am Ende drei Speicherplätze für unterschiedliche Unterschlüssel, | ||
+ | * **Signature key** : Unterschlüssel zum Signieren | ||
+ | * **Encryption key** : Unterschlüssel zum Verschlüsseln | ||
+ | * **Authentication key**: Unterschlüssel zum Authentifizieren | ||
+ | |||
+ | $ gpg2 --card-status | ||
+ | < | ||
+ | Version ..........: 3.3 | ||
+ | Manufacturer .....: ZeitControl | ||
+ | Serial number ....: 00006FDA | ||
+ | Name of cardholder: [not set] | ||
+ | Language prefs ...: de | ||
+ | Sex ..............: | ||
+ | URL of public key : [not set] | ||
+ | Login data .......: [not set] | ||
+ | Signature PIN ....: forced | ||
+ | Key attributes ...: 2048R 2048R 2048R | ||
+ | Max. PIN lengths .: 64 64 64 | ||
+ | PIN retry counter : 3 0 3 | ||
+ | Signature counter : 0 | ||
+ | Signature key ....: [none] | ||
+ | Encryption key....: [none] | ||
+ | Authentication key: [none] | ||
+ | General key info..: [none] | ||
+ | </ | ||
+ | |||
+ | Damit wir nun die drei benötigten Unterschlüssel an die richtige Stelle unseres Nitrokey Pro verschieben können, müssen wir noch ein paar Vorbereitungen treffen: | ||
+ | - Erstellen weiterer Unterschlüssel für die Themen: | ||
+ | - Signierung | ||
+ | - Authentifizierung | ||
+ | - Verschieben der privaten Unterschlüssel aus dem Schlüsselbund, | ||
+ | - Verschieben des //primären Signierungs Schlüssel// | ||
+ | |||
+ | Die öffentlichen Schlüssel bleiben nach wie vor im Schlüsselbund auf unserer Festplatte // | ||
+ | |||
+ | Bevor wir nun zum Punkt **1. Erstellen weiterer Unterschlüssel** widmen können rufen wir uns die **ID** des rimären Siegnierungs-Schlüssel in Erinnerung. | ||
+ | $ gpg2 --list-keys | grep pub | ||
+ | |||
+ | / | ||
+ | pub | ||
+ | |||
+ | In unserem Konfigurationsbeispiel hier ist dies die Key-ID: **D1359446**. Zunächst erstellen wir besagten Unterschlüssel zum Signieren: | ||
+ | $ gpg2 --expert --edit-key D1359446 | ||
+ | < | ||
+ | This is free software: you are free to change and redistribute it. | ||
+ | There is NO WARRANTY, to the extent permitted by law. | ||
+ | |||
+ | Secret key is available. | ||
+ | |||
+ | pub 4096R/ | ||
+ | | ||
+ | sub 4096R/ | ||
+ | [ultimate] (1). Django aka BOfH < | ||
+ | |||
+ | gpg></ | ||
+ | Das Erzeugen von Unterschlüssel erfolgt mit hilfe des Befehls '' | ||
+ | gpg> addkey | ||
+ | < | ||
+ | |||
+ | You need a passphrase to unlock the secret key for | ||
+ | user: " | ||
+ | 4096-bit RSA key, ID D1359446, created 2018-11-21 | ||
+ | |||
+ | Please select what kind of key you want: | ||
+ | (3) DSA (sign only) | ||
+ | (4) RSA (sign only) | ||
+ | (5) Elgamal (encrypt only) | ||
+ | (6) RSA (encrypt only) | ||
+ | (7) DSA (set your own capabilities) | ||
+ | (8) RSA (set your own capabilities) | ||
+ | Your selection?</ | ||
+ | |||
+ | Da wir einen **RSA**-Unterschlüssel zum Signieren erzeugen möchten, wählen wir hier die Option **4**. Bei der Schlüssellänge verwenden wir wie auch schon bei der Erstellung des initialen Schlüsselpaares **4096**; die Laufzeit des Unterschlüssels wählen wir entsprechend gleich oder kürzer wie beim //primären Signierungs-Schlüssel//, | ||
+ | |||
+ | Your selection? 4 | ||
+ | < | ||
+ | What keysize do you want? (2048) 4096 | ||
+ | Requested keysize is 4096 bits | ||
+ | Please specify how long the key should be valid. | ||
+ | 0 = key does not expire | ||
+ | < | ||
+ | <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 | ||
+ | Really create? (y/N) y | ||
+ | We need to generate a lot of random bytes. It is a good idea to perform | ||
+ | some other action (type on the keyboard, move the mouse, utilize the | ||
+ | disks) during the prime generation; this gives the random number | ||
+ | generator a better chance to gain enough entropy. | ||
+ | |||
+ | pub 4096R/ | ||
+ | | ||
+ | sub 4096R/ | ||
+ | sub 4096R/ | ||
+ | [ultimate] (1). Django aka BOfH < | ||
+ | |||
+ | gpg></ | ||
+ | |||
+ | Das Gleiche machen wir nun erneut für unseren Authentifizierungs-Unterschlüssel. | ||
+ | | ||
+ | < | ||
+ | |||
+ | You need a passphrase to unlock the secret key for | ||
+ | user: " | ||
+ | 4096-bit RSA key, ID D1359446, created 2018-11-21 | ||
+ | |||
+ | Please select what kind of key you want: | ||
+ | (3) DSA (sign only) | ||
+ | (4) RSA (sign only) | ||
+ | (5) Elgamal (encrypt only) | ||
+ | (6) RSA (encrypt only) | ||
+ | (7) DSA (set your own capabilities) | ||
+ | (8) RSA (set your own capabilities) | ||
+ | Your selection?</ | ||
+ | |||
+ | Für unseren Verschlüsselungs-Unterschlüssel wählen wir nun eben hier entsprechend die Option **8**. | ||
+ | |||
+ | Your selection? 8 | ||
+ | < | ||
+ | Current allowed actions: Sign Encrypt | ||
+ | |||
+ | (S) Toggle the sign capability | ||
+ | (E) Toggle the encrypt capability | ||
+ | (A) Toggle the authenticate capability | ||
+ | (Q) Finished | ||
+ | |||
+ | Your selection?</ | ||
+ | |||
+ | Uns wir nun angezeigt, dass aktuell Signierung und Verschlüsselung vorausgewählt wurde: '' | ||
+ | < | ||
+ | |||
+ | Possible actions for a RSA key: Sign Encrypt Authenticate | ||
+ | Current allowed actions: Encrypt | ||
+ | |||
+ | (S) Toggle the sign capability | ||
+ | (E) Toggle the encrypt capability | ||
+ | (A) Toggle the authenticate capability | ||
+ | (Q) Finished | ||
+ | |||
+ | Your selection? e | ||
+ | |||
+ | Possible actions for a RSA key: Sign Encrypt Authenticate | ||
+ | Current allowed actions: | ||
+ | |||
+ | (S) Toggle the sign capability | ||
+ | (E) Toggle the encrypt capability | ||
+ | (A) Toggle the authenticate capability | ||
+ | (Q) Finished | ||
+ | |||
+ | Your selection? a | ||
+ | |||
+ | Possible actions for a RSA key: Sign Encrypt Authenticate | ||
+ | Current allowed actions: Authenticate | ||
+ | |||
+ | (S) Toggle the sign capability | ||
+ | (E) Toggle the encrypt capability | ||
+ | (A) Toggle the authenticate capability | ||
+ | (Q) Finished | ||
+ | |||
+ | Your selection?</ | ||
+ | |||
+ | An der nun definierten Option '' | ||
+ | Your selection? q | ||
+ | < | ||
+ | What keysize do you want? (2048) 4096 | ||
+ | Requested keysize is 4096 bits | ||
+ | Please specify how long the key should be valid. | ||
+ | 0 = key does not expire | ||
+ | < | ||
+ | <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 | ||
+ | Really create? (y/N) y | ||
+ | We need to generate a lot of random bytes. It is a good idea to perform | ||
+ | some other action (type on the keyboard, move the mouse, utilize the | ||
+ | disks) during the prime generation; this gives the random number | ||
+ | generator a better chance to gain enough entropy. | ||
+ | |||
+ | pub 4096R/ | ||
+ | | ||
+ | sub 4096R/ | ||
+ | sub 4096R/ | ||
+ | sub 4096R/ | ||
+ | [ultimate] (1). Django aka BOfH < | ||
+ | </ | ||
+ | |||
+ | GnuPG listet nun den Primary Schlüssel zum Signieren und alle Unterschlüssel auf mit dem jeweiligen Verwendungszweck **usage** auf. **E** steht für Verschlüsseln, | ||
+ | |||
+ | Zu guter letzt speichern wir nun mit dem Befehl **save** unsere gerade erstellen Unterschlüssel im Schlüsselspeicher auf der Festplatte ab. | ||
+ | gpg> save | ||
+ | |||
+ | Fragen wir nun erneut den Schlüsselbund mit den secret-keys ab sehen wir nun unsere drei Unterschlüssel. | ||
+ | $ gpg2 --list-secret-keys | ||
+ | < | ||
+ | ------------------------------ | ||
+ | sec | ||
+ | uid Django aka BOfH < | ||
+ | ssb | ||
+ | ssb | ||
+ | ssb | ||
+ | |||
+ | == backup des vorhandenen Keyrings aus dem Userverzeichnis == | ||
+ | <WRAP center round important 95%> | ||
+ | Bevor wir unseren Schlüsselspeicher im Userverzeichnis bei den späteren Verschiebeaktionen nicht versehentlich schrotten, kann für Restore-Zwecke ein Backup und ein sicheres Verwahren des Schlüsselspeichers angeraten sein. | ||
+ | |||
+ | $ cp -a ~/.gnupg ~/ | ||
+ | </ | ||
+ | |||
+ | == Schlüssel in die ChipCard des Nitrokey Pro verschieben == | ||
+ | Nun werden wir die vorhin generierten Schlüssel an Ort und Stelle in die SmartCard des Nitrokey Pro verschieben. Hierzu verwenden wir den Befehl **'' | ||
+ | $ gpg2 --edit-key D1359446 | ||
+ | < | ||
+ | This is free software: you are free to change and redistribute it. | ||
+ | There is NO WARRANTY, to the extent permitted by law. | ||
+ | |||
+ | Secret key is available. | ||
+ | |||
+ | pub 4096R/ | ||
+ | | ||
+ | sub 4096R/ | ||
+ | sub 4096R/ | ||
+ | sub 4096R/ | ||
+ | [ultimate] (1). Django aka BOfH < | ||
+ | |||
+ | Für später merken wir uns nun in Welcher Reichenfolge die Unterschlüssel aufgelistet werden bzw. welche Key-ID zu welcher Aktion gehört. Die Key-ID **0** ist die des primären Signierungs-Schlüssel! | ||
+ | * Sub-Key **1** - **564BA287** - **E** = encrypt = verschlüsseln | ||
+ | * Sub-Key **2** - **ACCE2639** - **S** = sign = signieren | ||
+ | * Sub-Key **3** - **EC65030E** - **A** = authorize = authentifizieren | ||
+ | |||
+ | gpg> </ | ||
+ | Da wir die privaten Schlüssel unserer drei Unterschlüssel verschieben wollen, wechseln wir von der Ansicht der öffentlichen in die Ansicht der privaten Schlüssel. | ||
+ | gpg> | ||
+ | |||
+ | < | ||
+ | ssb 4096R/ | ||
+ | ssb 4096R/ | ||
+ | ssb 4096R/ | ||
+ | (1) Django aka BOfH < | ||
+ | |||
+ | Als erstes verschieben wir den privaten Verschlüsselungs-Unterschlüssel. Hierzu wählen wir diesen mit Eingabe von " | ||
+ | |||
+ | gpg> key 1 | ||
+ | < | ||
+ | ssb* 4096R/ | ||
+ | ssb 4096R/ | ||
+ | ssb 4096R/ | ||
+ | (1) Django aka BOfH < | ||
+ | |||
+ | Nun verschieben wir den ausgewählten Schlüssel in die SmartCard des Nitrokey. Als Ziel wählen wir dann richtiger Weise die Option **2** = // | ||
+ | gpg> keytocard | ||
+ | |||
+ | < | ||
+ | Encryption key....: [none] | ||
+ | Authentication key: [none] | ||
+ | |||
+ | Please select where to store the key: | ||
+ | (2) Encryption key | ||
+ | Your selection? 2 | ||
+ | |||
+ | You need a passphrase to unlock the secret key for | ||
+ | user: " | ||
+ | 4096-bit RSA key, ID 564BA287, created 2018-11-21 | ||
+ | |||
+ | |||
+ | sec 4096R/ | ||
+ | ssb* 4096R/ | ||
+ | | ||
+ | ssb 4096R/ | ||
+ | ssb 4096R/ | ||
+ | (1) Django aka BOfH < | ||
+ | </ | ||
+ | |||
+ | Als nächstes verschieben wir den privaten Signierungs-Unterschlüssel aus, in dem wir erst den bereits ausgewählten Verschlüsselungs-Key abwählen und dann den Signierungs-Key anwählen. | ||
+ | gpg> key 1 | ||
+ | < | ||
+ | ssb 4096R/ | ||
+ | | ||
+ | ssb 4096R/ | ||
+ | ssb 4096R/ | ||
+ | (1) Django aka BOfH < | ||
+ | </ | ||
+ | gpg> key 2 | ||
+ | < | ||
+ | ssb 4096R/ | ||
+ | | ||
+ | ssb* 4096R/ | ||
+ | ssb 4096R/ | ||
+ | (1) Django aka BOfH < | ||
+ | </ | ||
+ | |||
+ | Nun verschieben wir den privaten Signierungs-Unterschlüssel in Richtung SmartCard des Nitrokey Pro. Hier wählen wir nun die **1** für // | ||
+ | gpg> keytocard | ||
+ | < | ||
+ | Encryption key....: A7CC 2F9D 0D39 92B6 B03A A878 06CC CCAF 564B A287 | ||
+ | Authentication key: [none] | ||
+ | |||
+ | Please select where to store the key: | ||
+ | (1) Signature key | ||
+ | (3) Authentication key | ||
+ | Your selection? 1 | ||
+ | |||
+ | You need a passphrase to unlock the secret key for | ||
+ | user: " | ||
+ | 4096-bit RSA key, ID ACCE2639, created 2018-11-21 | ||
+ | |||
+ | |||
+ | sec 4096R/ | ||
+ | ssb 4096R/ | ||
+ | | ||
+ | ssb* 4096R/ | ||
+ | | ||
+ | ssb 4096R/ | ||
+ | (1) Django aka BOfH < | ||
+ | </ | ||
+ | |||
+ | Zu guter Letzt fehlt nun noch unser Authentifizierungs-Unterschlüssel. Wir wählen also wieder den Schlüssel **2** ab und den Schlüssel **3** aus. | ||
+ | gpg> key 2 | ||
+ | < | ||
+ | ssb 4096R/ | ||
+ | | ||
+ | ssb 4096R/ | ||
+ | | ||
+ | ssb 4096R/ | ||
+ | (1) Django aka BOfH < | ||
+ | </ | ||
+ | gpg> key 3 | ||
+ | < | ||
+ | ssb 4096R/ | ||
+ | | ||
+ | ssb 4096R/ | ||
+ | | ||
+ | ssb* 4096R/ | ||
+ | (1) Django aka BOfH < | ||
+ | </ | ||
+ | |||
+ | Nun verschieben wir den privaten Authentifizierungs-Unterschlüssel in Richtung SmartCard des Nitrokey Pro. Hier wählen wir nun die **3** für // | ||
+ | gpg> keytocard | ||
+ | < | ||
+ | Encryption key....: A7CC 2F9D 0D39 92B6 B03A A878 06CC CCAF 564B A287 | ||
+ | Authentication key: [none] | ||
+ | |||
+ | Please select where to store the key: | ||
+ | (3) Authentication key | ||
+ | Your selection? 3 | ||
+ | |||
+ | You need a passphrase to unlock the secret key for | ||
+ | user: " | ||
+ | 4096-bit RSA key, ID EC65030E, created 2018-11-21 | ||
+ | |||
+ | |||
+ | sec 4096R/ | ||
+ | ssb 4096R/ | ||
+ | | ||
+ | ssb 4096R/ | ||
+ | | ||
+ | ssb* 4096R/ | ||
+ | | ||
+ | (1) Django aka BOfH < | ||
+ | </ | ||
+ | |||
+ | Zum Abschluss speichern wir nun unsere Änderungen im lokalen key-ring mit dem Befehl **save**. | ||
+ | gpg> save | ||
+ | |||
+ | Wenn wir jetzt den Kartenstatus abfragen, werden unsere drei Unterschlüssel entsprechend mit angezeigt. | ||
+ | $ gpg2 --card-status | ||
+ | |||
+ | < | ||
+ | Version ..........: 3.3 | ||
+ | Manufacturer .....: ZeitControl | ||
+ | Serial number ....: 00006FDA | ||
+ | Name of cardholder: [not set] | ||
+ | Language prefs ...: de | ||
+ | Sex ..............: | ||
+ | URL of public key : [not set] | ||
+ | Login data .......: [not set] | ||
+ | Signature PIN ....: forced | ||
+ | Key attributes ...: 4096R 4096R 4096R | ||
+ | Max. PIN lengths .: 64 64 64 | ||
+ | PIN retry counter : 3 0 3 | ||
+ | Signature counter : 0 | ||
+ | Signature key ....: C78C 3294 2822 BFE2 3A0C BF5B 7D77 3C74 ACCE 2639 | ||
+ | created ....: 2018-11-21 11:58:41 | ||
+ | Encryption key....: A7CC 2F9D 0D39 92B6 B03A A878 06CC CCAF 564B A287 | ||
+ | created ....: 2018-11-21 09:05:29 | ||
+ | Authentication key: 268A DDA5 30FD 8FE7 DD86 2C5B 4E9B 2B65 EC65 030E | ||
+ | created ....: 2018-11-21 12:01:12 | ||
+ | General key info..: pub 4096R/ | ||
+ | sec | ||
+ | ssb> | ||
+ | card-no: 0005 00006FDA | ||
+ | ssb> | ||
+ | card-no: 0005 00006FDA | ||
+ | ssb> | ||
+ | card-no: 0005 00006FDA | ||
+ | </ | ||
+ | |||
+ | === Öffentlichen Schlüssel ausgeben === | ||
+ | Damit wir später unseren öffentlichen Schlüssel auch weitergeben oder zu einem [[https:// | ||
+ | $ gpg --export --armor secmail@nausch.org > secmail@nausch.org.publickey | ||
+ | |||
+ | Diese Date enthält unseren Schlüssel in ASCCI-lesbarer Form. | ||
+ | $ cat secmail@nausch.org.publickey | ||
+ | <file key secmail@nausch.org.publickey> | ||
+ | Version: GnuPG v2.0.22 (GNU/Linux) | ||
+ | |||
+ | mQINBFv1H9kBEAC9GZO2QsMWqhP2SNcJ1X0eRpTtSM3rqbblmDCWovJjI8X4uCbq | ||
+ | ApvG8yKFAnGyqpgu5FRj7aNcrMRUbPqOUyZ1Q5R+Nx/ | ||
+ | oQKnimBUw4QoAIy/ | ||
+ | tHLaKbcJxePgw0QmjuD+8FIHX0keMZFjiutMPAmrRFpBdOdihBmPTPeJ1Qk6z37M | ||
+ | L6F+WE+kMGYGtb+v3rfbRzla2K+k/ | ||
+ | Zh8hDdczLTq5CJnQ4wFHLRRunR7LHg4DPv23NI7e6JedjvYU+v+/ | ||
+ | 3FFH6EMK/ | ||
+ | vb0HrARO+wVzyBVQuQsys2o3qCWpOPZ/ | ||
+ | 9eVkLUFAm/ | ||
+ | 9ENS2ZaBot+5MPGNqhxlbZh7zFxkf+g6rhpgwKqQT2CYjtXHYVa6m2J+9FWTHe4W | ||
+ | XxjU4Jvjc3LQYJCEsYpI5aTcj2EwH8ph8p2Q00W++kiuTwrTlBn+bfsjGwARAQAB | ||
+ | tClEamFuZ28gYWthIEJPZkggPHNlY21haWxAbWFpbHNlcnZlci5ndXJ1PokCOQQT | ||
+ | AQIAIwUCW/ | ||
+ | NZRGbZcP/ | ||
+ | l2PFSwLTsfxLTFRNem2Ra6QT2Ld5sHDIMk6V2rnxSTWZGDx6j5dlG1+GQXkX8MYL | ||
+ | Wr1WdPUFlyijYMzIwaeCtCrx0cBlufXxi3T/ | ||
+ | jThG8PqPI1imXu8X/ | ||
+ | IWuZ/ | ||
+ | Auw84V7Iyvk6o7sJsvf/ | ||
+ | s8+0LpSIcPkjrgVLqiS5NfW7r7leshCFt+gRZfno8XHAwbpMMHTOmxsHQZNHcmh4 | ||
+ | pMn5VCmwBvrFSlZDyzn/ | ||
+ | PX7bScXYiOgN/ | ||
+ | KnpE2btu7tR2AosSbo80j0JXYAgRf5RWJndvA4nbxB7mVcvKFHJ36C69V9U40p0E | ||
+ | fxCX7Z5rmQx+tsnhu7ltIh/ | ||
+ | EAD1QYpaiuEGwLG7oTX4V1AHkZ+nK5vINdfy5c7VoAIrftZ1dj6KdFoRmV2sKqZD | ||
+ | ulovSj7L4QGYd+SoR+ujKjm+M4QIciyLinmyPR0P1u6hag3Hfej/ | ||
+ | 7BRBe6rSu3XsCLI5IzQh5q+zc28zS4bZR3CvG+gRTzNkI/ | ||
+ | bK48rYKO7n9yWC7ufU1qieAtkeuBR9u/ | ||
+ | sqfvFYzyTSRAy8g4S3o1cFxIM53N3IrTZFv3F7rs43mONH1iBBrwkEz19g2y+gLJ | ||
+ | zHkIDZeAQ0ACVwR95ZWzukq/ | ||
+ | V39UaegXYoTd5YtFhMwNxQRmg0E3/ | ||
+ | RvQCYbyF4FKwVkq09ty20IN/ | ||
+ | BFDCjfkk8+iRvkH6S4aWlCieCY5Mdcx/ | ||
+ | Y9OkZYQZaVZTAZp8O4Nraj7JIZm1iIfq0NBVSMHhxus7+AfXrHdoaFo601OFJHlL | ||
+ | O+3sv9mVQYT1pBr/ | ||
+ | BQJb9R/ | ||
+ | M9CUanh8iEr+8QEiyj6oVhUaCr+WDxPj+c7xm/ | ||
+ | GbdpVh53vKRtUqddBn95yu3FMqmjh84iCIJi+NDnI1QiZTTW+uKQ2v1d+7m89kCf | ||
+ | nihpxWwbr+pw4KoCxo6cCSfQlODPXUVs+6gaSm5hg0tmFRQRkaH/ | ||
+ | 76rYuhwI0uaEB5pdb3j4eSyRnKg9carvSNQFUjPx/ | ||
+ | 77vS6/ | ||
+ | 2PEnF/ | ||
+ | 9c1taWTcGvqf7/ | ||
+ | gpT7RetllYqDBahIkzuTqlpySWNTJ+ABUl7mVx5Q3TyfiL8KC6U6ynqtALmTN1tb | ||
+ | 8PQo1Ep/ | ||
+ | ebwE7wQRewKtaO87+nt8ju4Bo5wPbO4UwAzjPnzX0nDCNlLC+/ | ||
+ | pEDFrIG+47gxuQINBFv1SHEBEADJGTXhgV8dTea4+nf+MPqoGYefE7ChgLnWdfhs | ||
+ | 51OPvoyFVmCtRVOuWAIoka5/ | ||
+ | B9Fo8lpbrygpal3dvZ1ZQ/ | ||
+ | Cvar5oJ/ | ||
+ | pXNZJhEKz789FLHFj2uXSkQvoh9VuyGxQcVyhdYmxDh37CepxyzNRcGiQx67BTWX | ||
+ | qmNWg6Cl1HLn/ | ||
+ | 3pcBud9Jvp+C2cpYVG/ | ||
+ | TCYzWcKYiaNcsedGn/ | ||
+ | abpDygntiydpnPfa1BsgnVYOMTndIwVYe0nIvw/ | ||
+ | iCH+2HwnkkpqlYyInJjQFsDuZxTe+ND7YDAJ+NnLNmYblcYYfhM2GG/ | ||
+ | kErHjicnhZo5tqQFFi9T6LvT4L7m1lznHDnDlsYtjiWlw/ | ||
+ | MrU5hQARAQABiQQ+BBgBAgAJBQJb9UhxAhsCAikJEC7L42/ | ||
+ | BQJb9UhxAAoJEH13PHSsziY5fKEP/ | ||
+ | iUTobK5Wm3sYR8d6suDJVa989vjB4l19W1k7pztFFuNPLmEPEirLsRYlJOS36l8g | ||
+ | OdjuFZBf/ | ||
+ | 9C72YQObIh7sZJXD1qH+OmynlHfpwI+B/ | ||
+ | RCLu/ | ||
+ | luNEVcnkOLI6qA2pYIKvCip86YjelQEN1LgjRv3x+3lEekm1jijdotxXuK57zwj/ | ||
+ | 3FfxK+k7n0PRr7LBnbGKYIGu2f05wqCXvCy2JqoOOIkgfyUQmlwEYZ8hKhj2V5v5 | ||
+ | Yb2JUO6ui8rG6MARewrnbLAIXgPqKV0LBRNlmAx3ohJ1t4keqyrPOyY7AlLj869W | ||
+ | S5yMS4zqRE6T9ATQjhnpauha5EOIUBhjvcOxTlYGa2znJvsfr7V4vTY1aBMYa+3m | ||
+ | plvLQb0LrqwLuvIvKGdsdOOrvcAhueX5kq5kk5dxzU7yiArprVcGYiOopaNmfAMO | ||
+ | WsTBWVHuz5VjukA0A9E/ | ||
+ | YB4420jk8VwP/ | ||
+ | 3C7uw8uhMRI4RUKtgeJs8/ | ||
+ | 7FKCzpMY6RQ4TeR5hVf20xqfzyic+1WPCtWVa1DrdznMwrrHM1TprVEcZj4mfORx | ||
+ | VrhydQ39L7GGC2HFI2rvwItxNm3okNq3WEnWPyCgswG76NVJKo6CXQpSSOwWINv7 | ||
+ | usjau8wUWal8eM7RcUcPiIkDknJQDRZD0npS/ | ||
+ | vlHrR6BxXKU8G7niPuDZwIItS8LwJAMn5EBhzb8IAVWZqJzfn6txpINTbybb8v9L | ||
+ | U+Km+yyFcNuG+BV7aCLuLEFjDkNLVnF6Le/ | ||
+ | jxGS9GnNJMeKqixbnKFtNmnK8sZ9khcjYswcOMbLloGNpkmsRU2JDywefmCz0eVz | ||
+ | kXMwv+4CQF8ODdS/ | ||
+ | Bx7tT2GuGQuN7UD9Zr8iO7c0LlDZ3NZbWDqvXLqNykF/ | ||
+ | fOGjqOOMfs16zb9lmxPz7NTddYwa/ | ||
+ | SQgBEACb/ | ||
+ | r9TEgzTBez3S4fd3KLxJXQbD0fXGoQ3R8yqSydfYiPgkMBdxpbWffrTXRCa5gNA0 | ||
+ | cFlrzj/ | ||
+ | xkZmsXLvlkzU1QExH5RLr9c3IDW6CfMFuKE5zBuoY4Ba1EXuayvpN+z1IMw0VwSZ | ||
+ | 334xCxXzpSq3dUoSJIS9yy6Sba3XMxzwmYG8RblceFhAC+ec6PVLQ4FukAwInRh6 | ||
+ | L/ | ||
+ | IFKwXS2D6fE0XX3Er0goq2JHZo7pYdUjnkaRFGsvghzHgTDWwcv5JILxHyuHHtrc | ||
+ | AeptL9/ | ||
+ | 6Vz0AT1aXmi5nM/ | ||
+ | rC5Xx3iG+Bs0nYF422wDmL1TgeIuQIjgtZWFSZ+qVLYtRieQgCCCFg1TfuOYq2+k | ||
+ | AUg0ADV/ | ||
+ | AgAJBQJb9UkIAhsgAAoJEC7L42/ | ||
+ | c7Fagw641qjIxJP1LhjlFiJfKx6zHFDrCDyWsy6JeNzjyJOmQQMgXcQ9I/ | ||
+ | G966p1HlPxRpKgbcgSKoCGgLXRwVEAwsngYKApQKFM11gGzeRTiPyOfYuhPXTstD | ||
+ | kr3zbdrlsLNdAs6lia55QxE+SkG7yXvMGO1IsbGzarGVvE4CmzmaFX01Y1eU/ | ||
+ | pdf6QqdfF0Z+4tP5Ej2Al3kwQNgNQxfus329VpMibhTpB7/ | ||
+ | sM+iVw8C7ZwJFmiVj+ZkXpYfSOHCp6ZBewojPEXlLBw4YLUf02aKHfZWeqOXvIqg | ||
+ | djphB+Ok4KeYAuRiZp0KlIGN5dhQA+d6wgxwKNvFiuIVxi7hxlT8RO/ | ||
+ | u1VdHLA5qxXsAC6iuZFwO/ | ||
+ | 1OY8ZSVVHmsObiFRyIogm6FXnfNh+5W8/ | ||
+ | lUuvBaEzMS0puUXq3VPl01WVYyg9b4P2XcRbSiWQmQ1AKT4Rf6fH7/ | ||
+ | lj2nm/ | ||
+ | MezibODnMrJixhyz | ||
+ | =ZvZy | ||
+ | -----END PGP PUBLIC KEY BLOCK-----</ | ||
+ | |||
+ | === 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. < | ||
+ | - Nun verschlüsseln wir dieses Textdokument: | ||
+ | -rw-rw-r-- 1 django django 962 Nov 21 14:37 testdatei.txt.pgp</ | ||
+ | �̯VK����ꠔ��oY]�T> | ||
+ | SZ, | ||
+ | =�Y����v, | ||
+ | MQ[Ce< | ||
+ | u�뇙�P����1< | ||
+ | ��߿�W.�-I����^�V�-��+A�i� | ||
+ | | ||
+ | *�]��-�t, | ||
+ | | ||
+ | | ||
+ | ��6��n�# | ||
+ | - Nun entschlüsseln wir unser Dokument wieder.< | ||
+ | " | ||
+ | |||
+ | === Schlüssel aus dem lokalen Schlüsselspeicher entfernen === | ||
+ | Löschen wir nun den kompletten Schlüssel aus der lokalen Schlüsseldatei, | ||
+ | $ gpg --delete-secret-key secmail@nausch.org | ||
+ | < | ||
+ | This is free software: you are free to change and redistribute it. | ||
+ | There is NO WARRANTY, to the extent permitted by law. | ||
+ | |||
+ | |||
+ | sec 4096R/ | ||
+ | |||
+ | Delete this key from the keyring? (y/N) y | ||
+ | This is a secret key! - really delete? (y/N) y | ||
+ | </ | ||
+ | |||
+ | <WRAP center round alert 95%> | ||
+ | __**Doch Achtung: | ||
+ | Hier wird der komplette Schlüssel gelöscht, also den **privaten Primären Signing Key** und nicht nur die Proxy-Einträge! Dies kann zu Problemen bei der späteren Verwendung des Nitrokey Pro auf der Konsole führen, da das gpg-Programm versucht den Schlüssel im Schlüsselbund zu finden! | ||
+ | </ | ||
+ | |||
+ | Der gpg-Befehl '' | ||
+ | |||
+ | Wir exportieren also erst einmal die Unterschlüssel und legen diese in einer lokalen Datei ab. Zunächst holen wir uns aber noch die Schlüssel-IDs da wir diese beim Exportieren eiegns angeben müssen. | ||
+ | $ gpg2 --list-secret-keys | ||
+ | < | ||
+ | ------------------------------ | ||
+ | sec | ||
+ | uid Django aka BOfH < | ||
+ | ssb> | ||
+ | ssb> | ||
+ | ssb> | ||
+ | </ | ||
+ | Nun exportieren wir die Unterschlüssel mit Hilfe folgenden Aufrufs, bei dem wir die IDs der Unterschlüssel gfolgt von einem **!** jeweils angeben: | ||
+ | $ gpg2 -o subkeys --export-secret-subkeys 564BA287! ACCE2639! EC65030E! | ||
+ | |||
+ | Nun löschen wir den primären Signierungsschlüssel inkl. der Unterschlüssel. | ||
+ | $ gpg2 --delete-secret-key secmail@nausch.org | ||
+ | < | ||
+ | This is free software: you are free to change and redistribute it. | ||
+ | There is NO WARRANTY, to the extent permitted by law. | ||
+ | |||
+ | |||
+ | sec 4096R/ | ||
+ | |||
+ | Delete this key from the keyring? (y/N) y | ||
+ | This is a secret key! - really delete? (y/N) y</ | ||
+ | |||
+ | Ein erneuter Aufruf des privaten Schlüsselspeichers zeigt und, dass dort nun keine Einträge mehr vorhanden sind. | ||
+ | $ gpg2 --list-secret-keys | ||
+ | |||
+ | Nun importieren wir wieder die zuvor gesicherten privaten Unterschlüssel | ||
+ | $ gpg2 --import subkeys | ||
+ | < | ||
+ | gpg: key D1359446: " | ||
+ | gpg: Total number processed: 1 | ||
+ | gpg: unchanged: 1 | ||
+ | gpg: | ||
+ | gpg: | ||
+ | |||
+ | Lassen wir uns nun den Inhalt des privaten Schlüsselbundes anzeigen, sehen wir die zurückgesicherten Unterschlüssel wieder. | ||
+ | $ gpg2 --list-secret-keys | ||
+ | < | ||
+ | ------------------------------ | ||
+ | sec# 4096R/ | ||
+ | uid Django aka BOfH < | ||
+ | ssb> | ||
+ | ssb> | ||
+ | ssb> | ||
+ | |||
+ | Zu guter letzt vernichten wir die Datei mit den gesicherten privaten Unterschlüsseln. | ||
+ | $ shred --zero --removesubkeys | ||
+ | |||
+ | ==== Nitrokey und Thunderbird ==== | ||
+ | Unseren zuvor präparierten Kryptostick wollen wir nun verwenden um bei Thunderbird unsere elektronische Kommunikation per eMail abzusichern. Hierzu werden wir nun den schlüssel dem betreffenden Konto zuweisen. | ||
+ | Über das Menü wählen wir den Punkt **Konten-Einstellungen** aus. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Beim passenden Konto wählen wir dann die Option **OpenPGP-Sicherheit** aus. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Hier wählen wir nun den Schlüssel aus, den wir zuvor erstellt und auf die SmartCard des Kryptostick Pro verschoben hatten. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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. | ||
+ | {{ : | ||
+ | Habne wir die PIN richtig eigegeben, wird die entschlüsselte Nachricht angezeigt. | ||
+ | {{ : | ||