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

GnuPG、PGP、OPENPGP、Web of trust 绕了半天,还是没明白不用 PKI 和 CA, PGP 是如何保证公钥交换过程中不被篡改的?它的意思是公钥传输是一次性的,和加密通信是一般是相互独立的过程,所以不用担心?

  •  
  •   thekll · 2017-03-02 01:54:52 +08:00 · 3486 次点击
    这是一个创建于 2625 天前的主题,其中的信息可能已经有所发展或是发生改变。
    12 条回复    2017-03-02 22:40:12 +08:00
    ryd994
        1
    ryd994  
       2017-03-02 06:38:32 +08:00 via Android   ❤️ 1
    PGP 不保证
    公钥首先从公网取得, PGP 假设你能和好基友见面并验证身份,然后你的好基友再和好基友见面,你的好基友还可以给别人签名。最后理论上能间接验证所有人。也就是说他假设你整个关系网都在用 PGP 。
    这就是为啥 gpg 没流行
    AstroProfundis
        2
    AstroProfundis  
       2017-03-02 08:22:50 +08:00
    保证公钥交换过程中不被篡改的方式是线下拿着彼此的有效身份证件交换公钥;所以 WoT 事实上保证的是公钥和上面声称的身份的对应关系,至于你个人有没有足够的能力保证私钥安全,甚至说直接拿着高仿身份证件参与接头而对方无力识破,那就没办法了

    理论上多节点互相验证形成网状结构之后可以降低这种风险,所以有人会设置某个公钥有超过 X 个自己(直接或有条件地间接)信任的公钥签名后才受到信任,或者类似的权重计算模型
    msg7086
        3
    msg7086  
       2017-03-02 08:34:03 +08:00
    需要用政府发行的可靠证件来确认身份。
    lhbc
        4
    lhbc  
       2017-03-02 08:49:06 +08:00 via iPhone
    PGP 的特性确保了即使公钥被篡改也无法欺骗和盗取信息。
    但没有技术手段去验证公钥的真实性,简单来说 PGP 解决的是熟人之间的通讯安全。
    wizardoz
        5
    wizardoz  
       2017-03-02 09:16:54 +08:00
    不存在什么公钥交换吧,我只用过 GPG ,它是要把自己的公钥提交到公共的服务器上。通过邮件的方式验证公钥的真实性。以后别人可以到服务器上查询另一个人的公钥。
    julyclyde
        6
    julyclyde  
       2017-03-02 12:55:37 +08:00
    lz 需要注意的一点是:
    公钥传输多少次都不会影响安全性
    私钥绝对不允许传输

    PGP 模型需要(人、 public key fingerprint )当面验证
    thekll
        7
    thekll  
    OP
       2017-03-02 16:43:37 +08:00 via iPhone
    @julyclyde

    我的表述有些问题。

    在 PKI 体系下,证书实际就是在传输公钥,假如证书被中间人替换掉你觉的会不会影响安全?这一点也是我问题的出发点。

    通过仔细阅读 wikipedia 英文相关条目,还是可以基本理解 PGP 的原理及不足之处。它的确比中心化的 CA 证书体系更有优势(直接端到端的加密),但可能也更麻烦(用户自己管理公私钥)。公钥交换的确是独立的过程(通过各种 PGP 客户端来维护密钥,相互签名来认证公钥等)。

    https://en.m.wikipedia.org/wiki/Pretty_Good_Privacy
    julyclyde
        8
    julyclyde  
       2017-03-02 20:50:08 +08:00
    @thekll 问题是你考虑的这个问题不存在……传输的内容是被 CA 签名过的
    thekll
        9
    thekll  
    OP
       2017-03-02 21:18:42 +08:00
    @julyclyde X.509 证书当然是签名过的。这和伪造一个同样签名过的证书又没有冲突,而且实际上某机构就这样干过。
    自签名的证书可以达到同样效果,只要你信任它。

    可以看看 mitmproxy 的证书原理:
    http://docs.mitmproxy.org/en/stable/certinstall.html
    AstroProfundis
        10
    AstroProfundis  
       2017-03-02 21:34:14 +08:00
    @thekll
    > X.509 证书当然是签名过的。这和伪造一个同样签名过的证书又没有冲突,而且实际上某机构就这样干过。
    PKI 的基础就是要认为 CA 可信,都到 CA 伪造签名了这就没得玩了啊

    你可以认为 WoT 模型里面每个人都是自己的 CA, 然后一堆人互相交叉签名

    PKI 里面认证的模式以最常见的域名证书为例是验证你控制了这个域名的 web 服务器或者 DNS 解析或者管理员邮箱, WoT 里面常见的认证模式是验证你拥有和公钥上标记匹配的现实身份
    julyclyde
        11
    julyclyde  
       2017-03-02 21:55:26 +08:00
    @thekll 如果 CA 会随便签发证书而不付出任何代价,那这个体系确实就崩了。你既然都理解,还问什么呢?
    thekll
        12
    thekll  
    OP
       2017-03-02 22:40:12 +08:00 via iPhone
    我想一种安全体系大概是考虑各种因素后形成的折中方案,但这并影响另一群程序员想要实现更安全的、更不受控制的方案的理想。 PGP 的初衷应该就是这样吧。

    另一方面,我一直觉得作为程序员应该能站在一个更高的视角思考问题,因为你在指挥着一堆符号、一堆 api 、协调着大量的计算资源,让他们按照你的理性逻辑,去实现复杂的功能,没有这种全局性和哲学思维方式,只能陷入一种 bug 满天飞的、到处补漏的境况。

    人们已经认识到智能只能通过学习获得,我们还是更细心的去理解别人所说的每一句话、更谦虚的学习吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4332 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 05:19 · PVG 13:19 · LAX 22:19 · JFK 01:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.