Vor etwas über einem Jahr bestellt ist er diese Woche angekommen. Der Nitrokey 3C NFC.

Nitrokey

Ich hatte ihn damals vorbestellt in der Hoffnung ihn für SSH Schlüssel verwenden zu können. Die meisten Lösungen wie die YubiKeys können das zwar auch, verwenden aber die kryptographisch zweifelhaften sogenannten NIST-Kurven die ich gerne vermeiden würde. Die dafür nötigen features waren damals erst geplant und sind es immer noch. Aber die Firmware Version 1.4.0 steht gerade in den Startlöchern und der Release Candidate kann schon installiert werden.

Die Firmware Version 1.4.0 liefert die OpenPGP Implementierung in dem Hardware Key nach.

Dies soll kein Review sein, dafür habe ich den Key nicht lange genug. Die Hülle sieht aus, als ob man sie im Zweifel leicht aufkriegt. Wie bruchsicher der USB-C Stecker auf der Platine befestigt ist weiß ich nicht. Er fühlt sich aber fest an. In jedem Fall sollte ein solcher Hardware Key niemals die einzige Möglichkeit sein, sich irgendwo einzuloggen. Es empfiehlt sich immer einen zweit Schlüssel im Schrank, oder besser noch, ein zweiter SSH Private Key passwortverschlüsselt auf einer CD im Schrank.

Dies soll einfach nur ein kleines Kompendium sein über die wichtigsten Befehle und Konfigurationen.

Installationsanleitung für das CLI Tool nitropy findet sich auf der Webseite des Herstellers.

MacOS

Sicherstellen, dass gpg installiert ist. Dazu noch pinentry-mac um den Pin per GUI eingeben zu können. Das spart einem ggf. später Überraschungen bei GUI Tools und IDEs die keine PIN Eingabe per TUI anbieten und einfach einfrieren.

brew install gpg pinentry-mac

Ein paar Konfigurationen anpassen:

In ~/.gnupg/gpg.conf muss use-agent enthalten sein.

In ~/.gnugpg/gpg-agent.conf muss pinentry-program /usr/local/bin/pinentry-mac enthalten sein. Den Pfad zu pinentry-mac dabei ggf. anpassen.

In der ~/.zshrc oder entsprechender Shell konfiguration muss folgendes enthalten sein:

unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi

Damit sollte SSH den SSH Schlüssel im Hardware Key zur Authentifizierung verwenden können. Das geht natürlich auch mit allen Programmen die SSH verwenden, wie z.B. git.

Zur Schlüsselverwaltung hat wieder Nitrokey eine gute Anleitung.

Das wichtigste:

  • Schlüsselverwaltung starten: gpg --card-edit

  • Dort den Admin Modus starten admin

  • Schlüssel erzeugen generate

  • Datei verschlüsseln: gpg -e datei

  • Datei entschlüsseln: gpg -d datei.gpg

  • Datei entschlüsseln und speichern: gpg -d datei.gpg > datei

  • Schlüssel ID herausfinden: gpg --card-edit.
    Wird angezeigt als z.B.: pub rsa2048/SCHLÜSSELID

  • Öffentlichen-Schlüssel exportieren: gpg --armor --export SCHLÜSSELID > pubkey.asc

  • Öffentlichen-Schlüssel exportieren (SSH Format): gpg --export-ssh-key SCHLÜSSELID > id_rsa.pub

Ergänzung:

Nitokey schreiben in ihrem Blog, dass derzeit die Privaten Schlüssel noch im normalen Flash Speicher abgelegt werden. Hier können sie wieder ausgelesen werden. Eigentlich sollen die Schlüssel in einem Secure-Element abgelegt werden, wo dies nicht möglich sein soll. Das wird wohl in einem kommenden Update nachgereicht.

Das macht die Schlüssel nicht unbrauchbar, aber man sollte es im Hinterkopf haben.