来自维基百科http://zh.wikipedia.org/wiki/中间人攻击#.E6.94.BB.E5.87.BB.E7.A4.BA.E4.BE.8B
攻击示例
假设爱丽丝(Alice)希望与鲍伯(Bob)通信。同时, 马洛里(Mallory)希望拦截窃会话以进行窃听并可能在某些时候传送给鲍伯一个虚假的消息。
首先,爱丽丝会向鲍勃索取他的公钥。如果Bob将他的公钥发送给Alice,并且此时马洛里能够拦截到这个公钥,一个中间人攻击就可以开展。马洛里发送给爱丽丝一个伪造的消息,声称自己是鲍伯,并且附上了马洛里自己的公钥(而不是鲍伯的)。
爱丽丝收到公钥后相信这个公钥是鲍伯的,于是爱丽丝将她的消息用马洛里的公钥(爱丽丝以为是鲍伯的)加密,并将加密后的消息回给鲍伯。马洛里再次截获爱丽丝回给鲍伯的消息,并使用马洛里自己的私钥对消息进行解密,如果马洛里愿意,她也可以对消息进行修改,然后马洛里使用鲍伯原先发给爱丽丝的公钥对消息再次加密。当鲍伯收到新加密后的消息时,他会相信这是从爱丽丝那里发来的消息。
1. 爱丽丝发送给鲍伯一条消息,被马洛里截获:
爱丽丝 “嗨,鲍勃,我是爱丽丝。给我你的公钥“ --> 马洛里 鲍勃
2. 马洛里将这条截获的消息转送给鲍伯;此时鲍伯不能分辨这条消息是否真的是从爱丽丝那里发来的:
爱丽丝 马洛里 “嗨,鲍勃,我是爱丽丝。给我你的公钥“ --> 鲍伯
3. 鲍伯回应爱丽丝的消息,并附上了他的公钥:
爱丽丝 马洛里 <-- [鲍伯的公钥]-- 鲍伯
4. 马洛里用自己的密钥替换了消息中鲍伯的密钥,并将消息转发给爱丽丝,声称这是鲍伯的公钥:
爱丽丝 <-- [马洛里的公钥]-- 马洛里 鲍勃
5. 爱丽丝用她以为是鲍伯的公钥加密了她的消息,以为只有鲍伯才能读到它:
爱丽丝 “我们在公共汽车站见面!”--[使用马洛里的公钥加密] --> 马洛里 鲍勃
6. 然而,由于这个消息实际上是用马洛里的密钥加密的,所以马洛里可以解密它,阅读它,并在愿意的时候修改它,然后使用鲍伯的密钥重新加密,并将重新加密后的消息转发给鲍伯:
爱丽丝 马洛里 “在家等我!”--[使用鲍伯的公钥加密] --> 鲍伯
7. 鲍勃认为,这条消息是经由安全的传输通道从爱丽丝那里传来的。
这个例子显示了爱丽丝和鲍伯需要某种方法来确定他们是真正拿到了属于对方的公钥,而不是拿到来自攻击者的公钥。否则,这类攻击一般都是可行的,在原理上,可以针对任何使用公钥——密钥技术的通讯消息发起攻击。幸运的是,有各种不同的技术可以帮助抵御MITM攻击。
抵抗方法
许多抵御中间人攻击的技术基于以下认证技术:
- 公钥基础建设
- 更强壮的相互认证 ,例如:
- 密钥(通常是高信息熵的密钥,从而更安全),或
- 密码(通常是低的信息熵的密钥,从而降低安全性)
- 延迟测试,例如使用复杂加密哈希函数进行计算以造成数十秒的延迟;如果双方通常情况下都要花费20秒来计算,并且整个通讯花费了60秒计算才到达对方,这就能表明存在第三方中间人。
- 第二(安全的)通道的校验
- 一次性密码本可以对中间人攻击免疫,这是在对一次密码本的安全性和信任上建立的。
公钥体系的完整性通常必须以某种方式得到保障,但不需要进行保密。密码和共享密钥有额外的保密需求。 公钥可以由证书颁发机构验证,这些公钥通过安全的渠道(例如,随Web浏览器或操作系统安装)分发。 公共密钥也可以经由Web在线信任进行在线验证 ,可以通过安全的途径分发公钥(例如,通过面对面的途径分发公钥)。
查看密钥交换协议以了解不同类别的使用不同密钥形式或密码以抵御中间人攻击的协议。