github 公开 ssh 公钥,为何不一并公布 gpg 公钥? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sunjourney

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

  •  
  •   sunjourney 2016 年 4 月 25 日 8031 次点击
    这是一个创建于 3652 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天偶然翻回一个老帖子,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 年 4 月 25 日
    gpg ……不是已经有 gpg 公钥服务器了吗?
    sunjourney
        2
    sunjourney  
    OP
       2016 年 4 月 25 日
    @msg7086 其它人用 github 上那个链接,可以免指纹了不是,何况不是所有人都传 gpg 服务器的
    msg7086
        3
    msg7086  
       2016 年 4 月 25 日   2
    @sunjourney 个人理解。
    GPG 密钥是相对长期的,一对密钥生成以后会用几年甚至更久。
    SSH 密钥是相对短期的,会经常换新。
    GPG 密钥是绑定到人的,而 SSH 是绑定到服务器的(可以一个服务器用一对密钥,或者一个网站用一对密钥)。
    所以对于 GitHub 来说,提供 SSH 密钥比较实际些。
    而 GPG 密钥由于已经有各大服务器提供了,所以再提供一个意义不是很大。
    liaa
        4
    liaa  
       2016 年 4 月 25 日
    “一记洛阳镐”
    dndx
        5
    dndx  
       2016 年 4 月 25 日 via iPhone   1
    https://pgp.mit.edu 已经是事实上的标准了。 GitHub 再搞一个也不一定有人用。
    sunjourney
        6
    sunjourney  
    OP
       2016 年 4 月 25 日 via iPhone
    @dndx 指纹和 key id 怎么呢?
    sunjourney
        7
    sunjourney  
    OP
       2016 年 4 月 25 日 via iPhone
    @dndx 怎么发布呢?
    sunjourney
        8
    sunjourney  
    OP
       2016 年 4 月 25 日
    @msg7086 github 利用他的权威性发布 gpg 公钥好处是不言喻的,其它人获取公钥的时候可以不用指纹,也不用知道他的 keyid ,这两步实现本来就是很麻烦的
    julyclyde
        9
    julyclyde  
       2016 年 4 月 25 日
    @sunjourney PGP 不是中心认证的 PKI 模型,而是 web of trust 模型
    sunjourney
        10
    sunjourney  
    OP
       2016 年 4 月 25 日
    @julyclyde 如何理解?我认为使用 gpg 公钥只要解决好分发公钥与权威认证这两个问题就可以了, github 刚好可以代劳,而且它已经公布了 ssh 公钥, 再加上 gpg 也不是问题。除非里面有什么有说服力的考量,代公布 ssh 而代不公布 gpg 。 如果有这个考量,这就是我想知道的答案。
    oott123
        11
    oott123  
       2016 年 4 月 25 日 via Android   1
    我感觉主要是那个功能很早了 GPG 是最近加的 所以没更新
    julyclyde
        12
    julyclyde  
       2016 年 4 月 25 日
    @sunjourney gpg 信任模型里人和 keyid 的对应关系要求“亲眼核实”才算数的。 github 又没见过你,就凭你上传一个 publickey 就说这个 key 是你?那你如果上传的是别人的 publickey 呢?
    github 能保证的只有:这个 commit 上的签名,和你上传的 publickey 能够对应的时候,给你显示个已核实该签名
    sunjourney
        13
    sunjourney  
    OP
       2016 年 4 月 25 日
    @julyclyde 上传别人的 key 不说 github 不会给你的 commit 验证通过,别人拿了你的 key 也干不了什么,因此并没有上传 fake key 的意义不是?
    @oott123 你的说法可能是真相了,很长时间没看 profile setting 页面,上传 gpg key 也是最近才发现,可能这确实是新增的功能
    julyclyde
        14
    julyclyde  
       2016 年 4 月 25 日
    @sunjourney 没有意义!=没人会去做
    sunjourney
        15
    sunjourney  
    OP
       2016 年 4 月 25 日
    @julyclyde 那上传 fake ssh pubkey 也会有人做, github 不是防不了
    julyclyde
        16
    julyclyde  
       2016 年 4 月 25 日   1
    @sunjourney 上传 假 ssh pubkey 不会造成危害啊。就拿你原文里举的那个 V2EX 旧帖子里的说法,开发者之间为了相互帮忙,用 github 互换 ssh key ,以便相互登录,如果上传的是假的,他就登录不到别人的服务器上了呗
    但如果是 gpg key 是假的,有可能导致发信人根据假 key 上的 userID 把电邮发到错误的地方去,从而泄密
    sunjourney
        17
    sunjourney  
    OP
       2016 年 4 月 25 日
    @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 年 4 月 25 日
    @sunjourney gpg public key 是有 userid 的; ssh 的没有
    sunjourney
        19
    sunjourney  
    OP
       2016 年 4 月 25 日
    @julyclyde 上传的没有呀, gpg cmd 传 keyserver 用的也是 keyid ,更不用说 copy & paste 过去的内容,就完全没这个信息了
    julyclyde
        20
    julyclyde  
       2016 年 4 月 25 日
    @sunjourney 你是不是没理解什么叫 PGP publickey 的 userID 啊?
    sunjourney
        21
    sunjourney  
    OP
       2016 年 4 月 25 日
    @julyclyde 那就请指教了,本地可以看到 uid ,上传服务器可用的只有 key id 及 fingerprint ,接收只有 key id , user-id 这两个环节可以怎么用?他人怎么获取 email ?
    sunjourney
        22
    sunjourney  
    OP
       2016 年 4 月 25 日
    @julyclyde 刚导入了别人的 pub key 看了,导入后可以看到 uid 耻,之前以为 uid 没显式传上去,别人也不知道,现在看来 uid 信息包裹在 pub key 里,还是我在 gpg 公钥生成算法的理解上出问题了。
    julyclyde
        23
    julyclyde  
       2016 年 4 月 25 日   1
    @sunjourney 虽然最终你用正确的方法理解了,不过其实反证法更快:如果你只上传一个 ID/fingerprint ,服务器怎么能有能力给其他客户提供完整 pubkey 的下载呢?
    sunjourney
        24
    sunjourney  
    OP
       2016 年 4 月 25 日
    @julyclyde 嗯,之前想过没细想,验证,解密的时候, gpg 能知道文件该用哪个私钥解我就该看出来的。
    webshe11
        25
    webshe11  
       2020 年 5 月 6 日
    (偶尔翻到,挖个坟)把 .keys 换成 .gpg 即可
    https://github.com/torvalds.gpg
    可以用来给 commit 签名,但是用的人不多
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4048 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 00:15 PVG 08:15 LAX 17:15 JFK 20:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86