第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 包计算的完整性校验值。该字段长度由所选择的认证算法决定。