RFC 6407

The Group Domain of Interpretation

๐Ÿ“… published October 2011, from ietf

The Group Domain of Interpretation ๐ŸŽ€

Okay bestie, this is RFC 6407, and it's a whole Standards Track document ๐Ÿ’… (ISSN 2070-1721, dated October 2011). It was written by B. Weis and S. Rowles from Cisco Systems, plus T. Hardjono from MIT. ๐Ÿฆ‹ It obsoletes RFC 3547, and the header doesn't list any updates. This is part 1 of 13, so more is coming! ๐Ÿ’–

Abstract โœจ

Okay so the GDOI (Group Domain of Interpretation) protocol is the star of the show, and this doc is basically describing it. It's the protocol specified in RFC 3547, and it handles group key management so groups can talk securely, following the architecture in RFC 4046. ๐Ÿ” The GDOI manages group security associations, which IPsec uses and which other data security protocols potentially use too ๐Ÿ‘‘. And yes, this document replaces RFC 3547 ๐Ÿ’œ.

Status of This Memo ๐ŸŒธ

This is an Internet Standards Track document ๐Ÿ”ฅ.

It's a product of the Internet Engineering Task Force (IETF) and it represents the consensus of the IETF community ๐Ÿซถ. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check out Section 2 of RFC 5741 ๐Ÿงš.

For the current status, any errata, and how to send feedback, go to http://www.rfc-editor.org/info/rfc6407 ๐ŸŒˆ.

Copyright (c) 2011 IETF Trust and the persons identified as the document authors. All rights reserved โœจ.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, because they describe your rights and restrictions with respect to this document ๐Ÿ™ˆ. Code Components pulled out of this document must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Simplified BSD License ๐Ÿฆ‹.

Here's the tea ๐Ÿ“: this document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The people controlling the copyright in some of that material may not have granted the IETF Trust the right to allow modifications outside the IETF Standards Process. So unless you've got an adequate license from those copyright holders, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process. The exceptions are formatting it for publication as an RFC or translating it into languages other than English ๐Ÿ’….

Table of Contents ๐Ÿงš

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
     1.1.  Requirements Notation  . . . . . . . . . . . . . . . . . .  5
     1.2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . .  6
     1.3.  Acronyms and Abbreviations . . . . . . . . . . . . . . . .  7
   2.  GDOI Phase 1 Protocol  . . . . . . . . . . . . . . . . . . . .  8
     2.1.  DOI value  . . . . . . . . . . . . . . . . . . . . . . . .  8
     2.2.  UDP port . . . . . . . . . . . . . . . . . . . . . . . . .  8
   3.  GROUPKEY-PULL Exchange . . . . . . . . . . . . . . . . . . . .  9
     3.1.  Authorization  . . . . . . . . . . . . . . . . . . . . . .  9
     3.2.  Messages . . . . . . . . . . . . . . . . . . . . . . . . .  9
     3.3.  Group Member Operations  . . . . . . . . . . . . . . . . . 12
     3.4.  GCKS Operations  . . . . . . . . . . . . . . . . . . . . . 13
     3.5.  Counter-Modes of Operation . . . . . . . . . . . . . . . . 14
   4.  GROUPKEY-PUSH Message  . . . . . . . . . . . . . . . . . . . . 16
     4.1.  Use of Signature Keys  . . . . . . . . . . . . . . . . . . 17
     4.2.  ISAKMP Header Initialization . . . . . . . . . . . . . . . 17
     4.3.  GCKS Operations  . . . . . . . . . . . . . . . . . . . . . 17
     4.4.  Group Member Operations  . . . . . . . . . . . . . . . . . 18
   5.  Payloads and Defined Values  . . . . . . . . . . . . . . . . . 19
     5.1.  Identification Payload . . . . . . . . . . . . . . . . . . 20
     5.2.  Security Association Payload . . . . . . . . . . . . . . . 20
     5.3.  SA KEK Payload . . . . . . . . . . . . . . . . . . . . . . 21
     5.4.  Group Associated Policy  . . . . . . . . . . . . . . . . . 27
     5.5.  SA TEK Payload . . . . . . . . . . . . . . . . . . . . . . 30
     5.6.  Key Download Payload . . . . . . . . . . . . . . . . . . . 34
     5.7.  Sequence Number Payload  . . . . . . . . . . . . . . . . . 44
     5.8.  Nonce  . . . . . . . . . . . . . . . . . . . . . . . . . . 44
     5.9.  Delete . . . . . . . . . . . . . . . . . . . . . . . . . . 45
   6.  Algorithm Selection  . . . . . . . . . . . . . . . . . . . . . 45
     6.1.  KEK  . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
     6.2.  TEK  . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
   7.  Security Considerations  . . . . . . . . . . . . . . . . . . . 47
     7.1.  ISAKMP Phase 1 . . . . . . . . . . . . . . . . . . . . . . 47
     7.2.  GROUPKEY-PULL Exchange . . . . . . . . . . . . . . . . . . 48
     7.3.  GROUPKEY-PUSH Exchange . . . . . . . . . . . . . . . . . . 50
     7.4.  Forward and Backward Access Control  . . . . . . . . . . . 51
     7.5.  Derivation of Keying Material  . . . . . . . . . . . . . . 53
   8.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 53
     8.1.  Additions to Current Registries  . . . . . . . . . . . . . 53
     8.2.  New Registries . . . . . . . . . . . . . . . . . . . . . . 54
     8.3.  Cleanup of Existing Registries . . . . . . . . . . . . . . 55
   9.  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 57
   10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 57
     10.1. Normative References . . . . . . . . . . . . . . . . . . . 57
     10.2. Informative References . . . . . . . . . . . . . . . . . . 58
   Appendix A.  GDOI Applications . . . . . . . . . . . . . . . . . . 62
   Appendix B.  Significant Changes from RFC 3547 . . . . . . . . . . 62

1. Introduction โœจ

Okay so secure group and multicast apps need a way for every group member to share the same security policy and keying material ๐Ÿ” This doc describes the Group Domain of Interpretation (GDOI)! It's an Internet Security Association and Key Management Protocol (ISAKMP) [RFC2408] Domain of Interpretation (DOI), aka a group key management system ๐Ÿ’– GDOI hands out security associations (SAs) for the IPsec Authentication Header (AH) [RFC4302] and Encapsulating Security Payload (ESP) [RFC4303] protocols, plus potentially other data security protocols used in group apps. It uses the group key management model from [RFC4046], and "The Multicast Group Security Architecture" [RFC3740] describes that model more generally ๐Ÿฆ‹

In this group key management model, the GDOI participants are a Group Controller/Key Server (GCKS) and a group member (GM) ๐Ÿซถ A group member contacts ("registers with") a GCKS to join the group. During registration, mutual authentication and authorization happen, and then the GCKS hands the group member the current group policy and keying material over an authenticated and encrypted session ๐Ÿ”ฅ The GCKS can also reach out first ("rekeys") to group members to push updates to group policy ๐Ÿš€

ISAKMP defines two "phases" of negotiation (Section 2.3 of [RFC2408]) ๐ŸŒธ A Phase 1 security association provides mutual authentication and authorization, and there's also a security association that the protocol participants use to run a Phase 2 exchange. This document incorporates (i.e., uses but does not redefine) the Phase 1 security association definition from the Internet DOI [RFC2407], [RFC2409] ๐Ÿ’… RFCs 2407, 2408, and 2409 were obsoleted by [RFC4306] (and later [RFC5996]), but this document still uses them, because the protocol definitions stay relevant for ISAKMP protocols other than IKEv2 ๐Ÿงš

The GDOI includes two new Phase 2 ISAKMP exchanges (protocols), plus the necessary new payload definitions for the ISAKMP standard (Section 2.1 of [RFC2408]) โœจ These two new protocols are:

  1. The GROUPKEY-PULL registration protocol exchange. This exchange uses "pull" behavior, since the member is the one who starts retrieving these SAs from a GCKS ๐Ÿ™‹โ€โ™€๏ธ It's protected by an ISAKMP Phase 1 protocol, as described above. When a GROUPKEY-PULL exchange wraps up, an authorized group member has received and installed a set of SAs that represent group policy, and it's ready to join secure group communications ๐ŸŽ€
  2. The GROUPKEY-PUSH rekey protocol exchange. The rekey protocol is a datagram initiated ("pushed") by the GCKS, usually delivered to group members using an IP multicast address ๐Ÿ“ฃ It's an ISAKMP protocol, where the cryptographic policy and keying material ("Rekey SA") are included in the group policy the GCKS distributed during the GROUPKEY-PULL exchange. When a GROUPKEY-PUSH exchange wraps up, the key server has sent group policy to all authorized group members, so the receiving members can take part in secure group communications ๐Ÿ’œ If a group management method is included in group policy (as described in Section 7.4), then by the end of the GROUPKEY-PUSH exchange, some members of the group may have been de-authorized and can no longer take part in secure group communications ๐Ÿ’€
  +--------------------------------------------------------------+
  |                                                              |
  |                    +--------------------+                    |
  |            +------>|     GDOI GCKS      |<------+            |
  |            |       +--------------------+       |            |
  |            |                 |                  |            |
  |       GROUPKEY-PULL          |             GROUPKEY-PULL     |
  |         PROTOCOL             |               PROTOCOL        |
  |            |                 |                  |            |
  |            v           GROUPKEY-PUSH            v            |
  |   +-----------------+     PROTOCOL     +-----------------+   |
  |   |                 |        |         |                 |   |
  |   |    GDOI GM(s)   |<-------+-------->|    GDOI GM(S)   |   |
  |   |                 |                  |                 |   |
  |   +-----------------+                  +-----------------+   |
  |            |                                    ^            |
  |            v                                    |            |
  |            +-Data Security Protocol (e.g., ESP)-+            |
  |                                                              |
  +--------------------------------------------------------------+

Figure 1. Group Key Management Model

Although the GROUPKEY-PUSH protocol specified by this document can be used to refresh the Rekey SA protecting the GROUPKEY-PUSH protocol, the most common use of GROUPKEY-PUSH is to set up keying material and policy for a data security protocol ๐Ÿ“

GDOI defines several payload types used to distribute policy and keying material within the GROUPKEY-PULL and GROUPKEY-PUSH protocols: Security Association (SA), SA KEK, SA TEK, Group Associated Policy (GAP), Sequence Number (SEQ), and Key Download (KD) ๐Ÿ“ฆ The format and usage of these payloads are defined in later sections of this memo.

In summary, GDOI is a group security association management protocol: every GDOI message is used to create, maintain, or delete security associations for a group ๐Ÿ‘‘ As described above, these security associations protect one or more data security protocol SAs, a Rekey SA, and/or other data shared by group members for multicast and group security apps ๐ŸŒˆ

1.1. Requirements Notation

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

1.2. Terminology

Here are the key terms used throughout this document ๐Ÿ“–

Data-Security SA: The security policy distributed by a GDOI GCKS, describing traffic that group members are expected to protect. This document described the distribution of IPsec AH and ESP Data-Security SAs.

Group Controller/Key Server: A device that defines group policy and distributes keys for that policy [RFC3740].

Group Member.: An authorized member of a secure group, sending and/or receiving IP packets related to the group.

GROUPKEY-PULL.: A protocol used by a GDOI group member to request group policy and keying material.

GROUPKEY-PUSH.: A protocol used by a GDOI GCKS to distribute updates of group policy and keying material to authorized group members.

Key Encrypting Key.: The symmetric cipher key used to protect the GROUPKEY-PUSH message.

Logical Key Hierarchy.: A group management method defined in Section 5.4 of [RFC2627].

Rekey SA.: The security policy protecting a GROUPKEY-PUSH protocol.

SA Attribute Payload: A payload that follows the Security Association payload and describes the group security attributes associated with the security association. SA Attribute payloads include the SAK, SAT, and GAP payloads.

Security Parameter Index: An arbitrary value that a receiver uses to identify a security association, such as an IPsec ESP Security Association or a Rekey SA.

Traffic Encryption Key.: The symmetric cipher key used to protect a data security protocol (e.g., IPsec ESP).

1.3. Acronyms and Abbreviations

Here's the full list of acronyms and abbreviations used throughout this document ๐Ÿง

AH    IP Authentication Header

ATD   Activation Time Delay

DOI   Domain of Interpretation

DTD   Deactivation Time Delay

ESP   IP Encapsulating Security Payload

GCKS  Group Controller/Key Server

GDOI  Group Domain of Interpretation

GAP   Group Associated Policy Payload

GM    Group Member

GSPD  Group Security Policy Database

IV    Initialization Vector

KD    Key Download Payload

KEK   Key Encryption Key

LKH   Logical Key Hierarchy

SA    Security Association

SAK   SA KEK Payload

SEQ   Sequence Number Payload

SAT   SA TEK Payload

SID   Sender-ID

SPI   Security Parameter Index

SSIV  Sender-Specific IV

TEK   Traffic Encryption Key
TLV   Type/Length/Value

TV    Type/Value

2. GDOI Phase 1 Protocol

The GDOI GROUPKEY-PULL exchange is a Phase 2 protocol that MUST be protected by a Phase 1 protocol ๐Ÿ›ก๏ธ The Phase 1 protocol can be any protocol that provides the following protections:

  • Peer Authentication
  • Confidentiality
  • Message Integrity

The following sections describe one such Phase 1 protocol. Other protocols that could be potential Phase 1 protocols are described in Appendix A. However, the protocols listed there are not considered part of this document ๐ŸŒŸ

This document defines how the ISAKMP Phase 1 exchanges defined in [RFC2409] can be used a Phase 1 protocol for GDOI ๐Ÿ’ซ The following sections define the characteristics of the ISAKMP Phase 1 protocols that are unique for these exchanges when used for GDOI.

Section 7.1 describes how the ISAKMP Phase 1 protocols meet the requirements of a GDOI Phase 1 protocol ๐Ÿฆ‹

2.1. DOI value

The Phase 1 SA payload has a DOI value. That value MUST be the GDOI DOI value as defined later in this document ๐ŸŽ€

2.2. UDP port

IANA has assigned port 848 for the use of GDOI ๐ŸŽฏ This allows an implementation to use separate ISAKMP implementations to service GDOI and the Internet Key Exchange Protocol (IKE) [RFC5996]. A GCKS SHOULD listen on this port for GROUPKEY-PULL exchanges, and the GCKS MAY use this port to distribute GROUPKEY-PUSH messages. An ISAKMP Phase 1 exchange implementation supporting NAT traversal [RFC3947] MAY move to port 4500 to process the GROUPKEY-PULL exchange ๐ŸŒˆ

3. GROUPKEY-PULL Exchange

The goal of the GROUPKEY-PULL exchange is to establish a Rekey and/or Data-Security SAs at the member for a particular group ๐Ÿฅฐ A Phase 1 SA protects the GROUPKEY-PULL, and there MAY be multiple GROUPKEY-PULL exchanges for a given Phase 1 SA. The GROUPKEY-PULL exchange downloads the data security keys (TEKs) and/or group key encrypting key (KEK) or KEK array under the protection of the Phase 1 SA ๐Ÿ”‘

