使用SSH和GPG签署提交有什么区别?

11
GitHub 现在支持 SSH 提交验证,因此您可以使用自己生成的 SSH 公钥在本地签署提交和标签,这将使其他人对您所做的更改的来源感到放心。如果提交或标记具有可加密验证的 SSH 签名,则 GitHub 将使提交或标记“已验证”或“部分验证”。
如果您已经使用 SSH 密钥进行 GitHub 身份验证,则现在可以上传相同或不同密钥对的公钥以将其用作签名密钥。您可以向您的帐户添加任意数量的签名密钥。有关更多信息,请访问 GitHub 文档中的SSH 提交验证
鉴于最近的事件,我想知道:使用 SSH 密钥与 GPG 密钥签署提交之间有什么区别?

注意: 这里有一个类似的问题, 该问题涉及GPG和SSH之间的一般区别。而这个问题则是关于在签名目的下使用其中一个的区别。


4
我想,对于那些没有使用GPG的人来说,进入门槛会降低很多。 - tripleee
1
我看到有人认为这个问题是基于观点的,但我认为这样说有些苛刻了。如果问题的措辞是“有什么区别”,而不是“有什么优缺点”,那么我认为没有人会认为这是一个基于观点的问题。(通过这种方式,读者可以自行决定每个差异是利还是弊,或者答案可以暗示它。)如果有人对此有强烈的感觉,那就去做那个编辑,但是在没有进行明显的措辞调整的情况下关闭问题,我认为这是不幸的。 - TTT
@TTT 之后他们可能不会认为这是基于观点的问题,但他们可能认为它太宽泛了。SO也不适用于“列表”类型的问题。 - TylerH
1
@RohitGupta 关于最近关闭这个问题,我觉得很奇怪,因为这个问题并不是在问与链接问题相同的内容。事实上,VonC用不同的答案回答了这两个不同的问题。我同意原帖编辑所说的,这个问题是在询问签名上下文中的区别,在链接问题中没有涉及到这一点,尽管在那个问题中提到它们可以在签名中使用,但没有像这个问题的回答那样涵盖了差异。我投票支持重新打开这个问题。(哦,显然我有单独操作的权力。) - TTT
如果你同意重新打开,我认为我们(特别是版主)可以在第一条评论后清理掉所有这些评论。 - TTT
显示剩余7条评论
2个回答

15

从功能上来说,这两种方法提供了相当的加密安全性。它们都使用强大的数字签名算法,只要保护好私钥,就被认为是有效防伪的。

SSH的优点在于更容易将密钥转发到另一台机器。例如,在以前的雇主处,所有开发工作都必须在虚拟机上进行,不允许在笔记本电脑或台式机上存储源代码。由于SSH代理转发,使用SSH比GPG更容易。

GPG也因其加密实现的质量而受到批评,对于指纹和某些加密算法使用SHA-1存在合理的批评,后者在此不相关。(SHA-1用于指纹的使用将在即将发布的OpenPGP标准修订中得到解决)。因此,有些人可能更喜欢使用OpenSSH,因为它通常具有更好的安全声誉,并且它通常已经在大多数系统上安装好了。

使用安全密钥时,使用OpenSSH也更容易,因为大多数安全密钥支持FIDO2,技术上只需要这个就够了。OpenPGP实现需要一些额外的支持,因此安全密钥上有OpenPGP的可用性较小。

然而,OpenPGP已经存在更长时间,并且得到Git更长时间的支持,因此在旧环境中使用它更容易。签署数据还需要使用更新版本的OpenSSH,这再次阻碍了其在旧环境中的使用。最后,OpenPGP和GnuPG使存储和验证任意密钥更加容易,包括在GnuPG中的首次使用信任,而OpenSSH需要维护手动指定的允许签名者列表。


6
另一个区别在于,您可以跨计算机使用(GPG/SSH)密钥安全地对提交进行签名,以便在所有平台上都能够识别您的身份。这意味着将密钥(GPG/SSH)存储在在线和同步的Vault中。
否则,在多台计算机上复制/重复使用相同的密钥是一种不好的做法。虽然可以手动导入/附加密钥到Vault中,但我所知道的仅有的用于签署Git提交的集成是GitHub与1Password和SSH密钥(而非GPG)。请参见Thomas Dohmke(GitHub首席执行官)tweet

今天(2022年9月8日),我非常高兴地宣布我们与1Password的新集成以及我们对SSH提交验证的支持。

现在,开发人员可以轻松添加他们的SSH密钥来验证提交,并从浏览器生成和存储SSH密钥。

这里是关于1Password博客文章“使用1Password签署Git提交”的翻译,作者为Marc Mackenbac,1Password 8.9.4或更高版本将包括一个/Applications/1Password.app/Contents/MacOS/op-ssh-sign工具,以及编辑~/.gitconfig的能力,以便使用op-ssh-sign签署您的提交。

gitconfig with 1password

您的SSH密钥在您的在线保险库中管理(现在是1Password,其他可能会跟随)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接