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

问一个 git gpg 公钥 分发的问题,再问一 ssh 私钥保存的问题

  •  
  •   sunjourney · 2016-04-20 10:10:05 +08:00 · 2327 次点击
    这是一个创建于 3144 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题一: SF 毕竟冷清,提了好几个问题无人解答,愿意在 SF 上解答的移步 git-scm 上提供的 gpg 公钥分发方式似乎不可以防止内容伪造吧?

    重复下问题,使用 git-scm 上 https:/git-scm.com/book/zh/v2/分布式-Git-维护项目#为发布打标签 设计的公钥分发方式,遇到伪造者用他的私钥加密,用 tag annotate 发布假公钥,再伪造内容,根本无解啊?

    你说用指纹?指纹发布在 site 上吗,那我何不在 site 上直接写公钥?

    问题二: ssh 的私钥明文存储在 ~/.ssh/ 下,要 private key 的 passphrase 又有何用?

    第 1 条附言  ·  2016-04-20 11:04:59 +08:00

    发现链接有两段中文被hash分开且未encode的不能跳转,想跳转的可以浏览器复制" https:/git-scm.com/book/zh/v2/分布式-Git-维护项目#为发布打标签 ",或者使用这个encode过的,https://git-scm.com/book/zh/v2/%E5%88%86%E5%B8%83%E5%BC%8F-Git-%E7%BB%B4%E6%8A%A4%E9%A1%B9%E7%9B%AE#为发布打标签

    11 条回复    2016-04-20 11:49:29 +08:00
    BOYPT
        1
    BOYPT  
       2016-04-20 10:13:44 +08:00
    1 没看懂
    2 加密了的 key 不是明文。
    AstroProfundis
        2
    AstroProfundis  
       2016-04-20 10:21:32 +08:00
    1. 实现你说的那种情况,前提是网页或其他某个地方公布的公钥、和签名提交用的公钥,都被攻击者替换成自己的,概率比单点爆破低很多;当然不能说不存在

    2. passphrase 是在有人拿到了你的私钥文件的情况下提供的最后一层遮羞布
    sunjourney
        3
    sunjourney  
    OP
       2016-04-20 10:25:47 +08:00
    @BOYPT 第二个问题取消,我弄错了, private key 是加密的,我之前以为是未加密的,第一个问题是 git-scm 提供的一个分发设计,原理是把 pubkey 放到一个有 annotate 的 git tag 下,传到 remote 上, 使用者只要 git show 一下这个 tag 的 annotate ,就知道 gpg pubkey 了,实现分发
    AstroProfundis
        4
    AstroProfundis  
       2016-04-20 10:25:59 +08:00
    @AstroProfundis 又看了一遍,我也不确定我是不是看懂了你第一个问题... “只能靠发布公钥指纹在站点上可以防止这点” 网站也可以被黑啊,按这种极端推论的话...

    另外,理论上只要公钥发布出来的第一时间是发布者本人的那一个,然后别人存下了这个公钥,后面发现签名的公钥变成了另一个而发布者本人没有公布过“以上一个公钥签名的表示更换为下一个公钥的申明”,就可以认为有问题了

    至于怎么保证第一个公钥确实是发布者本人持有, WoT 就是专门解决这个问题的
    sunjourney
        5
    sunjourney  
    OP
       2016-04-20 10:33:04 +08:00
    @AstroProfundis 你的意思是:使用者要保证安全,还是要在 site 上看公钥,再看 tag 里的公钥,两个一致的情况下还是伪造的可能性只有 site 被 hack , git 被恶意提交了,发生这样事情的概率要很低?

    可如果 签名没有被 fake ,发布者在 site 上伪造 pubkey 的意义一点都没有。 git-scm 上的问题在于,公钥和内容都用 git pull 下来,没有分开。
    shiji
        6
    shiji  
       2016-04-20 10:44:39 +08:00
    1. 这个跟 git 没关系,是 GPG 的事,你可以看这个:
    http://security.stackexchange.com/questions/62791/pgp-gpg-verifying-authenticity
    更多可以参看这里: https://www.gnupg.org/gph/en/manual.html#AEN385
    即便是一般的安全证书,在没有预置 CA 的情况下,并且在和对方没有见过面(交换公钥)的情况下,你永远都不能得知和你通信的那个人究竟是不是真的。 gpg 靠的也是信任网。

    2. 那个密码能加密你的私钥,这样即使你这个文件被坏人通过各种手段偷走了(按理来说不应该被轻易偷走,这密码是最后一道防线了),你也能有三五天的时间更换密钥对。(比如用于登录 ssh 的 authorized keys , git 的公钥等等) 前提是你的密码够复杂。
    有的时候,比如在 osx ,系统在 keychain 里面帮你记住这个私钥密码,所以会造成这个密码没用的错觉。
    sunjourney
        7
    sunjourney  
    OP
       2016-04-20 10:50:50 +08:00
    @shiji @AstroProfundis 我提出的问题是 git-scm 设计的分发方式没有解决公钥分发方式,过度设计,还是得依靠 CA 、网站等。伪造者如果只能伪造内容,或是 hack 网站,只能实现其一,内容都是安全的。但 hacker 在 hack 到了你的机器,提交了假的内容并用他的的 gpg 签名,同时用 git-scm 的方式发布他的公钥,其它人 pull 下来的就是伪造的了。

    1 ,如果网站有公钥且网站没有被 hack ,其它人可以比对破之,但既然要比对,那我为何不就信任网站的公钥呢?见 2 。
    2 ,在 1 的前提下,网站既然可以发布公钥,使用者就没必要用 git-scm 的方法获取公钥了,因为网站公钥必然是有效的(网站与机器分离,网站就算被 hack ,假公钥也不能通过验证),只看网站即可。

    第二问题是我搞错了,已明白理解,感谢!
    AstroProfundis
        8
    AstroProfundis  
       2016-04-20 10:59:59 +08:00   ❤️ 1
    @sunjourney 论 GPG 公钥签名的重要性

    如果我攻破某个仓库,在里面放了我伪造的公钥,但我却没办法伪造发布者真正公钥上的各种交叉签名
    可以粗暴(并且不严谨)地解释为:没有和他人交叉签名的 GPG 公钥,其可信度和自签名的 SSL 证书一样,随缘
    sunjourney
        9
    sunjourney  
    OP
       2016-04-20 11:24:09 +08:00
    @AstroProfundis pro git 提供这样自验证的方案,一点也不 pro 。
    sunjourney
        10
    sunjourney  
    OP
       2016-04-20 11:40:14 +08:00
    @AstroProfundis 嗯,觉得是个烂设计,已经在 pro git 的 repo 上发 issue 去 讨论了,看看有没有什么玄机是我没看出来的。 pro git 这么不 pro ,有点怀疑自己也怀疑作者了
    AstroProfundis
        11
    AstroProfundis  
       2016-04-20 11:49:29 +08:00   ❤️ 1
    @sunjourney 要我说的话,这个只是解决公钥分发方便的问题,安全性校验是交给 PGP/GPG 本身了,于是真正管用的唯一手段是保证自己的公钥在 WoT 网络中并有足够的交叉签名以显得可靠(伪造难度较高,但通过一些社工手段显然还是可以伪造)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3611 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:32 · PVG 12:32 · LAX 20:32 · JFK 23:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.