IPSec 安全概述
大型网络系统内运行多种网络协议(TCP/IP、IPX/SPX 和 NETBEUA 等),这些网络协议并非为安全通信设计。其 IP 协议维系着整个 TCP/IP 协议的体系结构,除了数据链路层外,TCP/IP 的所有协议的数据都是以 IP 数据报的形式传输的。
TCP/IP 协议族有两种 IP 版本:版本 4(IPv4)和版本 6(IPv6)。IPv6 是 IPv4 的后续版本,简化了 IP 头,其数据报更加灵活,同时 IPv6 增加了对安全性的考虑。目前占统治地位的是 IPv4,IPv4 在设计之初没有考虑安全性,IP 数据包本身并不具备任何安全特性,导致在网络上传输的数据很容易受到各式各样的攻击:比如伪造 IP 包地址、修改其内容、重播以前的包以及在传输途中拦截并查看包的内容等。因此,通信双方不能保证收到 IP 数据报的真实性。
IPSec 协议簇
为了加强因特网的安全性,从 1995 年开始,IETF 着手制定了一套用于保护 IP 通信的 IP 安全协议(IP Security, IPSec)。IPSec 是 IPv6 的一个组成部分,是 IPv4 的一个可选扩展协议。IPSec 弥补了 IPv4 在协议设计时缺乏安全性考虑的不足。
IPSec 定义了一种标准的、健壮的以及包容广泛的机制,可用它为 IP 以及上层协议(比如 TCP 或者 UDP)提供安全保证。IPSec 的目标是为 IPv4 和 IPv6 提供具有较强的互操作能力、高质量和基于密码的安全功能,在 IP 层实现多种安全服务,包括访问控制、数据完整性、机密性等。IPSec 通过支持一系列加密算法如 DES、三重 DES、IDEA 和 AES 等确保通信双方的机密性。
IPSec 协议簇中主要包括三个协议:IKE/AH/ESP
- IKE(Internet Key Exchange,因特网密钥交换):IKE 协议是一种基于 UDP 的应用层协议,它主要用于 SA 协商和密钥管理。
- AH 协议(Authentication Header,验证头):可以证明数据的起源地、保障数据的完整性以及防止相同数据包在因特网重播。
- ESP 协议(Encapsulating Security Payload,封装安全载荷):具有所有 AH 的功能,还可以利用加密技术保障数据机密性。
AH 虽然可以保护通信免受窜改,但并不对数据进行变形转换,数据对于黑客而言仍然是清晰的。为了有效地保证数据传输安全,ESP 进一步提供数据保密性并防止窜改。也就是说,AH 提供数据的可靠性和完整性,但机密性由 ESP 保护。虽然 AH 和 ESP 都可以提供身份认证,但它们有 2 点区别:ESP 要求使用高强度的加密算法,会受到许多限制。多数情况下,使用 AH 的认证服务已能满足要求,相对来说,ESP 开销较大。同时有两套不同的安全协议意味着可以对 IPSec 网络进行更细粒度的控制,选择安全方案可以有更大的灵活度。
IPSec 的实现方式
IPSec 的实现方式有两种:传输模式和隧道模式,都可用于保护通信。
传输模式
传输模式用于两台主机之间,保护传输层协议头,实现端到端的安全性。当数据包从传输层传送给网络层时,AH 和 ESP 会进行拦截,在 IP 头与上层协议之间需插入一个 IPSec 头。当同时应用 AH 和 ESP 到传输模式时,应该先应用 ESP,再应用 AH。
传输模式的封包结构如下所示: 外层 IP 头 -> IPSec 头 (AH/ESP) -> 原始 IP 头 -> 上层数据
隧道模式
隧道模式用于主机与服务器,或者服务器与服务器之间,保护整个 IP 数据包,将整个 IP 数据包进行封装(称为内部 IP 头),然后增加一个 IP 头(称为外部 IP 头),并在内部与外部 IP 头之间插入一个 IPSec 头。
隧道模式的封包结构如下所示: 外层 IP 头 -> IPSec 头 (AH/ESP) -> 原始 IP 头 -> 原始上层数据
IPSec 可在终端主机、网关/路由器或者两者中同时进行实施和配置。至于 IPSec 在网络什么地方配置,则由用户对安全保密的要求来决定。在需要确保端到端的通信安全时,在主机实施显得尤为有用。然而,在需要确保网络一部分的通信安全时,在路由器中实施 IPSec 就显得非常重要。
AH(Authentication Header,认证头)
AH 为 IP 报文提高能够数据完整性校验和身份验证,还具备可选择的重放攻击保护,但不提供数据加密保护。AH 不对受保护的 IP 数据报的任何部分进行加密,除此之外,AH 具有 ESP 的所有其他功能。AH 和 ESP 同时保护数据,在顺序上,AH 在 ESP 之后,AH 格式如图:
头部(8 位)表示 AH 后的载荷类型,传输模式下是 6(TCP)或 17(UDP),隧道模式下是 5(TCP)或 41(UDP)。载荷长度(8 位)是整个 AH 的长度减 2,长度以 32 为单位。保留(16)位是保留字段,全为 0。安全参数索引(32 位)与外部 IP 头的目的地址一起对报文进行身份验证和完整性校验,序列号(32 位)是一个单向递增的计数器,提供抗重播能力。验证数据的长度由具体的验证算法决定。


