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

怎样在无安全信道的情况下抵抗中间人攻击

  •  
  •   disk · 2017-07-09 20:32:21 +08:00 via Android · 6000 次点击
    这是一个创建于 2726 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在的 ssl 是因为有根证书担保,而根证书是预置在电脑里的。想问下,如果通讯双方没有预先协商任何内容且信道出入口完全被控制的情况下,还有没有办法抵抗中间人攻击。
    83 条回复    2017-07-10 20:26:15 +08:00
    ipconfiger
        1
    ipconfiger  
       2017-07-09 20:36:10 +08:00
    无解
    linfx7
        2
    linfx7  
       2017-07-09 20:36:20 +08:00 via iPhone
    DH 交换
    jyf007
        3
    jyf007  
       2017-07-09 20:36:20 +08:00
    拜占庭将军问题?
    albertofwb
        4
    albertofwb  
       2017-07-09 20:37:30 +08:00 via Android
    如果你指的是 wifi 的局域网情况下,MAC 地址静态绑定可以有效抵抗中间人攻击。
    neroxps
        5
    neroxps  
       2017-07-09 20:37:57 +08:00 via iPhone
    打电话告诉对方秘钥。🙈
    jyf007
        6
    jyf007  
       2017-07-09 20:37:58 +08:00
    @albertofwb 这个也是双方预先协商的结果
    jyf007
        7
    jyf007  
       2017-07-09 20:38:13 +08:00
    @neroxps 电话也可以监听
    albertofwb
        8
    albertofwb  
       2017-07-09 20:40:18 +08:00 via Android
    @jyf007 如果是企业内网或者是一个已知的网络情况下,也就是说路由器和网关的 MAC 地址是已知的,运维人员可以在每台主机上直接绑定 MAC 地址。 这样一来,在这个局域网环境下就无法实施中间人攻击。
    jyf007
        9
    jyf007  
       2017-07-09 20:41:45 +08:00
    @albertofwb 通讯双方没有预先协商任何内容且信道出入口完全被控制的情况下 根据字面理解,这个 MAC 地址就是双方预先协商的情况
    ZRS
        10
    ZRS  
       2017-07-09 20:42:20 +08:00
    走量子信道协商对称加密密钥
    jyf007
        11
    jyf007  
       2017-07-09 20:43:34 +08:00
    @ZRS 通讯双方没有预先协商 这个是预先协商的过程
    xenme
        12
    xenme  
       2017-07-09 20:43:38 +08:00 via iPhone
    量子通信
    jyf007
        13
    jyf007  
       2017-07-09 20:45:40 +08:00
    @xenme 通讯双方没有预先协商 这个是预先协商的过程
    blankme
        14
    blankme  
       2017-07-09 20:46:54 +08:00
    蹭另一个帖子的热点:量子通信
    知乎上的这个答案讲的挺不错的,可以看看~
    https://www.zhihu.com/question/20919153
    neroxps
        15
    neroxps  
       2017-07-09 20:47:05 +08:00 via iPhone
    @jyf007 幽默,幽默
    ZRS
        16
    ZRS  
       2017-07-09 20:47:42 +08:00
    @jyf007 那似乎是没有办法的...信任链的基础是你本身拥有可信任的东西,证书体系下就是预置的根证书,如果什么都没有是无法建立安全通信的。
    blankme
        17
    blankme  
       2017-07-09 20:48:54 +08:00
    @jyf007
    就是因为没有预先协商,所以才需要安全的协商过程,有什么问题?
    disk
        18
    disk  
    OP
       2017-07-09 20:53:00 +08:00 via Android
    当然两方得互相知道对方的通讯地址,不然建立不了信道。我这里是指抽象的通讯,不特指计算机网络。我再补充一些并宽限条件吧,通信双方是接入到公共通信域,包含第三方,被控制的是双方各自的接入口,可以被监听,阻挡,篡改等等。
    jyf007
        19
    jyf007  
       2017-07-09 20:55:39 +08:00
    @blankme @blankme 在无安全信道的情况 审题不仔细
    这个才是回答
    https://www.zhihu.com/question/23167269
    neilp
        20
    neilp  
       2017-07-09 20:55:43 +08:00 via iPhone
    目前无解
    jyf007
        21
    jyf007  
       2017-07-09 20:57:47 +08:00
    @neilp 我认真查了一下,是拜占庭将军问题
    misaka20038numbe
        22
    misaka20038numbe  
       2017-07-09 20:58:04 +08:00
    向对方发送信息,让对方把加密后的信息回传.然后只有自己知道解密过程.这样中间人虽然知道你们做了什么,但是应该没办法破解加密信息吧.
    jyf007
        23
    jyf007  
       2017-07-09 20:58:42 +08:00
    @misaka20038numbe 拜占庭将军问题
    ZRS
        24
    ZRS  
       2017-07-09 21:02:19 +08:00
    @jyf007 没懂这个问题和拜占庭将军问题有什么关系...
    jyf007
        25
    jyf007  
       2017-07-09 21:03:58 +08:00
    @disk @ZRS 拜占庭将军问题解决的是消息可信的概率度。
    blankme
        26
    blankme  
       2017-07-09 21:06:58 +08:00
    @ZRS 感觉他就是跳出来这个词语,然后开始强行套用。。。
    misaka20038numbe
        27
    misaka20038numbe  
       2017-07-09 21:07:31 +08:00
    @jyf007 我这样做中间人怎么获取到加密的信息呢
    jyf007
        28
    jyf007  
       2017-07-09 21:09:01 +08:00
    @misaka20038numbe 伪造证书
    disk
        29
    disk  
    OP
       2017-07-09 21:09:35 +08:00 via Android
    @xenme
    @blankme
    @ZRS
    嘿,你们的量子信道得先建起来,中间人自己做了对量子向 B 冒充自己是 A 怎么办。量子通信假设量子预分配不受干扰
    @misaka20038numbe
    表达没懂什么意思,中间人不仅能监听还能冒充
    jyf007
        30
    jyf007  
       2017-07-09 21:11:08 +08:00
    @disk 可以故意伪造假消息,但是要遵循拜占庭将军问题的解法
    jyf007
        31
    jyf007  
       2017-07-09 21:17:10 +08:00
    @blankme。即错误节点可以做任意事情(不受 protocol 限制),比如不响应、发送错误信息、对不同节点发送不同决定、不同错误节点联合起来干坏事等等。总之就是说,没有节点会出现比这更严重的错误。很显然,拜占庭错误是 overly pessimistic 的模型,因为这种错误实际环境中比较少见。那么为什么要研究这个模型呢?其中最简单的一个原因是,如果某个一致性算法能够保证在系统出现 f 个拜占庭错误时保持系统一致,那么这个算法也就能够保证在出现 f 个任意其他错误的时候也保持系统一致。错误模型有上限,肯定也就有一个下限( overly optimistic,没有比它还要弱的模型)。这个下限就是‘ fail-stop ’模型。这个模型的假设是:当一个节点出错,这个节点会停止运行,并且其他所有节点都知道这个节点发生了错误。用同样的逻辑,如果某个一致性算法不能保证在系统出现 f 个错误的时候保持一致,那么这个算法也就没法处理其他 f 个任意其他问题。应用这些错误模型,可以对不同算法进行比较,也可以对具体算法的 cost 进行讨论。

    作者:赵伟辰
    链接: https://www.zhihu.com/question/23167269/answer/42345736
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    blankme
        32
    blankme  
       2017-07-09 21:21:09 +08:00
    @disk
    嗯,仔细想了下确实是这样,只能防监听,防不了伪装。
    ZRS
        33
    ZRS  
       2017-07-09 21:21:28 +08:00
    @disk 量子态是不可复制的,中间人不可能在不暴露自己的情况下进行操作,仅仅观测就会改变粒子的量子态。所以量子密钥分发是原理上防中间人的。如何实现在有一定噪音的量子信道上进行密钥分发就是目前的研究方向,具体实现我不是做这方面的,不怎么懂。
    blankme
        34
    blankme  
       2017-07-09 21:29:22 +08:00
    @ZRS
    问题出在题主的“没有预先协商任何内容”,相当于是说:我要和一个完全不认识的陌生人交流。
    而中间人是另一个完全不认识的陌生人,所以他完全可以伪装。

    A 和 B 还需要一种方式用于验证身份,仅仅通讯安全还不够。
    disk
        35
    disk  
    OP
       2017-07-09 21:29:23 +08:00 via Android
    @ZRS 对,你说的没错,但它有个前提,就是量子信道事先存在,然后的传输不受干扰。如果这个信道本身就不可信,那就 gg 了。你以为这个信道是 a~b,实际上建立好的信道是 a~c--b。
    ZRS
        36
    ZRS  
       2017-07-09 21:34:58 +08:00
    @disk 如果是 acb 的话,量子信道根本建不起来...照你这么说的话,那就真的没办法了...
    jyf007
        38
    jyf007  
       2017-07-09 21:38:53 +08:00
    @blankme 我的意思是指通过计算可信通道的概率判定是否可信,但是防伪装还没想出来
    jyf007
        39
    jyf007  
       2017-07-09 21:44:34 +08:00
    @disk 好吧,“ Alice 和 Bob 相对于 Eve 的一个优势是它们共享了一个密钥 ” 这个是事先约定。
    jyf007
        40
    jyf007  
       2017-07-09 21:49:28 +08:00
    @disk 建立可信信道后的红皇后问题,估计靠 google 这一步了。
    disk
        41
    disk  
    OP
       2017-07-09 21:51:38 +08:00 via Android
    @jyf007 拜占庭将军算法最初用来在网络中排除不可信或错误节点,应该是连通图且路径是可信的?如果某节点与所有其它节点间的路径均不可信,gg 啊。
    jyf007
        42
    jyf007  
       2017-07-09 21:57:05 +08:00
    @disk 这个 gg 我不接,因为是概率上的可信信道了。
    xenme
        43
    xenme  
       2017-07-09 22:36:55 +08:00
    那就无解了嘛,这有啥有争论的。
    starship
        44
    starship  
       2017-07-09 22:53:24 +08:00
    目前无解,开开脑洞还是可以的。
    比如量子纠缠,量子隐形传输,超距作用等,或者等未来心灵感应开源也是一种办法:)
    johnlui
        45
    johnlui  
       2017-07-09 22:56:50 +08:00 via Android
    楼主对中间人攻击的理解有误呀…根证书是保证可信的,是一门生意,理论上讲还增大了被伪造的可能性。
    johnlui
        46
    johnlui  
       2017-07-09 23:00:14 +08:00 via Android
    HTTPS 中间人攻击防止办法:检测证书。证书和私钥一一对应,私钥严格保密,证书公开。没有私钥,无法形成加密解密闭环,所以别人拿到证书也没有用。
    feather12315
        47
    feather12315  
       2017-07-09 23:02:36 +08:00 via Android
    @linfx7 DH 交换无法抵御中间人攻击
    disk
        48
    disk  
    OP
       2017-07-09 23:29:05 +08:00 via Android
    @johnlui
    https 中间人可不会窜改证书,它会伪造一个除公钥内容以外和原证书一模一样的证书,如果原证书没有 ca 作担保,让根证书给你签名,用户你咋知道自己接收到的网站证书是网站的还是中间人的
    johnlui
        49
    johnlui  
       2017-07-09 23:39:51 +08:00 via Android
    @disk 如果无法事先获取证书,那逻辑上是无解的。我依然认为根证书是互联网时代的垄断生意,其技术目的是为了可信,而不是防止伪造。完全可以通过各种手段让一个可信 ca 签发出一个可信证书。结论就是:无解。
    johnlui
        50
    johnlui  
       2017-07-09 23:43:35 +08:00 via Android
    @disk 话说我重读了你的回复,感觉似乎对证书还是存在一些误解呀…… 证书签发是为了身份可信,即为了确认拥有域名所有权或公司授权;而无法防止内容篡改。楼主自己申请过证书嘛……
    maplerecall
        51
    maplerecall  
       2017-07-10 03:11:23 +08:00 via Android
    不用钻牛角尖,无安全信道且无任何预先协商的话就是无解,举个简单的例子,你要寄东西到一个地方,但你除了地址什么都不知道,甚至对方都不知道会收到东西,那么你无论如何也不可能保证东西一定被正确的寄到。
    jq8778
        52
    jq8778  
       2017-07-10 03:17:09 +08:00
    “没有预先协商任何内容”,你要如何定义这句话?
    比如,这句话意味着“无任何预埋设置的话”,那么通信都无法建立起来,因为你连对面使用的是什么协议都不清楚...
    msg7086
        53
    msg7086  
       2017-07-10 03:31:59 +08:00
    中间人有很多种攻击方法啊。
    中间人跑到收信方家里把收信人绑起来扔进衣橱里,然后自己坐在电脑前监听你发的数据,你说你怎么防御。
    如果中间人只是窃听而不能输入数据的话,DH 交换可以保证端到端加密后的数据无法被中间人获取。
    如果中间人可以向传输介质输入数据的话,面对两个完全对等的陌生人,你是没有办法区分的。
    datocp
        54
    datocp  
       2017-07-10 04:13:37 +08:00 via Android
    试试 stunnel ?
    stunnel 的连接过程有三张证书
    至少一张证书对链路进行加密
    服务器对客户端进行 pki 认证识别身份 /DH
    客户端对服务器证书进行 ca 签识别。还有各种对证书进行 checkhost 相对 ss 的 psk 认证过程。实现起来很安全,特别是客户端对服务器身份进行识别,以前部分时间段经常出错,但是去掉这个配置连接就通了,是不是代表就被时间人了。stunnel 目前觉得是最安全了。
    autoxbc
        55
    autoxbc  
       2017-07-10 04:39:38 +08:00   ❤️ 1
    如果有解的话,为什么还有根证书,密码专家闲的无聊?
    ghostheaven
        56
    ghostheaven  
       2017-07-10 07:16:04 +08:00 via Android
    双方都通过公网有证书的服务器中转通信
    firemiles
        57
    firemiles  
       2017-07-10 07:46:51 +08:00 via Android
    @ghostheaven 那和公网服务器这段怎么加密
    ghostheaven
        58
    ghostheaven  
       2017-07-10 07:51:57 +08:00 via Android
    @firemiles 公网 有证书 的服务器
    firemiles
        59
    firemiles  
       2017-07-10 07:58:26 +08:00 via Android
    @ghostheaven 也就是要有很服务器通信的根证书
    disk
        60
    disk  
    OP
       2017-07-10 08:09:45 +08:00 via Android
    @johnlui 证书的目的是互相证明对方身份,当然不防篡改,但被试图篡改实现身份盗用的中间人会立即暴露。
    disk
        61
    disk  
    OP
       2017-07-10 08:17:50 +08:00
    总结一下,在通信双方的接入口被控制情况下,双方无法做到身份证明。如果被控制的仅是信道的中间节点,那么由其它安全信道引入可信第三方,或是事先协商身份验证方式的情况下,中间人就很难实现欺骗了。
    zjqzxc
        62
    zjqzxc  
       2017-07-10 08:26:18 +08:00
    单纯考虑计算机之间的通信,中间人攻击是无解的,无论如何都无解

    但是如果可以打电话来确认一些信息,至少在近几年还是可以避免中间人攻击的( 1、实时性; 2、人工进行了基于声音的身份认证)

    长远来看,如果能对语音通讯实施实时中间人攻击的话。。。唔,希望有生之年不会有这种技术吧。
    swulling
        63
    swulling  
       2017-07-10 08:36:39 +08:00 via iPhone
    @jyf007 监听没关系,告诉公钥就好了。只要不是被拦截
    realpg
        64
    realpg  
       2017-07-10 09:15:28 +08:00
    @zjqzxc #62
    这个 电话诈骗啊 23333
    您好我是建设银行您信用卡透支 23 万
    rswl
        65
    rswl  
       2017-07-10 09:35:21 +08:00
    超展开了。。
    disk
        66
    disk  
    OP
       2017-07-10 10:01:54 +08:00 via Android
    @zjqzxc 前提是电话两端的人都认识或电话线路安全。身份预先验证或安全旁路,满足后都不成问题。
    hellove1985
        67
    hellove1985  
       2017-07-10 10:12:05 +08:00
    无解
    woyao
        68
    woyao  
       2017-07-10 10:33:04 +08:00
    自己实现一套类似 SSL 的加密通讯协议,目前有一些银行的客户端就是这样搞的,虽然是走的 HTTP 协议,但是自己实现了类似 SSL 的加密通讯协议来防止中间人攻击!
    coolypf
        69
    coolypf  
       2017-07-10 11:18:31 +08:00
    两人先见面,约定一个密钥。然后就可以用 TLS-PSK 啦。
    至于量子通信,太超前了……
    maomo
        70
    maomo  
       2017-07-10 11:46:16 +08:00
    试问在什么情况下,通讯双方需要在“没有预先协商任何内容”的条件下进行通信?
    disk
        71
    disk  
    OP
       2017-07-10 12:02:18 +08:00 via Android
    @maomo 知道通讯地址,能够建立起信道的两个陌生人。
    disk
        72
    disk  
    OP
       2017-07-10 12:05:26 +08:00 via Android
    @maomo 这只是理论研究。实际情况下当然复杂的多,现实中很多也是先接通然后开始协商,最后在正式通信,接通前也没有协商任何内容啊。
    lucifer9
        73
    lucifer9  
       2017-07-10 12:14:32 +08:00
    俩人见面,然后在一起
    maomo
        74
    maomo  
       2017-07-10 12:15:27 +08:00
    @disk 那么问题来了:在理论上,在“没有预先协商任何内容”的条件下,两个陌生人如何安全地进行地址交换?
    disk
        75
    disk  
    OP
       2017-07-10 12:25:25 +08:00 via Android
    @maomo 哈哈,这个是前提条件,两个不认识的人想要通信,必须要知道知道地址,借助第三方也好,旁路也好,身份特征也好。如果你要和一个人通信,但不知道那个人的任何信息,那又怎么知道是要和哪个人通信,变成逻辑问题了,死结啊。
    natforum
        76
    natforum  
       2017-07-10 12:26:56 +08:00
    双重密钥交换,mac 地址验证,ssl+res 流量加密
    maomo
        77
    maomo  
       2017-07-10 12:40:25 +08:00
    @disk 所以结论是如果要进行安全通信,至少要有一个安全信道
    maomo
        78
    maomo  
       2017-07-10 12:42:55 +08:00
    @disk 没有安全信道,也就无法安全地进行地址交换
    disk
        79
    disk  
    OP
       2017-07-10 13:02:23 +08:00 via Android
    @maomo 或者预先协商身份验证
    facetest
        80
    facetest  
       2017-07-10 14:39:56 +08:00
    找个无人的地方,比如沙漠中央、珠峰顶上,双方口头交互秘钥,只准计在脑子里。
    long9418
        81
    long9418  
       2017-07-10 15:16:19 +08:00
    两台电脑直连,就没有中间人了。
    jyf007
        82
    jyf007  
       2017-07-10 16:53:23 +08:00
    @facetest 估计都记不住了
    jyf007
        83
    jyf007  
       2017-07-10 20:26:15 +08:00
    @long9418 散热风扇,硬盘灯都可以窃听
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3392 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 10:58 · PVG 18:58 · LAX 02:58 · JFK 05:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.