3.1. Authorization

It is important that a group member explicitly trust the entities it expects to act as a GCKS for a particular group ๐Ÿ•ต๏ธโ€โ™€๏ธ When no authorization is performed, it is possible for a rogue GDOI participant to perpetrate a man-in-the-middle attack between a group member and a GCKS [MP04]. A group member MUST specifically list each authorized GCKS in its Group Peer Authorization Database (GPAD) [RFC5374]. A group member MUST ensure that the Phase 1 identity of the GCKS is an authorized GCKS ๐Ÿšจ

It is also important that a GCKS explicitly authorize group members before providing them with group policy and keying material ๐Ÿ’… A GCKS implementation SHOULD have a method of authorizing group members (e.g., by maintaining an authorization list). When the GCKS performs authorization, it MUST use the Phase 1 identity to authorize the GROUPKEY-PULL request for group policy and keying material ๐Ÿซถ

3.2. Messages โœจ

okay so GROUPKEY-PULL is a Phase 2 exchange ๐ŸŽ€. Phase 1 is where SKEYID_a gets computed, and that's the "key" for the keyed hash inside the ISAKMP HASH payloads [RFC2408] that ride along in GROUPKEY-PULL messages. When you use the Phase 1 from this doc, SKEYID_a is derived according to [RFC2409]. Every GROUPKEY-PULL message hashes its own uniquely defined set of values and drops the result into the HASH payload ๐Ÿ’…. Nonces shake up the HASH and give you some protection against replay attacks. Replay protection is a whole big deal because a key management server is basically a magnet for attacks ๐Ÿ™ˆ

The GROUPKEY-PULL uses nonces to prove "liveness" and to stop replay of a recent GROUPKEY-PULL message. Replay is only possible in the context of the current Phase 1 ๐Ÿงš. If someone replays a message from an old Phase 1, the HASH calculation fails because SKEYID_a is wrong, so the message dies before the nonce even gets evaluated ๐Ÿ’€

For either peer to actually get the benefit of replay protection, it has to hold off on as much processing as it possibly can until it receives the message that proves the other peer is live โœจ. For example, the GCKS MUST NOT adjust its internal state (like keeping a record of the GM) until it receives a message with Nr included properly in the HASH payload. This means replayed GDOI messages can't make the GCKS change the group's state until it has confirmation that the initiating group member is live ๐Ÿซถ

        Group Member                      GCKS
        ------------                      ----
    (1) HDR*, HASH(1), Ni, ID     -->
    (2)                           <--     HDR*, HASH(2), Nr, SA
    (3) HDR*, HASH(3) [,GAP]      -->
    (4)                           <--     HDR*, HASH(4), [SEQ,] KD

        * Protected by the Phase 1 SA; encryption occurs after HDR

Figure 2. GROUPKEY-PULL Exchange ๐ŸŒธ

Figure 2 shows the four messages that make up a GROUPKEY-PULL exchange ๐Ÿ‘‘. HDR is an ISAKMP header payload that uses the Phase 1 cookies and a message identifier (M-ID), same as in ISAKMP. After each HDR comes a set of payloads. Messages 1 and 3 come from the group member and carry requests, while messages 2 and 4 come from the GCKS and carry group policy and/or keying material.

