提交签名解决了什么问题或威胁?

20
我们使用GitHub,有一个要求执行提交签名。经过研究,我不清楚提交签名解决了什么问题。据我了解,有一个“本地源代码”被提交到一个“本地repo”,然后被推送到一个“远程repo”。因此,有三个框和两个箭头从本地源文件指向远程存储库,形成一个有向图。对于最终用户,流程是相反的。
在所描述的模型中,似乎我们希望授权发生在推送到远程repo时;而提交签名几乎没有好处。
Git SCM手册,7.4 Git工具-签署您的工作没有说明它解决了什么问题。然而,它告诉我去寻找答案。

每个人都必须签名

签署标签和提交非常好,但如果您决定在正常工作流程中使用此功能,则必须确保团队中的每个人都知道如何执行此操作。如果不这样做,您最终将花费大量时间帮助人们弄清楚如何重写已签名版本的提交。在采用此作为标准工作流程的一部分之前,请确保您了解GPG和签署事物的好处。

我认为Git工程师们对Git工作流程进行了建模。他们识别出了一个问题(或多个问题),并引入了“提交签名”安全控制来解决它。我想知道他们通过“提交签名”解决了哪些问题。

我认为发生的事情是人们混淆/混淆了身份验证和授权(Authentication with Authorization),或者可能是代码完整性。不幸的是,身份验证并不是授权或代码完整性,尽管愿意这样做。

git提交签名解决了什么问题?


3
@jww请想一个更好的标题,并且不要通过故意拼错来规避受限制的单词列表。 - user229044
3
他可以使用你的姓名和电子邮件地址创建GPG密钥,但这样的密钥将无法与应该先前传播的公钥匹配,无论是通过存储库本身还是通过其他方式传播。 - merlin2011
4
@jww,GPG密钥的工作原理并非如此。任何人都可以代表您创建密钥,但其他人不会相信这实际上是您的密钥。在事后,当您正在修复入侵者造成的损害时,您将能够查看所有提交并轻松识别使用错误密钥签名的提交。签名提交与防止他人闯入您的存储库中心没有任何关系。它们是关于对提交作者进行加密确认的。 - user229044
2
提交签名解决了验证提交作者的实际问题,或者至少使冒充他人变得更加困难。这就是全部内容。无论您是否认为这是您项目中需要解决的问题,都应该在Github上与项目参与者进行讨论,而不是在这里。 - JJJ
2
@meagar - 我添加了额外的信息,请确保它改善了问题。这是真诚的努力,而不是轻率的行为。感谢您过去花费的时间。不感谢您的努力是粗鲁的。 - jww
显示剩余11条评论
1个回答

38

提交签名所解决的问题与数字签署文档的问题相同:验证其作者。

由于只有作者拥有其私钥,因此只有他们可以将提交作为自己进行签名。

如果我信任某个提交者并且他们已经签署了他们的提交,我可以信任他们的代码,而不必手动验证每一行。


考虑这样一种情况:有人在GitHub上分叉了您的存储库,然后添加了大量提交,其中引入了安全漏洞。他们使用元组作者名称、作者电子邮件、提交名称、提交电子邮件设置为原始作者之一进行这些提交。

如果没有提交签名,则无法验证它们是否不是原始作者。

有了提交签名,这些伪造的提交无法被签名,因为伪造者没有作者的私钥。


8
同样地,签署标签(特别是在发布版本时)是一个可验证的指示,表明该点由受人们信任的某人标记,以便他们可以确保该版本已经得到批准。 - Noufal Ibrahim
谢谢Merlin。因此,最少可以使用提交签名来建立某些出处,但这取决于密钥分发问题和用户操作。它不能解决用户信任欺诈(如网络钓鱼)的问题。这正确吗? - jww
2
@jww,是的,那是一个准确的概括。由于您的库包含加密工具,因此使用您的工具的密码学家可能会感到更加舒适,因为他们至少有机会验证提交的作者身份。 - merlin2011
@merlin2011 - 你知道,经过漫长的bug报告辩论和浪费的时间去找出实际问题提交签名解决了…… git merge -Sm“…” 崩溃了并产生错误信息not something we can merge git merge integer failed。而且 git log 并没有显示该死的提交被签名。这个工具的设计存在如此缺陷。 - jww
5
如果我信任某个提交者并且他们已经签署了自己的提交,那么我可以相信他们的代码,而不必一行一行地手动验证。 -- GPG签名并不能代替代码审查 :) 实际上,我想说的是,你只需要相信这确实是那个提交者提交的代码,而不是其他人。 - Evgeny Veretennikov
显示剩余3条评论

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