HTTPS就一定是安全的吗?

每当我们讨论到信息安全的时候,我们经常接触到的信息加密传输的方式莫过于HTTPS了,当我们浏览器地址栏闪现出绿色时,就代表着这个网站支持HTTPS的加密信息传输方式,并且你与它的连接确实被加密了。但是HTTPS并不是一个单一的东西,它是SSL+HTTP协议。

相信我们在学生时代的时候都做过传过小纸条这样的事情,下面我们通过一个传纸条的例子来说明这个协议。

目前你坐在一个教室最前排,你想把你的QQ密码传递给教室里最后排另一个人,一般来说,会选择,传纸条。传纸条这就是可以比喻成互联网的一个基础协议TCP/IP协议基本的工作模式。而通常,HTTP协议的数据是使用TCP/IP协议进行发送的。HTTP指的是你在纸条上写明你要传送的目的地是哪个同学的坐位,然后再是要传递的内容。途径的同学拿到纸条后根据纸条上显示的地址依次传过去就好了。这样要面临的第一个问题就是:途径的同学可以完全知道你写了什么。这样别的同学也会知道你传递的QQ密码。

所以,我们的HTTPS就来解决第一个问题“窃听”。这种问题通常是通过“加密”来解决的。其实就是双方约定一个暗号。用什么字母去替代什么字母之类的(比如说用1代替a,a代替1)。但是考虑到互联网每天有无数信息需要加密,这种原始的加密方法似乎不太适合。一般来说,是采用一种叫做AES(高级加密标准)的算法来解决的。这种算法需要一个密钥key来加密整个信息,加密和解密所需要使用的key是一样的,所以这种加密一般也被称为“对称加密”。AES在数学上保证了,只要你使用的key足够足够足够足够的长,破解是几乎不可能的。

我们继续回到传纸条的场景,我们使用AES加密算法将传递的QQ密码进行加密,并且要将密钥也传递给后排的同学,那么第二个问题就来了,传递小纸条的时候,AES不是有一个key吗?key怎么给目的地啊?如果我把密钥直接写在纸条上,那么中间的人不依然可以解密吗?在现实中你可以通过一些其它方法来把密钥安全传输给目的地而不被其他人看见,但是在互联网上,要想这么做难度就很大了,毕竟传输终究要经过这些路由,所以要做加密,还得找一个更复杂的数学方法。

于是,更加复杂的加密算法——非对称加密,应运而生。基本原理是:这种加密指的是可以生成一对密钥(k1,k2)。凡是k1加密的数据,k1自身不能解密,而需要k2才能解密;凡是k2加密的数据,k2不能解密,需要k1才能解密。其中最常用的就是RSA加密算法。其基于的数学原理是两个大素数的乘积很容易算,而拿到这个乘积去算出是哪两个素数相乘就很复杂了。好在以目前的技术,分解大数的素因数确实比较困难,尤其是当这个大数足够大的时候(通常使用2的10次方个二进制位这么大),就算是超级计算机解密也需要非常长的时间。

接下来我们继续传纸条的场景,于是你用RSA技术生成了一对k1、k2,你把k1用明文发送了出去,路经有人或许会截取,但是没有用,k1加密的数据需要用k2才能解密。而此时,k2在你自己的手里。k1送达目的地后,目的地的人会去准备一个接下来用于对称加密传输的密钥key,然后用收到的k1把key加密了,把加密好的数据传回来。路上的人就算截取到了,也解密不出key。等到了你自己手上,你用手上的k2把用k1加密的key解出来,现在全教室就只有你和你的目的地拥有key,你们就可以用AES算法进行对称加密的传输啦!这时候你和目的地的通讯将无法再被任何人窃听!

既然非对称加密可以那么安全,为什么我们不直接用它来加密信息,而是去加密对称加密的密钥呢?

这是因为非对称加密的密码对生成和加密的消耗时间比较长,为了节省双方的计算时间,通常只用它来交换密钥,而非直接用来传输数据。

那么,使用非对称加密是100%安全的吗?答案:不是的

实际上,还有一种更恶劣的攻击是这种方法无法防范的,这就是传说中的“中间人攻击”

我们继续让你坐在教室里传小纸条。现在你和目的地上途径一个中间人,他有意想要知道你们的消息。由于这个描述比较复杂,我们将你称为Sender,你的目的地称为Reciver,而中间人称为Agent。当你要和Reciver完成第一次密钥交换的时候,途径了Agent。Agent知道你要进行密钥交换了,它把小纸条扣了下来,假装自己是Reciver,伪造了一个key,然后用你发来的k1加密了key发还给你,你以为你和Reciver完成了密钥交换,实际上你是和Agent完成了密钥交换。同时Agent和Reciver完成一次密钥交换,让Reciver误以为和你完成了密钥交换。现在,由Sender->Reciver完整的加密,变成了Sender(加密连接1)->Agent(明文)->Reciver(加密连接2)的情况了。这时候Agent依然可以知道Sender和Reciver传输中的全部信息。

对于“中间人”这个问题,解决方法就是保住你密钥交换的对象是安全的。一般来说,你访问网站时,你访问的对象通常是一个比较大的服务供应商,他们有充沛的资源,也许可以证明他们的合法性。

这时候我们会引入一个第三方叫做CA。CA是一些非常权威的专门用于认证一个网站合法性的组织。服务商可以向他们申请一个证书,使得他们建立安全连接时可以带上CA的签名。而CA的安全性由操作系统或浏览器来认证。你的Windows、Mac、Linux、Chrome、Safari等会在安装时带上一个他们认为安全的CA证书列表。如果和你建立安全连接的人带着这些人的签名,那么认为这个安全连接是安全的,没有遭到中间人攻击。

CA证书通常情况下是安全的。因为一旦某个CA颁发出的某个证书被用于了非法用途,浏览器和操作系统一般会通过更新将整个CA颁发过的全部证书全部视为不安全。这使得CA通常在颁发证书时是比较小心的。

所以通过对称加密+非对称加密+CA认证这三个技术混合在一起,才使得HTTP的后面加上了一个S——Security。实际上HTTPS的协议比我这里描述的更复杂一些,我这里说的主要是基本的实现原理。因为其中任何一环稍有闪失,就会使得整个加密都将变得不安全。这也是为什么HTTPS的加密协议从SSL1.0升级到SSL3.0再被TLS1.0现在被TLS1.2取代,其背后都是一环环细节上的修改,以防任何地方的闪失。

参考地址:https://drivers.160.com/wlaq/81240XPXiI.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值