第5 章 Internet 通信安全 导 读 TCP/IP体系结构是当前Internet的基础,TCP/IP网络已基本成为现代计算机网络 的代名词。但是,由于TCP/IP体系结构在设计之初的局限性,Internet存在的安全问题 日益突出,因此人们设计了不同的安全机制来应对。 事实上,可以在TCP/IP体系结构上的任何层次实现安全机制,各层机制有不同的特 点,提供不同的安全性。本章介绍在TCP/IP 不同层次提供安全的3 种典型协议: IPSec、SSL/TLS和PGP。这些安全协议解决了本书图1-2的安全模型所关注的问题: 如何在公开网络中保护传输数据的安全。 5.1 IP 安全 在TCP/IP协议的分层模型中,IP层是可能实现端到端安全通信的最底层。通过在 105 第 5 章 Internet 通信安全 IP 层上实现安全性,不仅可以保护各种带安全机制的应用程序,而且可以保护许多无安 全机制的应用程序。IP 协议一般实现在操作系统中,因此在IP 层实现安全功能时可以 不必修改应用程序。 IETF 于1998 年颁布了一套开放标准网络安全协议IPSec,其目标是为IPv4和IPv6 提供具有较强的互操作能力、高质量和基于加密的安全。IPSec将密码技术应用在网络 层,提供端对端通信数据的私有性、完整性、真实性和防重放攻击等安全服务。 IPSec能支持各种应用的原理在于它可以在IP 层实现加密/认证功能,这样就可以 在不修改应用程序的前提下保护所有的分布式应用,包括远程登录、电子邮件、文件传输 和Web访问等。 IPSec通过多种手段提供IP 层安全服务:允许用户选择所需安全协议;允许用户选 择加密和认证算法;允许用户选择所需的密码算法的密钥。IPSec可以安装在路由器或 主机上。若IPSec安装在路由器上,则可在不安全的Internet上提供一个安全的通道;若 安装在主机上,则能提供主机端对端的安全性。 5.1.1 IPSec 概述 1.IPSec应用 IPSec提供了跨局域网、广域网甚至跨Internet进行端到端安全通信的能力,为主机 到主机的通信流提供机密性、完整性、真实性等安全服务。 图5-1展示了IPSec的典型应用场景。 .场景1:分支机构安全互联。某一组织在不同的城市有分支机构,每个分支机构 拥有一个局域网;在局域网内部,各主机之间的通信无须保护;但是,不同分支机 构之间的通信需要通过公用的Internet,因此需要以安全的方式交换数据。为此, 在分支机构连接外部Internet的边界网络设备(如路由器)上部署IPSec。部署了 IPSec的边界网络设备将对进入Internet的流量进行加密、附加完整性校验码等 操作,而对来自Internet的流量进行解密、完整性校验等操作。这些操作对局域 网内部所有主机都是透明的。基于这些密码操作,流入流出分支结构的IP 流量 得到机密性、完整性、真实性等安全保护。 .场景2:远程安全访问。某位员工居家办公或者临时出差在外时需要访问公司内 部网络的资源。为了以安全的方式达到这一目的,员工主机和公司网络边缘的网 络设备部署IPSec,对发送和接收的IP 数据流提供安全保护。在连接企业网络和 Internet的边缘设备上部署IPSec可以对通过网络边界的所有通信提供安全保 护,而且这些安全操作对企业网络内部所有主机和设备是透明的,企业网络的内 部通信没有安全操作带来的开销。IPSec实现在传输层以下,对所有应用都是透 明的,不需要对应用系统做出任何改变;同时IPSec对用户也是透明的,无须对用 户进行任何安全相关的培训。 106 计算机网络安全(第 3 版) 图5- 1 IPSec的典型应用场景 2.IPSec体系结构 IPSec不是定义了一个单独的协议,而是给出了在IP 层提供安全的一整套体系结 构,包括认证头协议(AH )、封装安全载荷协议(ESP )、密钥管理协议(以及用于加密 和认证的一些算法。IPSec的主要构成组件如图5-2所示。 IKE) 图5- 2 IPSec组件 IPSec的安全功能主要通过IP 认证头(AuthenticationHeader,AH)协议以及封装安 全载荷(EncapsulatingSecurityPayload,ESP)协议实现。AH 提供数据的完整性、真实 性和防重放攻击等安全服务,但不包括机密性。ESP 除实现AH 所实现的功能外,还可 以实现数据的机密性。 完整的IPSec还应包括AH 和ESP 中所使用密钥的交换和管理机制,也就是 t密钥交换(e,协议。IKE 用于动态地认证IPSc参与 InterneInternetKeyExchangIKE) e 各方的身份,并且协商后续数据交换所使用的算法、协议和密钥。 IPSec规范中要求强制实现的加密算法是CBC 模式的DES 和NULL 算法,而认证 算法包括HMAC-MD5,HMAC-SHA-1和NULL 算法。NULL 加密和认证分别是不加 密和不认证。 第 5 章 Internet 通信安全 107 3.IPSec工作模式 IPSec的安全功能主要通过AH 协议和ESP 协议实现,这两个协议以IP 扩展头的方 式增加了安全相关的处理,可以对IP 数据包或上层协议数据进行安全保护。 AH 和ESP 均支持两种模式(传输模式和隧道模式), 如图5-3所示。 图5- 3 IPSec工作模式 1)传输模式 传输模式为IP 的上层协议提供保护,即IP 数据包的载荷(如TCP 报文段、UDP 数 据报或ICMP 消息)得到保护,但IP 头并没有被保护。当一个主机在IPv4上运行AH 或 ESP 时,其载荷是跟在IP 报头后面的数据;对IPv6而言,其载荷是跟在IP 报头后面的数 据和IPv6的任何扩展头。 传输模式的ESP 可以加密和认证IP 载荷,但不包括IP 头。传输模式的AH 可以认 证IP 载荷和IP 报头的选中部分。传输模式在数据包的IP 头和载荷之间插入IPSec信 息;原始IP 头未进行任何安全处理,以明文方式传输,将暴露给沿途所有路由器。 传输模式一般用于两台主机之间的端到端通信,为直接运行在IP 层之上的协议(如 TCP 、UDP 和ICMP)提供安全保护。 2)隧道模式 隧道模式对整个IP 数据包提供保护。为达到这个目的,当IP 数据包附加AH 或 ESP 字段之后,整个数据包加安全字段被当作一个新IP 包的载荷,并且拥有一个新的外 部IP 包头。原来(内部)的整个IP 包利用隧道在网络之间传输,沿途路由器不能检查内 部IP 包头。由于原来的包被封装,因此新的、更大的包可以拥有完全不同的源地址与目 的地址,以增强安全性。 通常,当通信的一端或两端为安全网关(例如部署了IPSec的防火墙或路由器)时,使 用隧道模式。企业网络内部的主机在没有部署IPSec时也可以实现安全通信:当主机生 成的未保护包通过网络边缘的防火墙或路由器时,该部署了IPSec的防火墙或路由器对 整个IP 数据包进行加密和封装,以提供隧道模式的安全性。例如,假设网络中的主机A 生成以另一个网络中主机B作为目的地址的IP 数据包,该IP 包从源主机A被发送到A 所在网络的边界防火墙或安全路由器。如果此数据包需要IPSec处理,则防火墙或安全 路由器执行IPSec处理,给该IP 包添加外层IP 头,外层IP 头的源IP 地址为此防火墙或 安全路由器的IP 地址,目的地址可能为B所在网络的边界防火墙地址。这样,新的IP 包 被传送到B的防火墙,而其间经过的中间路由器仅检查外部IP 头;在B的防火墙处,外 部IP 头被剥除,内部的原始IP 包被送往主机B。 隧道模式的ESP 加密和认证(可选)整个内部IP 包,包括内部IP 包头;隧道模式的 108 计算机网络安全(第 3 版) AH认证整个内部IP包和外部IP头中的选中部分。 5.1.2 IPSec 安全通信 1.安全关联 IPSec的一个核心概念是安全关联(SA )。安全关联是发送方和接收方之间受到密码 保护的单向关系,它对所携带的通信流量提供安全服务:要么对通信实体收到的IP数据 包进行“进入”保护,要么对外发的数据包进行“流出”保护。如果需要双向安全交换,则需 要建立两个安全关联:一个用于发送数据,另一个用于接收数据。 一个安全关联由3个参数唯一确定。 .安全参数索引(SPI):一个与SA相关的位串,仅在本地有意义。这个参数被分配 给每一个SA,并且每一个SA都通过SPI进行标识。发送方把这个参数放置在 每一个流出数据包的SPI域中,使得接收系统能选择合适的SA处理接收包。 SPI并非全局指定,因此它要与目标IP地址、安全协议标识一起唯一标识一 个SA 。 .目标IP地址:目前IPSecSA管理机制中仅允许单播地址。这个地址表示SA的 目的端点地址,可以是用户终端系统、防火墙或路由器。目标IP地址决定了关联 方向。 .安全协议标识:标识该关联是一个AH安全关联还是一个ESP安全关联,即使用 AH协议还是ESP协议保护数据流量。 在IPSec中,对一个IP数据包应用什么样的安全处理由两个数据库的交互来决定: 安全关联数据库(SecurityAsociationDatabase,SAD)和安全策略数据库(SecurityPolicyDatabase,SPD )。 2.SAD 在任何IPSec实现中,都有一个安全关联数据库(SAD )。从概念上讲,SAD包含多 个条目,每个条目对应一个SA,定义与此SA相关联的参数,特别是安全相关的参数。一 个SA通常用以下参数定义。 .序列号计数器:AH或ESP报头中序列号的32位值。 .序列号溢出标志:标志序列号计数器是否溢出;溢出时,停止在此SA上继续传 输包。 .反重放窗口:用于判定一个AH或ESP数据包是否是重放。 .AH信息:认证算法、密钥、密钥生存期和AH的相关参数。 .ESP信息:加密和认证算法、密钥、初始值、密钥生存期和ESP的相关参数。 .生存期:一个特定的时间间隔或字节计数;超过后,此SA要么终止,要么由一个 具有新SPI的新SA替代。 .IPSec协议模式:隧道、传输或通配符。 .PathMTU:路径最大传输单元(不需要分段传输的最大包长度)和迟滞变量。 3.SPD IP流量和特定SA的关联是通过SPD实现的。在概念上,一个SPD包括多个条目; 109 第 5 章 Internet 通信安全 每一个条目定义一个IP 流量的子集并指向一个SA,即将一个特定SA 应用于此IP 流量 子集。在更复杂的情况下,多个IP 流量子集可与一个SA 相连或者多个SA 与一个IP 流 量子集相关。读者可以参见相关的IPSec文档。 每个SPD 条目由IP 和上层协议的某些字段定义,这些字段称为选择子(selector), 因为基于这些字段可以选择一个特定的流量子集并指向一个特定的SA 。选择子包括以 下协议字段。 .目的IP 地址:可以是单一IP 地址、一组或一定范围的地址和地址掩码。后两者 要求多个目的系统共享相同的SA(例如位于防火墙之后)。 .源IP 地址:可以是单一IP 地址、一组或一定范围的地址和地址掩码。后两者要 求多个源系统共享相同的SA(例如位于防火墙之后)。 .用户标识:来自操作系统的用户标识。用户操作系统提供该标识,而不是IP 或上 层报头域提供。 .数据敏感性级别:用于系统提供信息流安全级别(如秘密或未分类)。 .传输层协议:从IPv4或IPv6的邻接头域中获得,可以是单个协议号,也可以是一 组或一定范围的协议号。 .源端口和目的端口:可以是单个TCP 或UDP 端口、一组端口和端口通配符。 表5-1是一个简单的SPD 例子,其中*代表通配符,Action则表示将要应用于此IP 流量子集的安全策略:PROTECT 、BYPASS 或DISCARD 。 各条目含义如下。 .IP 地址100.1.2.1.0/24 的IP 流量,将用传输模式ESP 进 3的主机发往子网198.2. 行保护 ; .1.1. IP 地址100.3的主机发往服务器198.2的HTTP 请求数据,将用传输模式 2.3. ESP 进行保护 ; .IP 地址100.2.1.2的HTTPS 数据,e 1.3的主机发往服务器198.3.不用IPSc进行 保护; .1.1. IP 地址100.3的主机发往子网198.3/24 的IP 流量,将被丢弃,不被发送 出去。 2.3. 表5- 1 一个简单的SPD 例子 Protocol LocalIP Port RemoteIP Port Action * 100.1.2.3 * 198.1.2.0/24 * PROTECT:ESPintransport-mode TCP 100.1.2.3 * 198.1.3.2 80 PROTECT:ESPintransport-mode TCP 100.1.2.3 * 198.1.3.2 443 BYPASS * 100.1.2.3 * 198.1.3.2/24 * DISCARD 4.IPSec处理 当实现IPSec时,每一个发往外部的IP 数据包在发送之前都由IPSec先进行安全相 关的处理,而每一个收到的IP 包在传递给上一层协议前也由IPSec首先进行处理。 110 计算机网络安全(第 3 版) 发送IP 数据包的处理过程如图5-4所示,包括以下步骤。 ①搜索SPD,试图发现应用于此IP 包的安全策略。 ②如果没有找到,则丢弃此IP 包并产生一个错误信息;否则转下一步。 ③如果对这个IP 包的处理策略是DISCARD,则丢弃;如果是BYPASS,那么IPSec 不再对此IP 包进行安全处理。 ④如果对这个IP 包的处理策略是PROTECT,则搜索SAD 以匹配一个应用于此IP 数据包的SA;如果没有找到,则执行IKE 生成一个SA 并加入SAD 中。 ⑤SAD 中匹配的SA 决定如何对这个IP 数据包进行处理:加密、认证或者两者同 时执行,采用隧道模式还是传输模式,以及使用的算法和密钥。 ⑥发送此IP 包。 图5- 4 IP 数据包的发送 接收IP 数据包的处理过程如图5-5所示,包括以下步骤。 ①判断包的类型,即是未经安全处理的IP 数据包,还是经过IPSec处理的安全数 据包。 ②对于未经安全处理的IP 数据包,搜索SPD 。如果发现一个匹配并且策略是 BYPASS,则处理并剥除IP 头并将载荷交给上层相应的协议;如果发现一个匹配并且策 略是PROTECT 或DISCARD,或者未发现匹配,则将丢弃此数据包。 ③对于经过IPSec处理的安全数据包,搜索SAD 。如果没有发现匹配,则丢弃;如果 发现一个匹配,则应用匹配的SA 进行处理并将IP 数据包的载荷交给上层协议。 第 5 章 Internet 通信安全 111 图5- 5 IP 数据包的接收 5.1.3 AH 协议 IP 认证头(AH)协议为IP 数据包提供数据完整性校验和身份认证,还有可选择的抗 重放攻击保护,但不提供数据加密服务。数据完整性确保包在传输过程中内容不可更改; 认证确保终端系统或网络设备能对用户或应用程序进行认证,并且相应地提供流量过滤 功能,同时还能防止地址欺诈攻击和重放攻击。认证基于消息鉴别码(MAC), 双方必须 共享同一个密钥。 由于AH 不提供机密性保证,因此它不需要加密算法。AH 可用来保护一个上层协 议(传输模式)或一个完整的IP 数据报(隧道模式)。它可以单独使用,也可以和ESP 联 合使用。 认证头由如下几个域组成,如图5-6所示。 图5- 6 IPSec认证头 .邻接头(8位):标识AH 字段后面下一个负载的类型。 .有效载荷长度(8位):字长为32 位的认证头长度减2。例如,认证数据域的默认 长度是96 位或3个32 位字,另加3个字长的固定头,总共6个字,则载荷长度域 的值为4。 .保留(15 位):保留给未来使用。当前,这个字段的值设置为0。 112 计算机网络安全(第 3 版) .安全参数索引(32 位): 这个字段与目的IP 地址和安全协议标识一起共同标识当 前数据包的安全关联。 .序列号(32 位): 单调递增的计数值,提供了反重放的功能。在建立SA 时,发送 方和接收方的序列号初始化为0,使用此SA 发送的第一个数据包序列号为1,此 后发送方逐渐增大该SA 的序列号并把新值插入序列号字段。 认证数据(变长): 变长域,包含了数据包的完整性校验值( ICV)或包的MAC 。这个字段的长度必须是32 位字的整数倍,可以包含填充。 . IntegrityCheckValue, 1.AH 传输模式 AH 传输模式只保护IP 数据包的不变部分,它保护的是端到端的通信,通信的终点 必须是IPSec终点,如图5-7所示。 图5- 7 AH 传输模式 在IPv4的传输模式AH 中,AH 插入原始IP 头之后,且在IP 载荷(如TCP 分段)之 前。认证包括除IPv4报头中可变的、被MAC 计算置为0的域以外的整个包。 在IPv6中,AH 被作为端到端载荷,即不被中间路由器检查或处理。因此,AH 出现 在IP 头以及跳、路由和分段扩展头之后。目的选项作为可选报头在AH 前面或后面,由 特定语义决定。同样,认证包括除IPv6报头中可变的、被MAC 计算置为0的域以外的 整个包。 2.AH 隧道模式 AH 用于隧道模式时,整个原始IP 包被认证,AH 被插入原始IP 头和新IP 头之间。 原IP 头中包含通信的原始地址,而新IP 头则包含IPSec端点的地址,如图5-8所示。 图5- 8 AH 隧道模式 IPv 通过使用隧道模式,整个内部IP 包(包括整个内部IP 头)均被AH 保护。外部IP 头 (6中的外部IP 扩展头)除可变且不可预测的域外均被保护。隧道模式可用来替换端 到端安全服务的传输模式。但由于这一协议中没有提供机密性,相当于没有隧道封装这 一保护措施,因此它没有什么用处。 第 5 章 Internet 通信安全 113 5.1.4 ESP 协议 封装安全载荷(ESP)协议为IP 数据包提供数据完整性校验、身份认证和数据加密, 还有可选择的抗重放攻击保护;即除AH 提供的所有服务外,ESP 还提供数据保密服务, 包括报文内容保密和流量限制保密。ESP 用一个密码算法提供机密性,数据完整性则由 身份验证算法提供。ESP 通过插入一个唯一的、单向递增的序列号提供抗重放服务。保 密服务可以独立于其他服务而单独选择,数据完整性校验和身份认证用作保密服务的联 合服务。只有选择了身份认证,才可以选择抗重放服务。 ESP 可以单独使用,也可以和AH 联合使用,还可以通过隧道模式使用。ESP 可以 提供主机到主机、防火墙到防火墙、主机到防火墙之间的安全服务。 图5-9是ESP 包的格式,它包含如下各域。 图5- 9 ESP 包格式 .安全参数索引SPI(32 位):标识安全关联。ESP 中的SPI 是强制字段,总是要 提供。 .序列号(32 位): 单调递增计数值,提供反重放功能。这是强制字段,并且总是要 提供,即使接收方没有选择对特定SA 的反重放服务。如果开放了反重放服务, 则计数值不允许折返。 .载荷数据(变长):变长的字段,包括被加密保护的传输层分段(传输模式)或IP 包 (隧道模式)。该字段的长度是字节的整数倍。 .填充域(0~255 字节): 可选字段,但所有实现都必须支持该字段。该字段满足加 密算法的需要(如果加密算法要求明文是字节的整数倍), 还可以提供通信流量的 保密性。发送方可以填充0~255 字节的填充值。 .填充长度(8位):紧跟填充域,指示填充数据的长度,有效值范围是0~255 。 .邻接头(8位):标识载荷中第一个报头的数据类型(如IPv6中的扩展头或上层协 议TCP 等)。 .认证数据(变长):一个变长域(必须为32 位字长的整数倍), 包含根据除认证数据 域外的ESP 包计算的完整性校验值。该字段长度由所选择的认证算法决定。