Dan*_*zyk 7 git digital-signature ssh-keys public-key gpg-signature
SSH和GPG非对称密钥之间有什么区别?为什么git支持使用GPG进行签名而不是使用SSH代理?
Von*_*onC 13
签约的第一个概念,什么 Git中被引用的承诺ec4465a,Git的v0.99,2005年四月(相当从一开始就多)
/**
* 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.
**/
Run Code Online (Sandbox Code Playgroud)
所以你的问题有腿.
第一个签名的提交使用了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
Run Code Online (Sandbox Code Playgroud)
从技术上讲,您可以使用gpg代替ssh.虽然我没有经常看到相反的情况.
但是您可以使用与PGP/GPG一起使用的ssh密钥对.
这意味着第一个验证脚本可能仍然有效(提交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
Run Code Online (Sandbox Code Playgroud)
所以,"为什么git使用GPG密钥签名而不是使用SSH密钥?":这就是gpg的意图,而不是ssh,这与单独的openssh无关(它需要openssl).
您不应该用于签名提交的原因ssh
是密码学的常见规则之一:您不应该对不同的应用程序/用例使用相同的密钥。
在 SSH 中,您使用密钥进行身份验证,但这与签署提交不同。对此,GPG 更适合,因为它已经广泛用于签署电子邮件、文件等。
归档时间: |
|
查看次数: |
2015 次 |
最近记录: |