diff options
Diffstat (limited to 'doc/rfc/rfc9594.txt')
-rw-r--r-- | doc/rfc/rfc9594.txt | 5492 |
1 files changed, 5492 insertions, 0 deletions
diff --git a/doc/rfc/rfc9594.txt b/doc/rfc/rfc9594.txt new file mode 100644 index 0000000..fdae831 --- /dev/null +++ b/doc/rfc/rfc9594.txt @@ -0,0 +1,5492 @@ + + + + +Internet Engineering Task Force (IETF) F. Palombini +Request for Comments: 9594 Ericsson AB +Category: Standards Track M. Tiloca +ISSN: 2070-1721 RISE AB + September 2024 + + + Key Provisioning for Group Communication Using Authentication and + Authorization for Constrained Environments (ACE) + +Abstract + + This document defines how to use the Authentication and Authorization + for Constrained Environments (ACE) framework to distribute keying + material and configuration parameters for secure group communication. + Candidate group members that act as Clients and are authorized to + join a group can do so by interacting with a Key Distribution Center + (KDC) acting as the Resource Server, from which they obtain the + keying material to communicate with other group members. While + defining general message formats as well as the interface and + operations available at the KDC, this document supports different + approaches and protocols for secure group communication. Therefore, + details are delegated to separate application profiles of this + document as specialized instances that target a particular group + communication approach and define how communications in the group are + protected. Compliance requirements for such application profiles are + also specified. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + https://www.rfc-editor.org/info/rfc9594. + +Copyright Notice + + Copyright (c) 2024 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 Revised BSD License text as described in Section 4.e of the + Trust Legal Provisions and are provided without warranty as described + in the Revised BSD License. + +Table of Contents + + 1. Introduction + 1.1. Terminology + 2. Overview + 3. Authorization to Join a Group + 3.1. Authorization Request + 3.2. Authorization Response + 3.3. Token Transferring + 3.3.1. 'sign_info' Parameter + 3.3.2. 'kdcchallenge' Parameter + 4. KDC Functionalities + 4.1. Interface at the KDC + 4.1.1. Operations Supported by Clients + 4.1.2. Error Handling + 4.2. /ace-group + 4.2.1. FETCH Handler + 4.2.1.1. Retrieve Group Names + 4.3. /ace-group/GROUPNAME + 4.3.1. POST Handler + 4.3.1.1. Join the Group + 4.3.2. GET Handler + 4.3.2.1. Retrieve Group Keying Material + 4.4. /ace-group/GROUPNAME/creds + 4.4.1. FETCH Handler + 4.4.1.1. Retrieve a Subset of Authentication Credentials in + the Group + 4.4.2. GET Handler + 4.4.2.1. Retrieve All Authentication Credentials in the + Group + 4.5. /ace-group/GROUPNAME/kdc-cred + 4.5.1. GET Handler + 4.5.1.1. Retrieve the KDC's Authentication Credential + 4.6. /ace-group/GROUPNAME/policies + 4.6.1. GET Handler + 4.6.1.1. Retrieve the Group Policies + 4.7. /ace-group/GROUPNAME/num + 4.7.1. GET Handler + 4.7.1.1. Retrieve the Keying Material Version + 4.8. /ace-group/GROUPNAME/nodes/NODENAME + 4.8.1. GET Handler + 4.8.1.1. Retrieve Group and Individual Keying Material + 4.8.2. POST Handler + 4.8.2.1. Request to Change Individual Keying Material + 4.8.3. DELETE Handler + 4.8.3.1. Leave the Group + 4.9. /ace-group/GROUPNAME/nodes/NODENAME/cred + 4.9.1. POST Handler + 4.9.1.1. Uploading an Authentication Credential + 5. Removal of a Group Member + 6. Group Rekeying Process + 6.1. Point-to-Point Group Rekeying + 6.2. One-to-Many Group Rekeying + 6.2.1. Protection of Rekeying Messages + 6.3. Misalignment of Group Keying Material + 7. Extended Scope Format + 8. ACE Groupcomm Parameters + 9. ACE Groupcomm Error Identifiers + 10. Security Considerations + 10.1. Secure Communication in the Group + 10.2. Update of Group Keying Material + 10.3. Block-Wise Considerations + 11. IANA Considerations + 11.1. Media Type Registrations + 11.2. CoAP Content-Formats + 11.3. OAuth Parameters + 11.4. OAuth Parameters CBOR Mappings + 11.5. Interface Description (if=) Link Target Attribute Values + 11.6. Custom Problem Detail Keys Registry + 11.7. ACE Groupcomm Parameters + 11.8. ACE Groupcomm Key Types + 11.9. ACE Groupcomm Profiles + 11.10. ACE Groupcomm Policies + 11.11. Sequence Number Synchronization Methods + 11.12. ACE Groupcomm Errors + 11.13. ACE Groupcomm Rekeying Schemes + 11.14. Expert Review Instructions + 12. References + 12.1. Normative References + 12.2. Informative References + Appendix A. Requirements for Application Profiles + A.1. Mandatory-to-Address Requirements + A.2. Optional-to-Address Requirements + Appendix B. Extensibility for Future COSE Algorithms + B.1. Format of 'sign_info_entry' + Acknowledgments + Authors' Addresses + +1. Introduction + + This document builds on the Authentication and Authorization for + Constrained Environments (ACE) framework and defines how to request, + distribute, and renew keying material and configuration parameters to + protect message exchanges in a group communication environment. + + Candidate group members that act as ACE Clients and are authorized to + join a group can interact with the Key Distribution Center (KDC) + acting as the ACE Resource Server that is responsible for that group + in order to obtain the necessary keying material and parameters to + communicate with other group members. + + In particular, this document defines the operations and interface + available at the KDC, as well as general message formats for the + interactions between Clients and the KDC. At the same time, + communications in the group can rely on different approaches, e.g., + based on multicast [GROUP-CoAP] or publish-subscribe (pub-sub) + messaging [CoAP-PUBSUB], and can be protected in different ways. + + Therefore, this document delegates details on the communication and + security approaches used in a group to separate application profiles. + These are specialized instances of this document that target a + particular group communication approach and define how communications + in the group are protected, as well as the specific keying material + and configuration parameters provided to group members. + + In order to ensure consistency and aid the development of such + application profiles, Appendix A of this document defines a number of + related compliance requirements. In particular, Appendix A.1 + compiles the requirements that application profiles are REQUIRED to + fulfill; these are referred to by an identifier that starts with + "REQ". Instead, Appendix A.2 compiles the requirements that + application profiles MAY fulfill; these are referred to by an + identifier that starts with "OPT". + + New keying material is intended to be generated and distributed to + the group upon membership changes (rekeying). If the application + requires backward security (i.e., new group members must be prevented + from accessing communications in the group prior to their joining), + then a rekeying has to occur every time new members join the group. + If the application requires forward security (i.e., former group + members must be prevented from accessing communications in the group + after their leaving), then a rekeying has to occur every time current + members leave or are evicted from the group. + + A group rekeying scheme performs the actual distribution of the new + keying material by rekeying the current group members when a new + Client joins the group and rekeying the remaining group members when + a Client leaves the group. This can rely on different approaches, + including efficient group rekeying schemes such as those described in + [RFC2093], [RFC2094], and [RFC2627]. + + Consistently with what is recommended in the ACE framework, this + document uses Concise Binary Object Representation (CBOR) [RFC8949] + for data encoding. However, using JSON [RFC8259] instead of CBOR is + possible by relying on the conversion method specified in Sections + 6.1 and 6.2 of [RFC8949]. + +1.1. Terminology + + 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 following: + + * The terms and concepts described in the ACE framework [RFC9200] + and in the Authorization Information Format (AIF) [RFC9237] to + express authorization information. The terminology for entities + in the considered architecture is defined in OAuth 2.0 [RFC6749]. + In particular, this includes Client (C), Resource Server (RS), and + Authorization Server (AS). + + * The terms and concepts described in the Constrained Application + Protocol (CoAP) [RFC7252]. The term "endpoint" is used here + following its OAuth definition, aimed at denoting resources such + as /token and /introspect at the AS and /authz-info at the RS. + This document does not use the CoAP definition of "endpoint", + which is "An entity participating in the CoAP protocol". + + * The terms and concepts described in Concise Data Definition + Language (CDDL) [RFC8610], CBOR [RFC8949], and CBOR Object Signing + and Encryption (COSE) [RFC9052] [RFC9053] [RFC9338]. + + A node interested in participating in group communication, as well as + one that is already participating as a group member, is + interchangeably denoted as "Client". + + This document also uses the following terms. + + Group: A set of nodes that share common keying material and security + parameters used to protect their communications with one another. + That is, the term refers to a "security group". + + This term is not to be confused with an "application group", which + has relevance at the application level and whose members share a + common pool of resources or content. Examples of application + groups are the set of all nodes deployed in a same physical room + or the set of nodes registered to a pub-sub topic. + + This term is also not to be confused with a "multicast group", + which has relevance at the network level and whose members all + listen to a group network address for receiving messages sent to + that group. An example of a multicast group is the set of nodes + that are configured to receive messages that are sent to the + group's associated IP multicast address. + + The same security group might be associated with multiple + application groups. Also, the same application group might be + associated with multiple security groups. Further details and + considerations on the mapping between the three types of groups + are out of the scope of this document. + + Key Distribution Center (KDC): The entity responsible for managing + one or multiple groups, with particular reference to the group + membership and the keying material to use for protecting group + communications. + + Furthermore, this document uses "names" or "identifiers" for groups + and nodes. Their different meanings are summarized below. + + Group name: The identifier of a group as a text string encoded as + UTF-8 [RFC3629]. Once established, it is invariant. It is used + in the interactions between the Client, AS, and RS to identify a + group. A group name is always unique among the group names of the + existing groups under the same KDC. + + GROUPNAME: The text string used in URIs to identify a group. Once + established, it is invariant. GROUPNAME uniquely maps to the + group name of a group, although they do not necessarily coincide. + + Group identifier: The identifier of the group keying material used + in a group. Unlike group name and GROUPNAME, this identifier + changes over time when the group keying material is updated. + + Node name: The identifier of a node as a text string encoded as + UTF-8 [RFC3629] and consistent with the semantics of URI path + segments (see Section 3.3 of [RFC3986]). Once established, it is + invariant. It is used in the interactions between the Client and + RS, as well as to identify a member of a group. A node name is + always unique among the node names of the current nodes within a + group. + + NODENAME: The text string used in URIs to identify a member of a + group. Once established, it is invariant. Its value coincides + with the node name of the associated group member. + + This document additionally uses the following terminology: + + Transport profile: A profile of the ACE framework as per + Section 5.8.4.3 of [RFC9200]. A transport profile specifies the + communication protocol and communication security protocol between + an ACE Client and Resource Server, as well as proof-of-possession + methods if it supports proof-of-possession access tokens. + Transport profiles of ACE include, for instance, those described + in [RFC9202], [RFC9203], and [RFC9431]. + + Application profile: A profile that defines how applications enforce + and use supporting security services they require. These services + may include, for instance, provisioning, revocation, and + distribution of keying material. An application profile may + define specific procedures and message formats. + + Authentication credential: The set of information associated with an + entity, including that entity's public key and parameters + associated with the public key. Examples of authentication + credentials are CBOR Web Tokens (CWTs) and CWT Claims Sets (CCSs) + [RFC8392], X.509 certificates [RFC5280], and C509 certificates + [C509-CERT]. + + Individual keying material: Information pertaining exclusively to a + group member, as associated with its group membership and related + to other keying material and parameters used in the group. For + example, this can be an identifier that the secure communication + protocol employs to uniquely identify a node as a group member + (e.g., a cryptographic key identifier uniquely associated with the + group member in question). The specific nature and format of + individual keying material used in a group is defined in the + application profiles of this specification. The individual keying + material of a group member is not related to the secure + association between that group member and the KDC. + + Throughout this document, examples for CBOR data items are expressed + in CBOR extended diagnostic notation as defined in Section 8 of + [RFC8949] and Appendix G of [RFC8610] ("diagnostic notation"), unless + noted otherwise. We often use diagnostic notation comments to + provide a textual representation of the parameters' keys and values. + +2. Overview + + At a high level, the key provisioning process is separated in two + phases: the first one follows the ACE framework between the Client, + AS, and KDC, while the second one is the actual key distribution + between the Client and KDC. After the two phases are completed, the + Client is able to participate in the group communication via a + Dispatcher entity. + + .------------. .------------. + | AS | .----->| KDC | + '------------' | '------------' + ^ | + | | + v | + .------------. | .-----------. + | Client |<-------' .------------. | .---------+-. + | |<------------->| Dispatcher |<----->| | .---------+-. + '------------' '------------' '-+ | Group | + '-+ members | + '-----------' + + Figure 1: Key Distribution Participants + + The following participants (see Figure 1) take part in the + authorization and key distribution. + + * Client (C): A node that wants to join a group and take part in + group communication with other group members. Within the group, + the Client can have different roles. + + * Authorization Server (AS): As per the AS defined in the ACE + framework [RFC9200], it enforces access policies that prescribe + whether a node is allowed to join a given group or not and with + what roles and rights (e.g., write and/or read). + + * Key Distribution Center (KDC): An entity that maintains the keying + material to protect group communications and provides it to + Clients authorized to join a given group. During the first phase + of the process (Section 3), the KDC takes the role of the RS in + the ACE framework. During the second phase of the process + (Section 4), which is not based on the ACE framework, the KDC + distributes the keying material. In addition, the KDC provides + the latest keying material to group members when requested or, if + required by the application, when group membership changes. + + * Group members: Nodes that have joined a group where they take part + in group communication with one another, protecting it with the + group keying material obtained from the KDC. + + * Dispatcher: An entity through which the Clients communicate with + the group when sending a message intended for multiple group + members. That is, the Dispatcher distributes such a one-to-many + message to the group members as intended recipients. The + Dispatcher does not have access to the group keying material. A + single-recipient message intended for only one group member may be + delivered by alternative means, i.e., with no assistance from the + Dispatcher. + + Examples of a Dispatcher are: the Broker in a pub-sub setting; a + relayer for group communication that delivers group messages as + multiple unicast messages to all group members; and an implicit + entity as in a multicast communication setting, where messages are + transmitted to a multicast IP address and delivered on the + transport channel. + + If it consists of an explicit entity, such as a pub-sub Broker or + a message relayer, the Dispatcher is comparable to an untrusted + on-path intermediary; as such, it is able to see the messages sent + by Clients in the group but not able to decrypt them and read + their plain content. + + This document specifies a mechanism for: + + * Authorizing a Client to join the group (Section 3) and providing + it with the group keying material to communicate with the other + group members (Section 4), + + * Allowing a group member to retrieve group keying material + (Sections 4.3.2.1 and 4.8.1.1), + + * Allowing a group member to retrieve authentication credentials of + other group members (Section 4.4.1.1) and to provide an updated + authentication credential (Section 4.9.1.1), + + * Allowing a group member to leave the group (Section 4.8.3.1), + + * Evicting a group member from the group (Section 5), and + + * Renewing and redistributing the group keying material (rekeying), + e.g., upon a membership change in the group (Section 6). + + Rekeying the group may result in a temporary misalignment of the + keying material stored by the different group members. Different + situations where this can happen and how they can be handled are + discussed in Section 6.3. + + Figure 2 provides a high-level overview of the message flow for a + node joining a group. The message flow can be expanded as follows. + + 1. The joining node requests an access token from the AS in order to + access one or more group-membership resources at the KDC and + hence join the associated groups. + + This exchange between the Client and AS MUST be secured, as + specified by the transport profile of ACE used between the Client + and KDC. Based on the response from the AS, the joining node + will establish or continue using a secure communication + association with the KDC. + + 2. The joining node transfers authentication and authorization + information to the KDC by transferring the obtained access token. + This is typically achieved by including the access token in a + request sent to the /authz-info endpoint at the KDC. + + Once this exchange is completed, the joining node MUST have a + secure communication association established with the KDC before + joining a group under that KDC. + + This exchange and the following secure communications between the + Client and the KDC MUST occur in accordance with the transport + profile of ACE used between the Client and KDC, such as the DTLS + transport profile of ACE [RFC9202] or the OSCORE transport + profile of ACE [RFC9203]. + + 3. The joining node starts the joining process to become a member of + the group by sending a request to the related group-membership + resource at the KDC. Based on the application requirements and + policies, the KDC may perform a group rekeying by generating new + group keying material and distributing it to the current group + members through the rekeying scheme used in the group. + + At the end of the joining process, the joining node has received + the parameters and group keying material from the KDC to securely + communicate with the other group members. Also, the KDC has + stored the association between the authorization information from + the access token and the secure communication association with + the joining node. + + 4. The joining node and the KDC maintain the secure communication + association to support possible future communications. These + especially include key management operations, such as the + retrieval of updated keying material or the participation in a + group rekeying process. + + 5. The joining node can communicate securely with the other group + members by using the keying material obtained in step 3. + + C AS KDC Group + | | | Members + / | | | | + | |--- Authorization Request -->| | | + | | | | | + | |<-- Authorization Response --| | | + (*) < | | | | + | | | | | + | |--- Token Transfer Request ---->| | + | | | | + | |<--- Token Transfer Response-----| | + \ | | | | + | | | | + |--------- Join Request --------->| | + | | | | + | | | -- Group rekeying -->| + | | | (optional) | + |<-------- Join Response ---------| | + | | | | + | | | | + | | | Dispatcher | + | | | + |<======= Secure group communication =========|=========>| + | | | + + (*) Defined in the ACE framework + + Figure 2: Message Flow upon a New Node's Joining + +3. Authorization to Join a Group + + This section describes in detail the format of messages exchanged by + the participants when a node requests access to a given group. This + exchange is based on ACE [RFC9200]. + + As defined in [RFC9200], the Client asks the AS for the 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 + according to what is defined by the used transport profile of ACE. + The Content-Format used in the message also depends on the used + transport profile of ACE. For example, it can be "application/ + ace+cbor" for the first two messages and "application/cwt" for the + third message, which are defined in the ACE framework. + + 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 [RFC9200]). + + Figure 3 gives an overview of the exchange described above. + + Client AS KDC + | | | + |---- Authorization Request: POST /token ------->| | + | | | + |<--- Authorization Response: 2.01 (Created) ----| | + | | | + |---- Token Transfer Request: POST /authz-info ------->| + | | | + |<--- Token Transfer Response: 2.01 (Created) -------->| + | | | + + Figure 3: Message Flow of Join Authorization + +3.1. Authorization Request + + The Authorization Request sent from the Client to the AS is defined + in Section 5.8.1 of [RFC9200] and MAY contain the following + parameters, which, if included, MUST have the format and value as + specified below. + + * 'scope': specifying the names of the groups that the Client + requests to access and optionally the roles that the Client + requests to have in those groups. + + This parameter is encoded as a CBOR byte string, which wraps a + CBOR array of scope entries. All the scope entries are specified + according to the same format, i.e., either the Authorization + Information Format (AIF) or the textual format defined below. + + - If AIF is used, each scope entry is encoded as per [RFC9237], + i.e., as a CBOR array [Toid, Tperm]. If a scope entry + expresses a set of roles to take in a group as per this + document, the object identifier "Toid" specifies the group name + and MUST be encoded as a CBOR text string, while the permission + set "Tperm" specifies the roles that the Client wishes to take + in the group. + + AIF is the default format for application profiles of this + specification and is preferable for those that aim for a + compact encoding of scope. This is especially desirable for + application profiles defining several roles, with the Client + possibly asking for multiple roles combined. + + Figure 4 shows an example in CDDL notation [RFC8610] where + scope uses AIF. + + - If the textual format is used, each scope entry is a CBOR array + formatted as follows. + + o As the first element, the group name, encoded as a CBOR text + string. + + o Optionally, as the second element, the role or CBOR array of + roles that the Client wishes to take in the group. This + element is optional since roles may have been pre-assigned + to the Client, as associated with its verifiable identity + credentials. Alternatively, the application may have + defined a single, well-known role for the target resource(s) + and audience(s). + + Figure 5 shows an example in CDDL notation where scope uses the + textual format with the group name and role identifiers encoded + as CBOR text strings. + + It is REQUIRED for application profiles of this specification to + specify the exact format and encoding of scope (REQ1). This + includes defining the set of possible roles and their identifiers, + as well as the corresponding encoding to use in the scope entries + according to the used scope format. + + If the application profile uses AIF, it is also REQUIRED to + register its specific instance of "Toid" and "Tperm", as well as + the corresponding media type and Content-Format, as per the + guidelines in [RFC9237] (REQ2). + + If the application profile uses the textual format, it MAY + additionally specify CBOR values to use for abbreviating the role + identifiers (OPT1). + + * 'audience': with an identifier of the KDC. + + As defined in [RFC9200], other additional parameters can be included + if necessary. + + ;# include rfc9237 + + gname = tstr + + permissions = uint .bits roles + + roles = &( + Requester: 1, + Responder: 2, + Monitor: 3, + Verifier: 4 + ) + + scope_entries = AIF-Generic<gname, permissions> + + scope = bstr .cbor scope_entries + + Figure 4: Example of scope Using AIF + + gname = tstr + + role = tstr + + scope_entry = [gname, ? ( role / [2* role] )] + + scope_entries = [* scope_entry] + + scope = bstr .cbor scope_entries + + Figure 5: Example of scope Using the Textual Format, with the + Role Identifiers Encoded as Text Strings + +3.2. Authorization Response + + The AS processes the Authorization Request as defined in + Section 5.8.2 of [RFC9200], especially verifying that the Client is + authorized to access the specified groups with the requested roles or + possibly a subset of those. + + In case of successful verification, the Authorization Response sent + from the AS to the Client is also defined in Section 5.8.2 of + [RFC9200]. Note that the 'expires_in' parameter MAY be omitted if + the application defines how the expiration time is communicated to + the Client via other means or if it establishes a default value. + + Additionally, when included, the following parameter MUST have the + corresponding values: + + * 'scope' has the same format and encoding of 'scope' in the + Authorization Request, as defined in Section 3.1. If this + parameter is not present, the granted scope is equal to the one + requested in Section 3.1. + + The proof-of-possession access token in the 'access_token' parameter + MUST contain the following: + + * a confirmation claim (for example, see 'cnf' defined in + Section 3.1 of [RFC8747] for CWTs) + + * an expiration time claim (for example, see 'exp' defined in + Section 3.1.4 of [RFC8392] for CWTs) + + * a scope claim (for example, see 'scope' registered in Section 8.14 + of [RFC9200] for CWTs) + + If the 'scope' parameter is present in the Authorization Response, + this claim specifies the same access control information as in the + 'scope' parameter. Instead, if the 'scope' parameter is not + present in the Authorization Response, this claim specifies the + same access control information as in the 'scope' parameter of the + Authorization Request, if the parameter is present therein, or the + default scope that the AS is granting the Client otherwise. + + By default, this claim has the same encoding as the 'scope' + parameter in the Authorization Request, as defined in Section 3.1. + + Optionally, an alternative extended format of scope defined in + Section 7 can be used. This format explicitly signals the + semantics used to express the actual access control information, + which has to be parsed. This enables a Resource Server to + correctly process a received access token, also in case: + + - The Resource Server implements a KDC that supports multiple + application profiles of this specification using different + scope semantics and/or + + - The Resource Server implements further services beyond a KDC + for group communication using different scope semantics. + + If the Authorization Server is aware that this applies to the + Resource Server for which the access token is issued, the + Authorization Server SHOULD use the extended format of scope + defined in Section 7. + + The access token MAY additionally contain other claims that the + transport profile of ACE or other optional parameters require. + + When receiving an Authorization Request from a Client that was + previously authorized and for which the AS still stores a valid non- + expired access token, the AS MAY reply with that token. Note that it + is up to application profiles of ACE to make sure that reposting the + same access token does not cause reuse of keying material between + nodes (for example, that is accomplished with the use of random + nonces in [RFC9203]). + +3.3. Token Transferring + + The Client sends a Token Transfer Request to the KDC, i.e., a CoAP + POST request including the access token and targeting the /authz-info + endpoint (see Section 5.10.1 of [RFC9200]). + + Note that this request deviates from the one defined in [RFC9200], + since it allows asking the KDC for additional information concerning + the authentication credentials used in the group to ensure source + authentication, as well as for possible additional group parameters. + + The joining node MAY ask for this information from the KDC through + the same Token Transfer Request. In this case, the message MUST have + Content-Format "application/ace+cbor" registered in Section 8.16 of + [RFC9200], and the message payload MUST be formatted as a CBOR map, + which MUST include the access token. The CBOR map MAY additionally + include the following parameter, which, if included, MUST have the + format and value as specified below. + + * 'sign_info': defined in Section 3.3.1, specifying the CBOR simple + value null (0xf6) to request information about the signature + algorithm, the signature algorithm parameters, the signature key + parameters, and the exact format of authentication credentials + used in the groups that the Client has been authorized to join. + + Alternatively, such information may be pre-configured on the joining + node or may be retrieved by alternative means. For example, the + joining node may have performed an early group discovery process and + obtained the link to the associated group-membership resource at the + KDC, along with attributes that describe the group configuration + (e.g., see [OSCORE-DISCOVERY]). + + After successful verification, the Client is authorized to receive + the group keying material from the KDC and join the group. Hence, + the KDC replies to the Client with a Token Transfer Response, i.e., a + CoAP 2.01 (Created) response. + + The Token Transfer Response MUST have Content-Format "application/ + ace+cbor", and its payload is a CBOR map. Note that this deviates + from what is defined in the ACE framework, where the response from + the /authz-info endpoint is defined as conveying no payload (see + Section 5.10.1 of [RFC9200]). + + If a scope entry in the access token specifies a role that requires + the Client to send its own authentication credential to the KDC when + joining the related group, then the CBOR map MUST include the + 'kdcchallenge' parameter defined in Section 3.3.2, specifying a + dedicated challenge N_S generated by the KDC. + + Later, when joining the group (see Section 4.3.1.1), the Client uses + the 'kdcchallenge' value and additional information to build a proof- + of-possession (PoP) input. In turn, this is used to compute the PoP + evidence that the Client also provides to the KDC, in order to prove + possession of its own private key (see the 'client_cred_verify' + parameter in Section 4.3.1). + + While storing the access token, the KDC MUST store the 'kdcchallenge' + value associated with the Client at least until it receives a Join + Request from the Client (see Section 4.3.1.1) to be able to verify + the PoP evidence provided during the join process and thus that the + Client possesses its own private key. The KDC deletes the + 'kdcchallenge' value associated with the Client upon deleting the + access token (e.g., upon its expiration, see Section 5.10.3 of + [RFC9200]). + + The same 'kdcchallenge' value MAY be reused several times by the + Client to generate new PoP evidence, e.g., in case the Client + provides the KDC with a new authentication credential while being a + group member (see Section 4.9.1.1) or joins a different group where + it intends to use a different authentication credential. Therefore, + it is RECOMMENDED that the KDC keeps storing the 'kdcchallenge' value + after the first join is processed as well. If, upon receiving a Join + Request from a Client, the KDC has already discarded the + 'kdcchallenge' value, that will trigger an error response with a + newly generated 'kdcchallenge' value that the Client can use to + restart the join process, as specified in Section 4.3.1.1. + + If 'sign_info' is included in the Token Transfer Request, the KDC + SHOULD include the 'sign_info' parameter in the Token Transfer + Response, as per the format defined in Section 3.3.1. Note that the + field 'id' of each 'sign_info_entry' specifies the name or array of + group names to which that 'sign_info_entry' applies. As an + exception, the KDC MAY omit the 'sign_info' parameter in the Token + Transfer Response even if 'sign_info' is included in the Token + Transfer Request in case none of the groups that the Client is + authorized to join use signatures to achieve source authentication. + + Note that the CBOR map specified as payload of the 2.01 (Created) + response may include further parameters, e.g., according to the used + transport profile of ACE. Application profiles of this specification + MAY define additional parameters to use within this exchange (OPT2). + + Application profiles of this specification MAY define alternative + specific negotiations of parameter values for the signature algorithm + and signature keys if 'sign_info' is not used (OPT3). + + If allowed by the used transport profile of ACE, the Client may + provide the access token to the KDC by other means than the Token + Transfer Request. An example is the DTLS transport profile of ACE, + where the Client can provide the access token to the KDC during the + secure session establishment (see Section 3.3.2 of [RFC9202]). + +3.3.1. 'sign_info' Parameter + + The 'sign_info' parameter is an OPTIONAL parameter of the request and + response messages exchanged between the Client and the /authz-info + endpoint at the RS (see Section 5.10.1 of [RFC9200]). + + This parameter allows the Client and the RS to exchange information + about a signature algorithm and about authentication credentials to + accordingly use for signature verification. Its exact semantics and + content are application specific. + + In this specification and in application profiles building on it, + this parameter is used to exchange information about the signature + algorithm and about authentication credentials to be used with it in + the groups indicated by the transferred access token as per its + 'scope' claim (see Section 3.2). + + When used in the Token Transfer Request sent to the KDC (see + Section 3.3), the 'sign_info' parameter specifies the CBOR simple + value null (0xf6). This is done to ask for information about the + signature algorithm and about the authentication credentials used in + the groups that, as per the granted roles, the Client has been + authorized to join or interact with (e.g., as an external signature + verifier). + + When used in the following Token Transfer Response from the KDC (see + Section 3.3), the 'sign_info' parameter is a CBOR array of one or + more elements. The number of elements is at most the number of + groups that the Client has been authorized to join or interact with. + Each element contains information about signing parameters and about + authentication credentials for one or more groups and is formatted as + follows. + + * The first element 'id' is a group name or a CBOR array of group + names, which is associated with groups for which the next four + elements apply. Each specified group name is a CBOR text string + and is hereafter referred to as 'gname'. + + * The second element 'sign_alg' is a CBOR integer or a text string + that indicates the signature algorithm used in the groups + identified by the 'gname' values. It is REQUIRED for application + profiles to define specific values that this parameter can take + (REQ3), which are selected from the set of signing algorithms of + the "COSE Algorithms" registry [COSE.Algorithms]. + + * The third element 'sign_parameters' is a CBOR array that indicates + the parameters of the signature algorithm used in the groups + identified by the 'gname' values. Its content depends on the + value of 'sign_alg'. It is REQUIRED for application profiles to + define the possible values and structure for the elements of this + parameter (REQ4). + + * The fourth element 'sign_key_parameters' is a CBOR array that + indicates the parameters of the key used with the signature + algorithm in the groups identified by the 'gname' values. Its + content depends on the value of 'sign_alg'. It is REQUIRED for + application profiles to define the possible values and structure + for the elements of this parameter (REQ5). + + * The fifth element 'cred_fmt' either is a CBOR integer indicating + the format of authentication credentials used in the groups + identified by the 'gname' values or is the CBOR simple value null + (0xf6), which indicates that the KDC does not act as a repository + of authentication credentials for group members. Its acceptable + integer values are taken from the "Label" column of the "COSE + Header Parameters" registry [COSE.Header.Parameters], with some of + those values also indicating the type of container to use for + exchanging the authentication credentials with the KDC (e.g., a + chain or bag of certificates). It is REQUIRED for application + profiles to define specific values to use for this parameter, + consistently with the acceptable formats of authentication + credentials (REQ6). + + The CDDL notation [RFC8610] of the 'sign_info' parameter is given + below. + + sign_info = sign_info_req / sign_info_resp + + sign_info_req = null ; in the Token Transfer + ; Request to the KDC + + sign_info_resp = [+ sign_info_entry] ; in the Token Transfer + ; Response from the KDC + + sign_info_entry = + [ + id: gname / [+ gname], + sign_alg: int / tstr, + sign_parameters: [any], + sign_key_parameters: [+ parameter: any], + cred_fmt: int / null + ] + + gname = tstr + + This format is consistent with every signature algorithm currently + defined in [RFC9053], i.e., with algorithms that have only the COSE + key type as their COSE capability. Appendix B describes how the + format of each 'sign_info_entry' can be generalized for possible + future registered algorithms having a different set of COSE + capabilities. + +3.3.2. 'kdcchallenge' Parameter + + The 'kdcchallenge' parameter is an OPTIONAL parameter of the response + message returned from the /authz-info endpoint at the RS, as defined + in Section 5.10.1 of [RFC9200]. This parameter contains a challenge + generated by the RS and provided to the Client. + + In this specification and in application profiles building on it, the + Client can use this challenge to prove possession of its own private + key in the Join Request (see the 'client_cred_verify' parameter in + Section 4.3.1). + +4. KDC Functionalities + + This section describes the functionalities provided by the KDC, as + related to the provisioning of the keying material as well as to the + group membership management. + + In particular, this section defines the interface available at the + KDC, specifies the handlers of each resource provided by the KDC + interface, and describes how Clients interact with those resources to + join a group and to perform additional operations as group members. + + A key operation that the Client can perform after transferring the + access token to the KDC is a Join Request-Response exchange with the + KDC. In the Join Request, the Client specifies the group it requests + to join (see Section 4.3.1.1). The KDC will then check the stored + access token associated with the Client and verify that the Client is + accordingly authorized to join the specified group. In case of + successful verification, the KDC provides the Client with the keying + material to securely communicate with the other members of the group. + + Later on as a group member, the Client can also rely on the interface + at the KDC to perform additional operations consistent with the roles + it has in the group. + +4.1. Interface at the KDC + + The KDC provides its interface by hosting the following resources. + Note that the root url-path "ace-group" used hereafter is a default + name; implementations are not required to use this name and can + define their own instead. + + If request messages sent to the KDC as well as success response + messages from the KDC include a payload and specify a Content-Format, + those messages MUST have Content-Format "application/ace- + groupcomm+cbor", which is registered in Section 11.2. CBOR map keys + used for the message parameters are defined in Section 8. + + * /ace-group : the path of this root resource is invariant once the + resource is established. Its employment indicates that this + specification is used. If other applications run on a KDC + implementing this specification and use this same path, those + applications will collide, and a mechanism will be needed to + differentiate the endpoints. + + A Client can access this resource in order to retrieve a set of + group names, each corresponding to one of the specified group + identifiers. This operation is described in Section 4.2.1.1. + + Clients may be authorized to access this resource even without + being members of any group managed by the KDC and even if they are + not authorized to become group members (e.g., when authorized to + be external signature verifiers). + + The Interface Description (if=) Link Target Attribute value + "ace.groups" is registered in Section 11.5 and can be used to + describe the interface provided by this root resource. + + The example below shows an exchange with a KDC with address + 2001:db8::ab that hosts the resource /ace-group and returns a link + to such a resource in link-format [RFC6690]. + + Request: + + Header: GET (Code=0.01) + Uri-Host: "kdc.example.com" + Uri-Path: ".well-known" + Uri-Path: "core" + Uri-Query: "if=ace.groups" + + Response: + + Header: Content (Code=2.05) + Content-Format: 40 (application/link-format) + Payload: + <coap://[2001:db8::ab]/ace-group>;if="ace.groups" + + * /ace-group/GROUPNAME : one such sub-resource to /ace-group is + hosted for each group with the name GROUPNAME that the KDC + manages. In particular, it is the group-membership resource + associated with that group, and it contains the symmetric group + keying material of that group. + + A Client can access this resource in order to join the group with + name GROUPNAME or later as a group member to retrieve the current + group keying material. These operations are described in Sections + 4.3.1.1 and 4.3.2.1, respectively. + + The Interface Description (if=) Link Target Attribute value + "ace.group" is registered in Section 11.5 and can be used to + describe the interface provided by a group-membership resource. + + The example below shows an exchange with a KDC with address + 2001:db8::ab that hosts the group-membership resource /ace-group/ + gp1 and returns a link to such a resource in link-format + [RFC6690]. + + Request: + + Header: GET (Code=0.01) + Uri-Host: "kdc.example.com" + Uri-Path: ".well-known" + Uri-Path: "core" + Uri-Query: "if=ace.group" + + Response: + + Header: Content (Code=2.05) + Content-Format: 40 (application/link-format) + Payload: + <coap://[2001:db8::ab]/ace-group/gp1>;if="ace.group" + + If it is not required that the value of the GROUPNAME URI path and + the group name in the access token scope ('gname' in Section 3.1) + coincide, the KDC MUST implement a mechanism to map the GROUPNAME + value in the URI to the group name in order to refer to the + correct group (REQ7). + + * /ace-group/GROUPNAME/creds : the path of this resource is + invariant once the resource is established. This resource + contains the authentication credentials of all the members of the + group with the name GROUPNAME. + + This resource is created only in case the KDC acts as a repository + of authentication credentials for group members. + + As a group member, a Client can access this resource in order to + retrieve the authentication credentials of other group members. + That is, the Client can retrieve the authentication credentials of + all the current group members or a subset of them by specifying + filter criteria. These operations are described in Sections + 4.4.2.1 and 4.4.1.1, respectively. + + Clients may be authorized to access this resource even without + being group members, e.g., if authorized to be external signature + verifiers for the group. + + * /ace-group/GROUPNAME/kdc-cred : the path of this resource is + invariant once the resource is established. This resource + contains the authentication credential of the KDC for the group + with the name GROUPNAME. + + This resource is created only in case the KDC has an associated + authentication credential and this is required for the correct + group operation. It is REQUIRED for application profiles to + define whether the KDC has such an associated authentication + credential (REQ8). + + As a group member, a Client can access this resource in order to + retrieve the current authentication credential of the KDC. This + operation is described in Section 4.5.1.1. + + Clients may be authorized to access this resource even without + being group members, e.g., if authorized to be external signature + verifiers for the group. + + * /ace-group/GROUPNAME/policies : the path of this resource is + invariant once the resource is established. This resource + contains the group policies of the group with the name GROUPNAME. + + A Client can access this resource as a group member in order to + retrieve the group policies. This operation is described in + Section 4.6.1.1. + + * /ace-group/GROUPNAME/num : the path of this resource is invariant + once the resource is established. This resource contains the + current version number for the symmetric group keying material of + the group with the name GROUPNAME. + + A Client can access this resource as a group member in order to + retrieve the version number of the keying material currently used + in the group. This operation is described in Section 4.7.1.1. + + * /ace-group/GROUPNAME/nodes/NODENAME : one such sub-resource of + /ace-group/GROUPNAME is hosted for each group member of the group + with the name GROUPNAME. Each such resource is identified by the + node name NODENAME of the associated group member and contains the + group keying material and the individual keying material for that + group member. + + A Client as a group member can access this resource in order to + retrieve the current group keying material together with its + individual keying material, request new individual keying material + to use in the group, and leave the group. These operations are + described in Sections 4.8.1.1, 4.8.2.1, and 4.8.3.1, respectively. + + * /ace-group/GROUPNAME/nodes/NODENAME/cred : the path of this + resource is invariant once the resource is established. This + resource contains the individual authentication credential for the + node with the name NODENAME as a group member of the group with + the name GROUPNAME. + + A Client can access this resource in order to upload at the KDC a + new authentication credential to use in the group. This operation + is described in Section 4.9.1.1. + + This resource is not created if the group member does not have an + authentication credential to use in the group or if the KDC does + not store the authentication credentials of group members. + + The KDC is expected to fully provide the interface defined above. It + is otherwise REQUIRED for the application profiles of this + specification to indicate which resources are not hosted, i.e., which + parts of the interface defined in this section are not supported by + the KDC (REQ9). Application profiles of this specification MAY + extend the KDC interface by defining additional handlers, as well as + defining additional resources and their handlers. + + It is REQUIRED for application profiles of this specification to + register a Resource Type for the group-membership resources (REQ10). + This Resource Type can be used to discover the correct URL for + sending a Join Request to the KDC. This Resource Type can also be + used to indicate which specific application profile of this + specification is used by a specific group-membership resource at the + KDC. + + It is REQUIRED for application profiles of this specification to + define what specific actions (e.g., CoAP methods) are allowed on each + resource provided by the KDC interface, depending on whether the + Client is a current group member, the roles that a Client is + authorized to take as per the obtained access token (see + Section 3.1), and the roles that the Client has as current group + member (REQ11). + +4.1.1. Operations Supported by Clients + + It is expected that a Client minimally supports the following set of + primary operations and corresponding interactions with the KDC. + + * FETCH request to /ace-group/ in order to retrieve group names + associated with group identifiers. + + * POST and GET requests to /ace-group/GROUPNAME/ in order to join a + group (POST) and later retrieve the current group keying material + as a group member (GET). + + * GET and FETCH requests to /ace-group/GROUPNAME/creds in order to + retrieve the authentication credentials of all the other group + members (GET) or only some of them by filtering (FETCH). While + retrieving authentication credentials remains possible by using + GET requests, retrieval by filtering allows Clients to greatly + limit the size of exchanged messages. + + * GET request to /ace-group/GROUPNAME/num in order to retrieve the + current version of the group keying material as a group member. + + * DELETE request to /ace-group/GROUPNAME/nodes/NODENAME in order to + leave the group. + + In addition, some Clients may rather not support the following set of + secondary operations and corresponding interactions with the KDC. + This can be specified, for instance, in compliance documents defining + minimalistic Clients and their capabilities in specific deployments. + In turn, these might also have to consider the used application + profile of this specification. + + * GET request to /ace-group/GROUPNAME/kdc-cred in order to retrieve + the current authentication credential of the KDC. This is + relevant only if the KDC has an associated authentication + credential and this is required for the correct group operation. + + * GET request to /ace-group/GROUPNAME/policies in order to retrieve + the current group policies as a group member. + + * GET request to /ace-group/GROUPNAME/nodes/NODENAME in order to + retrieve the current group keying material and individual keying + material. The former can also be retrieved through a GET request + to /ace-group/GROUPNAME/ (see above). + + * POST request to /ace-group/GROUPNAME/nodes/NODENAME in order to + ask for new individual keying material. Alternatively, the Client + could obtain new individual keying material by rejoining the group + through a POST request to /ace-group/GROUPNAME/ (see above). + Furthermore, depending on its roles in the group or on the + application profile of this specification, the Client might simply + not be associated with any individual keying material. + + * POST request to /ace-group/GROUPNAME/nodes/NODENAME/cred in order + to provide the KDC with a new authentication credential. + Alternatively, the Client could provide a new authentication + credential by rejoining the group through a POST request to /ace- + group/GROUPNAME/ (see above). Furthermore, depending on its roles + in the group, the Client might simply not have an associated + authentication credential to provide. + + It is REQUIRED for application profiles of this specification to + categorize possible newly defined operations for Clients into primary + and secondary operations and to provide accompanying considerations + (REQ12). + +4.1.2. Error Handling + + Upon receiving a request from a Client, the KDC MUST check that it is + storing a valid access token from that Client. If this is not the + case, the KDC MUST reply with a 4.01 (Unauthorized) error response. + + Unless the request targets the /ace-group resource, the KDC MUST + check that it is storing a valid access token for that Client such + that: + + * the scope specified in the access token includes a scope entry + related to the group name GROUPNAME associated with the targeted + resource and + + * the set of roles specified in that scope entry allows the Client + to perform the requested operation on the targeted resource + (REQ11). + + In case the KDC stores a valid access token but the verifications + above fail, the KDC MUST reply with a 4.03 (Forbidden) error + response. This response MAY be an AS Request Creation Hints, as + defined in Section 5.3 of [RFC9200], in which case the Content-Format + MUST be "application/ace+cbor". + + If the request is not formatted correctly (e.g., required fields are + not present or are not encoded as expected), the KDC MUST reply with + a 4.00 (Bad Request) error response. + + If the request includes unknown or unexpected fields, the KDC MUST + silently ignore them and continue processing the request. + Application profiles of this specification MAY define optional or + mandatory payload formats for specific error cases (OPT4). + + Some error responses from the KDC can convey error-specific + information according to the problem-details format defined in + [RFC9290]. Such error responses MUST have Content-Format + "application/concise-problem-details+cbor". The payload of these + error responses MUST be a CBOR map specifying a Concise Problem + Details data item (see Section 2 of [RFC9290]). The CBOR map is + formatted as follows. + + * It MUST include the Custom Problem Detail entry 'ace-groupcomm- + error', which is registered in Section 11.6 of this document. + + This entry is formatted as a CBOR map including only one field, + namely 'error-id'. The map key for 'error-id' is the CBOR + unsigned integer with value 0. The value of 'error-id' is a CBOR + integer specifying the error that occurred at the KDC. This value + is taken from the "Value" column of the "ACE Groupcomm Errors" + registry defined in Section 11.12 of this document. + + The CDDL notation [RFC8610] of the 'ace-groupcomm-error' entry is + given below. + + ace-groupcomm-error = { + &(error-id: 0) => int + } + + * It MAY include further Standard Problem Detail entries or Custom + Problem Detail entries (see [RFC9290]). + + In particular, it can include the Standard Problem Detail entry + 'detail' (map key -2), whose value is a CBOR text string that + specifies a human-readable, diagnostic description of the error + occurred at the KDC. The diagnostic text is intended for software + engineers as well as for device and network operators in order to + aid debugging and provide context for possible intervention. The + diagnostic message SHOULD be logged by the KDC. The 'detail' + entry is unlikely relevant in an unattended setup where human + intervention is not expected. + + An example of an error response using the problem-details format is + shown in Figure 6. + +Response: + +Header: Service Unavailable (Code=5.03) +Content-Format: 257 (application/concise-problem-details+cbor) +Payload: +{ + / title / -1: "No available individual keying material", + / detail / -2: "Things will change after a + group rekeying; try later", + / ace-groupcomm-error / 0: { + / error-id / 0: 4 / "No available individual keying material" / + } +} + + Figure 6: Example of an Error Response with Problem Details + + The problem-details format (in general) and the Custom Problem Detail + entry 'ace-groupcomm-error' (in particular) are OPTIONAL for Clients + to support. A Client supporting the entry 'ace-groupcomm-error' and + that can understand the specified error may use that information to + determine what actions to take next. + + Section 9 of this specification defines an initial set of error + identifiers as possible values for the 'error-id' field. Application + profiles of this specification inherit this initial set of error + identifiers and MAY define additional values (OPT5). + +4.2. /ace-group + + This resource implements the FETCH handler. + +4.2.1. FETCH Handler + + The FETCH handler receives group identifiers and returns the + corresponding group names and GROUPNAME URIs. + + The handler expects a request with the payload formatted as a CBOR + map, which MUST contain the following fields: + + * 'gid': its value is encoded as a CBOR array, containing one or + more group identifiers. The exact encoding of the group + identifier MUST be specified by the application profile (REQ13). + The Client indicates that it wishes to receive the group names of + all the groups having these identifiers. + + The handler identifies the groups where communications are secured by + using the keying material identified by those group identifiers. + + If all verifications succeed, the handler replies with a 2.05 + (Content) response, whose payload is formatted as a CBOR map that + MUST contain the following fields: + + * 'gid': its value is encoded as a CBOR array, containing zero or + more group identifiers. The handler indicates that those are the + identifiers it is sending group names for. This CBOR array is a + subset of the 'gid' array in the FETCH request. + + * 'gname': its value is encoded as a CBOR array, containing zero or + more group names. The elements of this array are encoded as text + strings. Each element of index i in this CBOR array is associated + with the element of index i in the 'gid' array. + + * 'guri': its value is encoded as a CBOR array, containing zero or + more URIs, each indicating a group-membership resource. The + elements of this array are encoded as text strings. Each element + of index i in this CBOR array is associated with the element of + index i in the 'gid' array. + + If the KDC does not find any group associated with the specified + group identifiers, the handler returns a response with the payload + formatted as a CBOR byte string of zero length (0x40). + + Note that the KDC only verifies that the node is authorized by the AS + to access this resource. Nodes that are not members of the group but + are authorized to do signature verification on the group messages may + be allowed to access this resource if the application needs it. + +4.2.1.1. Retrieve Group Names + + In case the joining node only knows the group identifier of the group + it wishes to join or about which it wishes to get updated information + from the KDC, the node can contact the KDC to request the + corresponding group name and group-membership resource URI. In + particular, it does so by sending a CoAP FETCH request to the /ace- + group endpoint at the KDC formatted as defined in Section 4.2.1. The + node can specify several group identifiers at once. + + Figure 7 gives an overview of the exchanges described above, and + Figure 8 shows an example. + + Client KDC + | | + |------------ Group Name and URI Retrieval Request: -------->| + | FETCH /ace-group | + | | + |<-- Group Name and URI Retrieval Response: 2.05 (Content) --| + | | + + Figure 7: Message Flow of Group Name and URI Retrieval Request- + Response + + Request: + + Header: FETCH (Code=0.05) + Uri-Host: "kdc.example.com" + Uri-Path: "ace-group" + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload (in CBOR diagnostic notation): + { + / gid / 0: [1, 2] + } + + + Response: + + Header: Content (Code=2.05) + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload (in CBOR diagnostic notation): + { + / gid / 0: [1, 2], + / gname / 1: ["group1", "group2"], + / guri / 2: ["/ace-group/g1", "/ace-group/g2"] + } + + Figure 8: Example of Group Name and URI Retrieval Request-Response + +4.3. /ace-group/GROUPNAME + + This resource implements the POST and GET handlers. + +4.3.1. POST Handler + + The POST handler processes the Join Request sent by a Client to join + a group and returns a Join Response as a successful result of the + joining process (see Section 4.3.1.1). At a high level, the POST + handler adds the Client to the list of current group members, adds + the authentication credential of the Client to the list of the group + members' authentication credentials, and returns the symmetric group + keying material for the group identified by GROUPNAME. + + The handler expects a request with payload formatted as a CBOR map, + which MAY contain the following fields, which, if included, MUST have + the format and value as specified below. + + * 'scope': its value specifies the name of the group that the Client + is attempting to join and the roles that the client wishes to have + in the group. This value is encoded as a CBOR byte string + wrapping one scope entry, as defined in Section 3.1. + + * 'get_creds': it is included if the Client wishes to receive the + authentication credentials of the current group members from the + KDC. This parameter may be included in the Join Request if the + KDC stores the authentication credentials of the group members, + while it is not useful to include it if the Client obtains those + authentication credentials through alternative means, e.g., from + the AS. Note that including this parameter might result in a + following Join Response of a large size, which can be inconvenient + for resource-constrained devices. + + If the Client wishes to retrieve the authentication credentials of + all the current group members, the 'get_creds' parameter MUST + encode the CBOR simple value null (0xf6). Otherwise, if the + Client wishes to retrieve the authentication credentials of nodes + with specific roles, the 'get_creds' parameter MUST encode a non- + empty CBOR array containing the three elements 'inclusion_flag', + 'role_filter', and 'id_filter', as defined below. + + - The first element, namely 'inclusion_flag', encodes the CBOR + simple value true (0xf5) if the Client wishes to receive the + authentication credentials of the nodes having their node + identifier specified in 'id_filter' (i.e., selection by + inclusive filtering). Instead, this element encodes the CBOR + simple value false (0xf4) if the Client wishes to receive the + authentication credentials of the nodes that do not have the + node identifiers specified in the third element 'id_filter' + (i.e., selection by exclusive filtering). In the Join Request, + this parameter encodes the CBOR simple value true (0xf5). + + - The second element, namely 'role_filter', is a CBOR array. + Each element of the array contains one role or a combination of + roles for the group identified by GROUPNAME. This parameter + indicates that the Client wishes to receive the authentication + credentials of all the group members having any of the + specified roles or combination of roles (i.e., having any of + those single roles or at least all the roles indicated in any + of those combinations of roles). + + For example, the array ["role1", "role2+role3"] indicates that + the Client wishes to receive the authentication credentials of + all group members that have at least "role1" or at least both + "role2" and "role3". In the Join Request, this parameter is a + non-empty array. + + - The third element, namely 'id_filter', is a CBOR array. Each + element of the array contains a node identifier of a group + member for the group identified by GROUPNAME. This parameter + indicates that the Client wishes to receive the authentication + credentials of the nodes that have or do not have the specified + node identifiers based on the value of 'inclusion_flag' (i.e., + as a selection by inclusive or exclusive filtering). In the + Join Request, the Client does not filter authentication + credentials based on node identifiers, so this parameter is an + empty array. + + In fact, when first joining the group, the Client is not + expected or capable to express a filter based on node + identifiers of other group members. Instead, when already a + group member and sending a Join Request to rejoin, the Client + is not expected to include the 'get_creds' parameter in the + Join Request altogether, since it can rather retrieve + authentication credentials associated with specific group + identifiers as defined in Section 4.4.1.1. + + The CDDL definition [RFC8610] of 'get_creds' is given in Figure 9; + as an example, it uses node identifiers encoded as CBOR byte + strings, role identifiers encoded as CBOR text strings, and + combinations of roles encoded as CBOR arrays of role identifiers. + + Note that, for this handler, 'inclusion_flag' is always set to + true and the array of roles 'role_filter' is always non-empty, + while the array of node identifiers 'id_filter' is always empty. + However, this is not necessarily the case for other handlers using + the 'get_creds' parameter. + + inclusion_flag = bool + + role = tstr + comb_role = [2* role] + role_filter = [* ( role / comb_role )] + + id = bstr + id_filter = [* id] + + get_creds = null / [inclusion_flag, role_filter, id_filter] + + Figure 9: CDDL Definition of 'get_creds', Using an Example + Node Identifier Encoded as bstr and Role as tstr + + * 'client_cred': encoded as a CBOR byte string, whose value is the + original binary representation of the Client's authentication + credential. This parameter MUST be present if the KDC is managing + (collecting from and distributing to Clients) the authentication + credentials of the group members and the Client's role in the + group will require the Client to send messages to one or more + group members. It is REQUIRED for application profiles to define + the specific formats that are acceptable to use for authentication + credentials in the group (REQ6). + + * 'cnonce': encoded as a CBOR byte string, whose value is a + dedicated nonce N_C generated by the Client. This parameter MUST + be present. + + * 'client_cred_verify': encoded as a CBOR byte string. This + parameter MUST be present if the 'client_cred' parameter is + present and no authentication credential associated with the + Client's access token can be retrieved for that group. + + The value of the CBOR byte string is the proof-of-possession (PoP) + evidence computed by the Client over the following PoP input: the + scope (encoded as a CBOR byte string) concatenated with N_S + (encoded as a CBOR byte string) concatenated with N_C (encoded as + a CBOR byte string), where: + + - scope is either specified in the 'scope' parameter above, if + present, or a default scope entry that the handler is expected + to know otherwise; + + - N_S is the challenge received from the KDC in the + 'kdcchallenge' parameter of the 2.01 (Created) response to the + Token Transfer Request (see Section 3.3), encoded as a CBOR + byte string; and + + - N_C is the nonce generated by the Client and specified in the + 'cnonce' parameter above, encoded as a CBOR byte string. + + An example of PoP input to compute 'client_cred_verify' using CBOR + encoding is given in Figure 10. + + A possible type of PoP evidence is a signature that the Client + computes by using its own private key, whose corresponding public + key is specified in the authentication credential carried in the + 'client_cred' parameter. Application profiles of this + specification MUST specify the exact approaches used to compute + the PoP evidence to include in 'client_cred_verify' and MUST + specify which of those approaches is used in which case (REQ14). + + If the access token was not provided to the KDC through a Token + Transfer Request (e.g., the access token is instead transferred + during the establishment of a secure communication association), + it is REQUIRED of the specific application profile to define how + the challenge N_S is generated (REQ15). + + * 'creds_repo': it can be present if the format of the Client's + authentication credential conveyed in the 'client_cred' parameter + is a certificate. In such a case, this parameter has as its value + the URI of the certificate. This parameter is encoded as a CBOR + text string. Alternative specific encodings of this parameter MAY + be defined in application profiles of this specification (OPT6). + + * 'control_uri': its value is a full URI, encoded as a CBOR text + string. A default url-path is /ace-group/GROUPNAME/node, although + implementations can use different ones instead. The URI MUST NOT + have url-path /ace-group/GROUPNAME. + + If 'control_uri' is specified in the Join Request, the Client acts + as a CoAP server and hosts a resource at this specific URI. The + KDC MAY use this URI to send CoAP requests to the Client (acting + as a CoAP server in this exchange), for example, for one-to-one + provisioning of new group keying material when performing a group + rekeying (see Section 6.1) or to inform the Client of its removal + from the group (see Section 5). + + In particular, this resource is intended for communications + exclusively concerning the group identified by GROUPNAME and whose + group name is specified in the 'scope' parameter of the Join + Request, if present therein. If the KDC does not implement + mechanisms using this resource for that group, it can ignore this + parameter. Other additional functionalities of this resource MAY + be defined in application profiles of this specifications (OPT7). + + scope, N_S, and N_C expressed in CBOR diagnostic notation: + scope = h'826667726f7570316673656e646572' + N_S = h'018a278f7faab55a' + N_C = h'25a8991cd700ac01' + + + scope, N_S, and N_C as CBOR encoded byte strings: + scope = 0x4f826667726f7570316673656e646572 + N_S = 0x48018a278f7faab55a + N_C = 0x4825a8991cd700ac01 + + PoP input: + 0x4f 826667726f7570316673656e646572 + 48 018a278f7faab55a 48 25a8991cd700ac01 + + Figure 10: Example of PoP Input to Compute 'client_cred_verify' + Using CBOR Encoding + + If the request does not include the 'scope' parameter, the KDC is + expected to understand what roles the Client is requesting to join + the group with. For example, as per the access token, the Client + might have been granted access to the group with only one role. If + the KDC cannot determine which exact roles should be considered for + the Client, it MUST reply with a 4.00 (Bad Request) error response. + + The handler considers the scope specified in the access token + associated with the Client and checks the scope entry related to the + group identified by the GROUPNAME associated with the endpoint. In + particular, the handler checks whether the set of roles specified in + that scope entry includes all the roles that the Client wishes to + have in the group as per the Join Request. If this is not the case, + the KDC MUST reply with a 4.03 (Forbidden) error response. + + If the KDC manages the group members' authentication credentials, the + handler checks if one is included in the 'client_cred' parameter. If + so, the KDC retrieves the authentication credential and performs the + following actions. + + * If the access token was provided through a Token Transfer Request + (see Section 3.3) but the KDC cannot retrieve the 'kdcchallenge' + associated with this Client (see Section 3.3), the KDC MUST reply + with a 4.00 (Bad Request) error response, which MUST also have + Content-Format "application/ace-groupcomm+cbor". The payload of + the error response is a CBOR map including a newly generated + 'kdcchallenge' value, which is specified in the 'kdcchallenge' + parameter. The KDC MUST store the newly generated value as the + 'kdcchallenge' value associated with this Client, replacing the + currently stored value (if any). + + * The KDC checks the authentication credential to be valid for the + group identified by GROUPNAME. That is, it checks that the + authentication credential has the format used in the group, is + intended for the public key algorithm used in the group, and is + aligned with the possible associated parameters used in the group. + + If this verification fails, the handler MUST reply with a 4.00 + (Bad Request) error response. The response MUST have Content- + Format "application/concise-problem-details+cbor" and is formatted + as defined in Section 4.1.2. Within the Custom Problem Detail + entry 'ace-groupcomm-error', the value of the 'error-id' field + MUST be set to 2 ("Authentication credential incompatible with the + group configuration"). + + * The KDC verifies the PoP evidence conveyed in the + 'client_cred_verify' parameter. Application profiles of this + specification MUST specify the exact approaches used to verify the + PoP evidence and MUST specify which of those approaches is used in + which case (REQ14). + + If the PoP evidence does not pass verification, the handler MUST + reply with a 4.00 (Bad Request) error response. The response MUST + have Content-Format "application/concise-problem-details+cbor" and + is formatted as defined in Section 4.1.2. Within the Custom + Problem Detail entry 'ace-groupcomm-error', the value of the + 'error-id' field MUST be set to 3 ("Invalid proof-of-possession + evidence"). + + If no authentication credential is conveyed in the 'client_cred' + parameter, the handler checks if the KDC currently stores an + authentication credential that is associated with the access token + and with the group identified by GROUPNAME (see also + Section 4.3.1.1). Note that the same joining node may use different + authentication credentials in different groups, and all those + authentication credentials would be associated with the same access + token. + + If an eligible authentication credential for the Client is neither + present in the 'client_cred' parameter nor retrieved from the stored + ones at the KDC, it is RECOMMENDED that the handler stops the + processing and replies with a 4.00 (Bad Request) error response. + Application profiles MAY define alternatives (OPT8). + + If, regardless of the reason, the KDC replies with a 4.00 (Bad + Request) error response, the payload of the response MAY be a CBOR + map. For instance, the CBOR map can include a 'sign_info' parameter + formatted as 'sign_info_resp' defined in Section 3.3.1, with the + 'cred_fmt' element set to the CBOR simple value null (0xf6) if the + Client sent its own authentication credential and the KDC is not set + to store authentication credentials of the group members. When the + response payload is a CBOR map including such parameters, the error + response has Content-Format "application/ace-groupcomm+cbor". + + If all the verifications above succeed, the KDC proceeds as follows. + + First, only in case the Client is not already a group member, the + handler performs the following actions: + + * The handler adds the Client to the list of current members of the + group. + + * The handler assigns a name NODENAME to the Client and creates a + sub-resource to /ace-group/GROUPNAME at the KDC, i.e., /ace- + group/GROUPNAME/nodes/NODENAME. + + * The handler associates the node identifier NODENAME with the + access token and the secure communication association for the + Client. + + Then, the handler performs the following actions. + + * If the KDC manages the group members' authentication credentials: + + - The handler associates the retrieved Client's authentication + credential with the tuple composed of the node name NODENAME, + the group name GROUPNAME, and the access token. + + - The handler adds the retrieved Client's authentication + credential to the list of authentication credentials stored for + the group identified by GROUPNAME. If such a list already + includes an authentication credential for the Client, but a + different authentication credential is specified in the + 'client_cred' parameter, then the handler MUST replace the old + authentication credential in the list with the one specified in + the 'client_cred' parameter. + + * If backward security is prescribed by application policies + installed at the KDC or by the used application profile of this + specification, then the KDC MUST generate new group keying + material and securely distribute it to the current group members + (see Section 6). + + * The handler returns a successful Join Response, as defined below, + which contains the symmetric group keying material, the group + policies, and the authentication credentials of the current + members of the group if the KDC manages those and the Client + requested those. + + The Join Response MUST have response code 2.01 (Created) if the + Client has been added to the list of group members in this join + exchange (see above) or 2.04 (Changed) otherwise, i.e., if the Client + is rejoining the group without having left it. + + The Join Response message MUST include the Location-Path CoAP + Options, specifying the path to the sub-resource associated with the + Client, i.e., /ace-group/GROUPNAME/nodes/NODENAME. + + The Join Response message MUST have Content-Format "application/ace- + groupcomm+cbor". The payload of the response is formatted as a CBOR + map, which MUST contain the following fields with the values + specified below: + + * 'gkty': identifying the key type of the keying material specified + in the 'key' parameter. This parameter is encoded as a CBOR + integer or a CBOR text string. Possible values are taken from the + "Key Type Value" column of the "ACE Groupcomm Key Types" registry + defined in Section 11.8 of this specification. Implementations + MUST verify that the key type specified by this parameter matches + the application profile being used and, if applicable, that such + an application profile is listed in the "Profile" column of the + "ACE Groupcomm Key Types" registry for the key type in question. + + * 'key': containing the keying material used for securing the group + communication or information required to derive such keying + material. + + * 'num': containing the current version number of the group keying + material, encoded as a CBOR integer. The version number has a + value that increases in a strictly monotonic way as the group + keying material changes. The application profile MUST define the + initial value of the version number (REQ16). + + The format of the keying material conveyed in the 'key' parameter + MUST be defined in application profiles of this specification + (REQ17), together with corresponding key types to specify as value of + the 'gkty' parameter and that are accepted by the application + (REQ18). Additionally, documents specifying a type of keying + material MUST register an entry in the "ACE Groupcomm Key Types" + registry defined in Section 11.8, including its name, the + corresponding key type to specify as value for the 'gkty' parameter, + and the application profile to be used with. + + +==========+================+=========+=============+===========+ + | Name | Key Type Value | Profile | Description | Reference | + +==========+================+=========+=============+===========+ + | Reserved | 0 | | This value | RFC 9594 | + | | | | is reserved | | + +----------+----------------+---------+-------------+-----------+ + + Table 1: ACE Groupcomm Key Types + + The Join Response SHOULD contain the following fields with the values + specified below: + + * 'exp': its value specifies the expiration time of the group keying + material specified in the 'key' parameter, encoded as a CBOR + unsigned integer. The value is the number of seconds from + 1970-01-01T00:00:00Z UTC until the specified UTC date/time, + ignoring leap seconds, analogous to what is specified for + NumericDate in Section 2 of [RFC7519]. After the time indicated + in this parameter, group members MUST NOT use the group keying + material specified in the 'key' parameter. The group members can + retrieve the latest group keying material from the KDC. + + * 'exi': its value specifies the residual lifetime of the group + keying material, encoded as a CBOR unsigned integer. If the 'exp' + parameter is included, this parameter MUST also be included. The + value represents the residual lifetime of the group keying + material specified in the 'key' parameter, i.e., it is the number + of seconds between the current time at the KDC and the time when + the keying material expires (as specified in the 'exp' parameter, + if present). A Client determines the expiration time of the + keying material by adding the seconds specified in the 'exi' + parameter to its current time upon receiving the Join Response + containing the 'exi' parameter. After such an expiration time, + the Client MUST NOT use the group keying material specified in the + 'key' parameter. The Client can retrieve the latest group keying + material from the KDC. + + If a Client has a reliable way to synchronize its internal clock with + UTC, and both the 'exp' and 'exi' parameters are present, then the + Client MUST use the 'exp' parameter value as expiration time for the + group keying material. Otherwise, the Client uses the 'exi' + parameter value to determine the expiration time as defined above. + + When a Client relies on the 'exi' parameter, the expiration time that + it computes is offset in the future with respect to the actual + expiration time as intended by the KDC and specified in the 'exp' + parameter (if present). Such an offset is the amount of time between + when the KDC sends the response message including the 'exi' parameter + and when the Client receives that message. That is, especially if + the delivery of the response to the Client is delayed, the Client + will believe the keying material to be valid for a longer time than + the KDC actually means. However, before approaching the actual + expiration time, the KDC is expected to rekey the group and + distribute new keying material (see Section 6). + + Optionally, the Join Response MAY contain the following parameters, + which, if included, MUST have the format and value as specified + below. + + * 'ace_groupcomm_profile': its value is encoded as a CBOR integer + and MUST be used to uniquely identify the application profile for + group communication. Applications of this specification MUST + register an application profile identifier and the related value + for this parameter in the "ACE Groupcomm Profiles" registry + (REQ19). + + +==========+========================+============+===========+ + | Name | Description | CBOR Value | Reference | + +==========+========================+============+===========+ + | Reserved | This value is reserved | 0 | RFC 9594 | + +----------+------------------------+------------+-----------+ + + Table 2: ACE Groupcomm Profiles + + * 'creds': it MUST be present if 'get_creds' was present in the Join + Request; otherwise, it MUST NOT be present. Its value is encoded + as a CBOR array specifying the authentication credentials of the + group members, i.e., of all of them or of the ones selected + according to the 'get_creds' parameter in the Join Request. In + particular, each element of the array is a CBOR byte string, whose + value is the original binary representation of a group member's + authentication credential. It is REQUIRED for application + profiles to define the specific formats of authentication + credentials that are acceptable to use in the group (REQ6). + + * 'peer_roles': it SHOULD be present if 'creds' is also present; + otherwise, it MUST NOT be present. Its value is encoded as a CBOR + array of n elements, where n is the number of authentication + credentials included in the 'creds' parameter (at most, the number + of members in the group). The i-th element of the array specifies + the role(s) that the group member associated with the i-th + authentication credential in 'creds' has in the group. In + particular, each array element is encoded like the role element of + a scope entry, which is consistent with the used format (see + Section 3.1). + + This parameter MAY be omitted if the Client can rely on other + means to unambiguously gain knowledge of the role of each group + member whose associated authentication credential is specified in + the 'creds' parameter. For example, all such group members may + have the same role in the group joined by the Client, and such a + role can be unambiguously assumed by the Client (e.g., based on + what is defined in the used application profile of this + specification). As another example, each of the authentication + credentials specified in the 'creds' parameter can indicate the + role(s) that the corresponding group member has in the group + joined by the Client. + + When receiving the authentication credential of a Client in the + 'client_cred' parameter of a Join Request (see Section 4.3.1.1) or + of an Authentication Credential Update Request (see + Section 4.9.1.1), the KDC is not expected to check that the + authentication credential indicates the role(s) that the Client + can have or has in the group in question. When preparing a Join + Response, the KDC can decide whether to include the 'peer_roles' + parameter, depending on the specific set of authentication + credentials specified in the 'creds' parameter of that Join + Response. + + * 'peer_identifiers': it MUST be present if 'creds' is also present; + otherwise, it MUST NOT be present. Its value is encoded as a CBOR + array of n elements, where n is the number of authentication + credentials included in the 'creds' parameter (at most, the number + of members in the group). The i-th element of the array specifies + the node identifier that the group member associated with the i-th + authentication credential in 'creds' has in the group. In + particular, the i-th array element is encoded as a CBOR byte + string, whose value is the node identifier of the group member. + The specific format of node identifiers of group members is + specified by the application profile (REQ25). + + * 'group_policies': its value is encoded as a CBOR map, whose + elements specify how the group handles specific management + aspects. These include, for instance, approaches to achieve + synchronization of sequence numbers among group members. The + possible elements of the CBOR map are registered in the "ACE + Groupcomm Policies" registry defined in Section 11.10 of this + specification. This specification defines the three elements + "Sequence Number Synchronization Methods", "Key Update Check + Interval", and "Expiration Delta", which are summarized in + Table 3. Application profiles of this specification MUST specify + the format and default values for the entries of the CBOR map + conveyed in the 'group_policies' parameter (REQ20). + + +=================+=======+======+===================+===========+ + | Name | CBOR | CBOR | Description | Reference | + | | Label | Type | | | + +=================+=======+======+===================+===========+ + | Sequence Number | 0 | int | Method for | RFC 9594 | + | Synchronization | | or | recipient group | | + | Method | | tstr | members to | | + | | | | synchronize with | | + | | | | sequence numbers | | + | | | | of sender group | | + | | | | members. Its | | + | | | | value is taken | | + | | | | from the "Value" | | + | | | | column of the | | + | | | | "Sequence Number | | + | | | | Synchronization | | + | | | | Method" | | + | | | | registry. | | + +-----------------+-------+------+-------------------+-----------+ + | Key Update | 1 | int | Polling interval | RFC 9594 | + | Check Interval | | | in seconds, for | | + | | | | group members to | | + | | | | check at the KDC | | + | | | | if the latest | | + | | | | group keying | | + | | | | material is the | | + | | | | one that they | | + | | | | store. | | + +-----------------+-------+------+-------------------+-----------+ + | Expiration | 2 | uint | Number of | RFC 9594 | + | Delta | | | seconds from | | + | | | | 'exp' until a | | + | | | | UTC date/time, | | + | | | | after which | | + | | | | group members | | + | | | | MUST stop using | | + | | | | the group keying | | + | | | | material that | | + | | | | they store to | | + | | | | decrypt incoming | | + | | | | messages. | | + +-----------------+-------+------+-------------------+-----------+ + + Table 3: ACE Groupcomm Policies + + * 'kdc_cred': its value is the original binary representation of the + KDC's authentication credential, encoded as a CBOR byte string. + This parameter is used if the KDC has an associated authentication + credential and this is required for the correct group operation. + It is REQUIRED for application profiles to define whether the KDC + has an authentication credential as required for the correct group + operation and if this has to be provided through the 'kdc_cred' + parameter (REQ8). + + If the KDC has an authentication credential as required for the + correct group operation, the KDC's authentication credential MUST + have the same format used for the authentication credentials of + the group members. It is REQUIRED for application profiles to + define the specific formats that are acceptable to use for the + authentication credentials in the group (REQ6). + + * 'kdc_nonce': its value is a dedicated nonce N_KDC generated by the + KDC, encoded as a CBOR byte string. This parameter MUST be + present if the 'kdc_cred' parameter is present. + + * 'kdc_cred_verify': its value is as defined below and is encoded as + a CBOR byte string. This parameter MUST be present if the + 'kdc_cred' parameter is present. + + The value of this parameter is the proof-of-possession (PoP) + evidence computed by the KDC over the following PoP input: the + nonce N_C (encoded as a CBOR byte string) concatenated with the + nonce N_KDC (encoded as a CBOR byte string), where: + + - N_C is the nonce generated by the Client and specified in the + 'cnonce' parameter of the Join Request. + + - N_KDC is the nonce generated by the KDC and specified in the + 'kdc_nonce' parameter. + + An example of PoP input to compute 'kdc_cred_verify' using CBOR + encoding is given in Figure 11. + + A possible type of PoP evidence is a signature that the KDC + computes by using its own private key, whose corresponding public + key is specified in the authentication credential conveyed in the + 'kdc_cred' parameter. Application profiles of this specification + MUST specify the approaches used by the KDC to compute the PoP + evidence to include in 'kdc_cred_verify' and MUST specify which of + those approaches is used in which case (REQ21). + + * 'rekeying_scheme': identifying the rekeying scheme that the KDC + uses to provide new group keying material to the group members. + The value of this parameter is encoded as a CBOR integer and is + taken from the "Value" column of the "ACE Groupcomm Rekeying + Schemes" registry defined in Section 11.13 of this specification. + + +=======+================+===========================+===========+ + | Value | Name | Description | Reference | + +=======+================+===========================+===========+ + | 0 | Point-to-Point | The KDC individually | RFC 9594 | + | | | targets each node to | | + | | | rekey, using the | | + | | | pairwise secure | | + | | | communication | | + | | | association with | | + | | | that node | | + +-------+----------------+---------------------------+-----------+ + + Table 4: ACE Groupcomm Rekeying Schemes + + Application profiles of this specification MAY define a default + group rekeying scheme to refer to in case the 'rekeying_scheme' + parameter is not included in the Join Response (OPT9). + + * 'mgt_key_material': encoded as a CBOR byte string and containing + the specific administrative keying material that the joining node + requires in order to participate in the group rekeying process + performed by the KDC. This parameter MUST NOT be present if the + 'rekeying_scheme' parameter is not present and the application + profile does not specify a default group rekeying scheme to use in + the group. Some simple rekeying schemes may not require specific + administrative keying material to be provided, e.g., the basic + "Point-to-Point" group rekeying scheme (see Section 6.1). + + In more advanced group rekeying schemes, the administrative keying + material can be composed of multiple keys organized, for instance, + into a logical tree hierarchy, whose root key is the only + administrative key shared by all the group members. In such a + case, each group member is exclusively associated with one leaf + key in the hierarchy and stores only the administrative keys from + the associated leaf key all the way up along the path to the root + key. That is, different group members can be provided with a + different subset of the overall administrative keying material. + + It is expected from separate documents to define how the advanced + group rekeying scheme, possibly indicated in the 'rekeying_scheme' + parameter, is used by an application profile of this + specification. This includes defining the format of the + administrative keying material to specify in 'mgt_key_material' + consistently with the group rekeying scheme and the application + profile in question. + + * 'control_group_uri': its value is a full URI, encoded as a CBOR + text string. The URI MUST specify addressing information intended + to reach all the members in the group. For example, this can be a + multicast IP address, optionally together with a port number that, + if omitted, defaults to 5683, i.e., the default port number for + the "coap" URI scheme (see Section 6.1 of [RFC7252]). The URI + MUST include GROUPNAME in the url-path. A default url-path is + /ace-group/GROUPNAME, although implementations can use different + ones instead. The URI MUST NOT have url-path /ace- + group/GROUPNAME/nodes. + + If 'control_group_uri' is included in the Join Response, the + Clients supporting this parameter act as CoAP servers, host a + resource at this specific URI, and listen to the specified + addressing information. + + The KDC MAY use this URI to send one-to-many CoAP requests to the + Client group members (acting as CoAP servers in this exchange), + for example, for one-to-many provisioning of new group keying + material when performing a group rekeying (see Section 6.2) or to + inform the Clients of their removal from the group (see + Section 5). + + In particular, this resource is intended for communications + exclusively concerning the group identified by GROUPNAME and whose + group name was specified in the 'scope' parameter of the Join + Request, if present. If the KDC does not implement mechanisms + using this resource for that group, it can ignore this parameter. + Other additional functionalities of this resource MAY be defined + in application profiles of this specifications (OPT10). + + N_C and N_KDC expressed in CBOR diagnostic notation: + N_C = h'25a8991cd700ac01' + N_KDC = h'cef04b2aa791bc6d' + + + N_C and N_KDC as CBOR encoded byte strings: + N_C = 0x4825a8991cd700ac01 + N_KDC = 0x48cef04b2aa791bc6d + + PoP input: + 0x48 25a8991cd700ac01 48 cef04b2aa791bc6d + + Figure 11: Example of PoP Input to Compute 'kdc_cred_verify' + Using CBOR Encoding + + After sending the Join Response, if the KDC has an associated + authentication credential as required for the correct group + operation, then the KDC MUST store the N_C value specified in the + 'cnonce' parameter of the Join Request as a 'clientchallenge' value + associated with the Client, replacing the currently stored value (if + any). If, as a group member, the Client later sends a GET request to + the /ace-group/GROUPNAME/kdc-cred resource for retrieving the latest + KDC's authentication credential (see Section 4.5.1), then the KDC + uses the stored 'clientchallenge' for computing the PoP evidence to + include in the response sent to the Client, hence proving the + possession of its own private key. + + If the Join Response includes the 'kdc_cred_verify' parameter, the + Client verifies the conveyed PoP evidence and considers the group + joining unsuccessful in case of failed verification. Application + profiles of this specification MUST specify the exact approaches used + by the Client to verify the PoP evidence in 'kdc_cred_verify' and + MUST specify which of those approaches is used in which case (REQ21). + + Application profiles of this specification MUST specify the + communication protocol that members of the group use to communicate + with each other (REQ22) and the security protocol that they use to + protect the group communication (REQ23). + +4.3.1.1. Join the Group + + Figure 12 gives an overview of the join exchange between the Client + and the KDC when the Client first joins a group, while Figure 13 + shows an example. + + Client KDC + | | + |-------- Join Request: POST /ace-group/GROUPNAME ------>| + | | + |<------------ Join Response: 2.01 (Created) ----------- | + | Location-Path = "/ace-group/GROUPNAME/nodes/NODENAME" | + + Figure 12: Message Flow of the Join Request-Response + + Request: + + Header: POST (Code=0.02) + Uri-Host: "kdc.example.com" + Uri-Path: "ace-group" + Uri-Path: "g1" + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload (in CBOR diagnostic notation): + { + / scope / 3: <<["group1", ["sender", "receiver"]]>>, + / get_creds / 4: [true, ["sender"], []], + / client_cred / 5: h'a2026008a101a5010202410a20012158 + 20bbc34960526ea4d32e940cad2a2341 + 48ddc21791a12afbcbac93622046dd44 + f02258204519e257236b2a0ce2023f09 + 31f1f386ca7afda64fcde0108c224c51 + eabf6072', + / cnonce / 6: h'25a8991cd700ac01', + / client_cred_verify / 24: h'66e6d9b0db009f3e105a673f88556117 + 26caed57f530f8cae9d0b168513ab949 + fedc3e80a96ebe94ba08d3f8d3bf8348 + 7458e2ab4c2f936ff78b50e33c885e35' + } + + + Response: + + Header: Created (Code=2.01) + Content-Format: 261 (application/ace-groupcomm+cbor) + Location-Path: "ace-group" + Location-Path: "g1" + Location-Path: "nodes" + Location-Path: "c101" + Payload (in CBOR diagnostic notation): + { + / gkty / 7: 65600, + / key / 8: h'73657373696f6e6b6579', + / num / 9: 12, + / exp / 11: 1924992000, + / exi / 12: 2592000, + / creds / 13: [h'a2026008a101a5010202410220012158 + 20cd4177ba62433375ede279b5e18e8b + 91bc3ed8f1e174474a26fc0edb44ea53 + 73225820a0391de29c5c5badda610d4e + 301eaaa18422367722289cd18cbe6624 + e89b9cfd', + h'a2026008a101a5010202410320012158 + 20ac75e9ece3e50bfc8ed60399889522 + 405c47bf16df96660a41298cb4307f7e + b62258206e5de611388a4b8a8211334a + c7d37ecb52a387d257e6db3c2a93df21 + ff3affc8'], + / peer_roles / 14: ["sender", ["sender", "receiver"]], + / peer_identifiers / 15: [h'01', h'02'] + } + + Figure 13: Example of the First Join Request-Response for Group + Joining + + If not previously established, the Client and the KDC MUST first + establish a pairwise secure communication association (REQ24). This + can be achieved, for instance, by using a transport profile of ACE. + The join exchange MUST occur over that secure communication + association. The Client and the KDC MAY use that same secure + communication association to protect further pairwise communications + that must be protected. + + It is REQUIRED that the secure communication association between the + Client and the KDC is established 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 + the pairwise secure communication association between the Client and + the KDC. + + To join the group, the Client sends a CoAP POST request to the /ace- + group/GROUPNAME endpoint at the KDC, where the group to join is + identified by GROUPNAME. The group name is specified in the scope + entry conveyed by the 'scope' parameter of the request (if present), + formatted as specified in Section 4.3.1. This group name is the same + as in the scope entry corresponding to that group, specified in the + 'scope' parameter of the Authorization Request/Response, or it can be + determined from it. Note that, in case of successful joining, the + Location-Path Options in the Join Response provide the Client with + the path of the URI to use for retrieving individual keying material + and for leaving the group. + + If the node is joining a group for the first time and the KDC + maintains the authentication credentials of the group members, the + Client is REQUIRED to send its own authentication credential and + proof-of-possession (PoP) evidence in the Join Request (see the + 'client_cred' and 'client_cred_verify' parameters in Section 4.3.1). + The request is accepted only if both the authentication credential is + provided and the PoP evidence is successfully verified. + + If a node rejoins a group as authorized by the same access token and + using the same authentication credential, it can omit the + authentication credential and the PoP evidence, or just the PoP + evidence, from the Join Request. Then, the KDC will be able to + retrieve the node's authentication credential associated with the + access token for that group. If the authentication credential has + been discarded, the KDC replies with a 4.00 (Bad Request) error + response, as specified in Section 4.3.1. If a node rejoins a group + but wants to update its own authentication credential, it needs to + include both its authentication credential and the PoP evidence in + the Join Request, like when it joined the group for the first time. + +4.3.2. GET Handler + + The GET handler returns the symmetric group keying material for the + group identified by GROUPNAME. + + The handler expects a GET request. + + In addition to what is defined in Section 4.1.2, the handler verifies + that the Client is a current member of the group. If the + verification fails, the KDC MUST reply with a 4.03 (Forbidden) error + response. The response MUST have Content-Format "application/ + concise-problem-details+cbor" and is formatted as defined in + Section 4.1.2. Within the Custom Problem Detail entry 'ace- + groupcomm-error', the value of the 'error-id' field MUST be set to 0 + ("Operation permitted only to group members"). + + If all verifications succeed, the handler replies with a 2.05 + (Content) response containing the symmetric group keying material. + The payload of the response is formatted as a CBOR map that MUST + contain the parameters 'gkty', 'key', and 'num', as specified in + Section 4.3.1. + + The payload MUST also include the parameters 'rekeying_scheme' and + 'mgt_key_material' as specified in Section 4.3.1, if they are + included in the payload of the Join Responses sent for the group. + + The payload MAY also include the parameters 'ace_groupcomm_profile', + 'exp', and 'exi', as specified in Section 4.3.1. If the 'exp' + parameter is included, the 'exi' parameter MUST also be included. If + the 'exi' parameter is included, its value specifies the residual + lifetime of the group keying material from the current time at the + KDC. + +4.3.2.1. Retrieve Group Keying Material + + A node in the group can contact the KDC to retrieve the current group + keying material by sending a CoAP GET request to the /ace-group/ + GROUPNAME endpoint at the KDC, where the group is identified by + GROUPNAME. + + Figure 14 gives an overview of the key distribution exchange between + the Client and the KDC, while Figure 15 shows an example. + + Client KDC + | | + |------ Key Distribution Request: GET /ace-group/GROUPNAME ------>| + | | + |<----------- Key Distribution Response: 2.05 (Content) --------- | + | | + + Figure 14: Message Flow of Key Distribution Request-Response + + Request: + + Header: GET (Code=0.01) + Uri-Host: "kdc.example.com" + Uri-Path: "ace-group" + Uri-Path: "g1" + + + Response: + + Header: Content (Code=2.05) + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload (in CBOR diagnostic notation): + { + / gkty / 7: 65600, + / key / 8: h'73657373696f6e6b6579', + / num / 9: 12 + } + + Figure 15: Example of Key Distribution Request-Response + +4.4. /ace-group/GROUPNAME/creds + + This resource implements the GET and FETCH handlers. + +4.4.1. FETCH Handler + + The FETCH handler receives identifiers of group members for the group + identified by GROUPNAME and returns the authentication credentials of + such group members. + + The handler expects a request with the payload formatted as a CBOR + map, which MUST contain the following field. + + * 'get_creds': its value is encoded as in Section 4.3.1, with the + following modifications. + + - The arrays 'role_filter' and 'id_filter' MUST NOT both be + empty, i.e., in CDDL notation: [ bool, [ ], [ ] ]. If the + 'get_creds' parameter has such a format, the request MUST be + considered malformed, and the KDC MUST reply with a 4.00 (Bad + Request) error response. + + Note that a group member can retrieve the authentication + credentials of all the current group members by sending a GET + request to the same KDC resource instead (see Section 4.4.2.1). + + - The element 'inclusion_flag' encodes the CBOR simple value true + (0xf5) or false (0xf4), as defined in Section 4.3.1. + + - The array 'role_filter' can be empty if the Client does not + wish to filter the requested authentication credentials based + on the roles of the group members. + + - The array 'id_filter' contains zero or more node identifiers of + group members for the group identified by GROUPNAME, as defined + in Section 4.3.1. The array may be empty if the Client does + not wish to filter the requested authentication credentials + based on the node identifiers of the group members. + + Note that, in case the 'role_filter' array and the 'id_filter' array + are both non-empty: + + * If the 'inclusion_flag' encodes the CBOR simple value true (0xf5), + the handler returns the authentication credentials of group + members whose roles match with 'role_filter' and/or have their + node identifier specified in 'id_filter'. + + * If the 'inclusion_flag' encodes the CBOR simple value false + (0xf4), the handler returns the authentication credentials of + group members whose roles match with 'role_filter' and, at the + same time, do not have their node identifier specified in + 'id_filter'. + + The specific format of authentication credentials as well as the + identifiers, roles, and combination of roles of group members MUST be + specified by application profiles of this specification (REQ1, REQ6, + REQ25). + + The handler identifies the authentication credentials of the current + group members for which either of the following holds: + + * The role identifier matches with one of those indicated in the + request; note that the request can specify a combination of roles, + in which case the handler selects only the group members that have + all the roles included in the combination. + + * The node identifier matches with one of those indicated in the + request or does not match with any of those, which is consistent + with the value of the element 'inclusion_flag'. + + If all verifications succeed, the handler returns a 2.05 (Content) + message response with the payload formatted as a CBOR map, containing + only the following parameters from Section 4.3.1. + + * 'num': encoding the version number of the current group keying + material. + + * 'creds': encoding the list of authentication credentials of the + selected group members. + + * 'peer_roles': encoding the role(s) that each of the selected group + members has in the group. + + This parameter SHOULD be present, and it MAY be omitted according + to the same criteria defined for the Join Response (see + Section 4.3.1). + + * 'peer_identifiers': encoding the node identifier that each of the + selected group members has in the group. + + The specific format of authentication credentials as well as of node + identifiers of group members is specified by the application profile + (REQ6, REQ25). + + If the KDC does not store any authentication credential associated + with the specified node identifiers, the handler returns a response + with the payload formatted as a CBOR byte string of zero length + (0x40). + + The handler MAY enforce one of the following policies in order to + handle possible node identifiers that are included in the 'id_filter' + element of the 'get_creds' parameter of the request but are not + associated with any current group member. Such a policy MUST be + specified by application profiles of this specification (REQ26). + + * The KDC silently ignores those node identifiers. + + * The KDC retains authentication credentials of group members for a + given amount of time after their leaving before discarding them. + As long as such authentication credentials are retained, the KDC + provides them to a requesting Client. + + If the KDC adopts this policy, the application profile MUST also + specify the amount of time during which the KDC retains the + authentication credential of a former group member after its + leaving, possibly on a per-member basis. + + Note that this resource handler only verifies that the node is + authorized by the AS to access this resource. Nodes that are not + members of the group but are authorized to do signature verifications + on the group messages may be allowed to access this resource if the + application needs it. + +4.4.1.1. Retrieve a Subset of Authentication Credentials in the Group + + In case the KDC maintains the authentication credentials of group + members, a node in the group can contact the KDC to request the + authentication credentials, roles, and node identifiers of a + specified subset of group members by sending a CoAP FETCH request to + the /ace-group/GROUPNAME/creds endpoint at the KDC, which is + formatted as defined in Section 4.4.1 and where GROUPNAME identifies + the group. + + Figure 16 gives an overview of the exchange mentioned above, while + Figure 17 shows an example of such an exchange. + + Client KDC + | | + | Authentication Credential Request: | + |-------------------------------------------------------->| + | FETCH /ace-group/GROUPNAME/creds | + | | + |<-- Authentication Credential Response: 2.05 (Content) --| + | | + + Figure 16: Message Flow of Authentication Credential Request- + Response to Obtain the Authentication Credentials of Specific + Group Members + + Request: + + Header: FETCH (Code=0.05) + Uri-Host: "kdc.example.com" + Uri-Path: "ace-group" + Uri-Path: "g1" + Uri-Path: "creds" + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload (in CBOR diagnostic notation): + { + / get_creds / 4: [true, [], [h'02', h'03']] + } + + + Response: + + Header: Content (Code=2.05) + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload (in CBOR diagnostic notation): + { + / creds / 13: [h'a2026008a101a5010202410320012158 + 20ac75e9ece3e50bfc8ed60399889522 + 405c47bf16df96660a41298cb4307f7e + b62258206e5de611388a4b8a8211334a + c7d37ecb52a387d257e6db3c2a93df21 + ff3affc8', + h'a2026008a101a5010202410920012158 + 206f9702a66602d78f5e81bac1e0af01 + f8b52810c502e87ebb7c926c07426fd0 + 2f225820c8d33274c71c9b3ee57d842b + bf2238b8283cb410eca216fb72a78ea7 + a870f800'], + / peer_roles / 14: [["sender", "receiver"], "receiver"], + / peer_identifiers / 15: [h'02', h'03'] + } + + Figure 17: Example of Authentication Credential Request-Response + to Obtain the Authentication Credentials of Specific Group + Members + +4.4.2. GET Handler + + The handler expects a GET request. + + If all verifications succeed, the KDC replies with a 2.05 (Content) + response as in the FETCH handler in Section 4.4.1, but its payload + specifies the authentication credentials of all the group members, + together with their roles and node identifiers. + + The 'peer_roles' parameter SHOULD be present in the payload of the + response, and it MAY be omitted according to the same criteria + defined for the Join Response (see Section 4.3.1). + +4.4.2.1. Retrieve All Authentication Credentials in the Group + + In case the KDC maintains the authentication credentials of group + members, a node in the group or an external signature verifier can + contact the KDC to request the authentication credentials, roles, and + node identifiers of all the current group members, by sending a CoAP + GET request to the /ace-group/GROUPNAME/creds endpoint at the KDC, + where the group is identified by GROUPNAME. + + Figure 18 gives an overview of the message exchange, while Figure 19 + shows an example of such an exchange. + + Client KDC + | | + | Authentication Credential Request: | + |-------------------------------------------------------->| + | GET /ace-group/GROUPNAME/creds | + | | + |<-- Authentication Credential Response: 2.05 (Content) --| + | | + + Figure 18: Message Flow of Authentication Credential Request- + Response to Obtain the Authentication Credentials of All the + Group Members + + Request: + + Header: GET (Code=0.01) + Uri-Host: "kdc.example.com" + Uri-Path: "ace-group" + Uri-Path: "g1" + Uri-Path: "creds" + + + Response: + + Header: Content (Code=2.05) + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload (in CBOR diagnostic notation): + { + / num / 9: 12, + / creds / 13: [h'a2026008a101a5010202410220012158 + 20cd4177ba62433375ede279b5e18e8b + 91bc3ed8f1e174474a26fc0edb44ea53 + 73225820a0391de29c5c5badda610d4e + 301eaaa18422367722289cd18cbe6624 + e89b9cfd', + h'a2026008a101a5010202410320012158 + 20ac75e9ece3e50bfc8ed60399889522 + 405c47bf16df96660a41298cb4307f7e + b62258206e5de611388a4b8a8211334a + c7d37ecb52a387d257e6db3c2a93df21 + ff3affc8', + h'a2026008a101a5010202410920012158 + 206f9702a66602d78f5e81bac1e0af01 + f8b52810c502e87ebb7c926c07426fd0 + 2f225820c8d33274c71c9b3ee57d842b + bf2238b8283cb410eca216fb72a78ea7 + a870f800'], + / peer_roles / 14: ["sender", ["sender", "receiver"], + "receiver"], + / peer_identifiers / 15: [h'01', h'02', h'03'] + } + + Figure 19: Example of Authentication Credential Request-Response + to Obtain the Authentication Credentials of All the Group Members + +4.5. /ace-group/GROUPNAME/kdc-cred + + This resource implements a GET handler. + +4.5.1. GET Handler + + The handler expects a GET request. + + If all verifications succeed, the handler returns a 2.05 (Content) + message containing the KDC's authentication credential together with + the proof-of-possession (PoP) evidence. The response MUST have + Content-Format "application/ace-groupcomm+cbor". The payload of the + response is a CBOR map, which includes the following fields. + + * 'kdc_cred: specifying the KDC's authentication credential. This + parameter is encoded like the 'kdc_cred' parameter in the Join + Response (see Section 4.3.1). + + * 'kdc_nonce': specifying a nonce generated by the KDC. This + parameter is encoded like the 'kdc_nonce' parameter in the Join + Response (see Section 4.3.1). + + * 'kdc_cred_verify': specifying the PoP evidence computed by the KDC + over the following PoP input: the nonce N_C (encoded as a CBOR + byte string) concatenated with the nonce N_KDC (encoded as a CBOR + byte string), where: + + - N_C is the nonce generated by the Client group member such + that: i) the nonce was specified in the 'cnonce' parameter of + the latest Join Request that the Client sent to the KDC in + order to join the group identified by GROUPNAME; and ii) the + KDC stored the nonce as a 'clientchallenge' value associated + with the Client after sending the corresponding Join Response + (see Section 4.3.1). + + - N_KDC is the nonce generated by the KDC and specified in the + 'kdc_nonce' parameter. + + An example of PoP input to compute 'kdc_cred_verify' using CBOR + encoding is given in Figure 20. + + The PoP evidence is computed by means of the same method used for + computing the PoP evidence that was included in the Join Response + for this Client (see Section 4.3.1). + + Application profiles of this specification MUST specify the exact + approaches used by the KDC to compute the PoP evidence to include + in the 'kdc_cred_verify' parameter and MUST specify which of those + approaches is used in which case (REQ21). + + If an application profile supports the presence of external + signature verifiers that send GET requests to this resource, then + the application profile MUST specify how external signature + verifiers provide the KDC with a self-generated nonce to use as + N_C (REQ21). + + N_C and N_KDC expressed in CBOR diagnostic notation: + N_C = h'25a8991cd700ac01' + N_KDC = h'0b7db12aaff56da3' + + + N_C and N_KDC as CBOR encoded byte strings: + N_C = 0x4825a8991cd700ac01 + N_KDC = 0x480b7db12aaff56da3 + + PoP input: + 0x48 25a8991cd700ac01 48 0b7db12aaff56da3 + + Figure 20: Example of PoP Input to Compute 'kdc_cred_verify' + Using CBOR Encoding + +4.5.1.1. Retrieve the KDC's Authentication Credential + + In case the KDC has an associated authentication credential as + required for the correct group operation, a group member or an + external signature verifier can contact the KDC to request the KDC's + authentication credential by sending a CoAP GET request to the /ace- + group/GROUPNAME/kdc-cred endpoint at the KDC, where GROUPNAME + identifies the group. + + Upon receiving the 2.05 (Content) response, the Client retrieves the + KDC's authentication credential from the 'kdc_cred' parameter and + MUST verify the proof-of-possession (PoP) evidence specified in the + 'kdc_cred_verify' parameter. In case of successful verification of + the PoP evidence, the Client MUST store the obtained KDC's + authentication credential and replace the currently stored one. + + The PoP evidence is verified by means of the same method used when + processing the Join Response (see Section 4.3.1). Application + profiles of this specification MUST specify the exact approaches used + by the Client to verify the PoP evidence in 'kdc_cred_verify' and + MUST specify which of those approaches is used in which case (REQ21). + + Figure 21 gives an overview of the exchange described above, while + Figure 22 shows an example. + + Group + Member KDC + | | + | KDC Authentication Credential Request | + |------------------------------------------------------------>| + | GET /ace-group/GROUPNAME/kdc-cred | + | | + |<-- KDC Authentication Credential Response: 2.05 (Content) --| + | | + + Figure 21: Message Flow of KDC Authentication Credential Request- + Response to Obtain the Authentication Credential of the KDC + + Request: + + Header: GET (Code=0.01) + Uri-Host: "kdc.example.com" + Uri-Path: "ace-group" + Uri-Path: "g1" + Uri-Path: "kdc-cred" + + + Response: + + Header: Content (Code=2.05) + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload (in CBOR diagnostic notation): + { + / kdc_cred / 17: h'a2026008a101a5010202419920012158 + 2065eda5a12577c2bae829437fe33870 + 1a10aaa375e1bb5b5de108de439c0855 + 1d2258201e52ed75701163f7f9e40ddf + 9f341b3dc9ba860af7e0ca7ca7e9eecd + 0084d19c', + / kdc_nonce / 18: h'0b7db12aaff56da3', + / kdc_cred_verify / 19: h'3fc54702aa56e1b2cb20284294c9106a + 63f91bac658d69351210a031d8fc7c5f + f3e4be39445b1a3e83e1510d1aca2f2e + 8a7c081c7645042b18aba9d1fad1bd9c' + } + + Figure 22: Example of KDC Authentication Credential Request- + Response to Obtain the Authentication Credential of the KDC + +4.6. /ace-group/GROUPNAME/policies + + This resource implements the GET handler. + +4.6.1. GET Handler + + The handler expects a GET request. + + In addition to what is defined in Section 4.1.2, the handler verifies + that the Client is a current member of the group. If the + verification fails, the KDC MUST reply with a 4.03 (Forbidden) error + response. The response MUST have Content-Format "application/ + concise-problem-details+cbor" and is formatted as defined in + Section 4.1.2. Within the Custom Problem Detail entry 'ace- + groupcomm-error', the value of the 'error-id' field MUST be set to 0 + ("Operation permitted only to group members"). + + If all verifications succeed, the handler replies with a 2.05 + (Content) response containing the list of policies for the group + identified by GROUPNAME. The payload of the response is formatted as + a CBOR map including only the 'group_policies' parameter defined in + Section 4.3.1 and specifying the current policies in the group. If + the KDC does not store any policy, the payload is formatted as a CBOR + byte string of zero length (0x40). + + The specific format and meaning of group policies MUST be specified + in application profiles of this specification (REQ20). + +4.6.1.1. Retrieve the Group Policies + + 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/GROUPNAME/ + policies endpoint at the KDC, which is formatted as defined in + Section 4.6.1 and where GROUPNAME identifies the group. + + Figure 23 gives an overview of the exchange described above, while + Figure 24 shows an example. + + Client KDC + | | + |-- Policies Request: GET /ace-group/GROUPNAME/policies -->| + | | + |<----------- Policies Response: 2.05 (Content) -----------| + | | + + Figure 23: Message Flow of Policies Request-Response + + Request: + + Header: GET (Code=0.01) + Uri-Host: "kdc.example.com" + Uri-Path: "ace-group" + Uri-Path: "g1" + Uri-Path: "policies" + + + Response: + + Header: Content (Code=2.05) + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload(in CBOR diagnostic notation): + { + / group_policies / 16: { + / Expiration Delta / 2: 120 + } + } + + Figure 24: Example of Policies Request-Response + +4.7. /ace-group/GROUPNAME/num + + This resource implements the GET handler. + +4.7.1. GET Handler + + The handler expects a GET request. + + In addition to what is defined in Section 4.1.2, the handler verifies + that the Client is a current member of the group. If the + verification fails, the KDC MUST reply with a 4.03 (Forbidden) error + response. The response MUST have Content-Format "application/ + concise-problem-details+cbor" and is formatted as defined in + Section 4.1.2. Within the Custom Problem Detail entry 'ace- + groupcomm-error', the value of the 'error-id' field MUST be set to 0 + ("Operation permitted only to group members"). + + If all verifications succeed, 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 before the new keying material is distributed. This number + is stored in persistent storage. + + The payload of the response is formatted as a CBOR integer. + +4.7.1.1. Retrieve the Keying Material Version + + 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/GROUPNAME/num endpoint at the + KDC, which is formatted as defined in Section 4.7.1 and where + GROUPNAME identifies the group. In particular, the version is + incremented by the KDC every time the group keying material is + renewed before it is distributed to the group members. + + Figure 25 gives an overview of the exchange described above, while + Figure 26 shows an example. + + Client KDC + | | + |---- Version Request: GET /ace-group/GROUPNAME/num ---->| + | | + |<---------- Version Response: 2.05 (Content) -----------| + | | + + Figure 25: Message Flow of Version Request-Response + + Request: + + Header: GET (Code=0.01) + Uri-Host: "kdc.example.com" + Uri-Path: "ace-group" + Uri-Path: "g1" + Uri-Path: "num" + + + Response: + + Header: Content (Code=2.05) + Content-Format: 60 (application/cbor) + Payload (in CBOR diagnostic notation): + 13 + + Figure 26: Example of Version Request-Response + +4.8. /ace-group/GROUPNAME/nodes/NODENAME + + This resource implements the GET, POST, and DELETE handlers. + + In addition to what is defined in Section 4.1.2, each of the handlers + performs the following two verifications. + + * The handler verifies that the Client is a current member of the + group. If the verification fails, the KDC MUST reply with a 4.03 + (Forbidden) error response. The response MUST have Content-Format + "application/concise-problem-details+cbor" and is formatted as + defined in Section 4.1.2. Within the Custom Problem Detail entry + 'ace-groupcomm-error', the value of the 'error-id' field MUST be + set to 0 ("Operation permitted only to group members"). + + * The handler verifies that the node name of the Client is equal to + NODENAME used in the url-path. If the verification fails, the + handler replies with a 4.03 (Forbidden) error response. + +4.8.1. GET Handler + + The handler expects a GET request. + + If all verifications succeed, the handler replies with a 2.05 + (Content) response containing both the group keying material and the + 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, which + includes the same fields of the response defined in Section 4.3.2. + In particular, the format for the group keying material is the same + as defined in the response of Section 4.3.2. If the 'exp' parameter + is included, the 'exi' parameter MUST also be included. If the + parameter 'exi' is included, its value specifies the residual + lifetime of the group keying material from the current time at the + KDC. + + The CBOR map can include additional parameters that specify the + individual keying material for the Client. The specific format of + individual keying material for group members or of the information to + derive such keying material MUST be defined in application profiles + of this specification (REQ27), together with the corresponding CBOR + map key that has to be registered in the "ACE Groupcomm Parameters" + registry defined in Section 11.7. + + Optionally, the KDC can make the sub-resource at /ace- + group/GROUPNAME/nodes/NODENAME also observable [RFC7641] for the + associated node. In case the KDC removes that node from the group + without having been explicitly asked for it, this allows the KDC to + send an unsolicited 4.04 (Not Found) response to the node as a + notification of eviction from the group (see Section 5). + + Note that the node could have also been observing the resource at + /ace-group/GROUPNAME in order to be informed of changes in the group + keying material. In such a case, this method would result in largely + overlapping notifications received for the resource at /ace-group/ + GROUPNAME and the sub-resource at /ace-group/GROUPNAME/nodes/ + NODENAME. + + In order to mitigate this, a node that supports the CoAP No-Response + Option [RFC7967] can use it when starting the observation of the sub- + resource at /ace-group/GROUPNAME/nodes/NODENAME. In particular, the + GET observation request can also include the No-Response option, with + value set to 2 (Not interested in 2.xx responses). + +4.8.1.1. Retrieve Group and Individual Keying Material + + When any of the following happens, a node MUST stop using the stored + group keying material to protect outgoing messages and SHOULD stop + using it to decrypt and verify incoming messages. + + * Upon expiration of the keying material, according to what is + indicated by the KDC through the 'exp' and/or 'exi' parameter + (e.g., in a Join Response) or to a pre-configured value. + + * Upon receiving a notification of revoked/renewed keying material + from the KDC, possibly as part of an update of the keying material + (rekeying) triggered by the KDC. + + * Upon receiving messages from other group members without being + able to retrieve the keying material to correctly decrypt them. + This may be due to rekeying messages previously sent by the KDC + that the Client was not able to receive or decrypt. + + In either case, if it wants to continue participating in the group + communication, the Client has to request the latest keying material + from the KDC. To this end, the Client sends a CoAP GET request to + the /ace-group/GROUPNAME/nodes/NODENAME endpoint at the KDC, + formatted as specified in Section 4.8.1. The Client can request the + latest keying material from the KDC before the currently stored, old + keying material reaches its expiration time. + + Note that policies can be set up so that the Client sends a Key + Distribution Request to the KDC only after a given number of received + messages could not be decrypted (because of failed decryption + processing or the inability to retrieve the necessary keying + material). + + It is application dependent and pertaining to the used secure message + exchange (e.g., [GROUP-OSCORE]) to set up these policies for + instructing Clients to retain incoming messages and for how long + (OPT11). This allows Clients to possibly decrypt such messages after + getting updated keying material, rather than just consider them + invalid messages to discard right away. + + After having failed to decrypt messages from another group member and + having sent a Key Distribution Request to the KDC, the Client might + end up retrieving the same, latest group keying material that it + already stores. In such a case, multiple failed decryptions might be + due to the message sender and/or the KDC that have changed their + authentication credential. Hence, the Client can retrieve such + latest authentication credentials by sending to the KDC an + Authentication Credential Request (see Sections 4.4.1.1 and 4.4.2.1) + and a KDC Authentication Credential Request (see Section 4.5.1.1), + respectively. + + The Client can also send to the KDC a Key Distribution Request + without having been triggered by a failed decryption of a message + from another group member, if the Client wants to be sure that it + currently stores the latest group keying material. If that is the + case, the Client will receive from the KDC the same group keying + material it already stores. + + Figure 27 gives an overview of the exchange described above, while + Figure 28 shows an example. + + Client KDC + | | + |------------------ Key Distribution Request: --------------->| + | GET /ace-group/GROUPNAME/nodes/NODENAME | + | | + |<-------- Key Distribution Response: 2.05 (Content) ---------| + | | + + Figure 27: Message Flow of Key Distribution Request-Response + + Request: + + Header: GET (Code=0.01) + Uri-Host: "kdc.example.com" + Uri-Path: "ace-group" + Uri-Path: "g1" + Uri-Path: "nodes" + Uri-Path: "c101" + + + Response: + + Header: Content (Code=2.05) + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload (in CBOR diagnostic notation, with "ind-key" being the + profile-specified label for individual keying material): + { + / gkty / 7: 65600, + / key / 8: h'73657373696f6e6b6579', + / num / 9: 12, + "ind-key": h'fcae9023' + } + + Figure 28: Example of Key Distribution Request-Response + +4.8.2. POST Handler + + The POST handler processes requests from a Client that asks for new + individual keying material, as required to process messages exchanged + in the group. + + The handler expects a POST request with an empty payload. + + In addition to what is defined in Section 4.1.2 and at the beginning + of Section 4.8, the handler verifies that this operation is + consistent with the set of roles that the Client has in the group + (REQ11). If the verification fails, the KDC MUST reply with a 4.00 + (Bad Request) error response. The response MUST have Content-Format + "application/concise-problem-details+cbor" and is formatted as + defined in Section 4.1.2. Within the Custom Problem Detail entry + 'ace-groupcomm-error', the value of the 'error-id' field MUST be set + to 1 ("Request inconsistent with the current roles"). + + If the KDC is currently not able to serve this request, i.e., to + generate new individual keying material for the requesting Client, + the KDC MUST reply with a 5.03 (Service unavailable) error response. + The response MUST have Content-Format "application/concise-problem- + details+cbor" and is formatted as defined in Section 4.1.2. Within + the Custom Problem Detail entry 'ace-groupcomm-error', the value of + the 'error-id' field MUST be set to 4 ("No available individual + keying material"). + + If all verifications succeed, the handler replies with a 2.04 + (Changed) response containing newly generated individual keying + material for the Client. 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 such + keying material MUST be defined in application profiles of this + specification (REQ27), together with the corresponding CBOR map key + that has to be registered in the "ACE Groupcomm Parameters" registry + defined in Section 11.7. + + The typical successful outcome consists in replying with newly + generated individual keying material for the Client, as defined + above. However, application profiles of this specification MAY also + extend this handler in order to achieve different akin outcomes + (OPT12), for instance: + + * Not providing the Client with newly generated individual keying + material, but rather rekeying the whole group, i.e., providing all + the current group members with newly generated group keying + material. + + * Both providing the Client with newly generated individual keying + material, as well as rekeying the whole group, i.e., providing all + the current group members with newly generated group keying + material. + + In either case, the handler may specify the new group keying material + as part of the 2.04 (Changed) response. + + Note that this handler is not intended to accommodate requests from a + group member to trigger a group rekeying, whose scheduling and + execution is an exclusive prerogative of the KDC (also see related + security considerations in Section 10.2). + +4.8.2.1. Request to Change Individual Keying Material + + A Client may ask the KDC for new individual keying material. For + instance, this can be due to the expiration of such individual keying + material or to the exhaustion of Authenticated Encryption with + Associated Data (AEAD) nonces if an AEAD encryption algorithm is used + for protecting communications in the group. An example of individual + keying material can simply be an individual encryption key associated + with the Client. Hence, the Client may ask for a new individual + encryption key or for new input material to derive it. + + To this end, the Client performs a Key Renewal Request-Response + exchange with the KDC, i.e., it sends a CoAP POST request to the + /ace-group/GROUPNAME/nodes/NODENAME endpoint at the KDC, which is + formatted as defined in Section 4.8.1, where GROUPNAME identifies the + group and NODENAME is the node name of the Client. + + Figure 29 gives an overview of the exchange described above, while + Figure 30 shows an example. + + Client KDC + | | + |---------------- Key Renewal Request: ---------------->| + | POST /ace-group/GROUPNAME/nodes/NODENAME | + | | + |<-------- Key Renewal Response: 2.04 (Changed) --------| + | | + + Figure 29: Message Flow of Key Renewal Request-Response + + Request: + + Header: POST (Code=0.02) + Uri-Host: "kdc.example.com" + Uri-Path: "ace-group" + Uri-Path: "g1" + Uri-Path: "nodes" + Uri-Path: "c101" + + + Response: + + Header: Changed (Code=2.04) + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload (in CBOR diagnostic notation, with "ind-key" being the + profile-specified label for individual keying material): + { + "ind-key": h'b71acc28' + } + + Figure 30: Example of Key Renewal Request-Response + + Note that there is a difference between the Key Renewal Request in + this section and the Key Distribution Request in Section 4.8.1.1. + The former asks the KDC for new individual keying material, while the + latter asks the KDC for the current group keying material together + with the current individual keying material. + + As discussed in Section 4.8.2, application profiles of this + specification may define alternative outcomes for the Key Renewal + Request-Response exchange (OPT12), where the provisioning of new + individual keying material is replaced by or combined with the + execution of a whole group rekeying. + +4.8.3. DELETE Handler + + The DELETE handler removes the node identified by NODENAME from the + group identified by GROUPNAME. + + The handler expects a DELETE request with an empty payload. + + In addition to what is defined in Section 4.1.2, the handler verifies + that the Client is a current member of the group. If the + verification fails, the KDC MUST reply with a 4.03 (Forbidden) error + response. The response MUST have Content-Format "application/ + concise-problem-details+cbor" and is formatted as defined in + Section 4.1.2. Within the Custom Problem Detail entry 'ace- + groupcomm-error', the value of the 'error-id' field MUST be set to 0 + ("Operation permitted only to group members"). + + If all verification succeeds, the handler performs the actions + defined in Section 5 and replies with a 2.02 (Deleted) response with + an empty payload. + +4.8.3.1. Leave the Group + + A Client can actively request to leave the group. In this case, the + Client sends a CoAP DELETE request to the endpoint /ace- + group/GROUPNAME/nodes/NODENAME at the KDC, where GROUPNAME identifies + the group and NODENAME is the Client's node name. + + Note that, after having left the group, the Client may wish to join + it again. Then, as long as the Client is still authorized to join + the group, i.e., the associated access token is still valid, the + Client can request to rejoin the group directly to the KDC (see + Section 4.3.1.1) without having to retrieve a new access token from + the AS. + +4.9. /ace-group/GROUPNAME/nodes/NODENAME/cred + + This resource implements the POST handler. + +4.9.1. POST Handler + + The POST handler is used to replace the stored authentication + credential of this Client (identified by NODENAME) with the one + specified in the request at the KDC for the group identified by + GROUPNAME. + + The handler expects a POST request with the payload as specified in + Section 4.3.1, with the difference that the payload includes only the + parameters 'client_cred', 'cnonce', and 'client_cred_verify'. + + The PoP evidence included in the 'client_cred_verify' parameter is + computed in the same way considered in Section 4.3.1 and defined by + the specific application profile (REQ14) by using the following to + build the PoP input: i) the same scope entry specified by the Client + in the 'scope' parameter of the latest Join Request that the Client + sent to the KDC in order to join the group identified by GROUPNAME; + ii) the latest N_S value stored by the Client; and iii) a new N_C + nonce generated by the Client and specified in the parameter 'cnonce' + of this request. + + An example of PoP input to compute 'client_cred_verify' using CBOR + encoding is given in Figure 31. + + It is REQUIRED for application profiles to define the specific + formats of authentication credentials that are acceptable to use in + the group (REQ6). + + In addition to what is defined in Section 4.1.2 and at the beginning + of Section 4.8, the handler verifies that this operation is + consistent with the set of roles that the node has in the group. If + the verification fails, the KDC MUST reply with a 4.00 (Bad Request) + error response. The response MUST have Content-Format "application/ + concise-problem-details+cbor" and is formatted as defined in + Section 4.1.2. Within the Custom Problem Detail entry 'ace- + groupcomm-error', the value of the 'error-id' field MUST be set to 1 + ("Request inconsistent with the current roles"). + + If the KDC cannot retrieve the 'kdcchallenge' associated with this + Client (see Section 3.3), the KDC MUST reply with a 4.00 (Bad + Request) error response, which MUST also have Content-Format + "application/ace-groupcomm+cbor". The payload of the error response + is a CBOR map including the 'kdcchallenge' parameter, which specifies + a newly generated 'kdcchallenge' value. In such a case, the KDC MUST + store the newly generated value as the 'kdcchallenge' value + associated with this Client, replacing the currently stored value (if + any). + + Otherwise, the handler checks that the authentication credential + specified in the 'client_cred' field is valid for the group + identified by GROUPNAME. That is, the handler checks that the + authentication credential is encoded according to the format used in + the group, is intended for the public key algorithm used in the + group, and is aligned with the possible associated parameters used in + the group. If that cannot be successfully verified, the handler MUST + reply with a 4.00 (Bad Request) error response. The response MUST + have Content-Format "application/concise-problem-details+cbor" and is + formatted as defined in Section 4.1.2. Within the Custom Problem + Detail entry 'ace-groupcomm-error', the value of the 'error-id' field + MUST be set to 2 ("Authentication credential incompatible with the + group configuration"). + + Otherwise, the handler verifies the PoP evidence conveyed in the + 'client_cred_verify' parameter of the request, by using the + authentication credential specified in the 'client_cred' parameter as + well as the same way considered in Section 4.3.1 and defined by the + specific application profile (REQ14). If the PoP evidence does not + pass verification, the handler MUST reply with a 4.00 (Bad Request) + error response. The response MUST have Content-Format "application/ + concise-problem-details+cbor" and is formatted as defined in + Section 4.1.2. Within the Custom Problem Detail entry 'ace- + groupcomm-error', the value of the 'error-id' field MUST be set to 3 + ("Invalid proof-of-possession evidence"). + + If all verifications succeed, the handler performs the following + actions. + + * The handler associates the authentication credential from the + 'client_cred' parameter of the request with the node identifier + NODENAME, as well as with the access token associated with the + node identified by NODENAME. + + * In the stored list of group members' authentication credentials + for the group identified by GROUPNAME, the handler replaces the + authentication credential of the node identified by NODENAME with + the authentication credential specified in the 'client_cred' + parameter of the request. + + Then, the handler replies with a 2.04 (Changed) response, which does + not include a payload. + + scope, N_S, and N_C expressed in CBOR diagnostic notation: + scope = h'826667726f7570316673656e646572' + N_S = h'018a278f7faab55a' + N_C = h'0446baefc56111bf' + + + scope, N_S, and N_C as CBOR encoded byte strings: + scope = 0x4f826667726F7570316673656E646572 + N_S = 0x48018a278f7faab55a + N_C = 0x480446baefc56111bf + + PoP input: + 0x4f 826667726f7570316673656e646572 + 48 018a278f7faab55a 48 0446baefc56111bf + + Figure 31: Example of PoP Input to Compute 'client_cred_verify' + Using CBOR Encoding + +4.9.1.1. Uploading an Authentication Credential + + In case the KDC maintains the authentication credentials of group + members, a node in the group can contact the KDC to upload a new + authentication credential to use in the group and to replace the + currently stored one. + + To this end, the Client performs an Authentication Credential Update + Request-Response exchange with the KDC, i.e., it sends a CoAP POST + request to the /ace-group/GROUPNAME/nodes/NODENAME/cred endpoint at + the KDC, where GROUPNAME identifies the group and NODENAME is the + Client's node name. + + The request is formatted as specified in Section 4.9.1. + + Figure 32 gives an overview of the exchange described above, while + Figure 33 shows an example. + + Client KDC + | | + |----------- Authentication Credential Update Request: --------->| + | POST /ace-group/GROUPNAME/nodes/NODENAME/cred | + | | + |<-- Authentication Credential Update Response: 2.04 (Changed) --| + | | + + Figure 32: Message Flow of Authentication Credential Update + Request-Response + + Request: + + Header: POST (Code=0.02) + Uri-Host: "kdc.example.com" + Uri-Path: "ace-group" + Uri-Path: "g1" + Uri-Path: "nodes" + Uri-Path: "c101" + Uri-Path: "cred" + Content-Format: 261 (application/ace-groupcomm+cbor) + Payload (in CBOR diagnostic notation): + { + / client_cred / 5: h'a2026008a101a501020241fc20012158 + 20bac5b11cad8f99f9c72b05cf4b9e26 + d244dc189f745228255a219a86d6a09e + ff22582020138bf82dc1b6d562be0fa5 + 4ab7804a3a64b6d72ccfed6b6fb6ed28 + bbfc117e', + / cnonce / 6: h'0446baefc56111bf', + / client_cred_verify / 24: h'e2aeafd40d69d19dfe6e52077c5d7ff4 + e408282cbefb5d06cbf414af2e19d982 + ac45ac98b8544c908b4507de1e90b717 + c3d34816fe926a2b98f53afd2fa0f30a' + } + + + Response: + + Header: Changed (Code=2.04) + + Figure 33: Example of Authentication Credential Update Request- + Response + + Additionally, after updating its own authentication credential, a + group member MAY send to the group a number of requests, including an + identifier of the updated authentication credential, to notify other + group members that they have to retrieve it. How this is done + depends on the group communication protocol used and therefore is + application profile specific (OPT13). + +5. Removal of a Group Member + + A Client identified by NODENAME may be removed from a group + identified by GROUPNAME where it is a member, for example, due to the + following reasons. + + 1. The Client explicitly asks to leave the group, as defined in + Section 4.8.3.1. + + 2. The node has been found compromised or is suspected so. The KDC + is expected to determine that a group member has to be evicted + either through its own means or based on information that it + obtains from a trusted source (e.g., an Intrusion Detection + System or an issuer of authentication credentials). Additional + mechanics, protocols, and interfaces at the KDC that can support + this are out of the scope of this document. + + 3. The Client's authorization to be a group member with the current + roles is not valid anymore, i.e., the access token has expired or + has been revoked. If the AS provides token introspection (see + Section 5.9 of [RFC9200]), the KDC can optionally use it and + check whether the Client is still authorized. + + In all cases, the KDC performs the following actions. + + * The KDC removes the Client from the list of current members of the + group. When doing so, the KDC deletes the currently stored value + of 'clientchallenge' for that Client, which was specified in the + latest Join Request that the Client sent to the KDC in order to + join the group (see Section 4.3.1). + + * In case of forced eviction, i.e., for cases 2 and 3 above, the KDC + deletes the authentication credential of the removed Client if it + acts as a repository of authentication credentials for group + members. + + * If the removed Client is registered as an observer of the group- + membership resource at /ace-group/GROUPNAME, the KDC removes the + Client from the list of observers of that resource. + + * If the sub-resource /nodes/NODENAME was created for the removed + Client, the KDC deletes that sub-resource. + + In case of forced eviction, i.e., for cases 2 and 3 above, the KDC + MAY explicitly inform the removed Client by means of the following + methods. + + - If the evicted Client implements the 'control_uri' resource + (see Section 4.3.1), the KDC sends a DELETE request to that + resource, targeting the URI specified in the 'control_uri' + parameter of the Join Request (see Section 4.3.1). + + - If the evicted Client is observing its associated sub-resource + at /ace-group/GROUPNAME/nodes/NODENAME (see Section 4.8.1), the + KDC sends an unsolicited 4.04 (Not Found) error response, which + does not include the Observe Option and indicates that the + observed resource has been deleted (see Section 3.2 of + [RFC7641]). + + The response MUST have Content-Format "application/concise- + problem-details+cbor" and is formatted as defined in + Section 4.1.2. Within the Custom Problem Detail entry 'ace- + groupcomm-error', the value of the 'error-id' field MUST be set + to 5 ("Group membership terminated"). + + * If forward security is prescribed by application policies + installed at the KDC or by the used application profile of this + specification, then the KDC MUST generate new group keying + material and securely distribute it to all the current group + members except the leaving node (see Section 6). + +6. Group Rekeying Process + + A group rekeying is started and driven by the KDC. The KDC is not + intended to accommodate explicit requests from group members to + trigger a group rekeying. That is, the scheduling and execution of a + group rekeying is an exclusive prerogative of the KDC. Some reasons + that can trigger a group rekeying include a change in the group + membership, the current group keying material approaching its + expiration time, or a regularly scheduled update of the group keying + material. + + The KDC can perform a group rekeying before the current group keying + material expires, unless it is acceptable or there are reasons to + temporarily pause secure communications in the group, following the + expiration of the current keying material. For example, a pause in + the group communication might have been scheduled to start anyway + when the group keying material expires, e.g., to allow maintenance + operations on the group members. As another example, the KDC might + be carrying out a verification that some group members are seemingly + compromised and to be evicted, and this needs to be completed in + order to appropriately define and schedule the exact rekeying process + to perform. As a result, the KDC could delay the execution of the + group rekeying. + + The KDC MUST increment the version number NUM of the current keying + material before distributing the newly generated keying material with + version number NUM+1 to the group. Once the group rekeying is + completed, the KDC MUST delete the old keying material and SHOULD + store the newly distributed keying material in persistent storage. + + Distributing the new group keying material requires the KDC to send + multiple rekeying messages to the group members. Depending on the + rekeying scheme used in the group and the reason that has triggered + the rekeying process, each rekeying message can be intended for one + or multiple group members, hereafter referred to as target group + members. The KDC MUST support at least the "Point-to-Point" group + rekeying scheme described in Section 6.1 and MAY support additional + ones. + + Each rekeying message MUST have Content-Format "application/ace- + groupcomm+cbor" and its payload is formatted as a CBOR map, which + MUST include at least the information specified in the Key + Distribution Response message (see Section 4.3.2), i.e., the + parameters 'gkty', 'key', and 'num' defined in Section 4.3.1. The + CBOR map SHOULD also include the parameters 'exp' and 'exi'. If the + 'exp' parameter is included, the 'exi' parameter MUST also be + included. The CBOR map MAY include the parameter 'mgt_key_material' + to specify new administrative keying material for the target group + members if it is relevant for the used rekeying scheme. + + A rekeying message may include additional information, depending on + the rekeying scheme used in the group, the reason that has triggered + the rekeying process, and the specific target group members. In + particular, if the group rekeying is performed due to one or multiple + Clients that have joined the group and the KDC acts as a repository + of authentication credentials of the group members, then a rekeying + message MAY also include the authentication credentials that those + Clients use in the group, together with the roles and node identifier + that each of such Clients has in the group. It is RECOMMENDED to + specify this information by means of the parameters 'creds', + 'peer_roles', and 'peer_identifiers', like it is done in the Join + Response message (see Section 4.3.1). + + The complete format of a rekeying message, including the encoding and + content of the 'mgt_key_material' parameter, has to be defined in + separate specifications aimed at profiling the used rekeying scheme + in the context of the used application profile of this specification. + As a particular case, an application profile of this specification + MAY define additional information to include in rekeying messages for + the "Point-to-Point" group rekeying scheme defined in Section 6.1 + (OPT14). + + Consistently with the used group rekeying scheme, the actual delivery + of rekeying messages can occur through different approaches, as + discussed in Sections 6.1 and 6.2. + + The possible, temporary misalignment of the keying material stored by + the different group members due to a group rekeying is discussed in + Section 6.3. Further security considerations related to the group + rekeying process are compiled in Section 10.2. + +6.1. Point-to-Point Group Rekeying + + A point-to-point group rekeying consists in the KDC sending one + individual rekeying message to each target group member. In + particular, the rekeying message is protected by means of the secure + communication association between the KDC and the target group member + in question, as per the used application profile of this + specification and the used transport profile of ACE. + + This is the approach taken by the basic "Point-to-Point" group + rekeying scheme, which the KDC can explicitly indicate in the Join + Response (see Section 4.3.1), through the 'rekeying_scheme' parameter + specifying the value 0. + + When taking this approach in the group identified by GROUPNAME, the + KDC can practically deliver the rekeying messages to the target group + members in different, coexisting ways. + + * The KDC SHOULD make the /ace-group/GROUPNAME resource observable + [RFC7641]. Thus, upon performing a group rekeying, the KDC can + distribute the new group keying material through individual + notification responses sent to the target group members that are + also observing that resource. + + In case the KDC deletes the group (and thus deletes the /ace- + group/GROUPNAME resource), relying on CoAP Observe as discussed + above also allows the KDC to send an unsolicited 4.04 (Not Found) + response to each observer group member as a notification of group + termination. The response MUST have Content-Format "application/ + concise-problem-details+cbor" and is formatted as defined in + Section 4.1.2. Within the Custom Problem Detail entry 'ace- + groupcomm-error', the value of the 'error-id' field MUST be set to + 6 ("Group deleted"). + + * If a target group member specified a URI in the 'control_uri' + parameter of the Join Request upon joining the group (see + Section 4.3.1), the KDC can provide that group member with the new + group keying material by sending a unicast POST request to that + URI. + + A Client that does not plan to observe the /ace-group/GROUPNAME + resource at the KDC SHOULD specify a URI in the 'control_uri' + parameter of the Join Request upon joining the group. + + If the KDC has to send a rekeying message to a target group member, + but this did not include the 'control_uri' parameter in the Join + Request and is not a registered observer for the /ace-group/GROUPNAME + resource, then that target group member will not be able to + participate in the group rekeying. Later on, after having repeatedly + failed to successfully exchange secure messages in the group, that + group member can retrieve the current group keying material from the + KDC, by sending a GET request to the /ace-group/GROUPNAME or /ace- + group/GROUPNAME/nodes/NODENAME resource at the KDC (see Sections + 4.3.2 and 4.8.1, respectively). + + Figure 34 provides an example of point-to-point group rekeying. In + particular, the example makes the following assumptions: + + * The group currently consists of four group members, namely C1, C2, + C3, and C4. + + * Each group member, when joining the group, provided the KDC with a + URI in the 'control_uri' parameter with url-path "grp-rek". + + * Before the group rekeying is performed, the keying material used + in the group has version number num=5. + + * The KDC performs the group rekeying in such a way to evict the + group member C3, which has been found to be compromised. + + In the example, the KDC individually rekeys the group members + intended to remain in the group (i.e., C1, C2, and C4) by means of + one rekeying message each. + + .----------------------------------------------------------------. + | KDC | + '----------------------------------------------------------------' + | | | + Group | Group | Group | + keying | keying | keying | + material | material | material | + (num=6) | (num=6) | (num=6) | + | | | + | | | + | | | + v v v + + /grp-rek /grp-rek /grp-rek /grp-rek + .--------. .--------. .--------. .--------. + | C1 | | C2 | | C3 | | C4 | + '--------' '--------' '--------' '--------' + [TO BE EVICTED] + | | + \____________ Stored group keying material (num=5) _____________/ + + Figure 34: Example of Message Exchanges for a Point-to-Point + Group Rekeying + +6.2. One-to-Many Group Rekeying + + This section provides high-level recommendations on how the KDC can + rekey a group by means of a more efficient and scalable group + rekeying scheme, e.g., [RFC2093], [RFC2094], and [RFC2627]. That is, + each rekeying message might be, and likely is, intended for multiple + target group members, and thus can be delivered to the whole group, + although possible to decrypt only for the actual target group + members. + + This yields an overall lower number of rekeying messages, thus + potentially reducing the overall time required to rekey the group. + On the other hand, it requires the KDC to provide and use additional + administrative keying material to protect the rekeying messages and + to additionally sign them to ensure source authentication (see + Section 6.2.1). + + Compared to a group rekeying performed in a point-to-point fashion + (see Section 6.1), a one-to-many group rekeying typically pays off in + large-scale groups due to the reduced time for completing the + rekeying, a more efficient utilization of network resources, and a + reduced performance overhead at the KDC. To different extents, it + also requires individual group members to locally perform additional + operations in order to handle the administrative keying material and + verify source authentication of rekeying messages. Therefore, one- + to-many group rekeying schemes and their employment ought to ensure + that the experienced performance overhead on the group members also + remains bearable for resource-constrained devices. + + The exact set of rekeying messages to send, their content and format, + the administrative keying material to use to protect them, as well as + the set of target group members depend on the specific group rekeying + scheme and are typically affected by the reason that has triggered + the group rekeying. Details about the data content and format of + rekeying messages have to be defined by separate documents profiling + the use of the group rekeying scheme in the context of the used + application profile of this specification. + + When one of these group rekeying schemes is used, the KDC provides + related information to a Client joining the group in the Join + Response message (see Section 4.3.1). In particular, the + 'rekeying_scheme' parameter indicates the rekeying scheme used in the + group (if no default scheme can be assumed); the 'control_group_uri' + parameter, if present, specifies a URI whose addressing information + is, e.g., a multicast IP address where the KDC will send the rekeying + messages for that group as intended to reach all the group members; + and the 'mgt_key_material' parameter specifies a subset of the + administrative keying material intended for that particular joining + Client to have, as used to protect the rekeying messages sent to the + group when also intended for that joining Client. + + Rekeying messages can be protected at the application layer by using + COSE [RFC9052] and the administrative keying material as prescribed + by the specific group rekeying scheme (see Section 6.2.1). After + that, the delivery of protected rekeying messages to the intended + target group members can occur in different ways, such as the + following ones. + + Over multicast - In this case, the KDC simply sends a rekeying + message as a CoAP request addressed to the URI specified in the + 'control_group_uri' parameter of the Join Response (see + Section 4.3.1). + + If a particular rekeying message is intended for a single target + group member, the KDC may alternatively protect the message using + the secure communication association with that group member and + deliver the message like when using the "Point-to-Point" group + rekeying scheme (see Section 6.1). + + Through a pub-sub communication model - In this case, the KDC acts + as a publisher and publishes each rekeying message to a specific + "rekeying topic", which is associated with the group and is hosted + at a Broker server. Following their group joining, the group + members subscribe to the rekeying topic at the Broker, thus + receiving the group rekeying messages as they are published by the + KDC. + + In order to make such message delivery more efficient, the + rekeying topic associated with a group can be further organized + into subtopics. For instance, the KDC can use a particular + subtopic to address a particular set of target group members + during the rekeying process as possibly aligned to a similar + organization of the administrative keying material (e.g., a key + hierarchy). + + The setup of rekeying topics at the Broker as well as the + discovery of the topics at the Broker for group members are + application specific. A possible way is for the KDC to provide + such information in the Join Response message (see Section 4.3.1) + by means of a new parameter analogous to 'control_group_uri' and + specifying the URI(s) of the rekeying topic(s) that a group member + has to subscribe to at the Broker. + + Regardless of the specifically used delivery method, the group + rekeying scheme can perform a possible rollover of the administrative + keying material through the same sent rekeying messages. Actually, + such a rollover occurs every time a group rekeying is performed upon + the leaving of group members, which have to be excluded from future + communications in the group. + + From a high-level point of view, each group member stores only a + subset of the overall administrative keying material, which is + obtained upon joining the group. Then, when a group rekeying occurs: + + * Each rekeying message is protected by using a (most convenient) + key from the administrative keying material such that: i) the used + key is not stored by any node leaving the group, i.e., the key is + safe to use and does not have to be renewed; and ii) the used key + is stored by all the target group members that indeed have to be + provided with new group keying material to protect communications + in the group. + + * Each rekeying message includes not only the new group keying + material intended for all the rekeyed group members but also any + new administrative keys that: i) are pertaining to and supposed to + be stored by the target group members; and ii) had to be updated + because leaving group members do store the previous version. + + Further details depend on the specific rekeying scheme used in the + group. + + Figure 35 provides an example of a one-to-many group rekeying over + multicast. In particular, the example makes the following + assumptions: + + * The group currently consists of four group members, namely C1, C2, + C3, and C4. + + * Each group member, when joining the group, provided the KDC with a + URI in the 'control_uri' parameter with url-path "grp-rek". + + * Each group member, when joining the group, received from the KDC a + URI in the 'control_group_uri' parameter, specifying the multicast + address MULT_ADDR and url-path "grp-mrek". + + * Before the group rekeying is performed, the keying material used + in the group has version number num=5. + + * The KDC performs the group rekeying in such a way to evict the + group member C3, which has been found to be compromised. + + In the example, the KDC determines that the most convenient way to + perform a group rekeying that evicts C3 is as follows. + + First, the KDC sends one rekeying message over multicast to the + multicast address MULT_ADDR and the url-path "grp-mrek". In the + figure, the message is denoted with solid arrows. The message is + protected with a non-compromised key from the administrative keying + material that only C1 and C2 store. Therefore, even though all the + group members receive this message, only C1 and C2 are able to + decrypt it. The message includes: the new group keying material with + version number num=6 and new keys from the administrative keying + material to replace those stored by the group members C1, C2, and C3. + + After that, the KDC sends one rekeying message addressed individually + to C4 and with url-path "grp-rek". In the figure, the message is + denoted with a dotted arrow. The message is protected with the + secure association shared between C4 and the KDC. The message + includes: the new group keying material with version number num=6 and + new keys from the administrative keying material to replace those + stored by both C4 and C3. + + .---------------------------------------------------------------------. + | KDC | + '---------------------------------------------------------------------' + | : + * Group keying material (num=6) | * Group keying : + * Updated administrative | material (num=6) : + keying material for C1 and C2 | * Updated administrative : + | keying material for C4 : + | : + | : + +------------+-------------+--------------+ : + | | | | : + | | | | : + v v v v v + + /grp-mrek /grp-mrek /grp-mrek /grp-mrek /grp-rek + .--------. .--------. .-----------. .---------------------------. + | C1 | | C2 | | C3 | | C4 | + '--------' '--------' '-----------' '---------------------------' + [TO BE EVICTED] + | | + \_______________ Stored group keying material (num=5) ________________/ + + Figure 35: Example of Message Exchanges for a One-to-Many Group + Rekeying + +6.2.1. Protection of Rekeying Messages + + When using a group rekeying scheme relying on one-to-many rekeying + messages, the actual data content of each rekeying message is + prepared according to what the rekeying scheme prescribes. + + The following describes one possible method for the KDC to protect + the rekeying messages when using the administrative keying material. + + The method assumes that the following holds for the administrative + keying material specified in the 'mgt_key_material' parameter of the + Join Response (see Section 4.3.1). + + * The encryption algorithm SHOULD be the same one used to protect + communications in the group. + + * The included symmetric encryption keys are accompanied by a + corresponding and unique key identifier assigned by the KDC. + + * A Base IV is also included with the same size of the AEAD nonce + considered by the encryption algorithm to use. + + First, the KDC computes a COSE_Encrypt0 object as follows. + + * The encryption key to use is selected from the administrative + keying material, as defined by the rekeying scheme used in the + group. + + * The plaintext is the actual data content of the current rekeying + message. + + * The Additional Authenticated Data (AAD) is empty unless otherwise + specified by separate documents profiling the use of the group + rekeying scheme. + + * Since the KDC is the only sender of rekeying messages, the AEAD + nonce can be computed as follows, where NONCE_SIZE is the size in + bytes of the AEAD nonce. Separate documents profiling the use of + the group rekeying scheme may define alternative ways to compute + the AEAD nonce. + + The KDC considers the following values. + + - COUNT: as a 2-byte unsigned integer associated with the used + encryption key. Its value is set to 0 when starting to perform + a new group rekeying instance and is incremented after each use + of the encryption key. + + - NEW_NUM: as the version number of the new group keying material + to distribute in this rekeying instance, left-padded with zeros + to exactly NONCE_SIZE - 2 bytes. + + Then, the KDC computes a Partial IV as the byte string + concatenation of COUNT and NEW_NUM in this order. Finally, the + AEAD nonce is computed as the XOR between the Base IV and the + Partial IV. + + In order to comply with the security requirements of AEAD + encryption algorithms, the KDC MUST NOT reuse the same pair (AEAD + encryption key, AEAD nonce). For example, this includes not using + the same encryption key from the administrative keying material + more than 2^16 times during the same rekeying instance. + + * The protected header of the COSE_Encrypt0 object MUST include the + following parameters. + + - 'alg': specifying the used encryption algorithm. + + - 'kid': specifying the identifier of the encryption key from the + administrative keying material used to protect the current + rekeying message. + + * The unprotected header of the COSE_Encrypt0 object MUST include + the 'Partial IV' parameter with the value of the Partial IV + computed above. + + In order to ensure source authentication, each rekeying message + protected with the administrative keying material MUST be signed by + the KDC. To this end, the KDC computes a countersignature of the + COSE_Encrypt0 object, as described in Sections 3.2 and 3.3 of + [RFC9338]. In particular, the following applies when computing the + countersignature. + + * The Countersign_structure contains the context text string + "CounterSignature0". + + * The private key of the KDC is used as the signing key. + + * The payload is the ciphertext of the COSE_Encrypt0 object. + + * The Additional Authenticated Data (AAD) is empty, unless otherwise + specified by separate documents profiling the use of a group + rekeying scheme. + + * The protected header of the signing object MUST include the + parameter 'alg', which specifies the used signature algorithm. + + If the source authentication of messages exchanged in the group is + also ensured by means of signatures, then rekeying messages MUST be + signed using the same signature algorithm and related parameters. + Also, the KDC's authentication credential including the public key to + use for signature verification MUST be provided in the Join Response + through the 'kdc_cred' parameter, together with the corresponding + proof-of-possession (PoP) evidence in the 'kdc_cred_verify' + parameter. + + If source authentication of messages exchanged in the group is not + ensured by means of signatures, then the administrative keying + material conveyed in the 'mgt_key_material' parameter of the Join + Response sent by KDC (see Section 4.3.1) MUST also comprise a KDC's + authentication credential including the public key to use for + signature verification, together with the corresponding PoP evidence. + Within the 'mgt_key_material' parameter, it is RECOMMENDED to specify + this information by using the same format and encoding used for the + parameters 'kdc_cred', 'kdc_nonce', and 'kdc_cred_verify' in the Join + Response. It is up to separate documents profiling the use of the + group rekeying scheme to specify such details. + + After that, the KDC specifies the computed countersignature in the + 'Countersignature0 version 2' header parameter of the COSE_Encrypt0 + object. + + Finally, the KDC specifies the COSE_Encrypt0 object as payload of a + CoAP request, which is sent to the target group members as per the + used message delivery method. + +6.3. Misalignment of Group Keying Material + + 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 group + keying material. However, the recipient receives the message after + having received the new group keying material, hence it is not able + to correctly process the message. A possible way to limit the impact + of this issue is to preserve the old, retained group keying material + for a maximum amount of time defined by the application, during which + such group keying material is used solely for processing incoming + messages. By doing so, the recipient can still temporarily process + received messages also by using the old, retained group keying + material. Note that a former (compromised) group member can take + advantage of this by sending messages protected with the old, + retained group keying material. Therefore, a conservative + application policy should not admit the storage of old group keying + material. Eventually, the sender will have obtained the new group + keying material too and can possibly resend the message protected + with such keying material. + + In the second case, the sender protects a message using the new group + keying material, but the recipient receives that message before + having received the new group keying material. Therefore, the + recipient will not be able to correctly process the message and hence + will discard it. If the recipient receives the new group keying + material shortly after that and the application at the sender + endpoint performs 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 the latest group keying + material according to an application-defined policy, for instance, + after a given number of unsuccessfully decrypted incoming messages. + +7. Extended Scope Format + + This section defines an extended format of binary-encoded scope, + which additionally specifies the semantics used to express the same + access control information from the corresponding original scope. + + As also discussed in Section 3.2, this enables a Resource Server to + unambiguously process a received access token, also in case the + Resource Server runs multiple applications or application profiles + that involve different scope semantics. + + The extended format is intended only for the 'scope' claim of access + tokens for the cases where the claim takes a CBOR byte string as the + value. That is, the extended format does not apply to the 'scope' + parameter included in ACE messages, i.e., the Authorization Request + and Authorization Response exchanged between the Client and the + Authorization Server (see Sections 5.8.1 and 5.8.2 of [RFC9200]), the + AS Request Creation Hints message from the Resource Server (see + Section 5.3 of [RFC9200]), and the Introspection Response from the + Authorization Server (see Section 5.9.2 of [RFC9200]). + + The value of the 'scope' claim following the extended format is + composed as follows. Given the original scope using semantics SEM + and encoded as a CBOR byte string, the corresponding extended scope + consists of the same CBOR byte string enclosed by a CBOR tag + [RFC8949], whose tag number identifies the semantics SEM. + + The resulting tagged CBOR byte string is used as the value of the + 'scope' claim of the access token. + + Figures 36 and 37 build on the examples in Section 3.1 and show the + corresponding extended scopes. + + ;# include rfc9237 + + gname = tstr + + permissions = uint .bits roles + + roles = &( + Requester: 1, + Responder: 2, + Monitor: 3, + Verifier: 4 + ) + + scope_entries = AIF-Generic<gname, permissions> + + scope = bstr .cbor scope_entries + + extended_scope = #6.<TAG_FOR_THIS_SEMANTICS>(scope) + + TAG_FOR_THIS_SEMANTICS = uint + + Figure 36: Example of Extended scope Using AIF + + gname = tstr + + role = tstr + + scope_entry = [ gname , ? ( role / [ 2*role ] ) ] + + scope_entries = [ * scope_entry ] + + scope = bstr .cbor scope_entries + + extended_scope = #6.<TAG_FOR_THIS_SEMANTICS>(scope) + + TAG_FOR_THIS_SEMANTICS = uint + + Figure 37: Example of Extended scope Using the Textual Format, + with the Role Identifiers Encoded as Text Strings + + The usage of the extended scope format is not limited to application + profiles of this specification or to applications based on group + communication. Rather, it is generally applicable to any application + and application profile where access control information in the + access token is expressed as a binary-encoded scope. + + Applications and application profiles using the extended format of + scope have to specify which CBOR tag from [CBOR.Tags] is used for + identifying the scope semantics or to register a new CBOR tag if a + suitable one does not exist already (REQ28). In case there is an + already existing, suitable CBOR tag, a new CBOR tag should not be + registered in order to avoid code point squatting. + + If the binary-encoded scope uses semantics associated with a + registered CoAP Content-Format [RFC7252] [CoAP.Content.Formats], then + a suitable CBOR tag associated with that CoAP Content-Format would + already be registered, as defined in Section 4.3 of [RFC9277]. + + This is especially relevant when the binary encoded scope uses AIF. + That is, it is expected that the definition of an AIF-specific data + model comes together with the registration of CoAP Content-Formats + for the relevant combinations of its Toid and Tperm values. As + discussed above, this yields the automatic registration of the CBOR + tags associated with those CoAP Content-Formats. + +8. ACE Groupcomm Parameters + + This specification defines a number of parameters used during the + second phase of the key provisioning process, i.e., after the + exchange after the exchange of Token Transfer Request and Response. + The table below summarizes them and specifies the CBOR map keys to + use instead of the full descriptive names. + + Note that the media type "application/ace-groupcomm+cbor" MUST be + used when these parameters are transported in the respective CBOR map + entries. + + +=======================+======+========================+===========+ + | Name | CBOR | CBOR Type | Reference | + | | Key | | | + +=======================+======+========================+===========+ + | gid | 0 | array | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | gname | 1 | array of tstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | guri | 2 | array of tstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | scope | 3 | bstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | get_creds | 4 | Null or array | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | client_cred | 5 | bstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | cnonce | 6 | bstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | gkty | 7 | int or tstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | key | 8 | See the "ACE | RFC 9594 | + | | | Groupcomm Key | | + | | | Types" registry | | + +-----------------------+------+------------------------+-----------+ + | num | 9 | int | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | ace_groupcomm_profile | 10 | int | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | exp | 11 | uint | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | exi | 12 | uint | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | creds | 13 | array | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | peer_roles | 14 | array | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | peer_identifiers | 15 | array | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | group_policies | 16 | map | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | kdc_cred | 17 | bstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | kdc_nonce | 18 | bstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | kdc_cred_verify | 19 | bstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | rekeying_scheme | 20 | int | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | client_cred_verify | 24 | bstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | creds_repo | 25 | tstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | control_uri | 26 | tstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | mgt_key_material | 27 | bstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | control_group_uri | 28 | tstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | sign_info | 29 | Null or array | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + | kdcchallenge | 30 | bstr | RFC 9594 | + +-----------------------+------+------------------------+-----------+ + + Table 5: ACE Groupcomm Parameters + + The KDC is expected to support all the parameters above. Instead, a + Client can support only a subset of such parameters, depending on the + roles it expects to take in the joined groups or on other conditions + defined in application profiles of this specification. + + In the following, the parameters are categorized according to the + support expected by Clients. That is, a Client that supports a + parameter is able to: i) use and specify it in a request message to + the KDC; and ii) understand and process it if specified in a response + message from the KDC. It is REQUIRED of application profiles of this + specification to sort their newly defined parameters according to the + same categorization (REQ29). + + Note that the actual use of a parameter and its inclusion in a + message depends on the specific exchange, the specific Client and + group involved, as well as what is defined in the used application + profile of this specification. + + A Client MUST support the following parameters. + + * 'scope' + + * 'cnonce' + + * 'gkty' + + * 'key' + + * 'num' + + * 'exp' + + * 'exi' + + * 'gid' + + * 'gname' + + * 'guri' + + * 'creds' + + * 'peer_identifiers' + + * 'ace_groupcomm_profile' + + * 'control_uri' + + * 'rekeying_scheme' + + A Client SHOULD support the following parameter. + + * 'get_creds': That is, not supporting this parameter would yield + the inconvenient and undesirable behavior where: i) the Client + does not ask for the other group members' authentication + credentials upon joining the group (see Section 4.3.1.1); and ii) + later on as a group member, the Client only retrieves the + authentication credentials of all group members (see + Section 4.4.2.1). + + The following conditional parameters are relevant only if specific + conditions hold. It is REQUIRED of application profiles of this + specification to define whether Clients must, should, or may support + these parameters and under which circumstances (REQ30). + + * 'client_cred' and 'client_cred_verify': These parameters are + relevant for a Client that has an authentication credential to use + in a joined group. + + * 'kdcchallenge': This parameter is relevant for a Client that has + an authentication credential to use in a joined group and that + provides the access token to the KDC through a Token Transfer + Request (see Section 3.3). + + * 'creds_repo': This parameter is relevant for a Client that has an + authentication credential to use in a joined group and that makes + it available from a key repository different than the KDC. + + * 'group_policies': This parameter is relevant for a Client that is + interested in the specific policies used in a group, but it does + not know them or cannot become aware of them before joining that + group. + + * 'peer_roles': This parameter is relevant for a Client that has to + know about the roles of other group members, especially when + retrieving and handling their corresponding authentication + credentials. + + * 'kdc_nonce', 'kdc_cred', and 'kdc_cred_verify': These parameters + are relevant for a Client that joins a group for which, as per the + used application profile of this specification, the KDC has an + associated authentication credential and this is required for the + correct group operation. + + * 'mgt_key_material': This parameter is relevant for a Client that + supports an advanced rekeying scheme possibly used in the group, + such as based on one-to-many rekeying messages sent over IP + multicast. + + * 'control_group_uri': This parameter is relevant for a Client that + also acts as a CoAP server supporting: i) the hosting of a + dedicated resource for each group that the Client is interested to + be a part of; and ii) the reception of one-to-many requests sent + to those resources by the KDC (e.g., over IP multicast), as + targeting multiple members of the corresponding group. Examples + of related management operations that the KDC can perform by this + means are the eviction of group members and the execution of a + group rekeying process through an advanced rekeying scheme, such + as based on one-to-many rekeying messages. + +9. ACE Groupcomm Error Identifiers + + This specification defines a number of values that the KDC can use as + error identifiers. These are used in error responses with Content- + Format "application/concise-problem-details+cbor", as values of the + 'error-id' field within the Custom Problem Detail entry 'ace- + groupcomm-error' (see Section 4.1.2). + + +=======+=============================================+ + | Value | Description | + +=======+=============================================+ + | 0 | Operation permitted only to group members | + +-------+---------------------------------------------+ + | 1 | Request inconsistent with the current roles | + +-------+---------------------------------------------+ + | 2 | Authentication credential incompatible with | + | | the group configuration | + +-------+---------------------------------------------+ + | 3 | Invalid proof-of-possession evidence | + +-------+---------------------------------------------+ + | 4 | No available individual keying material | + +-------+---------------------------------------------+ + | 5 | Group membership terminated | + +-------+---------------------------------------------+ + | 6 | Group deleted | + +-------+---------------------------------------------+ + + Table 6: ACE Groupcomm Error Identifiers + + If a Client supports the problem-details format [RFC9290] and the + Custom Problem Detail entry 'ace-groupcomm-error' defined in + Section 4.1.2 of this document and is able to understand the error + specified in the 'error-id' field therein, then the Client can use + that information to determine what actions to take next. If the + Concise Problem Details data item specified in the error response + includes the 'detail' entry and the Client supports it, such an entry + may provide additional context. + + In particular, the following guidelines apply, and application + profiles of this specification can define more detailed actions for + the Client to take when learning that a specific error has occurred. + + * In case of error 0, the Client should stop sending the request in + question to the KDC. Rather, the Client should first join the + targeted group. If it has not happened already, this first + requires the Client to obtain an appropriate access token + authorizing access to the group and provide it to the KDC. + + * In case of error 1, the Client as a group member should rejoin the + group with all the roles needed to perform the operation in + question. This might require the Client to first obtain a new + access token and provide it to the KDC, if the current access + token does not authorize the Client to take those roles in the + group. For operations admitted to a Client that is not a group + member (e.g., an external signature verifier), the Client should + first obtain a new access token authorizing to also have the + missing roles. + + * In case of error 2, the Client has to obtain or self-generate a + different asymmetric key pair, as aligned to the public key + algorithm and parameters used in the targeted group. After that, + the Client should provide the KDC with its new authentication + credential, which is consistent with the format used in the + targeted group and including the new public key. + + * In case of error 3, the Client should ensure to compute its proof- + of-possession evidence by correctly using the parameters and + procedures defined in the used application profile of this + specification. In an unattended setup, it might not be possible + for a Client to autonomously diagnose the error and take an + effective next action to address it. + + * In case of error 4, the Client should wait for a certain (pre- + configured) amount of time before trying to resend its request to + the KDC. + + * In case of error 5, the Client may try joining the group again. + This might require the Client to first obtain a new access token + and provide it to the KDC, e.g., if the current access token has + expired. + + * In case of error 6, the Client should clean up its state regarding + the group, just like if it has left the group with no intention to + rejoin it. + +10. Security Considerations + + Security considerations are inherited from the ACE framework + [RFC9200] and from the specific transport profile of ACE used between + the Clients and the KDC, e.g., [RFC9202] and [RFC9203]. + + When using the problem-details format defined in [RFC9290] for error + responses, then the privacy and security considerations from Sections + 4 and 5 of [RFC9290] also apply. + + Furthermore, the following security considerations apply. + +10.1. Secure Communication in the Group + + When a group member receives a message from a certain sender for the + first time since joining the group, it needs to have a mechanism in + place to avoid replayed messages and to assert their freshness, e.g., + as described in Appendix B.1.2 of [RFC8613] or Section 10 of + [GROUP-OSCORE]. Such a mechanism also aids the recipient group + member in case it has rebooted and lost the security state used to + protect previous group communications with that sender. + + By its nature, the KDC is invested with a large amount of trust, + since it acts as a generator and provider of the symmetric keying + material used to protect communications in each of its groups. While + details depend on the specific communication and security protocols + used in the group, the KDC is in the position to decrypt messages + exchanged in the group as if it was also a group member, as long as + those are protected through commonly shared group keying material. + + A compromised KDC would thus put the attacker in the same position, + which also means that: + + * The attacker can generate and control new group keying material, + hence possibly rekeying the group and evicting certain group + members as part of a broader attack. + + * The attacker can actively participate in communications in a + group, even without having been authorized to join it, and can + allow further unauthorized entities to do so. + + * The attacker can build erroneous associations between node + identifiers and group members' authentication credentials. + + On the other hand, as long as the security protocol used in the group + ensures source authentication of messages (e.g., by means of + signatures), the KDC is not able to impersonate group members since + it does not have their private keys. + + Further security considerations are specific to the communication and + security protocols used in the group, and thus have to be provided by + those protocols and complemented by the application profiles of this + specification using them. + +10.2. Update of Group Keying Material + + The KDC can generate new group keying material and provide it to the + group members (rekeying) through the rekeying scheme used in the + group, as discussed in Section 6. + + In particular, the KDC must renew the latest group keying material + upon its expiration. Before then, the KDC MAY also renew the group + keying material on a regular or periodical fashion. + + Unless otherwise defined by an application profile of this + specification, the KDC SHOULD renew the group keying material upon a + group membership change. As a possible exception, the KDC may not + rekey the group upon the joining of a new group member if the + application does not require backward security. As another possible + exception discussed more in detail later in this section, the KDC may + rely on a rekeying policy that reasonably takes into account the + expected rate of group membership changes and the duration of a group + rekeying. + + Since the minimum number of group members is one, the KDC SHOULD + provide even a Client joining an empty group with new keying material + never used before in that group. Similarly, the KDC SHOULD also + provide new group keying material to a Client that remains the only + member in the group after the leaving of other group members. + + Note that the considerations in Section 10.1 about dealing with + replayed messages still hold, even in case the KDC rekeys the group + upon every single joining of a new group member. However, if the KDC + has renewed the group keying material upon a group member's joining + and the time interval between the end of the rekeying process and + that member's joining is sufficiently small, then that group member + is also on the safe side, since it would not accept replayed messages + protected with the old group keying material previous to its joining. + + Once a joining node has obtained the new, latest keying material + through a Join Response from the KDC (see Section 4.3.1.1), the + joining node becomes able to read any message that was exchanged in + the group and protected with that keying material. This is the case + if the KDC provides the current group members with the new, latest + keying material before completing the joining procedure. However, + the joining node is not able to read messages exchanged in the group + and protected with keying material older than the one provided in the + Join Response, i.e., having a strictly lower version number NUM. + + A node that has left the group should not expect any of its outgoing + messages to be successfully processed if received by other nodes in + the group after its leaving due to a possible group rekeying + occurring before the message reception. + + 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 each and every group membership change, for + instance, if members' joining and leaving occur frequently and + performing a group rekeying takes too long. Instead, the KDC might + rekey the group after a minimum number of group members have joined + or left within a given time interval, after a maximum amount of time + since the last group rekeying was completed, or yet during + predictable network inactivity periods. + + However, this would result in the KDC not constantly preserving + backward and forward security in the group. That is: + + * Newly joining group members would be able to access the keying + material used before their joining, and thus they could access + past group communications if they have recorded old exchanged + messages. This might still be acceptable for some applications + and in situations where the new group members are freshly deployed + through strictly controlled procedures. + + * The leaving group members would remain able to access upcoming + group communications, as protected with the current keying + material that has not been updated. This is typically + undesirable, especially if the leaving group member is compromised + or suspected to be, and it might impact or compromise the security + properties of the protocols used in the group to protect messages + exchanged among the group members. + + The KDC should renew the group keying material in case it has + rebooted, even if it stores the whole group keying material in + persistent storage. This assumes that the secure communication + associations with the current group members as well as any + administrative keying material required to rekey the group are also + stored in persistent storage. + + However, if the KDC relies on Observe notifications to distribute the + new group keying material, the KDC would have lost all the current + ongoing Observations with the group members after rebooting, and the + group members would continue using the old group keying material. + Therefore, the KDC will rely on each group member asking for the new + group keying material (see Sections 4.3.2.1 and 4.8.1.1) or perform a + group rekeying by actively sending rekeying messages to group members + as discussed in Section 6. + + The KDC needs to have a mechanism in place to detect DoS attacks from + nodes repeatedly performing actions that might trigger a group + rekeying. Such actions can include leaving and/or rejoining the + group at high rates or often asking the KDC for new individual keying + material. Ultimately, the KDC can resort to removing these nodes + from the group and (temporarily) preventing them from joining the + group again. + + The KDC also needs to have a congestion control mechanism in place in + order to avoid network congestion upon distributing new group keying + material. For example, CoAP and Observe give guidance on such + mechanisms, see Section 4.7 of [RFC7252] and Section 4.5.1 of + [RFC7641]. + +10.3. Block-Wise Considerations + + If the Block-Wise CoAP 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 group keying material to the + updated one and continues the transfer. As long as both sides get + the new group keying material, updating the group 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, + and depending on how fast the group keying material is changed, the + group members might consume a larger amount of the network bandwidth + by repeatedly resending the same blocks, which might be problematic. + +11. IANA Considerations + + Per this document, IANA has completed the following actions. + +11.1. Media Type Registrations + + This specification has registered the "application/ace- + groupcomm+cbor" media type for messages of the protocols defined in + this document following the ACE exchange and carrying parameters + encoded in CBOR. This registration follows the procedures specified + in [RFC6838]. + + Type name: application + + Subtype name: ace-groupcomm+cbor + + Required parameters: N/A + + Optional parameters: N/A + + Encoding considerations: Must be encoded as a CBOR map containing + the parameters defined in RFC 9594. + + Security considerations: See Section 10 of RFC 9594. + + Interoperability considerations: N/A + + Published specification: RFC 9594 + + Applications that use this media type: The type is used by + Authorization Servers, Clients, and Resource Servers that support + the ACE groupcomm framework as specified in RFC 9594. + + Fragment identifier considerations: N/A + + Additional information: N/A + + Person & email address to contact for further information: ACE WG + mailing list (ace@ietf.org) or IETF Applications and Real-Time + Area (art@ietf.org) + + Intended usage: COMMON + + Restrictions on usage: None + + Author/Change controller: IETF + + Provisional registration: No + +11.2. CoAP Content-Formats + + IANA has registered the following entry in the "CoAP Content-Formats" + registry within the "CoRE Parameters" registry group. + + Content Type: application/ace-groupcomm+cbor + Content Coding: - + ID: 261 + Reference: RFC 9594 + +11.3. OAuth Parameters + + IANA has registered the following entries in the "OAuth Parameters" + registry, following the procedure specified in Section 11.2 of + [RFC6749]. + + Name: sign_info + Parameter Usage Location: client-rs request, rs-client response + Change Controller: IETF + Reference: RFC 9594 + + Name: kdcchallenge + Parameter Usage Location: rs-client response + Change Controller: IETF + Reference: RFC 9594 + +11.4. OAuth Parameters CBOR Mappings + + IANA has registered the following entries in the "OAuth Parameters + CBOR Mappings" registry, following the procedure specified in + Section 8.10 of [RFC9200]. + + Name: sign_info + CBOR Key: 45 + Value Type: Null or array + Reference: RFC 9594 + + Name: kdcchallenge + CBOR Key: 46 + Value Type: byte string + Reference: RFC 9594 + +11.5. Interface Description (if=) Link Target Attribute Values + + IANA has registered the following entry in the "Interface Description + (if=) Link Target Attribute Values" registry within the "Constrained + RESTful Environments (CoRE) Parameters" registry group. + + Value: ace.groups + Description: The KDC interface at the parent resource of group- + membership resources is used to retrieve names of security groups + using the ACE framework. + Reference: Section 4.1 of RFC 9594 + + Value: ace.group + Description: The KDC interface at a group-membership resource is + used to provision keying material and related information and + policies to members of the corresponding security group using the + ACE framework. + Reference: Section 4.1 of RFC 9594 + +11.6. Custom Problem Detail Keys Registry + + IANA has registered the following entry in the "Custom Problem Detail + Keys" registry within the "Constrained RESTful Environments (CoRE) + Parameters" registry group. + + Key Value: 0 + Name: ace-groupcomm-error + Brief Description: Carry RFC 9594 problem details in a Concise + Problem Details data item. + Change Controller: IETF + Reference: RFC 9594, Section 4.1.2 + +11.7. ACE Groupcomm Parameters + + This specification has established the "ACE Groupcomm Parameters" + IANA registry within the "Authentication and Authorization for + Constrained Environments (ACE)" registry group. + + Values in this registry are covered by different registration + policies as indicated below. Some policies require Expert Review; + guidelines are provided in Section 11.14 + + The columns of this registry are: + + Name: This is a descriptive name that enables easier reference to + the item. The name MUST be unique. It is not used in the + encoding. + + CBOR Key: This is the value used as the CBOR map key of the item. + These values MUST be unique. The value can be a positive integer, + a negative integer, or a text string. Different ranges of values + use different registration policies [RFC8126]. Integer values + from -256 to 255 as well as text strings of length 1 are + designated as "Standards Action With Expert Review". Integer + values from -65536 to -257 and from 256 to 65535 as well as text + strings of length 2 are designated as "Specification Required". + Integer values greater than 65535 as well as text strings of + length greater than 2 are designated as "Expert Review". Integer + values less than -65536 are marked as "Private Use". + + CBOR Type: This field contains the CBOR type of the item or a + pointer to the registry that defines its type when that depends on + another item. + + Reference: This field contains a pointer to the public specification + for the item. + + This registry has been initially populated with the values in + Table 5. + +11.8. ACE Groupcomm Key Types + + This specification establishes the "ACE Groupcomm Key Types" IANA + registry within the "Authentication and Authorization for Constrained + Environments (ACE)" registry group. + + Values in this registry are covered by different registration + policies as indicated below. Some policies require Expert Review; + guidelines are provided in Section 11.14. + + The columns of this registry are: + + Name: This is a descriptive name that enables easier reference to + the item. The name MUST be unique. It is not used in the + encoding. + + Key Type Value: This is the value used to identify the keying + material. These values MUST be unique. The value can be a + positive integer, a negative integer, or a text string. Different + ranges of values use different registration policies [RFC8126]. + Integer values from -256 to 255 as well as text strings of length + 1 are designated as "Standards Action With Expert Review". + Integer values from -65536 to -257 and from 256 to 65535 as well + as text strings of length 2 are designated as "Specification + Required". Integer values greater than 65535 as well as text + strings of length greater than 2 are designated as "Expert + Review". Integer values less than -65536 are marked as "Private + Use". + + Profile: This field may contain one or more descriptive strings of + application profiles to be used with this item. The values should + be taken from the "Name" column of the "ACE Groupcomm Profiles" + registry. + + Description: This field contains a brief description of the keying + material. + + Reference: This field contains a pointer to the public specification + for the format of the keying material, if one exists. + + This registry has been initially populated with the value in Table 1. + +11.9. ACE Groupcomm Profiles + + This specification establishes the "ACE Groupcomm Profiles" IANA + registry within the "Authentication and Authorization for Constrained + Environments (ACE)" registry group. + + Values in this registry are covered by different registration + policies as indicated below. Some policies require Expert Review; + guidelines are provided in Section 11.14. + + The columns of this registry are: + + Name: The name of the application profile. + + Description: Text giving an overview of the application profile and + the context it is developed for. + + CBOR Value: CBOR abbreviation for the name of this application + profile. These values MUST be unique. The value can be a + positive integer or a negative integer. Different ranges of + values use different registration policies [RFC8126]. Integer + values from -256 to 255 are designated as "Standards Action With + Expert Review". Integer values from -65536 to -257 and from 256 + to 65535 are designated as "Specification Required". Integer + values greater than 65535 are designated as "Expert Review". + Integer values less than -65536 are marked as "Private Use". + + Reference: This field contains a pointer to the public specification + for this application profile, if one exists. + + This registry has been initially populated with the value in Table 2. + +11.10. ACE Groupcomm Policies + + This specification establishes the "ACE Groupcomm Policies" IANA + registry within the "Authentication and Authorization for Constrained + Environments (ACE)" registry group. + + Values in this registry are covered by different registration + policies as indicated below. Some policies require Expert Review; + guidelines are provided in Section 11.14. + + The columns of this registry are: + + Name: The name of the group communication policy. + + CBOR Label: The value to be used to identify this group + communication policy. These values MUST be unique. The value can + be a positive integer, a negative integer, or a text string. + Different ranges of values use different registration policies + [RFC8126]. Integer values from -256 to 255 as well as text + strings of length 1 are designated as "Standards Action With + Expert Review". Integer values from -65536 to -257 and from 256 + to 65535 as well as text strings of length 2 are designated as + "Specification Required". Integer values greater than 65535 as + well as text strings of length greater than 2 are designated as + "Expert Review". Integer values less than -65536 are marked as + "Private Use". + + CBOR Type: The CBOR type used to encode the value of this group + communication policy. + + Description: This field contains a brief description for this group + communication policy. + + Reference: This field contains a pointer to the public specification + for this group communication policy and its format, if one exists. + + This registry has been initially populated with the values in + Table 3. + +11.11. Sequence Number Synchronization Methods + + This specification establishes the "Sequence Number Synchronization + Methods" IANA registry within the "Authentication and Authorization + for Constrained Environments (ACE)" registry group. + + Values in this registry are covered by different registration + policies as indicated below. Some policies require Expert Review; + guidelines are provided in Section 11.14. + + The columns of this registry are: + + Name: The name of the sequence number synchronization method. + + Value: The value to be used to identify this sequence number + synchronization method. These values MUST be unique. The value + can be a positive integer, a negative integer, or a text string. + Different ranges of values use different registration policies + [RFC8126]. Integer values from -256 to 255 as well as text + strings of length 1 are designated as "Standards Action With + Expert Review". Integer values from -65536 to -257 and from 256 + to 65535 as well as text strings of length 2 are designated as + "Specification Required". Integer values greater than 65535 as + well as text strings of length greater than 2 are designated as + "Expert Review". Integer values less than -65536 are marked as + "Private Use". + + Description: This field contains a brief description for this + sequence number synchronization method. + + Reference: This field contains a pointer to the public specification + describing the sequence number synchronization method. + +11.12. ACE Groupcomm Errors + + This specification establishes the "ACE Groupcomm Errors" IANA + registry within the "Authentication and Authorization for Constrained + Environments (ACE)" registry group. + + Values in this registry are covered by different registration + policies as indicated below. Some policies require Expert Review; + guidelines are provided in Section 11.14. + + The columns of this registry are: + + Value: The value to be used to identify the error. These values + MUST be unique. The value can be a positive integer or a negative + integer. Different ranges of values use different registration + policies [RFC8126]. Integer values from -256 to 255 are + designated as "Standards Action With Expert Review". Integer + values from -65536 to -257 and from 256 to 65535 are designated as + "Specification Required". Integer values greater than 65535 are + designated as "Expert Review". Integer values less than -65536 + are marked as "Private Use". + + Description: This field contains a brief description of the error. + + Reference: This field contains a pointer to the public specification + defining the error, if one exists. + + This registry has been initially populated with the values in + Table 6. The "Reference" column for all of these entries refers to + this document. + +11.13. ACE Groupcomm Rekeying Schemes + + This specification establishes the "ACE Groupcomm Rekeying Schemes" + IANA registry within the "Authentication and Authorization for + Constrained Environments (ACE)" registry group. + + Values in this registry are covered by different registration + policies as indicated below. Some policies require Expert Review; + guidelines are provided in Section 11.14. + + The columns of this registry are: + + Value: The value to be used to identify the group rekeying scheme. + These values MUST be unique. The value can be a positive integer + or a negative integer. Different ranges of values use different + registration policies [RFC8126]. Integer values from -256 to 255 + are designated as "Standards Action With Expert Review". Integer + values from -65536 to -257 and from 256 to 65535 are designated as + "Specification Required". Integer values greater than 65535 are + designated as "Expert Review". Integer values less than -65536 + are marked as "Private Use". + + Name: The name of the group rekeying scheme. + + Description: This field contains a brief description of the group + rekeying scheme. + + Reference: This field contains a pointer to the public specification + defining the group rekeying scheme, if one exists. + + This registry has been initially populated with the value in Table 4. + +11.14. Expert Review Instructions + + 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: + + * Point squatting should be discouraged. Reviewers are encouraged + to get sufficient information for registration requests to ensure + that the usage is not going to duplicate one that is already + registered and that the point is likely to be used in deployments. + The zones tagged as "Private Use" are intended for testing + purposes and closed environments; code points in other ranges + should not be assigned for testing. + + * Specifications are required for the Standards Track range of point + assignment. Specifications should exist for Specification + Required ranges, but early assignment before a specification is + available is considered to be permissible. When specifications + are not provided, the description provided needs to have + sufficient information to identify what the point is being used + for. + + * Experts should take into account the expected usage of fields when + approving point assignments. The fact that there is a range for + Standards Track documents does not mean that a Standards Track + document cannot have points assigned outside of that range. The + length of the encoded value should be weighed against how many + code points of that length are left, the size of the device it + will be used on, and the number of code points left that encode to + that size. + +12. References + +12.1. Normative References + + [CBOR.Tags] + IANA, "Concise Binary Object Representation (CBOR) Tags", + <https://www.iana.org/assignments/cbor-tags/>. + + [CoAP.Content.Formats] + IANA, "CoAP Content-Formats", + <https://www.iana.org/assignments/core-parameters/>. + + [COSE.Algorithms] + IANA, "COSE Algorithms", + <https://www.iana.org/assignments/cose/>. + + [COSE.Header.Parameters] + IANA, "COSE Header Parameters", + <https://www.iana.org/assignments/cose/>. + + [COSE.Key.Types] + IANA, "COSE Key Types", + <https://www.iana.org/assignments/cose/>. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <https://www.rfc-editor.org/info/rfc2119>. + + [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO + 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November + 2003, <https://www.rfc-editor.org/info/rfc3629>. + + [RFC6690] Shelby, Z., "Constrained RESTful Environments (CoRE) Link + Format", RFC 6690, DOI 10.17487/RFC6690, August 2012, + <https://www.rfc-editor.org/info/rfc6690>. + + [RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework", + RFC 6749, DOI 10.17487/RFC6749, October 2012, + <https://www.rfc-editor.org/info/rfc6749>. + + [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type + Specifications and Registration Procedures", BCP 13, + RFC 6838, DOI 10.17487/RFC6838, January 2013, + <https://www.rfc-editor.org/info/rfc6838>. + + [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained + Application Protocol (CoAP)", RFC 7252, + DOI 10.17487/RFC7252, June 2014, + <https://www.rfc-editor.org/info/rfc7252>. + + [RFC7967] Bhattacharyya, A., Bandyopadhyay, S., Pal, A., and T. + Bose, "Constrained Application Protocol (CoAP) Option for + No Server Response", RFC 7967, DOI 10.17487/RFC7967, + August 2016, <https://www.rfc-editor.org/info/rfc7967>. + + [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for + Writing an IANA Considerations Section in RFCs", BCP 26, + RFC 8126, DOI 10.17487/RFC8126, June 2017, + <https://www.rfc-editor.org/info/rfc8126>. + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, <https://www.rfc-editor.org/info/rfc8174>. + + [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data + Definition Language (CDDL): A Notational Convention to + Express Concise Binary Object Representation (CBOR) and + JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, + June 2019, <https://www.rfc-editor.org/info/rfc8610>. + + [RFC8747] Jones, M., Seitz, L., Selander, G., Erdtman, S., and H. + Tschofenig, "Proof-of-Possession Key Semantics for CBOR + Web Tokens (CWTs)", RFC 8747, DOI 10.17487/RFC8747, March + 2020, <https://www.rfc-editor.org/info/rfc8747>. + + [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object + Representation (CBOR)", STD 94, RFC 8949, + DOI 10.17487/RFC8949, December 2020, + <https://www.rfc-editor.org/info/rfc8949>. + + [RFC9052] Schaad, J., "CBOR Object Signing and Encryption (COSE): + Structures and Process", STD 96, RFC 9052, + DOI 10.17487/RFC9052, August 2022, + <https://www.rfc-editor.org/info/rfc9052>. + + [RFC9053] Schaad, J., "CBOR Object Signing and Encryption (COSE): + Initial Algorithms", RFC 9053, DOI 10.17487/RFC9053, + August 2022, <https://www.rfc-editor.org/info/rfc9053>. + + [RFC9200] Seitz, L., Selander, G., Wahlstroem, E., Erdtman, S., and + H. Tschofenig, "Authentication and Authorization for + Constrained Environments Using the OAuth 2.0 Framework + (ACE-OAuth)", RFC 9200, DOI 10.17487/RFC9200, August 2022, + <https://www.rfc-editor.org/info/rfc9200>. + + [RFC9237] Bormann, C., "An Authorization Information Format (AIF) + for Authentication and Authorization for Constrained + Environments (ACE)", RFC 9237, DOI 10.17487/RFC9237, + August 2022, <https://www.rfc-editor.org/info/rfc9237>. + + [RFC9290] Fossati, T. and C. Bormann, "Concise Problem Details for + Constrained Application Protocol (CoAP) APIs", RFC 9290, + DOI 10.17487/RFC9290, October 2022, + <https://www.rfc-editor.org/info/rfc9290>. + + [RFC9338] Schaad, J., "CBOR Object Signing and Encryption (COSE): + Countersignatures", STD 96, RFC 9338, + DOI 10.17487/RFC9338, December 2022, + <https://www.rfc-editor.org/info/rfc9338>. + +12.2. Informative References + + [C509-CERT] + Preuß Mattsson, J., Selander, G., Raza, S., Höglund, J., + and M. Furuhed, "CBOR Encoded X.509 Certificates (C509 + Certificates)", Work in Progress, Internet-Draft, draft- + ietf-cose-cbor-encoded-cert-11, 8 July 2024, + <https://datatracker.ietf.org/doc/html/draft-ietf-cose- + cbor-encoded-cert-11>. + + [CoAP-PUBSUB] + Jimenez, J., Koster, M., and A. Keränen, "A publish- + subscribe architecture for the Constrained Application + Protocol (CoAP)", Work in Progress, Internet-Draft, draft- + ietf-core-coap-pubsub-14, 18 April 2024, + <https://datatracker.ietf.org/doc/html/draft-ietf-core- + coap-pubsub-14>. + + [GROUP-CoAP] + Dijk, E., Wang, C., and M. Tiloca, "Group Communication + for the Constrained Application Protocol (CoAP)", Work in + Progress, Internet-Draft, draft-ietf-core-groupcomm-bis- + 11, 24 April 2024, <https://datatracker.ietf.org/doc/html/ + draft-ietf-core-groupcomm-bis-11>. + + [GROUP-OSCORE] + Tiloca, M., Selander, G., Palombini, F., Preuß Mattsson, + J., and R. Höglund, "Group Object Security for Constrained + RESTful Environments (Group OSCORE)", Work in Progress, + Internet-Draft, draft-ietf-core-oscore-groupcomm-22, 28 + August 2024, <https://datatracker.ietf.org/doc/html/draft- + ietf-core-oscore-groupcomm-22>. + + [OSCORE-DISCOVERY] + Tiloca, M., Amsüss, C., and P. Van der Stok, "Discovery of + OSCORE Groups with the CoRE Resource Directory", Work in + Progress, Internet-Draft, draft-tiloca-core-oscore- + discovery-16, 4 September 2024, + <https://datatracker.ietf.org/doc/html/draft-tiloca-core- + oscore-discovery-16>. + + [RFC2093] Harney, H. and C. Muckenhirn, "Group Key Management + Protocol (GKMP) Specification", RFC 2093, + DOI 10.17487/RFC2093, July 1997, + <https://www.rfc-editor.org/info/rfc2093>. + + [RFC2094] Harney, H. and C. Muckenhirn, "Group Key Management + Protocol (GKMP) Architecture", RFC 2094, + DOI 10.17487/RFC2094, July 1997, + <https://www.rfc-editor.org/info/rfc2094>. + + [RFC2627] Wallner, D., Harder, E., and R. Agee, "Key Management for + Multicast: Issues and Architectures", RFC 2627, + DOI 10.17487/RFC2627, June 1999, + <https://www.rfc-editor.org/info/rfc2627>. + + [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform + Resource Identifier (URI): Generic Syntax", STD 66, + RFC 3986, DOI 10.17487/RFC3986, January 2005, + <https://www.rfc-editor.org/info/rfc3986>. + + [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., + Housley, R., and W. Polk, "Internet X.509 Public Key + Infrastructure Certificate and Certificate Revocation List + (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, + <https://www.rfc-editor.org/info/rfc5280>. + + [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token + (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, + <https://www.rfc-editor.org/info/rfc7519>. + + [RFC7641] Hartke, K., "Observing Resources in the Constrained + Application Protocol (CoAP)", RFC 7641, + DOI 10.17487/RFC7641, September 2015, + <https://www.rfc-editor.org/info/rfc7641>. + + [RFC7959] Bormann, C. and Z. Shelby, Ed., "Block-Wise Transfers in + the Constrained Application Protocol (CoAP)", RFC 7959, + DOI 10.17487/RFC7959, August 2016, + <https://www.rfc-editor.org/info/rfc7959>. + + [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data + Interchange Format", STD 90, RFC 8259, + DOI 10.17487/RFC8259, December 2017, + <https://www.rfc-editor.org/info/rfc8259>. + + [RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, + "CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392, + May 2018, <https://www.rfc-editor.org/info/rfc8392>. + + [RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, + "Object Security for Constrained RESTful Environments + (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, + <https://www.rfc-editor.org/info/rfc8613>. + + [RFC9202] Gerdes, S., Bergmann, O., Bormann, C., Selander, G., and + L. Seitz, "Datagram Transport Layer Security (DTLS) + Profile for Authentication and Authorization for + Constrained Environments (ACE)", RFC 9202, + DOI 10.17487/RFC9202, August 2022, + <https://www.rfc-editor.org/info/rfc9202>. + + [RFC9203] Palombini, F., Seitz, L., Selander, G., and M. Gunnarsson, + "The Object Security for Constrained RESTful Environments + (OSCORE) Profile of the Authentication and Authorization + for Constrained Environments (ACE) Framework", RFC 9203, + DOI 10.17487/RFC9203, August 2022, + <https://www.rfc-editor.org/info/rfc9203>. + + [RFC9277] Richardson, M. and C. Bormann, "On Stable Storage for + Items in Concise Binary Object Representation (CBOR)", + RFC 9277, DOI 10.17487/RFC9277, August 2022, + <https://www.rfc-editor.org/info/rfc9277>. + + [RFC9431] Sengul, C. and A. Kirby, "Message Queuing Telemetry + Transport (MQTT) and Transport Layer Security (TLS) + Profile of Authentication and Authorization for + Constrained Environments (ACE) Framework", RFC 9431, + DOI 10.17487/RFC9431, July 2023, + <https://www.rfc-editor.org/info/rfc9431>. + +Appendix A. Requirements for Application Profiles + + This section lists the requirements for application profiles of this + specification for the convenience of application profile designers. + +A.1. Mandatory-to-Address Requirements + + REQ1: Specify the format and encoding of scope. This includes + defining the set of possible roles and their identifiers, as + well as the corresponding encoding to use in the scope + entries according to the used scope format (see Section 3.1). + + REQ2: If scope uses AIF, register its specific instance of "Toid" + and "Tperm" as media type parameters and a corresponding + Content-Format, as per the guidelines in [RFC9237]. + + REQ3: If used, specify the acceptable values for the 'sign_alg' + parameter (see Section 3.3.1). + + REQ4: If used, specify the acceptable values and structure for the + 'sign_parameters' parameter (see Section 3.3.1). + + REQ5: If used, specify the acceptable values and structure for the + 'sign_key_parameters' parameter (see Section 3.3.1). + + REQ6: Specify the acceptable formats for authentication credentials + and, if applicable, the acceptable values for the 'cred_fmt' + parameter (see Section 3.3.1). + + REQ7: If the value of the GROUPNAME URI path and the group name in + the access token scope ('gname' in Section 3.1) are not + required to coincide, specify the mechanism to map the + GROUPNAME value in the URI to the group name (see + Section 4.1). + + REQ8: Define whether the KDC has an authentication credential as + required for the correct group operation and if this has to + be provided through the 'kdc_cred' parameter (see Sections + 4.1 and 4.3.1). + + REQ9: Specify if any part of the KDC interface as defined in this + document is not supported by the KDC (see Section 4.1). + + REQ10: Register a Resource Type for the group-membership resources, + which is used to discover the correct URL for sending a Join + Request to the KDC (see Section 4.1). + + REQ11: Define what specific actions (e.g., CoAP methods) are allowed + on each resource that are accessible through the KDC + interface, depending on: whether the Client is a current + group member; the roles that a Client is authorized to take + as per the obtained access token (see Section 3.1); and the + roles that the Client has as a current group member. + + REQ12: Categorize possible newly defined operations for Clients into + primary operations expected to be minimally supported and + secondary operations, and provide accompanying considerations + (see Section 4.1.1). + + REQ13: Specify the encoding of group identifiers (see + Section 4.2.1). + + REQ14: Specify the approaches used to compute and verify the PoP + evidence to include in the 'client_cred_verify' parameter and + which of those approaches is used in which case (see + Section 4.3.1). + + REQ15: Specify how the nonce N_S is generated, if the access token + is not provided to the KDC through the Token Transfer Request + sent to the /authz-info endpoint (e.g., the access token is + instead transferred during the establishment of a secure + communication association). + + REQ16: Define the initial value of the version number for the group + keying material (see Section 4.3.1). + + REQ17: Specify the format of the group keying material that is + conveyed in the 'key' parameter (see Section 4.3.1). + + REQ18: Specify the acceptable values of the 'gkty' parameter (see + Section 4.3.1). For each of them, register a corresponding + entry in the "ACE Groupcomm Key Types" IANA registry if such + an entry does not exist already. + + REQ19: Specify and register the application profile identifier (see + Section 4.3.1). + + REQ20: If used, specify the format and default values of the entries + of the CBOR map to include in the 'group_policies' parameter + (see Section 4.3.1). + + REQ21: Specify the approaches used to compute and verify the PoP + evidence to include in the 'kdc_cred_verify' parameter and + which of those approaches is used in which case (see Sections + 4.3.1 and 4.5.1). If external signature verifiers are + supported, specify how those provide a nonce to the KDC to be + used for computing the PoP evidence (see Section 4.5.1). + + REQ22: Specify the communication protocol that members of the group + use to communicate with each other (e.g., CoAP for group + communication). + + REQ23: Specify the security protocol that members of the group use + to protect the group communication (e.g., Group OSCORE). + This must provide encryption, integrity, and replay + protection. + + REQ24: Specify how the communication is secured between the Client + and the KDC. Optionally, specify a transport profile of ACE + [RFC9200] to use between the Client and the KDC (see + Section 4.3.1.1). + + REQ25: Specify the format of the node identifiers of group members + (see Sections 4.3.1 and 4.4.1). + + REQ26: Specify policies at the KDC to handle node identifiers that + are included in the 'get_creds' parameter but are not + associated with any current group member (see Section 4.4.1). + + REQ27: Specify the format of (newly generated) individual keying + material for group members or of the information to derive + such keying material, as well as the corresponding CBOR map + key that has to be registered in the "ACE Groupcomm + Parameters" registry (see Sections 4.8.1 and 4.8.2). + + REQ28: Specify which CBOR tag is used for identifying the semantics + of binary scopes, or register a new CBOR tag if a suitable + one does not exist already (see Section 7). + + REQ29: Categorize newly defined parameters according to the same + criteria of Section 8. + + REQ30: Define whether Clients must, should, or may support the + conditional parameters defined in Section 8 and under which + circumstances. + +A.2. Optional-to-Address Requirements + + OPT1: Optionally, if the textual format of scope is used, specify + CBOR values to use for abbreviating the role identifiers in + the group (see Section 3.1). + + OPT2: Optionally, specify the additional parameters used in the + exchange of Token Transfer Request and Response (see + Section 3.3). + + OPT3: Optionally, specify the negotiation of parameter values for + signature algorithm and signature keys, if the 'sign_info' + parameter is not used (see Section 3.3). + + OPT4: Optionally, specify possible or required payload formats for + specific error cases (see Section 4.1.2). + + OPT5: Optionally, specify additional identifiers of error types as + values of the 'error-id' field within the Custom Problem + Detail entry 'ace-groupcomm-error' (see Section 4.1.2). + + OPT6: Optionally, specify the encoding of the 'creds_repo' + parameter if the default one is not used (see Section 4.3.1). + + OPT7: Optionally, specify the functionalities implemented at the + resource hosted by the Client at the URI indicated in the + 'control_uri' parameter, including the encoding of exchanged + messages and other details (see Section 4.3.1). + + OPT8: Optionally, specify the behavior of the POST handler of + group-membership resources, for the case when it fails to + retrieve an authentication credential for the specific Client + (see Section 4.3.1). + + OPT9: Optionally, define a default group rekeying scheme to refer + to in case the 'rekeying_scheme' parameter is not included in + the Join Response (see Section 4.3.1). + + OPT10: Optionally, specify the functionalities implemented at the + resource hosted by the Client at the URI indicated in the + 'control_group_uri' parameter, including the encoding of + exchanged messages and other details (see Section 4.3.1). + + OPT11: Optionally, specify policies that instruct Clients to retain + messages and for how long, if those are unsuccessfully + decrypted (see Section 4.8.1.1). This makes it possible for + Clients to decrypt such messages after obtaining updated + keying material. + + OPT12: Optionally, specify for the KDC to perform a group rekeying + when receiving a Key Renewal Request, together with or + instead of renewing individual keying material (see + Section 4.8.2.1). + + OPT13: Optionally, specify how the identifier of a group member's + authentication credential is included in requests sent to + other group members (see Section 4.9.1.1). + + OPT14: Optionally, specify additional information to include in + rekeying messages for the "Point-to-Point" group rekeying + scheme (see Section 6). + +Appendix B. Extensibility for Future COSE Algorithms + + As defined in Section 8.1 of [RFC9053], future algorithms can be + registered in the "COSE Algorithms" registry [COSE.Algorithms] as + specifying none or multiple COSE capabilities. + + To enable the seamless use of such future registered algorithms, this + section defines a general, agile format for each 'sign_info_entry' of + the 'sign_info' parameter in the Token Transfer Response; see + Section 3.3.1. + + If any of the currently registered COSE algorithms are considered, + using this general format yields the same structure of + 'sign_info_entry' defined in this document, thus ensuring backward + compatibility. + +B.1. Format of 'sign_info_entry' + + The format of each 'sign_info_entry' (see Section 3.3.1) is + generalized as follows. + + * 'sign_parameters' includes N >= 0 elements, each of which is a + COSE capability of the signature algorithm indicated in + 'sign_alg'. + + In particular, 'sign_parameters' has the same format and value of + the COSE capabilities array for the signature algorithm indicated + in 'sign_alg', as specified for that algorithm in the + "Capabilities" column of the "COSE Algorithms" registry + [COSE.Algorithms]. + + * 'sign_key_parameters' is replaced by N elements 'sign_capab', each + of which is a CBOR array. + + The i-th 'sign_capab' array (i = 0, ..., N-1) is the array of COSE + capabilities for the algorithm capability specified in + 'sign_parameters'[i]. + + In particular, each 'sign_capab' array has the same format and + value of the COSE capabilities array for the algorithm capability + specified in 'sign_parameters'[i]. + + Such a COSE capabilities array is currently defined for the + algorithm capability COSE key type in the "Capabilities" column of + the "COSE Key Types" registry [COSE.Key.Types]. + + sign_info_entry = + [ + id : gname / [+ gname], + sign_alg : int / tstr, + sign_parameters : [* alg_capab : any], + * sign_capab : [* capab : any], + cred_fmt : int / null + ] + + gname = tstr + + Figure 38: 'sign_info_entry' with a General Format + +Acknowledgments + + The following individuals were helpful in shaping this document: + Christian Amsüss, Carsten Bormann, Roman Danyliw, Martin Duke, Thomas + Fossati, Vidhi Goel, Rikard Höglund, Ben Kaduk, Erik Kline, Warren + Kumari, Watson Ladd, Daniel Migault, John Preuß Mattsson, + Zaheduzzaman Sarker, Jim Schaad, Ludwig Seitz, Göran Selander, Cigdem + Sengul, Dave Thaler, Henry Thompson, Peter van der Stok, and Paul + Wouters. + + The work on this document has been partly supported by the Sweden's + Innovation Agency VINNOVA and the Celtic-Next project CRITISEC, by + the H2020 project SIFIS-Home (Grant agreement 952652), and by the + EIT-Digital High Impact Initiative ACTIVE. + +Authors' Addresses + + Francesca Palombini + Ericsson AB + Torshamnsgatan 23 + SE-164 40 Kista + Sweden + Email: francesca.palombini@ericsson.com + + + Marco Tiloca + RISE AB + Isafjordsgatan 22 + SE-164 40 Kista + Sweden + Email: marco.tiloca@ri.se |