Zum Inhalt

Git Commit mit GPG-Schlüssel signieren

Foto von Brina Blum auf Unsplash

Git Commits lassen sich mit einem GPG-Schlüssel signieren und so die Integrität sicherstellen.

Die Integrität, also der Schutz der Information vor Modifikation, Einfügen, Löschung, Umordnung, etc. wird sichergestellt. Wird die Information nicht vom Inhaber des GPG-Schlüssels bearbeitet, ändert sich die Signatur. Damit lässt sich für jeden einfach nachvollziehen, ob man dem Code vertrauen kann oder nicht.

Das ist eine elegante Möglichkeit für den Entwickler seiner Community "nachzuweisen", dass die Änderungen am Code auch wirklich von ihm stammen und erhöht das Vertrauen.

Voraussetzung ist natürlich, dass die Schlüssel die zum Signieren verwendet werden vom Entwickler auch sorgfältig verwaltet werden, damit unberechtigte Dritte darauf keinen Zugriff erhalten.

Eine Möglichkeit dafür ist die Verwendung von Smart Cards oder Hardwaretokens, wie einem YubiKey oder Nitrokey.

In den Einstellungen unter SSH- / GPG-Schlüssel findet sich die Funktion GPG-Schlüssel verwalten mit der Beschreibung:

GPG-Schlüssel verwalten

Diese öffentlichen GPG-Keys sind mit deinem Account verbunden. Halte die dazugehörigen privaten GPG-Keys geheim, da diese deine Commits signieren. 

Nach der Installation funktioniert alles wie gewohnt und die Meldung taucht nicht mehr auf.

GPG-Schlüssel verwalten - PGP Public Key Block

Dahinter verbirgt sich die Möglichkeit seinen eigenen GPG-Schlüssel bei Codeberg zu hinterlegen und die Echtheit jedes Git Commits zu garantieren.

Damit das Ganze genutzt werden kann, ist ein eigener GPG-Schlüssel zu erstellen. Die Anleitung dafür findet sich 👉 hier im Blog

Sind die privaten und öffentlichen Schlüssel erstellt, lassen sich diese entweder im Key Ring (= Schlüsselbund) oder auf einer Smart Card verwalten.

Ich habe die Schlüssel auf einen YubiKey übertragen und mit einer PIN und einem PUK vor unberechtigte Zugriff geschützt.

Wie ein Übertrag der Schlüssel auf einen Hardwaretoken, wie einem YubiKey oder einem Nitrokey, funktioniert, ist im Beitrag 👉 YubiKey - OpenPGP-Schlüssel auf den YubiKey exportieren beschrieben.

Ist der Hardwaretoken fertig, kann das Einrichten bei Codeberg beginnen.

Im ersten Schritt ist der öffentliche GPG-Schlüssel im eigenen Profil hinzuzufügen. Dafür einfach den kompletten Block

-----BEGIN PGP PUBLIC KEY BLOCK-----

...

-----END PGP PUBLIC KEY BLOCK-----

des eigenen öffentlichen Schlüssels über die Zwischenablage in das Feld kopieren.

Achtung

Der öffentliche GPG-Schlüssel lässt sich NICHT direkt von einem Hardwaretoken (= Smart Card) exportieren. Dafür wird der Masterschlüssel benötigt, der nach meiner 👉 Anleitung NICHT auf den YubiKey übertragen wird.

Der Export funktioniert nur aus dem Schlüsselring, am Einfachsten also über das Betriebssystem über das die Schlüssel erstellt worden sind.

Ist der eigene öffentliche Schlüssel bei Codeberg eingefügt, muss er noch verifiziert werden.

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Das funktioniert relativ einfach. Dazu wird der Hardwaretoken am eigenen Client (Laptop, PC) angesteckt und der Befehl auf der CLI eingegeben, der von Codeberg angezeigt wird.

echo "1112223334445556667778888" | gpg -a --default-key AABBCCDD --detach-sig

Den gesamten angezeigten Block wieder über die Zwischenablage in das Feld einfügen. Bei Erfolg wird die Signatur erkannt und der Schlüssel wird für das Signieren von zukünftigen Git Commits freigeschaltet.

GPG-Schlüssel verwalten - Verifizierter Schlüssel

Git Commit signieren

Damit die Commits ab sofort auch mit dem richtigen GPG-Schlüssel übertragen werden, muss der in jedem Repository hinterlegt werden damit es bei jedem Commit mitgegeben werden.

Ich verwende den Git-Client ForK (👉 Fork Tags) dafür.

GPG-Schlüssel für Commits verwenden

GPG-Schlüssel für Commits verwenden

Natürlich geht das Signieren auch auf der CLI. Dafür wird einfach die Option -S mit angegeben.

git commit -S -m "Meine Commit Message"

Der Übertrag in das Git Repository funktioniert bei beiden Optionen, also Fork oder CLI, anschließend wie bisher.

Ab sofort werden alle Git Commits bei angeschlossenem Hardwaretoken signiert und das wird durch das grüne Schloss im Repository auch grafisch dargestellt.

Signierter Commit

Noch ein paar Worte zur Sicherheit

Der GPG-Schlüssel der zum Signieren der Git Commits verwendet wird, liegt auf einem Hardwaretoken, wie dem YubiKey und lässt sich nur nach dem Anschließen am USB-Port und der Eingabe des PINs aktivieren.

Der Master Key wird nach meiner Anleitung nicht auf den Token übertragen und verbleibt auf dem System auf dem er erstellt wurde.
Der Schlüsselinhaber kann das gesamte System oder nur den Master Key und falls vorhanden das Revoke Zertifikat aufbewahren. Es eignen sich dafür z.B. eine SD-Karte, USB-Stick, CD/DVD, die an einem sicheren Ort verwahrt werden.
Eine weitere Möglichkeit digitale Dokumente zu sichern bieten einige Banken in ihrem Onlinebanking an. Dor lassen sich wichtige Dokumente kostenfrei in digitalen Tresoren abspeichern.

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Source

Foto von Brina Blum auf Unsplash