Hashes are computed the way [RFC2409] describes ๐Ÿฆ‹. Each message's HASH computation is unique, and it's shown in Figure 2 and below as HASH(n), where (n) is the GROUPKEY-PULL message number. Each HASH is a pseudo-random function ("prf") over the M-ID from the ISAKMP header, concatenated with the entire message that follows the hash, including all payload headers, but excluding any padding added for encryption. The GM expects to find its nonce, Ni, in the HASH of a returned message, and the GCKS expects to find its nonce, Nr, in the HASH of a returned message. HASH(2), HASH(3), and HASH(4) also include nonce values that were passed earlier in the protocol (that's Ni or Nr minus the payload header). The nonce passed in Ni is written as Ni_b, and the nonce passed in Nr is written as Nr_b. The HASH payloads prove the peer has the Phase 1 secret (SKEYID_a) and the nonce for the exchange identified by M-ID, and that's the whole point ๐Ÿ’–

    HASH(1) = prf(SKEYID_a, M-ID | Ni | ID)
    HASH(2) = prf(SKEYID_a, M-ID | Ni_b | Nr | SA)
    HASH(3) = prf(SKEYID_a, M-ID | Ni_b | Nr_b [ | GAP ])
    HASH(4) = prf(SKEYID_a, M-ID | Ni_b | Nr_b [ | SEQ ] | KD)

On top of the Nonce and HASH payloads, the GM tells the GCKS which group it wants to join through the ISAKMP ID payload ๐ŸŽ€

The GCKS tells the member the cryptographic policies of the group in the SA payload ๐Ÿ”ฅ. That covers the DOI, KEK and/or TEK keying material, authentication transforms, and other group policy. The GCKS also decides each SPI, and those get downloaded in the SA payload chain (see Section 5.2). The SA KEK attribute holds the ISAKMP cookie pair for the Rekey SA, which isn't negotiated, just downloaded. Each SA TEK attribute holds a SPI as defined in Section 5.5 of this document.

After the GM receives and parses the SA payload, it replies with an acknowledgement that proves it's live โญ. It can optionally include a GAP payload to request resources.

The GCKS tells the GM the sequence number in the SEQ payload ๐Ÿง. That number gives you anti-replay state tied to a KEK, and knowing it means the GM won't accept GROUPKEY-PUSH messages that were sent before it joined the group. The SEQ payload has no other use, and it gets left out of the GROUPKEY-PULL exchange whenever the SA payload doesn't include a KEK attribute. When a SEQ payload is included, it carries the most recently used sequence number for the group. At the end of a GROUPKEY-PULL exchange, the initiating group member MUST NOT accept any rekey message that has both the KEK attribute SPI value and a sequence number less than or equal to the one it got during the exchange ๐Ÿ™…โ€โ™€๏ธ. When the first group member starts a GROUPKEY-PULL exchange, the GCKS provides a Sequence Number of zero, since no GROUPKEY-PUSH messages have been sent yet. The sequence number only goes up with GROUPKEY-PUSH messages, and the GROUPKEY-PULL exchange just hands the group member the current number. The sequence number resets to one when a new KEK attribute is used, so the first packet sent for a given Rekey SA has a Sequence Number of 1. After that, it goes up with each successive rekey ๐Ÿ“ˆ

The GCKS always returns a KD payload with keying material to the GM ๐Ÿ”‘. If the SA payload defines a Rekey SA, KD contains the KEK. If the SA payload defines one or more Data-Security SAs, KD contains the TEKs.

3.2.1. ISAKMP Header Initialization โœจ

Cookies go in the ISAKMP header to identify a particular GDOI session ๐Ÿ“. The GDOI GROUPKEY-PULL exchange uses cookies according to ISAKMP [RFC2408].

Next Payload identifies an ISAKMP or GDOI payload (see Section 5) ๐Ÿงš

Major Version is 1 and Minor Version is 0, according to ISAKMP (Section 3.1 of [RFC2408]) ๐Ÿ’œ

The Exchange Type has value 32 for the GDOI GROUPKEY-PULL exchange ๐Ÿฆ‹

Flags, Message ID, and Length follow ISAKMP (Section 3.1 of [RFC2408]). The Commit flag isn't useful here, because there's no synchronization between the GROUPKEY-PULL exchange and the data traffic protected by the policy that the exchange distributes ๐Ÿ™ˆ

3.3. Group Member Operations ๐Ÿ‘‘

Before a GM contacts the GCKS, it needs to figure out the group identifier and an acceptable Phase 1 policy through an out-of-band method ๐Ÿ—๏ธ. Phase 1 starts using the GDOI DOI in the SA payload. Once Phase 1 is complete, the GM state machine moves on to the GDOI protocol.

To build the first GDOI message, the GM picks Ni, creates a nonce payload, builds an identity payload with the group identifier, and generates HASH(1) โœจ

When the second GDOI message comes in, the GM validates HASH(2), pulls out the nonce Nr, and interprets the SA payload (including its SA Attribute payloads). The SA payload describes the security protocol and the cryptographic protocols the group uses. That policy covers the Rekey SA (if there is one), the Data-Security SAs, and any other group policy ๐Ÿ“œ. If the policy in the SA payload works for the GM, it keeps going. If it doesn't, the GM SHOULD tear down the Phase 1 session after telling the GCKS with an ISAKMP Informational Exchange that contains a Delete payload ๐Ÿšช

When the GM constructs the third GDOI message, it first reviews every Data-Security SA it was given ๐Ÿ”. If any of them use a counter mode cipher, the GM checks whether it needs more than one Sender-ID (SID) (see Section 3.5). If it does, it requests the number of Sender-IDs it needs for its exclusive use inside the counter mode nonce, as described in Section 5.4 of this document. Then the GM finishes building the third GDOI message by creating HASH(3) ๐Ÿ’…

When the fourth GDOI message arrives, the GM validates HASH(4) ๐Ÿซถ

If the SEQ payload is present, the sequence number in it says the lowest acceptable sequence number that will show up in a future GROUPKEY-PUSH message ๐ŸŒˆ. But here's the twist: if the KEK tied to that sequence number was already installed, the asynchronous processing of GROUPKEY-PULL and GROUPKEY-PUSH messages can make this number lower than the sequence number in the most recently received GROUPKEY-PUSH message. In that case, the sequence number value in the SEQ payload MUST be considered stale and ignored ๐Ÿ™…โ€โ™€๏ธ

The GM interprets the KD key packets, where each one carries the keying material for the SAs distributed in the SA payload ๐Ÿ”‘. Keying material gets matched by comparing the SPI in each key packet to the SPI values sent earlier in the SA payloads. Once the TEKs and policy are matched, the GM hands them to the data security subsystem, and it's ready to send or receive packets that match the TEK policy ๐Ÿš€. If the group has a KEK, the KEK policy and keys get marked as ready for use, and the GM knows to expect a sequence number not less than the one in the SEQ payload. At that point the GM is ready to receive GROUPKEY-PUSH messages ๐ŸŽ€

If the KD payload includes an LKH array of keys, the GM takes the last key in the array as the group KEK. The array then gets stored without any further processing ๐Ÿ“

3.4. GCKS Operations ๐Ÿงš

The GCKS passively listens for incoming requests from group members ๐Ÿ‘‚. The Phase 1 authenticates the group member and sets up the secure session with them ๐Ÿ”.

When the first GDOI message comes in, the GCKS validates HASH(1), then pulls out the Ni and the group identifier from the ID payload. It checks that its database has group information for that group identifier, and that the GM is authorized to join the group ๐Ÿ’œ.

The GCKS builds the second GDOI message. That includes a nonce Nr and the group's policy in an SA payload, followed by SA Attribute payloads (i.e., SA KEK, GAP, and/or SA TEK payloads) based on the GCKS policy. (See Section 5.2.1 for details on how the GCKS picks which payloads to send.) โœจ

When the third GDOI message comes in, the GCKS validates HASH(3). If the message has a GAP payload, the GCKS caches the requests in it so it can use them when building the fourth GDOI message ๐Ÿ—‚๏ธ.

The GCKS builds the fourth GDOI message. That includes the SEQ payload (if the GCKS sends rekey messages) and the KD payload, which holds keys matching the policy it sent earlier in the SA TEK and SA KEK payloads ๐Ÿ”‘. If a group management algorithm is defined as part of the group policy, the GCKS first inserts the group member into the group management structure (e.g., a leaf in the LKH tree), then creates an LKH array of keys and includes it in the KD payload. The first key in the array goes with the group member's leaf node, followed by each LKH node above it in the tree, ending with the root node (which is also the KEK) ๐ŸŒณ. If one or more Data-Security SAs in the SA payload used a counter mode of operation, the GCKS includes at least one SID value in the KD payload, and maybe more, depending on what was requested in the third GDOI message ๐Ÿ’–

3.5. Counter-Modes of Operation โœจ

Okay so counter-based modes are giving main character energy ๐Ÿ’…. Several have been specced for ESP (AES-CTR [RFC3686], AES-GCM [RFC4106], AES-CCM [RFC4309], AES-GMAC [RFC4543]) and for AH (AES-GMAC [RFC4543] again). The big rule is that no two senders in the group can EVER send a packet with the same Initialization Vector (IV) using the same cipher key and mode ๐Ÿ˜ญ. GDOI meets that requirement when both of these things are true:

  • The GCKS distributes a unique key for each Data-Security SA ๐Ÿ”‘.
  • The GCKS uses the method described in [RFC6054], which gives each sender its own portion of the IV space by provisioning it with one or more unique SID values ๐ŸŽ€.

When at least one Data-Security SA in the group policy includes a counter-mode, the GCKS automatically hands out one SID to each group member acting as a sender on that Data-Security SA. That SID belongs only to the member it was given to ๐Ÿฆ‹. The member uses the same SID for every Data-Security SA that specifies a counter-based mode. A GCKS MUST distribute unique keys for each Data-Security SA that includes a counter-based mode, so the key and nonce usage stays unique ๐Ÿ”ฅ.

When a group member receives a Data-Security SA in a SA TEK payload and it's a sender, it can choose to request one or more SID values ๐Ÿ’–. Asking for a value of 1 isn't needed, because the GCKS will automatically give exactly one to the sending group member. A group member MUST request as many SIDs as the number of encryption modules where it will install the TEKs in the outbound direction ๐Ÿงš. Or, if it wants, a group member MAY request more than one SID and use them one after another. That can be handy when the member expects to burn through its range of Data-Security SA nonces with a single SID too fast (for example, before the time-based policy in the TEK expires) โณ.

When group policy includes a counter-based mode, a GCKS SHOULD use the following method to allocate SID values. It makes sure each SID goes to just one group member ๐ŸŒธ.

  1. A GCKS keeps a SID-counter that records which SIDs have been allocated. SIDs are handed out sequentially, and the first SID allocated is zero.
  2. Each time a SID is allocated, the counter's current value is saved and given to the group member. Then the SID-counter goes up by one, getting ready for the next allocation.
  3. When the GCKS distributes a Data-Security SA that specifies a counter-based mode, and a group member is a sender, that group member may request a count of SIDs in a GAP payload. When the GCKS gets this request, it increments the SID-counter once for each requested SID, and sends each SID value to the group member.
  4. A GCKS allocates new SID values for each GROUPKEY-PULL exchange originated by a sender, whether or not the group member had contacted the GCKS before ๐Ÿ™ˆ. That means the GCKS doesn't need to keep a record of which SID values it previously gave to each group member. Even better, since the GCKS can't reliably tell whether the group member has sent data on the current group Data-Security SAs, it doesn't know which Data-Security counter-mode nonce values a member has already used. So by handing out new SID values every time, the key server makes sure that each time a conforming group member installs a Data-Security SA, it uses a unique set of counter-based mode nonces ๐Ÿ‘‘.
  5. When the SID-counter maintained by the GCKS reaches its final SID value, no more SID values can be distributed. Before handing out any new SID values, the GCKS MUST delete the Data-Security SAs for the group, then create new Data-Security SAs, and reset the SID-counter to its initial value ๐Ÿ’€.
  6. The GCKS SHOULD send a GROUPKEY-PUSH message that deletes all Data-Security SAs and the Rekey SA for the group โœจ. This makes the group members start a new GROUPKEY-PULL exchange, where they get both new SID values and new Data-Security SAs. The new SID values are safe to use because they only ever go with the new Data-Security SAs. Note that deleting the Rekey SA is necessary so that group members who receive a GROUPKEY-PUSH exchange before they re-register don't accidentally use their old SIDs with the new Data-Security SAs. Not okay, nope ๐Ÿšซ.

Using the method above, at no time can two group members use the same IV values with the same Data-Security SA key ๐Ÿซถ.


4. GROUPKEY-PUSH Message ๐Ÿฆ‹

GDOI sends control information securely using group communications. Typically that's IP multicast distribution of a GROUPKEY-PUSH message, but it can also be "pushed" using unicast delivery if IP multicast isn't possible ๐Ÿ“ฎ. The GROUPKEY-PUSH message replaces a Rekey SA KEK or KEK array, and/or creates a new Data-Security SA.

        GM                    GCKS
        --                    ----
                              <---- HDR*, SEQ, [D,] SA, KD, SIG

        * Protected by the Rekey SA KEK; encryption occurs after HDR

                      Figure 3. GROUPKEY-PUSH Message

HDR is defined below. The SEQ payload is defined in Section 5 ("Payloads"). One or more D (Delete) payloads (described further in Section 5.9) optionally specify the deletion of existing group policy ๐Ÿ—‘๏ธ. The SA defines the group policy for a replacement Rekey SA and/or Data-Security SAs, as described in Section 5, and the KD provides the keying material for those SAs ๐Ÿ”.

The SIG payload includes a signature of a hash of the entire GROUPKEY-PUSH message (excluding the SIG payload octets) before it's encrypted. The HASH is taken over the string 'rekey', the GROUPKEY-PUSH HDR, and then all payloads before the SIG payload. That prefixed string makes sure the signature on the Rekey datagram can't be used for any other purpose in the GDOI protocol ๐Ÿ•ต๏ธโ€โ™€๏ธ. The SIG payload is created from the signature of that hash, and the receiver verifies the signature using a public key retrieved in a previous GDOI exchange. The current KEK (also previously distributed in a GROUPKEY-PULL exchange or GROUPKEY-PUSH message) encrypts all the payloads that follow the GROUPKEY-PUSH HDR. Note: The rationale for this order of operations is given in Section 7.3.5.

If the SA defines the use of a single KEK or an LKH KEK array, KD MUST contain a corresponding KEK or KEK array for a new Rekey SA, which has a new cookie pair ๐Ÿ“. When the KD payload carries a new SA KEK attribute (Section 5.3), the Rekey SA is replaced with a new SA that has the same group identifier (ID specified in message 1 of Section 3.2) and an incremented sequence counter, which was initialized in message 4 of Section 3.2. Note that the first packet for the given Rekey SA encrypted with the new KEK attribute will have a Sequence number of 1 ๐ŸŒˆ. If the SA defines an SA TEK payload, that tells the member a new Data-Security SA has been created, with the keying material carried in KD (Section 5.6) ๐Ÿ’œ.

If the SA defines a large LKH KEK array (for example, during group initialization and batched rekeying), parts of the array MAY be sent in different unique GROUPKEY-PUSH datagrams. However, each of those GROUPKEY-PUSH datagrams MUST be a fully formed GROUPKEY-PUSH datagram ๐Ÿงฉ. This means each datagram carries a sequence number and the policy in the SA payload, which matches the KEK array portion sent in the KD payload.

4.1. Use of Signature Keys

A signing key should not be used in more than one context (for example, used for host authentication and also for message authentication) ๐Ÿ™…โ€โ™€๏ธ. So the GCKS SHOULD NOT use the same key to sign the SIG payload in the GROUPKEY-PUSH message as was used for authentication in the GROUPKEY-PULL exchange.

4.2. ISAKMP Header Initialization

Unlike ISAKMP, the cookie pair is completely determined by the GCKS ๐Ÿ‘‘. The cookie pair in the GDOI ISAKMP header identifies the Rekey SA, which tells apart the secure groups managed by a GCKS. So GDOI uses the cookie fields as an SPI ๐Ÿงš.

Next Payload identifies an ISAKMP or GDOI payload (see Section 5) ๐ŸŽ€.

Major Version is 1 and Minor Version is 0, according to ISAKMP (Section 3.1 of [RFC2408]) โœจ.

The Exchange Type has value 33 for the GDOI GROUPKEY-PUSH message ๐Ÿ”ข.

Flags MUST have the Encryption bit set, according to Section 3.1 of [RFC2408]. All other bits MUST be set to zero ๐Ÿšฉ.

Message ID MUST be set to zero 0๏ธโƒฃ.

Length is according to ISAKMP (Section 3.1 of [RFC2408]) ๐Ÿ“.

4.3. GCKS Operations

The GCKS may start a Rekey message for one of several reasons, for example, the group membership has changed or keys are about to expire โฐ.

To begin the rekey datagram, the GCKS builds an ISAKMP HDR with the correct cookie pair, plus a SEQ payload with a sequence number that's 1 greater than the previous rekey datagram. If the message is using the new KEK attribute for the first time, the SEQ is reset to 1 in this message ๐Ÿ”„.

Then an SA payload gets added. It's identical in structure and meaning to an SA payload sent in a GROUPKEY-PULL exchange ๐Ÿ“‹. If there are changes to the KEK (including because group members were excluded, in the case of LKH), an SA_KEK attribute gets added to the SA. If there are one or more new TEKs, SA_TEK attributes are added to describe that policy ๐Ÿ’….

Next, a KD payload is added. It's identical in structure and meaning to a KD payload sent in a GROUPKEY-PULL exchange ๐Ÿ”‘. If an SA_KEK attribute was included in the SA payload, then the corresponding KEKs (or a KEK update array) are included too. A KEK update array is created by first working out which group members have been excluded, generating new keys as needed, and then distributing LKH update arrays that are enough to give the new KEK to the remaining group members (see Section 5.4.1 of [RFC2627] for details) ๐ŸŒธ. TEKs are also sent for each SA_TEK attribute included in the SA payload ๐Ÿฆ‹.

In the penultimate step, the GCKS creates the SIG payload and adds it to the datagram โœ๏ธ.

Lastly, the payloads following the HDR are encrypted using the current KEK. Then the datagram can finally be sent ๐Ÿš€.

4.4. Group Member Operations ๐Ÿ’–

okay bestie, so when a group member gets a GROUPKEY-PUSH datagram, the first thing it does is match the cookie pair in the ISAKMP HDR to an SA it already has ๐Ÿ”. Then it decrypts the message and checks that the form of the datagram is valid. This weeds out the obviously ill-formed messages (which might be sent as part of a denial-of-service attack on the group) ๐Ÿ™…โ€โ™€๏ธ literally a security thing, so no skipping this ๐Ÿ’€.

Next up, the sequence number in the SEQ payload gets checked. It has to be greater than the previously received sequence number ๐Ÿ”ข. After that the SIG payload gets validated, and if the signature fails, the message is discarded ๐Ÿ—‘๏ธ no second chances.

Then the SA and KD payloads get processed. This can result in a new GDOI Rekey SA (if the SA payload included an SA_KEK attribute) and/or new Data-Security SAs being added to the system โœจ. If the KD payload includes an LKH update array, the group member compares the LKH ID in each key update packet to the LKH IDs it holds. If it finds a match, it decrypts the key using the key prior to it in the key array and stores the new key in the LKH key array it holds ๐Ÿ”‘. The final decryption yields the new group KEK ๐Ÿ‘‘, iconic.

Now for the counter-mode part ๐ŸŽ€. If the SA payload includes one or more Data-Security SAs including a counter-mode of operation, and the receiving group member is a sender for that SA, the group member uses its current SID value with those Data-Security SAs to create counter-mode nonces. If it's a sender and does not hold a current SID value, it MUST NOT install the Data-Security SAs ๐Ÿ™…โ€โ™€๏ธ. It MAY initiate a GROUPKEY-PULL exchange to the GCKS in order to obtain a SID value (along with current group policy) ๐Ÿฆ‹.


5. Payloads and Defined Values ๐ŸŒˆ

okay so this document uses a bunch of ISAKMP payloads, and they're defined according to [RFC2408] ๐Ÿ“œ. Some are used exactly as [RFC2408] defines them, and those are these:

              Next Payload Type            Value
              -----------------            -----
              Hash Payload (HASH)            8
              Signature (SIG)                9

Then there are payloads that get extended or further specified, like so:

              Next Payload Type            Value
              -----------------            -----
              Security Association (SA)      1
              Identification (ID)            5
              Nonce (N)                     10
              Delete (D)                    12

And then there are payload formats that are specific to the group security exchanges, which are required ๐Ÿ’…:

              Next Payload Type                Value
              -----------------                -----
              SA KEK (SAK)                      15
              SA TEK (SAT)                      16
              Key Download (KD)                 17
              Sequence Number (SEQ)             18
              Group Associated Policy (GAP)     22

Quick vibe check on the integers: every multi-octet field in GDOI payloads that represents an integer is laid out in big endian order (also known as "most significant byte first" or "network byte order") ๐Ÿง โœจ.

Also, any payload that includes an ISAKMP Generic Payload Header creates a Payload Length field that includes the length of that generic payload header (Section 3.2 of [RFC2408]) ๐Ÿ’œ.

5.1. Identification Payload ๐Ÿชช

The Identification payload is defined in [RFC2408]. For GDOI, it's used to identify a group identity that will later be associated with security associations for the group ๐Ÿซถ. A group identity may map to a specific IPv4 or IPv6 multicast address, or it may be a more general identifier, like one that represents a set of related multicast streams ๐ŸŒธ.

When used with GDOI, the DOI-Specific ID Data field MUST be set to 0 ๐Ÿ”ข.

When used with GDOI, the ID_KEY_ID ID Type MUST be supported by a conforming implementation, and it MUST specify a 4-octet group identifier as its value ๐Ÿ’–. Implementations MAY also support other ID Types ๐ŸŒˆ.

5.2. Security Association Payload ๐ŸŽ€

The Security Association payload is defined in [RFC2408]. For GDOI, the GCKS uses it to assert security attributes for both Rekey and Data-Security SAs ๐Ÿ‘‘. Here's how it's laid out:

       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            !
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!

Figure 4. Security Association Payload

So here are the field details, bestie ๐Ÿ“:

  • Next Payload (1 octet) -- Identifies the next payload for the GROUPKEY-PULL or the GROUPKEY-PUSH message as defined above. The next payload MUST NOT be an SA Attribute payload; it MUST be the next payload following the Security Association type payload ๐Ÿ™…โ€โ™€๏ธ.
  • RESERVED (1 octet) -- MUST be zero ๐Ÿซง.
  • Payload Length (2 octets) -- Is the octet length of the current payload, including the generic header and all TEK and KEK payloads ๐Ÿ“.
  • DOI (4 octets) -- Is the GDOI, which is value 2 ๐Ÿช„.
  • Situation (4 octets) -- MUST be zero ๐Ÿซง.
  • SA Attribute Next Payload (2 octets) -- MUST be the code for an SA Attribute payload type. See Section 5.2.1 for a description of which circumstances are required for each payload type to be present ๐Ÿ”.
  • RESERVED (2 octets) -- MUST be zero ๐Ÿซง.

5.2.1. SA Attribute Payloads ๐Ÿง

Payloads that define specific security association attributes for the KEK and/or TEKs used by the group MUST follow the SA payload. How many of each one you get depends on the group policy ๐Ÿ’…. There may be zero or one SAK payload, zero or one GAP payload, and zero or more SAT payloads, and either one SAK or SAT payload MUST be present. When they're present, the order of the SA Attribute payloads MUST be: SAK, GAP, and SATs ๐Ÿ“‹.

This flexibility is what lets all kinds of group policies fit in ๐Ÿฆ‹. For example, if the group policy doesn't require a Rekey SA, the GCKS wouldn't need to send an SA KEK attribute to the group member, since all SA updates would be done using the Registration SA. Or, group policy might use a Rekey SA but only download a KEK to the group member as part of the Registration SA. Either way, the KEK policy (in the SA KEK attribute) wouldn't be necessary in the Rekey SA message SA payload ๐ŸŒธ.

Specifying multiple SATs lets multiple sessions be part of the same group, and lets multiple streams be associated with a session (like video, audio, and text), with each one getting its own security association policy ๐ŸŽฅ๐ŸŽต๐Ÿ“.

And a GAP payload is how group-wide policy gets distributed, like instructions for when to activate and deactivate SAs โญ.

5.3. SA KEK Payload โœจ

Okay bestie, so the SA KEK (SAK) payload carries the security attributes for the KEK method for a group, plus parameters that are specific to the GROUPKEY-PULL operation ๐Ÿ” The source and destination identities describe the identities used for the GROUPKEY-PULL datagram ๐Ÿฆ‹

       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                              ~
      !                                                               !
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
      !                           RESERVED2                           !
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
      ~                        KEK Attributes                         ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!

                         Figure 5. SA KEK Payload

Here's the breakdown of the SAK payload fields ๐Ÿ’…

  • Next Payload (1 octet) -- Identifies the next payload for the GROUPKEY-PULL or the GROUPKEY-PUSH message. The only valid next payload types for this message are a GAP payload, SAT payload, or zero to indicate that no SA Attribute payloads follow.
  • RESERVED (1 octet) -- MUST be zero. ๐Ÿ™ˆ
  • Payload Length (2 octets) -- Length of this payload, including the KEK attributes.
  • Protocol (1 octet) -- Value describing an IP protocol ID (e.g., UDP/TCP) [PROT-REG] for the GROUPKEY-PUSH datagram.
  • SRC ID Type (1 octet) -- Value describing the identity information found in the SRC Identification Data field. Defined values are specified by the IPsec Identification Type section in the IANA ISAKMP registry [ISAKMP-REG].
  • SRC ID Port (2 octets) -- Value specifying a port associated with the source ID. A value of zero means that the SRC ID Port field MUST be ignored.
  • SRC ID Data Len (1 octet) -- Value specifying the length (in octets) of the SRC Identification Data field.
  • SRC Identification Data (variable length) -- Value, as indicated by the SRC ID Type.
  • DST ID Type (1 octet) -- Value describing the identity information found in the DST Identification Data field. Defined values are specified by the IPsec Identification Type section in the IANA ISAKMP registry [ISAKMP-REG].
  • DST ID Prot (1 octet) -- Value describing an IP protocol ID (e.g., UDP/TCP) [PROT-REG].
  • DST ID Port (2 octets) -- Value specifying a port associated with the source ID.
  • DST ID Data Len (1 octet) -- Value specifying the length (in octets) of the DST Identification Data field.
  • DST Identification Data (variable length) -- Value, as indicated by the DST ID Type.
  • SPI (16 octets) -- Security Parameter Index for the KEK. The SPI is the ISAKMP Header cookie pair where the first 8 octets become the "Initiator Cookie" field of the GROUPKEY-PUSH message ISAKMP HDR, and the second 8 octets become the "Responder Cookie" in the same HDR. As described above, these cookies are assigned by the GCKS.
  • RESERVED2 (4 octets) -- MUST be zero. These octets represent fields previously defined but no longer used by GDOI.
  • KEK Attributes -- Contains KEK policy attributes associated with the group. The following attributes may be present in a SAK payload. The attributes must follow the format defined in ISAKMP (Section 3.3 of [RFC2408]). In the table, attributes that are defined as TV are marked as Basic (B); attributes that are defined as TLV are marked as Variable (V).
          ID Class                   Value    Type
          --------                   -----    ----
          RESERVED                     0
          KEK_MANAGEMENT_ALGORITHM     1        B
          KEK_ALGORITHM                2        B
          KEK_KEY_LENGTH               3        B
          KEK_KEY_LIFETIME             4        V
          SIG_HASH_ALGORITHM           5        B
          SIG_ALGORITHM                6        B
          SIG_KEY_LENGTH               7        B
          RESERVED                     8        B
          Unassigned                  9-127
          Private Use               128-255
          Unassigned                256-32767

The KEK_ALGORITHM and SIG_ALGORITHM attributes MUST be included; others are OPTIONAL and are included depending on group policy. The KEK_MANAGEMENT_ALGORITHM attribute MUST NOT be included in a GROUPKEY-PULL message, and MUST be ignored if present. ๐Ÿซถ

5.3.1. KEK_MANAGEMENT_ALGORITHM

The KEK_MANAGEMENT_ALGORITHM class specifies the group KEK management algorithm used to provide forward or backward access control (i.e., used to exclude group members). Defined values are specified in the following table. ๐ŸŒธ

          KEK Management Type               Value
          -------------------               -----
          Reserved                            0
          LKH                                 1
          Unassigned                         2-127
          Private Use                      128-255
          Unassigned                       256-65535

5.3.1.1. LKH

This type indicates the group management method described in Section 5.4 of [RFC2627]. A general discussion of LKH operations can also be found in Section 6.3 of "Multicast and Group Security" [HD03]

5.3.2. KEK_ALGORITHM

The KEK_ALGORITHM class specifies the encryption algorithm in which the KEK is used to provide confidentiality for the GROUPKEY-PUSH message. Defined values are specified in the following table. A GDOI implementation MUST abort if it encounters an attribute or capability that it does not understand. ๐Ÿšจ

           Algorithm Type      Value
           --------------      -----
           RESERVED               0
           KEK_ALG_DES            1
           KEK_ALG_3DES           2
           KEK_ALG_AES            3
           Unassigned            4-127
           Private Use         128-255
           Unassigned          256-32767

If a KEK_MANAGEMENT_ALGORITHM is defined that specifies multiple keys (e.g., LKH), and if the management algorithm does not specify the algorithm for those keys, then the algorithm defined by the KEK_ALGORITHM attribute MUST be used for all keys that are included as part of the management.

5.3.2.1. KEK_ALG_DES

This type specifies DES using the Cipher Block Chaining (CBC) mode as described in [FIPS81].

5.3.2.2. KEK_ALG_3DES

This type specifies 3DES using three independent keys as described in "Keying Option 1" in [FIPS46-3].

5.3.2.3. KEK_ALG_AES

This type specifies AES as described in [FIPS197]. The mode of operation for AES is CBC as defined in [SP.800-38A].

5.3.3. KEK_KEY_LENGTH

The KEK_KEY_LENGTH class specifies the KEK Algorithm key length (in bits). The Group Controller/Key Server (GCKS) adds the KEK_KEY_LENGTH attribute to the SA payload when distributing KEK policy to group members. The group member verifies whether or not it has the capability of using a cipher key of that size. If the cipher definition includes a fixed key length (e.g., KEK_ALG_3DES), the group member can make its decision solely using the KEK_ALGORITHM attribute and does not need the KEK_KEY_LENGTH attribute. Sending the KEK_KEY_LENGTH attribute in the SA payload is OPTIONAL if the KEK cipher has a fixed key length. Also, note that the KEK_KEY_LEN includes only the actual length of the cipher key (the IV length is not included in this attribute). ๐Ÿงš

5.3.4. KEK_KEY_LIFETIME

The KEK_KEY_LIFETIME class specifies the maximum time for which the KEK is valid. The GCKS may refresh the KEK at any time before the end of the valid period. The value is a 4-octet number defining a valid time period in seconds. โณ

5.3.5. SIG_HASH_ALGORITHM

SIG_HASH_ALGORITHM specifies the SIG payload hash algorithm. The following table defines the algorithms for SIG_HASH_ALGORITHM.

           Algorithm Type     Value
           --------------     -----
           Reserved             0
           SIG_HASH_MD5         1
           SIG_HASH_SHA1        2
           SIG_HASH_SHA256      3
           SIG_HASH_SHA384      4
           SIG_HASH_SHA512      5
           Unassigned          6-127
           Private Use       128-255
           Unassigned        256-65535

The SHA hash algorithms are defined in the Secure Hash Standard [FIPS180-3.2008].

If the SIG_ALGORITHM is SIG_ALG_ECDSA-256, SIG_ALG_ECDSA-384, or SIG_ALG_ECDSA-521, the hash algorithm is implicit in the definition, and SIG_HASH_ALGORITHM is OPTIONAL in a SAK payload. ๐Ÿ“

5.3.6. SIG_ALGORITHM

The SIG_ALGORITHM class specifies the SIG payload signature algorithm. Defined values are specified in the following table.

           Algorithm Type      Value
           --------------      -----
           Reserved              0
           SIG_ALG_RSA           1
           SIG_ALG_DSS           2
           SIG_ALG_ECDSS         3
           SIG_ALG_ECDSA-256     4
           SIG_ALG_ECDSA-384     5
           SIG_ALG_ECDSA-521     6
           Unassigned           7-127
           Private Use        128-255
           Unassigned         256-65535

5.3.6.1. SIG_ALG_RSA

This algorithm specifies the RSA digital signature algorithm using the EMSA-PKCS1-v1_5 encoding method, as described in [RFC3447].

5.3.6.2. SIG_ALG_DSS

This algorithm specifies the DSS digital signature algorithm as described in Section 4 of [FIPS186-3].

5.3.6.3. SIG_ALG_ECDSS

This algorithm specifies the Elliptic Curve Digital Signature Algorithm as described in Section 5 of [FIPS186-3]. This definition is deprecated in favor of the SIG_ALG_ECDSA family of algorithms. ๐Ÿ’€

5.3.6.4. SIG_ALG_ECDSA-256

This algorithm specifies the 256-bit Random ECP Group, as described in [RFC5903]. The format of the signature in the SIG payload MUST be as specified in [RFC4754].

5.3.6.5. SIG_ALG_ECDSA-384

This algorithm specifies the 384-bit Random ECP Group, as described in [RFC5903]. The format of the signature in the SIG payload MUST be as specified in [RFC4754].

5.3.6.6. SIG_ALG_ECDSA-521

This algorithm specifies the 521-bit Random ECP Group, as described in [RFC5903]. The format of the signature in the SIG payload MUST be as specified in [RFC4754].

5.3.7. SIG_KEY_LENGTH

The SIG_KEY_LENGTH class specifies the length of the SIG payload key in bits. ๐ŸŒˆ

5.4. Group Associated Policy ๐ŸŽ€

okay so a GCKS can have group-specific policy that never gets packed into an SA TEK or SA KEK ๐Ÿ‘€. some of it is for everyone in the group, and some is sender-specific, meaning it's only for one particular group member ๐Ÿ’…. the everyone stuff can ride along in either a GROUPKEY-PULL or GROUPKEY-PUSH exchange, but the sender-specific stuff MUST only be sent in a GROUPKEY-PULL exchange ๐Ÿ”’. also, a group member sometimes needs to make policy requests for the GCKS's resources during a GROUPKEY-PULL exchange ๐Ÿงš. GDOI handles all of this group associated policy and those requests in the Group Associated Policy (GAP) payload โœจ.

the GCKS can send the GAP payload as part of the SA payload ๐ŸŽ€. it comes right after any SA KEK payload and goes before any SA TEK payloads ๐Ÿซถ. if the group policy doesn't include an SA KEK, the SA Attribute Next Payload field in the SA payload MAY indicate the GAP payload ๐ŸŒธ.

a group member can optionally include the GAP payload in message 3 of the GROUPKEY-PULL exchange when it wants to make policy requests ๐Ÿฆ‹.

the GAP payload looks like this ๐Ÿ‘‡

        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         !
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
       !               Group Associated Policy Attributes              ~
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!

Figure 6. GAP Payload

here's what each GAP payload field is all about ๐Ÿ’–

  • Next Payload (1 octet) -- tells you which payload comes next in the GROUPKEY-PULL or the GROUPKEY-PUSH message ๐Ÿงš. the only valid next payload type here is an SA TEK, or zero if there are no more security association attributes โœจ.
  • RESERVED (1 octet) -- MUST be zero ๐Ÿ”’.
  • Payload Length (2 octets) -- the length of this payload, including the GAP header and Attributes ๐Ÿ“.
  • Group Associated Policy Attributes (variable) -- holds attributes that follow the format defined in Section 3.3 of [RFC2408] ๐ŸŒˆ. in the table, attributes defined as TV are marked as Basic (B), and attributes defined as TLV are marked as Variable (V) ๐Ÿ“.
        Attribute Type         Value       Type
        --------------         -----       ----
        RESERVED                 0
        ACTIVATION_TIME_DELAY    1          B
        DEACTIVATION_TIME_DELAY  2          B
        SENDER_ID_REQUEST        3          B
        Unassigned              4-127
        Private Use           128-255
        Unassigned            256-32767

several group associated policy attributes are defined in this memo ๐ŸŒธ. a GDOI implementation MUST abort if it runs into an attribute or capability it doesn't understand ๐Ÿšจ. the values for these attributes are listed in the IANA Considerations section of this memo ๐Ÿ“š.

5.4.1. ACTIVATION_TIME_DELAY/DEACTIVATION_TIME_DELAY โฐ

Section 4.2.1 of [RFC5374] describes a key rollover method that needs two values from the group key management protocol ๐Ÿ”„. the ACTIVATION_TIME_DELAY attribute lets a GCKS set the Activation Time Delay (ATD) for SAs generated from TEKs ๐Ÿฆ‹. the ATD says how long after receiving new SAs they get activated by the GM โณ. the ATD value is in seconds ๐Ÿ’….

the DEACTIVATION_TIME_DELAY lets the GCKS set the Deactivation Time Delay (DTD) for previously distributed SAs ๐Ÿซถ. the DTD says how long after receiving new SAs that group member SHOULD deactivate the SAs destroyed by the rekey event ๐Ÿ‘€. the value is in seconds โœจ.

the ATD and DTD values are independent ๐ŸŽ€. however, the most effective policy has the DTD be the larger value ๐Ÿ‘‘, because that lets new SAs get activated before the older SAs get deactivated ๐ŸŒˆ. a policy like that means protected group traffic always keeps flowing without interruption ๐Ÿ’–.

5.4.2. SENDER_ID_REQUEST ๐Ÿงš

the SENDER_ID_REQUEST attribute is how a group member asks for SIDs during the GROUPKEY-PULL message ๐Ÿ™ˆ. it includes a count of how many SID values it wants ๐Ÿ“.

5.5. SA TEK Payload ๐Ÿฆ‹

the SA TEK (SAT) payload holds security attributes for a single TEK associated with a group ๐Ÿ’œ.

    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-ID   !       TEK Protocol-Specific Payload           ~
   +-+-+-+-+-+-+-+-+                                               ~
   ~                                                               ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!

Figure 7. SA TEK Payload

here's what each SAT payload field does ๐ŸŒท

  • Next Payload (1 octet) -- tells you which payload comes next in the GROUPKEY-PULL or the GROUPKEY-PUSH message ๐Ÿงš. the only valid next payload types here are another SAT payload, or zero if there are no more security association attributes ๐Ÿซถ.
  • RESERVED (1 octet) -- MUST be zero ๐Ÿ”’.
  • Payload Length (2 octets) -- the length of this payload, including the TEK Protocol-Specific Payload ๐Ÿ“.
  • Protocol-ID (1 octet) -- a value that specifies the Security Protocol ๐Ÿ”. the table below has the values for it ๐Ÿ‘‡.
        Protocol ID                       Value
        -----------                       -----
        RESERVED                            0
        GDOI_PROTO_IPSEC_ESP                1
        GDOI_PROTO_IPSEC_AH                 2
        Unassigned                         3-127
        Private Use                      128-255
  • TEK Protocol-Specific Payload (variable) -- the payload that describes the attributes specific to the Protocol-ID ๐ŸŒˆ.

5.5.1. GDOI_PROTO_IPSEC_ESP/GDOI_PROTO_IPSEC_AH ๐Ÿ”ฅ

the TEK Protocol-Specific payload for ESP and AH looks like this ๐Ÿ’…

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
   !    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                                       ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
   ! Transform ID  !                        SPI                    !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
   !      SPI      !       RFC 2407 SA Attributes                  ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!

Figure 8. ESP/AH TEK Payload

here's the rundown on the SAT payload fields for this one ๐ŸŽ€

  • Protocol (1 octet) -- a value describing an IP protocol ID (e.g., UDP/TCP) [PROT-REG] ๐ŸŒ. a value of zero means the Protocol field MUST be ignored ๐Ÿ™ˆ.
  • SRC ID Type (1 octet) -- a value describing the identity information found in the SRC Identification Data field ๐Ÿชช. the defined values are specified by the IPsec Identification Type section in the IANA ISAKMP registry [ISAKMP-REG] ๐Ÿ“š.
  • SRC ID Port (2 octets) -- a value specifying a port associated with the source ID ๐Ÿ”Œ. a value of zero means the SRC ID Port field MUST be ignored ๐Ÿ™ˆ.
  • SRC ID Data Len (1 octet) -- a value specifying the length (in octets) of the SRC Identification Data field ๐Ÿ“.
  • SRC Identification Data (variable length) -- a value, as indicated by the SRC ID Type ๐Ÿซถ. set it to 3 octets or zero for multiple-source multicast groups that use a common TEK for all senders ๐Ÿ‘ฏ.
  • DST ID Type (1 octet) -- a value describing the identity information found in the DST Identification Data field ๐Ÿชช. the defined values are specified by the IPsec Identification Type section in the IANA ISAKMP registry [ISAKMP-REG] ๐Ÿ“š.
  • DST ID Prot (1 octet) -- a value describing an IP protocol ID (e.g., UDP/TCP) [PROT-REG] ๐ŸŒ. a value of zero means the DST ID Prot field MUST be ignored ๐Ÿ™ˆ.
  • DST ID Port (2 octets) -- a value specifying a port associated with the source ID ๐Ÿ”Œ. a value of zero means the DST ID Port field MUST be ignored ๐Ÿ™ˆ.
  • DST ID Data Len (1 octet) -- a value specifying the length (in octets) of the DST Identification Data field ๐Ÿ“.
  • DST Identification Data (variable length) -- a value, as indicated by the DST ID Type ๐Ÿซถ.
  • Transform ID (1 octet) -- a value specifying which ESP or AH transform is to be used ๐Ÿ”. the list of valid values is defined in the IPsec ESP or IPsec AH Transform Identifiers section of the IANA ISAKMP registry [ISAKMP-REG] ๐Ÿ“š.
  • SPI (4 octets) -- the Security Parameter Index for ESP ๐Ÿงš.
  • RFC 2407 Attributes -- the ESP and AH Attributes from Section 4.5 of [RFC2407] ๐Ÿ’ซ. GDOI supports all IPsec DOI SA Attributes for GDOI_PROTO_IPSEC_ESP and GDOI_PROTO_IPSEC_AH, except the Group Description (Section 4.5 of [RFC2407]). that one MUST NOT be sent by a GDOI implementation, and it is ignored by a GDOI implementation if received ๐Ÿšซ. the following attributes MUST be supported by an implementation supporting ESP and AH: SA Life Type, SA Life Duration, and Encapsulation Mode ๐Ÿ‘‘. an implementation supporting ESP MUST also support the Authentication Algorithm attribute if the ESP transform includes authentication ๐Ÿ”’. the Authentication Algorithm attribute of the IPsec DOI is group authentication in GDOI ๐Ÿซถ.

5.5.1.1. New IPsec Security Association Attributes ๐ŸŒˆ

"Multicast Extensions to the Security Architecture for the Internet Protocol" (RFC 5374) brings new requirements for a group key management system that distributes IPsec policy ๐Ÿฆ‹. it also defines new attributes as part of the Group Security Policy Database (GSPD) ๐Ÿ“š. these attributes describe policy that a group key management system must convey to a group member so it can support those extensions ๐Ÿง . the GDOI SA TEK payload distributes IPsec policy using IPsec security association attributes defined in [ISAKMP-REG] ๐Ÿ’…. this section defines how GDOI can convey the new attributes as IPsec Security Association Attributes โœจ.

5.5.1.1.1. Address Preservation ๐ŸŒธ

Okay so, when apps use the stuff in [RFC5374] to copy the IP addresses into the outer IP header while wrapping an IP packet as an IPsec tunnel mode packet, the multicast packet keeps being routed as a multicast packet. It's giving "the packet stays in its lane" ๐Ÿš—๐Ÿ’จ This attribute also hands over the policy the GDOI group member needs to set up the GSPD properly. Here's the table of values for the Address Preservation attribute, bestie ๐Ÿ’–

           Address Preservation Type               Value
           -------------------------               -----
           Reserved                                  0
           None                                      1
           Source-Only                               2
           Destination-Only                          3
           Source-and-Destination                    4
           Unassigned                               5-61439
           Private Use                          61440-65535

So depending on the group policy, there are a few ways address preservation can go: no preservation at all ("None"), keeping the original source address ("Source-Only"), keeping the original destination address ("Destination-Only"), or keeping both ("Source-and-Destination"). ๐Ÿ‘‘ And here's the lowkey important bit: if a GCKS sends an SA TEK payload in a GDOI message and this attribute isn't in there, then Source-and-Destination address preservation is what's been defined for that SA TEK. Iconic default, no cap โœจ

5.5.1.1.2. SA Direction ๐Ÿฆ‹

Depending on group policy, an IPsec SA made from an SA TEK payload is defined as being in the sending direction, the receiving direction, or both. Here's the table for the SA Direction attribute values ๐Ÿ’…

           Name                      Value
           ----                      -----
           Reserved                    0
           Sender-Only                 1
           Receiver-Only               2
           Symmetric                   3
           Unassigned                 4-61439
           Private Use            61440-65535

Okay the rule of thumb here is: SA TEK policy used by multiple senders MUST be installed in both the sending and receiving direction ("Symmetric"). Whereas an SA TEK for a single sender SHOULD be installed in the receiving direction by receivers ("Receiver-Only") and in the sending direction by the sender ("Sender-Only"). Very structured, very much a "know your role" situation ๐ŸŽ€

An SA TEK payload that doesn't include the SA Direction attribute gets treated as a Symmetric IPsec SA. Also, Symmetric is the only value that can actually be meaningfully described for an SA TEK sent in a GROUPKEY-PUSH message. ๐ŸŒˆ Receiver-Only could be sent out too, but then group senders would have to be configured to not receive GROUPKEY-PUSH messages so they can keep their role. Tea โ˜•

5.5.2. Other Security Protocols ๐Ÿงš

Besides ESP and AH, GDOI should also set up SAs for secure groups that other Security Protocols need, the ones working at the transport, application, and internetwork layers. These other Security Protocols are still being developed or just don't exist yet, so we're in wait-and-see mode ๐Ÿ‘€

For a Security Protocol to work with GDOI, the following info needs to be provided:

  • The Protocol-ID for the particular Security Protocol
  • The SPI Size
  • The method of SPI generation
  • The transforms, attributes, and keys needed by the Security Protocol

All Security Protocols MUST provide the info in the bulleted list above so the GDOI spec for that protocol can be guided properly. Definitions for supporting those Security Protocols in GDOI will be specified in separate documents, so keep an eye out ๐Ÿ”ฅ

A Security Protocol MAY protect traffic at any level of the network stack. However, in every case, applications of the Security Protocol MUST protect traffic that MAY be shared by more than two entities. That's the vibe: the more people sharing the traffic, the more protection it needs ๐Ÿซถ

5.6. Key Download Payload ๐Ÿ”‘

The Key Download payload carries group keys for the group named in the SA payload. These Key Download payloads can have several security attributes applied to them based on the security policy of the group, as defined by the associated SA payload. Main character energy for the keys ๐Ÿ‘‘

    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        !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
   ! Number of Key Packets         !            RESERVED2          !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
   ~                    Key Packets                                ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!

Figure 9. Key Download Payload

The Key Download payload fields go like this ๐Ÿ’–

  • Next Payload (1 octet) is the identifier for the payload type of the next payload in the message. If the current payload is the last one in the message, this field is zero.
  • RESERVED (1 octet) is unused and set to zero ๐Ÿซง
  • Payload Length (2 octets) is the length in octets of the current payload, including the generic payload header.
  • Number of Key Packets (2 octets) holds the total number of key packets being passed in this data block.
  • Key Packets (variable) covers several types of key packets. Each key packet has the following format:
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
   !   KD Type     !   RESERVED    !            KD Length          !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
   !    SPI Size   !                   SPI (variable)              ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!
   ~                    Key Packet Attributes                      ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-!

Figure 10. Key Packet

Here's how each key packet's fields work ๐Ÿง

  • KD Type (1 octet) is the identifier for the Key Data field of this key packet.
                      Key Download Type        Value
                      -----------------        -----
                      Reserved                   0
                      TEK                        1
                      KEK                        2
                      LKH                        3
                      SID                        4
                      Unassigned                4-127
                      Private Use             128-255

"KEK" is a single key, whereas LKH is an array of key-encrypting keys. Two very different vibes, both important โœจ

  • Reserved (1 octet) is unused and set to zero.
  • Key Download Length (2 octets) is the length in octets of the Key Packet data, including the Key Packet header.
  • SPI Size (1 octet) is the value specifying the length in octets of the SPI, as defined by the Protocol-ID.
  • SPI (variable length) is the Security Parameter Index, which matches an SPI previously sent in a SAK or SAT payload ๐Ÿฆ‹
  • Key Packet Attributes (variable length) contains the key information. The format of this field depends on the value of the KD Type field. The following sections describe the format of each KD Type.

5.6.1. TEK Download Type ๐Ÿ’œ

The following attributes may be present in a TEK Download Type. Exactly one attribute matching each type sent in the SAT payload MUST be present. The attributes must follow the format defined in ISAKMP (Section 3.3 of [RFC2408]). In the table, attributes defined as TV are marked as Basic (B), and attributes defined as TLV are marked as Variable (V). ๐Ÿ“‹

             TEK Class                 Value      Type
             ---------                 -----      ----
             RESERVED                     0
             TEK_ALGORITHM_KEY            1        V
             TEK_INTEGRITY_KEY            2        V
             TEK_SOURCE_AUTH_KEY          3        V
             Unassigned                  4-127
             Private Use               128-255
             Unassigned                256-32767

If no TEK key packets are included in a Registration KD payload, the group member can expect to receive the TEK as part of a Rekey SA. At least one TEK must be included in each Rekey KD payload. Multiple TEKs may be included if multiple streams associated with the SA are going to be rekeyed ๐Ÿ”

When an algorithm specification defines the format of the keying material, the value carried in the KD payload for that key is passed according to that specification. The keying material may contain info besides a key. For example, "The Use of Galois/Counter Mode (GCM) in IPsec Encapsulating Security Payload (ESP)" [RFC4106] defines a salt value as part of KEYMAT. Extra spicy, but totally valid ๐ŸŒถ๏ธ

5.6.1.1. TEK_ALGORITHM_KEY ๐Ÿ”

The TEK_ALGORITHM_KEY class declares that the encryption key for this SPI is contained as the Key Packet Attribute. The encryption algorithm that will use this key was specified in the SAT payload.

In the case that the algorithm needs multiple keys (e.g., 3DES), all keys go in one attribute.

DES keys consist of 64 bits (the 56 key bits with parity bits). Triple DES keys are specified as a single 192-bit attribute (including parity bits), in the order the keys are to be used for encryption (e.g., DES_KEY1, DES_KEY2, DES_KEY3). Order matters, bestie ๐ŸŽ€

5.6.1.2. TEK_INTEGRITY_KEY ๐Ÿ›ก๏ธ

The TEK_INTEGRITY_KEY class declares that the integrity key for this SPI is contained as the Key Packet Attribute. The integrity algorithm that will use this key was specified in the SAT payload. So GDOI assumes that both the symmetric encryption and integrity keys get pushed to the GM. HMAC-SHA1 keys consist of 160 bits [RFC2404], and HMAC-MD5 keys consist of 128 bits [RFC2403]. HMAC-SHA2 and AES-GMAC keys have a key length equal to the output length of the hash functions [RFC4868] [RFC4543] ๐Ÿง 

5.6.1.3. TEK_SOURCE_AUTH_KEY ๐Ÿชช

The TEK_SOURCE_AUTH_KEY class declares that the source authentication key for this SPI is contained in the Key Packet Attribute. The source authentication algorithm that will use this key was specified in the SAT payload.

5.6.2. KEK Download Type ๐Ÿ—๏ธ

The following attributes may be present in a KEK Download Type. Exactly one attribute matching each type sent in the SAK payload MUST be present. The attributes MUST follow the format defined in ISAKMP (Section 3.3 of [RFC2408]). In the table, attributes defined as TV are marked as Basic (B), and attributes defined as TLV are marked as Variable (V). ๐Ÿ’…

             KEK Class                 Value      Type
             ---------                 -----      ----
             RESERVED                     0
             KEK_ALGORITHM_KEY            1        V
             SIG_ALGORITHM_KEY            2        V
             Unassigned                  3-127
             Private Use               128-255
             Unassigned                256-32767

If the KEK key packet is included, there MUST be only one present in the KD payload. One KEK, no drama ๐Ÿ‘‘

5.6.2.1. KEK_ALGORITHM_KEY ๐ŸŒท

The KEK_ALGORITHM_KEY class declares the encryption key for this SPI is contained in the Key Packet Attribute. The encryption algorithm that will use this key was specified in the SAK payload.

If the mode of operation for the algorithm requires an IV, an explicit IV MUST be included in the KEK_ALGORITHM_KEY before the actual key. Put the IV first, then the key, periodt ๐Ÿ’œ

5.6.2.2. SIG_ALGORITHM_KEY ๐Ÿ’…

okay so the SIG_ALGORITHM_KEY class says the public key for this SPI is tucked inside the Key Packet Attribute ๐Ÿ”‘, which is super handy when there's no public key infrastructure around. the signature algorithm that's gonna use this key was already named in the SAK payload, so go check there ๐Ÿ’–

5.6.3. LKH Download Type ๐ŸŒณ

the LKH key packet is basically a bunch of attributes, and each one stands for a different node in the LKH key tree ๐ŸŒณโœจ

these attributes are how we pass an LKH KEK array in the KD payload ๐ŸŽ€. they MUST follow the format ISAKMP defines (Section 3.3 of [RFC2408]), no skipping. in the table, TV attributes get a B for Basic and TLV attributes get a V for Variable ๐Ÿ’œ

            KEK Class                 Value      Type
            ---------                 -----      ----
            RESERVED                     0
            LKH_DOWNLOAD_ARRAY           1        V
            LKH_UPDATE_ARRAY             2        V
            SIG_ALGORITHM_KEY            3        V
            Unassigned                  4-127
            Private Use               128-255
            Unassigned                256-32767

if an LKH key packet is included in the KD payload, there MUST be only one present ๐Ÿ™…โ€โ™€๏ธ

5.6.3.1. LKH_DOWNLOAD_ARRAY ๐ŸŽ

this attribute is used to download a set of keys to a group member ๐Ÿ”. it MUST NOT be included in a GROUPKEY-PUSH message KD payload if the GROUPKEY-PUSH is sent to more than the group member. if an LKH_DOWNLOAD_ARRAY attribute is included in a KD payload, there MUST be only one present ๐Ÿ˜ค

it's made of a header block, followed by one or more LKH keys โœจ

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !  LKH Version  !          # of LKH Keys        !  RESERVED     !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !                             LKH Keys                          !
   ~                                                               ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Figure 11. LKH Download Array

here's the KEK_LKH attribute field rundown ๐Ÿ“

  • LKH version (1 octet) โ€” the version of the LKH data format. Must be one.
  • Number of LKH Keys (2 octets) โ€” how many distinct LKH keys are in this sequence.
  • RESERVED (1 octet) โ€” unused, so set it to zero. Each LKH Key looks like this ๐Ÿ‘‡
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !             LKH ID            !    Key Type   !    RESERVED   !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !                        Key Creation Date                      !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !                       Key Expiration Date                     !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !                           Key Handle                          !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !                                                               !
   ~                            Key Data                           ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                          Figure 12. LKH Key
  • LKH ID (2 octets) โ€” the identity of the LKH node. A GCKS is free to pick the ID however it likes (for example, the position of this key in a binary tree structure used by LKH) ๐ŸŒฒ
  • Key Type (1 octet) โ€” the encryption algorithm this key data is meant for. The value comes from Section 5.3.3 ๐Ÿ“š
  • RESERVED (1 octet) โ€” unused, so set to zero.
  • Key Creation Date (4 octets) โ€” an unsigned time value in seconds, counting from 0 hours, 0 minutes, 0 seconds, January 1, 1970, Coordinated Universal Time (UTC), without leap seconds [RFC5905]. It's when this key data was originally generated โฐ. A value of zero means there's no time before which this key isn't valid.
  • Key Expiration Date (4 octets) โ€” same kind of time value, same epoch and UTC rules [RFC5905]. It's the moment this key stops being valid for use. A value of zero means this key has no expiration time โŒ›
  • Key Handle (4 octets) โ€” a value the GCKS assigns to uniquely identify a key within an LKH ID. Every new key the GCKS distributes for this node gets a handle that's different from the previous and following ones ๐Ÿ”
  • Key Data (variable length) โ€” the key data, whose format depends on the Key Type algorithm. If the algorithm's mode of operation needs an IV, an explicit IV MUST be included in the Key Data field, prepended to the actual key ๐Ÿง

the Key Creation Date and Key Expiration Dates MAY be zero. that's needed when time synchronization within the group isn't possible ๐Ÿ•ฐ๏ธ

the first LKH Key structure in an LKH_DOWNLOAD_ARRAY attribute holds the Leaf identifier and key for the group member ๐Ÿƒ. the rest of the LKH Key structures hold the keys along the path of the key tree, in order from the leaf, and they end with the group KEK ๐Ÿ‘‘

5.6.3.2. LKH_UPDATE_ARRAY ๐Ÿ”„

this attribute updates the keys for a group ๐Ÿ”‘. it's most likely to show up in a GROUPKEY-PUSH message KD payload, where it rekeys the entire group ๐ŸŒˆ. it's a header block followed by one or more LKH keys, same as the last section described ๐Ÿ’…

there can be any number of UPDATE_ARRAY attributes in a KD payload โœจ

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !  LKH Version  !          # of LKH Keys        !  RESERVED     !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !            LKH ID             !           RESERVED2           !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !                           Key Handle                          !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !                            LKH Keys                           !
   ~                                                               ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Figure 13. LKH Update Array
  • LKH version (1 octet) โ€” the version of the LKH data format. Must be one.
  • Number of LKH Keys (2 octets) โ€” how many distinct LKH keys are in this sequence.
  • RESERVED (1 octet) โ€” unused, so set to zero.
  • LKH ID (2 octets) โ€” the node identifier tied to the key that encrypts the first LKH Key.
  • RESERVED2 (2 octets) โ€” unused, so set to zero.
  • Key Handle (4 octets) โ€” a value the GCKS assigns to uniquely identify the key, within the LKH ID, that encrypts the first LKH Key ๐Ÿ”

the LKH Keys are defined just like in the previous section ๐Ÿซถ. they hold the keys along the path of the key tree, starting from the LKH ID in the LKH_UPDATE_ARRAY header and ending with the group KEK ๐Ÿ‘‘. each LKH Key's Key Data is encrypted with the LKH key that comes right before it in the LKH_UPDATE_ARRAY attribute. the first LKH Key is encrypted under the key identified by the LKH ID and Key Handle in the header ๐ŸŽฏ

5.6.3.3. SIG_ALGORITHM_KEY ๐Ÿ’–

the SIG_ALGORITHM_KEY class says the public key for this SPI lives in the Key Packet Attribute, which is useful when no public key infrastructure is available ๐Ÿ™Œ. the signature algorithm that uses this key was specified in the SAK payload, so that's where you look ๐Ÿ‘€

5.6.4. SID Download Type ๐ŸŽ€

this attribute downloads one or more Sender-ID (SID) values for the exclusive use of a group member ๐Ÿฆ‹

the SID Download Type doesn't need an SPI ๐Ÿ™…โ€โ™€๏ธ. when the KD Type is SID, the SPI Size field MUST be zero, and the SPI field gets left out.

            SID Class                 Value      Type
            ---------                 -----      ----
            RESERVED                     0
            NUMBER_OF_SID_BITS           1        B
            SID_VALUE                    2        V
            Unassigned                 3-128
            Private Use              129-255
            Unassigned               256-32767

a SID value is meant for one single group member, so the SID Download type MUST NOT be distributed in a GROUPKEY-PUSH message that goes out to multiple group members ๐Ÿšซ

5.6.4.1. NUMBER_OF_SID_BITS ๐Ÿ”ข

the NUMBER_OF_SID_BITS class declares how many bits of the cipher nonce are used to represent a SID value ๐Ÿงฎ. this value applies to every SID value distributed in the SID Download โœจ

5.6.4.2. SID_VALUE ๐Ÿชช

the SID_VALUE class declares one SID value for the exclusive use of the group member ๐Ÿซต. multiple SID_VALUE attributes MAY be included in a SID Download ๐Ÿ’œ

5.6.4.3. Group Member Semantics ๐Ÿงš

the SID_VALUE attribute value sent to the group member MUST be used by that member as the SID field portion of the IV for all Data-Security SAs with a counter-based mode of operation distributed by the GCKS as part of this group ๐Ÿ”ฅ

when the Sender-Specific IV (SSIV) field for any Data-Security SA runs out, the group member MUST no longer act as a sender on that SA using its active SID ๐Ÿ˜ญ. the group member SHOULD re-register, and then the GCKS will issue a new SID to the group member, along with either the same Data-Security SAs or replacement ones ๐Ÿ”. the new SID replaces the existing one and also resets the SSIV value to its starting value โœจ. a group member MAY re-register before the SSIV field is actually exhausted, to avoid dropping data packets when the available SSIV values are used up with a particular SID value ๐Ÿ›Ÿ

a GROUPKEY-PUSH message may include Data-Security SAs being distributed to the group member for the first time ๐Ÿ†•. a SID that was previously issued to the receiving group member is used with counter-based mode of operation Data-Security SAs on which the group member acts as a sender. because that Data-Security SA hasn't been used for transmission before, the SSIV field should be set to its starting value ๐ŸŒธ

5.6.4.4. GCKS Semantics ๐Ÿ‘‘

if any KD payload includes keying material tied to a counter-mode of operation, a SID Download Type KD payload containing at least one SID_VALUE attribute MUST be included ๐Ÿ“ฆ

the GCKS MUST NOT send the SID Download Type KD payload as part of a GROUPKEY-PUSH message, because distributing the same sender-specific policy to more than one group member will reduce the security of the group ๐Ÿšจ

5.7. Sequence Number Payload ๐Ÿ”ข

Okay so the Sequence Number (SEQ) Payload is literally the anti-replay bodyguard for GROUPKEY-PUSH messages ๐Ÿ›ก๏ธ It works kinda like the Sequence Number field in the IPsec ESP protocol [RFC4303], so if you know that one, you're already halfway there ๐Ÿ’…

    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        !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   !                      Sequence Number                          !
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 14. Sequence Number Payload

Here's the breakdown of the Sequence Number Payload fields ๐ŸŽ€

  • Next Payload (1 octet) -- Identifier for the payload type of the next payload in the message. If the current payload is the last in the message, then this field will be zero.
  • RESERVED (1 octet) -- Unused; set to zero.
  • Payload Length (2 octets) -- Length in octets of the current payload, including the generic payload header. It MUST be a value of 8.
  • Sequence Number (4 octets) -- This field contains a monotonically increasing counter value for the group. It is initialized to zero by the GCKS and incremented in each subsequently transmitted message. Thus, the first packet sent for a given Rekey SA will have a Sequence Number of 1. The GDOI implementation keeps a sequence counter as an attribute for the Rekey SA and increments the counter upon receipt of a GROUPKEY-PUSH message. The current value of the sequence number MUST be transmitted to group members as a part of the Registration SA payload. ๐ŸŒˆ

5.8. Nonce ๐ŸŒธ

The data portion of the Nonce payload (i.e., Ni_b and Nr_b included in the HASHs) MUST be a value between 8 and 128 octets.

5.9. Delete ๐Ÿ—‘๏ธ

Okay, so sometimes the GCKS wants to tell receivers to delete SAs, like at the end of a broadcast. Deleting keys can be done by sending an ISAKMP Delete payload (Section 3.15 of [RFC2408]) as part of a GDOI GROUPKEY-PUSH message.

One or more Delete payloads MAY be placed following the SEQ payload in a GROUPKEY-PUSH message. If a GCKS has no further SAs to send to group members, the SA and KD payloads MUST be omitted from the message.

The following fields of the Delete payload are further defined as follows:

  • The Domain of Interpretation field contains the GDOI DOI.
  • The Protocol-ID field contains TEK protocol ID values defined in Section 5.5 of this document. To delete a KEK SA, the value of zero MUST be used as the protocol ID. Note that only one protocol ID value can be defined in a Delete payload. Thus, if a TEK SA and a KEK SA are to be deleted, their SPI values MUST be sent in different Delete payloads.

There may be circumstances where the GCKS wants to start over with a clean slate โœจ If the administrator is no longer confident in the integrity of the group, the GCKS can signal deletion of all policy of a particular TEK protocol by sending a TEK with an SPI value equal to zero in the delete payload. For example, if the GCKS wishes to remove all the KEKs and all the TEKs in the group, the GCKS SHOULD send a delete payload with an SPI of zero and a Protocol-ID of a TEK Protocol-ID value, followed by another delete payload with an SPI value of zero and Protocol-ID of zero, indicating that the KEK SA should be deleted.


6. Algorithm Selection ๐Ÿ‘‘

For GDOI implementations to interoperate, they must support one or more security algorithms in common. This section specifies the security algorithm implementation requirements for standards-conformant GDOI implementations. In all cases, the choices are intended to maintain at least 112 bits of security [SP.800-131].

Algorithms not referenced in this section MAY be used.

6.1. KEK ๐Ÿ”

These tables list the algorithm selections for values related to the KEK.

              Requirement   KEK Management Algorithm
              -----------   ---------------------
              SHOULD        LKH
              Requirement   KEK Algorithm (notes)
              -----------   ---------------------
              MUST          KEK_ALG_AES with 128-bit keys
              SHOULD NOT    KEK_ALG_DES  (1)
              Requirement   KEK Signature Hash Algorithm (notes)
              -----------   ------------------------------------
              MUST          SIG_HASH_SHA256
              SHOULD        SIG_HASH_SHA1 (2)
              SHOULD NOT    SIG_HASH_MD5 (3)
              Requirement   KEK Signature Algorithm (notes)
              -----------   -------------------------------
              MUST          SIG_ALG_RSA with 2048-bit keys

Notes:

(1) DES, with its small key size and corresponding security strength, is of questionable security for general use ๐Ÿ™ˆ

(2) The use of SIG_HASH_SHA1 as a signature hash algorithm used with GROUPKEY-PUSH messages remains safe at the time of this writing, and it is a widely deployed signature hash algorithm.

(3) Although a real weakness with second preimage resistance with MD5 has not been found at the time of this writing, the security strength of MD5 has been shown to be rapidly declining over time, and its use should be understood and carefully weighed.

6.2. TEK ๐Ÿฆ‹

The following table lists the requirements for Security Protocol support for an implementation.

              Requirement   KEK Management Algorithm
              -----------   ---------------------
              MUST          GDOI_PROTO_IPSEC_ESP

7. Security Considerations ๐Ÿ’€

GDOI is a security association (SA) management protocol for groups of senders and receivers. This protocol performs authentication of communicating protocol participants (Group Member, Group Controller/Key Server). It provides confidentiality of key management messages, and it provides source authentication of those messages. GDOI includes defenses against man-in-middle, connection hijacking, replay, reflection, and denial-of-service (DoS) attacks on unsecured networks. GDOI assumes the network is not secure and may be under the complete control of an attacker.

GDOI assumes that the group members and GCKS are secure even though the network is insecure. GDOI ultimately establishes keys among members of a group, which MUST be trusted to use those keys in an authorized manner according to group policy. A GDOI entity compromised by an attacker may reveal the secrets necessary to eavesdrop on group traffic and/or take the identity of a group sender, so host security measures mitigating unauthorized access are of the utmost importance. The latter threat could be mitigated by using source origin authentication in the Data-Security SAs (e.g., the use of RSA signatures [RFC4359] or TESLA [RFC4082]). The choice of Data-Security SAs is a matter of group policy and is not within the scope of this memo.

There are three phases of GDOI as described in this document: an ISAKMP Phase 1 protocol, the GROUPKEY-PULL exchange protected by the ISAKMP Phase 1 protocol, and the GROUPKEY-PUSH message. Each phase is considered separately below.

7.1. ISAKMP Phase 1 ๐Ÿ”’

GDOI uses the Phase 1 exchanges defined in [RFC2409] to protect the GROUPKEY-PULL exchange. Therefore, all security properties and considerations of those exchanges (as noted in [RFC2409]) are relevant for GDOI.

GDOI may inherit the problems of its ancestor protocols, such as identity exposure, absence of unidirectional authentication, or stateful cookies [PK01].

7.1.1. Authentication

Authentication is provided via the mechanisms defined in [RFC2409], namely pre-shared keys or public key encryption.

7.1.2. Confidentiality

Confidentiality is achieved in Phase 1 through a Diffie-Hellman exchange that provides keying material and through negotiation of encryption transforms.

The Phase 1 protocol will be protecting encryption and integrity keys sent in the GROUPKEY-PULL protocol. The strength of the encryption used for Phase 1 SHOULD exceed that of the keys sent in the GROUPKEY-PULL protocol.

7.1.3. Man-in-the-Middle Attack Protection

A successful man-in-the-middle or connection-hijacking attack foils entity authentication of one or more of the communicating entities during key establishment. GDOI relies on Phase 1 authentication to defeat man-in-the-middle attacks.

7.1.4. Replay/Reflection Attack Protection

In a replay/reflection attack, an attacker captures messages between GDOI entities and subsequently forwards them to a GDOI entity. Replay and reflection attacks seek to gain information from a subsequent GDOI message response or seek to disrupt the operation of a GDOI member or GCKS entity. GDOI relies on the Phase 1 nonce mechanism in combination with a hash-based message authentication code to protect against the replay or reflection of previous key management messages.

7.1.5. Denial-of-Service Protection

A DoS attacker sends messages to a GDOI entity to cause that entity to perform unneeded message authentication operations. GDOI uses the Phase 1 cookie mechanism to identify spurious messages prior to cryptographic hash processing. This is a "weak" form of DoS protection in that the GDOI entity must check for good cookies, which can be successfully imitated by a sophisticated attacker. The Phase 1 cookie mechanism is stateful and commits memory resources for cookies.

7.2. GROUPKEY-PULL Exchange ๐ŸŽ€

The GROUPKEY-PULL exchange allows a group member to request SAs and keys from a GCKS. It runs as a Phase 2 protocol under protection of the Phase 1 security association.

7.2.1. Authentication

Peer authentication is not required in the GROUPKEY-PULL protocol. It is running in the context of the Phase 1 protocol, which has previously authenticated the identity of the peer.

Message authentication is provided by HASH payloads in each message, where the HASH is defined to be over SKEYID_a (derived in the Phase 1 exchange), the ISAKMP Message-ID, and all payloads in the message. Because only the two endpoints of the exchange know the SKEYID_a value, this provides confidence that the peer sent the message.

7.2.2. Confidentiality

Confidentiality is provided by the Phase 1 security association, after the manner described in [RFC2409].

7.2.3. Man-in-the-Middle Attack Protection

Message authentication (described above) includes a secret known only to the group member and GCKS when constructing a HASH payload. This prevents man-in-the-middle and connection-hijacking attacks because an attacker would not be able to change the message undetected.

7.2.4. Replay Protection

A GROUPKEY-PULL message identifies its messages using a cookie pair from the Phase 1 exchange that precedes it. A GROUPKEY-PULL message with invalid cookies will be discarded. Therefore, GDOI messages that are not associated with a current GDOI session will be discarded without further processing.

Replayed GDOI messages that are associated with a current GDOI session will be decrypted and authenticated. The M-ID in the HDR identifies a session. Replayed packets will be processed according to the state machine of that session. Packets not matching that state machine will be discarded without processing. ๐Ÿงš

7.2.5. Denial-of-Service Protection โœจ

okay bestie, the GCKS has to be a little bit of a bouncer ๐Ÿ’… ๐Ÿซถ GCKS implementations SHOULD keep a record of recently received GROUPKEY-PULL messages (like a hash of the packet ๐Ÿงพ) and reject any message they've already processed. That gives you DoS and replay protection for messages that were already sent, which is lowkey iconic ๐Ÿ”ฅ An implementation MAY choose to rate-limit how many GDOI messages it accepts, so it doesn't get overloaded on its computing resources ๐Ÿ˜ญ

The GCKS SHOULD NOT do anything computationally expensive until it gets a HASH with its own nonce included ๐Ÿ™ˆ And the GCKS MUST NOT update its group management state (like the LKH key tree or the SID-counter ๐ŸŒณ) until it receives the third message in the exchange with a valid HASH payload that includes its own nonce. no cap, it's giving "don't open the door until you've seen the password" ๐ŸŽ€

7.2.6. Authorization

okay this part is about who's allowed on the list ๐Ÿ“‹ A GCKS implementation SHOULD maintain an authorization list of authorized group members. And a group member MUST specifically list each authorized GCKS in its Group Peer Authorization Database (GPAD) [RFC5374]. so everyone's on the guest list, periodt ๐Ÿ’–

7.3. GROUPKEY-PUSH Exchange

the GROUPKEY-PUSH exchange is basically one single message that lets a GCKS send SAs and keys out to the group ๐Ÿ“ฌ It's probably going to be sent to everyone at once using an IP multicast group ๐ŸŒˆ This message is super efficient for rekeying and for adjusting who's in the group, so it's a major glow-up ๐Ÿฆ‹ โœจ

7.3.1. Authentication

the GROUPKEY-PULL exchange hands out a public key that's used for message authentication ๐Ÿ”‘ The GROUPKEY-PUSH message gets digitally signed with the matching private key that the GCKS is holding. That signature gives you source authentication for the message, so GDOI protects the GCKS from impersonation in group environments ๐Ÿ›ก๏ธ literally the whole point ๐Ÿ’…

7.3.2. Confidentiality

the GCKS encrypts the GROUPKEY-PUSH message with an encryption key that was handed out during the GROUPKEY-PULL exchange or during a previous GROUPKEY-PUSH exchange ๐Ÿ” That encryption key can be a simple KEK, or it can be the result of a group management method (like LKH) calculation ๐ŸŒธ

7.3.3. Man-in-the-Middle Attack Protection

this combo of confidentiality and message authentication keeps the GROUPKEY-PUSH message safe from man-in-middle and connection-hijacking attacks ๐Ÿ™…โ€โ™€๏ธ not me getting hijacked ๐Ÿ˜ค

7.3.4. Replay/Reflection Attack Protection

the GROUPKEY-PUSH message has a monotonically increasing sequence number so replay and reflection attacks can't slide in ๐Ÿงš A group member will discard any sequence numbers tied to the current KEK SPI that have the same or a lower value than the most recently received replay number ๐Ÿ—‘๏ธ

Implementations SHOULD keep a record (like a hash value) of recently received GROUPKEY-PUSH messages and reject duplicates before doing any cryptographic operations ๐Ÿ’œ That lets them toss replayed messages early, which is so efficient it's giving main character energy โœจ

7.3.5. Denial-of-Service Protection

a cookie pair identifies the security association for the GROUPKEY-PUSH message ๐Ÿช So the cookies act as a weak form of DoS protection for it, which is cute but not a lot ๐Ÿฅบ

okay real talk: the digital signature used for message authentication is WAY more expensive computationally than a message authentication code ๐Ÿ˜ฌ It could amplify a DoS attack on the GDOI members who process GROUPKEY-PUSH messages. BUT the added cost is worth it, because without signatures, GCKS source authentication would be impossible and literally any member could impersonate the GCKS if a shared symmetric key were used for GROUPKEY-PUSH message authentication ๐Ÿšจ no thank you ๐Ÿ’€

the signature's amplification risk gets reduced by doing the cheapest crypto operation first ๐Ÿง  The group member decrypts the message with a symmetric cipher first. If the message is validly formed, the sequence number gets checked against the most recently received sequence number. Only when the sequence number is valid (meaning it's larger than previously received ones) does the member verify the digital signature and process the message further ๐ŸŽฏ So for a DoS attack to work, an attacker would need to know BOTH the symmetric encryption key used for confidentiality AND a valid sequence number. Generally speaking, that means only current group members can actually pull off a DoS attack here ๐Ÿ‘‘

