Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
suse:nitrokey:start [04.08.2020 17:43. ] – [ED25519-Schlüssel generieren] django | suse:nitrokey:start [18.11.2024 18:51. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 254: | Zeile 254: | ||
Real name: Django aka [BOfH] | Real name: Django aka [BOfH] | ||
- | Email address: secmail@mailserver.guru | + | Email address: secmail@nausch.org |
Comment: Bastard Operator from Hell | Comment: Bastard Operator from Hell | ||
You selected this USER-ID: | You selected this USER-ID: | ||
- | " | + | " |
Change (N)ame, (C)omment, (E)mail or (O)kay/ | Change (N)ame, (C)omment, (E)mail or (O)kay/ | ||
Zeile 275: | Zeile 275: | ||
pub | pub | ||
E65B2BDF79A2E2E4C28F6E062E22436430385B49 | E65B2BDF79A2E2E4C28F6E062E22436430385B49 | ||
- | uid Django aka [BOfH] (Bastard Operator from Hell) < | + | uid Django aka [BOfH] (Bastard Operator from Hell) < |
sub | sub | ||
sub | sub | ||
Zeile 372: | Zeile 372: | ||
gpg/ | gpg/ | ||
- | Fragen wir nun erneut mit den Befehl '' | + | Fragen wir nun erneut mit den Befehl '' |
$ gpg2 --card-status | grep Key\ attributes | $ gpg2 --card-status | grep Key\ attributes | ||
Zeile 428: | Zeile 428: | ||
Real name: Django aka [BOfH] | Real name: Django aka [BOfH] | ||
- | Email address: secmail@mailserver.guru | + | Email address: secmail@nausch.org |
Comment: Bastard Operator from Hell | Comment: Bastard Operator from Hell | ||
You selected this USER-ID: | You selected this USER-ID: | ||
- | " | + | " |
Change (N)ame, (C)omment, (E)mail or (O)kay/ | Change (N)ame, (C)omment, (E)mail or (O)kay/ | ||
gpg: key 9308FC78386863AC marked as ultimately trusted | gpg: key 9308FC78386863AC marked as ultimately trusted | ||
gpg: revocation certificate stored as '/ | gpg: revocation certificate stored as '/ | ||
- | public and secret key created and signed.< | + | public and secret key created and signed.</code> |
Fragen wir nun den Inhalt der SmartCard mit dem Befehl '' | Fragen wir nun den Inhalt der SmartCard mit dem Befehl '' | ||
Zeile 461: | Zeile 461: | ||
Authentication key: 9131 32BE D5AF D08E 4464 89B6 77F0 A5B2 F32A 76AE | Authentication key: 9131 32BE D5AF D08E 4464 89B6 77F0 A5B2 F32A 76AE | ||
created ....: 2020-08-04 21:26:26 | created ....: 2020-08-04 21:26:26 | ||
- | General key info..: pub ed25519/ | + | General key info..: pub ed25519/ |
sec> | sec> | ||
card-no: FFFE 43243711 | card-no: FFFE 43243711 | ||
Zeile 473: | Zeile 474: | ||
< | < | ||
3E61A50347B523824132EC069308FC78386863AC | 3E61A50347B523824132EC069308FC78386863AC | ||
- | uid Django aka [BOfH] (Bastard Operator from Hell) < | + | uid Django aka [BOfH] (Bastard Operator from Hell) < |
sub | sub | ||
sub | sub | ||
</ | </ | ||
+ | |||
+ | === 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 -K | ||
+ | < | ||
+ | E65B2BDF79A2E2E4C28F6E062E22436430385B49 | ||
+ | Card serial no. = FFFE 43243711 | ||
+ | uid | ||
+ | ssb> | ||
+ | ssb> | ||
+ | </ | ||
+ | |||
+ | === Ö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.pubkey | ||
+ | |||
+ | Diese Datei enthält unseren Schlüssel in ASCII-lesbarer Form. | ||
+ | $ cat secmail@nausch.org.pubkey | ||
+ | <file key secmail@nausch.org.pubkey> | ||
+ | |||
+ | mQENBFv8ZM0BCADIZ1us1KDfrl+VVZTmjgVDb9XLSJDWOCjjhngzkBNVIYpPRL9P | ||
+ | CVueNDD+TiWQ7HyKKnel/ | ||
+ | uKNoMSyqdNSxcHc/ | ||
+ | GwETwrEguCFMloRCeAZL3iU8t8p/ | ||
+ | 9+2MqLoX3K1h30l8Iqc2p4cUNjItSvxcmsb5kJoKoR4050c13zcmdQ9UZ8XvvxmI | ||
+ | xiS8izqUwolqwhb6QFv3kgggZovG1hQDHk1NABEBAAG0SERqYW5nbyBha2EgW0JP | ||
+ | ZkhdIChCYXN0YXJkIE9wZXJhdG9yIGZyb20gSGVsbCkgPHNlY21haWxAbWFpbHNl | ||
+ | cnZlci5ndXJ1PokBTgQTAQgAOBYhBOZbK995ouLkwo9uBi4iQ2QwOFtJBQJb/ | ||
+ | AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEC4iQ2QwOFtJqFoIAIW78N3r | ||
+ | Y3FC+V/ | ||
+ | UrdfW+vwWQET6sj7qhRUhkwVHFfZQ/ | ||
+ | ySUEMU1Dg2nBnlye9uwVnQe83BNtKv4zJpVPu7vSiWpCyyIuXc9C4PZcBmFQpm82 | ||
+ | wy88NKqWq72aUVXfMorJgRsSiP9DBG/ | ||
+ | CaOwVKwAfW7ZqV1su/ | ||
+ | vBGNMjXqsS7JmJS5AQ0EW/ | ||
+ | v/ | ||
+ | E6SsI8PkkP5+zbiytKNb38OsqVj74XryhZKyzxmRMtqKcG8hRsUmM98OpUR/ | ||
+ | JzM1AADF3m4mg6vLu3JeH18u0sXUD6XNRkDSW0nqtdSM7G68wtiV+2FT37XFmeYx | ||
+ | rVLYXnJHGtATBhv3X5bhR/ | ||
+ | OV/ | ||
+ | AQgAIBYhBOZbK995ouLkwo9uBi4iQ2QwOFtJBQJb/ | ||
+ | itsIAKhd7EfJdzv2jBk// | ||
+ | DqZAjPZjV8xFHGrK5qQpAiLCQPK5V5PM4eqTXp5BIhTrbONjMYCa4RGXGFaC2oe0 | ||
+ | Mr3QJ/ | ||
+ | fVWzV3cm+f6ZATKPzWdSQ5uxPnXGT1vmUzpqRXaMRd3vKQNZcp+nOOrr9e9bX6S0 | ||
+ | CuNsU7U/ | ||
+ | f0bIUZIL3HhK/ | ||
+ | Odpq09SfuZ9TxVsKxv2sdmZSGIXSYo28yuuzvMJYRcBpsXBfdJXTqPz6PrIvCupw | ||
+ | piY3CfzRu0Vh67/ | ||
+ | cogor++jmBpgvzqjRkeGpFMe1dlQ5ImSypikYPwQrbtesDpJS/ | ||
+ | Gz6UoezemdnViurXIEAH2gBsuDfhonlW8O4OkbCwaaqGtPzWWBxDXCwHdt81T1aO | ||
+ | Pc8i/ | ||
+ | EQEAAYkBNgQYAQgAIBYhBOZbK995ouLkwo9uBi4iQ2QwOFtJBQJb/ | ||
+ | EC4iQ2QwOFtJ4JMIAJzDAz9N3QEIHAK5ifPADPbgfnwgGNJdeZacFC1jX82i8srj | ||
+ | aYG3DfCrRvCuRzFt4W++1FXH6VRUtsMkAOtXUpOEYTwdpCFcyg9IcIgQtwXPdzUq | ||
+ | Gp6XZWRhyDRuLF9pwM/ | ||
+ | +Uh1NJdNwME6KqEBRELmpndnyLl028iI4Tlf87sbYhT+JKjcEMRXCEqLdKJhDxNq | ||
+ | cDS7Js+gFE4YQSq4FtiXA2a8JjJGpiHRFFBDTy3ckPv0ASyjyTzgWXPWXkKp+XAG | ||
+ | dkn5YYBdkGUXocXtTGUPR4Aji+OapxkcLvXqfSA= | ||
+ | =WNYT | ||
+ | -----END PGP PUBLIC KEY BLOCK-----</ | ||
+ | |||
+ | === card-edit - Stick personalisieren === | ||
+ | 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 Daten müssen wir nach der Anmeldung an der Karte mit dem Befehl **admin**in den Admin Bereich wechseln. | ||
+ | $ gpg --card-edit | ||
+ | |||
+ | < | ||
+ | Application ID ...: D276000124010200FFFE140819670000 | ||
+ | Version ..........: 2.0 | ||
+ | Manufacturer .....: unmanaged S/N range | ||
+ | Serial number ....: 14081967 | ||
+ | Name of cardholder: [not set] | ||
+ | Language prefs ...: [not set] | ||
+ | Sex ..............: | ||
+ | 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/ | ||
+ | |||
+ | | ||
+ | |||
+ | Admin commands are allowed | ||
+ | |||
+ | Wir ändern zunächst den Namen des Karteninhabers **Name of cardholder**: | ||
+ | | ||
+ | |||
+ | Cardholder' | ||
+ | Cardholder' | ||
+ | |||
+ | Als nächstes definieren wir die Sprache des Kartenbenutzers: | ||
+ | | ||
+ | |||
+ | Language preferences: | ||
+ | |||
+ | Im nächsten Schritt setzen wir das Geschlecht des Karteninhabers: | ||
+ | | ||
+ | |||
+ | Sex ((M)ale, (F)emale or space): m | ||
+ | |||
+ | Nun setzen wir noch den Anmelde-/ | ||
+ | | ||
+ | |||
+ | Login data (account name): django | ||
+ | |||
+ | Zu guter Letzt setzen wir nun die URL, von der der public-key mit Hilfe des Befehls **fetch** unter '' | ||
+ | | ||
+ | |||
+ | URL to retrieve public key: https:// | ||
+ | |||
+ | Somit ergeben sich folgende benutzerindividuellen Daten auf der Karte: | ||
+ | | ||
+ | |||
+ | < | ||
+ | Version ..........: 2.0 | ||
+ | Manufacturer .....: unmanaged S/N range | ||
+ | Serial number ....: 14081967 | ||
+ | Name of cardholder: Michael Nausch | ||
+ | Language prefs ...: de | ||
+ | Sex ..............: | ||
+ | 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] | ||
+ | </ | ||
+ | |||
+ | Nun können wir die Erstinitialisierung abschliessen und den Einstellungsdialog mit dem Befehl **quit** verlassen. | ||
+ | | ||
+ | |||
+ | === 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 **// | ||
+ | </ | ||
+ | |||
+ | Mit Hilfe des Befehls '' | ||
+ | |||
+ | 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 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 // | ||
+ | </ | ||
+ | |||
+ | 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 | ||
+ | < | ||
+ | |||
+ | 1 - change PIN | ||
+ | 2 - unblock PIN | ||
+ | 3 - change Admin PIN | ||
+ | 4 - set the Reset Code | ||
+ | Q - quit | ||
+ | |||
+ | Ihre Auswahl?</ | ||
+ | |||
+ | 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. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | 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/ | ||
+ | |||
+ | === 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. < | ||
+ | VERSION=" | ||
+ | ID=" | ||
+ | ID_LIKE=" | ||
+ | VERSION_ID=" | ||
+ | PRETTY_NAME=" | ||
+ | ANSI_COLOR=" | ||
+ | CPE_NAME=" | ||
+ | BUG_REPORT_URL=" | ||
+ | HOME_URL=" | ||
+ | - Nun verschlüsseln wir dieses Textdokument: | ||
+ | sub cv25519/ | ||
+ | | ||
+ | Subkey fingerprint: | ||
+ | |||
+ | 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/ | ||
+ | -rw-r--r-- 1 django users 525 4. Aug 20:23 testdatei.txt.pgp</ | ||
+ | |||
+ | hF4Dvx6j9wMgPYoSAQdAhvFZiNZWBjduajM7OWUr2yM2KC9jfzgvd0SEHael4zUw | ||
+ | XXie4+DZ25g7urXNBfnbwiHOw3z5j8P3vcblM8rpzB/ | ||
+ | 0sAxARxA2p4YtPLOKyfGmxHifk6JqM19iUk2mht1MM2WqNtYUDLXKtos/ | ||
+ | SPBwdilxMkMQ+jEfNI8t66a2FXcqucjrXPXhKiyZK8C+EJQyLZAbml5W00UKJZHI | ||
+ | lXQHfh1HCU+h1aOtmHM0kQSzOMprXRiEgyrrlG1ab5lZKMeIo7V7jwkQCOafs+PO | ||
+ | SXUm1Hq4KPwuPDsGjQ3sQo7ErQZFsiVrSWD67lXqtqNhg8a/ | ||
+ | Rj1weIqZroiOvBW/ | ||
+ | AQeUjQ== | ||
+ | =9ebq | ||
+ | -----END PGP MESSAGE-----</ | ||
+ | - Nun entschlüsseln wir unser Dokument wieder.< | ||
+ | " | ||
+ | VERSION=" | ||
+ | ID=" | ||
+ | ID_LIKE=" | ||
+ | VERSION_ID=" | ||
+ | PRETTY_NAME=" | ||
+ | ANSI_COLOR=" | ||
+ | CPE_NAME=" | ||
+ | BUG_REPORT_URL=" | ||
+ | HOME_URL=" | ||
+ | |||
+ | === 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. < | ||
+ | - Nun signieren wir dieses Textdokument: | ||
+ | -rw-r--r-- 1 django users 177 4. Aug 20:57 textdatei.txt.gpg</ | ||
+ | sub cv25519/ | ||
+ | | ||
+ | Subkey fingerprint: | ||
+ | |||
+ | 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/ | ||
+ | |||
+ | owGbwMvMwCE2meNPhUVG8hrGNQZJvCWpFSUpiSWpmXolFSXxmhs2uWQqmOgpOJam | ||
+ | KxgZWJmaWxkZKzi7BocAeUYGXB2lLAxiHAyyYoosdolLmd23Kjc5Gr1hg5nIygQy | ||
+ | gYGLUwAmon6JkWHXDc+AWrfjeyokWNeoLrqruH9DfsNrPi7hRWdz9smcem/ | ||
+ | 4YL17MjAT/ | ||
+ | =BXv/ | ||
+ | -----END PGP MESSAGE-----</ | ||
+ | Hash: SHA256 | ||
+ | |||
+ | Di 4. Aug 20:57:23 CEST 2020 | ||
+ | -----BEGIN PGP SIGNATURE----- | ||
+ | |||
+ | iHUEARYIAB0WIQQ+YaUDR7UjgkEy7AaTCPx4OGhjrAUCXymw/ | ||
+ | rBwEAP0dZtolkQCmLYuccDEjTWVK/ | ||
+ | eR1Z/ | ||
+ | =76rm | ||
+ | -----END PGP SIGNATURE-----</ | ||
+ | gpg: using EDDSA key 3E61A50347B523824132EC069308FC78386863AC | ||
+ | gpg: Good signature from " | ||
+ | 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: | ||
+ | gpg: WARNING: not a detached signature; file ' | ||
+ | Hash: SHA256 | ||
+ | |||
+ | Di 4. Aug 20:57:23 CEST 2099 | ||
+ | -----BEGIN PGP SIGNATURE----- | ||
+ | |||
+ | iHUEARYIAB0WIQQ+YaUDR7UjgkEy7AaTCPx4OGhjrAUCXymw/ | ||
+ | rBwEAP0dZtolkQCmLYuccDEjTWVK/ | ||
+ | eR1Z/ | ||
+ | =76rm | ||
+ | -----END PGP SIGNATURE-----</ | ||
+ | gpg: using EDDSA key 3E61A50347B523824132EC069308FC78386863AC | ||
+ | gpg: BAD signature from " | ||
+ | |||
+ | ==== 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 // | ||
+ | |||
+ | === 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. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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 Start verschoben hatten. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | === eMail signieren === | ||
+ | Nun erstellen wir eine Testnachricht und wählen die Option **Signieren** aus. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | === 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. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Haben wir die PIN richtig eingegeben, wird die entschlüsselte Nachricht angezeigt. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Über das Schlosssymbol in der Nachricht können wir uns Details zu den Enigmail-Sicherheitsinformationen anzeigen lassen. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ==== 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:// | ||
+ | |||
+ | Der Sicherheitsguru Bruce Schneier hat in seinem **[[https:// | ||
+ | |||
+ | <wrap em>//" | ||
+ | |||
+ | **[[https:// | ||
+ | </ | ||
+ | |||
+ | Auf RSA Schlüssel muss man aber nicht mehr zwingend zurückgreifen, | ||
+ | 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 '' | ||
+ | **// des GPG-Agenten. | ||
+ | $ vim ~/ | ||
+ | <file bash ~/ | ||
+ | # See backup in '/ | ||
+ | |||
+ | # File re-created by pEp | ||
+ | # See backup in '/ | ||
+ | |||
+ | default-cache-ttl 300 | ||
+ | max-cache-ttl 999999 | ||
+ | |||
+ | # Django : 2020-08-05 | ||
+ | # SSH-Unterstützung beim gnupg-agent aktiviert | ||
+ | enable-ssh-support</ | ||
+ | |||
+ | Anschließend müssen wir noch die Datei // | ||
+ | $ vim ~/.bashrc | ||
+ | <file bash ~/ | ||
+ | |||
+ | # Source global definitions | ||
+ | if [ -f /etc/bashrc ]; then | ||
+ | . /etc/bashrc | ||
+ | fi | ||
+ | |||
+ | # User specific environment | ||
+ | PATH=" | ||
+ | export PATH | ||
+ | |||
+ | # Uncomment the following line if you don't like systemctl' | ||
+ | # 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 [ " | ||
+ | export SSH_AUTH_SOCK=" | ||
+ | fi</ | ||
+ | |||
+ | 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 '' | ||
+ | |||
+ | Nun exportieren wir den öffentlichen Schlüssel und schreiben diesen in eine separate Datei. | ||
+ | $ gpg2 --export-ssh-key 77F0A5B2F32A76AE >> ~/ | ||
+ | |||
+ | Der Öffentliche Schlüssel in diesen Konfigurationsbeispiel lautet also: | ||
+ | $ cat ~/ | ||
+ | |||
+ | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJA+NwP2KzxqkrhKxi6JDRDUyE/ | ||
+ | |||
+ | Diesen Schlüssel kopieren wir nun auf das entsprechende Zielsystem an Ort und Stelle '' | ||
+ | $ scp ~/ | ||
+ | |||
+ | === 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. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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:// | ||
+ | |||
+ | $ ln -s ~/ | ||
+ | |||
+ | $ micro-ca-tool -h | ||
+ | < | ||
+ | | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | " | ||
+ | | ||
+ | | ||
+ | [#] 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: / | ||
+ | [#] | ||
+ | [#] | ||
+ | [#] | ||
+ | [#] optional [< | ||
+ | |||
+ | == PIN Setzen == | ||
+ | Zunächst setzen wir die Admin und anschließend die User PIN. | ||
+ | $ micro-ca-tool gpg pin | ||
+ | < | ||
+ | | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | " | ||
+ | | ||
+ | | ||
+ | [#] 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?</ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | /* | ||
+ | https:// | ||
+ | |||
+ | $ openpgp-tool | ||
+ | |||
+ | Using reader with a card: Nitrokey Nitrokey Start (FSIJ-1.2.10-43210843) 00 00 | ||
+ | |||
+ | [django@T410 Schreibtisch]$ gpg2 --card-status | ||
+ | Reader ...........: | ||
+ | Application ID ...: D276000124010200FFFE432108430000 | ||
+ | Version ..........: 2.0 | ||
+ | Manufacturer .....: unmanaged S/N range | ||
+ | Serial number ....: 43210843 | ||
+ | Name of cardholder: [nicht gesetzt] | ||
+ | Language prefs ...: [nicht gesetzt] | ||
+ | Sex ..............: | ||
+ | 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 ...........: | ||
+ | Application ID ...: D276000124010200FFFE432108430000 | ||
+ | Version ..........: 2.0 | ||
+ | Manufacturer .....: unmanaged S/N range | ||
+ | Serial number ....: 43210843 | ||
+ | Name of cardholder: [nicht gesetzt] | ||
+ | Language prefs ...: [nicht gesetzt] | ||
+ | Sex ..............: | ||
+ | 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/ | ||
+ | |||
+ | Reader ...........: | ||
+ | Application ID ...: D276000124010200FFFE432108430000 | ||
+ | Version ..........: 2.0 | ||
+ | Manufacturer .....: unmanaged S/N range | ||
+ | Serial number ....: 43210843 | ||
+ | Name of cardholder: [nicht gesetzt] | ||
+ | Language prefs ...: [nicht gesetzt] | ||
+ | Sex ..............: | ||
+ | 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/ | ||
+ | Admin-Befehle sind erlaubt | ||
+ | |||
+ | gpg/ | ||
+ | quit Menü verlassen | ||
+ | admin Zeige Admin-Befehle | ||
+ | help Diese Hilfe zeigen | ||
+ | list Alle vorhandenen Daten auflisten | ||
+ | name | ||
+ | url Schlüssel-holen-URL ändern | ||
+ | fetch Holen des Schlüssels mittels der URL auf der Karte | ||
+ | login Ändern der Logindaten | ||
+ | lang | ||
+ | sex Ändern des Geschlechts des Kartenbesitzers | ||
+ | cafpr Ändern des CA-Fingerabdrucks | ||
+ | forcesig | ||
+ | generate | ||
+ | passwd | ||
+ | verify | ||
+ | unblock | ||
+ | factory-reset | ||
+ | kdf-setup | ||
+ | key-attr | ||
+ | |||
+ | gpg/ | ||
+ | Familienname des Kartenbesitzers: | ||
+ | Vorname des Kartenbesitzers: | ||
+ | |||
+ | gpg/ | ||
+ | Spracheinstellungende | ||
+ | |||
+ | gpg/ | ||
+ | Geschlecht: (Männlich (M), Weiblich (F) oder Leerzeichen): | ||
+ | |||
+ | gpg/ | ||
+ | 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/ | ||
+ | |||
+ | Reader ...........: | ||
+ | Application ID ...: D276000124010200FFFE432108430000 | ||
+ | Version ..........: 2.0 | ||
+ | Manufacturer .....: unmanaged S/N range | ||
+ | Serial number ....: 43210843 | ||
+ | Name of cardholder: Michael Nausch | ||
+ | Language prefs ...: de | ||
+ | Sex ..............: | ||
+ | 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/ | ||
+ | |||
+ | |||
+ | $ 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 [< | ||
+ | ls [< | ||
+ | find [<start id> [<end id> | ||
+ | find_tags [<start tag> [<end tag> | ||
+ | cd {.. | <file id> | aid:<DF name> | ||
+ | cat [<file id> | sfi:<sfi id> | ||
+ | info [<file id> | ||
+ | create <file id> < | ||
+ | mkdir <file id> < | ||
+ | delete <file id> | ||
+ | rm <file id> | ||
+ | verify {CHV|KEY|AUT|PRO}< | ||
+ | change CHV<pin ref> [[<old pin>] <new pin> | ||
+ | unblock CHV<pin ref> [< | ||
+ | put <file id> [<input file> | ||
+ | get <file id> [<output file> | ||
+ | do_get <hex tag> [<output file> | ||
+ | do_put <hex tag> < | ||
+ | erase erase card | ||
+ | random < | ||
+ | update_record <file id> <rec no> <rec offs> < | ||
+ | update_binary <file id> < | ||
+ | apdu < | ||
+ | asn1 [<file id> | ||
+ | sm open|close | ||
+ | debug [< | ||
+ | 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, | ||
+ | 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' | ||
+ | NOTE: couldn' | ||
+ | Deleted 0 objects | ||
+ | About to store private key. | ||
+ | error: | ||
+ | Please enter passphrase to unlock secret key: | ||
+ | Importing 3 certificates: | ||
+ | 0: / | ||
+ | 1: / | ||
+ | 2: / | ||
+ | Failed to store private key: Invalid arguments | ||
+ | |||
+ | Vermutliche Ursache, private key zu groß! | ||
+ | |||
+ | */ | ||
+ | |||
+ | ... coming soon! | ||
+ | # zypper install opensc | ||