| Internet-Draft | ACE CoAP Pub-Sub Profile | February 2026 |
| Palombini, et al. | Expires 13 August 2026 | [Page] |
This document defines an application profile of the Authentication and Authorization for Constrained Environments (ACE) framework, to enable secure group communication in the Publish-Subscribe (Pub-Sub) architecture for the Constrained Application Protocol (CoAP) [draft-ietf-core-coap-pubsub], where Publishers and Subscribers communicate through a Broker. This profile relies on protocol-specific transport profiles of ACE to achieve communication security, server authentication, and proof of possession of a key owned by the Client and bound to an OAuth 2.0 access token. This document specifies the provisioning and enforcement of authorization information for Clients to act as Publishers and/or Subscribers, as well as the provisioning of keying material and security parameters that Clients use for protecting their communications end-to-end through the Broker.¶
Note to RFC Editor: Please replace "[draft-ietf-core-coap-pubsub]" with the RFC number of that document and delete this paragraph.¶
This note is to be removed before publishing as an RFC.¶
Discussion of this document takes place on the Authentication and Authorization for Constrained Environments Working Group mailing list (ace@ietf.org), which is archived at https://mailarchive.ietf.org/arch/browse/ace/.¶
Source for this draft and an issue tracker can be found at https://github.com/ace-wg/pubsub-profile.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 13 August 2026.¶
Copyright (c) 2026 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.¶
In a publish-subscribe (Pub-Sub) scenario, devices acting as Publishers and/or Subscribers communicate via a Broker that enforces store-and-forward messaging between those. This effectively enables a form of group communication, where all the Publishers and Subscribers participating in the same Pub-Sub topic are considered members of the same application group associated with that topic.¶
The specification at [I-D.ietf-core-coap-pubsub] defines a Pub-Sub architecture for the Constrained Application Protocol (CoAP) [RFC7252].¶
Building on the Authentication and Authorization for Constrained Environments (ACE) framework [RFC9200], the document [RFC9594] defines how to request, distribute, and renew keying material and configuration parameters to protect message exchanges in a group communication environment. That is, candidate group members that act as ACE Clients and are authorized to join a group can interact with a Key Distribution Center (KDC) that acts as ACE Resource Server and is responsible for the group. The KDC provides the necessary keying material and parameters to communicate with other group members.¶
While [RFC9594] defines the operations and interface available at the KDC, as well as general message formats for the interactions between Clients and the KDC, it delegates details on the communication and security approaches used in a group to separate application profiles. These are specialized instances of [RFC9594] 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.¶
This document specifies an application profile of [RFC9594]. Message exchanges among the participants as well as message formats and processing follow what is specified in [RFC9594], and enable secure Pub-Sub communication where a group of Publishers and Subscribers securely communicate through a Broker using CoAP as per [I-D.ietf-core-coap-pubsub].¶
In particular, this document specifies the provisioning and enforcement of authorization information for Clients to act as Publishers and/or Subscribers at the Broker, as well as the provisioning of keying material and security parameters that Clients use for protecting end-to-end their communications via the Broker.¶
In order to protect the Pub-Sub operations at the Broker as well as the provisioning of keying material and security parameters, this profile leverages protocol-specific transport profiles of ACE (e.g., [RFC9202][RFC9203]), in order to achieve communication security, server authentication, and proof of possession of a key owned by the Client and bound to an OAuth 2.0 access token.¶
The content of published messages that are circulated by the Broker is protected end-to-end between the corresponding Publisher and the intended Subscribers. To this end, this profile relies on COSE [RFC9052][RFC9053] and on keying material provided to the Publishers and Subscribers participating in the same Pub-Sub topic. In particular, source authentication of published topic data is achieved by means of the corresponding Publisher signing such content with its own private key.¶
Figure 1 overviews the relationships between this document and other related documents mentioned above.¶
Note to RFC Editor: At the bottom of Figure 1, "[I-D.ietf-core-coap-pubsub]" is the reference label that the present document is currently using for that referred document. Before publishing as an RFC, please replace that reference label with the one eventually used for the (RFC resulting from) the referred document. Then, please delete this note.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
Readers are expected to be familiar with:¶
The terms and concepts described in the ACE framework for Authentication and Authorization [RFC9200]. The terminology for entities in the considered architecture is defined in OAuth 2.0 [RFC6749]. In particular, this includes Client, Resource Server (RS), and Authorization Server (AS).¶
The Authorization Information Format (AIF) [RFC9237] used to express authorization information.¶
The terms and concept related to the message formats and processing specified in [RFC9594], for provisioning and renewing keying material in group communication scenarios. These include the abbreviations REQx and OPTx denoting the numbered mandatory-to-address and optional-to-address requirements, respectively.¶
The terms and concepts described in CDDL [RFC8610], CBOR [RFC8949], and COSE [RFC9052][RFC9053][RFC9338].¶
The terms and concepts described in CoAP [RFC7252]. Note that the term "endpoint" is used here following its OAuth definition [RFC6749], aimed at denoting resources such as /token and /introspect at the AS, and /authz-info at the RS. The CoAP definition, which is "[a]n entity participating in the CoAP protocol" [RFC7252], is not used in this document.¶
The terms and concepts of Pub-Sub group communication with CoAP, as described in [I-D.ietf-core-coap-pubsub].¶
A party interested in participating in group communication as well as already participating as a group member is interchangeably denoted as "Client", "Pub-Sub client", or "node".¶
Group: a set of nodes that share common keying material and security parameters to protect their communications with one another. That is, the term refers to a "security group".¶
This is not to be confused with an "application group", which has relevance at the application level and whose members are in this case the Clients acting as Publishers and/or Subscribers for a topic.¶
Examples throughout this document are expressed in CBOR diagnostic notation as defined in Section 8 of [RFC8949] and Appendix G of [RFC8610]. Diagnostic notation comments are often used to provide a textual representation of the parameters' keys and values.¶
This document describes how to use [RFC9200] and [RFC9594] to perform authentication, authorization, and key distribution operations as overviewed in Section 2 of [RFC9594], where the considered group is the security group composed of the Pub-Sub clients that exchange end-to-end protected content through the Broker.¶
Pub-Sub clients communicate within their application groups, each of which is mapped to a topic. Depending on the application, a topic may consist of one or more sub-topics, which in turn may have their own sub-topics and so on, thus forming a hierarchy. A security group SHOULD be associated with a single application group. However, the same application group MAY be associated with multiple security groups. Further details and considerations on the mapping between the two types of groups are out of the scope of this document.¶
This profile considers the architecture shown in Figure 2. A Client can act as a Publisher, or a Subscriber, or both, e.g., by publishing to some topics and subscribing to others. However, for the simplicity of presentation, this profile describes Publisher and Subscriber Clients separately.¶
Both Publishers and Subscribers act as ACE Clients. The Broker acts as an ACE RS and corresponds to the Dispatcher in [RFC9594]. The Key Distribution Center (KDC) also acts as an ACE RS and builds on what is defined for the KDC in [RFC9594]. From a high-level point of view, the Clients interact with the KDC in order to join security groups, thereby obtaining the group keying material to protect end-to-end and verify the content published in the associated topics.¶
Both Publishers and Subscribers MUST use the same protocol for interacting with the Broker and participating in Pub-Sub communications. When using the profile defined in this document, such a protocol MUST be CoAP [RFC7252], which is used as described in [I-D.ietf-core-coap-pubsub] (REQ22). .¶
All Publishers and Subscribers MUST use CoAP when communicating with the KDC.¶
Furthermore, both Publishers and Subscribers MUST use the same transport profile of ACE (e.g., [RFC9202] for DTLS, or [RFC9203] for OSCORE) in their interaction with the Broker. In order to reduce the number of libraries that Clients have to support, it is RECOMMENDED that the same transport profile of ACE is used also for the interaction between the Clients and the KDC (REQ24).¶
Except for the end-to-end protection of published topic data (see Section 6.1), all communications between the involved entities (Clients, Broker, KDC, Authorization Server) MUST occur and be secured in accordance with the protocol-specific transport profile of ACE used.¶
For each Client, the Client and the Broker MUST have a secure communication association, which they establish with the help of the AS and using a transport profile of ACE. This is shown by the interactions A and C in Figure 2. During this process, the Client obtains an access token from the AS and uploads it to the Broker, thus providing an evidence of the topics that it is authorised to participate in, and with which permissions.¶
For each Client, the Client and the KDC MUST have a secure communication association, which they also establish with the help of the AS and using a transport profile of ACE (REQ24). This is shown by the interactions A and B in Figure 2. During this process, the Client obtains an access token from the AS and uploads it to the KDC, thus providing an evidence of the security groups that it can join, as associated with the topics of interest at the Broker. Based on the permissions specified in the access token, the Client can request the KDC to join a security group, after which the Client obtains from the KDC the keying material to use for communicating with the other group members. This builds on the process for joining security groups with ACE, as defined in [RFC9594] and further specified in this document.¶
In addition, this profile allows an anonymous Client to perform some of the discovery operations defined in Section 2.3 of [I-D.ietf-core-coap-pubsub] through the Broker, as shown by the interaction O in Figure 2. That is, an anonymous Client can discover:¶
the Broker itself, by relying on the resource type "core.ps" (see Section 2.3.1 of [I-D.ietf-core-coap-pubsub]); and¶
topics of interest at the Broker (i.e., the corresponding topic resources hosted at the Broker), by relying on the resource type "core.ps.conf" (see Section 2.3.3 of [I-D.ietf-core-coap-pubsub]).¶
However, an anonymous Client is not allowed to access topic resources at the Broker and obtain from those any additional information or metadata about the corresponding topic (e.g., the topic status, the URI of the topic-data resource where to publish or subscribe for that topic, or the URI to the KDC).¶
As highlighted in Figure 3, each Client maintains two different security associations pertaining to the Pub-Sub group communication. On the one hand, the Client has a pairwise security association with the Broker, which, as an ACE RS, verifies that the Client is authorised to perform data operations (i.e., publish, subscribe, read, delete) on a certain set of topics (Security Association 1). As discussed above, this security association is set up with the help of the AS and using a transport profile of ACE, when the Client obtains the access token to upload to the Broker.¶
On the other hand, separately for each topic, all the Publishers and Subscribers for that topic have a common, group security association, through which the published topic data sent through the Broker is protected end-to-end (Security Association 2). As discussed above, this security association is set up and maintained as the different Clients request the KDC to join the security group, upon which they obtain from the KDC the corresponding group keying material to use for protecting end-to-end and verifying the content of their Pub-Sub group communication.¶
In summary, this profile specifies the following functionalities.¶
A Client obtains the authorization to participate in a Pub-Sub topic at the Broker with certain permissions. This pertains to operations defined in [I-D.ietf-core-coap-pubsub] for taking part in Pub-Sub communication with CoAP.¶
A Client obtains the authorization to join a security group with certain permissions. This allows the Client to obtain from the KDC the group keying material for communicating with other group members, i.e., to protect end-to-end and verify the content published at the Broker on topics associated with the security group.¶
A Client obtains from the KDC the authentication credentials of other group members, and provides or updates the KDC with its own authentication credential.¶
A Client leaves the group or is removed from the group by the KDC.¶
The KDC renews and redistributes the group keying material (rekeying), e.g., due to a membership change in the group.¶
Appendix A compiles the list of requirements for this application profile of ACE and how they are fulfilled, consistently with the list of requirements defined in Appendix A of [RFC9594].¶
In order to enable secure group communication for the Pub-Sub Clients, the KDC provides the resources listed in Table 1.¶
The entry of each resource specifies the CoAP methods by means of which it is admitted to access that resource, for nodes with different roles in the group or as non members. Except for accessing the /ace-group resource with the FETCH method (to retrieve security group names through their group identifiers) and the /ace-group/GROUPNAME resource with the POST method (to join the security group with name GROUPNAME), all other operations are admitted only to current members of the security group with name GROUPNAME (REQ11).¶
Each resource is marked as REQUIRED or OPTIONAL to be hosted at the KDC (REQ9).¶
| KDC resource | Description | Operations |
|---|---|---|
| /ace-group | REQUIRED. Contains a set of group names, each corresponding to one of the specified group identifiers. | FETCH (All Clients) |
| /ace-group/GROUPNAME | REQUIRED. Contains symmetric group keying material associated with GROUPNAME. | GET, POST (All Clients) |
| /ace-group/GROUPNAME/creds | REQUIRED. Contains the authentication credentials of all the Publishers of the group with name GROUPNAME. | GET, FETCH (All Clients) |
| /ace-group/GROUPNAME/num | REQUIRED. Contains the current version number for the symmetric group keying material of the group with name GROUPNAME. | GET (All Clients) |
| /ace-group/GROUPNAME/nodes/NODENAME | REQUIRED. Contains the group keying material for that group member NODENAME in GROUPNAME. | GET, DELETE (All Clients). POST (Publishers). |
| /ace-group/GROUPNAME/nodes/NODENAME/cred | REQUIRED. Contains the authentication credential for NODENAME in the group GROUPNAME. | POST (Publishers) |
| /ace-group/GROUPNAME/kdc-cred | REQUIRED if the group rekeying scheme used requires the use of a KDC authentication credential. Contains the authentication credential of the KDC for the group with name GROUPNAME. | GET (All Clients) |
| /ace-group/GROUPNAME/policies | OPTIONAL. Contains the group policies of the group with name GROUPNAME. | GET (All Clients) |
The use of these resources follows what is defined in [RFC9594], and only additions or modifications to that specification are defined in this document. With respect to [RFC9594], this document does not define new operations for Clients interacting with the KDC (REQ12).¶
Consistent with what is defined in Section 4.1.2 of [RFC9594], some error responses from the KDC can convey error-specific information according to the problem-details format specified in [RFC9290]. This application profile does not define additional identifiers of error types as values of the 'error-id' field within the Custom Problem Detail entry 'ace-groupcomm-error' (OPT5).¶
This section describes the interactions between a Client and the KDC to join a security group. Source authentication of a message sent within the group is ensured by means of a digital signature embedded in the message. Subscribers must be able to retrieve Publishers' authentication credentials from a trusted repository, to verify source authentication of received messages. Hence, on joining a security group, a Publisher is expected to provide its own authentication credential to the KDC.¶
On a successful join, the Clients receive from the KDC the symmetric COSE Key [RFC9052] that is used as the shared group key to protect the payload of a published topic data.¶
The message exchange between the joining node and the KDC follows what is defined in Section 4.3.1.1 of [RFC9594], and only additions or modifications to that specification are defined in this document.¶
After establishing a secure communication association with the KDC, the Client sends a Join Request to the KDC as described in Section 4.3 of [RFC9594]. More specifically, the Client sends a POST request to the /ace-group/GROUPNAME endpoint, with Content-Format "application/ace-groupcomm+cbor". The payload contains the following information formatted as a CBOR map, which MUST be encoded as defined in Section 4.3.1 of [RFC9594]:¶
'scope': It MUST be present and its value MUST indicate the group that the Client is attempting to join, i.e., the group name, and the permissions that the Client wishes to have in the group. This value corresponds to one scope entry, as defined in Section 3.4.1.¶
'get_creds': It MAY be present if the Client wishes to join as a Subscriber and wants to retrieve the public keys of all the Publishers upon joining. Otherwise, this parameter MUST NOT be present. If the parameter is present, the parameter MUST encode the CBOR simple value null (0xf6). Note that the parameter 'role_filter' is not necessary, as the KDC returns the authentication credentials of Publishers by default.¶
'client_cred': The use of this parameter is detailed in Section 4.1.1.1.¶
'cnonce': It specifies a nonce N_C generated by the Client. As to the N_C value, it is RECOMMENDED to be at least 8-byte long and it is RECOMMENDED to be a random value. Join Requests include a new 'cnonce' at each join attempt.¶
'client_cred_verify': The use of this parameter is detailed in Section 4.1.1.2.¶
As a Publisher Client has its own authentication credential to use in a group, it MUST support the 'client_cred' and 'client_cred_verify' parameters (REQ30).¶
For this application profile, the 'creds_repo' parameter is not relevant, since the KDC always acts as repository of the Publishers' authentication credentials. Consequently, no encoding is defined for this parameter (OPT6).¶
This application profile does not define the functionalities that are implemented at the resource possibly hosted by the Client at the URI indicated in the 'control_uri' parameter (OPT7), if included in the Join Request.¶
One of the following cases can occur when a new Client attempts to join a security group.¶
The joining node is not a Publisher, i.e., it is not going to send data to the application group. In this case, the joining node is not required to provide its own authentication credential to the KDC. In case the joining node still provides an authentication credential in the 'client_cred' parameter of the Join Request (see Section 4.1.1), the KDC silently ignores that parameter, as well as the related parameter 'client_cred_verify' if present.¶
The joining node wishes to join as a Publisher and the KDC has not previously acquired an authentication credential of the joining node. Then, the joining node MUST provide a compatible authentication credential in the 'client_cred' parameter of the Join Request (see Section 4.1.1).¶
The joining node wishes to join as a Publisher and the KDC already acquired the authentication credential of the joining node, either during a past group joining process or when establishing a secure communication association using asymmetric proof-of-possession keys.¶
If the joining node's authentication credential as well as the included public key are compatible with the signature algorithm used in the security group and with possible associated parameters, then the authentication credential can be used in the group. In this case, the joining node MAY choose not to provide again its authentication credential to the KDC, in order to limit the size of the Join Request.¶
If the joining node chooses to do so, then the following applies when composing the Join Request: the value of the 'client_cred' parameter specifies an empty authentication credential, i.e., its value is set to the empty CBOR byte string (0x40); the 'client_cred_verify' parameter is omitted. In case the 'client_cred' parameter specifies the empty CBOR byte string (0x40), the KDC silently ignores the 'client_cred_verify' parameter if present.¶
The joining node MUST provide the KDC with its own authentication credential again, if it has previously provided the KDC with multiple authentication credentials intended for different security groups.¶
If the joining node provides its authentication credential, the KDC performs the consistency checks above and, in case of success, considers it as the authentication credential associated with the joining node in the group.¶
The 'client_cred_verify' parameter contains the proof-of-possession (PoP) evidence and is computed by the joining node to prove the possession of its own private key. The PoP evidence is computed as defined below (REQ14).¶
The joining node signs the scope, concatenated with N_S and further concatenated with N_C, by using the private key corresponding to the public key included in the authentication credential that is specified in the 'client_cred' parameter.¶
The N_S may be either of the following:¶
The nonce received from the KDC in the 'kdcchallenge' parameter of the 2.01 (Created) response to the Token Transfer Request (see Section 3.6).¶
If the provisioning of the access token to the KDC has relied on the DTLS profile of ACE [RFC9202] and the access token was specified in the "psk_identity" field of the ClientKeyExchange message when using DTLS 1.2 [RFC6347], then N_S is an exporter value computed as defined in Section 4 of [RFC5705] (REQ15).¶
Specifically, N_S is exported from the DTLS session between the joining node and the KDC, using an empty context value (i.e., a context value of zero-length), 32 as length value in bytes, and the exporter label "EXPORTER-ACE-Sign-Challenge-coap-pubsub-app" defined in Section 9.6 of this document.¶
The same as above holds if TLS 1.2 [RFC5246] was used instead of DTLS 1.2, as per [RFC9430].¶
If the provisioning of the access token to the KDC has relied on the DTLS profile of ACE [RFC9202] and the access token was specified in the "identity" field of a PskIdentity within the PreSharedKeyExtension of the ClientHello message when using DTLS 1.3 [RFC9147], then N_S is an exporter value computed as defined in Section 7.5 of [RFC8446] (REQ15).¶
Specifically, N_S is exported from the DTLS session between the joining node and the KDC, using an empty 'context_value' (i.e., a 'context_value' of zero length), 32 as 'key_length' in bytes, and the exporter label "EXPORTER-ACE-Sign-Challenge-coap-pubsub-app" defined in Section 9.6 of this document.¶
The same as above holds if TLS 1.3 [RFC8446] was used instead of DTLS 1.3, as per [RFC9430].¶
If the Join Request is a retry in response to an error response from the KDC, which included a new 'kdcchallenge' parameter, then N_S MUST be the new value from this parameter.¶
It is up to applications or future specifications to define how N_S is computed in further alternative settings.¶
Upon receiving the Join Request, the KDC processes it as defined in Section 4.3.1 of [RFC9594] and returns a success or error response.¶
If the joining node is not requesting to join the group exclusively as a Subscriber and the 'client_cred' parameter does not specify the empty CBOR byte string (0x40), the KDC verifies the signature in the 'client_cred_verify' parameter. As PoP input, the KDC uses the value of the 'scope' parameter from the Join Request 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.¶
As public key of the joining node, the KDC uses the one included in the authentication credential retrieved from the 'client_cred' parameter of the Join Request. The KDC verifies the signature used as PoP evidence by means of the public key of the joining node, according to the signature algorithm used in the group and possible corresponding parameters.¶
Instead, if the joining node is not requesting to join the group exclusively as a Subscriber and the 'client_cred' parameter specifies the empty CBOR byte string (0x40), the KDC verifies that it is storing exactly one eligible authentication credential for the joining node (e.g., of the format accepted in the group).¶
In case an error occurs when processing the Join Request, the KDC and the joining node follow what is defined in Section 4.3.1 of [RFC9594], complemented by what is defined in Section 4.1.3 of the present document.¶
In case of success, the KDC responds with a Join Response, whose payload is formatted as a CBOR map and MUST contain the following fields as per Section 4.3.1 of [RFC9594]:¶
'gkty': this field specifies the key type "Group_PubSub_Keying_Material" (REQ18) registered in Section 9.1 for the 'key' parameter.¶
'key': this field specifies the keying material to use for secure communication in the group (REQ17). This field has as value a CBOR map that includes the following parameters.¶
'group_key': this parameter is identified by the CBOR unsigned integer 0 used as map key. Its value is a COSE_Key object as defined in [RFC9052] and conveying the group key to use in the security group.¶
The COSE_Key object MUST contain the following parameters:¶
'kty', with value 4 (Symmetric).¶
'alg', with value the identifier of the AEAD algorithm used in the security group. The value is taken from the "Value" column of the "COSE Algorithms" registry [IANA.cose_algorithms].¶
'Base IV', with value the Base Initialization Vector (Base IV) to use in the security group with this group key.¶
'k', with value the symmetric encryption key to use as group key.¶
'kid', with value the identifier of the COSE_Key object, hence of the group key.¶
This value is used as Group Identifier (Gid) of the security group, as long as the present key is used as group key in the security group. Consistent with the CBOR type of the 'kid' parameter, the Gid of the security group is encoded as a CBOR byte string (REQ13).¶
'group_SenderId': this parameter is identified by the CBOR unsigned integer 1 used as map key. Its value is the Client's Sender ID encoded as a CBOR byte string. This parameter MUST be included if the Client is joining the security group as a Publisher and MUST NOT be included otherwise. A Publisher Client MUST support the 'group_SenderId' parameter (REQ29).¶
The Sender ID MUST be unique within the security group. The KDC MUST only assign an available Sender ID that has not been used in the security group since the last time when the current Gid value was assigned to the group (i.e., since the latest group rekeying, see Section 5). The KDC MUST NOT assign a Sender ID to the joining node if the node is not joining the group as a Publisher.¶
The Sender ID can be short in length. Its maximum length in bytes is the length in bytes of the AEAD nonce for the AEAD algorithm, minus 6. This means that, when using AES-CCM-16-64-128 as AEAD algorithm in the security group, the maximum length of Sender IDs is 7 bytes.¶
'cred_fmt': this parameter is identified by the CBOR unsigned integer 2 used as map key. Its value specifies the format of authentication credentials used in the group and is taken from the "Label" column of the "COSE Header Parameters" registry [IANA.cose_header-parameters].¶
At the time of writing this specification, acceptable formats of authentication credentials are CBOR Web Tokens (CWTs) and CWT Claims Sets (CCSs) [RFC8392], X.509 certificates [RFC7925], and C509 certificates [I-D.ietf-cose-cbor-encoded-cert]. Further formats may be available in the future and would be acceptable to use as long as they comply with the criteria defined above (REQ6).¶
'sign_alg': this parameter is identified by the CBOR unsigned integer 3 used as map key. Its value specifies the Signature Algorithm used to sign messages in the group and is taken from the "Value" column of the "COSE Algorithms" registry [IANA.cose_algorithms].¶
'sign_params': this parameter is identified by the CBOR unsigned integer 4 used as map key. Its value specifies the parameters of the Signature Algorithm and is encoded as a CBOR array including the following two elements:¶
'sign_alg_capab' is a CBOR array, with 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 [IANA.cose_algorithms].¶
'sign_key_type_capab' is a CBOR array, with the same format and value of the COSE capabilities array for the COSE key type of the keys used with the Signature Algorithm indicated in 'sign_alg', as specified for that key type in the "Capabilities" column of the "COSE Key Types" registry [IANA.cose_key-type].¶
'num', specifying the version number of the keying material specified in the 'key' field. The initial value of the version number MUST be set to 0 upon creating the group (REQ16).¶
'exi', which MUST be present.¶
'ace_groupcomm_profile', which MUST be present and has value "coap_group_pubsub_app" (PROFILE_TBD), which is registered in Section 9.2 (REQ19).¶
'creds', which MUST be present if the 'get_creds' parameter was present in the Join Request and MUST NOT be present otherwise. It specifies the authentication credentials of all the Publishers in the security group.¶
'peer_roles', which MAY be omitted even if 'creds' is present, since: i) each authentication credential conveyed in the 'creds' parameter is associated with a Client authorised to be Publisher in the group; and ii) it is irrelevant whether such a Client is also authorised to be Subscriber in the group. If 'creds' is not present, 'peer_roles' MUST NOT be present.¶
'peer_identifiers', which MUST be present if 'creds' is also present and MUST NOT be present otherwise. The identifiers are the Publisher Sender IDs, whose corresponding authentication credentials are specified in the 'creds' parameter (REQ25).¶
'kdc_cred', which MUST be present if the group rekeying scheme used requires the use of a KDC authentication credential. It is encoded as a CBOR byte string, with value the original binary representation of the KDC's authentication credential (REQ8).¶
'kdc_nonce', which MUST be present if 'kdc_cred' is present. It is encoded as a CBOR byte string, with value a nonce N_KDC generated by the KDC. As to the N_KDC value, it is RECOMMENDED to be at least 8-byte long and it is RECOMMENDED to be a random value.¶
'kdc_cred_verify', which MUST be present if 'kdc_cred' is present. It is encoded as a CBOR byte string, with value the PoP evidence that the KDC computes to prove the possession of its own private key. The KDC MUST compute the specified PoP evidence as a signature by using the signature algorithm used in the group, as well as its own private key associated with the authentication credential specified in the 'kdc_cred' parameter (REQ21).¶
'group_rekeying', which MAY be omitted if the KDC uses the "Point-to-Point" group rekeying scheme registered in Section 11.13 of [RFC9594] as the default rekeying scheme in the group (OPT9). In any other case, the 'group_rekeying' parameter MUST be included.¶
The 'group_policies' parameter is not expected to be included in the Join Response (REQ20). This application profile does not define the functionalities that are possibly implemented at the resource hosted by the Client at the URI indicated in the 'control_group_uri' parameter (OPT10), if included in the Join Response.¶
After sending a successful Join Response, the KDC adds the Client to the list of current members of the security group, if that Client is not already a group member. Also, the Client is assigned a name NODENAME and a sub-resource /ace-group/GROUPNAME/nodes/NODENAME at the KDC. Furthermore, the KDC associates NODENAME with the Client's access token and with the secure communication association that the KDC has with the Client.¶
If the Client is a Publisher, its authentication credential used in the group is either: the one retrieved from the 'client_cred' parameter of the Join Request, if the parameter did not specify the empty CBOR byte string (0x40); or, otherwise, the one that the KDC acquired from previous interactions with the joining node and is currently storing. The KDC associates the Client's authentication credential with the tuple containing NODENAME, GROUPNAME, the current Gid, the newly assigned Publisher's Sender ID, and the Client's access token. The KDC MUST keep this association updated over time.¶
Note that, as long as the secure communication association between the Client and the KDC persists, the same Client re-joining the group is recognized by the KDC by virtue of such a secure communication association. As a consequence, the re-joining Client keeps the same NODENAME and the associated subresource /ace-group/GROUPNAME/nodes/NODENAME. Also, if the Client is a Publisher, it receives a new Sender ID according to the same criteria defined above.¶
If the application requires backward security, the KDC MUST generate updated security parameters and group keying material, and provide it to the current group members upon the new node's joining (see Section 5). In such a case, the joining node is not able to access secure communication in the Pub-Sub group prior to its joining.¶
Upon receiving the Join Response, the joining node retrieves the KDC's authentication credential from the 'kdc_cred' parameter (if present). The joining node MUST verify the signature used as PoP evidence, which is specified by the 'kdc_cred_verify' parameter of the Join Response (REQ21).¶
The KDC MUST reply with a 4.00 (Bad Request) error response (OPT4) to the Join Request in the following cases:¶
The joining node is not requesting to join the group exclusively as a Subscriber and the 'client_cred' parameter is not present in the Join Request.¶
The joining node is not requesting to join the group exclusively as a Subscriber, the 'client_cred' parameter does not specify the empty CBOR byte string (0x40), and any of the following conditions holds:¶
The joining node is not requesting to join the group exclusively as a Subscriber, the 'client_cred' parameter specifies the empty CBOR byte string (0x40), and any of the following conditions holds:¶
The 'scope' parameter is not present in the Join Request, or it is present and specifies any set of permissions not included in the list defined in Section 3.4.1.¶
A 4.00 (Bad Request) error response from the KDC to the joining node MAY have content format "application/ace-groupcomm+cbor" and contain a CBOR map as payload.¶
The CBOR map MAY include the 'kdcchallenge' parameter. If present, this parameter is a CBOR byte string, with value a newly generated 'kdcchallenge' value that the Client can use when preparing a new Join Request. In such a case, the KDC MUST store the newly generated value as the 'kdcchallenge' value associated with the joining node, which replaces the currently stored value (if any).¶
Upon receiving the Join Response, if 'kdc_cred' is present but the Client cannot verify the PoP evidence, the Client MUST stop processing the Join Response and MAY send a new Join Request to the KDC.¶
The KDC MUST return a 5.03 (Service Unavailable) error response to a Client that sends a Join Request to join the security group as Publisher, in case there are currently no Sender IDs available to assign. The response MUST have Content-Format set to "application/concise-problem-details+cbor" and is formatted as defined in Section 4.1.2 of [RFC9594]. 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").¶
A Client can access the following resources at the KDC, in order to retrieve latest information about the group or the group keying material.¶
'/ace-group': All Clients can send a FETCH request to retrieve a set of group names associated with their group identifiers specified in the request payload. Each element of the CBOR array 'gid' is a CBOR byte string (REQ13), which encodes the Gid of the group (see Section 4.1.2) for which the group name and the URI to the group-membership resource are provided in the returned response.¶
'/ace-group/GROUPNAME': All group member Clients can send a GET request to retrieve the symmetric group keying material of the group with the name GROUPNAME. The value of the GROUPNAME URI path and the group name in the access token scope ('gname') MUST coincide (REQ7).¶
The KDC processes the Key Distribution Request according to Section 4.3.2 of [RFC9594]. The Key Distribution Response is formatted as defined in Section 4.3.2 of [RFC9594], with the following additions.¶
The 'key' field is formatted as defined in Section 4.1.2 of this document, with the difference that it does not include the 'group_SenderId' parameter.¶
The 'exi' field MUST be present.¶
The 'ace_groupcomm_profile' field MUST be present and has value "coap_group_pubsub_app" (PROFILE_TBD).¶
Upon receiving the Key Distribution Response, the requesting group member retrieves the updated security parameters and group keying material. If they differ from the currently stored ones, then the group member uses the received ones thereafter for the security processing of published topic data, i.e., for encryption operations when acting as Publisher and for decryption operations when acting as Subscriber.¶
This application profile does not specify policies that instruct group members to retain messages and for how long, if those messages are unsuccessfully decrypted (OPT11).¶
'/ace-group/GROUPNAME/creds': The KDC acts as a repository of authentication credentials for the Publishers that are member of the security group with name GROUPNAME. The members of the group that are Subscribers can send GET/FETCH requests to this resource in order to retrieve the authentication credentials of all or a subset of the group members that are Publishers. The KDC silently ignores the Sender IDs included in the 'get_creds' parameter of the request that are not associated with any current Publisher group member (REQ26).¶
The response from the KDC MAY omit the parameter 'peer_roles', since: i) each authentication credential conveyed in the 'creds' parameter is associated with a Client authorised to be Publisher in the group; and ii) it is irrelevant whether such a Client is also authorised to be Subscriber in the group. If 'creds' is not present, 'peer_roles' MUST NOT be present.¶
'/ace-group/GROUPNAME/num': All group member Clients can send a GET request to this resource in order to retrieve the current version number for the symmetric group keying material of the group with name GROUPNAME.¶
'/ace-group/GROUPNAME/kdc-cred': All group member Clients can send a GET request to this resource in order to retrieve the current authentication credential of the KDC.¶
'/ace-group/GROUPNAME/nodes/NODENAME': A group member can send a Key Distribution Request to the KDC by sending a GET request to this resource to retrieve the latest group keying material as well as its Sender ID that it has in the group (if Publisher).¶
The KDC processes the Key Distribution Request according to Section 4.8.1 of [RFC9594]. The Key Distribution Response is formatted as defined in Section 4.8.1 of [RFC9594], with the following additions.¶
The 'key' field is formatted as defined in Section 4.1.2 of this document. If the requesting group member is not a Publisher Client, then the 'key' field does not include the 'group_SenderId' parameter.¶
The 'exi' field MUST be present.¶
Upon receiving the Key Distribution Response, the group member retrieves the updated security parameters, group keying material, and Sender ID (if the 'key' field includes the 'group_SenderId' parameter). If they differ from the currently stored ones, then the group member uses the received ones thereafter for the security processing of published topic data, i.e., for encryption operations when acting as Publisher and for decryption operations when acting as Subscriber.¶
This application profile does not specify policies that instruct group members to retain messages and for how long, if those messages are unsuccessfully decrypted (OPT11).¶
A Publisher group member with node name NODENAME may at some point exhaust its Sender Sequence Numbers used for protecting its published topic data (see Section 6.1).¶
When this happens, the Publisher MUST send a Key Renewal Request message to the KDC, as per Section 4.8.2.1 of [RFC9594]. That is, it sends a CoAP POST request to the endpoint /ace-group/GROUPNAME/nodes/NODENAME at the KDC.¶
Upon receiving the Key Renewal Request, the KDC processes it as defined in Section 4.8.2 of [RFC9594], with the addition that the KDC takes one of the following actions.¶
The KDC rekeys the group. That is, the KDC generates new group keying material for that group (see Section 5) and replies to the Publisher with a group rekeying message as defined in Section 5, providing the new group keying material. Then, the KDC rekeys the rest of the group, as discussed in Section 5.¶
The KDC SHOULD perform a group rekeying if one is already scheduled to occur within a time frame that is acceptably short, as per application-specific policies at the KDC. For instance, a group rekeying could be already upcoming in accordance with an application-specific rekeying period or scheduling, or as a reaction to a recent change in the group membership. If a group rekeying is not already scheduled to occur within an acceptably short time frame, the KDC SHOULD NOT rekey the group when receiving a Key Renewal Request (OPT12).¶
The KDC determines and assigns a new Sender ID for the Publisher (REQ27), and it replies with a Key Renewal Response formatted as defined in Section 4.8.2 of [RFC9594]. The CBOR Map in the response payload includes only the parameter 'group_SenderId' registered in Section 16.3 of [I-D.ietf-ace-key-groupcomm-oscore], which specifies the new Sender ID of the Publisher encoded as a CBOR byte string (REQ27).¶
The KDC MUST assign a new Sender ID that has not been used in the group since the latest time when the current Gid value was assigned to the group (i.e., since the latest group rekeying, see Section 5).¶
The KDC MUST return a 5.03 (Service Unavailable) error response in case there are currently no Sender IDs available to assign in the group. The response MUST have Content-Format set to "application/concise-problem-details+cbor" and is formatted as defined in Section 4.1.2 of [RFC9594]. 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").¶
A Publisher group member with node name NODENAME can contact the KDC to upload a new authentication credential to use in the security group with name GROUPNAME, and replace the currently stored one.¶
To this end, the Publisher sends a CoAP POST request to its associated sub-resource /ace-group/GROUPNAME/nodes/NODENAME/cred at the KDC (see Section 4.9.1 of [RFC9594]).¶
Following a successful processing of the request, the KDC replaces the stored authentication credential of this Client for the group GROUPNAME with the one specified in the request.¶
This application profile does not specify a method for the group member to provide other group members with the identifier of its new authentication credential (OPT13).¶
A group member with node name NODENAME can actively request to leave the security group with name GROUPNAME.¶
To this end, the Client sends a CoAP DELETE request to the associated sub-resource /ace-group/GROUPNAME/nodes/NODENAME at the KDC (see Section 4.8.3 of [RFC9594]).¶
The KDC can also remove a group member due to any of the reasons described in Section 5 of [RFC9594].¶
Rekeying a group consists in the KDC generating and distributing a new symmetric key, which is used as group key from then on to protect the publication of topic data with COSE (see Section 6.1).¶
The KDC MUST perform a group rekeying as described in Section 6 of [RFC9594]. Reasons that can trigger a group rekeying include a change in the group membership, or the current group keying material approaching its expiration time. In addition, the KDC MAY rekey the group for other reasons, e.g., according to an application-specific rekeying period or scheduling.¶
Upon generating the new group key and before starting its distribution:¶
The KDC MUST increment the version number of the group keying material.¶
The KDC MUST generate a new Group Identifier (Gid) for the group. This is used as the identifier of the new group key, when providing it to the current group members through the group rekeying and to Clients (re-)joining the security group thereafter (see Section 4.1.2).¶
That is, the value of the new Gid is specified by the 'kid' parameter of the COSE_Key Object that is used to encode the new group key.¶
When rekeying the group, the KDC MUST preserve the current value of the Sender ID of each member in that group.¶
The default rekeying scheme is "Point-to-Point" (see Section 6.1 of [RFC9594]), according to which the KDC individually targets each node to rekey, using the pairwise secure communication association with that node.¶
In particular, a group rekeying message MUST have Content-Format set to "application/ace-groupcomm+cbor" and have the same format used for the Join Response message defined in Section 4.1.2, with the following differences:¶
Within the 'key' field, only the parameter 'group_key' is present.¶
The fields 'kdc_cred' ,'kdc_nonce', 'kdc_cred_verify', and 'group_rekeying' are not present.¶
The fields 'creds' and 'peer_identifiers' SHOULD be present, if the group rekeying is performed due to one or multiple Clients joining the group as Publishers. Following the same semantics used in the Join Response message, the two parameters specify the authentication credentials and Sender IDs of such Clients. Like in the Join Response message, the 'peer_roles' parameter MAY be omitted.¶
This application profile does not define additional information to include in rekeying messages for the "Point-to-Point" group rekeying scheme (OPT14).¶
In the diagram shown in Figure 8, (D) corresponds to the publication on a topic at the Broker, by using a CoAP PUT request. The Publisher protects the published topic data end-to-end for the Subscribers by using COSE ([RFC9052][RFC9053][RFC9338]), as detailed in Section 6.1.¶
In the same diagram, (E) corresponds to the subscription of a Subscriber to the same topic, by means of a CoAP GET request with the Observe option set to 0 (register) [RFC7641], as per [I-D.ietf-core-coap-pubsub]. Finally, (F) corresponds to the Observe notification response from the Broker to the Subscriber, where the published topic data is conveyed as originally protected end-to-end with COSE by the Publisher.¶
Figure 9 provides a more detailed example of such a secure Pub-Sub communication. All the messages exchanged between a Client and the Broker are protected with the secure communication association between that Client and the Broker. In addition, COSE is used to protect end-to-end the published topic data, which is conveyed in a PUT request from the Publisher to the topic-data resource at the Broker and in a 2.05 (Content) response from that resource to a Subscriber.¶
The example also shows a delete operation, where the Publisher deletes the topic-data resource by sending a CoAP DELETE request to the URI of that resource. In case of success, the Broker replies with a 2.02 (Deleted) response. Consequently, the Broker also unsubscribes all the Clients subscribed to that topic-data resource, by removing them from the list of observers and sending them a final 4.04 (Not Found) error response as per Section 3.2 of [RFC7641].¶
The Publisher uses the symmetric COSE Key received from the KDC to protect the payload of the Publish operation (see Section 3.2.1 of [I-D.ietf-core-coap-pubsub]). Specifically, the Publisher creates a COSE_Encrypt0 object [RFC9052][RFC9053] by means of the COSE Key currently used as group key (REQ23). The encryption algorithm and Base IV to use are specified by the 'alg' and 'Base IV' parameters of the COSE Key, together with its key identifier in the 'kid' parameter.¶
Also, the Publisher uses its private key corresponding to the public key sent to the KDC, in order to countersign the COSE_Encrypt0 object as specified in [RFC9338] (REQ23). The countersignature is specified in the 'Countersignature version 2' parameter, within the 'unprotected' field of the COSE_Encrypt0 object.¶
Finally, the Publisher sends the COSE_Encrypt0 object conveying the countersignature to the Broker, as payload of the PUT request sent to the topic-data of the topic targeted by the Publish operation.¶
Upon receiving a response from the topic-data resource at the Broker, the Subscriber uses the 'kid' parameter from the 'Countersignature version 2' parameter within the 'unprotected' field of the COSE_Encrypt0 object, in order to retrieve the Publisher's public key from the KDC (see Section 4.2.1) or from its local storage. Then, the Subscriber uses that public key to verify the countersignature.¶
In case of successful verification, the Subscriber uses the 'kid' parameter from the 'unprotected' field of the COSE_Encrypt0 object, in order to retrieve the COSE Key used as current group key from its local storage. Then, the Subscriber uses that group key to verify and decrypt the COSE_Encrypt0 object. In case of successful verification, the Subscriber delivers the received topic data to the application.¶
The COSE_Encrypt0 object is constructed as follows.¶
The 'protected' field MUST include:¶
The 'alg' parameter, with value the identifier of the AEAD algorithm specified in the 'alg' parameter of the COSE Key used as current group key.¶
The 'unprotected' field MUST include:¶
The 'kid' parameter, with the same value specified in the 'kid' parameter of the COSE Key used as current group key. This value represents the current Group ID (Gid) of the security group associated with the application group (topic).¶
The 'Partial IV' parameter, with value set to the current Sender Sequence Number of the Publisher. All leading bytes of value zero SHALL be removed when encoding the Partial IV, except in the case of Partial IV with value 0, which is encoded to the byte string 0x00.¶
The Publisher MUST initialize the Sender Sequence Number to 0 upon joining the security group and MUST reset it to 0 upon receiving a new group key as the result of a group rekeying (see Section 5). The Publisher MUST increment its Sender Sequence Number value by 1, after having completed an encryption operation by means of the current group key.¶
When the Publisher exhausts its Sender Sequence Numbers, the Publisher MUST NOT protect further topic data by using the current group key while still retaining its current Sender ID, and it MUST send a Key Renewal Request message to the KDC (see Section 4.2.2). This will result in the KDC rekeying the group and distributing a new group key, or in the KDC providing the Publisher with a new Sender ID. The Publisher MUST reset its Sender Sequence Number to 0 upon receiving a new Sender ID from the KDC.¶
The 'Countersignature version 2' parameter, specifying the countersignature of the COSE_Encrypt0 object. In particular:¶
The 'protected' field includes the 'alg' parameter, with value the identifier of the Signature Algorithm used in the security group.¶
The 'unprotected' field includes the 'kid' parameter, with value the Publisher's Sender ID that the Publisher obtained from the KDC when joining the security group, as the value of the 'group_SenderId' parameter of the Join Response (see Section 4.1.2).¶
The 'signature' field, with value the countersignature.¶
The countersignature is computed as defined in [RFC9338], by using the private key of the Publisher as signing key and by means of the Signature Algorithm used in the group. The fields of the Countersign_structure are populated as follows:¶
'context' takes "CounterSignature".¶
'body_protected' takes the serialized parameters from the 'protected' field of the COSE_Encrypt0 object, i.e., the 'alg' parameter.¶
'sign_protected' takes the serialized parameters from the 'protected' field of the 'Countersignature version 2' parameter, i.e., the 'alg' parameter.¶
'external_aad is not supplied.¶
'payload' is the ciphertext of the COSE_Encrypt0 object (see below).¶
The 'ciphertext' field specifies the ciphertext computed over the topic data to publish. The ciphertext is computed as defined in [RFC9052][RFC9053], by using the current group key as encryption key, the AEAD Nonce computed as defined in Section 6.2, the topic data to publish as plaintext, and the Enc_structure populated as follows:¶
This section defines how to generate the AEAD nonce used for encrypting and decrypting the COSE_Encrypt0 object protecting the published topic data. This construction is analogous to that used to generate the AEAD nonce in the OSCORE security protocol (see Section 5.2 of [RFC8613]).¶
The AEAD nonce for producing or consuming the COSE_Encrypt0 object is constructed as defined below and also shown in Figure 10.¶
Left-pad the Partial IV (PIV) with zeroes to exactly 5 bytes.¶
Left-pad the Sender ID of the Publisher that generated the Partial IV (ID_PIV) with zeroes to exactly the nonce length of the AEAD algorithm minus 6 bytes.¶
Concatenate the size of the ID_PIV (a single byte S) with the padded ID_PIV and the padded PIV.¶
XOR the result from the previous step with the Base IV.¶
<- nonce length minus 6 B -> <-- 5 bytes -->
+---+-------------------+--------+---------+-----+
| S | padding | ID_PIV | padding | PIV |-----+
+---+-------------------+--------+---------+-----+ |
|
<---------------- nonce length ----------------> |
+------------------------------------------------+ |
| Base IV |-->(XOR)
+------------------------------------------------+ |
|
<---------------- nonce length ----------------> |
+------------------------------------------------+ |
| Nonce |<----+
+------------------------------------------------+
The construction above only supports AEAD algorithms that use nonces with length equal or greater than 7 bytes. At the same time, it makes it easy to verify that the nonces will be unique when used with the same group key, even though this is shared and used by all the Publishers in the security group. In fact:¶
Since Publisher's Sender IDs are unique within the security group and they are not reassigned until a group rekeying occurs (see Section 4.1.2 and Section 5), two Publisher Clients cannot share the same tuple (S, padded ID_PIV) by construction.¶
Since a Publisher increments by 1 its Sender Sequence Number after each use that it makes of the current group key, the Publisher never reuses the same tuple (S, padded ID_PIV, padded PIV) together with the same group key.¶
Therefore neither the same Publisher reuses the same AEAD nonce with the same group key, nor any two Publishers use the same AEAD nonce with the same group key.¶
In order to protect from replay of published topic data, every Subscriber maintains a Replay Window for each different Publisher in the same group. It is RECOMMENDED that the Replay Window has a default size of 32.¶
Upon receiving a topic data published by a given Publisher P, the Subscriber retrieves the Sender ID of P conveyed as 'kid' in the 'Countersignature version 2' parameter of the COSE_Encrypt0 object (see Section 6.1) and determines the Replay Window W_P associated with P.¶
The Subscriber MUST verify that, according to W_P, the Sender Sequence Number SN_P specified by the 'Partial IV' parameter of the COSE_Encrypt0 object has not been received before from P.¶
If the verification above fails, the Subscriber MUST stop processing the COSE_Encrypt0 object conveying the topic data. If the value of SN_P is strictly smaller than the currently smallest value in W_P, then the Subscriber MUST stop processing the COSE_Encrypt0 object.¶
If the verification above succeeds, the Subscriber proceeds with processing the COSE_Encrypt0 object, by verifying the countersignature from P using P's public key as well as by decrypting and verifying the COSE_Encrypt0 object using the group key. If both operations succeed, the Subscriber updates W_P as follows:¶
If SN_P is strictly greater than the currently largest value in W_P, then W_P is updated in order to set SN_P as its largest value.¶
SN_P is marked to denote that it has been received.¶
The operation of validating the 'Partial IV' and updating the Replay Window MUST be atomic.¶
Upon installing a new group key (e.g., due to a group rekeying performed by the KDC, see Section 5) or upon receiving published topic data from a given Publisher for the first time, the Subscriber initializes the Replay Window corresponding to that Publisher, i.e., the smallest value of the Replay Window is set to 0.¶
This section compiles the operational considerations that hold for this document.¶
When performing its normal operations, the KDC is expected to produce and store timestamped logs about the following:¶
Any event that has resulted in the KDC sending an error response, as a reply to a request received at any of the resources exported by the interface specified in this document.¶
The logged information contains a description of the error occurred in the context of the present application profile, together with a description of the event related to the error and relevant metadata about the Client that has sent the request. For instance, possible metadata include: addressing information of the Client; when applicable, the Sender ID that is assigned to the Client in the group; when applicable, (an identifier of) the authentication credential of the Client (i.e., that the Client uses in the group or has used to authenticate itself to the KDC when establishing their secure communication association).¶
Note that, if the error response uses the format problem-details defined in [RFC9290], then the optional "detail" entry in the response payload is meant to convey the diagnostic description of the error, which is meant to be part of the log entry for this event. This is consistent with Section 4.1.2 of [RFC9594], which states that the diagnostic description of the error should be logged.¶
Any event consisting in a successfully performed operation that is triggered by a request received at any of the resources exported by the interface specified in this document.¶
Such events include:¶
A Client joining or re-joining a group.¶
The upload of a new authentication credential for use within the group.¶
The acquisition of a new Sender ID for use within the group.¶
A Client leaving a group.¶
The logged information contains a description of the operation performed in the context of the present application profile, together with relevant metadata about the Client that has sent the request. For instance, possible metadata include: addressing information of the Client; when applicable, the Sender ID that is assigned to the Client in the group; when applicable, (an identifier of) the authentication credential of the Client (i.e., that the Client uses in the group or has used to authenticate itself to the KDC when establishing their secure communication association).¶
The execution and successful/unsuccessful completion of a group rekeying instance.¶
The logged information includes:¶
The reason for the group rekeying (e.g., scheduled/periodic occurrence, group joining of a new member, group leaving of a current member).¶
A description of the group rekeying operations performed (e.g., a list of steps performed throughout the rekeying process).¶
The outcome of the group rekeying instance.¶
In case of success, the version number of the newly established group keying material and the newly established Group Identifier (Gid).¶
The addition of a group member to the group or the eviction of a group member from the group.¶
The logged information also contains relevant metadata about the Client that has been added to or removed from the group. For instance, possible metadata include: addressing information of the Client; when applicable, the Sender ID that is currently (was latest) assigned to the Client added to (removed from) the group; when applicable, (an identifier of) the authentication credential of the Client added to (removed from) the group (i.e., that the Client uses in the group or has used to authenticate itself to the KDC when establishing their secure communication association).¶
The creation, (re-)configuration, or termination of a group.¶
In addition to what is compiled above, the KDC could log additional information. Further details about what the KDC logs, with what granularity, and based on what triggering events and conditions are application-specific and left to operators to define.¶
The KDC MUST NOT log any secret or confidential information pertaining to a group, such as:¶
The group key used in the group as symmetric encryption key.¶
The Base Initialization Vector (Base IV) to use in the security group with the group key.¶
The private key associated with the KDC’s authentication credential used in the group, if any.¶
Rekeying messages that are exchanged in the group.¶
If applicable, administrative keying material used to protect the group rekeying process.¶
It is up to the application to specify for how long a log entry is retained from the time of its creation and until its deletion. Different retention policies could be enforced for different groups. For a given group, oldest log entries are expected to be those deleted first, and different retention policies could be enforced depending on whether the group currently exists or has been deleted.¶
It is out of the scope of this document what specific semantics and data model are used by the KDC for producing and processing the logs. Specific semantics and data models can be defined by applications and future specifications.¶
The KDC is expected to make the logs that it produces available for secure access by authorized external management applications and operators.¶
In particular, logged information could be retrieved in the following ways.¶
By accessing logs at the KDC through polling. This can occur in an occasional, regular, or event-driven way.¶
Through notifications sent by the KDC according to an operator-defined frequency.¶
Through notifications asynchronously sent by the KDC, throttling them in order to prevent congestion and duplication and to not create attack vectors.¶
Some of the logged information can be privacy-sensitive. This especially holds for the metadata about a Client, i.e., addressing information of the Client and, when applicable, (an identifier of) the authentication credential of the Client (i.e., that the Client uses in the group or has used to authenticate itself to the KDC when establishing their secure communication association). If external management applications and operators obtain such metadata, they become able to track a given Client, as to its interactions with one or multiple KDCs and its membership in groups under such KDC(s).¶
Therefore, the logged information that is effectively provided to external management applications and operators SHOULD be redacted by the KDC, by omitting any privacy-sensitive information element that could enable or facilitate the impairment of Clients' privacy, e.g., by tracking Clients across different groups and different KDCs. Exceptions could apply, e.g., if the KDC can verify that the management application or operator in question is specifically authorized to obtain such privacy-sensitive information and appropriately entitled to obtain it according to enforced privacy policies.¶
It is out of the scope of this document to provide operational considerations about the production, storage, processing, and sharing of logs at the Broker.¶
It is out of the scope of this document how groups are created, (re-)configured, and terminated at the KDC. Specific methods, tools, and data models to perform such operations and administer groups at the KDC can be defined by applications and future specifications.¶
It is out of the scope of this document to provide operational considerations about how application groups (topics) are created, (re-)configured, and terminated at the Broker, as well as about the store-and-forward of published topic data via the Broker.¶
Building on the ACE framework [RFC9200] and the foundation provided in [RFC9594], this application profile enforces access control for Clients that interact with the interface at the KDC specified in this document and with the interface at the Broker specified in [I-D.ietf-core-coap-pubsub].¶
In particular, the granularity of such access control takes into account the resource specifically targeted at the KDC or at the Broker, the operation requested by sending a request to that resource, and the specific role(s) that the requesting Client is authorized to have according to its corresponding access token uploaded to the KDC or to the Broker.¶
Furthermore, the interactions that a Client has with the KDC and with the Broker are secured as per the specific transport profile of ACE used (e.g., [RFC9202] and [RFC9203]).¶
Security considerations for this profile are inherited from [RFC9594], the ACE framework for Authentication and Authorization [RFC9200], and the specific transport profile of ACE used, such as [RFC9202] and [RFC9203].¶
The following security considerations also apply for this profile.¶
Consistent with the intended group-confidentiality model, each Client in a security group is able to decrypt the data published in the topic(s) associated with that group, by using the symmetric group key that is shared with all the other group members.¶
At the same time, source authentication of the published topic data is achieved by means of a digital signature, which the Publisher of the data in question computes with its private key and embeds in the published topic data. This ensures integrity of the published topic data as well as its origin, thus preventing a group member from impersonating another one.¶
To this end, both Publishers and Subscribers rely on asymmetric cryptography, while Subscribers must be able to access the public keys of the Publishers to a specific topic in order to verify the signature over the published topic data. This might make the message exchange quite heavy for small constrained devices.¶
The Broker is only trusted with verifying that a Publisher is authorised to publish on a certain topic and with distributing that data only to the Subscribers authorised to obtain it. However, the Broker is not trusted with the published topic data in itself, which the Broker cannot read or modify as it does not have access to the group key required for decrypting the data.¶
With respect to the reuse of nonces for proof-of-possession input, the same considerations apply as in [I-D.ietf-ace-key-groupcomm-oscore], with the difference that the KDC of the present document is considered instead of the Group Manager defined therein.¶
Access tokens might have to be revoked before their expiration time. [RFC9770] provides a list of possible circumstances where this can happen, and it specifies a method that an Authorization Server can use in order to notify the KDC, the Broker, and the Clients about pertaining access tokens that have been revoked but are not expired yet.¶
Aligned with Section 5, the KDC performs a group rekeying when one or more members leave the group, thus preserving forward security. In particular, Clients can be excluded from future communications related to a topic, by appropriately rekeying the group associated with the topic in question. According to the specific application requirements, the KDC can also rekey the group upon a new node's joining, in case backward security has also to be preserved (see Section 4.1.2). The KDC can also rekey the group for further reasons, e.g., according to an application-specific rekeying period or scheduling.¶
Note to RFC Editor: Please replace "[RFC-XXXX]" with the RFC number of this document and delete this paragraph.¶
This document has the following actions for IANA.¶
IANA is asked to register the following entry in the "ACE Groupcomm Key Types" registry defined in Section 11.8 of [RFC9594].¶
Name: Group_PubSub_Keying_Material¶
Key Type Value: GROUPCOMM_KEY_TBD (suggested value: 2)¶
Profile: coap_group_pubsub_app (Section 9.2 of [RFC-XXXX]).¶
Description: Encoded as described in Section 4.1.2 of [RFC-XXXX].¶
IANA is asked to register the following entries in the "ACE Groupcomm Profiles" registry defined in Section 11.9 of [RFC9594].¶
Name: coap_group_pubsub_app¶
Description: Application profile to provision keying material for participating in group communication based on the Pub-Sub architecture [I-D.ietf-core-coap-pubsub] for CoAP [RFC7252] and protected with COSE [RFC9052][RFC9053][RFC9338].¶
CBOR Value: TBD (suggested value: 2)¶
Reference: [RFC-XXXX]¶
IANA is asked to register the following entry in the "Resource Type (rt=) Link Target Attribute Values" registry within the "Constrained Restful Environments (CoRE) Parameters" registry group.¶
Value: "core.ps.gm"¶
Description: Group-membership resource for Pub-Sub communication.¶
Reference: [RFC-XXXX]¶
Clients can use this resource type to discover a group membership resource at the KDC.¶
For the media-types "application/aif+cbor" and "application/aif+json" defined in Section 5.1 of [RFC9237], IANA is requested to register the following entries for the two media-type parameters Toid and Tperm, in the respective sub-registry defined in Section 5.2 of [RFC9237] within the "MIME Media Type Sub-Parameter" registry group.¶
Parameter: Toid¶
Name: pubsub-topic¶
Description/Specification: Name of one application group (topic) or of a corresponding security group.¶
Reference: [RFC-XXXX]¶
IANA is asked to register the following entries to the "CoAP Content-Formats" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.¶
Content Type: application/aif+cbor;toid=pubsub-topic;tperm=pubsub-perm¶
Content Coding: -¶
ID: 294 (suggested)¶
Reference: [RFC-XXXX]¶
IANA is asked to register the following entry to the "TLS Exporter Labels" registry defined in Section 6 of [RFC5705] and updated in Section 12 of [RFC8447].¶
Value: EXPORTER-ACE-Sign-Challenge-coap-pubsub-app¶
DTLS-OK: Y¶
Recommended: N¶
Reference: Section 4.1.1.2 of [RFC-XXXX]¶
This section lists how this application profile of ACE addresses the requirements defined in Appendix A of [RFC9594].¶
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.4.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]: see Section 9.4 and Section 9.5.¶
REQ3: If used, specify the acceptable values for the 'sign_alg' parameter: values from the "Value" column of the "COSE Algorithms" registry [IANA.cose_algorithms].¶
REQ4: If used, specify the acceptable values and structure for the 'sign_parameters' parameter: values and structure from the COSE algorithm capabilities as specified in the "COSE Algorithms" registry [IANA.cose_algorithms].¶
REQ5: If used, specify the acceptable values and structure for the 'sign_key_parameters' parameter: values and structure from the COSE key type capabilities as specified in the "COSE Key Types" registry [IANA.cose_key-type].¶
REQ6: Specify the acceptable formats for authentication credentials and, if applicable, the acceptable values for the 'cred_fmt' parameter: acceptable formats explicitly provide the public key as well as the comprehensive set of information related to the public key algorithm (see Section 3.6 and Section 4.1.2). Consistent acceptable values for 'cred_fmt' are taken from the "Label" column of the "COSE Header Parameters" registry [IANA.cose_header-parameters].¶
REQ7: If the value of the GROUPNAME URI path and the group name in the access token scope ('gname') are not required to coincide, specify the mechanism to map the GROUPNAME value in the URI to the group name: not applicable, since a perfect matching is required.¶
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: optional, see Section 4.1.2.¶
REQ9: Specify if any part of the KDC interface as defined in [RFC9594] is not supported by the KDC: part of the KDC interface is optional to support, see Section 4.¶
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: the Resource Type (rt=) Link Target Attribute value "core.ps.gm" is registered in Section 9.3.¶
REQ11: Define what specific actions (e.g., CoAP methods) are allowed on each resource accessible through the KDC interface, depending on: whether the Client is a current group member; the roles that a Client is authorised to take as per the obtained access token; and the roles that the Client has as a current group member: see Section 4.¶
REQ12: Categorize possible newly defined operations for Clients into primary operations expected to be minimally supported and secondary operations, and provide accompanying considerations: no new operations are defined.¶
REQ13: Specify the encoding of group identifiers: CBOR byte string, with value used also to identify the current group key used in the security group (see Section 4.1.2 and 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.1.1.2.¶
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): see Section 4.1.1.2.¶
REQ16: Define the initial value of the version number for the group keying material: the initial value MUST be set to 0 (see Section 4.1.2).¶
REQ17: Specify the format of the group keying material that is conveyed in the 'key' parameter: see Section 4.1.2.¶
REQ18: Specify the acceptable values of the 'gkty' parameter. For each of them, register a corresponding entry in the "ACE Groupcomm Key Types" IANA registry if such an entry does not exist already: Group_PubSub_Keying_Material, see Section 4.1.2 and Section 9.1.¶
REQ19: Specify and register the application profile identifier: coap_group_pubsub_app (see Section 4.1.2 and Section 9.2).¶
REQ20: If used, specify the format and default values of the entries of the CBOR map to include in the 'group_policies' parameter: not applicable.¶
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. 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.1.2.¶
REQ22: Specify the communication protocol that members of the group use to communicate with each other (e.g., CoAP for group communication): CoAP [RFC7252], used for Pub-Sub communications as defined in [I-D.ietf-core-coap-pubsub].¶
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: Publishers in a group use a symmetric group key to protect published topic data as a COSE_Encrypt0 object, per the AEAD algorithm specified by the KDC. A Publisher also produces a COSE countersignature of the COSE_Encrypt0 object by using its private key, per the signature algorithm specified by the KDC.¶
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: ACE transport profile such as for DTLS [RFC9202] or OSCORE [RFC9203].¶
REQ25: Specify the format of the node identifiers of group members: the Sender ID defined in Section 4.1.2.¶
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.2.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 Section 4.2.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 3.5 and Section 9.5.¶
REQ29: Categorize newly defined parameters according to the same criteria of Section 8 of [RFC9594]: a Publisher Client MUST support 'group_SenderId' in 'key'; see Section 4.1.2.¶
REQ30: Define whether Clients must, should, or may support the conditional parameters defined in Section 8 of [RFC9594] and under which circumstances: a Publisher Client MUST support the client_cred' and 'client_cred_verify' parameters (see Section 4.1.1). A Publisher Client that provides the access token to the KDC through the /authz-info endpoint MUST support the parameter 'kdcchallenge' (see Section 3.6).¶
OPT1: Optionally, if the textual format of scope is used, specify CBOR values to use for abbreviating the role identifiers in the group: not applicable.¶
OPT2: Optionally, specify the additional parameters used in the exchange of Token Transfer Request and Response: none are defined.¶
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.6.¶
OPT4: Optionally, specify possible or required payload formats for specific error cases: see Section 4.1.3.¶
OPT5: Optionally, specify additional identifiers of error types as values of the 'error-id' field within the Custom Problem Detail entry 'ace-groupcomm-error': none are defined.¶
OPT6: Optionally, specify the encoding of the 'creds_repo' parameter if the default one is not used: no encoding is defined.¶
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: no functionalities are defined.¶
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: The KDC MUST reply with a 4.00 (Bad Request) error response to the Join Request (see Section 4.1.3).¶
OPT9: Optionally, define a default group rekeying scheme to refer to in case the 'rekeying_scheme' parameter is not included in the Join Response: the "Point-to-Point" rekeying scheme registered in Section 11.13 of [RFC9594].¶
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: no functionalities are defined.¶
OPT11: Optionally, specify policies that instruct Clients to retain messages and for how long, if those are unsuccessfully decrypted: no such policies are specified.¶
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: the KDC SHOULD perform a group rekeying if one is already scheduled to occur within an acceptably short time frame, otherwise it SHOULD NOT (see Section 4.2.2).¶
OPT13: Optionally, specify how the identifier of a group member's authentication credential is included in requests sent to other group members: no such method is defined.¶
OPT14: Optionally, specify additional information to include in rekeying messages for the "Point-to-Point" group rekeying scheme (see Section 6 of [RFC9594]): no additional information is defined.¶
This section is to be removed before publishing as an RFC.¶
Updated introduction: clarified relationships between this document and related documents.¶
Ensured consistency with RFC 9594 when using an optimized Join Request for re-joining a group (presence of the 'client_cred' parameter).¶
Added the "Operational Considerations" section.¶
Clarifications:¶
Editorial fixes and improvements.¶
The authors wish to thank Rikard Höglund, Ari Keränen, John Preuß Mattsson, Jim Schaad, Ludwig Seitz, and Göran Selander for the useful discussion and reviews that helped shape this document.¶
This work was supported by the Sweden's Innovation Agency VINNOVA within the EUREKA CELTIC-NEXT projects CRITISEC and CYPRESS; and by the H2020 project SIFIS-Home (Grant agreement 952652).¶