解释HTTPS和SSH

刚考完信息安全这门课,想详细的说说我们常见的HTTPS和SSH,这两种针对于传输层安全的东西。
在这篇博客中你将看到这些内容:
这里写图片描述
首先先从我们的应用入手,说到HTTPS就不得不说到HTTP了,当我们打开的网站前面的前缀是由https://开头的就说明了这个网站用到了https了,类似我们的银行网站,网络购票网站(这里吐槽一下我们官方购票网站安全证书还没有做好的问题),淘宝,天猫。可以看到一个共同的特点,这些网站都或多或少涉及到金钱的交易,这就涉及到一个交易安全的问题。在这里可以简单的理解https是一个secure http(安全的http)当然实际上并不是那么简单啦。
那么SSH又是啥,经常连接服务器的同学肯定再熟悉不过了,我们经常通过ssh命令来连接服务器。没错的,ssh就是一种保障网络通信安全的协议,我们可以利用ssh建立起一个安全隧道,用这个安全隧道来连接我们的服务器,实现远程桌面。

其次,我想科普一下我们平时所定义的安全是针对哪些可能产生的攻击问题,以及简要的说明一下哪些算法是可以解决这些问题的,问题如下:
1.内容加密问题:我们不想让我们的明文的内容被别人看到。于是,我们需要对传输的明文进行加密,变成密文,并且只有传递双方知道,这就需要一个公开的加密算法(以及解密算法),以及只有传递双方所知道的密钥,这也就是我们最原始的对称加密的模型,以下是该对称加密的基本模型图:
这里写图片描述
但是有有心的读者肯定会发现这样的一个问题,密钥的传递怎么保证安全,如果密钥还需要加密,那是不是需要一个新的密钥,这样的加密就成为了一个死循环了,这就了公钥系统,根本就不需要传递密钥的工作。(补充一下关于对称加密的几种常见算法:DES,3DES,其中有一个double DES的,但是因为中间相遇攻击导致double DES的安全性相较于DES没有明显提升。所以,double-DES并没有被应用,更为广泛使用的当然是AES(高级加密手段了))。
2.认证问题(证明这个数据是从我想要的人那边收到的)
有了公钥系统,就可以通过(Diffie-Hellman算法)实现交换密钥。但是还是无法实现认证的问题。但是有了RSA生成一对公钥和私钥算法,在A进行广播的过程中,A用自己的私钥加密并广播出去,其他人只能用A的公钥来解密,这样就认证了这个消息确实从A传出来的,这就是一个最基本的认证问题。
随便一提,Diffie-Hellman算法一般只适用于密钥交换的问题,但是不适用认证问题。RSA算法都是通用的喽,即能解决加密,认证以及密钥交换问题(或许这是RSA更早拿图灵奖的原因啦,哈哈)
3.我们的消息是否被篡改过
是否看我们的消息是否被篡改过,最简单的思路就是看前后文章是否一致。但是实际问题上,你总不能传两遍吧。于是就有了消息摘要这个东西,我们利用hash函数将任意长的文章压缩成一个定长的消息摘要,并且hash函数的特点,保证只要文章改变一位,消息摘要就会完全改变,利用这个特性,只要连着消息摘要和着消息一起传过去,接收方再hash出一次消息摘要,前后消息摘要一比对,就知道消息有没被篡改了。

