计算机网络——如何保证网络传输的安全性

1、前言

  前几天在面试时,被问到了如何保证网络数据传输的安全性的问题,当时对这一块没怎么研究过,因此当时并无回答出来。因此,今天花了点时间,研究了一下这方面的内容。这篇博客就来简单说一说保证网络传输安全性的一些方式。面试


2、正文

2.1 安全传输须要解决的问题

  先有问题,才有解决方案,因此咱们先来讨论一下,网络传输中,须要解决哪些问题,才能保证安全。须要解决的问题大体有以下三个:算法

  1. 发送方鉴别:确保接收到的数据,确实是由咱们认为的那我的(或主机)发送来的,而不是其余人以虚假身份发送的;
  2. 报文完整性:确保咱们接收到的报文就是发送方发送的初始报文,而没有被第三方进行篡改;
  3. 数据机密性:确保报文即便被其余人截获,也没法读出其中的信息,也就是要对数据加密;

  若是上面三个问题都获得了解决,那咱们基本上就能够保证数据传输是安全的。下面咱们就针对上面三个问题,来谈一谈解决方案。安全


2.2 非对称加密与对称加密

  在网络安全中,有两个很是重要的概念,就是对称加密非对称加密,后面要谈的全部方案,都离不开这两种机制。因此,在了解具体解决问题的方案前,咱们先来了解这两个概念。网络

(一)对称加密加密

  对称加密的原理很简单,就是数据的发送方和接收方共享一个加密数据的密钥,使用这个密钥加密的数据,可使用这个密钥进行解密。而这个密钥是隐私的,只有数据的发送方和接收方知道,这也就意味着,其余人若是截获了数据,因为这个数据使用了密钥加密,而它没有这个密钥,全部没法解析出原始数据。计算机网络

(二)非对称加密code

  非对称加密系统中,参与加密解密的共有两个——公钥私钥,使用私钥加密的数据,只能用公钥解密,而使用公钥加密的数据,只能用私钥解出。在非对称加密系统中,每一台主机都有本身的私钥和公钥,私钥只有本身知道,而公钥是公开的,可让全部主机知道。发送方在发送数据时,使用接收方的公钥进行加密,而接收方使用本身的私钥进行解密,便可完成隐私的数据传输。若是数据被其它人截获,可是由于它没有接收方的私钥,因此没法解析出数据。网络安全

  非对称加密可以工做的一个前提是,必须确保发送方拿到的公钥,就是接收方的公钥,而不是其余人发送来的假公钥,若是公钥是假的,那么这个机制也就失去了意义。在实际应用中,解决这个问题的方式就是,每一台主机的公钥和私钥,都是由官方机构所分配的,这些机构被称为认证中心CA)。CA在分配公钥私钥时,会严格地验证身份,而后对身份进行绑定,而咱们在获取公钥时,经过CA获取,便可保证获取到的公钥就是接收方的。同步

  须要注意的一点是,非对称加密的效率通常比较低,而对称加密的效率相对较高。下面,开始正式讨论解决上面三个问题的方案。博客


2.3 解决数据机密性

(一)非对称加密

  1. 发送方获取接受方的公钥,使用公钥对须要发送的数据进行加密,而后发送;

  2. 接受方接收到后,使用本身的私钥进行解密,解析出数据;

总结:由于只有接受方知道本身的私钥,因此只有接受方能读出数据。可是,非对称加密的执行效率比较低,因此每一次数据传输都使用非对称加密,响应速度将会比较慢


(二)非对称加密 + 对称加密(屡次传输)

  为了解决非对称加密效率较低的问题,咱们可使用对称加密,可是同步对称加密的密钥,却须要依赖于非对称加密:

  1. 发送方随机生成一个密钥,而后获取接受方的公钥,使用公钥加密这个密钥,发送给接受方;

  2. 接收方接收到加密的密钥后,使用本身的私钥解析出密钥,此时双方就完成了密钥同步;

  3. 以后双方发送的全部数据,均可以使用这个密钥进行加密解密;

