# 原创,转载请留言联系
为什么会出现这么多加密啊,公钥私钥啊,签名啊这些东西呢?说到底还是保证双方通信的安全性与完整性。例如小明发一封表白邮件给小红,他总不希望给别人看见吧。而各种各样的技术就是为了保障通信的安全。(本文务必从上到下看)
1.对称加密与非对称加密
对称加密:
对称加密是最快速的一种加密方式。加密和解密用的是同样的密钥。
对称加密是怎么实现的呢?举个例子说明。
小明写了一封信给小红。他用箱子装着信,同时箱子上锁,他去快递店把这个箱子和开启箱子的钥匙一起快递给小红。小红收到箱子后,用钥匙打开箱子,看信。这就是对称加密的传输过程。
但是为什么现在很少用这种方式进行。万一你的快递中途丢了(在传输过程中可以数据认为被黑客截获),那么拿到你快递的人,也可以用快递里的钥匙打开这个箱子,所以信息就泄露了。并且更严重的是,别人可以把你的信取出来,写一封诈骗的信,再寄给小红,那么小红就受骗啦。所以对称加密并不安全。
非对称加密
非对称加密就比较特殊了。非对称加密存在着公钥和私钥,公钥是用来加密内容的,私钥是用来解密内容的。
比如小明有几个朋友,小A、小B、小C。小明和这几个朋友平时有秘密交流。小明自己拿着私钥,然后给每一个朋友一把公钥。
朋友写信给小明时:比如小A有机密信息要告诉小明。他写了一封信,用小明给他的公钥加密,这时候这封信是加密的,谁都看不到的,谁都不能解密,只有小明的私钥可以。所以在传输过程中就不怕被别人篡改了。记住,公钥是拿来加密的,小A拿着的是公钥。私钥是解密的,小明拿着的是私钥。这里附上一个比较容易记的方法。当你收信的时候,你肯定不想信给别人看过,这是私人的东西,所以收信方用的是私钥。
那么问题来了......当小明想发信给小A的时候应该怎么办呢?
其实,小A也有自己的私钥,他也把自己的公钥发给小明呀。
小明持有的钥匙:小明的私钥,小A的公钥,小B的公钥,小C的公钥...
小A持有的钥匙:小A的私钥,小明的公钥,小B的公钥,小C的公钥...
小B持有的钥匙:小B的私钥,小明的公钥,小A的公钥,小C的公钥...
小C持有的钥匙:小C的私钥,小明的公钥,小A的公钥,小B的公钥...
看起来对称加密是很完美,但是他也有缺点,那就是他的加密速度十分的慢,一般只用来加密一些很短的数据,如果数据过长,他的加密速度比对称加密慢十几倍甚至上百倍。
2.签名与验签
签名与验证是什么呢?
签名与验证是基于公钥和私钥的。
签名与验签的理解
小明想快递一封信给小红,小明是一个很随和的人,别人看了他的信的内容都无所谓,但是一定不能修改!小明为了让小红完整的读到他的信,他用私钥对信进行了签名。小红收到信之后,用小明给她的公钥进行了验签。如果验签通过,则表明小明的信没有被修改过,全部内容都是小明写的。
注意,私钥是用来签名的。公钥是用来验签的。
3.HTTPS的原理
在说数字证书之前,最好先理解一下HTTPS的原理。
如果你认真地看完上面的文字,你现在应该知道对称加密比较快,但是不安全。非对称加密比较慢,但是比较安全。当然是越快越好对不,那么怎么解决对称加密的不安全性呢?可以利用非对称加密的方式,给对称加密的钥匙加密,然后传输给客户端,这不就解决对称密钥的不安全性了吗?所以,在HTTPS中,对称加密与非对称加密都有用到的!
例如,小明第一次浏览GOOGLE。这时候GOOGLE应该要把对称加密的钥匙发给小明呀,以后小明才能传输一些加密的信息给GOOGLE,而且加密也快。那么怎么保证这把钥匙的安全传输呢?这就要用到非对称加密了。GOOGLE先把公钥传输给小明。然后用自己的私钥加密对称加密的钥匙。再传输给小明。小明收到后,就可以用GOOGLE的公钥解开得到对称加密的钥匙啦。到了这步,就能保证对称加密的钥匙的安全啦。(这里有误,修正于2018.12.10:)小明用GOOGLE的公钥加密对称加密的钥匙,再传输给GOOGLE服务器。GOOGLE服务器收到后,就可以用私钥解开的到对称加密的钥匙啦。到了这步,就能保证对称加密的钥匙的安全传输啦。
自此之后,小明要搜什么内容,就先用对称加密的钥匙把内容加密,然后传输给GOOGLE。GOOGLE拿到后,用对称加密钥匙解密,并且处理完之后,用对称加密的钥匙加密,再发回去给小明。小明收到再解密......
看起来已经天衣无缝了,但是还是有问题。
万一小明刚开始收到的公钥不是GOOGLE的公钥呢?而是黑客发过去的公钥,那么小明本来想与GOOGLE交流的,不就变成与黑客交流了?
为了解决这个问题,数字证书出现了!~~
4.数字证书
上面的问题出现后,出现了解决方案。下面接着上面的例子讲:
GOOGLE可以使用由数字证书认证机构(CA,certificate Authority)和其他相关机关颁发的公开密钥证书。然后给小明发公钥时,小明就可以知道这个肯定是GOOGLE的公钥了。
详细过程是这样的:
1.GOOGLE服务器把自己的公钥登录至数字证书认证机构。
2.数字证书机构用自己的私钥对GOOGLE的公钥进行签名(还记得签名的作用?不记得看回去),并颁发公钥证书(证明的作用)。
3.要知道的一点是:每个人的浏览器都事先植入数字证书机构的公钥的!!!小明的也是,你的也是,我的也是。
4.小明收到了(公钥证书+GOOGLE的公钥)后,发现有公钥证书耶,然后用自己浏览器的数字证书机构的公钥对GOOGLE的公钥进行验签!如果验签成功,则代表GOOGLE的公钥是没有修改过的,可以放心食用。后面的过程不用说了吧,和上面例子的一样。