在没有GPG签名的情况下验证GIT提交 [英] Verifying git commit without gpg signing

查看:11
本文介绍了在没有GPG签名的情况下验证GIT提交的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们开始使用Git作为VCS,之前使用的是SVN,并发现在Git中您可以很容易地发现更改和提交背后的真实人员。现在我们想知道为什么会做出这样的设计选择,是否有什么我们忽略了。

让我们假设以下几点:

  1. 每个人都已向GitLab注册了ssh密钥
  2. 提交未与gpg签署
  3. 每个人都使用注册的ssh密钥来使用git bash

我们都知道authorcommitter只是Git的元数据,很容易被欺骗:

  1. git配置--global--添加用户.mail inciito@fake.com
  2. git配置--global--添加用户.name"隐姓埋名用户"
  3. git Commit-m"你不知道我到底是谁"--Author="Max Mustermann"
  4. 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的评论中复制信息,因为我认为此上下文足够重要,它应该在答案本身中提供,而不仅仅是在评论中:


首先,您需要将gitGitLab分开。就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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