在网络中,你发送消息给某个人,如何确定他就是你想要发送的那个人呢?如何保证你发送的消息不会被窃取呢?
目标:Bob希望Alice证明她的身份。
我们通过5个协议来说明。
协议1.0:Alice声明”Im Alice"
m Alice”“,由于在网络中Bob看不到Alice,因此Trudy可以简单的声明她就是Alice.
Alice直接给Bob发消息"I
协议2.0:Alice在IP分组声明”I`m Alice”,IP分组包含Alice的源IP地址,Trudy可以构造一个IP分组,欺骗为Alice的IP地址.
协议3.0:Alice声明”Im Alice"的同时,发送她的秘密口令进行证明,
m Alice”的同时,发送她的加密的秘密口令进行证明,Trudy可以通过回放攻击(playback attack);记录Alice的分组,稍后回放给Bob.
Trudy可以通过嗅探(sniffing)Alice的分组,提取口令.
**协议3.1**:Alice声明"I
那么如何避免回放攻击呢?
一次性随机数(nonce):一个生命周期内只用1次的数R.
协议4.0:为了证明是真实的Alice,Bob向Alice发送一个随机数R,Alice必须返回R,并利用共享秘钥进行加密。这个协议的缺点是需要共享秘钥!
协议5.0:利用一次性随机数以及公钥加密技术。
5.0的漏洞:Trudy可以用中间人攻击:Trudy向Bob假扮Alice,向Alice假扮Bob.
很难检测:
Alice与Bob可以收到彼此发送的所有信息,问题是Trudy也收到了所有信息!