Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
nitrokey:linuxmint:3cnfc [14.05.2023 17:42. ] – [Anmelden mit zwei Faktor-Authentifizierung] django | nitrokey:linuxmint:3cnfc [22.07.2023 11:25. ] – [Nitrokey App 2] django | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Nitrokey 3C NFC in der Praxis unter Linux Mint 21.1 (Vera) ====== | + | ====== Nitrokey 3C NFC und Nitrokey 3A mini in der Praxis unter Linux Mint 21.1 (Vera) ====== |
- | {{: | + | {{: |
- | //**Der neue Nitrokey 3 mit NFC, USB-C, Rust, Common Criteria EAL 6+** | + | //**Der neue Nitrokey 3 wahlweise mit mit NFC, USB-C oder USB-A Mini sowie Rust, Common Criteria EAL 6+** |
\\ | \\ | ||
Der neue Nitrokey 3 ist der beste Nitrokey den wir je entwickelt haben. Er bietet erstmals NFC, USB-C. Der Nitrokey 3 vereint die Funktionen vorheriger Nitrokey Modelle: FIDO2, Einmalpasswörter, | Der neue Nitrokey 3 ist der beste Nitrokey den wir je entwickelt haben. Er bietet erstmals NFC, USB-C. Der Nitrokey 3 vereint die Funktionen vorheriger Nitrokey Modelle: FIDO2, Einmalpasswörter, | ||
Zeile 29: | Zeile 29: | ||
I: If#= 3 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm | I: If#= 3 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm | ||
E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms | E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms | ||
+ | E: Ad=84(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms | ||
+ | </ | ||
+ | |||
+ | Beziehungsweise hier exeplarisch die Ausgabe beim **Nitrokey 3A mini**: | ||
+ | < | ||
+ | D: Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 # | ||
+ | P: Vendor=20a0 ProdID=42b2 Rev=01.05 | ||
+ | S: Manufacturer=Nitrokey | ||
+ | S: Product=Nitrokey 3 | ||
+ | C: #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=100mA | ||
+ | I: If#= 0 Alt= 0 #EPs= 2 Cls=0b(scard) Sub=00 Prot=00 Driver=usbfs | ||
+ | E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms | ||
+ | E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms | ||
+ | I: If#= 1 Alt= 0 #EPs= 2 Cls=03(HID | ||
+ | E: Ad=02(O) Atr=03(Int.) MxPS= 64 Ivl=5ms | ||
+ | E: Ad=82(I) Atr=03(Int.) MxPS= 64 Ivl=5ms | ||
+ | I: If#= 2 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=00 Driver=cdc_acm | ||
+ | E: Ad=83(I) Atr=03(Int.) MxPS= 8 Ivl=255ms | ||
+ | I: If#= 3 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm | ||
+ | E: Ad=03(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms | ||
E: Ad=84(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms | E: Ad=84(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms | ||
</ | </ | ||
Zeile 42: | Zeile 62: | ||
# lsusb | # lsusb | ||
- | Bus 001 Device | + | Bus 001 Device |
Im Syslog wird uns beim Anstecken des Sticks dies entsprechend protokolliert: | Im Syslog wird uns beim Anstecken des Sticks dies entsprechend protokolliert: | ||
- | < | + | < |
- | Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.203649] usb 1-1.2: new full-speed USB device number | + | Jul 22 11:43:25 djangos-thinkpad-x230 kernel: [26709.574335] usb 1-1.2: New USB device found, idVendor=20a0, |
- | Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.314951] usb 1-1.2: New USB device found, idVendor=20a0, | + | Jul 22 11:43:25 djangos-thinkpad-x230 kernel: [26709.574348] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 |
- | Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.314956] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 | + | Jul 22 11:43:25 djangos-thinkpad-x230 kernel: [26709.574353] usb 1-1.2: Product: Nitrokey 3 |
- | Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.314958] usb 1-1.2: Product: Nitrokey 3 | + | Jul 22 11:43:25 djangos-thinkpad-x230 kernel: [26709.574356] usb 1-1.2: Manufacturer: |
- | Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.314961] usb 1-1.2: Manufacturer: | + | Jul 22 11:43:25 djangos-thinkpad-x230 kernel: [26709.577711] hid-generic 0003: |
- | Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.316882] hid-generic 0003: | + | Jul 22 11:43:25 djangos-thinkpad-x230 kernel: [26709.578121] cdc_acm 1-1.2:1.2: ttyACM3: USB ACM device |
- | Nov 3 17:34:33 djangos-thinkpad-x230 kernel: [113260.317184] cdc_acm 1-1.2:1.2: ttyACM3: USB ACM device | + | Jul 22 11:43:25 djangos-thinkpad-x230 mtp-probe: checking bus 1, device |
- | Nov 3 17:34:33 djangos-thinkpad-x230 mtp-probe: checking bus 1, device | + | Jul 22 11:43:25 djangos-thinkpad-x230 mtp-probe: bus: 1, device: |
- | Nov 3 17:34:33 djangos-thinkpad-x230 mtp-probe: bus: 1, device: | + | Jul 22 11:43:25 djangos-thinkpad-x230 snapd[999]: hotplug.go:200: hotplug device add event ignored, enable experimental.hotplug |
- | Nov 3 17:34:33 djangos-thinkpad-x230 snapd[1106]: hotplug.go:199: hotplug device add event ignored, enable experimental.hotplug | + | Jul 22 11:43:25 djangos-thinkpad-x230 mtp-probe: checking bus 1, device |
- | Nov 3 17:34:33 djangos-thinkpad-x230 mtp-probe: checking bus 1, device | + | Jul 22 11:43:25 djangos-thinkpad-x230 mtp-probe: bus: 1, device: |
- | Nov 3 17:34:33 djangos-thinkpad-x230 mtp-probe: bus: 1, device: | + | |
===== Paketabhängigkeiten ===== | ===== Paketabhängigkeiten ===== | ||
Zeile 151: | Zeile 170: | ||
$ nitropy nk3 wink | $ nitropy nk3 wink | ||
< | < | ||
+ | |||
+ | ===== Nitrokey App 2 ===== | ||
+ | Den Update der Firmware auf den jeweiligen Nitrokey nehmen wir am Besten mit Hilfe der **[[https:// | ||
+ | |||
+ | Dieses Hilfsprogramm holen wir uns nun in der aktuellen Version von der GitHub-Seite mit Hilfe von **'' | ||
+ | $ wget https:// | ||
+ | |||
+ | Anschliessend entpacken wir das heruntergeladene **'' | ||
+ | $ tar -zvxf nitrokey-app-v2.1.2-x64-linux-binary.tar.gz -C ~/bin/ | ||
+ | |||
+ | Zu guter Letzt geben wir dem Programm noch die x-Rechte, damit wir es direkt ausführen können. | ||
+ | $ chmod +x ~/ | ||
+ | |||
+ | <WRAP center round important 90%> | ||
+ | Unter **Ubuntu 22.04 LTS** und auch unter **Linux Mint 21.1 (Vera)** scheitert aktuell((Stand: | ||
+ | < | ||
+ | File " | ||
+ | ImportError: | ||
+ | [41746] Failed to execute script ' | ||
+ | |||
+ | Daher legen wir uns kurzer Hand einfach ein kleines Start-Script an: | ||
+ | $ vim bin/ | ||
+ | <file bash bin/ | ||
+ | export LD_PRELOAD=/ | ||
+ | ~/ | ||
+ | |||
+ | Auch dieses Script verpassen wir nun noch die **x**-Rechte zum einfachen ausführen. | ||
+ | $ chmod +x bin/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Zum Starten der **Nitrokey-App v2** rufen wir nun einfach das angelegte Script auf. | ||
+ | $ nitrokey-app-v2 | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Über die Auswahl der angezeigten **UUID** auf der linken Seite des angesteckten Nitrokey 3 kann mann dann menügeführt einen Update der Firmware vornehmen. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Der erfolgreiche Update der Firmware wird entsprechend angezeigt. | ||
+ | |||
+ | {{ : | ||
===== Anwendungsfälle - Software ===== | ===== Anwendungsfälle - Software ===== | ||
==== GnuPG ==== | ==== GnuPG ==== | ||
- | Da es sich bei der Chipkarte | + | Da es sich bei der Chipkarte |
$ sudo apt install gpg | $ sudo apt install gpg | ||
Zeile 287: | Zeile 349: | ||
<WRAP center round tip 80%> | <WRAP center round tip 80%> | ||
- | Laut der [[https:// | + | Laut der [[https:// |
* RSA-2048 | * RSA-2048 | ||
* RSA-3072 (**__nur__** Schlüssel-Import, | * RSA-3072 (**__nur__** Schlüssel-Import, | ||
Zeile 435: | Zeile 497: | ||
<WRAP center round tip 95%> | <WRAP center round tip 95%> | ||
- | Die Erzeugung eines Schlüssels mit einer Länge von **2048** dauert ca. 5 Minuten, also keinesfalls den Nitrokey | + | Die Erzeugung eines Schlüssels mit einer Länge von **2048** dauert ca. 5 Minuten, also keinesfalls den Nitrokey |
</ | </ | ||
Zeile 451: | Zeile 513: | ||
=== ED25519-Schlüssel generieren === | === ED25519-Schlüssel generieren === | ||
- | In dem Artikel **[[https:// | + | In dem Artikel **[[https:// |
- | Damit auf einem **Nitrokey | + | Damit auf einem **Nitrokey |
$ gpg2 --card-status | grep Reader | $ gpg2 --card-status | grep Reader | ||
Zeile 463: | Zeile 525: | ||
gpg (GnuPG) 2.2.27 | gpg (GnuPG) 2.2.27 | ||
- | Nun werden wir uns Schlüsselpaar auf Basis elliptischer Kurven auf dem Nitrokey | + | Nun werden wir uns Schlüsselpaar auf Basis elliptischer Kurven auf dem Nitrokey |
Welcher Typ eingestellt ist können wir mit den Befehl '' | Welcher Typ eingestellt ist können wir mit den Befehl '' | ||
$ gpg2 --card-status | grep Key\ attributes | $ gpg2 --card-status | grep Key\ attributes | ||
Zeile 772: | Zeile 834: | ||
- Wir legen uns also erst einmal ein beliebiges Testdokument an. < | - Wir legen uns also erst einmal ein beliebiges Testdokument an. < | ||
- | - Nun signieren wir dieses Textdokument: | + | - Nun signieren wir dieses Textdokument: |
gpg: signatures created so far: 5 | gpg: signatures created so far: 5 | ||
Zeile 789: | Zeile 851: | ||
| | ||
�< | �< | ||
- | 9�.��j2�$�K+�; | + | 9�.��j2�$�K+�; |
gpg: signatures created so far: 8 | gpg: signatures created so far: 8 | ||
Please enter the PIN | Please enter the PIN | ||
- | [sigs done: 8]</ | + | [sigs done: 8]</ |
gpg: signatures created so far: 9 | gpg: signatures created so far: 9 | ||
Zeile 906: | Zeile 968: | ||
{{ : | {{ : | ||
+ | |||
+ | ==== Nitrokey 3C NFC und Nitrokey 3A mini 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 : 2023-07-21 | ||
+ | # 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 : 2023-07-27 | ||
+ | # 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: 52A9 FF83 7DAF 9A77 7914 C5B1 B2DC 29E1 28F5 834D | ||
+ | |||
+ | 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. | ||
+ | $ keyid=$(gpg2 --card-status | grep Authentication\ key | sed 's/ //g' | sed ' | ||
+ | gpg2 --export-ssh-key $keyid >> ~/ | ||
+ | Der Öffentliche Schlüssel in diesen Konfigurationsbeispiel lautet also: | ||
+ | $ cat .ssh/ | ||
+ | |||
+ | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJA+NwP2KxzqkrhKxi6JDRDUyE/ | ||
+ | |||
+ | Diesen Schlüssel kopieren wir nun auf das entsprechende Zielsystem an Ort und Stelle '' | ||
+ | $ scp ~/ | ||
+ | ssh zielhost.dmz.nausch.org 'cat authorized_keys >> ~/ | ||
+ | |||
+ | <WRAP round info>Das Kopieren des Public-Keys auf unseren Zielhost mit Anpassen der Dateiberechtigungen kann man natürlich auch einfacher vornehmen. Man benutzt hierzu einfach den Befehl **ssh-copy-id** aus dem Paket // | ||
+ | * ed25519-Key < | ||
+ | |||
+ | Mit der Angabe von '' | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | === 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! | ||