Skip to main content

5. Payloads and Defined Values (载荷和定义值)

本文档指定使用符合RFC2408定义的若干ISAKMP载荷。以下载荷被扩展或进一步指定。

Next Payload TypeValue
Security Association (SA)1
Identification (ID)5
Nonce (N)10

群组安全交换中需要几种新的载荷格式。

Next Payload TypeValue
SA KEK Payload (SAK)15
SA TEK Payload (SAT)16
Key Download (KD)17
Sequence Number (SEQ)18
Proof of Possession (POP)19

5.1. Identification Payload (身份识别载荷)

身份识别载荷 (Identification Payload) 用于标识群组身份,该身份稍后将与群组的安全关联相关联。群组身份可以 (MAY) 映射到特定的IP多播组,或可以 (MAY) 指定更通用的标识符,例如表示一组相关多播流的标识符。

身份识别载荷定义如下:

 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 Payload ! RESERVED ! Payload Length !
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! ID Type ! RESERVE2 !
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ Identification Data ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

身份识别载荷字段定义如下:

  • Next Payload (1字节) -- 消息中下一个载荷的载荷类型标识符。如果当前载荷是消息中的最后一个,此字段将为零 (0)。
  • RESERVED (1字节) -- 未使用,必须 (MUST) 为零 (0)。
  • Payload Length (2字节) -- 身份识别数据的长度(字节),包括通用头部。
  • Identification Type (1字节) -- 描述在身份识别数据字段中找到的身份信息的值。
  • RESERVED2 (2字节) -- 未使用,必须 (MUST) 为零 (0)。
  • Identification Data (可变长度) -- 值,由身份识别类型指示。

5.1.1. Identification Type Values (身份识别类型值)

下表列出了身份识别载荷中的身份识别类型字段的分配值。

ID TypeValue
RESERVED0 - 10
ID_KEY_ID11
RESERVED12 - 127
Private Use128 - 255

5.1.1.1. ID_KEY_ID

在GDOI ID载荷的上下文中,ID_KEY_ID指定四 (4) 字节的群组标识符。

5.2. Security Association Payload (安全关联载荷)

安全关联载荷 (Security Association Payload) 在RFC 2408中定义。对于GDOI,GCKS使用它来断言重密钥和数据安全SA的安全属性。

 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 Payload ! RESERVED ! Payload Length !
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
! DOI !
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
! Situation !
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
! SA Attribute Next Payload ! RESERVED2 !
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!

安全关联载荷字段定义如下:

  • Next Payload (1字节) -- 标识GROUPKEY-PULL或GROUPKEY-PUSH消息的下一个载荷。下一个载荷禁止 (MUST NOT) 是SAK载荷或SAT载荷类型,而是下一个非安全关联类型载荷。
  • RESERVED (1字节) -- 必须 (MUST) 为零。
  • Payload Length (2字节) -- 当前载荷的字节长度,包括通用头部和所有TEK和KEK载荷。
  • DOI (4字节) -- 是GDOI,值为2。
  • Situation (4字节) -- 必须 (MUST) 为零。
  • SA Attribute Next Payload (1字节) -- 必须 (MUST) 是SAK载荷或SAT载荷。有关每种载荷类型在何种情况下需要存在的描述,请参见第5.2.1节。
  • RESERVED2 (2字节) -- 必须 (MUST) 为零。

5.2.1. Payloads Following the SA Payload (SA载荷之后的载荷)

定义群组使用的KEK和/或TEK的特定安全关联属性的载荷必须 (MUST) 跟随SA载荷。每个载荷的数量取决于群组策略。可以 (MAY) 有零个或一个SAK载荷,以及零个或多个SAT载荷,其中必须 (MUST) 至少存在一个SAK或SAT载荷。

这种灵活性允许适应各种群组策略。例如,如果群组策略不需要使用重密钥SA,GCKS将不需要向群组成员发送SA KEK属性,因为所有SA更新都将使用注册SA执行。或者,群组策略可能 (MIGHT) 使用重密钥SA,但选择仅作为注册SA的一部分向群组成员下载KEK。因此,作为重密钥SA消息SA载荷的一部分,不需要KEK策略 (在SA KEK属性中)。

指定多个SAT允许多个会话成为同一群组的一部分,并且允许多个流与会话关联 (例如,视频、音频和文本),但每个流都有单独的安全关联策略。

5.3. SA KEK Payload (SA KEK载荷)

SA KEK (SAK) 载荷包含群组的KEK方法的安全属性以及特定于GROUPKEY-PULL操作的参数。源和目标身份描述用于GROUPKEY-PULL数据报的身份。

 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 Payload ! RESERVED ! Payload Length !
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
! Protocol ! SRC ID Type ! SRC ID Port !
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
!SRC ID Data Len! SRC Identification Data ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
! DST ID Type ! DST ID Port !DST ID Data Len!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
! DST Identification Data ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
! !
~ SPI ~
! !
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
! POP Algorithm ! POP Key Length !
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
~ KEK Attributes ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!

