IPSec
IPSec协议族是IETF(Internet Engineering Task Force)制定的一系列协议,它为IP数据报提供了高质量的、可互操作的、基于密码学的安全性。
-
IPSec通过认证头AH(Authentication Header)和封装安全载荷ESP(Encapsulating Security Payload)这两个安全协议来实现。其中,AH安全协议可提供数据源验证和数据完整性校验功能。
-
IPSec通过认证头AH(Authentication Header)和封装安全载荷ESP(Encapsulating Security Payload)这两个安全协议来实现。其中,ESP除可提供数据验证和完整性校验功能外,还提供对IP报文的加密功能。
-
因特网密钥交换协议IKE(Internet Key Exchange)是IPSEC的信令协议。
协议栈结构
IPSec协议有两种封装模式:
-
传输模式:AH或ESP被插入到IP头之后但在所有传输层协议之前,或所有其他IPSec协议之前。
-
隧道模式:AH或ESP插在原始IP头之前,另外生成一个新IP头放到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参考标准
| 标准 | 描述 |
|---|---|
| IP Authentication Header | |
| IP Encapsulating Security Payload (ESP) | |
No comments to display
No comments to display