什么是签名提交?

11

在Git中签署提交意味着什么?即使阅读文档之后,我仍然有些困惑它是如何工作的。

如果提交被签署,那么我们是否可以确定提交的作者名称和电子邮件地址是否准确?


参见:https://softwareengineering.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a - Josiah Yoder
1个回答

16
从技术上讲,它仅仅意味着相应私钥的持有者签署了提交。实际上可以推断出以下几点:
  1. 该密钥的持有者是一个具有可验证声誉的人,
  2. 该人声称是代码的作者,并且
  3. 代码自签署以来没有发生变化。
我对GPG密钥持有者如何与他人建立身份的了解非常有限,但这是一个大致的概念。
为什么你要检查所有这些呢?如果所讨论的软件对某种类型的安全性至关重要,攻击者可能通过替换损坏的软件来危害你,而你认为你得到的是正版软件,例如带有你难以识别的后门的软件。毕竟,你想要一些代码,你点击“下载”,并且你相信通过网络传输的是按钮上所写的内容。但是,理想情况下,攻击者将无法模仿真正作者的签名,因为他们没有作者的私钥。而且他们不能仅仅更改代码而保留签名,因为签名涉及代码本身的哈希值。
请参阅维基百科上的代码签名

如果作者从多台计算机上工作,签名会如何工作?每台计算机都有自己的密钥吗? - Stevoisiak
我现在只是在重复维基百科的内容。这当然不是小事。你必须有一种安全携带密钥的方法。 - Chris
1
为了正确设置,每台计算机都需要访问作者的私钥。您可以复制秘密密钥,但使用像gpg-agent这样的代理更安全,因此私钥存储在一个地方;代理可以将密钥传递给远程帐户,而不会触及远程磁盘(并且对于任何具有根访问权限的人都是可见的)。 - Schwern

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