有了这些基础知识,就很容易了解我们下面的HTTPS和SSH啦。
首先是HTTPS:
HTTPS说白了就是HTTP+SSL(一种传输层的安全协议,下面会提到),也就是HTTPS让HTTP变得更加安全了。普通的HTTP连接使用的是80端口,但是使用HTTPS的时候,使用的是443端口,这个用来唤醒SSL的。
那我们使用HTTPS的时候的,有哪些通信元素被加密处理起来的呢?
1.请求文档的URL
2.文档的内容
3.浏览器格式的内容(格式是由浏览器用户决定的)
4.在浏览器和服务器之间传输的Cookies
5.HTTP报头的内容
掌握以上的内容应该就对HTTPS有了一个初步的认识。但是,要想要更加细致的了解,就需要了解SSL.
这里只介绍个大概的SSL,首先SSL是一个安全套接层协议,它不同于其他协议的一点是它具有两层协议层,SSL协议栈如下图所示:
这里写图片描述
先说说SSL记录协议:
SSL记录协议包含了我们需要传输的信息,主要提供了两种服务的内容:
1.保密性:提供了传统加密共享的密钥。
2.消息完整性:利用MAC的消息认证代码看前后的内容是否被修改过。(这里补充一下MAC是什么东西,MAC即消息认证函数,MAC的过程如下所示:MAC=C(K,M) C表示MAC函数,有HMAC等等,K表示密钥,M表示明文,因为这里既有密钥,也有形成出来的MAC消息摘要的一种,接收方在拿到MAC值的时候,利用自己的密钥和信息求一次新的MAC值,前后MAC值一比对就可以知道消息有没被修改过和认证的作用(K值不是从发送方来的,K值不对也无法得到相同的MAC值))
我们生成SSL的过程先上图:
这里写图片描述
看见图就一目了然了,步骤如下:
1.应用数据进行分块。
2.每一块的应用数据进行压缩。
3.对压缩后的数据获取一次MAC值,需要用到共享密钥,公式如下:
这里写图片描述
4.将我们得到的MAC值加到我们的信息里面用对称密码进行加密(AES,3-DES等)。
5.最后再添加我们的SSL记录头,完毕。
这里记录头其实就加上了我们的SSL记录的一些基本属性:
(1)内容类型(8位)。(2)主版本号(8位)。(3)从版本号(8位)。(4)压缩长度(16位)
咱们的SSL记录格式就完成啦。
再来一个更加具体的SSL记录格式的图:
这里写图片描述
针对于SSL协议栈上面的SSL握手协议,SSL修改规范协议,SSL警报协议。这里就不细说了。大家要想深入了解一下,还是需要多看看SSL握手协议。

最后,说说SSH这个保障网络通信安全的协议,它基于TCP协议之上,准确的来说是让不安全的TCP连接给予了一个安全的隧道。
要让SSH建立连接主要由以下四个步骤,还是看图吧。
这里写图片描述
1.身份标志传交换。2.算法协商。3.密钥交换。4.服务请求。
也符合我们对一个正常连接的一个理解,先说明客户端与服务器的版本是否一致。然后让加密算法一致,互相交换密钥,开始连接。
那咱们的SSH的每个数据包交换的数据包又具有哪些东西呢,还是看图再说明:
这里写图片描述
可以看到跟我们上面提到的SSL的数据包有着异曲同工之妙。有效载荷先压缩,的到压缩的有效载荷,在加上pktl-包长度,pdl-填充长度,padding-随机填充,再加上包序号得到这样一个串,进行MAC,得到MAC,再将这个MAC值加到加密后的密文的尾巴,我们的一个数据包构建完成。

SSH的最后,当然要提SSH的作用了,SSH的最有用的一个特征就是端口转发,即我们可以将不安全的TCP连接转发到我们安全的SSH连接上,如下图:
这里写图片描述
设想这样一个场景,我们有一个电子邮件的客户端程序。它从邮件服务器通过邮政协议(POP3)发送一个电子邮件。POP3指定的端口号是110.则通过以下方式进行安全传输:
(1)建立一个SSH客户端到远程服务器的连接。
(2)选择一个本地未使用的本地端口号,随意定为9999。配置SSH使其接收从该端口发出并且目标是服务器的110端口的数据包。
(3)SSH客户端通知SSH服务器创建一个目标地址的连接,在这个例子中邮件服务器的端口号是110.
(4)客户端发送任意位的数据到本地端口9999并让其将数据用SSH会话加密发送到服务器端。SSH服务器解密收到的数据并将明文发送给端口110.
(5)另一个方向,SSH服务器获取任意位从端口110接收的数据,并将其在SSH绘画中发送回客户端。客户端解密数据并将明文发送到与端口9999相连的进程。
这样就将一个不安全的TCP连接通过一个安全的SSH连接隧道变得安全啦。
Reference:Cryptography and Network Security Principles and Practice

猜你喜欢

转载自blog.csdn.net/github_33873969/article/details/79008664