Skip to main content

IPSec

IPSec协议族是IETF(Internet Engineering Task Force)制定的一系列协议,它为IP数据报提供了高质量的、可互操作的、基于密码学的安全性。

  • IPSec报文AH封装 IPSec通过认证头AH(Authentication Header)和封装安全载荷ESP(Encapsulating Security Payload)这两个安全协议来实现。其中,AH安全协议可提供数据源验证和数据完整性校验功能。

  • IPSec ESP IPSec通过认证头AH(Authentication Header)和封装安全载荷ESP(Encapsulating Security Payload)这两个安全协议来实现。其中,ESP除可提供数据验证和完整性校验功能外,还提供对IP报文的加密功能。

  • IPSec IKE 因特网密钥交换协议IKE(Internet Key Exchange)是IPSEC的信令协议。

协议栈结构

IPSec协议有两种封装模式:

  • 传输模式:AH或ESP被插入到IP头之后但在所有传输层协议之前,或所有其他IPSec协议之前。

  • 隧道模式:AH或ESP插在原始IP头之前,另外生成一个新IP头放到AH或ESP之前。

此外,AH和ESP协议可以组合使用,如图 AH和ESP协议组合使用所示。

AH封装
传输模式:
  |<---Authentication Fields (Not including the variable field of IP header) --->|
  +-------------------+-------------------+------------------------+-------------+
  |     IP Header     |     AH Header   |     TCP/UDP Header     |     Data   |
  |   (protocol=51)   |                   |                       |             |
  +-------------------+-------------------+------------------------+-------------+

隧道模式:
  |<- Authentication Fields (Not including the variable field of New IP header) ->|
  +-----------------+-------------+-------------+------------------+--------------+
  | New IP Header | AH Header | IP Header | TCP/UDP Header |     Data     |
  | (protocol=51) |             |             |                 |             |
  +-----------------+-------------+-------------+------------------+--------------+
ESP封装
传输模式:
            |<------ Authentication Fields -------->|
                    |<---- Encryption Fields ----->|
  +---------+--------+-----------+--------+---------+-------+
  | IP/IPv6 | ESP   | TCP/UDP | Data |   ESP   | ESP |
  | Header | Header |   Header |       | Tailer | Auth |
  +---------+--------+-----------+--------+---------+-------+

隧道模式:
  |<-------------------- Authentication Fields -------------------->|
                        |<----------- Encryption Fields ---------->|
  +-------------+--------+-----------+-----------+--------+---------+-------+
  | New IP/IPv6 | ESP   | IP/IPv6 | TCP/UDP | Data |   ESP   | ESP |
  |   Header   | Header |   Header |   Header |       | Tailer | Auth |
  +-------------+--------+-----------+-----------+--------+---------+-------+
AH和ESP协议组合使用
传输模式:
  |<-------------------   AH Authentication Fields   ------------------->|
  |                       |<---- ESP Authentication Fields ---->|       |
  |                                 |<-- ESP Encryption Fields -->|       |
  +---------------+--------+---------+--------------------+----------------+
  |   IP Header   |   AH   |   ESP   | TCP/UDP | Data |   ESP | ESP |
  | (protocol=51) | Header | Header |   Header |       | Tailer | Auth |
  +---------------+--------+---------+--------------------+----------------+

隧道模式:
  |<----------------------   AH Authentication Fields   --------------------->|
  |                       |<------ ESP Authentication Fields ------->|       |
  |                                 |<---- ESP Encryption Fields ----->|       |
  +---------------+--------+---------+--------+---------+------+--------+-------+
  | New IP Header |   AH   |   ESP   |   IP   | TCP/UDP | Data |   ESP | ESP |
  | (protocol=51) | Header | Header | Header | Header |     | Tailer | Auth |
  +---------------+--------+---------+--------+---------+------+--------+-------+

IKE normally listens and sends on UDP port 500, though IKE messages may also be received on UDP port 4500 with a slightly different format.

IKE 通常在 UDP 端口 500 上侦听和发送,但 IKE 消息也可能在 UDP 端口 4500 上以稍微不同的格式接收。

IPSec IKE封装
   +-------------------------------------+
  |                 IKE               |
  +-------------------------------------+
  |       UDP Header (Port = 500)     |
  +-------------------------------------+
  |         IPv4/IPv6 Header           |
  +-------------------------------------+
  |                 L2                 |
  +-------------------------------------+
  |                 L1                 |
  +-------------------------------------+

IPSec报文AH封装

IPSec通过认证头AH(Authentication Header)和封装安全载荷ESP(Encapsulating Security Payload)这两个安全协议来实现。其中,AH安全协议可提供数据源验证和数据完整性校验功能。

AH头部格式
   0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header   | Payload Len |         RESERVED             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Security Parameters Index (SPI)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Sequence Number Field                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Integrity Check Value-ICV (variable)               |
+                                                               +
|                   ... ...                                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
AH头部字段解释
字段 长度 描述
Next Header 8比特 表示认证头部之后的下一个负载。
Payload Len 8比特 AH的长度减2,4字节为计数单位。例如,有个96比特的认证值,长度将是"4"(即头部固定的3个4字节 + ICV的3个4字节 - 2)。对于IPv6,头部总长度必须为8字节的倍数。
RESERVED 16比特 预留将来使用。必须置0,接收时忽略。
Security Parameters Index 32比特 用于给报文接收端识别SA
Sequence Number Field 32比特 序列号,每发送一个报文,计数加1,例如每发一个SA报文序列号增加1。
Integrity Check Value-ICV 变长 报文的ICV字段,可变长度,长度必须为32比特的整数倍。

