对称加密和非对称加密

作者 Weixu 日期 2018-08-19
对称加密和非对称加密

对称加密

简单一句话概括就是:加密和解密的密钥是同一个

模拟浏览器和服务器的使用对称密钥加密的过程,举个简单的例子进行说明:
在高中的时候,班上的小明喜欢上了小红,然后小明就想通过书信的形势向小红表明自己心意。(就像我们浏览器和服务器之间的数据通信)
但是为了防止他的书信信息被他们的家长非法窃取,于是小明就去定做了一个带有锁的箱子,并制作了两把相同的钥匙,给了一把给小红。(就像浏览器将自己的对称密钥发送给服务器的过程)
然后小明写好了一封信,放在箱子里,用自己的钥匙锁上,寄给了小红。(浏览器构造了一个加密的数据包发送给了服务器)
小红收到数据之后,用小明给的钥匙打开,并查看了书信。 (服务器通过浏览器给的密钥解密浏览器数据)

这样就会产生一个问题,小明可以直接将密钥给小红,那么我们的服务器要怎样得到浏览器的密钥呢?

或许有的人会说,事先将浏览器的密钥存放在服务器不久可以了吗?
但是我们的用户非常多的,我们不可能将所有的密钥都存放在我们的服务器吧?

这时候就引出了接下来要说的 非对称加密

非对称加密

首先明白如下前提:
浏览器有自己的公钥和私钥
服务器也有自己的公钥和私钥
公钥加密的数据只有私钥才能解密,反之亦然
公钥可以对外公开,私钥只能自己知道

总结一句话就是说:加密和解密的密钥不是同一个

其应用场景就是浏览器将自己的对称密钥发送给服务器

首先浏览器向服务器放送一个请求,告诉浏览器我们跟你通信啦。
然后浏览器将自己的公钥回送给浏览器(其实还会发送证书等信息)
浏览器这个时候自己就生成了一个密钥对(公钥和私钥)
浏览器将自己的私钥通过服务器回送的公钥加密后又发送给了服务器
服务器用自己的私钥将其解密,得到浏览器的私钥

以上就是服务器得到浏览器私钥的过程。

类比到小明和小红之间的故事,如下所示
小明和小红已经在一起了,这个时候小红的闺蜜小花窃取了小红的密钥,并复制了一把,然后用该密钥加密了一封信发给了小红,说:”我们分手吧”,小红找到小明,小明解释之后,双方都说是对方的钥匙被别人窃取了。

显然这个时候并不能确定是谁的钥匙丢了,聪明的小明又想到了一个好办法。

他自己打造了一个两把不同的钥匙,其中一把钥匙加密的数据,只能通过另一本钥匙解密
并且小红也是同样如此

公钥双方都是知道了,但是私钥是双方都不知道的

于是,小明先用自己私钥将自己写的书信进行加密后,再用小红的公钥对书信再加密一次,然后将该书信寄出去了

小红收到数据后,先用自己的私钥解密一次后,再用小明的公钥解密一次,就看到了书信的内容。

这个时候呢,小红的闺蜜小花还不知道他们换了加密的方式,就再次窃取了小红私钥,加密后发送给了小红,小红收到信息之后发现没有解密出来,就知道当前的信息不是小明发送的了。

这个时候小明的同桌小张也喜欢上了小红,而且知道他们之间是通过这种方式交流

于是就窃取了小明的公钥和私钥,然后伪造了一封信发送了过去,说:”我们分手吧”

这个时候小红收到信后问小明是怎么回事,这个时候小明就知道是自己的密钥泄露了。