7.4. Forward and Backward Access Control

through GROUPKEY-PUSH, GDOI supports group management methods like LKH (Section 5.4 of [RFC2627]) that have a really cool property ๐Ÿ˜Ž They deny access to a new group key for a member who was removed from the group (forward access control), and they deny access to an old group key for a member who was just added (backward access control). In the literature, these concepts have also been called "perfect forward security" and "perfect backward security," respectively [RFC2627] ๐Ÿ“š

there are other group management algorithms that give forward and backward access control besides LKH ๐ŸŒฟ Examples in the literature include one-way function trees [OFT] and Subset Difference [NNL]. They could be used with GDOI, but they're not specified in this document ๐Ÿซถ

7.4.1. Forward Access Control Requirements

when group membership changes through a group management algorithm, you usually need new Data-Security SAs too ๐Ÿ”„ New SAs make sure the members who got kicked out can't participate in the group anymore ๐Ÿšซ

If forward access control is a desired property of the group, new Data-Security SAs MUST NOT be included in a GROUPKEY-PUSH message that changes group membership ๐Ÿ™…โ€โ™€๏ธ This is required because the new Data-Security SAs aren't protected with the new KEK. Instead, the GCKS has to send two sequential GROUPKEY-PUSH messages: the first changes the KEK, and the second (protected with the new KEK) distributes the new Data-Security SAs ๐ŸŽ€

