HTTPS演化过程(对称加密、非对称加密、公钥、私钥、数字签名、数字证书)

主要感谢《码农翻身》,还有网上的文章,大家可以看看这本书。

参考文章:
https://mp.weixin.qq.com/s/StqqafHePlBkWAPQZg3NrA
http://www.cnblogs.com/bellkosmos/p/5234029.html
https://blog.csdn.net/liuweiyuxiang/article/details/52748570
https://blog.csdn.net/tenfyguo/article/details/40922813

1.对称数据加密

这里写图片描述

就像上图所示, 这加密和解密算法是公开的,那个密钥是保密的, 只有两人才知道, 这样生成的加密消息(密文) 别人就无法得知了。这叫对称加密算法,因为加密和解密用的是同一个密钥。

问题来了,这个密钥的双方必须得知道,但是通过网络发送又不安全,这该怎么办呢?这时候就出现了非对称数据加密。

2.RSA:非对称加密

这个RSA算法非常有意思,它不是像之前的算法, 双方必须协商一个保密的密钥, 而是有一对儿钥匙, 一个是保密的,称为私钥,另外一个是公开的,称为公钥。

更有意思的是,用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据, 只有对应的私钥才能解密。

这里写图片描述

有了这两个漂亮的特性, 当张大胖给Bill发消息的时候, 就可以先用Bill的公钥去加密(反正Bill的公钥是公开的,地球人都知道), 等到消息被Bill 收到后, 他就可以用自己的私钥去解密(只有Bill才能解开,私钥是保密的 )【也就是A发送消息给B时候,利用B的公钥,然后B收到后利用私钥解密接收。】

这里写图片描述

反过来也是如此, 当Bill 想给张大胖发消息的时候,就用张大胖的公钥加密, 张大胖收到后,就用自己的私钥解密。

3.非对称加密+对称加密

为什么会出现这种情况呢?

因为RSA的加密和解密的速度比较慢,RSA的算法比之前的对称密钥算法要慢上百倍。

回到咱们最初的问题,我们想用一个密钥来加密通信,那个对称加密算法是非常快的,但是苦于密钥无法安全传输, 现在有了RSA ,我想可以结合一下, 分两步走 (1) 我生成一个对称加密算法的密钥, 用RSA的方式安全发给你, (2) 我们随后就不用RSA了, 只用这个密钥,利用对称加密算法来通信,这样即可以保证安全又可以加快速度。【也就是只利用RSA传输密钥,保证密钥的安全。然后利用对称加密进行信息传输。】

这样以来既解决了密钥的传递问题, 又解决了RSA速度慢的问题,不错。

于是两人就安全地传递了对称加密的密钥, 用它来加密解密,果然快多了!

4.中间人攻击

这个话题,主要是针对你如何确认对面的人是你想通信的人。

假如啊,Bill给你发公钥的时候, 有个中间人,截取了Bill的公钥, 然后把自己的公钥发给了你,冒充Bill ,你发的消息就用中间人的公钥加了密,那中间人利用自己的密钥不就可以解密看到消息了【这个是利用自己的密钥,然后自己的私钥接收】?同时,还可以用Bill的公钥加密,发给Bill , Bill和我根本都意识不到, 还以为我们在安全传输呢!【这个是利用Bill的公钥,发送自己的信息给Bill。】

这里写图片描述

看来问题出现在公钥的分发上!虽然这个东西是公开的,但是在别有用心的人看来,截取以后还可以干坏事 !

但是怎么安全地分发公钥呢? 似乎又回到了最初的问题: 怎么安全的保护密钥(之前是利用非对称保护私钥的传输,现在是考虑如何保证公钥的发送方)?

可是似乎和最初的问题还不一样,这一次的公钥不用保密,但是一定得有个办法声明这个公钥确实是Bill的, 而不是别人的。

5.信息摘要、数字签名、数字证书

简单来讲是这样的, Bill可以把他的公钥和个人信息用一个Hash算法生成一个消息摘要, 这个Hash算法有个极好的特性,只要输入数据有一点点变化,那生成的消息摘要就会有巨变,这样就可以防止别人修改原始内容。

这里写图片描述

可是作为攻击者的中间人笑了: “虽然我没办法改公钥,但是我可以把整个原始信息都替换了, 生成一个新的消息摘要, 你不还是辨别不出来?”

张大胖说你别得意的太早 , 我们会让有公信力的认证中心(简称CA)用它的私钥对消息摘要加密,形成签名:

这里写图片描述

这还不算, 还把原始信息和数据签名合并, 形成一个全新的东西,叫做“数字证书”

这里写图片描述

张大胖接着说:当Bill把他的证书发给我的时候, 我就用同样的Hash 算法, 再次生成消息摘要,然后用CA的公钥对数字签名解密, 得到CA创建的消息摘要, 两者一比,就知道有没有人篡改了!

如果没人篡改, 我就可以安全的拿到Bill的公钥喽,有了公钥, 后序的加密工作就可以开始了。

这里写图片描述

那么这个CA的公钥怎么保证他的安全性?

附注:我们利用上面数字证书保证传输安全的前提就是,我们默认CA的公钥是安全的。因为CA的公钥安全,所以得出的消息摘要是安全的,这就可以与Hash算法得出的消息摘要比较是否相同,从而确保消息的安全的。

6.HTTPS

数字证书的实例:HTTPS协议。这个协议主要用于网页加密。

1.首先,客户端向服务器发出加密请求。

这里写图片描述

2.服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。

这里写图片描述

3.客户端(浏览器)的”证书管理器”,有”受信任的根证书颁发机构”列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。

这里写图片描述

4.如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。

这里写图片描述

5.如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。

这里写图片描述

6.如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

这里写图片描述

总结:

这里写图片描述

更加详细详细可以参考上面第二个链接。

猜你喜欢

转载自blog.csdn.net/u014465934/article/details/81370111