SSH和GPG非对称密钥之间有什么区别,为什么git支持使用GPG进行签名而不是使用SSH代理?为什么git使用GPG密钥而不是使用SSH密钥签名?
回答
Git中签什么的第一个概念是在commit ec4465a, Git v0.99, Apr. 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.
**/
所以你的问题有腿。
的第一个签约承诺使用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)。
谢谢,这个答案确实增加了我需要理解的背景。 –
一个可能的原因是不是所有使用git的人都使用ssh。
你可以创建一个git仓库,并且永远不会离开你的本地磁盘。您可以使用git协议或http或https或网络文件系统......这些都不涉及ssh,但您仍然可以对提交进行签名,因为这会独立于任何网络传输或其他推式/提交共享您的提交。
这是一个有效的观点,但我的想法是SSH和它的工具集更加无处不在,那么为什么不利用它呢?我开始签署提交,不得不下载GPG工具集,这引起了我的这个问题。最重要的答案解释了原因。 –
您不应该使用ssh
来签名提交的原因是密码学的常见规则之一:您不应该为不同的应用程序/用例使用相同的密钥。
在SSH中,您使用密钥进行身份验证,但这与签署提交有些不同。为此,GPG更加合适,因为它已被广泛用于签署电子邮件,文件等。
- 1. gpg:跳过“XXBDXX4E”:密钥不可用。 GPG:签名失败:不可用密钥
- 2. 使用不同密钥大小的PGP/GPG签名和加密
- 3. 将SSH设置为仅使用密钥,而不是密码
- 4. 使用gpg对加密密钥进行数字签名
- 5. Git失去了GPG密钥
- 6. Linux的SSH密钥使用
- 7. 验证gpg签名而不安装密钥
- 8. 为什么源码树寻找gpg密钥,而我还没有配置签名?
- 9. gpg - 导出密钥
- 10. 未找到Git SSH密钥
- 11. Git设置ssh密钥
- 12. Git ssh私钥密码
- 13. Git-ssh密钥/ IP地址
- 14. 在Go中直接创建或使用GPG或SSH密钥
- 15. Unity为apk签名使用什么默认密钥库?
- 16. 配置SSH密钥让git在不在Git Bash中时使用
- 17. Ansible provisioning错误!使用SSH密码而不是密钥是不可能的
- 18. 使用SSH密钥创建用户,不使用密码
- 19. 面料不使用SSH密钥
- 20. TortoiseGit使用不正确的SSH密钥
- 21. 为什么解密的密钥与加密密钥不一样?
- 22. 签名APK - 密钥是否是私钥?
- 23. EGit(Eclipse git插件)可以使用SSH密钥而不是用户名和密码吗?
- 24. Git:使用密钥文件使用密钥文件访问远程存储库但不使用〜/ .ssh/config
- 25. 为什么不应该使用密码作为会话密钥
- 26. SSH密钥,但仅用于git访问
- 27. Android:Java:使用密钥而不是密码解密AES
- 28. 使用公开密钥签名XML
- 29. 如何使JsonConverter写密钥/值而不是密钥/数组
- 30. 在Jenkins中为Git管理SSH密钥
请参阅https://security.stackexchange.com/q/120706 – torek
该帖子并不完全回答我的主要问题。我知道SSH用于身份验证,但为什么不能用SSH代理管理(可能是不同的)密钥而不是GPG签名提交? –
事实上,如果你阅读它并且(和它的参考文献),你会发现它在理论上是可行的,这只是不方便*而已。另外,PGP还有其他特性(并不是Git直接使用它们),Git本身只是调用一些外部软件,但是在这些情况下,密钥撤销等都是有用的。 – torek