site logo

Keep doing what you want, never give up.

招聘会
文章配图

面试官:说说HTTPS的Man-in-the-Middle 中间人攻击

顾名思义,中间人攻击就是指通信双方的对话内容被第三个人窃取了。 回想抗日谍战剧里潜伏在敌人内部的情报员是如何将获得的重要情报传递给后方根据地的? 情报员获得情报后通过某种加密手段将情报内容加密后再传递给根据地,根据地同志在获得了情报后再用事先商量好的密钥解密情报以获取情报的真正内容。 该过程的优势是即使敌人获取到了被加密的情报也无法获取情报里真正的内容,但是,如果敌人知道了我们的加解密方法的话那就很容易知道情报的内容了。 中间人攻击就类似上图一样,左右两边的用户聊得正嗨,却不知道他们的聊天内容正在被头顶的人偷窥呢。 现在回过头来说HTTPS中间人攻击,既然HTTPS是加密通信,那中间人是如何窃取到对话信息的呢? 这就需要了解HTTPS加密的过程了,我们假设小明和小花之间的对话采用了某种加密方法,在他们之间传递的都是密文,他们拿到密文后再各自用事先约定好的密钥来解密,当然这个密钥也是通过网络传递的,不是小明事先亲手偷偷的交给小花的,正常情况下的通信过程是: 1、小花把自己的公钥public key 1发送给小明; 2、小明用这个公钥 public key 1加密他和小花通信的真正密钥S,加密后叫S1; 3、小明把S1发送给小花; 4、小花用自己的私钥private key 1解密S1,,现在小花得到了S; 5、后续小明和小花就用这个密钥S进行通信了。 现在假设有一个中间人,也不知道他用什么方法拿到了小花的公钥,现在小明和小花的通信过程变成了下面这样: 1、小花在把自己的公钥public key 1传递给小明的时候被中间人调包了; 2、中间人把自己的公钥public key 2发给了小明; 3、小明现在有中间人给的公钥public key 2; 4、小明用这个中间人公钥 public key 2加密他和小花通信的真正密钥S,加密后叫S1; 5、小明把S1发送给小花,实际发送给了中间人; 6、中间人用自己的私钥private key 2解密了S1获得了S; 7、中间人拿到S后再用小花的公钥public key 1重新加密S得到S2; 8、中间人把S2发给了小花; 9、小花用自己的私钥private key 1解密S2,,现在小花得到了S; 10、后续小明和小花就用这个密钥S进行通信了; 但是因为此时中间人已经拥有了小明和小花的真正密钥S,所以他们之间的加密通信内容也能被中间人一览无余了。