hot take: even though the new KEK can effectively lock some group members out, they're still going to be able to see the new KEK policy ๐Ÿ‘€ So if the group's forward access control policy also says the KEK policy has to stay secret (not just the KEK itself), then two GROUPKEY-PUSH messages changing the KEK have to go out before the new Data-Security SAs get sent ๐Ÿ”’

If other methods of using LKH or other group management algorithms get added to GDOI, those methods MAY drop the above restrictions that require multiple GROUPKEY-PUSH messages, as long as they specify how forward access control policy is maintained within a single GROUPKEY-PUSH message โœจ

7.4.2. Backward Access Control Requirements

if backward access control is a desired property of the group, a new member MUST NOT be given Data-Security SAs that were used before it joined the group ๐Ÿšช You can do this if the GCKS only gives the new member the Rekey SA in a GROUPKEY-PULL exchange, and then sends a GROUPKEY-PUSH message that both deletes the current Data-Security SAs AND provides new replacement ones ๐Ÿ” The new member effectively joins the group at the moment the existing members start sending on the Data-Security SAs ๐ŸŒˆ

BUT if the new group member might have stored GROUPKEY-PUSH messages that got delivered before it joined, then the procedure above isn't enough ๐Ÿ˜ฌ In that case, to get backward access control, the GCKS needs to return a new Rekey SA to the group member in a GROUPKEY-PULL exchange, instead of the existing one. After that, the GCKS delivers two GROUPKEY-PUSH messages. The first one, meant for the existing members, distributes the new Rekey SA to them. Then the GCKS delivers the second GROUPKEY-PUSH message using the new Rekey SA, which deletes the current Data-Security SAs and provides new replacements ๐Ÿง Both the existing members and the new member process that second message, and everyone can then talk using the new Data-Security SAs ๐Ÿ’–

