安全加密算法

在阅读本文之前,如果您还不了解HTTP,HTTPS,SSL/TLS这几个概念,请跳转以下链接阅读该文章:
https://www.techug.com/post/https-ssl-tls.html

背景:

在聊安全加密之前,我们先来看看http协议下浏览器与服务器之间的交互。

1
  如上图所示,我们的浏览器访问服务器的时候,首先需要建立一个连接,那么如何连接呢?我们需要连入网络(这是句废话,不过这是为后文铺垫),我们的浏览器是运行在操作系统上的,因此操作系统想要联网,需要一个接入点,这个接入点就是网络接入商(比如ISP),网络接入商是连入互联网中的,服务器也是接入互联网的,并且提供了一个公网ip,这样我们的浏览器才能通过ip地址访问服务器,在http协议下,浏览器与服务器之间的数据是以明文形式交互的。因此在这个过程是不安全的,会有被拦截的风险。(ps:在室外的时候最好不要用公用的wifi,公用wifi实际上就是这里的拦截器,是一个互联网的接入点,如果这个接入点收集了你的form表单数据或者是服务器返回给你的数据的话,你的数据很有可能就被篡改了。)

由于http协议不安全,所以我们想对数据进行加密,由此引出了对称加密。接下来我们看看对称加密。

对称加密

所谓对称加密,就是编码与解码采用的算法是一样的。

2

图中提到了加密算法,它可以这样来理解,它是一种规则,比如我们发送给服务器一段小秘密:“我喜欢whitecat”,既然是秘密,那么我们不希望他人能直接通过明文获取到这段小秘密,因此我们对这段小秘密在前后都加个123,假装给它藏起来了,别人就解不开了,看不懂(当然加密算法不可能这么简单,只是为了方便理解)。

这里边注意,加密算法我们不希望它是不可逆的,因为如果不可逆,那加密完成后,我们浏览器就解不开了,所以必然要提供一套解密算法。

继续看上图,在对称加密中,我们的浏览器发送给服务器的数据,是由服务器通过加密算法进行加密的,服务器把加密后的数据以及解密算法发送给浏览器,但这种加密是无效的(ps:卵用),原因很简单,既然服务器把解密算法和数据传给浏览器了,那么黑客就可以利用解密算法对数据进行解密,然后篡改数据,再把数据发给浏览器!

接下来我们对这两个算法换个专业点的称呼:

  • 公钥:解密算法
  • 私钥:加密算法
  • 公钥和私钥两者统称密钥

因此,对称加密存在密钥分发的问题。如何安全的把共享密钥在双方进行分享,这本身也是一个如何安全通信的问题,解决办法其中一种是提前双方约定好,不通过具体的通信进行协商,避免被监听和截获。另外一种方式,将是下面我们介绍的非对称加密。

常用的对称加密算法:DES,Triple-DES,RC2和RC4。

非对称加密

3

由于对称加密把公钥传给浏览器还是不安全,所以我们希望在服务器上有一套不同的密钥(即公钥与私钥不同),我们在返回给浏览器数据时候,只传公钥,不传私钥。这里要强调的是:只要服务器的私钥不泄露,我们的数据就是安全的,即使落在别人手里,也是无法解密的。这时黑客拦截返回的数据后,只能通过解密算法解开数据,但由于没有私钥,无法对数据进行加密,所以无法进行篡改。这就是最初的https。

常用的非对称加密算法:RSA

非对称加密看起来很安全,但实际不然,我们来看下面这种情况,黑客拦截数据后,用服务器的公钥进行解密,解密完成后他虽然没有服务器的私钥,但是他可以自己伪造一个私钥对数据进行加密,并且再伪造一个公钥,把自己的公钥以及数据发送给浏览器,浏览器以为这个公钥和私钥是服务器发过来的,实际上却是黑客发来的。因此为解决这个问题,https协议提供了CA证书,接下来我们看看CA证书是如何保证数据安全的。

CA

由于非对称加密还是有安全问题,所以我们引入了第三方,即CA(Certificate Authority),一个认证机构

在讲正题之前,我们先来看一个概念:DNS

DNS是一个域名系统,是一个用来把域名转换为ip地址的软件。DNS中保存了一张域名和与之相对应的IP地址的表,以解析消息的域名。我们在浏览器的地址框中打入某一个域名时,比如下图中的“www.baidu.com”,浏览器实际上是向我们的网络接入商(比如ISP)发出了一个域名请求,然后通过接入商的DNS服务器找到域名对应的IP地址 ,并将这个IP地址所对应的服务器上的网页内容传送给请求的浏览器。

DNS劫持
当接网络入商返回给浏览器IP地址的时候,可能会被劫持,比如我(whitecat)是劫持者,我可以把服务器返回的IP地址换为另外一个完全不同的IP地址发送给浏览器,这个IP地址和浏览器请求域名的网页一毛一样,这样浏览器就浏览到了一个假网站,在浏览器输入的信息就被我窃取了。这就是DNS劫持。
4
想要避免被劫持,就可以采用CA认证。CA可以帮我们认证一下最后返回的IP是不是钓鱼网站。
5
如上图所示,服务器去找CA为公钥做认证,这时CA会用自己的私钥为服务器的公钥做一次加密,加密的内容里包括服务器的公钥以及一些企业信息,域名等,我们称这次加密后的内容为“数字证书”。现在服务器获取到了CA提供的数字证书,并将数字证书发送给浏览器,由于数字证书是由CA加密的,所以这里我们的浏览器还要和CA机构做一次约定,CA机构为浏览器提供它的公钥,浏览器用CA提供的公钥去解密“数字证书”,解密后,浏览器得到了服务器的公钥以及企业信息、域名等,这时,浏览器再用服务器公钥继续解密就能够获取到服务器返回的数据了。

接下来我们再来分析下,如果黑客劫持了服务器传给浏览器的数字证书的话,即使他能解密数字证书,但由于没有CA的私钥,就没办法加密,你可能会说黑客还可以自己伪造私钥啊。这是不可以的,因为我们刚刚说过了“CA机构为浏览器提供了它的公钥”,也就是说浏览器会拿着CA的公钥去解密数字证书而不会拿别人的公钥去解密,而黑客自己伪造了数字证书的私钥,两者的公钥和私钥是不匹配的,也就是说浏览器是解不开篡改过的数字证书的。

写在最后

推荐阅读该文章来理解数字证书,个人觉得文章写得很不错。
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值