github 公开 ssh 公钥,为何不一并公布 gpg 公钥?

2016-04-25 02:12:36 +08:00
 sunjourney

今天偶然翻回一个老帖子,https://www.v2ex.com/t/211088 免得一记洛阳镐,重贴一下大致内容,访问 https://github.com/yourname.keys ,可以看到其它人的公钥,对于这样做的解释,有人贴了官方的说法,也有人分析过有 github 背书的公钥比较权威,公钥的省去了他人索要公钥的过程。这些理由有道理,只是需要 ssh 公钥的情况并不多。

问题就来了, https://github.com/yourname.keys 这个链接既然可以查看 ssh 公钥,为何不一并公布了 gpg 公钥,后者的应用情境更多才是? github 目前只提供 commit 验证, pull 下来的项目在其它人不上网站的情况下也验证不了不是?

7456 次点击
所在节点    GitHub
25 条回复
msg7086
2016-04-25 02:23:09 +08:00
gpg ……不是已经有 gpg 公钥服务器了吗?
sunjourney
2016-04-25 02:30:50 +08:00
@msg7086 其它人用 github 上那个链接,可以免指纹了不是,何况不是所有人都传 gpg 服务器的
msg7086
2016-04-25 05:22:56 +08:00
@sunjourney 个人理解。
GPG 密钥是相对长期的,一对密钥生成以后会用几年甚至更久。
SSH 密钥是相对短期的,会经常换新。
GPG 密钥是绑定到人的,而 SSH 是绑定到服务器的(可以一个服务器用一对密钥,或者一个网站用一对密钥)。
所以对于 GitHub 来说,提供 SSH 密钥比较实际些。
而 GPG 密钥由于已经有各大服务器提供了,所以再提供一个意义不是很大。
liaa
2016-04-25 06:39:48 +08:00
“一记洛阳镐” 👍
dndx
2016-04-25 07:34:26 +08:00
https://pgp.mit.edu 已经是事实上的标准了。 GitHub 再搞一个也不一定有人用。
sunjourney
2016-04-25 08:35:49 +08:00
@dndx 指纹和 key id 怎么呢?
sunjourney
2016-04-25 08:36:47 +08:00
@dndx 怎么发布呢?
sunjourney
2016-04-25 09:30:43 +08:00
@msg7086 github 利用他的权威性发布 gpg 公钥好处是不言喻的,其它人获取公钥的时候可以不用指纹,也不用知道他的 keyid ,这两步实现本来就是很麻烦的
julyclyde
2016-04-25 10:55:40 +08:00
@sunjourney PGP 不是中心认证的 PKI 模型,而是 web of trust 模型
sunjourney
2016-04-25 11:18:53 +08:00
@julyclyde 如何理解?我认为使用 gpg 公钥只要解决好分发公钥与权威认证这两个问题就可以了, github 刚好可以代劳,而且它已经公布了 ssh 公钥, 再加上 gpg 也不是问题。除非里面有什么有说服力的考量,代公布 ssh 而代不公布 gpg 。 如果有这个考量,这就是我想知道的答案。
oott123
2016-04-25 12:05:26 +08:00
我感觉主要是那个功能很早了 GPG 是最近加的 所以没更新
julyclyde
2016-04-25 13:44:32 +08:00
@sunjourney gpg 信任模型里,人和 keyid 的对应关系要求“亲眼核实”才算数的。 github 又没见过你,就凭你上传一个 publickey 就说这个 key 是你?那你如果上传的是别人的 publickey 呢?
github 能保证的只有:这个 commit 上的签名,和你上传的 publickey 能够对应的时候,给你显示个已核实该签名
sunjourney
2016-04-25 14:47:25 +08:00
@julyclyde 上传别人的 key 不说 github 不会给你的 commit 验证通过,别人拿了你的 key 也干不了什么,因此并没有上传 fake key 的意义不是?
@oott123 你的说法可能是真相了,很长时间没看 profile setting 页面,上传 gpg key 也是最近才发现,可能这确实是新增的功能
julyclyde
2016-04-25 15:38:21 +08:00
@sunjourney 没有意义!=没人会去做
sunjourney
2016-04-25 15:44:05 +08:00
@julyclyde 那上传 fake ssh pubkey 也会有人做, github 不是防不了
julyclyde
2016-04-25 15:45:55 +08:00
@sunjourney 上传 假 ssh pubkey 不会造成危害啊。就拿你原文里举的那个 V2EX 旧帖子里的说法,开发者之间为了相互帮忙,用 github 互换 ssh key ,以便相互登录,如果上传的是假的,他就登录不到别人的服务器上了呗
但如果是 gpg key 是假的,有可能导致发信人根据假 key 上的 userID 把电邮发到错误的地方去,从而泄密
sunjourney
2016-04-25 16:12:28 +08:00
@julyclyde pub key 没有 userID 啊,何来泄密? 不过就在刚才,我想通了,应该是应对这种情形, github 才不提供 gpg 公钥: github 帐号被攻破了!

假设 github 提供 gpg 公钥发布, faker 拿的 github 提交了 commit , 打上了 tag ,但他没法使用 owner 的签名,但可以上传自己的 公钥!其它正常使用者本来用真正 owner 的 pubkey 验证的,不能通过验证时可能会以为公钥过期,又会到 github 上拿 owner 的 pubkey ,正中 faker 下怀!

亏我专门还去 github 官方询问这事,糗大了。 感谢所有参与讨论者。我的想法如果再有误,欢迎继续讨论。
julyclyde
2016-04-25 16:29:31 +08:00
@sunjourney gpg public key 是有 userid 的; ssh 的没有
sunjourney
2016-04-25 16:33:28 +08:00
@julyclyde 上传的没有呀, gpg cmd 传 keyserver 用的也是 keyid ,更不用说 copy & paste 过去的内容,就完全没这个信息了
julyclyde
2016-04-25 20:30:51 +08:00
@sunjourney 你是不是没理解什么叫 PGP publickey 的 userID 啊?

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

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

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

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

© 2021 V2EX