7.5. Derivation of Keying Material

the GCKS distributes keying material for the Data-Security SAs and the Rekey SA ๐Ÿ—๏ธ Because these security associations are shared by a whole set of group members, this keying material isn't tied to any pair-wise connection ๐Ÿ‘ฏ And there's no requirement in "The Multicast Group Security Architecture" [RFC3740] for group members to permute group keying material. Since the GCKS is solely responsible for generating the keying material, the GCKS MUST derive that keying material using a strong random number generator ๐ŸŽฒ Also, because there are no interoperability concerns with key generation, GDOI doesn't prescribe any particular method for it ๐Ÿซถ

8. IANA Considerations ๐Ÿ“š

8.1. Additions to Current Registries

the GDOI KEK Attribute named SIG_HASH_ALGORITHM [GDOI-REG] got several new Algorithm Type values taken from the RESERVED space, to represent the SHA-256, SHA-384, and SHA-512 hash algorithms as defined in [FIPS180-3.2008] ๐Ÿ“ The new algorithm names are SIG_HASH_SHA256, SIG_HASH_SHA384, and SIG_HASH_SHA512, and they have the values 3, 4, and 5 respectively ๐Ÿ”ข

the GDOI KEK Attribute named SIG_ALGORITHM [GDOI-REG] also got several new Algorithm Type values from the RESERVED space, for the SIG_ALG_ECDSA-256, SIG_ALG_ECDSA-384, and SIG_ALG_ECDSA-521 signature algorithms ๐Ÿฆ‹ Those Algorithm Type values are 4, 5, and 6 respectively โœจ

