前面讲了几节,对称加密(解决:机密性),单向加密(解决:完整性),密钥交换(解决:完整性)。但总是能被E在从中捣乱,有没有一种办法能解决验证对方身份的方法呢?
这个时候公钥加密算法出来了。众所周知公钥加密算法是密钥对:公钥(公开出去的,从私钥中按照某种算法或机制提取出来);私钥(自己随机生成的,一般密钥都很长,1024,2056等)。
公钥加密本身也可以用于信息加密,假设A将信息用自己的私钥进行加密,并传递给B,B用A的公钥解密,既然是公钥,那么在网络上传输的时候,E这个坏家伙也能得到A的公钥,从而E也能解密A发送给B的信息。这样就不能解决信息的机密性。
那么要实现A发送给B的信息的机密性,A就拿着B的公钥进行信息加密,并发送给B,那么B拿着自己的私钥进行解密,E这个家伙就无法打开A发送给B的信息了。但E可以拿着B的公钥伪造A发送的信息,发送给B。这样无法解决身份验证。
让我们来想想:
1、用自己的私钥来加密,对方可以实现身份验证的问题,可是无法实现数据机密性的问题。
2、用对方的公钥来加密,对方可以实现数据机密性的问题,可是无法实现身份验证的问题。
但事实上,极少用公钥来对信息进行加密,因为密钥实在是太长了,加密的速度极度慢。所以一般用来实现身份验证。那怎么能快速的实现身份验证呢?用单向加密+公钥加密的方法
1、A先用单向加密算出指纹
2、A再用自己的私钥对指纹进行加密
想一下:
如果E这个家伙又截获了A发送的信息,E能解密不?能!!!E能篡改信息不?能!!!
但E想篡改信息后将“指纹”也修改了,只能用E自己私钥加密,那么B能用A的公钥解密这段数据不?不能!!!
E只修改信息的内容,B用A的公钥解密了“指纹”,能将内容与“指纹”匹对了不?不能!!!
虽然信息的机密性无法得到保证,但是这样就完成了信息的完整性与身份验证的问题了。
这样就万事大吉了吗?不!!A与B此前都未曾有过通讯, E这个家伙是不是又可以乘机在中间伪装A与B(之前讲了这么多次E,我们可以将这个家伙叫做“中间人攻击”,Man-in-the-MiddleAttack,简称“MITM攻击”)。那这样还是又掉进坑里了。人生到处都是坑,不是吗?^_^我们的目的是想办法,解决这些“坑”。欲知下一个办法,请听下回分解。^_^
原文地址:http://blog.51cto.com/lythjq/2089336