中间人攻击

本文最后更新于:2024年6月29日 晚上

中间人攻击

  • 中间人攻击(Man-in-the-MiddleAttack,简称"MITM攻击”)是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制,在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。
  • 大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击,例如,SSL协议可以验证参与通讯的一方或双方使用的证书是否是由权威的受信任的数字证书认证机构(CA)颁发,并且能执行双向身份认证。

中间人攻击过程

  1. 客户端发送请求到服务端,请求被中间人截获。
  2. 服务器向客户端发送公钥。
  3. 中间人截获公钥,保留在自己手上,然后自己生成一个伪造的公钥,发给客户端。
  4. 客户端收到伪造的公钥后,生成加密值发给服务器。
  5. 中间人获得加密值,用自己的私钥解密获得真秘钥,同时生成假的加密值,发给服务器。
  6. 服务器用私钥解密获得假密钥,然后加密数据传输给客户端。

HTTPS 如何防范中间人攻击

  • 数字签名:用私钥对某个文件的散列值进行签名就像一个人亲手在信件最后签上了自己的名字一样,证明这份文件 / 这段消息确实来自私钥的拥有者,在通信中,双方每次在写完消息之后,计算消息的散列值,并用自己的私钥加密生成数字签名,附在报文后面,接收者在收到消息和数字签名之后,先计算散列值,再使用对方的公钥解密数字签名中的散列值,进行对比,如果一致,就可以确保该消息确实是来自于对方,并且没有被篡改过。
  • 数字证书认证机构:如果中间人在会话建立阶段把双方交换的真实公钥替换成自己的公钥了,那么中间人还是可以篡改消息的内容而双方并不知情,为了解决这个问题,需要找一个通信双方都信任的第三方来为双方确认身份,这就像大家都相信公证处,公证处拿着自己的公章为每一封信件都盖上了自己的章,证明这封信确实是由本人发出的,这样就算中间人可以替换掉通信双方消息的签名,也无法替换掉公证处的公章,这个公章,在二进制的世界里,就是数字证书,公证处就是 CA(数字证书认证机构)
  • 数字证书:申请人将一些必要信息(包括公钥,姓名,电子邮件,有效期)等提供给 CA,CA 在通过各种手段确认申请人确实是他所声称的人之后,用自己的私钥对申请人所提供信息计算散列值进行加密,形成数字签名,附在证书最后,再将数字证书颁发给申请人,申请人就可以使用 CA 的证书向别人证明他自己的身份了,对方收到数字证书之后,只需要用 CA 的公钥解密证书最后的签名得到加密之前的散列值,再计算数字证书中信息的散列值,将两者进行对比,只要散列值一致,就证明这张数字证书是有效且未被篡改过的。
  • 通信过程的安全性自下而上就是这样保证的:
    1. 双方通信内容的安全性是靠公钥加密,私钥解密来保证的,这一安全性由非对称加密的特性,即由公钥加密的信息只能使用对应的私钥才能解开来保证,由于私钥不会传递,只有拥有者知道,所以安全性就由公钥的正确性来保证。
    2. 公钥由对方在通信初始所提供,但是这时很容易被中间人替换掉,为了保证公钥的正确性,所以在发送公钥的时候也会提供对应的数字证书,用于验证这个公钥是对方的而不是中间人的,那么安全性就是由数字证书的正确性来保证了。
    3. 数字证书是由上级 CA 签发给个人 / 组织的,上级 CA 用自己的私钥给个人证书进行签名,保证证书中的公钥不被篡改,而接受者需要用上级 CA 证书中的公钥来解密个人数字证书中的数字签名来验证证书中的公钥是否是正确的,那么安全性就是由上级 CA 证书的正确性保证的了。
    4. 但是,上级 CA 证书也是由其上级 CA 签发的,这种信任关系一直到根证书,根证书没有上级 CA 为其签名,而是自签名的,也就是说,它自身为自身签名,保证正确性,所以根证书就是这个信任链最重要的部分,如果根证书泄露的话,其签名的所有证书及使用其签名的证书所签名的证书的安全性将不复存在,现在,安全性就是靠系统根证书的私钥不被泄露或者其公钥不被篡改来保证的了。
    5. 根证书不应该通过网络分发,因为通过网络分发的话,可能会被中间人攻击,一般根证书都通过操作系统或者浏览器分发,在操作系统中会内置很多根证书,但是最初的操作系统也不能通过网络分发,因为中间人可以修改操作系统中的根证书,所以要保证安全只能靠最原始的方法,当面交流,硬件厂商会和证书签发机构合作,在电脑,手机等设备出厂的时候在其操作系统中内置签发机构的根证书,再将这些设备分发出去,这样,这些设备的用户就可以安全地进行信息交换了,所以,安全性就依赖于这些设备在分发到消费者手中之前不会被恶意修改来保证了。
  • 至此,整个信任链就建立起来了,只需要有一台设备上安装了可以信任的根证书,就可以用来分发更多安全的操作系统了,之后的所有信任链都是安全的了。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!