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:
gpg --card-edit
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.gpg/card> admin Admin commands are allowed
-
Durch das Ausführen des Kommandos
generate
wird eine Anleitung zum Generieren eines GPG Schlüssels gestartet.gpg/card> generate
-
Durch das
quit
Kommando kann die GnuPG Kommandozeile verlassen werden.gpg/card> quit
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):
git config --global user.signingkey <ID>
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):
gpg --armor --export <ID>
Die Ausgabe dieses Kommandos wird ungefähr wie folgt aussehen:
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBGcXaYYBCADJb80ojN9jwEqW2p0aNEQb83rCm/a+vwZDrnrcl9NEyaQWp4eW
AtKjSMgU/R4s5g7EbbS1wYQo1JOdZrX5vKz07O5C/2c6isT10jqCh0gibdZYxx/E
...
-----END PGP PUBLIC KEY BLOCK-----
Die Ausgabe hier ist der öffentliche GPG-Schlüssel, welcher in den Einstellungen von GitHub/GitLab hinterlegt werden muss.