今天偶然翻回一个老帖子,https://www.v2ex.com/t/211088 免得一记洛阳镐,重贴一下大致内容,访问 https://github.com/yourname.keys ,可以看到其它人的公钥,对于这样做的解释,有人贴了官方的说法,也有人分析过有 github 背书的公钥比较权威,公钥的省去了他人索要公钥的过程。这些理由有道理,只是需要 ssh 公钥的情况并不多。
问题就来了, https://github.com/yourname.keys 这个链接既然可以查看 ssh 公钥,为何不一并公布了 gpg 公钥,后者的应用情境更多才是? github 目前只提供 commit 验证, pull 下来的项目在其它人不上网站的情况下也验证不了不是?
1
msg7086 2016-04-25 02:23:09 +08:00
gpg ……不是已经有 gpg 公钥服务器了吗?
|
2
sunjourney OP @msg7086 其它人用 github 上那个链接,可以免指纹了不是,何况不是所有人都传 gpg 服务器的
|
3
msg7086 2016-04-25 05:22:56 +08:00 2
@sunjourney 个人理解。
GPG 密钥是相对长期的,一对密钥生成以后会用几年甚至更久。 SSH 密钥是相对短期的,会经常换新。 GPG 密钥是绑定到人的,而 SSH 是绑定到服务器的(可以一个服务器用一对密钥,或者一个网站用一对密钥)。 所以对于 GitHub 来说,提供 SSH 密钥比较实际些。 而 GPG 密钥由于已经有各大服务器提供了,所以再提供一个意义不是很大。 |
4
liaa 2016-04-25 06:39:48 +08:00
“一记洛阳镐” 👍
|
5
dndx 2016-04-25 07:34:26 +08:00 via iPhone 1
https://pgp.mit.edu 已经是事实上的标准了。 GitHub 再搞一个也不一定有人用。
|
6
sunjourney OP @dndx 指纹和 key id 怎么呢?
|
7
sunjourney OP @dndx 怎么发布呢?
|
8
sunjourney OP @msg7086 github 利用他的权威性发布 gpg 公钥好处是不言喻的,其它人获取公钥的时候可以不用指纹,也不用知道他的 keyid ,这两步实现本来就是很麻烦的
|
9
julyclyde 2016-04-25 10:55:40 +08:00
@sunjourney PGP 不是中心认证的 PKI 模型,而是 web of trust 模型
|
10
sunjourney OP @julyclyde 如何理解?我认为使用 gpg 公钥只要解决好分发公钥与权威认证这两个问题就可以了, github 刚好可以代劳,而且它已经公布了 ssh 公钥, 再加上 gpg 也不是问题。除非里面有什么有说服力的考量,代公布 ssh 而代不公布 gpg 。 如果有这个考量,这就是我想知道的答案。
|
11
oott123 2016-04-25 12:05:26 +08:00 via Android 1
我感觉主要是那个功能很早了 GPG 是最近加的 所以没更新
|
12
julyclyde 2016-04-25 13:44:32 +08:00
@sunjourney gpg 信任模型里,人和 keyid 的对应关系要求“亲眼核实”才算数的。 github 又没见过你,就凭你上传一个 publickey 就说这个 key 是你?那你如果上传的是别人的 publickey 呢?
github 能保证的只有:这个 commit 上的签名,和你上传的 publickey 能够对应的时候,给你显示个已核实该签名 |
13
sunjourney OP |
14
julyclyde 2016-04-25 15:38:21 +08:00
@sunjourney 没有意义!=没人会去做
|
15
sunjourney OP @julyclyde 那上传 fake ssh pubkey 也会有人做, github 不是防不了
|
16
julyclyde 2016-04-25 15:45:55 +08:00 1
@sunjourney 上传 假 ssh pubkey 不会造成危害啊。就拿你原文里举的那个 V2EX 旧帖子里的说法,开发者之间为了相互帮忙,用 github 互换 ssh key ,以便相互登录,如果上传的是假的,他就登录不到别人的服务器上了呗
但如果是 gpg key 是假的,有可能导致发信人根据假 key 上的 userID 把电邮发到错误的地方去,从而泄密 |
17
sunjourney OP @julyclyde pub key 没有 userID 啊,何来泄密? 不过就在刚才,我想通了,应该是应对这种情形, github 才不提供 gpg 公钥: github 帐号被攻破了!
假设 github 提供 gpg 公钥发布, faker 拿的 github 提交了 commit , 打上了 tag ,但他没法使用 owner 的签名,但可以上传自己的 公钥!其它正常使用者本来用真正 owner 的 pubkey 验证的,不能通过验证时可能会以为公钥过期,又会到 github 上拿 owner 的 pubkey ,正中 faker 下怀! 亏我专门还去 github 官方询问这事,糗大了。 感谢所有参与讨论者。我的想法如果再有误,欢迎继续讨论。 |
18
julyclyde 2016-04-25 16:29:31 +08:00
@sunjourney gpg public key 是有 userid 的; ssh 的没有
|
19
sunjourney OP @julyclyde 上传的没有呀, gpg cmd 传 keyserver 用的也是 keyid ,更不用说 copy & paste 过去的内容,就完全没这个信息了
|
20
julyclyde 2016-04-25 20:30:51 +08:00
@sunjourney 你是不是没理解什么叫 PGP publickey 的 userID 啊?
|
21
sunjourney OP @julyclyde 那就请指教了,本地可以看到 uid ,上传服务器可用的只有 key id 及 fingerprint ,接收只有 key id , user-id 这两个环节可以怎么用?他人怎么获取 email ?
|
22
sunjourney OP @julyclyde 刚导入了别人的 pub key 看了,导入后可以看到 uid 耻,之前以为 uid 没显式传上去,别人也不知道,现在看来 uid 信息包裹在 pub key 里,还是我在 gpg 公钥生成算法的理解上出问题了。
|
23
julyclyde 2016-04-25 21:40:56 +08:00 1
@sunjourney 虽然最终你用正确的方法理解了,不过其实反证法更快:如果你只上传一个 ID/fingerprint ,服务器怎么能有能力给其他客户提供完整 pubkey 的下载呢?
|
24
sunjourney OP @julyclyde 嗯,之前想过没细想,验证,解密的时候, gpg 能知道文件该用哪个私钥解我就该看出来的。
|
25
webshe11 2020-05-06 01:42:16 +08:00
|