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