IPSec ESP

IPSec通过认证头AH(Authentication Header)和封装安全载荷ESP(Encapsulating Security Payload)这两个安全协议来实现。其中,ESP除可提供数据验证和完整性校验功能外,还提供对IP报文的加密功能。

ESP封装及头部格式
 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Security Parameters Index (SPI)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Sequence Number                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Payload Data* (variable)                   |
~                                                               ~
|                                                               |
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |     Padding (0-255 bytes)                     |
+-+-+-+-+-+-+-+-+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               | Pad Length   | Next Header   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Integrity Check Value-ICV   (variable)               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ESP封装及头部字段解释
字段 长度 描述
Security Parameters Index 32比特 安全参数索引。
Sequence Number 32比特 序列号。
Payload Data* 变长 有效载荷数据(可变)。
Padding 0–255字节 填充字段。
Pad Length 8比特 填充字段长度。
Next Header 8比特 下一个头。
Integrity Check Value-ICV 变长 验证数据。

IPSec IKE

因特网密钥交换协议IKE(Internet Key Exchange)是IPSEC的信令协议。

IKE头部格式
0               7              15              23              31
+---------------------------------------------------------------+ -----
|                                                               |   |    
+                     IKE_AS Initiator SPI                     +   |
|                                                               |   |
+---------------------------------------------------------------+   |
|                                                               |   |
+                     IKE_AS Responder SPI                     +   |
|                                                               |   |
+---------------------------------------------------------------+ IKE Header
| Next Payload |MjVer |MnVer |Exchange Type   |     Flags     |   |
+---------------------------------------------------------------+   |
|                       Message ID                             |   |
+---------------------------------------------------------------+   |
|                       Length                                 |   |
+---------------------------------------------------------------+ -----
| Next Payload2 |C| RESERVED |         Payload Length       |   Payload Header
+---------------------------------------------------------------+ -----
|                                                               |
+                                                               +
|                           Payload                             |
+                                                               +
|                                                               |
+---------------------------------------------------------------+
IKE头部字段解释
字段 长度 描述
IKE_AS Initiator SPI 8B 发送者用来唯一标识一个IKE安全联盟,该值不能设置为0。
IKE_AS Responder SPI 8B 应答者用来唯一标识一个IKE安全联盟,对于IKE初始交互的消息该值必须为0,其他消息不能为0。
Next Payload 1B 仅随头部之后的负载的类型。
MjVer 4比特 标识所使用的IKE协议的最大版本。
MnVer 4比特 标识所使用的IKE协议的最小版本。
Exchange Type 1B 0-33: RESERVED34: IKE_SA_INIT35: IKE_AUTH36: CREATE_CHILD_SA37: INFORMATIONAL38-239: RESERVED TO IANA240-255: Reserved for private use.
Flags 1B 消息中设置的特定选项。如果Flag域置位表示带有选项。X(reserved) (bits 0-2) - 发送时必须清0,接收时忽略。I(nitiator) (bit 3 of Flags) - IKE_SA原始发送者在发送消息是必须将此位置1,源回应者发送的消息必须清零。V(ersion) (bit 4 of Flags) - 标识转发者支持的版本比Major字段标识的版本更高 IKEv2版本的实现中,此比特必须置0,接收时忽略。R(esponse) (bit 5 of Flags) - 标识此消息是对相同Message-ID的消息的一个回应消息。所有请求消息中此位需置0,所有回应消息置1。X(reserved) (bits 6-7 of Flags) - 发送时需置0,接收时忽略。
Message ID 4B 消息标识符,用来对请求消息和呼应消息的匹配,以便控制丢弃消息的重复发送。这在抑制重放攻击时对保障协议的安全性很关键。
Length 4B 整个消息的长度(报文头+负荷),以字节为单位。
Next Payload 1B 标识消息中的下一个负载的类型。如果当前的负载是消息的最后一个,则此字段置0。0: No Next Payload1-32: RESERVED33: Security Association (SA)34: Key Exchange (KE)35: Identification - Initiator (IDi)36: Identification - Responder (IDr)37: Certificate (CERT)38: Certificate Request (CERTREQ)39: Authentication (AUTH)40: Nonce (Ni, Nr)41: Notify (N)42: Delete (D)43: Vendor ID (V)44: Traffic Selector - Initiator (TSi)45: Traffic Selector - Responder (TSr)46: Encrypted (E)47: Configuration (CP)48: Extensible Authentication (EAP)49-127: RESERVED TO IANA128-255: PRIVATE USE
C (Critical) 1比特 如果发送者想让接收者在无法识别当前一个负载的Next Payload域是能够跳过此域,可将此位置0。如果接收者能够识别负载的类型代码,则忽略此位。负载类型为以下情况时,此位必须设置为0。Security Association (SA)Key Exchange (KE)Identification - Initiator (IDi)Identification - Responder (IDr)Certificate (CERT)Certificate Request (CERTREQ)Authentication (AUTH)Nonce (Ni, Nr)Notify (N)Delete (D)Vendor ID (V)Traffic Selector - Initiator (TSi)Traffic Selector - Responder (TSr)Encrypted (E)Configuration (CP)Extensible Authentication (EAP)注意,C比特应用于当前负载,而不是下一个负载。
RESERVED 7比特 发送时必须置0,接收时忽略。
Payload Length 2B 当前负载的长度,包括通用负载的头部,以字节为单位。

参考标准

IPSec参考标准
标准 描述
RFC 4302 IP Authentication Header
RFC 4303 IP Encapsulating Security Payload (ESP)
RFC 4306 Internet Key Exchange (IKEv2) Protocol