a new GDOI SA TEK type Protocol-ID type [GDOI-REG] got assigned from the RESERVED space ๐Ÿงš The new algorithm ID is called GDOI_PROTO_IPSEC_AH, it refers to the IPsec AH encapsulation, and it has a value of 2 ๐Ÿ’œ

a new Next Payload Type [ISAKMP-REG] got assigned too ๐ŸŽ‰ It's called "SA Group Associated Policy (GAP)" and has a value of 22 ๐ŸŒธ

a new Key Download Type Section 5.6 got assigned as well ๐Ÿ’… It's called "SID" and has a value of 4 ๐Ÿ‘‘

8.2. New Registries โœจ

okay so bestie, a brand new registry just dropped in the GDOI Payloads registry ๐ŸŽ€ for the possible values of GAP Payload Policy Attributes (the kind described in Section 3.3 of [RFC2408]) ๐Ÿ’… This memo defines these values:

           Attribute Type         Value       Type
           ----                   -----       ----
           RESERVED                 0
           ACTIVATION_TIME_DELAY    1          B
           DEACTIVATION_TIME_DELAY  2          B
           SENDER_ID_REQUEST        3          B
           Unassigned              4-127
           Private Use           128-255
           Unassigned            256-32767

The registration procedure is Standards Action ๐Ÿ”ฅ Standards Action and Private Use get read the way they're defined in [RFC5226], no vibes-based interpretation ๐Ÿ™ˆ

A brand new IPsec Security Association Attribute [ISAKMP-REG] for preserving IP addresses is also registered ๐Ÿฆ‹ It's called "Address Preservation" and it's a Basic type ๐ŸŒธ Here's what the values look like:

           Name                      Value
           ----                      -----
           Reserved                  0
           None                      1
           Source-Only               2
           Destination-Only          3
           Source-and-Destination    4
           Unassigned               5-61439
           Private Use          61440-65535

Same deal here: registration procedure is Standards Action, and Standards Action and Private Use follow [RFC5226] ๐Ÿ’–

Another new IPsec Security Association Attribute [ISAKMP-REG] got created, this one for the SA direction โœจ It's called "SA Direction" and it's also a Basic type ๐ŸŒˆ The values:

           Name                      Value
           ----                      -----
           Reserved                  0
           Sender-Only               1
           Receiver-Only             2
           Symmetric                 3
           Unassigned               4-61439
           Private Use          61440-65535

Registration procedure is Standards Action, and Standards Action and Private Use are applied as defined in [RFC5226] ๐Ÿงš

Now for the SID "Key Download Type" we talked about in the previous section ๐Ÿ’œ When that SID has a set of attributes, those attributes must follow the format defined in ISAKMP (Section 3.3 of [RFC2408]) โญ In the table below, attributes defined as TV are marked Basic (B), and attributes defined as TLV are marked Variable (V) ๐Ÿ“

           SID Class                 Value      Type
           ---------                 -----      ----
           RESERVED                     0
           NUMBER_OF_SID_BITS           1        B
           SID_VALUE                    2        V
           Unassigned                 3-128
           Private Use              129-255
           Unassigned               256-32767

Registration procedure is Standards Action, and Standards Action and Private Use follow [RFC5226] ๐Ÿ‘‘


8.3. Cleanup of Existing Registries ๐Ÿงน

Some existing GDOI Payloads registries are lowkey messy ๐Ÿ˜ญ They don't use the terms from RFC 5226, and some don't cover the whole range of possible values. The sections below fix that up ๐Ÿ’… Standards Action, Unassigned, and Private Use all get applied as defined in [RFC5226] from here on.

8.3.1. Pop Algorithm

The registration procedure is Standards Action. Values 4-27 are designated Unassigned. Values 256-32767 have been added and are designated Unassigned. ๐Ÿซถ

8.3.2. KEK Attributes

The registration procedure is Standards Action. Values 9-127 have been added and are designated Unassigned. Values 128-255 have been added and are designated Private Use. Values 256-32767 have been added and are designated Unassigned. โœจ

8.3.3. KEK_MANAGEMENT_ALGORITHM

The registration procedure is Standards Action. Values 2-127 are designated Unassigned. Values 128-255 have been added and designated Private Use. Values 256-65535 have been added and are designated Unassigned. ๐ŸŒธ

8.3.4. KEK_ALGORITHM

The registration procedure is Standards Action. Values 4-127 are designated Unassigned. Values 256-65535 have been added and are designated Unassigned. ๐Ÿฆ‹

8.3.5. SIG_HASH_ALGORITHM

