上回我们白话了密码学中的两种算法,对称加密算法和非对称加密算法,我们有了这两种算法,我们就要将他们应用到实际生活中,就像我们学会了99乘法表,就可以让我们在实际生活中快速的计算啦!
所以本节课程的先决条件就是,看并掌握我之前白话的这篇文章:对称加密算法vs非对称加密算法。
我们先从互联网开始说起,说到互联网我们就不得不提一下计算机,因为计算机是互联网组成的一个很重要的部分,我们要想使用互联网进行交流就必须使用计算机(注意!我这里的“计算机”是一个统称,爱钻牛角尖的童鞋,不要说,除了计算机还有手机啊,ipad啊,智能手表啊!!!!恩,好了,别闹了)。
然后问题来了,要想形成互联网,计算机和计算机之间就必须相连起来(废话!),于是我们就有了“网线”,当然这里的“网线”也是泛指,因为现在大家家里都用的是无线网!不过无论有线网还是无线网,他们都是通过“物理”途径进行传播信号的!有了这些“联系”,我们计算机和计算机之间有了传递信息的“途径”了,但是!这里仅仅是提供了一个途径,但是如果想让计算机之间彼此了解传输的信息,那么我们必须定义一系列的协议,这些协议是计算机之间都能够明白的,同时发送和接受要严格按照协议去做!就像张三是中国人和王石头是印度人,他们俩要想交流,就要先建立一个途径,无论是加qq还是发邮件,同时他们俩还得说一样的话,不能张三说中国话,王石头说印度话。
所以,这就是好多互联网协议的来历,比如IPv4, IPv6, TCP,UDP,HTTP,FTP,SMTP,TLS/SSL,HTTPS等等。
那么我们再来想一下,比如,张三想通过QQ发送给李四一句“踢球去不?”,那么谁来将我们发出去的信息转换成协议规定的形式呢?QQ这个软件?操作系统?网卡?路由器?网线?还是我们的ISP(网络服务提供商,你可以理解成电信,移动,网通等等)。
其实,这些都会涉及到,所以即使你简简单单的发送一句“踢球去不?”需要涉及到这么多内容,所以,这里要引入一个模型,叫做OSI模型,全称“开放式系统互联通信参考模型”(英语:Open System Interconnection Reference Model)。
这个模型是干嘛的呢?就是将计算机和计算机之间信息交换“概念化”成不同的层次,每层分别有它自己的“实现”,每层有它自己的任务,同时“向上”提供“抽象”的“接口”供上层使用。一般分成7层或者5层。为了简便期间我这里按照5层架构说一下,这五层分别是:
- 应用层(application layer)
- 传输层(transport layer)
- 网络层(network layer)
- 数据链路层(data link layer)
- 物理层(physical layer)
回到我们的例子,当张三用QQ向李四发送一条信息时,首先QQ属于应用层,应用层需要将信息发送给传输层,传输层经过处理之后传给网络层,以此类推传给物理层,这样一层层向下“包装”,每层有对应的协议,这样最后通过物理层传出去,传到李四的物理层,然后李四那边通过一层层向上按照协议“解包”,最后到应用层,传到李四的qq里。
所以每层都有相对应的协议比如我们的物理层和数据链路层通过无线网传输使用的802.2传输协议,有线网的Ethernet(以太网)传输协议,还有网络层的IPv4, IPv6协议,传输层的TCP, UDP协议,而我们熟悉的HTTP协议其实属于应用层,所以HTTP是建立在TCP/IPv4或v6/以太网基础上进一步细化用于传输“超文本”信息的协议,比如FTP也属于应用层,也是在下面各层协议基础上进行细化,专门用于“文件传输”的协议。
大家可以看到,协议越往上越具体,越往下约抽象,其实计算机技术的发展就是一层层的向上抽象,这样上层的可以直接使用下层的“成果”(API)!
我们再来说一下TLS/SSL,SSL(secure sockets layer)是TLS(transport layer security)的前身,为什么将他们合起来的,大家可以理解成都属于同一东西的不同阶段吧,比如该协议之前叫SSL后来改名成TLS了。
为什么要有这种协议呢?因为HTTP是使用明文传输,随着网络的发展,安全性越来越重要,所以大家就要想办法让传输更加安全,同时使用密码学的成果,利用“非对称加密算法”的思想以及OSI模型,来对HTTP的信息进行加密。
因为上面我们说了,根据OSI模型,如果向外传输信息就是要从上到下挨个层进行,TLS/SSL也是位于应用层,所以为了加密HTTP的内容,那么TLS/SSL必须位于HTTP下面,可以看成这样:
HTTP
TLS/SSL
TCP
Ip
..
信息从HTTP经过TLS/SSL非对称加密后传出去,而在接收方,接收到信息是需要一层层向上进行,经过每层的“解包/解密”,最终通过HTTP转换成超文本信息。
所以HTTPS 就是 “HTTP内容向下传输的时候加了一层TLS/SSL加密”,仅此而已,这样,我们就可以实现,使用HTTP协议进行互联网信息传播的时候,对信息进行加密处理了,相信大家已经对非对称加密算法有一定了解了。比如说我们通过HTTPS连接某银行网站,这样我们就可以将我们的密码通过银行给我们的公钥进行加密后发送给银行,而避免了在传输过程中被他人偷看的可能,因为即使他们讲我们的密文盗走,也无法解密,只有银行网站可以解密,为什么?因为只有银行拥有与我们使用“公钥”加密相对的那个“私钥”。
但是同样的问题,就是我们怎么知道我们使用的公钥就是银行给我们的呢?即使我们所访问的域名和银行的域名一致,因为黑客完全可以通过修改我们本地的hosts文件,或者入侵dns,将域名映射到黑客的服务器。
所以,这就是CA(certificate authority),数字证书,数字签名,公钥基础设施(PKI)等等名词的来历。
下回再白话。
更多内容欢迎访问:作者博客