2017-07-15 4 views
3

Was sind die Unterschiede zwischen asymmetrischen SSH- und GPG-Schlüsseln und warum unterstützt git das Signieren mit GPG und nicht den SSH-Agenten?Warum signiert git mit GPG-Schlüsseln und nicht mit SSH-Schlüsseln?

+0

Siehe https://security.stackexchange.com/q/120706 – torek

+0

Dieser Beitrag beantwortet nicht ganz meine Hauptfrage. Ich verstehe, dass SSH für Auth verwendet wird, aber warum kann ein (wahrscheinlich anderer) Schlüssel, der mit dem SSH-Agenten verwaltet wird, den Commit anstelle von GPG signieren? –

+0

In der Tat, aber wenn Sie es lesen und (und seine Referenzen) werden Sie sehen, dass es theoretisch möglich ist, es ist einfach nicht * bequem *. Darüber hinaus verfügt PGP über zusätzliche Funktionen (nicht, dass Git sie direkt verwendet - Git selbst ruft nur eine externe Software auf -, aber Dinge wie Schlüsselwiderruf sind in diesen Kontexten nützlich). – torek

Antwort

6

Die allererste Vorstellung etwas in Git der Unterzeichnung wurde in commit ec4465a, Git v0.99, Apr. 2005 (so ziemlich von Anfang an) verwiesen

/** 
* A signature file has a very simple fixed format: three lines 
* of "object <sha1>" + "type <typename>" + "tag <tagname>", 
* followed by some free-form signature that git itself doesn't 
* care about, but that can be verified with gpg or similar. 
**/ 

So Ihre Frage hat Beine.

Die erste gebrauchte gpg unterzeichnet begehen, aber hätte etwas anderes (commit 65f0d0e) verwendet:

#!/bin/sh 
object=${2:-$(cat .git/HEAD)} 
type=$(cat-file -t $object) || exit 1 
(echo -e "object $object\ntype $type\ntag $1\n"; cat) > .tmp-tag 
rm -f .tmp-tag.asc 
gpg -bsa .tmp-tag && cat .tmp-tag.asc >> .tmp-tag 
git-mktag < .tmp-tag 
#rm .tmp-tag .tmp-tag.sig 

Rein technisch können Sie gpg in place of ssh verwenden. Ich habe jedoch nicht oft das Gegenteil gesehen.
Aber Sie können an ssh key-pair be used with PGP/GPG verwenden.
, dass die erste Überprüfungsskript bedeutet noch funktionieren kann (commit f336e71) ... außer es einen PGP Kommentar zu erwarten:

#!/bin/sh 
GIT_DIR=${GIT_DIR:-.git} 

tag=$1 
[ -f "$GIT_DIR/refs/tags/$tag" ] && tag=$(cat "$GIT_DIR/refs/tags/$tag") 

git-cat-file tag $tag > .tmp-vtag || exit 1 
cat .tmp-vtag | sed '/-----BEGIN PGP/Q' | gpg --verify .tmp-vtag - 
rm -f .tmp-vtag 

„Warum git Zeichen mit GPG-Schlüssel anstatt SSH-Schlüssel verwenden?“ Also: es ist, was gpg tun soll, im Gegensatz zu ssh, which cannot do with with openssh alone (it needs openssl).

+0

Danke, diese Antwort fügt wirklich den Kontext hinzu, den ich verstehen musste. –

0

Ein wahrscheinlicher Grund ist, dass nicht jeder, der git benutzt, ssh benutzt.

Sie können ein Git Repo erstellen und lassen Sie es nie Ihre lokale Festplatte verlassen. Sie können das git-Protokoll oder http oder https oder Netzwerk-Dateisysteme verwenden ... keines dieser Dinge beinhaltet ssh, aber Sie können immer noch Commits signieren, da dies unabhängig von einem Netzwerktransport oder einer anderen Push/Pull-Freigabe Ihrer Commits geschieht .

+0

Das ist ein gültiger Punkt, aber ich denke, dass SSH und sein Toolset allgegenwärtiger ist, also warum nicht nutzen? Ich begann Commits zu unterzeichnen und musste das GPG-Toolset herunterladen, was mich zu dieser Frage führte. Die obere Antwort erklärt warum. –

1

Der Grund, warum Sie ssh NICHT zum Signieren von Commits verwenden sollten, ist eine der allgemeinen Regeln der Kryptographie: Sie sollten nicht die gleichen Schlüssel für verschiedene Anwendungen/Anwendungsfälle verwenden.

In SSH verwenden Sie einen Schlüssel für die Authentifizierung, aber das ist etwas anderes als die Unterzeichnung Ihrer Commits. Dafür ist GPG viel besser geeignet, da es bereits häufig zum Signieren von E-Mails, Dateien usw. verwendet wird.

Verwandte Themen