The registration procedure is Standards Action. Values 6-127 are designated Unassigned. Values 256-65535 have been added and are designated Unassigned. ๐Ÿ’œ

8.3.6. SIG_ALGORITHM

The registration procedure is Standards Action. Values 7-127 are designated Unassigned. Values 256-65535 have been added and are designated Unassigned. ๐Ÿงš

8.3.7. SA TEK Payload Values

The registration procedure is Standards Action. Values 3-127 are designated Unassigned. ๐ŸŽ€

8.3.8. Key Download Types

The registration procedure is Standards Action. Values 5-127 are designated Unassigned. ๐Ÿ“

8.3.9. TEK Download Type

The registration procedure is Standards Action. Values 4-127 have been added and are designated Unassigned. Values 128-255 have been added and are designated Private Use. Values 256-32767 have been added and are designated Unassigned. ๐ŸŒˆ

8.3.10. KEK Download Type

The registration procedure is Standards Action. Values 3-127 are designated Unassigned. Values 128-255 have been added and are designated Private Use. Values 256-32767 have been added and are designated Unassigned. โญ

8.3.11. LKH Download Type

The registration procedure is Standards Action. Values 4-127 are designated Unassigned. Values 256-32767 have been added and are designated Unassigned. ๐Ÿ‘‘


9. Acknowledgements ๐Ÿซถ

This memo replaces RFC 3547, and the authors want to give a huge shoutout to Mark Baugher and Hugh Harney ๐Ÿ’– Their extensive contributions led to this newer GDOI spec, and we are SO grateful ๐Ÿ˜ญ

The authors also thank Catherine Meadows for her careful review and her suggestions for mitigating the man-in-the-middle attack she had previously identified ๐Ÿ”ฅ Yoav Nir, Vincent Roca, Sean Turner, and Elwyn Davies gave lots of useful technical and editorial comments and suggestions for improvement, and they're literal legends for it ๐Ÿ‘‘โœจ


10. References ๐Ÿ“š

10.1. Normative References

[RFC2119]    Bradner, S., "Key words for use in RFCs to Indicate
             Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC2403]    Madson, C. and R. Glenn, "The Use of HMAC-MD5-96 within
             ESP and AH", RFC 2403, November 1998.

[RFC2404]    Madson, C. and R. Glenn, "The Use of HMAC-SHA-1-96
             within ESP and AH", RFC 2404, November 1998.

[RFC2407]    Piper, D., "The Internet IP Security Domain of
             Interpretation for ISAKMP", RFC 2407, November 1998.

[RFC2408]    Maughan, D., Schneider, M., and M. Schertler, "Internet
             Security Association and Key Management Protocol
             (ISAKMP)", RFC 2408, November 1998.

[RFC2409]    Harkins, D. and D. Carrel, "The Internet Key Exchange
             (IKE)", RFC 2409, November 1998.

[RFC2627]    Wallner, D., Harder, E., and R. Agee, "Key Management
             for Multicast: Issues and Architectures", RFC 2627,
             June 1999.

[RFC3447]    Jonsson, J. and B. Kaliski, "Public-Key Cryptography
             Standards (PKCS) #1: RSA Cryptography Specifications
             Version 2.1", RFC 3447, February 2003.

[RFC4302]    Kent, S., "IP Authentication Header", RFC 4302,
             December 2005.

[RFC4303]    Kent, S., "IP Encapsulating Security Payload (ESP)",
             RFC 4303, December 2005.

[RFC4754]    Fu, D. and J. Solinas, "IKE and IKEv2 Authentication
             Using the Elliptic Curve Digital Signature Algorithm
             (ECDSA)", RFC 4754, January 2007.

[RFC4868]    Kelly, S. and S. Frankel, "Using HMAC-SHA-256, HMAC-SHA-
             384, and HMAC-SHA-512 with IPsec", RFC 4868, May 2007.

[RFC5374]    Weis, B., Gross, G., and D. Ignjatic, "Multicast
             Extensions to the Security Architecture for the Internet
             Protocol", RFC 5374, November 2008.

[RFC5903]    Fu, D. and J. Solinas, "Elliptic Curve Groups modulo a
             Prime (ECP Groups) for IKE and IKEv2", RFC 5903,
             June 2010.

[RFC6054]    McGrew, D. and B. Weis, "Using Counter Modes with
             Encapsulating Security Payload (ESP) and Authentication
             Header (AH) to Protect Group Traffic", RFC 6054,
             November 2010.

10.2. Informative References ๐Ÿ“šโœจ

Okay bestie, these are the extra reads ๐Ÿค“ Not required to get the core ideas, but super worth bookmarking for when you want the whole backstory ๐Ÿ’œ

  • [FIPS180-3.2008] National Institute of Standards and Technology, "Secure Hash Standard", FIPS PUB 180-3, October 2008, http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.
  • [FIPS186-3] "Digital Signature Standard (DSS)", United States of America, National Institute of Science and Technology, Federal Information Processing Standard (FIPS) 186-2, June 2009.
  • [FIPS197] "Advanced Encryption Standard (AES)", United States of America, National Institute of Science and Technology, Federal Information Processing Standard (FIPS) 197, November 2001.
  • [FIPS46-3] "Data Encryption Standard (DES)", United States of America, National Institute of Science and Technology, Federal Information Processing Standard (FIPS) 46-3, October 1999.
  • [FIPS81] "DES Modes of Operation", United States of America, National Institute of Science and Technology, Federal Information Processing Standard (FIPS) 81, December 1980.
  • [GDOI-REG] Internet Assigned Numbers Authority, "Group Domain of Interpretation (GDOI) Payload Type Values", IANA Registry, December 2004, http://www.iana.org/assignments/gdoi-payloads.
  • [HD03] Hardjono, T. and L. Dondeti, "Multicast and Group Security", Artech House Computer Security Series, ISBN 1-58053-342-6, 2003.
  • [ISAKMP-REG] "'Magic Numbers' for ISAKMP Protocol", http://www.iana.org/assignments/isakmp-registry.
  • [MP04] Meadows, C. and D. Pavlovic, "Deriving, Attacking, and Defending the GDOI Protocol", European Symposium on Research in Computer Security (ESORICS) 2004, pp. 53-72, September 2004.
  • [NNL] Naor, D., Noal, M., and J. Lotspiech, "Revocation and Tracing Schemes for Stateless Receivers", Advances in Cryptology, Crypto '01, Springer-Verlag LNCS 2139, 2001, pp. 41-62, 2001, http://www.iacr.org/archive/crypto2001/21390040.pdf.
  • [OFT] Sherman, A. and D. McGrew, "Key Establishment in Large Dynamic Groups Using One-Way Function Trees", IEEE Transactions on Software Engineering, Vol. 29, Issue 5, pp. 444-458, May 2003, http://ieeexplore.ieee.org/search/freesrchabstract.jsp?tp=&arnumber=1199073.
  • [PK01] Perlman, R. and C. Kaufman, "Analysis of the IPsec Key Exchange Standard", Enabling Technologies: Infrastructure for Collaborative Enterprises, WET ICE 2001, Proceedings. Tenth IEEE International Workshops on IEEE Transactions on Software Engineering, pp. 150-156, June 2001, http://ieeexplore.ieee.org/search/freesrchabstract.jsp?tp=&arnumber=953405.
  • [PROT-REG] "Assigned Internet Protocol Numbers", http://www.iana.org/assignments/protocol-numbers/.
  • [RFC3686] Housley, R., "Using Advanced Encryption Standard (AES) Counter Mode With IPsec Encapsulating Security Payload (ESP)", RFC 3686, January 2004.
  • [RFC3740] Hardjono, T. and B. Weis, "The Multicast Group Security Architecture", RFC 3740, March 2004.
  • [RFC3947] Kivinen, T., Swander, B., Huttunen, A., and V. Volpe, "Negotiation of NAT-Traversal in the IKE", RFC 3947, January 2005.
  • [RFC4046] Baugher, M., Canetti, R., Dondeti, L., and F. Lindholm, "Multicast Security (MSEC) Group Key Management Architecture", RFC 4046, April 2005.
  • [RFC4082] Perrig, A., Song, D., Canetti, R., Tygar, J., and B. Briscoe, "Timed Efficient Stream Loss-Tolerant Authentication (TESLA): Multicast Source Authentication Transform Introduction", RFC 4082, June 2005.
  • [RFC4106] Viega, J. and D. McGrew, "The Use of Galois/Counter Mode (GCM) in IPsec Encapsulating Security Payload (ESP)", RFC 4106, June 2005.
  • [RFC4301] Kent, S. and K. Seo, "Security Architecture for the Internet Protocol", RFC 4301, December 2005.
  • [RFC4306] Kaufman, C., "Internet Key Exchange (IKEv2) Protocol", RFC 4306, December 2005.
  • [RFC4309] Housley, R., "Using Advanced Encryption Standard (AES) CCM Mode with IPsec Encapsulating Security Payload (ESP)", RFC 4309, December 2005.
  • [RFC4359] Weis, B., "The Use of RSA/SHA-1 Signatures within Encapsulating Security Payload (ESP) and Authentication Header (AH)", RFC 4359, January 2006.
  • [RFC4543] McGrew, D. and J. Viega, "The Use of Galois Message Authentication Code (GMAC) in IPsec ESP and AH", RFC 4543, May 2006.
  • [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 5226, May 2008.
  • [RFC5905] Mills, D., Martin, J., Burbank, J., and W. Kasch, "Network Time Protocol Version 4: Protocol and Algorithms Specification", RFC 5905, June 2010.
  • [RFC5996] Kaufman, C., Hoffman, P., Nir, Y., and P. Eronen, "Internet Key Exchange Protocol Version 2 (IKEv2)", RFC 5996, September 2010.
  • [SP.800-131] Barker, E. and A. Roginsky, "Recommendation for the Transitioning of Cryptographic Algorithms and Key Lengths", United States of America, National Institute of Science and Technology, DRAFT NIST Special Publication 800-131, June 2010.
  • [SP.800-38A] Dworkin, M., "Recommendation for Block Cipher Modes of Operation", United States of America, National Institute of Science and Technology, NIST Special Publication 800-38A 2001 Edition, December 2001.

Appendix A. GDOI Applications ๐ŸŽ€

Okay so GDOI can distribute keys for a bunch of different secure multicast apps ๐Ÿซถ, and each one has its own key management vibe ๐Ÿ’… This section walks through two examples. More examples live in Section 10 of [HD03] ๐Ÿ“–

A simple one is secure delivery of periodic multicast content over an organization's IP network, like a multicast video broadcast ๐Ÿ“บ If the content delivery time frame is bounded and the group membership isn't expected to change over time, then there's no need for group policy to include a GROUPKEY-PUSH exchange, and there's no need for the GCKS to distribute a Rekey SA ๐Ÿ™Œ So the GDOI GCKS may only need to distribute a single set of Data-Security SAs to protect the time-bounded broadcast ๐ŸŒธ

Now a persistent IP multicast app, like a stock-ticker delivery service ๐Ÿ“ˆ, is a whole different story. It can have tons of group members, and the membership keeps changing ๐ŸŒช๏ธ A periodic change of Data-Security SAs may be desirable, and the potential for membership changes requires a group management method that enables de-authorization of group members ๐Ÿ” The GDOI GCKS distributes the current set of Data-Security SAs and a Rekey SA to registering group members. Then it uses regularly scheduled GROUPKEY-PUSH exchanges to deliver the new SAs for the group. On top of that, the group membership on the GCKS may be frequently adjusted, which results in a GROUPKEY-PUSH exchange that delivers new Rekey SAs protected by a group management method. Each GROUPKEY-PUSH may include Data-Security SAs and/or a Rekey SA ๐Ÿ’œ

In each example, the relevant policy is defined on the GCKS and relayed to group members using the GROUPKEY-PULL and/or GROUPKEY-PUSH protocols ๐Ÿ“ฌ Specific policy choices configured by the GCKS administrator depend on each application โœจ


Appendix B. Significant Changes from RFC 3547 ๐Ÿฆ‹

Okay, the glow-up list ๐Ÿ’… Here are the significant changes made from RFC 3547.

  • The Proof of Possession (POP) payload was removed from the GROUPKEY-PULL exchange. It provided an alternate form of authorization, but its use was underspecified ๐Ÿ™ƒ Furthermore, Meadows and Pavlovic [MP04] discussed a man-in-the-middle attack on the POP authorization method, which would require changes to its semantics ๐Ÿ˜ฌ No known implementation of RFC 3547 supported the POP payload, so it got cut. Removing the POP payload also made the CERT payload in that exchange unnecessary, so that got cut too ๐Ÿ’€
  • The Key Exchange payloads (KE_I, KE_R) were removed from the GROUPKEY-PULL exchange. However, the specification for computing keying material for the additional encryption function in RFC 3547 is faulty ๐Ÿšฉ It's also been observed that because the GDOI registration message uses strong ciphers and provides authenticated encryption, additional encryption of the keying material in a GDOI registration message provides negligible value ๐Ÿคทโ€โ™€๏ธ Therefore, the use of KE payloads is deprecated in this memo ๐Ÿซ 
  • The Certificate Payload (CERT) was removed from the GROUPKEY-PUSH exchange. The use of this payload was underspecified ๐ŸŒ€ In all known use cases, the public key used to verify the GROUPKEY-PUSH payload is distributed directly from the key server as part of the GROUPKEY-PULL exchange ๐Ÿ”‘
  • Supported cryptographic algorithms were changed to meet current guidance ๐ŸŒˆ Implementations are required to support AES with 128-bit keys to encrypt the rekey message and support SHA-256 for cryptographic signatures. The use of DES is deprecated ๐Ÿ“
  • New protocol support for AH ๐Ÿ›ก๏ธ
  • New protocol definitions were added to conform to the most recent "Security Architecture for the Internet Protocol" [RFC4301] and the "Multicast Extensions to the Security Architecture for the Internet Protocol" [RFC5374]. This includes the addition of the GAP payload ๐Ÿงš
  • New protocol definitions and semantics were added to support "Using Counter Modes with Encapsulating Security Payload (ESP) and Authentication Header (AH) to Protect Group Traffic" [RFC6054] ๐ŸŽ€
  • Specification to IANA was added to better clarify the use of the GDOI Payloads registry ๐Ÿ“‹

Authors' Addresses ๐Ÿ’Œ

Here's who wrote this ๐Ÿซถ and how to reach them:

Brian Weis
Cisco Systems
170 W. Tasman Drive
San Jose, California  95134-1706
USA

Phone: +1-408-526-4796
EMail: bew@cisco.com


Sheela Rowles
Cisco Systems
170 W. Tasman Drive
San Jose, California  95134-1706
USA

Phone: +1-408-527-7677
EMail: sheela@cisco.com


Thomas Hardjono
MIT
77 Massachusetts Ave.
Cambridge, Massachusetts  02139
USA

Phone: +1-781-729-9559
EMail: hardjono@mit.edu
๐Ÿ“ฆ where this page comes from