V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sunjourney
V2EX  ›  GitHub

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

  •  
  •   sunjourney · 2016-04-25 02:12:36 +08:00 · 7456 次点击
    这是一个创建于 3136 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    25 条回复    2020-05-06 01:42:16 +08:00
    msg7086
        1
    msg7086  
       2016-04-25 02:23:09 +08:00
    gpg ……不是已经有 gpg 公钥服务器了吗?
    sunjourney
        2
    sunjourney  
    OP
       2016-04-25 02:30:50 +08:00
    @msg7086 其它人用 github 上那个链接,可以免指纹了不是,何况不是所有人都传 gpg 服务器的
    msg7086
        3
    msg7086  
       2016-04-25 05:22:56 +08:00   ❤️ 2
    @sunjourney 个人理解。
    GPG 密钥是相对长期的,一对密钥生成以后会用几年甚至更久。
    SSH 密钥是相对短期的,会经常换新。
    GPG 密钥是绑定到人的,而 SSH 是绑定到服务器的(可以一个服务器用一对密钥,或者一个网站用一对密钥)。
    所以对于 GitHub 来说,提供 SSH 密钥比较实际些。
    而 GPG 密钥由于已经有各大服务器提供了,所以再提供一个意义不是很大。
    liaa
        4
    liaa  
       2016-04-25 06:39:48 +08:00
    “一记洛阳镐” 👍
    dndx
        5
    dndx  
       2016-04-25 07:34:26 +08:00 via iPhone   ❤️ 1
    https://pgp.mit.edu 已经是事实上的标准了。 GitHub 再搞一个也不一定有人用。
    sunjourney
        6
    sunjourney  
    OP
       2016-04-25 08:35:49 +08:00 via iPhone
    @dndx 指纹和 key id 怎么呢?
    sunjourney
        7
    sunjourney  
    OP
       2016-04-25 08:36:47 +08:00 via iPhone
    @dndx 怎么发布呢?
    sunjourney
        8
    sunjourney  
    OP
       2016-04-25 09:30:43 +08:00
    @msg7086 github 利用他的权威性发布 gpg 公钥好处是不言喻的,其它人获取公钥的时候可以不用指纹,也不用知道他的 keyid ,这两步实现本来就是很麻烦的
    julyclyde
        9
    julyclyde  
       2016-04-25 10:55:40 +08:00
    @sunjourney PGP 不是中心认证的 PKI 模型,而是 web of trust 模型
    sunjourney
        10
    sunjourney  
    OP
       2016-04-25 11:18:53 +08:00
    @julyclyde 如何理解?我认为使用 gpg 公钥只要解决好分发公钥与权威认证这两个问题就可以了, github 刚好可以代劳,而且它已经公布了 ssh 公钥, 再加上 gpg 也不是问题。除非里面有什么有说服力的考量,代公布 ssh 而代不公布 gpg 。 如果有这个考量,这就是我想知道的答案。
    oott123
        11
    oott123  
       2016-04-25 12:05:26 +08:00 via Android   ❤️ 1
    我感觉主要是那个功能很早了 GPG 是最近加的 所以没更新
    julyclyde
        12
    julyclyde  
       2016-04-25 13:44:32 +08:00
    @sunjourney gpg 信任模型里,人和 keyid 的对应关系要求“亲眼核实”才算数的。 github 又没见过你,就凭你上传一个 publickey 就说这个 key 是你?那你如果上传的是别人的 publickey 呢?
    github 能保证的只有:这个 commit 上的签名,和你上传的 publickey 能够对应的时候,给你显示个已核实该签名
    sunjourney
        13
    sunjourney  
    OP
       2016-04-25 14:47:25 +08:00
    @julyclyde 上传别人的 key 不说 github 不会给你的 commit 验证通过,别人拿了你的 key 也干不了什么,因此并没有上传 fake key 的意义不是?
    @oott123 你的说法可能是真相了,很长时间没看 profile setting 页面,上传 gpg key 也是最近才发现,可能这确实是新增的功能
    julyclyde
        14
    julyclyde  
       2016-04-25 15:38:21 +08:00
    @sunjourney 没有意义!=没人会去做
    sunjourney
        15
    sunjourney  
    OP
       2016-04-25 15:44:05 +08:00
    @julyclyde 那上传 fake ssh pubkey 也会有人做, github 不是防不了
    julyclyde
        16
    julyclyde  
       2016-04-25 15:45:55 +08:00   ❤️ 1
    @sunjourney 上传 假 ssh pubkey 不会造成危害啊。就拿你原文里举的那个 V2EX 旧帖子里的说法,开发者之间为了相互帮忙,用 github 互换 ssh key ,以便相互登录,如果上传的是假的,他就登录不到别人的服务器上了呗
    但如果是 gpg key 是假的,有可能导致发信人根据假 key 上的 userID 把电邮发到错误的地方去,从而泄密
    sunjourney
        17
    sunjourney  
    OP
       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
        18
    julyclyde  
       2016-04-25 16:29:31 +08:00
    @sunjourney gpg public key 是有 userid 的; ssh 的没有
    sunjourney
        19
    sunjourney  
    OP
       2016-04-25 16:33:28 +08:00
    @julyclyde 上传的没有呀, gpg cmd 传 keyserver 用的也是 keyid ,更不用说 copy & paste 过去的内容,就完全没这个信息了
    julyclyde
        20
    julyclyde  
       2016-04-25 20:30:51 +08:00
    @sunjourney 你是不是没理解什么叫 PGP publickey 的 userID 啊?
    sunjourney
        21
    sunjourney  
    OP
       2016-04-25 20:48:22 +08:00
    @julyclyde 那就请指教了,本地可以看到 uid ,上传服务器可用的只有 key id 及 fingerprint ,接收只有 key id , user-id 这两个环节可以怎么用?他人怎么获取 email ?
    sunjourney
        22
    sunjourney  
    OP
       2016-04-25 21:19:14 +08:00
    @julyclyde 刚导入了别人的 pub key 看了,导入后可以看到 uid 耻,之前以为 uid 没显式传上去,别人也不知道,现在看来 uid 信息包裹在 pub key 里,还是我在 gpg 公钥生成算法的理解上出问题了。
    julyclyde
        23
    julyclyde  
       2016-04-25 21:40:56 +08:00   ❤️ 1
    @sunjourney 虽然最终你用正确的方法理解了,不过其实反证法更快:如果你只上传一个 ID/fingerprint ,服务器怎么能有能力给其他客户提供完整 pubkey 的下载呢?
    sunjourney
        24
    sunjourney  
    OP
       2016-04-25 21:47:32 +08:00
    @julyclyde 嗯,之前想过没细想,验证,解密的时候, gpg 能知道文件该用哪个私钥解我就该看出来的。
    webshe11
        25
    webshe11  
       2020-05-06 01:42:16 +08:00
    (偶尔翻到,挖个坟)把 .keys 换成 .gpg 即可
    https://github.com/torvalds.gpg
    可以用来给 commit 签名,但是用的人不多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5353 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 05:45 · PVG 13:45 · LAX 21:45 · JFK 00:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.