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?
Antwort
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).
Danke, diese Antwort fügt wirklich den Kontext hinzu, den ich verstehen musste. –
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 .
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. –
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.
- 1. Warum werden OCSP-Fehlermeldungen nicht signiert?
- 2. Warum funktioniert `git diff` nicht mit Prozesssubstitution?
- 3. Warum ist 'char' standardmäßig in C++ signiert?
- 4. MVC AuthenticationManager.SignOut() signiert nicht
- 5. ist standardmäßig signiert oder nicht signiert auf iOS?
- 6. APK mit einem Zertifikat signiert, das noch nicht gültig ist
- 7. Android Studio nicht signiert apk
- 8. Häkchen bei PDF signiert mit iText
- 9. Appium (Android): App nicht mit Debug-Zertifikat signiert
- 10. Warum die Kombination von Maven mit Git?
- 11. Exportieren signiert APK mit ProGuard Fehler
- 12. Warum Git Identität verliert mit Bitbucket Repo?
- 13. Warum wird PS1 nicht mit dem Git-Zweig-Namen aktualisiert?
- 14. API Management mit GIT und Octopus - Git PUSH/git pull
- 15. Kann Repo nicht mit Git Klon Git klonen: // ... - Ok mit Git Klon http: //
- 16. Verifizieren Digest mit privatem Schlüssel mit einem C-Programm signiert
- 17. kostenlose und kostenpflichtige App signiert einen Keystore
- 18. Teilklon mit Git und Mercurial
- 19. Authentifizierung mit Jenkins und Git
- 20. Capistrano nicht mit git authentifiziert
- 21. Warum gelb nicht in Powershell und posh git
- 22. Wie mit Git-Svn umgehen, wenn beide Git und Subversion
- 23. Twos Complement ~ 0 signiert
- 24. Warum müssen Schleifenvariablen für eine Parallele signiert werden?
- 25. Designelemente werden zufällig signiert
- 26. Erstellen von .msi mit Visual & Install (nicht signiert) und Visual Studio Community 2015
- 27. Drawable nicht angezeigt, wenn id dynamisch geladen und Anwendung signiert
- 28. Warum funktioniert "git flow feature pull" nicht?
- 29. Warum erkennt Matlab (oder git?) Wincred nicht?
- 30. Warum schließe ich mit git 2.6.4 nach der Installation auf OSX 10.11.1 mit brew install git?
Siehe https://security.stackexchange.com/q/120706 – torek
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? –
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