ACE Working Group | F. Palombini |
Internet-Draft | Ericsson AB |
Intended status: Standards Track | M. Tiloca |
Expires: May 7, 2020 | RISE AB |
November 04, 2019 |
Key Provisioning for Group Communication using ACE
draft-ietf-ace-key-groupcomm-03
This document defines message formats and procedures for requesting and distributing group keying material using the ACE framework, to protect communications between group members.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 7, 2020.
Copyright (c) 2019 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 (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
This document expands the ACE framework [I-D.ietf-ace-oauth-authz] to define the message exchanges used to request, distribute and renew the keying material in a group communication scenario, e.g. based on multicast [RFC7390][I-D.dijk-core-groupcomm-bis] or on publishing-subscribing [I-D.ietf-core-coap-pubsub]. The ACE framework is based on CBOR [RFC7049], so CBOR is the format used in this specification. However, using JSON [RFC8259] instead of CBOR is possible, using the conversion method specified in Sections 4.1 and 4.2 of [RFC7049].
Profiles that use group communication can build on this document, by defining a number of details such as the exact group communication protocol and security protocols used. The specific list of details a profile needs to define is in Appendix A.
If the application requires backward and forward security, updated keying material is generated and distributed to the group members (rekeying), when membership changes. A key management scheme performs the actual distribution of the updated keying material to the group. In particular, the key management scheme rekeys the current group members when a new node joins the group, and the remaining group members when a node leaves the group. Rekeying mechanisms can be based on [RFC2093], [RFC2094] and [RFC2627].
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
Readers are expected to be familiar with the terms and concepts described in [I-D.ietf-ace-oauth-authz] and [RFC8152], such as Authorization Server (AS) and Resource Server (RS).
This document additionally uses the following terminology:
+------------+ +-----------+ | AS | | KDC | | | .-------->| | +------------+ / +-----------+ ^ / | / v / +-----------+ +------------+ / +------------+ |+-----------+ | Client |<-' | Dispatcher | ||+-----------+ | |<-------->| (RS) |<------->|| Group | +------------+ +------------+ +| members | +-----------+
Figure 1: Key Distribution Participants
The following participants (see Figure 1) take part in the authorization and key distribution.
This document specifies a mechanism for:
Figure 2 provides a high level overview of the message flow for a node joining a group communication setting.
C AS KDC Group | | | Member / | | | | | | Authorization Request | | | Defined | |---------------------------->| | | in the | | | | | ACE | | Authorization Response | | | framework | |<----------------------------| | | | | | | \ |----------- Token Post ---------->| | | | | |-------- Joining Request -------->| | | | | |<------- Joining Response --------|-- Group Rekeying -->| | | | | Dispatcher | | | | |<====== Secure group communication ========|===========>| | | |
Figure 2: Message Flow Upon New Node's Joining
The exchange of Authorization Request and Authorization Response between Client and AS MUST be secured, as specified by the transport profile of ACE used between Client and KDC.
The exchange of Joining Request and Joining Response between Client and KDC MUST be secured, as a result of the transport profile of ACE used between Client and KDC.
All further communications between the Client and the KDC MUST be secured, for instance with the same security mechanism used for the Key Distribution exchange.
All communications between a Client and the other group members MUST be secured using the keying material provided in Section 4.
This section describes in detail the format of messages exchanged by the participants when a node requests access to a group. This exchange is based on ACE [I-D.ietf-ace-oauth-authz].
As defined in [I-D.ietf-ace-oauth-authz], the Client requests from the AS an authorization to join the group through the KDC (see Section 3.1). If the request is approved and authorization is granted, the AS provides the Client with a proof-of-possession access token and parameters to securely communicate with the KDC (see Section 3.2).
Communications between the Client and the AS MUST be secured, as defined by the transport profile of ACE used. The Content-Format used in the messages is the one specified by the used transport profile of ACE (e.g. application/ace+cbor for the first two messages and application/cwt for the third message, depending on the format of the access token). The transport profile of ACE also defines a number of details such as the communication and security protocols used with the KDC (see Appendix C of [I-D.ietf-ace-oauth-authz]).
Figure 3 gives an overview of the exchange described above.
Client AS KDC | | | |---- Authorization Request: POST /token ------>| | | | | |<--- Authorization Response: 2.01 (Created) ---| | | | | |----- POST Token: POST /authz-info --------------->| | |
Figure 3: Message Flow of Join Authorization
The Authorization Request sent from the Client to the AS is as defined in Section 5.6.1 of [I-D.ietf-ace-oauth-authz] and MAY contain the following parameters, which, if included, MUST have the corresponding values:
The encoding of the group or topic identifier (REQ1) and of the role identifiers (REQ2) is application specific, and part of the requirements for the application profile.
As in [I-D.ietf-ace-oauth-authz], these parameters are included in the payload, which is formatted as a CBOR map. The Content-Format “application/ace+cbor” defined in Section 8.14 of [I-D.ietf-ace-oauth-authz] is used.
The Authorization Response sent from the AS to the Client is as defined in Section 5.6.2 of [I-D.ietf-ace-oauth-authz] and MUST contain the following parameters:
Additionally, the Authorization Response MAY contain the following parameters, which, if included, MUST have the corresponding values:
The encoding of the group or topic identifier and of the role identifiers is the same as in
Section 3.1.The access token MUST contain all the parameters defined above (including the same ‘scope’ as in this message, if present, or the ‘scope’ of the Authorization Request otherwise), and additionally other optional parameters that the transport profile of ACE requires.
As in [I-D.ietf-ace-oauth-authz], these parameters are included in the payload, which is formatted as a CBOR map. The Content-Format “application/ace+cbor” is used.
When receiving an Authorization Request from a Client that was previously authorized, and which still owns a valid non expired access token, the AS replies with an Authorization Response with a new access token.
The Client sends a CoAP POST request including the access token to the KDC, as specified in Section 5.8.1 of [I-D.ietf-ace-oauth-authz]. If the specific transport profile of ACE defines it, the Client MAY use a different endpoint than /authz-info at the KDC to post the access token to.
Optionally, the Client might want to request necessary information concerning the public keys in the group, as well as concerning the algorithm and related parameters for computing signatures in the group. In such a case, the joining node MAY ask for that information to the KDC in this same request. To this end, it sends the CoAP POST request to the /authz-info endpoint using the Content-Format “application/ace+cbor”. The payload of the message MUST be formatted as a CBOR map, including the access token and the following parameters:
The CDDL notation of the ‘sign_info’ and ‘pub_key_enc’ parameters formatted as in the request is given below.
sign_info_req = nil pub_key_enc_req = nil
Alternatively, the joining node may retrieve this information by other means.
After successful verification, the Client is authorized to receive the group keying material from the KDC and join the group. In particular, the KDC replies to the Client with a 2.01 (Created) response, using Content-Format “application/ace+cbor” defined in Section 8.14 of [I-D.ietf-ace-oauth-authz].
The payload of the 2.01 response is a CBOR map, which MUST include the parameter ‘rsnonce’ defined in Section Section 3.3.3, specifying a dedicated nonce N_S generated by the KDC. The Client may use this nonce for proving possession of its own private key (see the ‘client_cred_verify’ parameter in Section 4).
Optionally, if they were included in the request, the AS MAY include the ‘sign_info’ parameter as well as the ‘pub_key_enc’ parameter defined in Section 3.3.1 and Section 3.3.2 of this specification, respectively.
The ‘sign_info’ parameter MUST be present if the POST request included the ‘sign_info’ parameter with value Null. If present, the ‘sign_info’ parameter of the 2.01 (Created) response is a CBOR array formatted as follows.
The ‘pub_key_enc’ parameter MUST be present if the POST request included the ‘pub_key_enc’ parameter with value Null. If present, the ‘pub_key_enc’ parameter of the 2.01 (Created) response is a CBOR integer, indicating the encoding of public keys used in the group. Its acceptable values are taken from the “CWT Confirmation Method” Registry defined in [I-D.ietf-ace-cwt-proof-of-possession]. It is REQUIRED of the application profiles to define specific values to use for this parameter (REQ6).
The CDDL notation of the ‘sign_info’ and ‘pub_key_enc’ parameters formatted as in the response is given below.
sign_info_res = [ sign_alg : int / tstr, sign_parameters : any / nil, sign_key_parameters : any / nil ] pub_key_enc_res = int
Note that the CBOR map specified as payload of the 2.01 (Created) response may include further parameters, e.g. according to the signalled transport profile of ACE.
The ‘sign_info’ parameter is an OPTIONAL parameter of the AS Request Creation Hints message defined in Section 5.1.2. of [I-D.ietf-ace-oauth-authz]. This parameter contains information and parameters about the signature algorithm and the public keys to be used between the Client and the RS. Its exact content is application specific.
In this specification and in application profiles building on it, this parameter is used to ask and retrieve from the KDC information about the signature algorithm and related parameters used in the group.
The ‘pub_key_enc’ parameter is an OPTIONAL parameter of the AS Request Creation Hints message defined in Section 5.1.2. of [I-D.ietf-ace-oauth-authz]. This parameter contains information about the exact encoding of public keys to be used between the Client and the RS. Its exact content is application specific.
In this specification and in application profiles building on it, this parameter is used to ask and retrieve from the KDC information about the encoding of public keys used in the group.
The ‘rsnonce’ parameter is an OPTIONAL parameter of the AS Request Creation Hints message defined in Section 5.1.2. of [I-D.ietf-ace-oauth-authz]. This parameter contains a nonce generated by the RS and provided to the Client. Its exact content is application specific.
In this specification and in application profiles building on it, this parameter is used to provide a nonce that the Client may use to prove possession of its own private key in the Joining Request ((see the ‘client_cred_verify’ parameter in Section 4).
This section defines the interface available at the KDC. Moreover, this section specifies how the clients can use this interface to join a group, leave a group, retrieve new keying material or policies.
During the first exchange with the KDC (“Joining”), the Client sends a request to the KDC, specifying the group it wishes to join (see Section 4.2). Then, the KDC verifies the access token and that the Client is authorized to join that group. If so, it provides the Client with the keying material to securely communicate with the other members of the group. Whenever used, the Content-Format in messages containing a payload is set to application/cbor.
TODO: Do we need to define a new Content-Format cbor+ace-groupcomm?
When the Client is already a group member, the Client can use the interface at the KDC to perform the following actions:
Upon receiving a request from a Client, the KDC MUST check that it is storing a valid access token from that Client for the group identifier assiciated to the endpoint. If that is not the case, i.e. the KDC does not store a valid access token or this is not valid for that Client for the group identifier at hand, the KDC MUST respond to the Client with a 4.01 (Unauthorized) error message.
The KDC is configured with the following resources:
The details for the handlers of each resource are given in the following sections. These endpoints are used to perform the operations introduced in Section 4. Note that the url-path given here are default names: implementations are not required to use these names, and can define their own instead.
No handlers are implemented for this resource.
This resource implements GET and POST handlers.
The POST handler adds the public key of the client to the list of the group members’ public keys and returns the symmetric group keying material for the group identified by “gid”.
The handler expects a request with payload formatted as a CBOR map which MAY contain the following fields, which, if included, MUST have the corresponding values:
The handler verifies that the group identifier of the /ace-group/gid path is a subset of the ‘scope’ stored in the access token associated to this client. If verification fails, the KDC MUST respond with a 4.01 (Unauthorized) error message.
If the request is not formatted correctly (e.g. unknown fields present), the handler MUST respond with 4.00 (Bad Request) error message.
If verification succeeds, the handler adds the public key indicated in “client_cred” to the list of public keys stored for the group identified by “gid”. The handler returns a 2.01 (Created) message containing the symmetric group keying material, the group policies and all the public keys of the current members of the group, if the KDC manages those and the Client requested them. The payload of the response is formatted as a CBOR map which MAY contain the following fields, which, if included, MUST have the corresponding values:
The exact format of the ‘key’ value MUST be defined in applications of this specification (REQ7), as well as accepted values of ‘kty’ by the application (REQ8). Additionally, documents specifying the key format MUST register it in the “ACE Groupcomm Key” registry defined in Section 8.3, including its name, type and application profile to be used with.
+----------+----------------+---------+-------------------------+ | Name | Key Type Value | Profile | Description | +----------+----------------+---------+-------------------------+ | Reserved | 0 | | This value is reserved | +----------+----------------+---------+-------------------------+
Figure 4: Key Type Values
Optionally, the response MAY contain the following parameters, which, if included, MUST have the corresponding values:
+-----------------+-------+----------|--------------------|------------+ | Name | CBOR | CBOR | Description | Reference | | | label | type | | | |-----------------+-------+----------|--------------------|------------| | Sequence Number | TBD1 | tstr/int | Method for a re- | [[this | | Synchronization | | | cipient node to | document]] | | Method | | | synchronize with | | | | | | sequence numbers | | | | | | of a sender node. | | | | | | Its value is taken | | | | | | from the 'Value' | | | | | | column of the | | | | | | Sequence Number | | | | | | Synchronization | | | | | | Method registry | | | | | | | | | Key Update | TBD2 | int | Polling interval | [[this | | Check Interval | | | in seconds, to | document]] | | | | | check for new | | | | | | keying material at | | | | | | the KDC | | +-----------------+-------+----------|--------------------|------------+
Figure 5: ACE Groupcomm Policies
Specific application profiles that build on this document MUST specify how exactly the keying material is used to protect the group communication (REQ10).
CBOR labels for these fields are defined in Section 6.
The GET handler returns the symmetric group keying material for the group identified by “gid”.
The handler expects a GET request.
The handler verifies that the group identifier of the /ace-group/gid path is a subset of the ‘scope’ stored in the access token associated to this client. If verification fails, the KDC MUST respond with a 4.01 (Unauthorized) error message.
If verification succeeds, the handler returns a 2.05 (Content) message containing the symmetric group keying material, the group policies and all the public keys of the current members of the group. The payload of the response is formatted as a CBOR map which MUST contain the parameters ‘kty’,’key’ and ‘num’ specified in Section 4.1.2.1.
The payload MAY also include the parameters ‘profile’, ‘exp’ and ‘mgt_key_material’ parameters specified in Section 4.1.2.1.
This resource implements GET and POST handlers.
The POST handler receives identifiers of group members for the group identified by “gid” and returns the public keys of such group members.
The handler expects a request with payload formatted as a CBOR map. The payload of this request is a CBOR Map that MUST contain the following fields:
The handler verifies that the group identifier of the /ace-group/gid path is a subset of the ‘scope’ stored in the access token associated to this client. If verification fails, the KDC MUST respond with a 4.01 (Unauthorized) error message.
The handler verifies that the ‘get_pub_keys’ parameter is not an empty CBOR Array. If verification fails, the KDC MUST treat the request as malformed and respond with a 4.00 (Bad Request) error message.
If verification succeeds, the handler identifies the public keys of the current group members for which the identifier matches with one of those indicated in the request. Then, the handler returns a 2.05 (Content) message response with payload formatted as a CBOR map containing only the ‘pub_keys’ parameter from Section 4.1.2.1, which encodes the list of public keys of those group members including the respective member identifiers. If the KDC does not store any public key associated with the specified member identifiers, the handler returns a response with payload formatted as a CBOR byte string of zero length. The specific format of public keys as well as of identifiers of group members is specified by the application profile (REQ11, REQ8).
The handler MAY enforce one of the following policies, in order to handle possible identifiers that are included in the ‘get_pub_keys’ parameter of the request but are not associated to any current group member. Such a policy MUST be specified by the application profile (REQ12)
The handler expects a GET request.
The handler verifies that the group identifier of the /ace-group/gid path is a subset of the ‘scope’ stored in the access token associated to this client. If verification fails, the KDC MUST respond with a 4.01 (Unauthorized) error message.
If verification succeeds, the handler returns a 2.05 (Content) message containing the public keys of all the current group members, for the group identified by “gid”. The payload of the response is formatted as a CBOR map containing only the ‘pub_keys’ parameter from Section 4.1.2.1, which encodes the list of public keys of all the group members including the respective member identifiers. If the KDC does not store any public key for the group, the handler returns a response with payload formatted as a CBOR byte string of zero length. The specific format of public keys as well as of identifiers of group members is specified by the application profile (REQ11, REQ8).
This resource implements a GET handler.
The handler expects a GET request.
The handler verifies that the group identifier of the /ace-group/gid path is a subset of the ‘scope’ stored in the access token associated to this client. If verification fails, the KDC MUST respond with a 4.01 (Unauthorized) error message.
If verification succeeds, the handler returns a 2.05 (Content) message containing the list of policies for the group identified by “gid”. The payload of the response is formatted as a CBOR map including only the parameter ‘group_policies’ defined in Section 4.1.2.1 and specifying the current policies in the group. If the KDC does not store any policy, the payload is formatted as a zero-length CBOR byte string.
The specific format and meaning of group policies MUST be specified in the application profile (REQ13).
This resource implements a GET handler.
The handler expects a GET request.
The handler verifies that the group identifier of the /ace-group/gid path is a subset of the ‘scope’ stored in the access token associated to this client. If verification fails, the KDC MUST respond with a 4.01 (Unauthorized) error message.
If verification succeeds, the handler returns a 2.05 (Content) message containing an integer that represents the version number of the symmetric group keying material. This number is incremented on the KDC every time the KDC updates the symmetric group keying material. The payload of the response is formatted as a CBOR integer.
This resource implements GET and POST handlers.
The POST handler removes the node from the group, for the group identified by “gid”.
The handler expects a request with payload formatted as a CBOR map. The payload of this request is a CBOR Map that MAY contain only the ‘scope’ field as specified in Section 4.1.2.1.
The handler verifies that the group identifier of the /ace-group/gid path is a subset of the ‘scope’ stored in the access token associated to this client. If verification fails, the KDC MUST respond with a 4.01 (Unauthorized) error message.
If the request contained a ‘scope’ field, the handler MUST extract the roles for that client. If the value is such that the KDC cannot extract all the necessary information to understand and process it correctly (e.g. unrecognized roles), the KDC MUST respond with a 4.00 (Bad Request) error message.
If verification succeeds, the handler removes the client from the group identified by “gid”, for specific roles if roles were specified in the ‘scope’ field, or for all roles. That includes removing the public key of the client if the KDC keep tracks of that. Then, the handler returns a 2.05 (Content) message with empty payload.
The handler expects a GET request.
The handler verifies that the group identifier of the /ace-group/gid path is a subset of the ‘scope’ stored in the access token associated to this client. If verification fails, the KDC MUST respond with a 4.01 (Unauthorized) error message.
If verification succeeds, the handler returns a 2.05 (Content) message containing newly-generated individual keying material for the Client, or information enabling the Client to derive it. The payload of the response is formatted as a CBOR map. The specific format of newly-generated individual keying material for group members, or of the information to derive it, and corresponding CBOR label, MUST be specified in the application profile (REQ14) and registered in Section 8.2.
Figure 6 gives an overview of the Joining exchange between Client and KDC, when the Client first joins a group.
Client KDC | | |-------- Joining Request: POST /ace-group/gid --------->| | | |<--------- Joining Response: 2.01 (Created) ----------- | | |
Figure 6: Message Flow of First Exchange for Group Joining
If not previously established, the Client and the KDC MUST first establish a pairwise secure communication channel (REQ15). This can be achieved, for instance, by using a transport profile of ACE. The Joining exchange MUST occur over that secure channel. The Client and the KDC MAY use that same secure channel to protect further pairwise communications that must be secured.
The secure communication protocol is REQUIRED to establish the secure channel by using the proof-of-possession key bound to the access token. As a result, the proof-of-possession to bind the access token to the Client is performed by using the proof-of-possession key bound to the access token for establishing secure communication between the Client and the KDC.
To join the group, the Client sends a CoAP POST request to the /ace-group/gid endpoint at the KDC, where gid is the group identifier of the group to join, formatted as specified in Section 4.1.2.1. This group identifier is the same as the ‘scope’ value of the Authorization Request/Response, or it can be retrieved from it.
If the application requires backward security, the KDC MUST generate new group keying material and securely distribute it to all the current group members, upon a new node’s joining the group. To this end, the KDC uses the message format of the Joining Response (see Section 4.1.2.1). Application profiles may define alternative ways of retrieving the keying material, such as sending separate requests to different resources at the KDC (Section 4.1.2.2, Section 4.1.3.2, Section 4.1.4.1). After distributing the new group keying material, the KDC MUST increment the version number of the keying material.
A node stops using the group keying material upon its expiration, according to what indicated by the KDC with the ‘exp’ parameter in a Joining response, or to a pre-configured value. Then, if it wants to continue participating in the group communication, the node has to request new updated keying material from the KDC.
The Client may need to request the latest group keying material also upon receiving messages from other group members without being able to retrieve the material to correctly decrypt them. This may be due to a previous update of the group keying material (rekeying) triggered by the KDC, that the Client was not able to receive or decrypt. To this end, the Client sends a CoAP GET request to the /ace-group/gid endpoint at the KDC, formatted as specified in Section 4.1.2.2.
Note that policies can be set up so that the Client sends a Key Re-Distribution Request to the KDC only after a given number of unsuccessfully decrypted incoming messages. It is application dependent and pertaining to the particular message exchange (e.g. [I-D.ietf-core-oscore-groupcomm]) to set up policies that instruct clients to retain unsuccessfully decrypted messages and for how long, so that they can be decrypted after getting updated keying material, rather than just considered non valid messages to discard right away (OPT4).
The same Key Distribution Request could also be sent by the Client without being triggered by a failed decryption of a message, if the Client wants to be sure that it has the latest group keying material. If that is the case, the Client will receive from the KDC the same group keying material it already has in memory.
Figure 7 gives an overview of the exchange described above.
Client KDC | | |----- Key Distribution Request: GET ace-group/gid ----->| | | |<----- Key Distribution Response: 2.05 (Content) -------| | |
Figure 7: Message Flow of Key Distribution Request-Response
Alternatively, the re-distribution of keying material can be initiated by the KDC, which e.g.:
Note that these methods of KDC-initiated key distribution have different security properties and require different security associations.
Beside possible expiration and depending on what part of the keying material is no longer eligible to be used, the client may need to communicate to the KDC its need for that part to be renewed. For example, if the Client uses an individual key to protect outgoing traffic and has to renew it, the node may request a new one, or new input material to derive it, without renewing the whole group keying material. To this end, the client performs a Key Renewal Request/Response exchange with the KDC, that is a CoAP GET request to the /ace-group/gid/node endpoint at the KDC, where gid is the group identifier, and formatted as defined in Section 4.1.6.2.
Figure 8 gives an overview of the exchange described above.
Client KDC | | |---- Key Renewal Request: GET ace-group/gid/node --->| | | |<----- Key Renewal Response: 2.05 (Content) ---------| | |
Figure 8: Message Flow of Key Renewal Request-Response
Note the difference between the Key Distribution Request and the Key Renewal Request: while the first one only triggers distribution (the renewal might have happened independently, e.g. because of expiration), the second one triggers the KDC to produce new individual keying material for the requesting node.
In case the KDC maintains the public keys of group members, a node in the group can contact the KDC to request public keys of either all group members or a specified subset, by sending a CoAP GET or POST request to the /ace-group/gid/pub-key endpoint at the KDC, where gid is the group identifier, and formatted as defined in Section 4.1.3.2 and Section 4.1.3.1.
Figure 9 and Figure 10 give an overview of the exchanges described above.
Client KDC | | |---- Public Key Request: GET /ace-group/gid/pub-key --->| | | |<--------- Public Key Response: 2.05 (Content) ---------| | |
Figure 9: Message Flow of Public Key Exchange to Request All Members Public Keys
Client KDC | | |--- Public Key Request: POST /ace-group/gid/pub-key --->| | | |<--------- Public Key Response: 2.01 (Created) ---------| | |
Figure 10: Message Flow of Public Key Exchange to Request Specific Members Public Keys
A node in the group can contact the KDC to retrieve the current group policies, by sending a CoAP GET request to the /ace-group/gid/policies endpoint at the KDC, where gid is the group identifier, and formatted as defined in Section 4.1.4.1
Figure 11 gives an overview of the exchange described above.
Client KDC | | |--- Policies Request: GET ace-group/gid/policies ---->| | | |<--------- Policies Response: 2.05 (Content) ---------| | |
Figure 11: Message Flow of Policies Request-Response
A node in the group can contact the KDC to request information about the version number of the symmetric group keying material, by sending a CoAP GET request to the /ace-group/gid/ctx-num endpoint at the KDC, where gid is the group identifier, formatted as defined in Section 4.1.5.1. In particular, the version is incremented by the KDC every time the group keying material is renewed.
Figure 12 gives an overview of the exchange described above.
Client KDC | | |----- Version Request: GET ace-group/gid/ctx-num ----->| | | |<--------- Version Response: 2.05 (Content) -----------| | |
Figure 12: Message Flow of Version Request-Response
A node can actively request to leave the group. In this case, the Client sends a CoAP POST request to the endpoint /ace-group/gid/node at the KDC, where gid is the group identifier, formatted as defined in Section 4.1.6.1
Alternatively, a node may be removed by the KDC, without having explicitly asked for it. This is further discussed in Section 5.
This section describes the different scenarios according to which a node ends up being removed from the group.
If the application requires forward security, the KDC MUST generate new group keying material and securely distribute it to all the current group members but the leaving node, using the message format of the Key Distribution Response (see Section 4.3). Application profiles may define alternative message formats. Once distributed the new group keying material, the KDC MUST increment the version number of the keying material.
Note that, after having left the group, a node may wish to join it again. Then, as long as the node is still authorized to join the group, i.e. it still has a valid access token, it can re-request to join the group directly to the KDC without needing to retrieve a new access token from the AS. This means that the KDC might decide to keep track of nodes with valid access tokens, before deleting all information about the leaving node.
A node may be evicted from the group in the following cases.
Either case, once aware that a node is not authorized anymore, the KDC has to remove the unauthorized node from the list of group members, if the KDC keeps track of that.
This specification defines a number of fields used during the second part of the message exchange, after the ACE Token POST exchange. The table below summarizes them, and specifies the CBOR key to use instead of the full descriptive name.
Name | CBOR Key | CBOR Type | Reference |
---|---|---|---|
scope | TBD | array | Section 4.1.2.1 |
get_pub_keys | TBD | array | Section 4.1.2.1 |
client_cred | TBD | byte string | Section 4.1.2.1 |
cnonce | TBD | byte string | Section 4.1.2.1 |
client_cred_verify | TBD | byte string | Section 4.1.2.1 |
pub_keys_repos | TBD | array | Section 4.1.2.1 |
kty | TBD | int / byte string | Section 4.1.2.1 |
key | TBD | see “ACE Groupcomm Key” Registry | Section 4.1.2.1 |
num | TBD | int | Section 4.1.2.1 |
profile | TBD | int | Section 4.1.2.1 |
exp | TBD | int / float | Section 4.1.2.1 |
pub_keys | TBD | byte string | Section 4.1.2.1 |
group_policies | TBD | map | Section 4.1.2.1 |
mgt_key_material | TBD | byte string | Section 4.1.2.1 |
get_pub_keys | TBD | array | Section 4.1.3.1 |
When a Client receives a message from a sender for the first time, it needs to have a mechanism in place to avoid replay, e.g. Appendix B.2 of [RFC8613].
The KDC must renew the group keying material upon its expiration.
The KDC should renew the keying material upon group membership change, and should provide it to the current group members through the rekeying scheme used in the group.
The KDC may enforce a rekeying policy that takes into account the overall time required to rekey the group, as well as the expected rate of changes in the group membership.
That is, the KDC may not rekey the group at every membership change, for instance if members’ joining and leaving occur frequently and performing a group rekeying takes too long. Instead, the KDC may rekey the group after a minum number of group members have joined or left within a given time interval, or during predictable network inactivity periods.
However, this would result in the KDC not constantly preserving backward and forward security. In fact, newly joining group members could be able to access the keying material used before their joining, and thus could access past group communications. Also, until the KDC performs a group rekeying, the newly leaving nodes would still be able to access upcoming group communications that are protected with the keying material that has not yet been updated.
A group member can receive a message shortly after the group has been rekeyed, and new keying material has been distributed by the KDC. In the following two cases, this may result in misaligned keying material between the group members.
In the first case, the sender protects a message using the old keying material. However, the recipient receives the message after having received the new keying material, hence not being able to correctly process it. A possible way to ameliorate this issue is to preserve the old, recent, keying material for a maximum amount of time defined by the application. By doing so, the recipient can still try to process the received message using the old retained keying material as second attempt. Note that a former (compromised) group member can take advantage of this by sending messages protected with the old retained keying material. Therefore, a conservative application policy should not admit the storage of old keying material.
In the second case, the sender protects a message using the new keying material, but the recipient receives that request before having received the new keying material. Therefore, the recipient would not be able to correctly process the request and hence discards it. If the recipient receives the new keying material shortly after that and the sender endpoint uses CoAP retransmissions, the former will still be able to receive and correctly process the message. In any case, the recipient should actively ask the KDC for an updated keying material according to an application-defined policy, for instance after a given number of unsuccessfully decrypted incoming messages.
A node that has left the group should not expect any of its outgoing messages to be successfully processed, if received after its leaving, due to a possible group rekeying occurred before the message reception.
If the block-wise options [RFC7959] are used, and the keying material is updated in the middle of a block-wise transfer, the sender of the blocks just changes the keying material to the updated one and continues the transfer. As long as both sides get the new keying material, updating the keying material in the middle of a transfer will not cause any issue. Otherwise, the sender will have to transmit the message again, when receiving an error message from the recipient.
Compared to a scenario where the transfer does not use block-wise, depending on how fast the keying material is changed, the nodes might consume a larger amount of the network bandwidth resending the blocks again and again, which might be problematic.
This document has the following actions for IANA.
IANA is asked to register the following entries in the “ACE Authorization Server Request Creation Hints” Registry defined in Section 8.1 of [I-D.ietf-ace-oauth-authz].
This specification establishes the “ACE Groupcomm Parameters” IANA Registry. The Registry has been created to use the “Expert Review Required” registration procedure [RFC8126]. Expert review guidelines are provided in Section 8.7.
The columns of this Registry are:
This Registry has been initially populated by the values in Section 6. The Reference column for all of these entries refers to sections of this document.
This specification establishes the “ACE Groupcomm Key” IANA Registry. The Registry has been created to use the “Expert Review Required” registration procedure [RFC8126]. Expert review guidelines are provided in Section 8.7.
The columns of this Registry are:
This Registry has been initially populated by the values in Figure 4. The specification column for all of these entries will be this document.
This specification establishes the “ACE Groupcomm Profile” IANA Registry. The Registry has been created to use the “Expert Review Required” registration procedure [RFC8126]. Expert review guidelines are provided in Section 8.7. It should be noted that, in addition to the expert review, some portions of the Registry require a specification, potentially a Standards Track RFC, be supplied as well.
The columns of this Registry are:
This specification establishes the “ACE Groupcomm Policy” IANA Registry. The Registry has been created to use the “Expert Review Required” registration procedure [RFC8126]. Expert review guidelines are provided in Section 8.7. It should be noted that, in addition to the expert review, some portions of the Registry require a specification, potentially a Standards Track RFC, be supplied as well.
The columns of this Registry are:
This registry will be initially populated by the values in Figure 5.
This specification establishes the “Sequence Number Synchronization Method” IANA Registry. The Registry has been created to use the “Expert Review Required” registration procedure [RFC8126]. Expert review guidelines are provided in Section 8.7. It should be noted that, in addition to the expert review, some portions of the Registry require a specification, potentially a Standards Track RFC, be supplied as well.
The columns of this Registry are:
The IANA Registries established in this document are defined as expert review. This section gives some general guidelines for what the experts should be looking for, but they are being designated as experts for a reason so they should be given substantial latitude.
Expert reviewers should take into consideration the following points:
TODO: fix req numbers in the text.
This section lists the requirements on application profiles of this specification,for the convenience of application profile designers.
RFC EDITOR: PLEASE REMOVE THIS SECTION.
The following individuals were helpful in shaping this document: Carsten Bormann, Rikard Hoeglund, Ben Kaduk, John Mattsson, Daniel Migault, Jim Schaad, Ludwig Seitz, Goeran Selander and Peter van der Stok.
The work on this document has been partly supported by VINNOVA and the Celtic-Next project CRITISEC; and by the EIT-Digital High Impact Initiative ACTIVE.