azwcl
azwcl
Published on 2025-05-05 / 13 Visits
0
0

计算机网络-第七章-网络安全

1. 网络安全概述

1.1. 计算机网络面临的安全性威胁

  计算机网络的通信面临两大威胁:主动攻击、被动攻击;

image-20250416160808005

  被动攻击指的是:攻击者从网络上窃听他人的通信内容;通常称之为:截获;

  主动攻击有:篡改、恶意程序、拒绝服务Dos;

1.2. 安全的计算机网络

  需要达到:

  1. 机密性;

  2. 端点鉴别;

  3. 信息的完整性;

  4. 运行的安全性;

1.3. 数据加密模型

  一般的数据加密模型用户 A 向 B 发送明文 X,通过加密算法 E 运算后,得出密文 Y;Y 经过解密算法 D 运算和解密密钥 K 解出明文;

image-20250416202422923

2. 两类密钥体制

2.1. 对称密钥密码体制

  所谓对称密钥,即加密密钥与解密密钥都使用相同密钥的密码体制;数据加密 DES 就是典型的;

2.2. 公钥密码体制

  公钥密钥体制采用不同的加密密钥和解密密钥;故又称为非对称密钥密码体制;在公钥密码体制中,加密密钥 PK (Public Key,即公钥)是向大众公开的,而解密密钥 SK (Secret Key)

image-20250417080128194

  任何加密方法的安全性取决于密钥的长度和攻破密文所需的计算量;目前公钥加密算法的开销较大,在可见的将来还不会放弃传统加密方法;

3. 鉴别

3.1. 报文鉴别

  鉴别是网络安全中最重要的问题;一是实体鉴别,即鉴别发信人,也成为实体鉴别;二是鉴别报文的完整性;

3.1.1. 用数字签名进行鉴别

  计算机网络中,可以使用数字签名进行鉴别;

image-20250417082642879

3.1.2. 密码散列函数

散列函数在计算机领域中使用广泛;其有以下四个特点:

  1. 虽然输入长度不受限制,但长度应是较短和固定的;相同输入也必须相同输出;
  2. 散列函数的输入和输出是多对一的;
  3. 给出散列值 H(X),无人可以找出 X;即是单向函数;
  4. 好的散列函数还会有特性:输出的每一个比特和输入的都有关,哪怕仅改动一个输入的比特,输出比特也会相差很大;

在计算机中,著名散列函数:MD5、SHA;

3.2. 实体鉴别

  实体鉴别和报文鉴别不同;报文鉴别是对每一个收到的报文都要鉴别报文的发送者,而实体鉴别是在系统接入的全部持续时间内对自己通信的对方实体只验证一次;

  最简单的实体鉴别过程,A --> B 发送带自己身份和口令的报文,并且按照对应密钥 KAB 进行加密,再用该进行解密,从而鉴别实体 A 的身份;

image-20250417083549404

  但是该鉴别有明显漏洞,即 C 可以在网络上截获 A --> B 的报文,不需要破译,直接发送给 B ,让 B 认为 C 是 A ,然后 B 就向 C 发送了许多应该发给 A 的报文;这叫做重放攻击;C 甚至可以截获 A 的 IP 地址,然后将 A 的 IP 地址冒充为自己的 IP 地址,使 B 更加容易受骗;

  为了对付这种重放攻击,可以采用不重数,即一个不重复使用的大随机数;即 一次一数;鉴别过程的不重数可以让 B 把重复的鉴别请求和新的鉴别请求区分开;

image-20250417083919661

  上图即:A 首先明文发送其身份 A 和一个不重数 RA 给 B;接着 B 响应 A 的查问,用共享的密钥 KAB 对 R A 加密后发回 A,同时给出自己的不重数 RB;最后 A 再响应 B 的查问,用共享密钥 KAB 加密后发回 B;这一点重要的是 A 和 B 对不同的绘画必须要使用不同的不重数集;因为不重数不能重复使用,C 进行重放攻击时,无法重复使用所截获的不重数;

  但是还有别的攻击:例如中间人攻击,更具有欺骗性;

image-20250418081537082

4. 密钥分配

  密码算法时公开的,因此网络安全性就完全基于密钥的安全保护;所以密钥的分配时一个重大问题;

4.1. 对称密钥的分配

4.1.1. 对称密钥分配存在的问题

  1. 如果 n 个人通信,需要和其他所有人通信,则需要 n(n-1)/2 个密钥;导致密钥数量大;
  2. 通信双方,如何安全得到共享的密钥?

4.1.2. KDC 密钥分配中心

  1. 目前常用的密钥分配方式是设立密钥分配中心 KDC;假定 A 和 B 都是 KDC 的登记用户;A、B 在 KDC 登记时就已经在 KDC 的服务器上安装了各自和 KDC 进行通信的主密钥 KA 和 KB;密钥分配包含三步走;

image-20250418084444974

  1. 用户 A 向密钥中心 KDC 发送明文,想与 B 通信;明文中给 A、B 在 KDC 登记的身份;
  2. KDC 用随机数产生一次一密的会话密钥 KAB 供 A、B 的这次会话使用;然后向 A 发送回答报文;这个回答报文用 A 的密钥进行加密;报文包含这次会话使用的密钥 KAB 和请 A 转给 B 的一个票据 (ticket),该票据包括 A 和 B 在 KDC 登记的身份,以及这次会话将要使用的密钥 K AB;票据用 B 的密钥 KB 加密,A 也无法知道,因为 A 没有 B 的密钥 KB
  3. 当 B 收到 A 转来的票据并使用自己的密钥 KB 解密后,就知道 A 要和他进行通信,同时也知道 KDC 为这次和 A 通信所分配的会话密钥 KAB;至此,A、B 就可以使用会话密钥 KAB 进行这次通信了;

  注意:密钥在网上传送,都是经过加密的,解密的密钥,不在网上传送;且 KDC 在报文中还可以加入时间戳,防止报文截取者用之前记录的报文进行重放攻击;会话密钥 KAB 时一次性的,因此机密性较高;而 KDC 分配给用户的密钥应定期更滑,防止破译;

  目前出名的对称密钥分配的协议时 Kerberos V5[RFC 4120,4121,建议标准];MIT 开发,即时鉴别协议,也是 KDC;使用 AES 进行加密;

4.1.2.1. Kerberos V5

image-20250421083800496

  1. Kerberos 使用两个服务器,鉴别服务器 AS,和票据授予服务器 TGS;Kerberos 只用于客户与服务器之间的鉴别,不用于人对人的鉴别;需要下列步骤:
  2. A 采用明文向 AS 表明身份;AS 就是 KDC,根据掌握实体等级的身份和响应口令;AS 对 A 的身份进行验证;验证成功,则允许与 TGS 取得联系;
  3. AS 向 A 发送 A 的对称密钥 KA 加密的报文,这个报文包含 A 和 TGS 通信的会话密钥 KS 以及 AS 要发送给 TGS 的票据(票据,采用 TGS 的密钥 TTG 加密的);A 并不保存密钥 KA,但当报文到达 A 的时候,A 键入其口令;如果口令正确,则该口令和适当的算法一起就可以生成密钥 KA;这个口令随即被销毁;解密拿出 KS以及要转发给 TGS 的票据(采用 KTG 加密);
  4. A 向 TGS 发送三项内容:
    1. 转发鉴别服务器 AS 发来的票据;
    2. 服务器 B 的名字;
    3. 用 KS 加密的时间戳;
  5. TGS 发送两个票据;每个都包含 A 和 B 通信的会话密钥 KAB;给 A 的票据,用 KS 加密;给 B 的 KB 加密;
  6. A 向 B 转发 TGS 发来的票据,同时发送 KAB 加密的时间戳 T ;
  7. B 将时间戳 T 加 1 来证实收到票据;B 向 A 发送报文采用密钥 KAB

  同时,Kerberos 要求使用的主机,必须要在时钟上进行松散的同步;即所有主机始终不能误差太大;例如超过 5 分钟;防止重放攻击;

4.2. 公钥的分配

  大家都存有自己私钥,公钥放在网上;那么 A、B 两家公司;这个时候有个捣乱者,给 A 发送邮件,声称自己是 B;邮件附上 B 的公钥(其实是 捣乱者的公钥)最后用捣乱者的私钥进行签名;A 拿到邮件,用邮件给的公钥进行鉴别;发现通过鉴别了;这当然是不行的,所以公钥获取是必须要可靠的;

  目前是,可信的第三方机构,给拥有公钥的实体发一个具有数字签名的数字证书;数字证书就是对公钥与其实体进行绑定的一个证明;因此常称为公钥证书;签发机构就是 认证中心 CA;由政府或知名公司成立;每个证书中写有公钥及其拥有者的标识信息,且证书中由 CA 使用自己私钥的数字签名,即 CA 将 B 未签名的的证书进行散列函数运算,再用 CA 的私钥对散列值进行签名;这样的得到了 CA 的数字签名;将 CA 数字签名和未签名 B 的证书放在一起,构成已签名的 B 的数字证书;

image-20250422225958765

  公司 A 拿到 B的数字证书,可以对 B 的数字证书的真实性进行核实;A 使用数字证书上给出的 CA 公钥,对数字证书 CA 的数字签名进行 E 计算,得到数值;在对 B 的数字证书进行散列计算,再得到数值,比较数值是否一致;一致则为真;

  为了 CA 发布的数字证书可以在各行业通用,采用标准化,制定 X.509 协议标准;其规定,一个数字证书必须要包含字段:

  • X.509 版本;
  • 数字证书名称和序列号;
  • 本数字证书采用的签名算法;
  • 数字证书签发者的唯一标识符;
  • 数字证书的有效期;
  • 主体名;
  • 公钥;

  其中 X.509 提出将多级认证中心链接起来,构成树状的认证系统;最高一级的认证中心称为根认证中心,即公认可信的认证中心;在树状的认证系统中,可能不止一个 根 CA ;根 CA 向下的所有链接都成为信任链,表明在这一条链接上的认证机构都是可信的;

image-20250423084412789

5. 互联网使用的安全协议

5.1. 网络层安全协议

5.1.1. IPsec 协议族概述

  IPsec 并非是单一的协议,而是可以在 IP 层提供安全通信的协议族;包含一个通用框架和若干加密算法,具有较高的灵活性和可扩展性;允许通信双方从中选择合适的算法和参数,以及是否使用鉴别;为了保证互操作性,IPsec 规定其所有的实现都必须包含 IPsec 所推荐的全部加密算法;

  IPsec 就是:IP 安全的缩写;其协议可以分为:

  1. IP 安全数据包格式的两个协议:鉴别首部 AH 协议和封装安全有效载荷 ESP 协议;

  2. 有关加密的三个协议;

  3. 互联网密钥交换 IKE 协议;

  AH 协议提供源点鉴别以及数据完整性,但是不能保密;ESP 则比 AH 复杂很多,提供源点鉴别、数据完整性和保密;IPsec 支持 IPv4 和 IPv6;在 IPv6 中,AH 和 ESP 都可以是扩展首部的一部分;AH 的功能在 ESP 协议之中;使用 ESP ,就无需再用 AH ;使用了 ESP 或 AH 的 IP 数据包,成为 IP 安全数据报(IPsec 数据报);

  对于 IP 安全数据报由两种不同工作方式:第一种工作方式是运输方式;还有一种是隧道方式;但是无论使用哪种,最后 IP 安全数据报的 IP 首部不加密,只有这样,互联网中哥哥路由器才可以识别 IP 首部的信息;

image-20250427081832498

5.1.2. 安全关联

  在发送 IP 安全数据报之前,源实体和目的实体之间必须建立一条网络层的逻辑连接,即 安全关联SA;这样,传统的互联网中无连接的网络层就变为了具有逻辑连接的一个层;安全关联是从源点到终点的单向连接,能够提供安全服务;如果需要双向安全通信,则两个方向都需要建立安全关联;

image-20250429081109337

  公司总部主机 H1 发送给分公司 H2 的 IP 数据报,需要经过公司总部路由器 R1 进行 IPsec 安全加密处理,成为 IP 安全数据包;将原始 IP 隐藏在 IP 安全数据报中;IP 安全数据报经过互联网路由转发,最后到 R2 ;对其进行解密,还原原始数据报,传送给重点主机 H2;这期间,从逻辑上看 IP 安全数据报在安全关联 SA 上传送,就像是通过一个安全隧道;这就是 隧道方式

  如果是和外部的业务员,略有差别,R1 和 H2 进行建立安全关联 SA ;其中业务员是利用安装在便携机中 IPsec 进行鉴别和解密的;

  对于建立安全关联 SA 的路由器或主机,必须要维护这条 SA 的状态信息;当路由器 R1 要通过 SA 发送 IP 安全数据报时,必须要读取 SA 的状态信息,以便知道如何加密和鉴别,该状态信息应该包括:

  1. 一个 32 位连接标识符,成为安全参数索引 SPI;

  2. 安全关联 SA 的源点和终点的 IP 地址;

  3. 所使用的加密类型;

  4. 加密的密钥;

  5. 完整性检查的类型;

  6. 鉴别使用的密钥;

5.1.3. IP 安全数据报的格式

image-20250429224817721

  1. 首先再原始 IP 数据报后面添加 ESP 尾部;ESP 尾部有三个字段:第一个是填充字段,全 0 ;第二个是填充长度(8 字节),代表填充字段的字节数;(填充原因:数据加密,通常要求数据块长度是若干字节的整数倍);第三个是下一个首部,代表 ESP 的有效载荷交给什么协议处理;
  2. 根据安全关联 SA 指明的加密算法和密钥,对 ESP 的有效载荷 + 尾部进行加密;
  3. 对加密完成后,添加 ESP 首部;有两个 32 位字段,第一个字段存放安全参数索引 SPI;通过同一个 SA 的花,采用相同 SPI 值;第二个代表序号,防止重放攻击;
  4. 按照 SA 指明的算法和密钥,对 ESP 的首部 + 加密部分,生成报文鉴别码 MAC;
  5. 将 MAC 报文鉴别码,放在 ESP 尾部的后面;与 首部,有效载荷,尾部一起,构成 IP 安全数据报的有效载荷;
  6. 生成新的 IP 首部,通常为 20 字节,与普通 IP 数据报格式一样,但是,首部中协议字段的值为 50 ,表明再接收端,首部后面有效载荷需要交给 ESP 协议处理;

5.1.4. IPsec 的其他构件

  1. 安全关联数据库 SAD;发送 IP 安全数据报的实体需要很多条安全关联 SA ;那么这些 SA 存放再这里;主机发送 IP 安全数据报的时候,要在 SAD 进行查找响应 SA,获取必要信息;同样,收到 IP 安全数据报,也要再 SAD 查找相关 SA,获得信息来检查该分组的安全性;
  2. 安全策略数据库 SPD:指明什么样的数据报需要进行 IPsec 处理;以及,一个数据报到达的时候,SPD 应该做什么;而 SAD 指出应当做什么(使用 IP 安全数据报还是不使用);SAD 指出,如果需要使用,则应该怎么做;
  3. 互联网密钥交换 IKE:为 IP 安全数据报创建安全关联 SA ;

5.2. 运输层安全协议

5.2.1. 协议 TLS 的要点

  在网上浏览各种信息的时候,浏览的也是机密,不应该被公开;所以,在很多情况下,客户端(浏览器)与服务器之间的通信,需要使用安全的运输层协议;曾广泛使用的:安全套接字层 SSL 和 运输层安全 TLS;协议 TLS 位于运输层和应用层之间;虽然协议 SSL 2.0/3.0 均已废弃,但还是能经常看到 SSL/TLS 视为 TLS 的同义词;因为协议 TLS 本来就源于 SSL(但并不兼容),而现在就协议 SSL 被更新为 新协议 TSL;

image-20250505115919144

  应用层使用协议 TLS 最多就是 HTTP,但并非限于 HTTP;因为 TLS 是对 TCP加密,任何 TCP 之上运行的程序都可以使用 TLS,提供了一个简单带有套接字的应用程序接口 API,这和 TCP 的 API 相似;

image-20250505120108223

  在客户与服务器双方以及建立了 TCP 连接之后,就可以开始执行协议 TLS;这里主要有两个阶段:握手阶段会话阶段;握手阶段,TLS 使用其握手协议,在会话阶段,TLS 使用其记录协议;

  握手阶段,要验证服务器是安全可信,同时生成在后面会话阶段所需的共享密钥,以保证双方交换的数据的私密性和完整性;但是刚开始执行 TLS 协议,通信双方信道是不安全,因此,需要通过不安全信道,得到会话所需共享密钥,这里没有采用 KDC 来分配,而是自己生成共享密钥;用什么方法去保证所传送数据的机密性和完整性;

  协商加密算法:1.客户 A 向 服务器 B 发送自己选定的加密算法;2. 服务器 B 确认自己所支持的算法,同时将自己的 CA 数字证书发给 A;(从 TLS 1.0 更新到 1.1 和 1.2 版本,每次更新增加了一些加密算法,为了协议向后兼容,导致老版本的不太安全的算法也保留,这导致协商过程非常耗时,需要花费 2 倍 RTT 时间;最新 TLS 1.3 把陈旧的很多算法都取消了,只留下集中最安全的,这样将协商时间缩短为 1-RTT);客户端猜测服务器使用什么算法,将自己的选定的发服务器确认;

  服务器鉴别:3. 客户 A 用数字证书的 CA 公钥进行数字证书验证鉴别;

  生成主密钥:4. 客户 A 安装找双方确定的密钥交换算法生成主密钥 MS ; 5. 客户 A 用 B 的公钥对主密钥进行加密;发给服务器 B ;6. 服务器 B 用私钥,进行解密,然后得到 MS;这样就有了共同的主密钥 MS;

6. 系统安全:防火墙

  访问控制技术;严格控制进出网络边界的分组,禁止任何不必要的通信,防止入侵的发生;


Comment