在上一篇文章中,我们简单的介绍了SSL/TLS的一些基本概念,本文尝试通过通俗的例子来解释为什么SSL/TLS安全。
场景举例
谍战片中,甲方情报人员C,监听到了敌方人员A和B通信的无线电波频段。在A和B进行沟通时,C也能听到
不加密
通信链路示意图如下:
从上图可知,如果A和B之间通过明文(普通话)直接沟通,那么C能够直接监听到情报内容的,很显然这是非常不安全的。
加密等级1
为了避免上面的风险,A和B想出了一个办法,他们约定,不使用普通话沟通,而是通过方言来沟通,而且每次使用的方言还不同,通信链路如下:
可以看出,这种方式要比采用明文沟通要安全一些,但是也仅仅是安全一点点而已,因为C可以先记下来,然后找个会上海话的同事翻译一下就可以了。
加密等级2
为了避免上述的风险,A和B又进一步增加了加密等级,你不是能破解上海话吗,我们会多种方言,每次都可以说一种方言,起码能增加你的破解难度,通信链路示意:
这种加密方式,A和B之间交流之前,相当于有个协商加密的过程,而且每次都是随机的定义加密算法,这对于C来说,增加了难度,如果他想要破解情报,需要找n个会不同方言的人,才能解密,这对于解密的工作量是很大的,但是这种方式,相比上一个等级而言,也只是增加了一点点难度而已,没有从本质上解决问题。
加密等级3
为了避免上面的问题,A和B沟通协商后,决定使用使用密码本的方式来进行加密,在前一篇文章中,我们提到了公钥和私钥,这里可能会有个疑问,我们直接采用私钥来加密和解密不就行了吗?这里有个应用限制,如果我们是私有的客户端和私有的服务器,也就是没有连接到互联网上,即私有网络,那无所谓,但是一旦连接到公网上,尤其是服务器对外提供服务,我们就必须要暴露出公钥,来给客户端使用,所以要采用公钥+私钥的方式。其示意图如下图所示:
通过上图就可以看出,这种机制,即便是监听到报文,也是很难破解的,因为这里有个很重要的加密机制,叫不对称加密,经过公钥加密后的报文,只能通过私钥才能解密。
不对称加密
这里不对公钥和私钥的具体算法做分析,如果能够搞明白彻底,估计能换个博士学位,我们只是通俗的解释一下,基本原理是这样的:
- 对称加密: 加密和解密都使用同一个 密钥,所以破解起来相对容易一些。
- 不对称加密: 将1个完整的密码本剪开,分成2部分,一部分作为公钥,另一部分作为私钥,设计一种很神奇的算法:经过公钥加密后的信息,得到了密文,是中间密文,这个中间密文的所有内容都指向了私钥,必须要结合私钥才能解开最后的 含义。
- 上述过程中,前3步完成了加密算法的约定,同时会生成3个随机数,其中随机数3是由随机数1和随机数2结合生成的,尤其是第3步,随机数3已经是 采用不对称加密传输,所以很难破解随机数3,至此就完成了 TLS的握手,后面的应用数据交互,都通过随机数3作为基准,进行加密,因为随机数3很难破解,所以加密后的密文也就更难破解了,这样就能实现数据双向加密了。
经过不对称加密,再结合SSL/TLS的 随机基数,公钥本身的长度设置成2048,这么一搞,如果想用穷举法来解密,那估计得解到猴年马月去,黄花菜都凉了。
小结
SSL/TLS的安全机制是建立在 公钥 + 私钥 结合的 非对称加密 算法的基础上的,这种加密算法能够最大限度的增加破解的难度,所以目前互联网的加密机制,几乎都采用SSL/TLS机制。