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

https 能防范这种情况么?

  •  
  •   Newyorkcity · 2020-05-26 17:43:12 +08:00 · 3074 次点击
    这是一个创建于 1423 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小白第一次访问网站 60321 并输入账号密码登录,网站 60321 规范使用 HTTPS,小白这边使用 Chrome 等主流浏览器规范发起 HTTPS 。

    但好巧不巧小白和网站 60321 之间所有的数据( TCP 包)都经过黑客张三的主机并被张三捕获。假设黑客张三有足够的计算机网络知识,但他一开始并不知道网站 60321 的私钥公钥,那么张三能不能得到小白的账号和密码?

    如果能防范,为什么?小白和网站 60321 第一次通信,它们协商加密方式的数据也一样被张三捕获了。那小白那边怎么加密数据,张三能知道,之后小白加密好的数据再发过来又被张三捕获,那张三知道怎么加密却解密不了?那张三解密不了,网站 60321 的服务器却能解密?这怎么做到的啊?

    如果不能防范,那 HTTPS 所防范的危险场景是?

    谢谢!
    第 1 条附言  ·  2020-05-26 18:47:52 +08:00
    何必回复一些带有嘲讽或优越的话呢?

    是的,存在这样的公钥和私钥能做到数据被公钥加密后无法被公钥解密但能被私钥解密,具体可以看一下 RSA 实现原理。

    我觉得这样的回复就 very nice
    zpfhbyx
        1
    zpfhbyx  
       2020-05-26 17:44:58 +08:00
    建议了解下 https
    wnpllrzodiac
        2
    wnpllrzodiac  
       2020-05-26 17:45:41 +08:00 via Android
    对称加密 非对称加密了解下
    richard1122
        3
    richard1122  
       2020-05-26 17:46:00 +08:00
    请搜索 PKI
    wnpllrzodiac
        4
    wnpllrzodiac  
       2020-05-26 17:46:26 +08:00 via Android   ❤️ 1
    推荐 日本人 结城浩 的图解密码学。非常有帮助。
    villivateur
        5
    villivateur  
       2020-05-26 17:47:02 +08:00 via Android
    建议了解下,证书颁发商、受信任、本地证书等概念
    xiri
        6
    xiri  
       2020-05-26 17:49:07 +08:00   ❤️ 1
    公钥加密的数据,只能用私钥解密,而私钥又不会经过网络传输
    marcushbs
        7
    marcushbs  
       2020-05-26 17:51:01 +08:00
    128 位量子计算机上线以后就危了
    lxk11153
        8
    lxk11153  
       2020-05-26 17:52:51 +08:00
    @xiri #6 弱弱问下 那种抓包程序是如何抓到 https - form 请求里的密码的?
    AngryMagikarp
        9
    AngryMagikarp  
       2020-05-26 17:53:55 +08:00   ❤️ 8
    HTTPS 使用的是非对称加密,交换的只是公钥。比如小白拿到网站的公钥后,用这个公钥加密,那么加密后的数据只能用网站的私钥才能解开。

    因此,黑客获取数据是无法解密的。不过黑客可以作为一个中间人,把他的公钥给你,然后把他自己的公钥给网站,中间做一次转发。但这样子浏览器会发现他的公钥和“备案”在证书提供商上的不一样,然后给用户危险警告。
    ruixue
        10
    ruixue  
       2020-05-26 17:54:57 +08:00   ❤️ 3
    吾尝终日不食,终夜不寝,以思,无益,不如学也
    momocraft
        11
    momocraft  
       2020-05-26 17:55:47 +08:00
    你都知道协商这个词了,再补上密钥协商的过程就知道了
    warcraft1236
        12
    warcraft1236  
       2020-05-26 17:59:04 +08:00
    我去,https 不就是防范这种事的吗
    Vegetable
        13
    Vegetable  
       2020-05-26 18:01:20 +08:00
    @lxk11153 #8 web 场景的中间人攻击原理就是,中间人和浏览器说自己是服务器,和服务器说自己是浏览器。

    https 的目的就是通过无法被外界获取的证书,确保浏览器不会被中间人蒙蔽,知道自己连接的人是否可信。
    miyuki
        14
    miyuki  
       2020-05-26 18:12:28 +08:00
    @lxk11153

    通常是在系统中安装了中间人 CA,所以系统会信任,中间人替换证书后一般也就不会报错

    对抗技术如客户端 ssl pinning
    eGlhb2Jhb2Jhbw
        15
    eGlhb2Jhb2Jhbw  
       2020-05-26 19:09:41 +08:00   ❤️ 12
    看了 append 以为 lz 会被喷的很惨,有一瞬间有点心疼 lz,结果翻了翻,发现大家都还好吧。。。不知道哪里伤害到了 lz 。
    PHPer233
        16
    PHPer233  
       2020-05-26 19:13:54 +08:00 via Android
    建立 SSL 连接时浏览器要验证 12306 网站的证书是否合法,显然黑客作为中间人无法获取到 12306 的 SSL 证书,所以小白在打开网站时浏览器会提示证书错误并终止访问。
    gefranks
        17
    gefranks  
       2020-05-26 19:25:16 +08:00
    如果黑客(组织)有足够的能力让浏览器信任的 CA 签了一张有效的证书的话,那还是能被中间人攻击的
    Newyorkcity
        18
    Newyorkcity  
    OP
       2020-05-26 19:29:11 +08:00
    @PHPer233 额,证书这个我还没看过。即便使用证书,小白和 60321 之间的通讯的 TCP 包正常情况下总是要经过一些路由器之类的中间节点中转的吧?张三把自己的主机加入这个网络中伪装成一个路由器,这个使用证书什么的应该 i 防不了吧?
    Windelight
        19
    Windelight  
       2020-05-26 19:35:24 +08:00 via Android
    你应该了解一下为什么 Wireshare 或者 charles 抓包软件抓 https 时为什么要安装证书?
    ODD10
        20
    ODD10  
       2020-05-26 19:36:00 +08:00 via iPhone
    @miyuki #14 不是客户端,只是浏览器访问 web,那怎么办?
    woodensail
        21
    woodensail  
       2020-05-26 19:39:05 +08:00
    我看了开头还以为楼主想说 HSTS 的事儿,结果楼主竟然试图破解 rsa……
    ODD10
        22
    ODD10  
       2020-05-26 19:39:58 +08:00 via iPhone
    @Newyorkcity #18
    小白路过,路由器只负责转发,又不劫持,劫持还得证书不是?

    得先装伪装证书劫持成功才能解密吧。装的伪装证书校验不通过也抓不了包吧?
    rrfeng
        23
    rrfeng  
       2020-05-26 19:42:08 +08:00 via Android   ❤️ 3
    看了 append 以为大家都在喷…然后发现并不是,实际上 90% 人都说错了。

    这部分不涉及证书,非对称加密 RSA 等等,更贴切的的是密钥交换算法例如 DH,还有完美前向加密 PFS 。
    rrfeng
        24
    rrfeng  
       2020-05-26 19:44:32 +08:00 via Android
    另外还有一点很重要,张三对数据流是只读的,还是可以篡改。

    如果只读,上面的回答(除了我)全是错的。
    如果可篡改,那么可以伪装成 server,才需要涉及到 CA 相关知识。

    HTTPS 有两个作用:身份验证,传输加密。要分开看哦
    ODD10
        25
    ODD10  
       2020-05-26 19:48:02 +08:00 via iPhone   ❤️ 1
    举个例子:

    代理软件也有抓包功能,平时不开启抓包,apple.com 能正常访问,Apple Store 也能正常联网;但如果开启了抓包功能,并加入了 apple.com 以及 apple 多级域名,apple.com 访问不了,Apple Store 也无法联网。

    代理软件应该是网关吧?
    我想这可以说明,单纯的转发没啥问题,一但劫持,就无法联网,所以路由器不是个问题。
    djs
        26
    djs  
       2020-05-26 19:55:41 +08:00 via iPhone
    只要信任了他的假证书,我觉得是可以的
    grimpil
        27
    grimpil  
       2020-05-26 20:34:52 +08:00 via iPhone
    12306 是被敏感词了还是有啥梗,为啥要倒过来说
    Newyorkcity
        28
    Newyorkcity  
    OP
       2020-05-26 21:08:49 +08:00
    @grimpil 额,就是尽量脱离具体场景,避免回答一些 12306 才有的特性。
    ljpCN
        29
    ljpCN  
       2020-05-26 21:59:42 +08:00 via Android
    比如你用 charles 或者 fiddler 代理 https 请求,你想要解密报文内容的话,计算机需要信任证书。至于你说中间节点可以读取,它能读取的是加密后的内容而已。
    CEBBCAT
        30
    CEBBCAT  
       2020-05-26 22:04:01 +08:00 via Android   ❤️ 1
    这不算嘲讽或秀优越,这种蠢问题没人直接骂你算是不错的了。

    只要顺着 HTTPS 搜索一下,很快就有帖子教给你机密性、完整性、真实性,教给你为什么沃通不被采信。你就是自以为想得很多,其实闭门造车。
    liuminghao233
        31
    liuminghao233  
       2020-05-26 22:18:08 +08:00 via iPhone
    有点奇怪
    你看完 https 的百度百科不就知道有 rsa 了嘛
    你百度搜索 https 第一个就是 https 的百度百科嘛
    你百度都没有用过吗?(
    ???
    wshcdr
        32
    wshcdr  
       2020-05-26 22:32:09 +08:00
    HTTP 主要防范 中间人攻击, 且能保证服务器的真实性
    otakustay
        33
    otakustay  
       2020-05-26 23:03:17 +08:00   ❤️ 1
    这里的关键点是:

    1. 如果张三不劫持 HTTPS 的握手,那么他理论上无法算出 60321 网站的私钥,所以他无法解密小白的请求并得到里面的内容
    2. 如果帮三试图劫持 HTTPS 的握手(包括劫持 DNS 的手段),那么他理论上无法造出一个符合 60321 这个域名的合法证书来,过不了浏览器的证书信任

    所以理论上是安全的,只要小白看到证书不受信任的提示别傻子一样强行继续访问。张三知道怎么加密(算法公开),只是他拿不出这个加密用的私钥,签不出这个证书,浏览器会直接不信任而中止发送请求
    otakustay
        34
    otakustay  
       2020-05-26 23:05:02 +08:00
    在 HTTPS 的场景下,要攻击小白最好的办法就是骗小白装一个浏览器插件或者送他一个干掉了证书信任校验的套壳浏览器,反正都小白了,有挺大概率是能骗的
    shadeofgod
        35
    shadeofgod  
       2020-05-27 00:00:27 +08:00   ❤️ 1
    正好前几天复习了下基础概念总结了下

    https://zoubingwu.com/2020-05-20/cryptography/
    misaka19000
        36
    misaka19000  
       2020-05-27 00:03:12 +08:00
    V 站现在这么友善啊,楼主这种伸手党大家也回答的的这么有耐心
    ZRS
        37
    ZRS  
       2020-05-27 00:07:14 +08:00
    不能,当然如果你的计算能力足够指的是接近无穷的话,可以。不过不存在现实意义
    systemcall
        38
    systemcall  
       2020-05-27 01:53:53 +08:00 via Android   ❤️ 1
    在现有的算力下不能,现在的加密足够应对产品生命周期内在已知科技树下发展出来的技术了
    不过如果 SHA256 之类的可以破解了的话,确实是什么都可以做到的
    如果有办法让对方信任自己的证书的话是可以的,已信任的证书颁发机构颁发的证书会被浏览器信任
    在现有科技树下的话,假设是正常的较新的浏览器,可以路由层面拦截 https 跳转,不过现在的浏览器会有警告。或者用自己的证书来中间人攻击,不过如果那个证书对方没有信任的话是不行的,信任过的话确实是可以发起中间人攻击,发生过这种事。更简单的方法是骗用户装个自己的套壳浏览器,或者是想办法让用户装了的软件里面的套壳浏览器帮忙完成这些事。如果是普遍可以提权的 Windows,让一些程序帮忙在内核态做些微小的工作都没有什么问题,比如某杀软的驱动就经常被拿来用
    利用证书来加密在现在是十分常见的事,利用已经信任的证书来作恶也的确是发生过
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1406 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 23:51 · PVG 07:51 · LAX 16:51 · JFK 19:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.