SSH和GPG非对称密钥之间有什么区别?为什么git支持使用GPG签名而不是使用SSH代理?
答案 0 :(得分:8)
在commit ec4465a, Git v0.99, Apr. 2005中引用了在Git中签署任何的第一个概念(几乎从一开始就是这样)
/**
* 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.
**/
所以你的问题有腿。
第一个签名的提交使用了gpg,但可以使用其他任何东西(commit 65f0d0e):
#!/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
从技术上讲,您可以使用gpg in place of ssh。虽然我没有经常看到相反的结果 但您可以使用an ssh key-pair be used with PGP/GPG 这意味着第一个验证脚本可能仍然有效(commit f336e71)...除了预期PGP评论:
#!/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
所以,“为什么git使用GPG密钥签名而不是使用SSH密钥?”:这就是gpg的意图,而不是ssh,which cannot do with with openssh alone (it needs openssl)。
答案 1 :(得分:2)
您不应使用ssh
进行签名提交的原因是加密的常见规则之一:您不应对不同的应用程序/用例使用相同的密钥。
在SSH中,您使用密钥进行身份验证,但这与签名提交不同。为此,GPG更适合,因为它已被广泛用于签署电子邮件,文件等。
答案 2 :(得分:1)
一个可能的原因是并非所有使用git的人都使用ssh。
您可以创建一个git repo,但永远不会离开本地磁盘。您可以使用git协议,http或https或网络文件系统...这些都不涉及ssh,但您仍然可以签署提交,因为这与任何网络传输或提交的其他推/拉共享无关