SAK载荷字段定义如下:

  • Next Payload (1字节) -- 标识GROUPKEY-PULL或GROUPKEY-PUSH消息的下一个载荷。此消息唯一有效的下一个载荷类型是SAT载荷或零,表示没有SA TEK载荷。
  • RESERVED (1字节) -- 必须 (MUST) 为零。
  • Payload Length (2字节) -- 当前载荷的字节长度,包括通用头部、身份识别数据和所有KEK属性。
  • Protocol (1字节) -- 重密钥协议的值。GDOI将此值定义为GROUPKEY_PULL_PROTO_RESERVED (值0) 和GROUPKEY_PUSH_PROTO (值1)。
  • SPI (16字节) -- 重密钥SA的安全参数索引 (Security Parameter Index)。
  • KEK Attributes (可变长度) -- 包含描述重密钥SA加密和签名方法的属性。

5.3.1. KEK Attributes (KEK属性)

KEK属性包含群组KEK的加密策略。这些属性在GROUPKEY-PULL和GROUPKEY-PUSH消息的SA载荷中传输。

5.3.2. KEK_MANAGEMENT_ALGORITHM

KEK_MANAGEMENT_ALGORITHM属性描述用于管理重密钥SA的算法。定义的值包括:

  • LKH (Logical Key Hierarchy, 逻辑密钥层次结构)

5.3.3. KEK_ALGORITHM

KEK_ALGORITHM属性描述用于加密GROUPKEY-PUSH消息的加密算法。

5.3.4. KEK_KEY_LENGTH

KEK_KEY_LENGTH属性定义KEK的密钥长度(位)。

5.3.5. KEK_KEY_LIFETIME

KEK_KEY_LIFETIME属性定义KEK的生命周期(秒)。

5.3.6. SIG_HASH_ALGORITHM

SIG_HASH_ALGORITHM属性描述用于生成GROUPKEY-PUSH消息签名的哈希算法。

5.3.7. SIG_ALGORITHM

SIG_ALGORITHM属性描述用于签署GROUPKEY-PUSH消息的签名算法。

5.3.8. SIG_KEY_LENGTH

SIG_KEY_LENGTH属性定义签名密钥的长度(位)。

5.3.9. KE_OAKLEY_GROUP

KE_OAKLEY_GROUP属性标识用于完美前向保密性 (PFS) 的Oakley群组。

5.4. SA TEK Payload (SA TEK载荷)

SA TEK (SAT) 载荷包含群组的数据安全SA的安全属性。每个SAT载荷标识单个安全协议(例如IPsec ESP)并包含该协议的安全关联参数。

5.4.1. PROTO_IPSEC_ESP

当协议类型为PROTO_IPSEC_ESP时,SAT载荷定义IPsec ESP的安全关联参数,包括:

  • 加密算法 (Encryption Algorithm)
  • 认证算法 (Authentication Algorithm)
  • 密钥长度 (Key Length)
  • SA生命周期 (SA Lifetime)

5.4.2. Other Security Protocols (其他安全协议)

未来可以 (MAY) 为其他安全协议定义SAT载荷格式。任何此类定义必须 (MUST) 在单独的RFC中指定。

5.5. Key Download Payload (密钥下载载荷)

密钥下载 (Key Download, KD) 载荷包含群组密钥材料。KD载荷结构允许传输多个密钥和密钥类型。

5.5.1. TEK Download Type (TEK下载类型)

TEK下载类型包含数据安全SA的流量加密密钥 (Traffic Encryption Key)。

5.5.2. KEK Download Type (KEK下载类型)

KEK下载类型包含重密钥SA的密钥加密密钥 (Key Encryption Key)。

5.5.3. LKH Download Type (LKH下载类型)

LKH下载类型包含逻辑密钥层次结构 (Logical Key Hierarchy) 密钥数组。

5.6. Sequence Number Payload (序列号载荷)

序列号 (Sequence Number, SEQ) 载荷包含GROUPKEY-PUSH消息的序列号。序列号用于防止重放攻击 (Replay Attacks) 并确保群组成员以正确的顺序处理重密钥消息。

序列号必须 (MUST) 是单调递增的。群组成员必须 (MUST) 拒绝序列号小于或等于先前接收的序列号的GROUPKEY-PUSH消息。

5.7. Proof of Possession (拥有证明)

拥有证明 (Proof of Possession, POP) 载荷包含签名,证明发送方拥有与其证书关联的私钥。POP载荷用于GROUPKEY-PULL交换中的可选认证。

5.8. Nonce (随机数)

随机数 (Nonce) 载荷包含随机或伪随机数据,用于确保消息的新鲜性 (Freshness) 并防止重放攻击。随机数在GROUPKEY-PULL交换中使用。