总结:因为私钥只有接收方本身知道,因此这个密钥不会被其余人截获;同时使用对称加密的速度,要高于非对称加密,因此解决了上一个方案效率不高的问题;须要注意,通常密钥都比较短,因此使用非对称加密对密钥进行加密,通常比直接加密数据更快,并且只须要进行一次,因此速度可以显著提升

  HTTPS依赖于SSL保证数据传输的安全性,而SSL就是使用相似机制。


(三)非对称加密 + 对称加密(单次传输)

  若是发送方只是须要向接收方发送一次数据,那先进行一次密钥同步可能有些浪费时间,可使用以下方案解决:

  1. 发送方随机生成一个密钥,而后使用这个密钥对数据进行加密;

  2. 发送方使用接收方的公钥对数据密钥进行加密,而后将加密的数据和加密的密钥发送;

  3. 接收方首先使用本身的私钥解析出密钥,而后使用解析出的密钥将数据解析出来;

总结:此方案适合于进行单次数据发送,由于不须要进行密钥的同步,而是将密钥与数据一同发送;同时,这个密钥使用了接收方的公钥加密,因此这个密钥只有接收方本身能解析出来,而其余人解析不出密钥,天然没法解析数据;


2.4 同时解决发送方鉴别和报文完整性

  下面咱们来讲说解决发送方鉴别和报文完整性的方案。有一个经典的方案可以同时解决这两个问题,其过程以下:

  1. 发送方使用一个hash算法(如MD5SHA-1),计算须要发送的数据的hash值;

  2. 使用本身的私钥,对计算出的hash值进行加密;

  3. 将原始数据和加密后的hash值发送到接收方;

  4. 接收方使用发送方的公钥解析出加密后的hash值;

  5. 使用与发送方相同的hash算法,计算接收到的数据的hash值,与解析出的hash值进行比较;

  6. 若这两个hash值一致,表示这个数据并无被篡改;

总结:

一、首先,hash值是用发送方的私钥加密,私钥只有发送方本身知道,若是接收方可以使用发送方的公钥解密,那就说明这个数据就是预期中的发送方发的,不多是其余人发的,因而完成了发送方鉴别;

二、接收方使用一样的hash算法,计算原始数据的hash值,若是这个hash值与解密后的hash值一致,则就能保证这个数据没有被篡改;

上面两步中,但凡是有一步出现了错误,就认为这是一个脏数据;

  这个方案被称为数字签名。为何是计算出hash值,对hash值加密,而不是直接使用私钥对数据加密?这是由于hash值比较小,加密解密比较快。


2.5 同时解决三个问题的方案

  上面提到的三个问题中,但凡是有一个没有解决,数据传输都是不可靠的,这里咱们就经过上面提到的几个办法,来同时解决三个问题。办法很简单,直接将上面解决方案进行整合便可:

  1. 首先,咱们使用2.4中所提出的办法,对数据进行处理,也就是计算hash,而后使用本身的私钥加密hash

  2. 而后,将第一步计算出的hash与原始数据组合,使用2.3中提出的非对称加密 + 对称加密的方式,进行加密,加密以后再进行发送,保证数据的隐秘性;

  3. 接收方接收到数据后,使用2.3中的过程对数据解密,获得原始数据和加密后的hash

  4. 使用2.4中的方式完成发送方鉴别以及数据完整性校验;

总结:上面的方式很是简单,就是将咱们以前提过的加密,以及2.4中的方案组合,以此来同时解决三个问题。这是一个很是经常使用的方案,好比安全的邮件传输协议的实现就使用了相似方案。


