Präambel
Diese Anleitung wurde von der offiziellen NitroKey Dokumentation kopiert und übersetzt.
Prerequisites
Um von diesem Feature Gebrauch zu machen muss gpg
installiert sein, welches mittels GnuPG installiert werden kann:
- Unter Windows kann dies auch mittels
winget
geschehen:winget install -e --id GnuPG.GnuPG
- Unter macOS kann GnuPG auch durch Homebrew installiert werden:
brew install gnupg
- Unter Linux ist GnuPG in den meisten gängigen Paketmanagern vertreten und kann so installiert werden.
Generating a keypair
Um ein neues GPG Schlüsselpaar auf einem Sicherheitsschlüssel zu generieren muss dieser eingesteckt sein. Dann muss ein Terminalfenster geöffnet werden und folgendes Kommando eingegeben werden:
Das Programm sollte nun alle relevanten Informationen über den Sicherheitsschlüssel ausgeben, zum Beispiel:
$ gpg --card-edit
Reader ...........: 20A0:42B2:X:0
Application ID ...: D276000124010304000F43A8ED3F0000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Nitrokey
Serial number ....: 43A8ED3F
Name of cardholder: [not set]
Language prefs ...: [not set]
Salutation .......:
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 19
KDF setting ......: off
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: REDA CTED REDA CTED REDA CTED REDA CTED REDA CTED
created ....: 2024-10-22 08:59:50
Encryption key....: REDA CTED REDA CTED REDA CTED REDA CTED REDA CTED
created ....: 2024-10-22 08:59:50
Authentication key: REDA CTED REDA CTED REDA CTED REDA CTED REDA CTED
created ....: 2024-10-22 08:59:50
General key info..:
pub rsa2048/9AA75CA228063515 2024-10-22 Bastian REDACTED (NitroKey) <[email protected]>
sec> rsa2048/REDACTEDREDACTED created: 2024-10-22 expires: never
card-no: 000F 43A8ED3F
ssb> rsa2048/REDACTEDREDACTED created: 2024-10-22 expires: never
card-no: 000F 43A8ED3F
ssb> rsa2048/REDACTEDREDACTED created: 2024-10-22 expires: never
card-no: 000F 43A8ED3F
gpg/card>
Weiter wird der Benutzer in die GnuPG Kommandozeile geschickt, welche sich von der normalen Kommandozeile unterscheidet.
Innerhalb dieser Kommandozeile müssen folgende Schritte durchgeführt werden:
-
Durch das Ausführen des Kommandos
admin
wird man berechtigt, administrative Kommandos auszuführen. -
Durch das Ausführen des Kommandos
generate
wird eine Anleitung zum Generieren eines GPG Schlüssels gestartet. -
Durch das
quit
Kommando kann die GnuPG Kommandozeile verlassen werden.
Den GPG Schlüssel zum Signieren von Commits verwenden
Um den gerade generierten Schlüssel zum Signieren von Commits zu verwenden werden zwei Attribute benötigt:
- Die ID des gerade generierten Schlüssels. Diese ist relevant da man über sie den öffentlichen GPG Schlüssel ermittelt, aber auch da
git
den zu verwendenden Schlüssel über die ID ermittelt. - Den öffentlichen GPG-Schlüssel. Dieser muss auf GitHub/GitLab hinterlegt werden, um die damit signierten Commits als “verifiziert” anzeigen zu lassen.
Die Schlüssel-ID ermitteln
Um die Schlüssel-ID zu ermitteln muss folgendes Kommando eingegeben werden:
gpg --list-secret-keys --keyid-format LONG
Die Ausgabe dieses Kommandos wird in etwa so aussehen:
sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
uid [ultimate] Mr. Robot <your_email>
ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
Die Schlüssel-ID ist in der sec
-Zeile direkt nach dem rsaXXXX/
; in diesem Fall lautet diese also 30F2B65B9246B6CA
.
Um git
nun dazu anzuweisen, diesen Schlüssel zu verwenden, muss die Konfiguration mittels folgenden Kommandos geändert werden (<ID>
muss dabei durch die gerade ermittelte Schlüssel-ID ersetzt werden):
Den öffentlichen GPG-Schlüssel ermitteln
Um den öffentlichen GPG-Schlüssel mithilfe der Schlüssel-ID zu ermitteln, muss folgendes Kommando ausgeführt werden (<ID>
muss dabei durch die gerade ermittelte Schlüssel-ID ersetzt werden):
Die Ausgabe dieses Kommandos wird ungefähr wie folgt aussehen:
Die Ausgabe hier ist der öffentliche GPG-Schlüssel, welcher in den Einstellungen von GitHub/GitLab hinterlegt werden muss.