nitrokey:arch:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
nitrokey:arch:start [03.06.2024 21:01. ] – [Signieren] djangonitrokey:arch:start [16.12.2024 20:35. ] (aktuell) – [erster Test] django
Zeile 43: Zeile 43:
 /0/100/1f.6              generic        Wildcat Point-LP Thermal Management Controller</code> /0/100/1f.6              generic        Wildcat Point-LP Thermal Management Controller</code>
  
-Mit Hilfe des Befehls ''lsusb'' aus dem RPM-Paket **usbutils** können wir auch die **Produkt-** und **Hersteller**-Identifikationsnummer des Nitrokey-Sticks ermitteln.+Mit Hilfe des Befehls ''lsusb'' aus dem Arch-Linux-Paket **usbutils** können wir auch die **Produkt-** und **Hersteller**-Identifikationsnummer des Nitrokey-Sticks ermitteln.
    # lsusb | grep Nitrokey    # lsusb | grep Nitrokey
   Bus 002 Device 020: ID 20a0:4211 Clay Logic Nitrokey Start    Bus 002 Device 020: ID 20a0:4211 Clay Logic Nitrokey Start 
Zeile 154: Zeile 154:
  
 ===== Anwendungsfälle - Software ===== ===== Anwendungsfälle - Software =====
 +==== Nitrokey Start und GnuPG  ====
 Da es sich bei der Chipkarte des **Nitrokey Start** um eine standardkompatible OpenPGP-Karte handelt, kann der Kryptostick mit Hilfe von **[[https://www.gnupg.org/|GnuPG]]** verwaltet werden.  Da es sich bei der Chipkarte des **Nitrokey Start** um eine standardkompatible OpenPGP-Karte handelt, kann der Kryptostick mit Hilfe von **[[https://www.gnupg.org/|GnuPG]]** verwaltet werden. 
  
Zeile 307: Zeile 308:
  
 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:
-    "Django aka [BOfH] (Bastard Operator from Hell) <secmail@mailserver.guru>"+    "Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>"
  
 Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
Zeile 328: Zeile 329:
 pub   rsa2048 2020-08-04 [SC] pub   rsa2048 2020-08-04 [SC]
       E65B2BDF79A2E2E4C28F6E062E22436430385B49       E65B2BDF79A2E2E4C28F6E062E22436430385B49
-uid                      Django aka [BOfH] (Bastard Operator from Hell) <secmail@mailserver.guru>+uid                      Django aka [BOfH] (Bastard Operator from Hell) <secmail@nausch.org>
 sub   rsa2048 2020-08-04 [A] sub   rsa2048 2020-08-04 [A]
 sub   rsa2048 2020-08-04 [E]</code> sub   rsa2048 2020-08-04 [E]</code>
Zeile 341: Zeile 342:
   Reader ...........: 20A0:4211:FSIJ-1.2.19-43243711:0   Reader ...........: 20A0:4211:FSIJ-1.2.19-43243711:0
  
-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.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.+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 **[[https://archlinux.org/|Arch Linux]]** ist dies kein Problem da aktuell((August 24)) die Version 2.4.5 bereitgestellt wird. Bei Bedarf können wir die Version z.B. wie folgt abfragen.
    $ gpg2 --version | grep gpg    $ gpg2 --version | grep gpg
  
Zeile 481: Zeile 482:
  
 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:
Zeile 547: Zeile 548:
 === Öffentlichen Schlüssel ausgeben === === Ö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. 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 django@nausch.org > ~/.gnupg/secmail@mailserver.guru.pubkey+  $ gpg --export --armor django@nausch.org > ~/.gnupg/secmail@nausch.org.pubkey
  
 Diese Datei enthält unseren Schlüssel in ASCII-lesbarer Form. Diese Datei enthält unseren Schlüssel in ASCII-lesbarer Form.
-  $ cat ~/.gnupg/secmail@mailserver.guru.pubkey +  $ cat ~/.gnupg/secmail@nausch.org.pubkey 
-<file key secmail@mailserver.guru.pubkey>-----BEGIN PGP PUBLIC KEY BLOCK-----+<file key secmail@nausch.org.pubkey>-----BEGIN PGP PUBLIC KEY BLOCK-----
  
 mDMEZZXO7BYJKwYBBAHaRw8BAQdA++J6Astvcm2DsHDnzXGHKujQiokCxG+F3qPy mDMEZZXO7BYJKwYBBAHaRw8BAQdA++J6Astvcm2DsHDnzXGHKujQiokCxG+F3qPy
Zeile 789: Zeile 790:
 PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/" PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
 LOGO=archlinux-logo"</code> LOGO=archlinux-logo"</code>
-  - Nun verschlüsseln wir dieses Textdokument: <code> $ gpg2 -o testdatei.txt.pgp -a -r secmail@mailserver.guru -e testdatei.txt</code>  Wir haben also nun zwei Dokumente auf der Platte liegen. <code> $ ll testdatei.txt*</code><code>-rw-r--r-- 1 django django 382 Jun  3 22:35 testdatei.txt+  - Nun verschlüsseln wir dieses Textdokument: <code> $ gpg2 -o testdatei.txt.pgp -a -r django@nausch.org -e testdatei.txt</code>  Wir haben also nun zwei Dokumente auf der Platte liegen. <code> $ ll testdatei.txt*</code><code>-rw-r--r-- 1 django django 382 Jun  3 22:35 testdatei.txt
 -rw-r--r-- 1 django django 581 Jun  3 22:35 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----- -rw-r--r-- 1 django django 581 Jun  3 22:35 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-----
  
Zeile 803: Zeile 804:
 -----END PGP MESSAGE-----</code> -----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 cv25519 key, ID B5E54345BDA292A0, created 2024-01-03   - Nun entschlüsseln wir unser Dokument wieder.<code> $ gpg2 --decrypt testdatei.txt.pgp > testdatei-entschlüsselt.txt</code><code>gpg: encrypted with cv25519 key, ID B5E54345BDA292A0, created 2024-01-03
-      "Django (Bastard Operator from Hell [BOfH]) <django@nausch.org>" +      "Django (Bastard Operator from Hell [BOfH]) <django@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="Arch Linux"
-gpg: all values passed to '--default-key' ignored +
-</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="Arch Linux"+
 PRETTY_NAME="Arch Linux" PRETTY_NAME="Arch Linux"
 ID=arch ID=arch
Zeile 821: Zeile 820:
  
   - 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>Mon Jun  3 10:49:04 PM CEST 2024</code>   - 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>Mon Jun  3 10:49:04 PM CEST 2024</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 django 33 Jun  3 22:58 textdatei.txt +  - Nun signieren wir dieses Textdokument: <code> $ gpg --sign textdatei.txt</code> {{ :nitrokey:arch:thunderbird_008.png?nolink&300 |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 django  33 Jun  3 23:19 textdatei.txt 
--rw-r--r-- 1 django users  29  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: BF1EA3F703203D8AThere is no assurance this key belongs to the named user +-rw-r--r-- 1 django django 182 Jun  3 23:19 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 --encrypt --sign -r django@nausch.org textdatei.txt</code> {{ :nitrokey:arch:thunderbird_008.png?nolink&300 |Bild: Bildschirmhardcopy der gpg-keyentry Abfrage}} Wir haben nunmehr eine neue verschlüsselte und signierte Datei.<code> $ file textdatei.txt.gpg</code> 
-sub  cv25519/BF1EA3F703203D8A 2018-11-27 Django aka [BOfH] (Bastard Operator from Hell) <secmail@mailserver.guru> +  - 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{{ :nitrokey:arch:thunderbird_008.png?nolink&300 |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-----
- Primary key fingerprint3E61 A503 47B5 2382 4132  EC06 9308 FC78 3868 63AC +
-      Subkey fingerprintFB2B D8AD 4660 EADE 0108  852D BF1E A3F7 0320 3D8A+
  
-It is NOT certain that the key belongs to the person named +owGbwMvMwCGWyHdz3dNgU3vGNSZJvCWpFSUpiSWpmXolFSVp8QnSIaWpCl6leQoK 
-in the user ID.  If you *really* know what you are doing, +JgoGFlbG5laG5goBvgrOrsEhCkYGRiZcHaUsDGIcDLJiiiw6HCquZ38X3TubyhwA 
-you may answer the next question with yes. +M5WVCWQKAxenAEzEYwXDPw0/ninLX283e//2sv+yjg/r9/lOPLKmI9zccMYltuJT 
- +FxUZ/pfN2Ddbnan3h5nysoDTVdK2k//GOnTeubN30pcUhwOynxkA 
-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----- +=UkKj 
- +-----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> {{ :nitrokey:arch:thunderbird_008.png?nolink&300 |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-----
-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 Hash: SHA256
  
-Di 4. Aug 20:57:23 CEST 2020+Tue Jun  08:37:17 PM CEST 2024
 -----BEGIN PGP SIGNATURE----- -----BEGIN PGP SIGNATURE-----
  
-iHUEARYIAB0WIQQ+YaUDR7UjgkEy7AaTCPx4OGhjrAUCXymw/AAKCRCTCPx4OGhj +iHUEARYIAB0WIQQsCCRFzfty3s1lA1BhDtmu5VM1PwUCZl9gfwAKCRBhDtmu5VM1 
-rBwEAP0dZtolkQCmLYuccDEjTWVK/Pa8we40nHyJ+SZgmxVlcQD/YT/H/X25TADr +P3TcAQDTPio3kyse3A6orXygqr5hP9etL25Lpq6ySzTjIDRcKgEA3qT4h/I6zm+
-eR1Z/bLn3y61laBbGLhOaElPSNtJfQ0+a1EoA/Azg/l0zEMxZlj2yzK7Omxczw4
-=76rm +=34mx 
------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 +-----END PGP SIGNATURE-----</code> Mit der Option **''%%-–%%verify''** können wir die Signatur der Datei überprüfen:<code> $ gpg --verify textdatei.txt.asc</code><code>gpg: Signature made Tue 04 Jun 2024 08:44:15 PM CEST 
-gpg:                using EDDSA key 3E61A50347B523824132EC069308FC78386863AC +gpg:                using EDDSA key 2C082445CDFB72DECD650350610ED9AEE553353F 
-gpg: Good signature from "Django aka [BOfH] (Bastard Operator from Hell) <secmail@mailserver.guru>" [unknown] +gpg: Good signature from "Django (Bastard Operator from Hell [BOfH]) <django@nausch.org>" [ultimate
-gpg: WARNING: This key is not certified with a trusted signature! +gpg: WARNING: not a detached signature; file 'textdatei.txt' was NOT verified!</code> 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-----
-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 Hash: SHA256
  
-Di 4. Aug 20:57:23 CEST 2099+Tue Jun  08:37:17 PM CEST 2099
 -----BEGIN PGP SIGNATURE----- -----BEGIN PGP SIGNATURE-----
  
-iHUEARYIAB0WIQQ+YaUDR7UjgkEy7AaTCPx4OGhjrAUCXymw/AAKCRCTCPx4OGhj +iHUEARYIAB0WIQQsCCRFzfty3s1lA1BhDtmu5VM1PwUCZl9gfwAKCRBhDtmu5VM1 
-rBwEAP0dZtolkQCmLYuccDEjTWVK/Pa8we40nHyJ+SZgmxVlcQD/YT/H/X25TADr +P3TcAQDTPio3kyse3A6orXygqr5hP9etL25Lpq6ySzTjIDRcKgEA3qT4h/I6zm+
-eR1Z/bLn3y61laBbGLhOaElPSNtJfQ0+a1EoA/Azg/l0zEMxZlj2yzK7Omxczw4
-=76rm +=34mx 
------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 +-----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 Tue 04 Jun 2024 08:44:15 PM CEST 
-gpg:                using EDDSA key 3E61A50347B523824132EC069308FC78386863AC +gpg:                using EDDSA key 2C082445CDFB72DECD650350610ED9AEE553353F 
-gpg: BAD signature from "Django aka [BOfH] (Bastard Operator from Hell) <secmail@mailserver.guru>" [unknown]</code>+gpg: BAD signature from "Django (Bastard Operator from Hell [BOfH]) <django@nausch.org>" [ultimate]</code>
  
 ==== Nitrokey Start und Thunderbird ====  ==== Nitrokey Start und Thunderbird ==== 
Zeile 912: Zeile 900:
 {{ :nitrokey:arch:thunderbird_007.png?nolink&874 |Bild: Menüfenster der Thunderbird individuellen Einstellungen}} {{ :nitrokey:arch:thunderbird_007.png?nolink&874 |Bild: Menüfenster der Thunderbird individuellen Einstellungen}}
  
 +==== 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 verantwortungsbewusste Administrator 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. Detaillierte Informationen zur **[[https://martin.kleppmann.com/papers/curve25519.pdf|Implementierung von Curve25519/X25519: Ein Tutorial zur elliptischen Kurvenkryptografie]]** finden sich in dem verlinktem Dokument von [[https://martin.kleppmann.com/|Martin Kleppmann]]. 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ässere Cipher, MACs, Schlüssel Typen und Key Exchange Algorithmen zur Verfügung. Als Alternative zu einem RSA-Keys haben wir uns bereits im Abschnitt **[[start#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.
 +
 +In der Konfigurationsdatei //**~/.gnupg/gpg.conf**// setzen wir als erstes die Option ''**use-agent**''.
 +   $ vim ~/.gnupg/gpg.conf
 +<file bash ~/.gnupg/gpg.conf># File re-created by pEp
 +# See backup in '/home/django/.gnupg/gpg.conf.1.pep.bkp'
 + 
 +# File re-created by pEp
 +# See backup in '/home/django/.gnupg/gpg.conf.0.pep.bkp'
 + 
 +# Created by pEpEngine
 +keyserver hkp://keys.gnupg.net
 +cert-digest-algo SHA256
 +no-emit-version 
 +no-comments 
 +personal-cipher-preferences AES AES256 AES192 CAST5
 +personal-digest-preferences SHA256 SHA512 SHA384 SHA224
 +ignore-time-conflict 
 +allow-freeform-uid
 + 
 +# Ansible generated, do not edit manual!
 +# Option use-agent für Authentication Key Nutzung des Nitrokey Start bei SSH
 +use-agent
 +</file>
 +
 +
 +Im nächsten Schritt aktivieren wir 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
 + 
 +# Ansible generated, do not edit manual!
 +# SSH-Support activated for gnupg-agent
 +enable-ssh-support
 +</file>
 +
 +Nun werden 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 : 2024-05-25
 +#          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. Wir entscheiden uns der Einfachheit halber von einen Neustart des Agenten mit Hilfe des Befehls ''**pkill gpg-agent**''.
 +   $ pkill gpg-agent
 +
 +Ein Blick in die Prozessliste zeigt, dass der Agent nicht mehr läuft.
 +   $ ps aux | grep gpg-agent
 +
 +  django    8752  0.0  0.0 215740   820 pts/1    S+   21:56   0:00 grep --color=auto gpg-agent
 +
 +Nun stecken wir unseren Nitrokey Start an den USB-Port und fragen den Kartenstatus ab.
 +   $ gpg2 --card-status
 +<code>Reader ...........: 20A0:4211:FSIJ-1.2.19-43243711:0
 +Application ID ...: D276000124010200FFFE432437110000
 +Application type .: OpenPGP
 +Version ..........: 2.0
 +Manufacturer .....: unmanaged S/N range
 +Serial number ....: 43243711
 +Name of cardholder: Michael Nausch
 +Language prefs ...: de
 +Salutation .......: Mr.
 +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 2
 +Signature counter : 23
 +KDF setting ......: off
 +UIF setting ......: Sign=off Decrypt=off Auth=off
 +Signature key ....: 2C08 2445 CDFB 72DE CD65  0350 610E D9AE E553 353F
 +      created ....: 2024-01-03 21:17:32
 +Encryption key....: 9533 C548 589F F00B 8FFF  C93B B5E5 4345 BDA2 92A0
 +      created ....: 2024-01-03 21:17:32
 +Authentication key: D5AF 3627 1220 7A2A 54BD  6C47 C72E 74B8 1A5C 4549
 +      created ....: 2024-01-03 21:17:32
 +General key info..: pub  ed25519/610ED9AEE553353F 2024-01-03 Django (Bastard Operator from Hell [BOfH]) <django@nausch.org>
 +sec>  ed25519/610ED9AEE553353F  created: 2024-01-03  expires: never     
 +                                card-no: FFFE 43243711
 +ssb>  ed25519/C72E74B81A5C4549  created: 2024-01-03  expires: never     
 +                                card-no: FFFE 43243711
 +ssb>  cv25519/B5E54345BDA292A0  created: 2024-01-03  expires: never     
 +                                card-no: FFFE 43243711
 +</code>
 +
 +Ein erneuter Blick in die Prozessliste zeigt nun den neu gestarteten Agenten.
 +   $ ps aux | grep gpg-agent
 +
 +  django    8766  0.0  0.0 364724   804 ?        Ss   21:57   0:00 gpg-agent --homedir /home/django/.gnupg --use-standard-socket --daemon
 +  django    8853  0.0  0.0 215740   828 pts/1    S+   22:00   0:00 grep --color=auto gpg-agent
 +
 +=== 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 Authentication Keys, genauer gesagt die 4 letzten Zahlenreihen des nachfolgenden Aufrufs.
 +   $ gpg2 --card-status | grep Authentication\ key
 +
 +  Authentication key: D5AF 3627 1220 7A2A 54BD  6C47 C72E 74B8 1A5C 4549
 +In diesem Konfigurationsbeispiel ist die Schlüssel-ID des Autentication Keys also die Nummer ''**C72E74B81A5C4549**''.
 +
 +Nun exportieren wir den öffentlichen Schlüssel und schreiben diesen in eine separate Datei.
 +   $ gpg2 --export-ssh-key C72E74B81A5C4549 >> ~/.ssh/C72E74B81A5C4549.pub
 +
 +Der Öffentliche Schlüssel in diesen Konfigurationsbeispiel lautet also:
 +   $ cat ~/.ssh/C72E74B81A5C4549.pub
 +
 +  ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHMD4OSvbbTRAs88C5jQeUX7HOR0TYd+EIQLcKmGCBll openpgp:0x1A5C4549
 +
 +Diesen Schlüssel kopieren wir nun auf das entsprechende Zielsystem an Ort und Stelle ''**~/.ssh/authorized_keys**''.
 +   $ scp ~/.ssh/C72E74B81A5C4549.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, sofern der GPG-Agent am laufen ist. Wir können dazu entweder erst einmal abfragen, ob dieser gestartet wurde, mit Hilfe des folgenden Aufrufs:
 +   $ ps -aux | grep gpg-agent
 +
 +  django      1430  0.0  0.0 376092  3636 ?        SLsl 20:32   0:00 /usr/bin/gpg-agent --supervised
 +
 +Oder wir fragen einfach den Karten-Status ab, was unweigerlich den Neustart des GPG-Agenten nach sich zieht.
 +   $ gpg2 --card-status
 +
 +Nun können wir die gewünschte Verbindung zum Zielsystem 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.
 +
 +{{ :nitrokey:arch:ssh_001.png?nolink&280 |Bild: PIN Abfrage beim Zugriff auf den Authentication Key der SmartCard des Nitrokeys}}
 +
 +Der entsperrte Schlüssel der SmartCard des Nitrokey Start wird nun im Speicher gehalten solange wir den USB-Hardwareschlüssel nicht abziehen. 
 +
 +<WRAP center round important 90%>
 +**WICHTIG:** \\
 +Da wir den Schlüssel **__nicht__** aus einer Datei geladen hatten, können wir diese auch nicht mit Hilfe von ''**ssh-add**'' wieder entladen! Wollen wir verhindern, dass auf den im Speicher vorgehaltenen Schlüssel zugegriffen wird, müssen wir manuell den GPG-Agenten beenden.
 +   $ pkill gpg-agent
 +
 +</WRAP>
  
 +Anschliessend lassen sich Verbindungen zu unseren Remote-Systemen erst wieder aufbauen, wenn der GPG-Agent geladen und die Karte nach Eingabe der PIN entsperrt wurde!
  
  • nitrokey/arch/start.1717448478.txt.gz
  • Zuletzt geändert: 03.06.2024 21:01.
  • von django