在没有GPG签名的情况下验证GIT提交 [英] Verifying git commit without gpg signing
问题描述
我们开始使用Git作为VCS,之前使用的是SVN,并发现在Git中您可以很容易地发现更改和提交背后的真实人员。现在我们想知道为什么会做出这样的设计选择,是否有什么我们忽略了。
让我们假设以下几点:
- 每个人都已向GitLab注册了ssh密钥
- 提交未与gpg签署
- 每个人都使用注册的ssh密钥来使用git bash
我们都知道author
和committer
只是Git的元数据,很容易被欺骗:
- git配置--global--添加用户.mail inciito@fake.com
- git配置--global--添加用户.name"隐姓埋名用户"
- git Commit-m"你不知道我到底是谁"--Author="Max Mustermann"
- Git推送
提交的元数据将如下所示:
Author: Max Mustermann <max.mustermann@company.com>
AuthorDate: Mon Jun 4 13:12:47 2018 +0200
Commit: Incognito User <Incognito@fake.com>
CommitDate: Mon Jun 4 13:13:26 2018 +0200
现在我想一定有办法找到用于提交的ssh密钥或真人,因为终端和系统知道密钥,从而知道提交和推送背后的真人。
问题:不使用gpg签名根本找不到真人吗?
PS:不,我们不信任对方来利用这一点,但我们很好奇,想要了解。
推荐答案
更新-从Torek的评论中复制信息,因为我认为此上下文足够重要,它应该在答案本身中提供,而不仅仅是在评论中:
首先,您需要将git和GitLab分开。就Git而言,ssh只是您可能用来连接到服务器的协议之一。您的ssh密钥或其有效性对Git来说并不重要;这是您和您的服务器之间的事,因为服务器会对您进行身份验证,以便它可以决定您是否有权通过ssh进行连接。
(服务器可能会执行更精细的授权检查,特别是对于GitLab这样的主机,其整个功能是与Git集成。尽管如此,这是东道主的事,不是Git的事。)
托管服务(如GitLab)可能会选择基于ssh密钥记录活动,也可能不会。即使他们这样做了,也只能告诉您是谁将提交推入该服务器,这可能与作者或提交者不同。例如:
假设Alice编写了代码;她是作者。她给鲍勃寄了一份她的作品。鲍勃把代码放进了本地的GIT回收站。鲍勃是提交者。鲍勃创建了一个捆绑包文件,并将其发送给辛迪。现在,Cindy将Bob的COMMIT包含Alice的代码加载到她的本地repo中,然后使用她的ssh密钥推送到GitLab。现在,Git本身并不关心辛迪在这件事中的角色;她不是作者,也不是提交者。但如果GitLab选择基于ssh密钥记录活动,GitLab可能会记录Cindy将提交介绍给该服务器。
在Git中创建可验证提交的方法是使用签名[1]。所以,如果不使用[Git记录真人的机制],就根本找不到真人。请注意,这源于Git的分布式特性。如果没有某种外部约束,就不可能说辛迪是否合法地转载了爱丽丝和鲍勃的工作。有了SVN,有了一个明显区分的中央服务器/真相来源,Alice必须连接到该服务器以创建提交,之后Bob必须连接到该服务器,Cindy必须连接到该服务器。每个人都单独连接到服务器。与SVN不同,Git并不认为这一定会发生。如果您希望自己强制执行此类策略,则可以让服务器执行此操作。-torek
[1]虽然我不知道他们的观点是否改变了,但至少一些git开发人员在早期表示,签署标签--而不是直接签署提交--是正确的方式。
这篇关于在没有GPG签名的情况下验证GIT提交的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!