不同的 git 仓库能指定不同的 gpg 密钥吗 ?

2019-01-13 21:49:54 +08:00
 frylkrttj

暑假的时候被我爸将我塞到培训班学了点东西,老师说学编程,先要学会 git emacs linux 等等这是真的吗?自从我发现了这里有趣的哥哥姐姐,就对计算机编程产生了兴趣,我这几天在实践。

还有个很奇怪的问题,为什么我上传了我自己的 gpg 钥匙到公钥服务器,有时候用搜索命令的到有时候搜不到?

1909 次点击
所在节点    问与答
16 条回复
xiri
2019-01-14 03:31:37 +08:00
用什么 emacs,vim 大法好!(:逃
whileFalse
2019-01-14 08:46:34 +08:00
git 也算用了四五年了,没用过 gpg ……
frylkrttj
2019-01-14 09:06:55 +08:00
@whileFalse 咦。。。不用 gpg 保护 git 传输过程吗?
whileFalse
2019-01-14 09:17:29 +08:00
@frylkrttj 保护传输过程的是 https 和 ssh。前者不需要证书,后者使用的是 ssh 证书。
gpg 是用来做代码签名的。

https://ubuntuforums.org/showthread.php?t=1402933
frylkrttj
2019-01-14 09:25:20 +08:00
@whileFalse 不用 gpg 要是别人也知道你 git 仓库地址怎么办?
yuikns
2019-01-15 13:17:28 +08:00
@frylkrttj 那为啥不用私有仓库
yuikns
2019-01-15 13:23:17 +08:00
Linux 是很好的操作系统。
git 是很好的版本管理工具。
emacs 是不错的编辑器。虽然我用 vim,textmate 还有 jetbrain 全家桶。

但无论哪个,都是学习编程的既不充分又不必要前提。程序就是程序,上面那一切都是有趣的工具,是在未来某个时候可能提高你效率的重要手段(除了 emacs )。但不要因为一时的卡住而忘记学代码本身。
julyclyde
2019-01-15 15:11:17 +08:00
gpg 是对 commit 进行签名的吧。和 git 服务器没啥关系
frylkrttj
2019-01-15 22:39:15 +08:00
@yuikns 用的是 github 的仓库
frylkrttj
2019-01-15 22:41:45 +08:00
@julyclyde git 仓库不是用 gpg 核对仓库主人的吗?
yuikns
2019-01-16 06:23:17 +08:00
@frylkrttj
没懂...

https://s2.ax1x.com/2019/01/16/FzvrVS.png

不能创建私有仓库?现在免费用户也可以创建私有库了吧。


@whileFalse 已经转的帖子已经说得很明白了。此外,网上还可以找到很多说明

https://security.stackexchange.com/questions/120706/why-would-i-sign-my-git-commits-with-a-gpg-key-when-i-already-use-an-ssh-key-to



首先介绍两个概念。

authorization 是 “身份校验”,它就好像以房卡。有了房卡。马蓉可以进酒店,王宝强也可以。
签名 (signature) 是密码学中的一个概念。
在非对称加密算法中,公钥和私钥都是一个大素数,它们的不同名称只是公钥是给所有人知道的,而私钥只能自己知道。本质其实是一样的。这对素数可以通过一个加密一段内容,通过另一个解密。
若别人通过公钥加密,得到一个东西,我们称为密文,我们通过私钥解密。这个被称为“加密”,理论上,只有掌握那个私钥的我才能读取那段密文。这个让那个消息作为隐私。
反之,要是我用私钥加密一段内容,而公众使用公钥解密,这个被称为签名。它的好处是证明这段内容是我发出的,而不可能是任何其它人。
不过,RSA 的加密和解密都很复杂,而且我们有时候并不需要那么复杂,那么我们可以基于散列( hash )生成一个信息摘要( message digest )。它长度会比较短,我们不能从摘要中生成原文,但是我们可以用它检查原文的正确性和完整性。
比如我们准备一个王宝强的摘要,照片,身高,声音等等。那么宋 JJ 跑马蓉房间,我们抓住他,然后和摘要对比,那么很容易可以证明进马蓉房间的不是王宝强。



简单翻译下上面那个链接的内容,作为补充说明:

当你使用 ssh 密钥对 gh 身份验证后,验证信息本身不会存储起来。github 只是临时提供了一条让你读写的途径,但不会和任何不在 github 的人证明任何(身份相关的)信息。

当你 gpg 签名一个 tag 后。这个 tag 就是这个库的一部分,它可以被 push 到其它仓库。因此,clone 这个库的别人也能很容易验证这是你签名的,然后就可以像相信你一样相信那个内容。

然而,对每个 commit 进行 gpg 签名是不必要的。但在发布带 gpg 签名的 tag 是明智的。它提供了一些明确的保证:

+ 这个代码若有问题和你有关
+ 这个代码是你提交的
+ 在你签名后,这个提交没有修改过

这个并不是说你干了这些事,而只是提供追踪和确认的一个正确方向。
yuikns
2019-01-16 06:26:54 +08:00
ssh/https 保证了传输的数据流是安全的。

github 上代码不想别人看到可以用私有库。即便免费账户也可以受限使用它。


gpg 干的是另外一些事情。如上一楼提到的。
julyclyde
2019-01-16 16:18:58 +08:00
@frylkrttj 不是
frylkrttj
2019-01-16 16:22:06 +08:00
@yuikns 看得我头大
frylkrttj
2019-01-28 21:25:56 +08:00
@yuikns ssh 登录公钥私钥可以互换吗? 还是服务器只能用公钥或者私钥?

我把 gpg 公钥传到服务器, 私钥里有生成了一把 ssh 认证用的 [A] 特征私钥匙,这样能用吗?

由于没有服务器我就没法做实验了,但想知道。
yuikns
2019-01-28 22:57:23 +08:00
@frylkrttj 思而不学则民科。你这问题语文又没及格,而且我也回答过。
rsa 是算法,gpg,ssh 是两个不同的协议,只是有时候它们都使用 rsa 而已。对 rsa 说,密钥本质就是两个大素数,私钥公钥一个加密一个解密是角色。
若两者都是 rsa,那么取出素数转换下格式**重新上传原本的私钥**后,可以用原本的公钥做私钥是可能的。

这是我最后一遍重复这破答案,虽然我觉得你还是会继续问鸽子为什么这么大,但我可没那么多功夫和你重复这些没用的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/526688

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX