在现实世界中,你想和朋友聊点骚话又不想被其他人听见,这时为了保证谈话类容的安全性你会选择一个没有其他人的地方或者是降低点音量。在网络世界中为了保证数据传输的安全性,就要用到加密了。
对称加密
对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高。IDEA加密标准由PGP(Pretty Good Privacy)系统使用。如下图:
看起来似乎是妥了,但仔细一想不对啊。我通过网络把秘钥发给别人的时候,要是秘钥被人给截取了,那不是白加密了。当然这个问题很早就有人想到了,于是提出了非对称加密。
非对称加密
1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密 (privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
如下图:
举个栗子:
王胖想给明二娃发消息,王胖有一对公钥和私钥,明二娃有一对公钥和私钥。
王胖发(你在做啥子呢?)给明二娃。(你在做啥子呢?)这段话首先会用明二娃的公钥加密,加密后的数据发给明二娃后,明二娃就用自己的私钥解密得到王胖给他发的消息了。
明二娃收到消息后回王胖(我在玩游戏),(我在玩游戏)这段话就会用王胖的公钥加密,王胖收到加密消息后就会用自己的私钥解密,这就完成了对话。
对称加密 + 非对称加密
非对称加密的加密解密过程要比对称加密慢上不少,要想速度快又想安全,咋整?
于是就有了对称加密加上非对称加密。(1) 生成一个对称加密算法的密钥, 用非对称加密的方式安全发给对方, (2) 随后就不用非对称加密了, 只用这个密钥,利用对称加密算法来通信。
中间人攻击
仔细想想非对称加密,感觉还是有哪里不对啊。王胖给明二娃发消息的时候会用明二娃的公钥加密,王胖哪来的明二娃的公钥,当然是是明二娃发给王胖的。如果明二娃给王胖发公钥的时候被另一个人黑哥给截取了,黑哥截取到明二娃的公钥后,将黑哥自己的公钥发给王胖。以后王胖给明二娃发消息的时候用的就是黑哥的公钥,黑哥截取到王胖给明二娃发的消息后就可以用自己的私钥解密得到消息。由于黑哥手上有明二娃的公钥,黑哥又可以将消息用明二娃的公钥加密发给明二娃。
王胖和明二娃以为是在安全的通行,殊不知消息已经被黑哥悄悄给窃取了。这就是中间人攻击
那王胖如何才能确保自己收到的是明二娃的公钥呢,这就涉及到认证问题了,也就是CA认证