2.6 解决发送方鉴别的其余方案

  假设接收方和发送方有一个共享的密钥,则可使用如下方式进行身份鉴别:

  1. 发送方向接收方发送本身的身份,好比发送一个“我是xxx”;

  2. 接收方为了验证不是其余人发送的虚假数据,向发送方发送一个随机数,这个随机数短期内不会重复;

  3. 发送方使用它们共享的密钥,对这个随机数加密后发回接收方;

  4. 接收方接收后,使用密钥解密,若是确实是本身以前发送出去的随机数,便可确认对方身份;

  这里存在的问题是如何让接收方和发送方有一个共享密钥,其实就能够经过2.3节中第二个方案提到的,使用非对称加密的方式同步密钥。

总结:

一、因为密钥只有发送方和接收方知晓,因此若是发送方可以将加密后的随机数发回,便可确认它的身份;

二、为何不直接使用加密后的身份信息发送,而是使用随机数?由于若是这个加密后的身份数据被截获,其余人不须要进行解密,只须要向接收方发送这个加密后的身份,便可伪造本身的身份;


2.7 解决数据完整性的其余方案

  假设发送方和接收方有一个共享的密钥,则可使用以下步骤保证数据完整性:

  1. 发送方将原始数据与密钥拼接,而后计算拼接后的hash值,将这个hash值与原始数据一同发送;

  2. 接收方接收到后,一样将原始数据和密钥拼接,并计算hash值,而后与发来的hash值比较;

  3. hash值一致,能够保证这个数据没有修改,不然就是被篡改的数据;

总结:因为拼接进原始数据的密钥只有传输双方知道,这个hash值只有它们双方能计算出来,因此若是hash值不一致,便可认为数据是有问题的。

  这个方案叫报文鉴别码,和前面提过的数字签名有些相似,可是不一样的是,这个方案中,并不须要对发送的数据进行加密,只是计算hash做为鉴别码,只要保证密钥不被窃取,便可保证数据的完整性。


2.8 如何防止发送方本身发送虚假数据

  须要注意的一点是,咱们上面所提出的方案,都是针对第三方侵入的解决方法,也就是防止除发送方和接收方外,有其余人对数据传输作手脚。可是,若是发送方本身篡改数据,或伪造数据,而后发送,这应该怎么解决呢?接收方如何可以识别出接收到的数据就是原始数据,而不是发送方本身篡改或发送的虚假数据呢?这是我最近一直在想的问题。

  在这种状况下,咱们须要考虑的是,发送数据的用户能够作到什么程度?因为发送数据的设备就在发送者手上,是否是意味着数据发送过程当中的密钥等信息,用户是能够经过一些手段看到的?若是是能够,那上面所说的机制应该就无法保证安全性了。可是,本人水平有限,并不清楚有户对于发送到本身设备上的数据,能够窃取到什么程度。但愿了解这个问题的人可以为我解答。

  固然,上面的机制可能没办法保证彻底可靠,可是也有很大的效果。好比说报文鉴别码就能解决用户本身篡改本身的数据这个问题。若是用户没有获取到密钥,则它天然没法发送虚假数据,由于没有密钥就没有办法计算出虚假数据的hash。虽然用户可能能够经过一些手段,获取到这个密钥,可是过程是应该是很是复杂的,这就对窃取的技术要求很是高,因此在大部分状况下能够保证数据不被篡改。

  说实话,对于用户本身发送虚假数据这个问题,因为我知识水平不足,一直没法想清楚,网上也没有找到相关的资料,因此上面的描述都是基于我目前的理解。若是有了解这个问题相关知识,以及解决方案的,麻烦告知。


3、总结

  以上就对数据的安全传输方案作了一个大体的介绍,归根到底,就是基于数据隐秘性,报文完整性以及发送方鉴别这三个问题,这三者缺一不可,只有所有解决,才能保证传输的可靠。

  但愿上面的内容对须要了解这一方面的人有所帮助,若存在错误或不足,也欢迎指正。


4、参考

  • 《计算机网络——自顶向下方法(原书第七版)》
相关文章
相关标签/搜索