<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ace-coap-pubsub-profile-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="ACE CoAP Pub-Sub Profile">CoAP Publish-Subscribe Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ace-coap-pubsub-profile-00"/>
    <author initials="F." surname="Palombini" fullname="Francesca Palombini">
      <organization>Ericsson</organization>
      <address>
        <email>francesca.palombini@ericsson.com</email>
      </address>
    </author>
    <author initials="C." surname="Sengul" fullname="Cigdem Sengul">
      <organization>Brunel University</organization>
      <address>
        <email>csengul@acm.org</email>
      </address>
    </author>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2025" month="May" day="14"/>
    <area>Security</area>
    <workgroup>ACE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 74?>

<t>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 for 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.</t>
      <t>Note to RFC Editor: Please replace "[draft-ietf-core-coap-pubsub]" with the RFC number of that document and delete this paragraph.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>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 <eref target="https://mailarchive.ietf.org/arch/browse/ace/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/ace-wg/pubsub-profile"/>.</t>
    </note>
  </front>
  <middle>
    <?line 79?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In a publish-subscribe (Pub-Sub) scenario, devices acting as Publishers and/or Subscribers <!--with limited reachability--> 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.</t>
      <t>With a focus on the Pub-Sub architecture defined in <xref target="I-D.ietf-core-coap-pubsub"/> for the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>, this document defines an application profile of the Authentication and Authorization for Constrained Environments (ACE) framework <xref target="RFC9200"/>, which enables Pub-Sub communication where a group of Publishers and Subscribers securely communicate through a Broker using CoAP.</t>
      <t>Building on the message formats and processing defined in <xref target="RFC9594"/>, 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.</t>
      <t>In order to protect the Pub-Sub operations at the Broker as well as the provisioning of keying material and security parameters, this profile relies on protocol-specific transport profiles of ACE (e.g., <xref target="RFC9202"/>, <xref target="RFC9203"/>, or <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>) to achieve communication security, server authentication, and proof-of-possession for a key owned by the Client and bound to an OAuth 2.0 access token.</t>
      <t>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 <xref target="RFC9052"/><xref target="RFC9053"/> and on keying material provided to the Publishers and Subscribers participating in the same Pub-Sub topic. In particular, source authentication of published content is achieved by means of the corresponding Publisher signing such content with its own private key.</t>
      <!--While this profile focuses on the Pub-Sub architecture for CoAP, {{mqtt-pubsub}} of this document describes how this profile can be applicable to MQTT {{MQTT-OASIS-Standard-v5}}. Similar adaptations can also extend to further transport protocols and Pub-Sub architectures.-->

<section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>Readers are expected to be familiar with:</t>
        <ul spacing="normal">
          <li>
            <t>The terms and concepts described in the ACE framework for Authentication and Authorization <xref target="RFC9200"/>. The terminology for entities in the considered architecture is defined in OAuth 2.0 <xref target="RFC6749"/>. In particular, this includes Client, Resource Server (RS), and Authorization Server (AS).</t>
          </li>
          <li>
            <t>The Authorization Information Format (AIF) <xref target="RFC9237"/> used to express authorization information.</t>
          </li>
          <li>
            <t>The terms and concept related to the message formats and processing specified in <xref target="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.</t>
          </li>
          <li>
            <t>The terms and concepts described in CDDL <xref target="RFC8610"/>, CBOR <xref target="RFC8949"/>, and COSE <xref target="RFC9052"/><xref target="RFC9053"/><xref target="RFC9338"/>.</t>
          </li>
          <li>
            <t>The terms and concepts described in CoAP <xref target="RFC7252"/>. Note that the term "endpoint" is used here following its OAuth definition, aimed at denoting resources such as <tt>/token</tt> and <tt>/introspect</tt> at the AS, and <tt>/authz-info</tt> at the RS. This document does not use the CoAP definition of "endpoint", which is "An entity participating in the CoAP protocol".</t>
          </li>
          <li>
            <t>The terms and concepts of Pub-Sub group communication with CoAP, as described in <xref target="I-D.ietf-core-coap-pubsub"/>.</t>
          </li>
        </ul>
        <t>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".</t>
        <ul spacing="normal">
          <li>
            <t>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".  </t>
            <t>
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.</t>
          </li>
        </ul>
        <t>Examples throughout this document are expressed in CBOR diagnostic notation as defined in <xref section="8" sectionFormat="of" target="RFC8949"/> and <xref section="G" sectionFormat="of" target="RFC8610"/>. Diagnostic notation comments are often used to provide a textual representation of the parameters' keys and values.</t>
      </section>
    </section>
    <section anchor="overview">
      <name>Application Profile Overview</name>
      <t>This document describes how to use <xref target="RFC9200"/> and <xref target="RFC9594"/> to perform authentication, authorization, and key distribution operations as overviewed in <xref section="2" sectionFormat="of" target="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.</t>
      <t>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 <bcp14>SHOULD</bcp14> be associated with a single application group. However, the same application group <bcp14>MAY</bcp14> 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.</t>
      <t>This profile considers the architecture shown in <xref target="archi"/>. 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.</t>
      <t>Both Publishers and Subscribers act as ACE Clients. The Broker acts as an ACE RS, and corresponds to the Dispatcher in <xref target="RFC9594"/>. The Key Distribution Center (KDC) also acts as an ACE RS, and builds on what is defined for the KDC in <xref target="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.</t>
      <figure anchor="archi">
        <name>Architecture for Pub-Sub with Authorization Server and Key Distribution Center</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="320" width="400" viewBox="0 0 400 320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,224 L 8,304" fill="none" stroke="black"/>
              <path d="M 48,160 L 48,216" fill="none" stroke="black"/>
              <path d="M 80,192 L 80,216" fill="none" stroke="black"/>
              <path d="M 112,32 L 112,112" fill="none" stroke="black"/>
              <path d="M 112,224 L 112,304" fill="none" stroke="black"/>
              <path d="M 192,120 L 192,160" fill="none" stroke="black"/>
              <path d="M 240,32 L 240,112" fill="none" stroke="black"/>
              <path d="M 272,32 L 272,112" fill="none" stroke="black"/>
              <path d="M 288,224 L 288,304" fill="none" stroke="black"/>
              <path d="M 336,120 L 336,192" fill="none" stroke="black"/>
              <path d="M 392,32 L 392,112" fill="none" stroke="black"/>
              <path d="M 392,224 L 392,304" fill="none" stroke="black"/>
              <path d="M 112,32 L 240,32" fill="none" stroke="black"/>
              <path d="M 272,32 L 392,32" fill="none" stroke="black"/>
              <path d="M 112,112 L 240,112" fill="none" stroke="black"/>
              <path d="M 272,112 L 392,112" fill="none" stroke="black"/>
              <path d="M 48,160 L 96,160" fill="none" stroke="black"/>
              <path d="M 144,160 L 192,160" fill="none" stroke="black"/>
              <path d="M 80,192 L 224,192" fill="none" stroke="black"/>
              <path d="M 272,192 L 336,192" fill="none" stroke="black"/>
              <path d="M 8,224 L 112,224" fill="none" stroke="black"/>
              <path d="M 288,224 L 392,224" fill="none" stroke="black"/>
              <path d="M 120,240 L 176,240" fill="none" stroke="black"/>
              <path d="M 224,240 L 280,240" fill="none" stroke="black"/>
              <path d="M 120,272 L 176,272" fill="none" stroke="black"/>
              <path d="M 224,272 L 280,272" fill="none" stroke="black"/>
              <path d="M 8,304 L 112,304" fill="none" stroke="black"/>
              <path d="M 288,304 L 392,304" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="344,120 332,114.4 332,125.6" fill="black" transform="rotate(270,336,120)"/>
              <polygon class="arrowhead" points="288,272 276,266.4 276,277.6" fill="black" transform="rotate(0,280,272)"/>
              <polygon class="arrowhead" points="288,240 276,234.4 276,245.6" fill="black" transform="rotate(0,280,240)"/>
              <polygon class="arrowhead" points="200,120 188,114.4 188,125.6" fill="black" transform="rotate(270,192,120)"/>
              <polygon class="arrowhead" points="128,272 116,266.4 116,277.6" fill="black" transform="rotate(180,120,272)"/>
              <polygon class="arrowhead" points="128,240 116,234.4 116,245.6" fill="black" transform="rotate(180,120,240)"/>
              <polygon class="arrowhead" points="88,216 76,210.4 76,221.6" fill="black" transform="rotate(90,80,216)"/>
              <polygon class="arrowhead" points="56,216 44,210.4 44,221.6" fill="black" transform="rotate(90,48,216)"/>
              <g class="text">
                <text x="176" y="52">Authorization</text>
                <text x="328" y="52">Key</text>
                <text x="172" y="68">Server</text>
                <text x="332" y="68">Distribution</text>
                <text x="180" y="84">(AS)</text>
                <text x="332" y="84">Center</text>
                <text x="328" y="100">(KDC)</text>
                <text x="120" y="164">(A)</text>
                <text x="248" y="196">(B)</text>
                <text x="200" y="244">(O)</text>
                <text x="56" y="260">Pub-Sub</text>
                <text x="340" y="260">Broker</text>
                <text x="52" y="276">Client</text>
                <text x="200" y="276">(C)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
             +---------------+   +--------------+
             | Authorization |   |     Key      |
             |    Server     |   | Distribution |
             |      (AS)     |   |    Center    |
             |               |   |    (KDC)     |
             +---------------+   +--------------+
                       ^                 ^
                       |                 |
     +------ (A) ------+                 |
     |                                   |
     |   +------------------ (B) --------+
     v   v
+------------+                     +------------+
|            |<------- (O) ------->|            |
|  Pub-Sub   |                     |   Broker   |
|  Client    |<------- (C) ------->|            |
|            |                     |            |
+------------+                     +------------+
]]></artwork>
        </artset>
      </figure>
      <t>Both Publishers and Subscribers <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be CoAP <xref target="RFC7252"/>, which is used as described in <xref target="I-D.ietf-core-coap-pubsub"/>. <!--What is specified in this document can apply to other protocols for Pub-Sub communications such as MQTT {{MQTT-OASIS-Standard-v5}}, or to further transport protocols-->.</t>
      <t>All Publishers and Subscribers <bcp14>MUST</bcp14> use CoAP when communicating with the KDC.</t>
      <t>Furthermore, both Publishers and Subscribers <bcp14>MUST</bcp14> use the same transport profile of ACE (e.g., <xref target="RFC9202"/> for DTLS; or <xref target="RFC9203"/> or <xref target="I-D.ietf-ace-edhoc-oscore-profile"/> for OSCORE) in their interaction with the Broker. In order to reduce the number of libraries that Clients have to support, it is <bcp14>RECOMMENDED</bcp14> that the same transport profile of ACE is used also for the interaction between the Clients and the KDC.</t>
      <t>All communications between the involved entities <bcp14>MUST</bcp14> be secured.</t>
      <t>For each Client, the Client and the Broker <bcp14>MUST</bcp14> 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 <xref target="archi"/>. 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.</t>
      <t>For each Client, the Client and the KDC <bcp14>MUST</bcp14> have a secure communication association, which they also establish with the help of the AS and using a transport profile of ACE. This is shown by the interactions A and B in <xref target="archi"/>. 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 <xref target="RFC9594"/> and further specified in this document.</t>
      <t>In addition, this profile allows an anonymous Client to perform some of the discovery operations defined in <xref section="2.3" sectionFormat="of" target="I-D.ietf-core-coap-pubsub"/> through the Broker, as shown by the interaction O in <xref target="archi"/>. That is, an anonymous Client can discover:</t>
      <ul spacing="normal">
        <li>
          <t>the Broker itself, by relying on the resource type "core.ps" (see <xref section="2.3.1" sectionFormat="of" target="I-D.ietf-core-coap-pubsub"/>); and</t>
        </li>
        <li>
          <t>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 <xref section="2.3.3" sectionFormat="of" target="I-D.ietf-core-coap-pubsub"/>).</t>
        </li>
      </ul>
      <t>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).</t>
      <t>As highlighted in <xref target="associations"/>, 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.</t>
      <t>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 content 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.</t>
      <figure anchor="associations">
        <name>Security Associations between Publisher, Broker, and Subscriber</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="544" viewBox="0 0 544 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,112" fill="none" stroke="black"/>
              <path d="M 40,120 L 40,208" fill="none" stroke="black"/>
              <path d="M 72,120 L 72,160" fill="none" stroke="black"/>
              <path d="M 104,32 L 104,112" fill="none" stroke="black"/>
              <path d="M 216,32 L 216,112" fill="none" stroke="black"/>
              <path d="M 248,120 L 248,160" fill="none" stroke="black"/>
              <path d="M 288,120 L 288,160" fill="none" stroke="black"/>
              <path d="M 320,32 L 320,112" fill="none" stroke="black"/>
              <path d="M 432,32 L 432,112" fill="none" stroke="black"/>
              <path d="M 464,120 L 464,160" fill="none" stroke="black"/>
              <path d="M 504,120 L 504,208" fill="none" stroke="black"/>
              <path d="M 536,32 L 536,112" fill="none" stroke="black"/>
              <path d="M 8,32 L 104,32" fill="none" stroke="black"/>
              <path d="M 216,32 L 320,32" fill="none" stroke="black"/>
              <path d="M 432,32 L 536,32" fill="none" stroke="black"/>
              <path d="M 8,112 L 104,112" fill="none" stroke="black"/>
              <path d="M 216,112 L 320,112" fill="none" stroke="black"/>
              <path d="M 432,112 L 536,112" fill="none" stroke="black"/>
              <path d="M 72,160 L 112,160" fill="none" stroke="black"/>
              <path d="M 200,160 L 248,160" fill="none" stroke="black"/>
              <path d="M 288,160 L 336,160" fill="none" stroke="black"/>
              <path d="M 424,160 L 464,160" fill="none" stroke="black"/>
              <path d="M 40,208 L 224,208" fill="none" stroke="black"/>
              <path d="M 312,208 L 504,208" fill="none" stroke="black"/>
              <g class="text">
                <text x="56" y="68">Publisher</text>
                <text x="268" y="68">Broker</text>
                <text x="484" y="68">Subscriber</text>
                <text x="156" y="164">Security</text>
                <text x="380" y="164">Security</text>
                <text x="152" y="180">Association</text>
                <text x="208" y="180">1</text>
                <text x="376" y="180">Association</text>
                <text x="432" y="180">1</text>
                <text x="268" y="212">Security</text>
                <text x="264" y="228">Association</text>
                <text x="320" y="228">2</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
+-----------+             +------------+             +------------+
|           |             |            |             |            |
| Publisher |             |   Broker   |             | Subscriber |
|           |             |            |             |            |
|           |             |            |             |            |
+-----------+             +------------+             +------------+
    |   |                     |    |                     |    |
    |   |                     |    |                     |    |
    |   '----- Security ------'    '------ Security -----'    |
    |        Association 1               Association 1        |
    |                                                         |
    '----------------------- Security ------------------------'
                           Association 2
]]></artwork>
        </artset>
      </figure>
      <t>In summary, this profile specifies the following functionalities.</t>
      <ol spacing="normal" type="1"><li>
          <t>A Client obtains the authorization to participate in a Pub-Sub topic at the Broker with certain permissions. This pertains operations defined in <xref target="I-D.ietf-core-coap-pubsub"/> for taking part in Pub-Sub communication with CoAP.</t>
        </li>
        <li>
          <t>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.</t>
        </li>
        <li>
          <t>A Client obtains from the KDC the authentication credentials of other group members, and provides or updates the KDC with its own authentication credential.</t>
        </li>
        <li>
          <t>A Client leaves the group or is removed from the group by the KDC.</t>
        </li>
        <li>
          <t>The KDC renews and redistributes the group keying material (rekeying), e.g., due to a membership change in the group.</t>
        </li>
      </ol>
      <t><xref target="groupcomm_requirements"/> lists the specifications on this application profile of ACE, based on the requirements defined in <xref section="A" sectionFormat="of" target="RFC9594"/>.</t>
    </section>
    <section anchor="authorisation">
      <name>Getting Authorisation to Join a Pub-Sub security group (A)</name>
      <t><xref target="message-flow"/> provides a high level overview of the message flow for a Client getting authorisation to join a group. Square brackets denote optional steps. The message flow is expanded in the subsequent sections.</t>
      <figure anchor="message-flow">
        <name>Authorisation Flow</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="576" width="576" viewBox="0 0 576 576" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 16,48 L 16,560" fill="none" stroke="black"/>
              <path d="M 456,48 L 456,152" fill="none" stroke="black"/>
              <path d="M 456,184 L 456,328" fill="none" stroke="black"/>
              <path d="M 456,360 L 456,392" fill="none" stroke="black"/>
              <path d="M 456,424 L 456,448" fill="none" stroke="black"/>
              <path d="M 456,488 L 456,560" fill="none" stroke="black"/>
              <path d="M 520,48 L 520,392" fill="none" stroke="black"/>
              <path d="M 520,424 L 520,456" fill="none" stroke="black"/>
              <path d="M 520,488 L 520,560" fill="none" stroke="black"/>
              <path d="M 560,48 L 560,560" fill="none" stroke="black"/>
              <path d="M 32,64 L 112,64" fill="none" stroke="black"/>
              <path d="M 352,64 L 440,64" fill="none" stroke="black"/>
              <path d="M 32,96 L 160,96" fill="none" stroke="black"/>
              <path d="M 312,96 L 440,96" fill="none" stroke="black"/>
              <path d="M 32,112 L 168,112" fill="none" stroke="black"/>
              <path d="M 304,112 L 440,112" fill="none" stroke="black"/>
              <path d="M 16,160 L 72,160" fill="none" stroke="black"/>
              <path d="M 416,160 L 512,160" fill="none" stroke="black"/>
              <path d="M 24,176 L 72,176" fill="none" stroke="black"/>
              <path d="M 424,176 L 520,176" fill="none" stroke="black"/>
              <path d="M 16,224 L 80,224" fill="none" stroke="black"/>
              <path d="M 384,224 L 448,224" fill="none" stroke="black"/>
              <path d="M 24,240 L 80,240" fill="none" stroke="black"/>
              <path d="M 384,240 L 448,240" fill="none" stroke="black"/>
              <path d="M 32,288 L 48,288" fill="none" stroke="black"/>
              <path d="M 416,288 L 440,288" fill="none" stroke="black"/>
              <path d="M 16,336 L 88,336" fill="none" stroke="black"/>
              <path d="M 408,336 L 512,336" fill="none" stroke="black"/>
              <path d="M 24,352 L 88,352" fill="none" stroke="black"/>
              <path d="M 416,352 L 520,352" fill="none" stroke="black"/>
              <path d="M 16,400 L 104,400" fill="none" stroke="black"/>
              <path d="M 408,400 L 552,400" fill="none" stroke="black"/>
              <path d="M 24,416 L 104,416" fill="none" stroke="black"/>
              <path d="M 408,416 L 552,416" fill="none" stroke="black"/>
              <path d="M 16,464 L 72,464" fill="none" stroke="black"/>
              <path d="M 480,464 L 552,464" fill="none" stroke="black"/>
              <path d="M 24,480 L 104,480" fill="none" stroke="black"/>
              <path d="M 432,480 L 560,480" fill="none" stroke="black"/>
              <path d="M 16,528 L 152,528" fill="none" stroke="black"/>
              <path d="M 304,528 L 448,528" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="560,464 548,458.4 548,469.6" fill="black" transform="rotate(0,552,464)"/>
              <polygon class="arrowhead" points="560,416 548,410.4 548,421.6" fill="black" transform="rotate(0,552,416)"/>
              <polygon class="arrowhead" points="560,400 548,394.4 548,405.6" fill="black" transform="rotate(0,552,400)"/>
              <polygon class="arrowhead" points="520,336 508,330.4 508,341.6" fill="black" transform="rotate(0,512,336)"/>
              <polygon class="arrowhead" points="520,160 508,154.4 508,165.6" fill="black" transform="rotate(0,512,160)"/>
              <polygon class="arrowhead" points="456,528 444,522.4 444,533.6" fill="black" transform="rotate(0,448,528)"/>
              <polygon class="arrowhead" points="456,240 444,234.4 444,245.6" fill="black" transform="rotate(0,448,240)"/>
              <polygon class="arrowhead" points="456,224 444,218.4 444,229.6" fill="black" transform="rotate(0,448,224)"/>
              <polygon class="arrowhead" points="448,288 436,282.4 436,293.6" fill="black" transform="rotate(0,440,288)"/>
              <polygon class="arrowhead" points="448,96 436,90.4 436,101.6" fill="black" transform="rotate(0,440,96)"/>
              <polygon class="arrowhead" points="448,64 436,58.4 436,69.6" fill="black" transform="rotate(0,440,64)"/>
              <polygon class="arrowhead" points="40,288 28,282.4 28,293.6" fill="black" transform="rotate(180,32,288)"/>
              <polygon class="arrowhead" points="40,112 28,106.4 28,117.6" fill="black" transform="rotate(180,32,112)"/>
              <polygon class="arrowhead" points="40,64 28,58.4 28,69.6" fill="black" transform="rotate(180,32,64)"/>
              <polygon class="arrowhead" points="32,480 20,474.4 20,485.6" fill="black" transform="rotate(180,24,480)"/>
              <polygon class="arrowhead" points="32,416 20,410.4 20,421.6" fill="black" transform="rotate(180,24,416)"/>
              <polygon class="arrowhead" points="32,352 20,346.4 20,357.6" fill="black" transform="rotate(180,24,352)"/>
              <polygon class="arrowhead" points="32,240 20,234.4 20,245.6" fill="black" transform="rotate(180,24,240)"/>
              <polygon class="arrowhead" points="32,176 20,170.4 20,181.6" fill="black" transform="rotate(180,24,176)"/>
              <g class="text">
                <text x="28" y="36">Client</text>
                <text x="460" y="36">Broker</text>
                <text x="524" y="36">AS</text>
                <text x="560" y="36">KDC</text>
                <text x="24" y="68">[</text>
                <text x="160" y="68">Discovery</text>
                <text x="212" y="68">of</text>
                <text x="248" y="68">Topic</text>
                <text x="308" y="68">Resource</text>
                <text x="448" y="68">]</text>
                <text x="24" y="100">[</text>
                <text x="204" y="100">Resource</text>
                <text x="272" y="100">Request</text>
                <text x="448" y="100">]</text>
                <text x="24" y="116">[</text>
                <text x="188" y="116">AS</text>
                <text x="248" y="116">Information</text>
                <text x="448" y="116">]</text>
                <text x="136" y="164">Authorisation</text>
                <text x="224" y="164">Request</text>
                <text x="300" y="164">(Audience:</text>
                <text x="376" y="164">Broker)</text>
                <text x="136" y="180">Authorisation</text>
                <text x="228" y="180">Response</text>
                <text x="308" y="180">(Audience:</text>
                <text x="384" y="180">Broker)</text>
                <text x="116" y="228">Upload</text>
                <text x="156" y="228">of</text>
                <text x="224" y="228">authorisation</text>
                <text x="328" y="228">information</text>
                <text x="144" y="244">Establishment</text>
                <text x="212" y="244">of</text>
                <text x="252" y="244">secure</text>
                <text x="328" y="244">association</text>
                <text x="24" y="292">[</text>
                <text x="96" y="292">Discovery</text>
                <text x="148" y="292">of</text>
                <text x="176" y="292">KDC</text>
                <text x="208" y="292">and</text>
                <text x="244" y="292">name</text>
                <text x="276" y="292">of</text>
                <text x="324" y="292">security</text>
                <text x="384" y="292">group</text>
                <text x="448" y="292">]</text>
                <text x="152" y="340">Authorisation</text>
                <text x="240" y="340">Request</text>
                <text x="316" y="340">(Audience:</text>
                <text x="380" y="340">KDC)</text>
                <text x="152" y="356">Authorisation</text>
                <text x="244" y="356">Response</text>
                <text x="324" y="356">(Audience:</text>
                <text x="388" y="356">KDC)</text>
                <text x="140" y="404">Upload</text>
                <text x="180" y="404">of</text>
                <text x="248" y="404">authorisation</text>
                <text x="352" y="404">information</text>
                <text x="168" y="420">Establishment</text>
                <text x="236" y="420">of</text>
                <text x="276" y="420">secure</text>
                <text x="352" y="420">association</text>
                <text x="112" y="468">Request</text>
                <text x="156" y="468">to</text>
                <text x="188" y="468">join</text>
                <text x="224" y="468">the</text>
                <text x="276" y="468">security</text>
                <text x="336" y="468">group</text>
                <text x="376" y="468">for</text>
                <text x="408" y="468">the</text>
                <text x="448" y="468">topic</text>
                <text x="140" y="484">Keying</text>
                <text x="204" y="484">material</text>
                <text x="256" y="484">for</text>
                <text x="288" y="484">the</text>
                <text x="340" y="484">security</text>
                <text x="400" y="484">group</text>
                <text x="196" y="532">Resource</text>
                <text x="264" y="532">Request</text>
                <text x="176" y="548">(Publication/Subscription</text>
                <text x="292" y="548">to</text>
                <text x="320" y="548">the</text>
                <text x="364" y="548">topic)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
Client                                                Broker    AS  KDC
 |                                                      |       |    |
 |[<---------- Discovery of Topic Resource ----------->]|       |    |
 |                                                      |       |    |
 |[----------------- Resource Request ---------------->]|       |    |
 |[<----------------- AS Information ------------------]|       |    |
 |                                                      |       |    |
 |                                                      |       |    |
 +------- Authorisation Request (Audience: Broker) ------------>|    |
 |<------ Authorisation Response (Audience: Broker) ------------+    |
 |                                                      |       |    |
 |                                                      |       |    |
 +-------- Upload of authorisation information -------->|       |    |
 |<------- Establishment of secure association -------->|       |    |
 |                                                      |       |    |
 |                                                      |       |    |
 |[<-- Discovery of KDC and name of security group --->]|       |    |
 |                                                      |       |    |
 |                                                      |       |    |
 +--------- Authorisation Request (Audience: KDC) ------------->|    |
 |<-------- Authorisation Response (Audience: KDC) -------------+    |
 |                                                      |       |    |
 |                                                      |       |    |
 +----------- Upload of authorisation information ------------------>|
 |<---------- Establishment of secure association ------------------>|
 |                                                      |       |    |
 |                                                      |       |    |
 +------- Request to join the security group for the topic --------->|
 |<---------- Keying material for the security group ----------------+
 |                                                      |       |    |
 |                                                      |       |    |
 +----------------- Resource Request ------------------>|       |    |
 |       (Publication/Subscription to the topic)        |       |    |
 |                                                      |       |    |
]]></artwork>
        </artset>
      </figure>
      <t>After a Client uploads to the Broker the authorisation information for participating in a Pub-Sub topic with name TOPICNAME (see <xref target="auth-request"/>), the Client can perform the optional discovery of the KDC and security group name at the Broker, by accessing the topic resource corresponding to the topic in question (see <xref target="kdc-discovery"/>).</t>
      <t>In order to ensure that the Client can seamlessly access the right topic resource at the Broker, it is <bcp14>RECOMMENDED</bcp14> that a Broker implementing this application profile uses the path /ps/TOPICNAME to host the topic resource for the topic with name TOPICNAME.</t>
      <t>Alternatively, the Client might not know the right topic resource to target, and thus would attempt to access different ones (e.g., based on the result of an early discovery of topic resources, see <xref target="topic-discovery"/>), until it finds the right one specifying TOPICNAME as value of the 'topic-name' parameter in the resource representation.</t>
      <t>Since <xref target="RFC9200"/> recommends the use of CoAP and CBOR, this document describes the exchanges assuming that CoAP and CBOR are used.</t>
      <t>However, using HTTP instead of CoAP is possible, by leveraging the corresponding parameters and methods. Analogously, JSON <xref target="RFC8259"/> can be used instead of CBOR, by relying on the conversion method specified in Sections <xref target="RFC8949" section="6.1" sectionFormat="bare"/> and <xref target="RFC8949" section="6.2" sectionFormat="bare"/> of <xref target="RFC8949"/>. In case JSON is used, the Content-Format of the message has to be specified accordingly. Exact definitions of these exchanges are out of scope for this document.</t>
      <section anchor="topic-discovery">
        <name>Topic Discovery at the Broker (Optional)</name>
        <t>The discovery of a topic at the Broker can be performed by discovering the corresponding topic resource hosted at the Broker. For example, the Client can send a lookup request to /.well-known/core at the Broker, specifying as lookup criterion the resource type "core.ps.conf" (see <xref section="2.3.3" sectionFormat="of" target="I-D.ietf-core-coap-pubsub"/>).</t>
        <t>Although the links to the topic resources are also specified in the representation of the collection resource at the Broker (see <xref section="2.4" sectionFormat="of" target="I-D.ietf-core-coap-pubsub"/>), the Client is not supposed to access such a resource, as intended for administrative operations that are out of the scope of this document.</t>
      </section>
      <section anchor="AS-discovery">
        <name>AS Discovery at the Broker (Optional)</name>
        <t>Complementary to what is defined in <xref section="5.1" sectionFormat="of" target="RFC9200"/> for AS discovery, the Broker <bcp14>MAY</bcp14> send the address of the AS to the Client in the 'AS' parameter of the AS Request Creation Hints, as a response to an Unauthorised Resource Request (see <xref section="5.2" sectionFormat="of" target="RFC9200"/>). An example using the CBOR diagnostic notation and CoAP is given below.</t>
        <figure anchor="AS-info-ex">
          <name>AS Request Creation Hints Example</name>
          <artwork align="left"><![CDATA[
    4.01 Unauthorized
    Content-Format: application/ace+cbor
    Payload:
    {
     / AS / 1 : "coaps://as.example.com/token"
    }
]]></artwork>
        </figure>
      </section>
      <section anchor="kdc-discovery">
        <name>KDC Discovery at the Broker (Optional)</name>
        <t>Once a Client has obtained an access token from the AS and accordingly established a secure association with the Broker, the Client has the permission to access the topic resources at the Broker that pertain to the topics on which the Client is authorised to operate.</t>
        <t>In particular the Client is authorised to retrieve the representation of a topic resource, from which the Client can retrieve information related to the topic in question, as specified in <xref section="2.5" sectionFormat="of" target="I-D.ietf-core-coap-pubsub"/>.</t>
        <t>This profile extends the set of CoAP Pub-Sub Parameters that is possible to specify within the representation of a topic resource, as originally defined in <xref section="3" sectionFormat="of" target="I-D.ietf-core-coap-pubsub"/>. In particular, this profile defines the following two parameters that the Broker can specify in a response from a topic resource (see <xref section="2.5" sectionFormat="of" target="I-D.ietf-core-coap-pubsub"/>). Note that, when these parameters are transported in their respective fields of the message payload, the Content-Format application/core-pubsub+cbor defined in <xref target="I-D.ietf-core-coap-pubsub"/> <bcp14>MUST</bcp14> be used.</t>
        <ul spacing="normal">
          <li>
            <t>'kdc_uri', with value the URI of the group membership resource at the KDC, where Clients can send a request to join the security group associated with the topic in question. The URI is encoded as a CBOR text string. Clients will have to obtain an access token from the AS to upload to the KDC, before starting the process to join the security group at the KDC.</t>
          </li>
          <li>
            <t>'sec_gp', specifying the name of the security group associated with the topic in question, as a stable and invariant identifier. The name of the security group is encoded as a CBOR text string.</t>
          </li>
        </ul>
        <t>Furthermore, the Resource Type (rt=) Link Target Attribute value "core.ps.gm" is registered in <xref target="core_rt"/> (REQ10), and can be used to describe group-membership resources at the KDC, e.g., by using a link-format document <xref target="RFC6690"/>. As an alternative to the discovery approach defined above and provided by the Broker, applications can use this common resource type to discover links to group-membership resources at the KDC for joining security groups associated with Pub-Sub topics.</t>
      </section>
      <section anchor="auth-request">
        <name>Authorisation Request/Response for the KDC and the Broker</name>
        <t>A Client sends two Authorisation Requests to the AS, targeting two different audiences, i.e., the Broker and the KDC.</t>
        <t>As to the former, the AS handles Authorisation Requests related to a topic for which the Client is allowed to perform topic data operations at the Broker, as corresponding to an application group.</t>
        <t>As to the latter, the AS handles Authorization Requests for security groups that the Client is allowed to join, in order to obtain the group keying material for protecting end-to-end and verifying the content of exchanged messages on the associated Pub-Sub topics.</t>
        <t>This section builds on <xref section="3" sectionFormat="of" target="RFC9594"/> and defines only additions or modifications to that specification.</t>
        <t>Both Authorisation Requests include the following fields (see <xref section="3.1" sectionFormat="of" target="RFC9594"/>):</t>
        <ul spacing="normal">
          <li>
            <t>'scope': Optional. If present, it specifies the following information, depending on the specifically targeted audience.  </t>
            <t>
If the audience is the Broker, the scope specifies the name of the topics that the Client wishes to access, together with the corresponding requested permissions.  </t>
            <t>
If the audience is the KDC, the scope specifies the name of the security groups that the Client wishes to join, together with the corresponding requested permissions.  </t>
            <t>
This parameter is encoded as a CBOR byte string, whose value is the binary encoding of a CBOR array. The format of the encoded scope <bcp14>MUST</bcp14> follow the data model AIF-PUBSUB-GROUPCOMM defined in <xref target="scope"/>.</t>
          </li>
          <li>
            <t>'audience': Required identifier corresponding to either the Broker or the KDC.</t>
          </li>
        </ul>
        <t>Other additional parameters can be included if necessary, as defined in <xref target="RFC9200"/>.</t>
        <t>When using this profile, it is expected that a one-to-one mapping is enforced between the application group and the security group (see <xref target="overview"/>). If this is not the case, the correct access policies for both sets of scopes have to be available to the AS.</t>
        <section anchor="scope">
          <name>Format of Scope</name>
          <t>Building on <xref section="3.1" sectionFormat="of" target="RFC9594"/>, this section defines the exact format and encoding of scope used in this profile.</t>
          <t>To this end, this profile uses the Authorization Information Format (AIF) <xref target="RFC9237"/> (REQ1). With reference to the generic AIF model</t>
          <artwork><![CDATA[
      AIF-Generic<Toid, Tperm> = [* [Toid, Tperm]]
]]></artwork>
          <t>the value of the CBOR byte string used as scope encodes the CBOR array [* [Toid, Tperm]], where each [Toid, Tperm] element corresponds to one scope entry.</t>
          <t>Furthermore, this document defines the new AIF data model AIF-PUBSUB-GROUPCOMM that this profile <bcp14>MUST</bcp14> use to format and encode scope entries.</t>
          <t>In particular, the following holds for each scope entry.</t>
          <t>The object identifier ("Toid") is specialized as a CBOR item specifying the name of the group pertaining to the scope entry.</t>
          <t>The permission set ("Tperm") is specialized as a CBOR unsigned integer with value R, specifying the permissions that the Client wishes to have in the group indicated by "Toid".</t>
          <t>More specifically, the following applies when, as defined in this document, a scope entry includes a set of permissions for user-related operations performed by a pubsub Client.</t>
          <ul spacing="normal">
            <li>
              <t>The object identifier ("Toid") is a CBOR text string, specifying the name of one application group (topic) or of the corresponding security group to which the scope entry pertains.</t>
            </li>
            <li>
              <t>The permission set ("Tperm") is a CBOR unsigned integer, whose value R specifies the operations that the Client wishes to or has been authorised to perform on the resources at the Broker associated with the application group (topic) indicated by "Toid", or on the resources at the KDC associated with the security group indicated by "Toid" (REQ1). The value R is computed as follows.  </t>
              <ul spacing="normal">
                <li>
                  <t>Each operation (i.e., permission detail) in the permission set is converted into the corresponding numeric identifier X taken from the following set.      </t>
                  <ul spacing="normal">
                    <li>
                      <t>Admin (0): This operation is reserved for scope entries that express permissions for Administrators of Pub-Sub groups, which are not specified in this document.</t>
                    </li>
                    <li>
                      <t>AppGroup (1): This operation is signaled as wished/authorised when "Toid" specifies the name of an application group (topic), while it is signaled as not wished/authorised when Toid specifies the name of a security group.</t>
                    </li>
                    <li>
                      <t>Publish (2): This operation concerns the publication of data to the topic in question, performed by means of a PUT request sent by a Publisher Client to the corresponding topic-data resource at the Broker.</t>
                    </li>
                    <li>
                      <t>Read (3): This operation concerns both: i) the subscription at the topic-data resource for the topic in question at the Broker, performed by means of a GET request with the CoAP Observe Option set to 0 and sent by a Subscriber Client; and ii) the simple reading of the latest data published to the topic in question, performed by means of a simple GET request sent to the same topic-data resource.</t>
                    </li>
                    <li>
                      <t>Delete (4): This operation concerns the deletion of the topic-data resource for the topic in question at the Broker, performed by means of a DELETE request sent to that resource.          </t>
                      <t>
If a Client wishes to have authorised only the Delete operation on an application group, then the Client does not need to join the corresponding security group, hence it does not need to request an access token for interacting with the KDC.          </t>
                      <t>
If a Client wishes to have authorised the Delete operation on a security group, then the AS and the KDC ignore the wish for that operation when processing the scope entry in question.</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>The set of N numeric identifiers is converted into the single value R, by taking two to the power of each numeric identifier X_1, X_2, ..., X_N, and then computing the inclusive OR of the binary representations of all the power values.</t>
                </li>
              </ul>
              <t>
Since this application profile considers user-related operations, the "Admin" operation is signaled as not wished/authorised. That is, the scope entries <bcp14>MUST</bcp14> have the least significant bit of "Tperm" set to 0.</t>
            </li>
          </ul>
          <t>If the "Toid" of a scope entry in an access token specifies the name of an application group (i.e., the "AppGroup" operation is signaled as authorised), the Client has also the permission to retrieve the configuration of the application group (topic) whose name is indicated by "Toid", by sending a GET or FETCH request to the corresponding topic resource at the Broker.</t>
          <t>The specific interactions between the Client and the Broker are defined in <xref target="I-D.ietf-core-coap-pubsub"/>.</t>
          <t>The following CDDL <xref target="RFC8610"/> notation defines a scope entry that uses the AIF-PUBSUB-GROUPCOMM data model and expresses a set of permissions.</t>
          <figure anchor="scope-aif">
            <name>Pub-Sub scope using the AIF format</name>
            <artwork align="center"><![CDATA[
  AIF-PUBSUB-GROUPCOMM = AIF-Generic<pubsub-group, pubsub-perm>
   pubsub-group = tstr ; name of Pub-Sub topic or of
                       ; the associated security group

   pubsub-perm = uint .bits pubsub-perm-details

   pubsub-perm-details = &(
    Admin: 0,
    AppGroup: 1,
    Publish: 2,
    Read: 3,
    Delete: 4
   )

   scope_entry = [pubsub-group, pubsub-perm]
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="as-response">
        <name>Authorization response</name>
        <t>The AS responds with an Authorization Response as defined in <xref section="5.8.2" sectionFormat="of" target="RFC9200"/> and <xref section="3.2" sectionFormat="of" target="RFC9594"/>, with the following additions:</t>
        <ul spacing="normal">
          <li>
            <t>In the Authorization Response, the AS <bcp14>MUST</bcp14> include the 'expires_in' parameter.  Other means for the AS to specify the lifetime of access tokens are out of the scope of this document.</t>
          </li>
          <li>
            <t>In the Authorization Response, the AS <bcp14>MUST</bcp14> include the 'scope' parameter, when the value included in the access token differs from the one specified by the Client in the Authorization Request.  In such a case, the second element of each scope entry specifies the set of operations that the Client is authorised for that scope entry, encoded as specified in <xref target="auth-request"/>.</t>
          </li>
        </ul>
        <t>Furthermore, the AS <bcp14>MAY</bcp14> use the extended format of scope defined in <xref section="7" sectionFormat="of" target="RFC9594"/> for the 'scope' claim of the access token. In such a case, the AS <bcp14>MUST</bcp14> use the CBOR tag with tag number TAG_NUMBER, associated with the CoAP Content-Format CF_ID for the media type application/aif+cbor registered in <xref target="content_formats"/> of this document (REQ28).</t>
        <t>Note to RFC Editor: In the previous paragraph, please replace "TAG_NUMBER" with the CBOR tag number computed as TN(ct) in <xref section="4.3" sectionFormat="of" target="RFC9277"/>, where ct is the ID assigned to the CoAP Content-Format registered in <xref target="content_formats"/> of this document.  Then, please replace "CF_ID" with the ID assigned to that CoAP Content-Format.  Finally, please delete this paragraph.</t>
        <t>This indicates that the binary encoded scope follows the scope semantics defined for this application profile in <xref target="scope"/> of this document.</t>
      </section>
      <section anchor="token-post">
        <name>Token Transfer to the KDC</name>
        <t>The Client transfers its access token to the KDC using one of the methods defined in the <xref section="3.3" sectionFormat="of" target="RFC9594"/>. This typically includes sending a POST request to the /authz-info endpoint. However, if the DTLS transport profile of ACE <xref target="RFC9202"/> is used and the Client uses a symmetric proof-of-possession key in the DTLS handshake, the Client <bcp14>MAY</bcp14> provide the access token to the KDC in the "psk_identity" field of the DTLS ClientKeyExchange message when using DTLS 1.2 <xref target="RFC6347"/>, or in the "identity" field of a PskIdentity within the PreSharedKeyExtension of the ClientHello message when using DTLS 1.3 <xref target="RFC9147"/>. In addition to that, the following applies.</t>
        <t>In the Token Transfer Response to the Publishers, i.e., the Clients whose scope of the access token includes the "Publish" permission for at least one scope entry, the KDC <bcp14>MUST</bcp14> include the parameter 'kdcchallenge' in the CBOR map. 'kdcchallenge' is a challenge N_S generated by the KDC, and is <bcp14>RECOMMENDED</bcp14> to be an 8-byte long random nonce. Later when joining the group, the Publisher can use the 'kdcchallenge' as part of proving possession of its private key (see <xref target="RFC9594"/>). If a Publisher provides the access token to the KDC through an /authz-info endpoint, the Client <bcp14>MUST</bcp14> support the parameter 'kdcchallenge'.</t>
        <t>If 'sign_info' is included in the Token Transfer Request, the KDC <bcp14>SHOULD</bcp14> include the 'sign_info' parameter in the Token Transfer Response. Note that the joining node may have obtained such information by alternative means, e.g., the 'sign_info' may have been pre-configured (OPT3).</t>
        <t>The following applies for each element 'sign_info_entry'.</t>
        <ul spacing="normal">
          <li>
            <t>'sign_alg' <bcp14>MUST</bcp14> take its value from the "Value" column of one of the recommended algorithms in the "COSE Algorithms" registry <xref target="IANA.cose_algorithms"/> (REQ3).</t>
          </li>
          <li>
            <t>'sign_parameters' is a CBOR array.  Its format and value are the same of the COSE capabilities array for the algorithm indicated in 'sign_alg' under the "Capabilities" column of the "COSE Algorithms" registry <xref target="IANA.cose_algorithms"/> (REQ4).</t>
          </li>
          <li>
            <t>'sign_key_parameters' is a CBOR array.  Its format and value are the same of the COSE capabilities array for the COSE key type of the keys used with the algorithm indicated in 'sign_alg', as specified for that key type in the "Capabilities" column of the "COSE Key Types" registry <xref target="IANA.cose_key-type"/> (REQ5).</t>
          </li>
          <li>
            <t>'cred_fmt' takes value from the "Label" column of the "COSE Header Parameters" registry <xref target="IANA.cose_header-parameters"/> (REQ6). Acceptable values denote a format of authentication credential that <bcp14>MUST</bcp14> explicitly provide the public key as well as the comprehensive set of information related to the public key algorithm, including, e.g., the used elliptic curve (when applicable).  </t>
            <t>
Acceptable formats of authentication credentials include CBOR Web Tokens (CWTs) and CWT Claims Sets (CCSs) <xref target="RFC8392"/>, X.509 certificates <xref target="RFC7925"/>, and C509 certificates <xref target="I-D.ietf-cose-cbor-encoded-cert"/>. Future formats would be acceptable to use as long as they comply with the criteria defined above.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="kdc-interface">
      <name>Client Group Communication Interface at the KDC</name>
      <t>In order to enable secure group communication for the Pub-Sub Clients, the KDC provides the resources listed in <xref target="tab-kdc-resources"/>. Each resource is marked as <bcp14>REQUIRED</bcp14> or <bcp14>OPTIONAL</bcp14> to be hosted at the KDC.</t>
      <table align="center" anchor="tab-kdc-resources">
        <name>Resources at the KDC</name>
        <thead>
          <tr>
            <th align="left">KDC resource</th>
            <th align="left">Description</th>
            <th align="left">Operations</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">/ace-group</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14>. Contains a set of group names, each corresponding to one of the specified group identifiers.</td>
            <td align="left">FETCH (All Clients)</td>
          </tr>
          <tr>
            <td align="left">/ace-group/GROUPNAME</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14>. Contains symmetric group keying material associated with GROUPNAME.</td>
            <td align="left">GET, POST (All Clients)</td>
          </tr>
          <tr>
            <td align="left">/ace-group/GROUPNAME/creds</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14>. Contains the authentication credentials of all the Publishers of the group with name GROUPNAME.</td>
            <td align="left">GET, FETCH (All Clients)</td>
          </tr>
          <tr>
            <td align="left">/ace-group/GROUPNAME/num</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14>. Contains the current version number for the symmetric group keying material of the group with name GROUPNAME.</td>
            <td align="left">GET (All Clients)</td>
          </tr>
          <tr>
            <td align="left">/ace-group/GROUPNAME/nodes/NODENAME</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14>. Contains the group keying material for that group member NODENAME in GROUPNAME.</td>
            <td align="left">GET, DELETE (All Clients). POST (Publishers).</td>
          </tr>
          <tr>
            <td align="left">/ace-group/GROUPNAME/nodes/NODENAME/cred</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14>. Authentication credential for NODENAME in the group GROUPNAME.</td>
            <td align="left">POST (Publishers)</td>
          </tr>
          <tr>
            <td align="left">/ace-group/GROUPNAME/kdc-cred</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14> if a group re-keying mechanism is used. Contains the authentication credential of the KDC for the group with name GROUPNAME.</td>
            <td align="left">GET (All Clients)</td>
          </tr>
          <tr>
            <td align="left">/ace-group/GROUPNAME/policies</td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14>. Contains the group policies of the group with name GROUPNAME.</td>
            <td align="left">GET (All Clients)</td>
          </tr>
        </tbody>
      </table>
      <t>The use of these resources follows what is defined in <xref target="RFC9594"/>, and only additions or modifications to that specification are defined in this document.</t>
      <t>Consistent with what is defined in <xref section="4.1.2" sectionFormat="of" target="RFC9594"/>, some error responses from the KDC can convey error-specific information according to the problem-details format specified in <xref target="RFC9290"/>.</t>
      <section anchor="join">
        <name>Joining a Security Group</name>
        <t>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.</t>
        <t>On a successful join, the Clients receive from the KDC the symmetric COSE Key used as shared group key to protect the payload of a published topic data.</t>
        <t>The message exchange between the joining node and the KDC follows what is defined in <xref section="4.3.1.1" sectionFormat="of" target="RFC9594"/>, and only additions or modifications to that specification are defined in this document.</t>
        <figure anchor="join-flow">
          <name>Join Flow</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="144" width="320" viewBox="0 0 320 144" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,112" fill="none" stroke="black"/>
                <path d="M 304,48 L 304,112" fill="none" stroke="black"/>
                <path d="M 32,64 L 72,64" fill="none" stroke="black"/>
                <path d="M 248,64 L 296,64" fill="none" stroke="black"/>
                <path d="M 40,96 L 72,96" fill="none" stroke="black"/>
                <path d="M 256,96 L 304,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="304,64 292,58.4 292,69.6" fill="black" transform="rotate(0,296,64)"/>
                <polygon class="arrowhead" points="48,96 36,90.4 36,101.6" fill="black" transform="rotate(180,40,96)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="304" y="36">KDC</text>
                  <text x="100" y="68">Join</text>
                  <text x="152" y="68">Request</text>
                  <text x="212" y="68">(CoAP)</text>
                  <text x="100" y="100">Join</text>
                  <text x="156" y="100">Response</text>
                  <text x="220" y="100">(CoAP)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
   Client                              KDC
      |                                 |
      +----- Join Request (CoAP) ------>|
      |                                 |
      |<---- Join Response (CoAP) ------+
      |                                 |
]]></artwork>
          </artset>
        </figure>
        <section anchor="join-request">
          <name>Join Request</name>
          <t>After establishing a secure communication association with the KDC, the Client sends a Join Request to the KDC as described in <xref section="4.3" sectionFormat="of" target="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 <bcp14>MUST</bcp14> be encoded as defined in <xref section="4.3.1" sectionFormat="of" target="RFC9594"/>:</t>
          <ul spacing="normal">
            <li>
              <t>'scope': It <bcp14>MUST</bcp14> be present and specify 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 <xref target="scope"/>.</t>
            </li>
            <li>
              <t>'get_creds': It <bcp14>MAY</bcp14> 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 <bcp14>MUST NOT</bcp14> be present. If the parameter is present, the parameter <bcp14>MUST</bcp14> encode the CBOR simple value <tt>null</tt> (0xf6). Note that the parameter 'role_filter' is not necessary, as the KDC returns the authentication credentials of Publishers by default.</t>
            </li>
            <li>
              <t>'client_cred': The use of this parameter is detailed in <xref target="client_cred"/>.</t>
            </li>
            <li>
              <t>'cnonce': It specifies a dedicated nonce N_C generated by the Client. It is <bcp14>RECOMMENDED</bcp14> to use an 8-byte long random nonce. Join Requests <bcp14>MUST</bcp14> include a new 'cnonce' at each join attempt.</t>
            </li>
            <li>
              <t>'client_cred_verify': The use of this parameter is detailed in <xref target="pop"/>.</t>
            </li>
          </ul>
          <t>As a Publisher Client has its own authentication credential to use in a group, it <bcp14>MUST</bcp14> support the client_cred', 'cnonce', and 'client_cred_verify' parameters.</t>
          <section anchor="client_cred">
            <name>Client Credential in 'client_cred'</name>
            <t>One of the following cases can occur when a new Client attempts to join a security group.</t>
            <ul spacing="normal">
              <li>
                <t>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 <xref target="join-request"/>), the KDC silently ignores that parameter, as well as the related parameter 'client_cred_verify'.</t>
              </li>
              <li>
                <t>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 <bcp14>MUST</bcp14> provide a compatible authentication credential in the 'client_cred' parameter of the Join Request (see <xref target="join-request"/>).</t>
              </li>
              <li>
                <t>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.  </t>
                <t>
If the joining node's proof-of-possession key is compatible with the signature algorithm used in the security group and with possible associated parameters, then the corresponding authentication credential can be used in the group. In this case, the joining node <bcp14>MAY</bcp14> choose not to provide again its authentication credential to the KDC in order to limit the size of the Join Request.</t>
              </li>
            </ul>
            <t>The joining node <bcp14>MUST</bcp14> 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.</t>
            <t>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.</t>
          </section>
          <section anchor="pop">
            <name>Proof-of-Possession through 'client_cred_verify'</name>
            <t>The 'client_cred_verify' parameter contains the proof-of-possession evidence, and is computed as defined below (REQ14).</t>
            <t>The Publisher signs the scope, concatenated with N_S and further concatenated with N_C, by using the private key corresponding to the public key that is specified in the 'client_cred' parameter.</t>
            <t>The N_S may be either of the following:</t>
            <ul spacing="normal">
              <li>
                <t>The challenge received from the KDC in the 'kdcchallenge' parameter of the 2.01 (Created) response to the Token Transfer Request (see <xref target="token-post"/>).</t>
              </li>
              <li>
                <t>If the provisioning of the access token to the KDC has relied on the DTLS profile of ACE <xref target="RFC9202"/>, and the access token was specified in the "psk_identity" field of the ClientKeyExchange message when using DTLS 1.2 <xref target="RFC6347"/>, then N_S is an exporter value computed as defined in <xref section="4" sectionFormat="of" target="RFC5705"/> (REQ15).  </t>
                <t>
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-pubsub-app" defined in <xref target="tls_exporter"/> of this document.</t>
              </li>
              <li>
                <t>If the provisioning of the access token to the KDC has relied on the DTLS profile of ACE <xref target="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 <xref target="RFC9147"/>, then N_S is an exporter value computed as defined in <xref section="7.5" sectionFormat="of" target="RFC8446"/> (REQ15).  </t>
                <t>
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-pubsub-app" defined in <xref target="tls_exporter"/> of this document.</t>
              </li>
              <li>
                <t>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 <bcp14>MUST</bcp14> be the new value from this parameter.</t>
              </li>
            </ul>
            <t>It is up to applications to define how N_S is computed in further alternative settings.</t>
          </section>
        </section>
        <section anchor="join-response">
          <name>Join Response</name>
          <t>Upon receiving the Join Request, the KDC processes it as defined in <xref section="4.3.1" sectionFormat="of" target="RFC9594"/>, and returns a success or error response.</t>
          <t>If the 'client_cred' parameter is present, 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.</t>
          <t>As public key of the joining node, the KDC uses either the one included in the authentication credential retrieved from the 'client_cred' parameter of the Join Request, or the one from the already stored authentication credential from previous interactions with the joining node. 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.</t>
          <t>In case of any Join Request error, the KDC and the joining node follow the procedure defined in <xref target="join-error"/>.</t>
          <t>In case of success, the KDC responds with a Join Response, whose payload is formatted as a CBOR map and <bcp14>MUST</bcp14> contain the following fields as per <xref section="4.3.1" sectionFormat="of" target="RFC9594"/>:</t>
          <ul spacing="normal">
            <li>
              <t>'gkty': this field specifies the key type "Group_PubSub_Keying_Material" (REQ18) registered in <xref target="iana-ace-groupcomm-key"/> for the 'key' parameter.</t>
            </li>
            <li>
              <t>'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.  </t>
              <ul spacing="normal">
                <li>
                  <t>'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 <xref target="RFC9052"/> and conveying the group key to use in the security group.      </t>
                  <t>
The COSE_Key object <bcp14>MUST</bcp14> contain the following parameters:      </t>
                  <ul spacing="normal">
                    <li>
                      <t>'kty', with value 4 (Symmetric).</t>
                    </li>
                    <li>
                      <t>'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 <xref target="IANA.cose_algorithms"/>.</t>
                    </li>
                    <li>
                      <t>'Base IV', with value the Base Initialization Vector (Base IV) to use in the security group with this group key.</t>
                    </li>
                    <li>
                      <t>'k', with value the symmetric encryption key to use as group key.</t>
                    </li>
                    <li>
                      <t>'kid', with value the identifier of the COSE_Key object, hence of the group key.          </t>
                      <t>
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.</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>'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 <bcp14>MUST</bcp14> be included if the Client is joining the security group as a Publisher, and <bcp14>MUST NOT</bcp14> be included otherwise. A Publisher Client <bcp14>MUST</bcp14> support the 'group_SenderId' parameter (REQ29).      </t>
                  <t>
The Sender ID <bcp14>MUST</bcp14> be unique within the security group. The KDC <bcp14>MUST</bcp14> 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 <xref target="rekeying"/>). The KDC <bcp14>MUST NOT</bcp14> assign a Sender ID to the joining node if the node is not joining the group as a Publisher.      </t>
                  <t>
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.</t>
                </li>
                <li>
                  <t>'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 <xref target="IANA.cose_header-parameters"/>.      </t>
                  <t>
At the time of writing this specification, acceptable formats of authentication credentials are CBOR Web Tokens (CWTs) and CWT Claims Sets (CCSs) <xref target="RFC8392"/>, X.509 certificates <xref target="RFC7925"/>, and C509 certificates <xref target="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).</t>
                </li>
                <li>
                  <t>'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 <xref target="IANA.cose_algorithms"/>.</t>
                </li>
                <li>
                  <t>'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:      </t>
                  <ul spacing="normal">
                    <li>
                      <t>'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 <xref target="IANA.cose_algorithms"/>.</t>
                    </li>
                    <li>
                      <t>'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 <xref target="IANA.cose_key-type"/>.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>'num', specifying the version number of the keying material specified in the 'key' field. The initial value of the version number <bcp14>MUST</bcp14> be set to 0 upon creating the group (REQ16).</t>
            </li>
            <li>
              <t>'exi', which <bcp14>MUST</bcp14> be present.</t>
            </li>
            <li>
              <t>'ace-groupcomm-profile', which <bcp14>MUST</bcp14> be present and has value "coap_group_pubsub_app" (PROFILE_TBD), which is registered in <xref target="iana-profile"/> (REQ19).</t>
            </li>
            <li>
              <t>'creds', which <bcp14>MUST</bcp14> be present if the 'get_creds' parameter was present in the Join Request, and <bcp14>MUST NOT</bcp14> be present otherwise. It specifies the authentication credentials of all the Publishers in the security group.</t>
            </li>
            <li>
              <t>'peer_roles', which <bcp14>MAY</bcp14> 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' <bcp14>MUST NOT</bcp14> be present.</t>
            </li>
            <li>
              <t>'peer_identifiers', which <bcp14>MUST</bcp14> be present if 'creds' is also present, and <bcp14>MUST NOT</bcp14> be present otherwise. The identifiers are the Publisher Sender IDs, whose corresponding authentication credentials are specified in the 'creds' parameter (REQ25).</t>
            </li>
            <li>
              <t>'kdc_cred', which <bcp14>MUST</bcp14> be present if group re-keying is used. It is encoded as a CBOR byte string, with value the original binary representation of the KDC's authentication credential (REQ8).</t>
            </li>
            <li>
              <t>'kdc_nonce', which <bcp14>MUST</bcp14> be present if 'kdc_cred' is present. It is encoded as a CBOR byte string, with value a dedicated nonce N_KDC generated by the KDC. For N_KDC, it is <bcp14>RECOMMENDED</bcp14> to use an 8-byte long random nonce.</t>
            </li>
            <li>
              <t>'kdc_cred_verify', which <bcp14>MUST</bcp14> be present if 'kdc_cred' is present. It is encoded as a CBOR byte string. The KDC <bcp14>MUST</bcp14> 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).</t>
            </li>
            <li>
              <t>'group_rekeying', which <bcp14>MAY</bcp14> be omitted if the KDC uses the "Point-to-Point" group rekeying scheme registered in <xref section="11.13" sectionFormat="of" target="RFC9594"/> as the default rekeying scheme in the group (OPT9). In any other case, the 'group_rekeying' parameter <bcp14>MUST</bcp14> be included.</t>
            </li>
          </ul>
          <t>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 is also associated with the tuple containing NODENAME, GROUPNAME, the current Gid, the newly assigned Publisher's Sender ID, and the Client's access token. The KDC <bcp14>MUST</bcp14> keep this association updated over time.</t>
          <t>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.</t>
          <t>If the application requires backward security, the KDC <bcp14>MUST</bcp14> generate updated security parameters and group keying material, and provide it to the current group members upon the new node's joining (see <xref target="rekeying"/>). In such a case, the joining node is not able to access secure communication in the Pub-Sub group prior its joining.</t>
          <t>Upon receiving the Join Response, the joining node retrieves the KDC's authentication credential from the 'kdc_cred' parameter (if present). The joining node <bcp14>MUST</bcp14> verify the signature used as proof-of-possession (PoP) evidence, which is specified by the 'kdc_cred_verify' parameter of the Join Response (REQ21).</t>
        </section>
        <section anchor="join-error">
          <name>Join Error Handling</name>
          <t>The KDC <bcp14>MUST</bcp14> reply with a 4.00 (Bad Request) error response (OPT4) to the Join Request in the following cases:</t>
          <ul spacing="normal">
            <li>
              <t>The 'client_cred' parameter is present in the Join Request and its value is not an eligible authentication credential (e.g., it is not of the format accepted in the group) (OPT8).</t>
            </li>
            <li>
              <t>The 'client_cred' parameter is present, but the 'cnonce' and 'client_cred_verify' parameters are not present.</t>
            </li>
            <li>
              <t>The 'client_cred' parameter is not present while the joining node is not requesting to join the group exclusively as a Subscriber, and any of the following conditions holds:  </t>
              <ul spacing="normal">
                <li>
                  <t>The KDC does not store an eligible authentication credential for the joining node (e.g., of the format accepted in the group).</t>
                </li>
                <li>
                  <t>The KDC stores multiple eligible authentication credentials for the joining node (e.g., of the format accepted in the group).</t>
                </li>
              </ul>
            </li>
            <li>
              <t>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 <xref target="scope"/>.</t>
            </li>
          </ul>
          <t>A 4.00 (Bad Request) error response from the KDC to the joining node <bcp14>MAY</bcp14> have content format application/ace-groupcomm+cbor and contain a CBOR map as payload.</t>
          <t>The CBOR map <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> store the newly generated value as the 'kdcchallenge' value associated with the joining node, which replaces the currently stored value (if any).</t>
          <t>Upon receiving the Join Response, if 'kdc_cred' is present but the Client cannot verify the PoP evidence, the Client <bcp14>MUST</bcp14> stop processing the Join Response and <bcp14>MAY</bcp14> send a new Join Request to the KDC.</t>
          <t>The KDC <bcp14>MUST</bcp14> return a 5.03 (Service Unavailable) 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 <bcp14>MUST</bcp14> have Content-Format set to application/concise-problem-details+cbor and is formatted as defined in <xref section="4.1.2" sectionFormat="of" target="RFC9594"/>. Within the Custom Problem Detail entry 'ace-groupcomm-error', the value of the 'error-id' field <bcp14>MUST</bcp14> be set to 4 ("No available individual keying material").</t>
        </section>
      </section>
      <section anchor="other-group-operations-through-the-kdc">
        <name>Other Group Operations through the KDC</name>
        <section anchor="query">
          <name>Obtaining Latest Information on the Group, Group Keying Material, and Sender ID</name>
          <t>A Client can access the following resources at the KDC, in order to retrieve latest information about the group or the group keying material.</t>
          <ul spacing="normal">
            <li>
              <t>'/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 <xref target="join-response"/>) for which the group name and the URI to the group-membership resource are provided in the returned response.</t>
            </li>
            <li>
              <t>'/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') <bcp14>MUST</bcp14> coincide.  </t>
              <t>
The KDC processes the Key Distribution Request according to <xref section="4.3.2" sectionFormat="of" target="RFC9594"/>. The Key Distribution Response is formatted as defined in <xref section="4.3.2" sectionFormat="of" target="RFC9594"/>, with the following additions.  </t>
              <ul spacing="normal">
                <li>
                  <t>The 'key' field is formatted as defined in <xref target="join-response"/> of this document, with the difference that it does not include the 'group_SenderId' parameter.</t>
                </li>
                <li>
                  <t>The 'exi' field <bcp14>MUST</bcp14> be present.</t>
                </li>
                <li>
                  <t>The 'ace_groupcomm_profile' field <bcp14>MUST</bcp14> be present and has value "coap_group_pubsub_app".</t>
                </li>
              </ul>
              <t>
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 one as group keying material to protect/unprotect published topic data thereafter.</t>
            </li>
            <li>
              <t>'/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).  </t>
              <t>
The response from the KDC <bcp14>MAY</bcp14> 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' <bcp14>MUST NOT</bcp14> be present.</t>
            </li>
            <li>
              <t>'/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.</t>
            </li>
            <li>
              <t>'/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.</t>
            </li>
            <li>
              <t>'/ace-group/GROUPNAME/nodes/NODENAME': A group member can send a Key Distribution 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).  </t>
              <t>
The KDC processes the Key Distribution Request according to <xref section="4.8.1" sectionFormat="of" target="RFC9594"/>. The Key Distribution Response is formatted as defined in <xref section="4.8.1" sectionFormat="of" target="RFC9594"/>, with the following additions.  </t>
              <ul spacing="normal">
                <li>
                  <t>The 'key' field is formatted as defined in <xref target="join-response"/> of this document. If the requesting group member is not a Publisher Client, then the 'key' field does not include the 'group_SenderId' parameter.</t>
                </li>
                <li>
                  <t>The 'exi' field <bcp14>MUST</bcp14> be present.</t>
                </li>
              </ul>
              <t>
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 one as group keying material to protect/unprotect published topic data thereafter.</t>
            </li>
          </ul>
        </section>
        <section anchor="sec-key-renewal-request">
          <name>Requesting a New Sender ID</name>
          <t>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 <xref target="oscon"/>).</t>
          <t>When this happens, the Publisher <bcp14>MUST</bcp14> send a Key Renewal Request message to the KDC, as per <xref section="4.8.2.1" sectionFormat="of" target="RFC9594"/>. That is, it sends a CoAP POST request to the endpoint /ace-group/GROUPNAME/nodes/NODENAME at the KDC.</t>
          <t>Upon receiving the Key Renewal Request, the KDC processes it as defined in <xref section="4.8.2" sectionFormat="of" target="RFC9594"/>, with the addition that the KDC takes one of the following actions.</t>
          <ul spacing="normal">
            <li>
              <t>The KDC rekeys the group. That is, the KDC generates new group keying material for that group (see <xref target="rekeying"/>), and replies to the Publisher with a group rekeying message as defined in <xref target="rekeying"/>, providing the new group keying material. Then, the KDC rekeys the rest of the group, as discussed in <xref target="rekeying"/>.  </t>
              <t>
The KDC <bcp14>SHOULD</bcp14> perform a group rekeying only if already scheduled to occur shortly, e.g., according to an application-specific rekeying period or scheduling, or as a reaction to a recent change in the group membership. In any other case, the KDC <bcp14>SHOULD NOT</bcp14> rekey the OSCORE group when receiving a Key Renewal Request (OPT12).</t>
            </li>
            <li>
              <t>The KDC determines and assigns a new Sender ID for the Publisher, and replies with a Key Renewal Response formatted as defined in <xref section="4.8.2" sectionFormat="of" target="RFC9594"/>. The CBOR Map in the response payload includes only the parameter 'group_SenderId' registered in <xref section="16.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>, and specifies the new Sender ID of the Publisher encoded as a CBOR byte string.  </t>
              <t>
The KDC <bcp14>MUST</bcp14> 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 <xref target="rekeying"/>).  </t>
              <t>
The KDC <bcp14>MUST</bcp14> return a 5.03 (Service Unavailable) response in case there are currently no Sender IDs available to assign in the group. The response <bcp14>MUST</bcp14> have Content-Format set to application/concise-problem-details+cbor and is formatted as defined in <xref section="4.1.2" sectionFormat="of" target="RFC9594"/>. Within the Custom Problem Detail entry 'ace-groupcomm-error', the value of the 'error-id' field <bcp14>MUST</bcp14> be set to 4 ("No available individual keying material").</t>
            </li>
          </ul>
        </section>
        <section anchor="updating-authentication-credentials">
          <name>Updating Authentication Credentials</name>
          <t>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.</t>
          <t>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 <xref section="4.9.1" sectionFormat="of" target="RFC9594"/>).</t>
          <t>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.</t>
        </section>
        <section anchor="sec-group-leaving">
          <name>Leaving a Group</name>
          <t>A group member with node name NODENAME can actively request to leave the security group with name GROUPNAME.</t>
          <t>To this end, the Client sends a CoAP DELETE request to the associated sub-resource /ace-group/GROUPNAME/nodes/NODENAME at the KDC (see <xref section="4.8.3" sectionFormat="of" target="RFC9594"/>).</t>
          <t>The KDC can also remove a group member due to any of the reasons described in <xref section="5" sectionFormat="of" target="RFC9594"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="rekeying">
      <name>Group Rekeying Process</name>
      <t>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 <xref target="oscon"/>).</t>
      <t>The KDC <bcp14>MUST</bcp14> trigger a group rekeying as described in <xref section="6" sectionFormat="of" target="RFC9594"/>, upon a change in the group membership or due to the current group keying material approaching its expiration time. In addition, the KDC <bcp14>MAY</bcp14> perform regularly scheduled group rekeying executions.</t>
      <t>Upon generating the new group key and before starting its distribution:</t>
      <ul spacing="normal">
        <li>
          <t>The KDC <bcp14>MUST</bcp14> increment the version number of the group keying material.</t>
        </li>
        <li>
          <t>The KDC <bcp14>MUST</bcp14> generate a new Group Identifier (Gid) for the group. This is used as 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 <xref target="join-response"/>).  </t>
          <t>
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.</t>
        </li>
      </ul>
      <t>When rekeying the group, the KDC <bcp14>MUST</bcp14> preserve the current value of the Sender ID of each member in that group.</t>
      <t>The default rekeying scheme is "Point-to-Point" (see <xref section="6.1" sectionFormat="of" target="RFC9594"/>), where the KDC individually targets each node to rekey, using the pairwise secure communication association with that node.</t>
      <t>In particular, a group rekeying message <bcp14>MUST</bcp14> have Content-Format set to application/ace-groupcomm+cbor and have the same format used for the Join Response message defined in <xref target="join-response"/>, with the following differences:</t>
      <ul spacing="normal">
        <li>
          <t>Within the 'key' field, only the parameter 'group_key' is present.</t>
        </li>
        <li>
          <t>The fields 'kdc_cred' ,'kdc_nonce', 'kdc_cred_verify', and 'group_rekeying' are not present.</t>
        </li>
        <li>
          <t>The fields 'creds' and 'peer_identifiers' <bcp14>SHOULD</bcp14> 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 <bcp14>MAY</bcp14> be omitted.</t>
        </li>
      </ul>
    </section>
    <section anchor="protected_communication">
      <name>Pub-Sub Protected Communication</name>
      <t>In the diagram shown in <xref target="pubsub-3"/>, (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 (<xref target="RFC9052"/><xref target="RFC9053"/><xref target="RFC9338"/>), as detailed in <xref target="oscon"/>.</t>
      <t>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) <xref target="RFC7641"/>, as per <xref target="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.</t>
      <figure anchor="pubsub-3">
        <name>Secure Pub-Sub Communication between Publisher and Subscriber</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="176" width="520" viewBox="0 0 520 176" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,160" fill="none" stroke="black"/>
              <path d="M 104,32 L 104,160" fill="none" stroke="black"/>
              <path d="M 216,32 L 216,160" fill="none" stroke="black"/>
              <path d="M 288,32 L 288,160" fill="none" stroke="black"/>
              <path d="M 408,32 L 408,160" fill="none" stroke="black"/>
              <path d="M 512,32 L 512,160" fill="none" stroke="black"/>
              <path d="M 8,32 L 104,32" fill="none" stroke="black"/>
              <path d="M 216,32 L 288,32" fill="none" stroke="black"/>
              <path d="M 408,32 L 512,32" fill="none" stroke="black"/>
              <path d="M 120,64 L 136,64" fill="none" stroke="black"/>
              <path d="M 184,64 L 200,64" fill="none" stroke="black"/>
              <path d="M 304,96 L 328,96" fill="none" stroke="black"/>
              <path d="M 376,96 L 392,96" fill="none" stroke="black"/>
              <path d="M 304,128 L 328,128" fill="none" stroke="black"/>
              <path d="M 376,128 L 392,128" fill="none" stroke="black"/>
              <path d="M 8,160 L 104,160" fill="none" stroke="black"/>
              <path d="M 216,160 L 288,160" fill="none" stroke="black"/>
              <path d="M 408,160 L 512,160" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="400,128 388,122.4 388,133.6" fill="black" transform="rotate(0,392,128)"/>
              <polygon class="arrowhead" points="312,96 300,90.4 300,101.6" fill="black" transform="rotate(180,304,96)"/>
              <polygon class="arrowhead" points="208,64 196,58.4 196,69.6" fill="black" transform="rotate(0,200,64)"/>
              <g class="text">
                <text x="160" y="68">(D)</text>
                <text x="56" y="100">Publisher</text>
                <text x="252" y="100">Broker</text>
                <text x="352" y="100">(E)</text>
                <text x="460" y="100">Subscriber</text>
                <text x="352" y="132">(F)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
+-----------+             +--------+              +------------+
|           |             |        |              |            |
|           | --- (D) --> |        |              |            |
|           |             |        |              |            |
| Publisher |             | Broker | <--- (E) --- | Subscriber |
|           |             |        |              |            |
|           |             |        | ---- (F) --> |            |
|           |             |        |              |            |
+-----------+             +--------+              +------------+
]]></artwork>
        </artset>
      </figure>
      <t><xref target="flow"/> 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.</t>
      <t>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) response as per <xref section="3.2" sectionFormat="of" target="RFC7641"/>.</t>
      <figure anchor="flow">
        <name>Example of Secure Pub-Sub Communication using CoAP</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="320" width="568" viewBox="0 0 568 320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,304" fill="none" stroke="black"/>
              <path d="M 296,48 L 296,304" fill="none" stroke="black"/>
              <path d="M 560,48 L 560,304" fill="none" stroke="black"/>
              <path d="M 8,64 L 40,64" fill="none" stroke="black"/>
              <path d="M 256,64 L 288,64" fill="none" stroke="black"/>
              <path d="M 16,96 L 64,96" fill="none" stroke="black"/>
              <path d="M 184,96 L 296,96" fill="none" stroke="black"/>
              <path d="M 304,128 L 320,128" fill="none" stroke="black"/>
              <path d="M 544,128 L 560,128" fill="none" stroke="black"/>
              <path d="M 296,176 L 344,176" fill="none" stroke="black"/>
              <path d="M 464,176 L 552,176" fill="none" stroke="black"/>
              <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
              <path d="M 272,224 L 288,224" fill="none" stroke="black"/>
              <path d="M 16,256 L 48,256" fill="none" stroke="black"/>
              <path d="M 168,256 L 296,256" fill="none" stroke="black"/>
              <path d="M 296,288 L 344,288" fill="none" stroke="black"/>
              <path d="M 480,288 L 552,288" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="560,288 548,282.4 548,293.6" fill="black" transform="rotate(0,552,288)"/>
              <polygon class="arrowhead" points="560,176 548,170.4 548,181.6" fill="black" transform="rotate(0,552,176)"/>
              <polygon class="arrowhead" points="312,128 300,122.4 300,133.6" fill="black" transform="rotate(180,304,128)"/>
              <polygon class="arrowhead" points="296,224 284,218.4 284,229.6" fill="black" transform="rotate(0,288,224)"/>
              <polygon class="arrowhead" points="296,64 284,58.4 284,69.6" fill="black" transform="rotate(0,288,64)"/>
              <polygon class="arrowhead" points="24,256 12,250.4 12,261.6" fill="black" transform="rotate(180,16,256)"/>
              <polygon class="arrowhead" points="24,96 12,90.4 12,101.6" fill="black" transform="rotate(180,16,96)"/>
              <g class="text">
                <text x="40" y="36">Publisher</text>
                <text x="300" y="36">Broker</text>
                <text x="524" y="36">Subscriber</text>
                <text x="68" y="68">0.03</text>
                <text x="104" y="68">PUT</text>
                <text x="184" y="68">ps/data/1bd0d6d</text>
                <text x="92" y="100">2.01</text>
                <text x="144" y="100">Created</text>
                <text x="348" y="132">0.01</text>
                <text x="384" y="132">GET</text>
                <text x="468" y="132">/ps/data/1bd0d6d</text>
                <text x="368" y="148">Observe:0</text>
                <text x="372" y="180">2.05</text>
                <text x="424" y="180">Content</text>
                <text x="388" y="196">Observe:</text>
                <text x="448" y="196">10001</text>
                <text x="52" y="228">0.04</text>
                <text x="100" y="228">DELETE</text>
                <text x="196" y="228">/ps/data/1bd0d6d</text>
                <text x="76" y="260">2.02</text>
                <text x="128" y="260">Deleted</text>
                <text x="372" y="292">4.04</text>
                <text x="408" y="292">Not</text>
                <text x="448" y="292">Found</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
Publisher                         Broker                    Subscriber
|                                   |                                |
+---- 0.03 PUT ps/data/1bd0d6d ---->|                                |
|                                   |                                |
|<------ 2.01 Created --------------+                                |
|                                   |                                |
|                                   |<-- 0.01 GET /ps/data/1bd0d6d --+
|                                   |    Observe:0                   |
|                                   |                                |
|                                   +------ 2.05 Content ----------->|
|                                   |       Observe: 10001           |
|                                   |                                |
+-- 0.04 DELETE /ps/data/1bd0d6d -->|                                |
|                                   |                                |
|<---- 2.02 Deleted ----------------+                                |
|                                   |                                |
|                                   +------ 4.04 Not Found --------->|
|                                   |                                |
]]></artwork>
        </artset>
      </figure>
      <section anchor="oscon">
        <name>Using COSE to Protect the Published Topic Data</name>
        <t>The Publisher uses the symmetric COSE Key received from the KDC to protect the payload of the Publish operation (see <xref section="3.2.1" sectionFormat="of" target="I-D.ietf-core-coap-pubsub"/>). Specifically, the Publisher creates a COSE_Encrypt0 object <xref target="RFC9052"/><xref target="RFC9053"/> by means of the COSE Key currently used as group key. 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.</t>
        <t>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 <xref target="RFC9338"/>. The countersignature is specified in the 'Countersignature version 2' parameter, within the 'unprotected' field of the COSE_Encrypt0 object.</t>
        <t>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.</t>
        <t>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 Broker or from its local storage. Then, the Subscriber uses that public key to verify the countersignature.</t>
        <t>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.</t>
        <t>The COSE_Encrypt0 object is constructed as follows.</t>
        <t>The 'protected' field <bcp14>MUST</bcp14> include:</t>
        <ul spacing="normal">
          <li>
            <t>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.</t>
          </li>
        </ul>
        <t>The 'unprotected' field <bcp14>MUST</bcp14> include:</t>
        <ul spacing="normal">
          <li>
            <t>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).</t>
          </li>
          <li>
            <t>The 'Partial IV' parameter, with value set to the current Sender Sequence Number of the Publisher. All leading bytes of value zero <bcp14>SHALL</bcp14> be removed when encoding the Partial IV, except in the case of Partial IV value 0, which is encoded to the byte string 0x00.  </t>
            <t>
The Publisher <bcp14>MUST</bcp14> initialize the Sender Sequence Number to 0 upon joining the security group, and <bcp14>MUST</bcp14> reset it to 0 upon receiving a new group key as result of a group rekeying (see <xref target="rekeying"/>). The Publisher <bcp14>MUST</bcp14> increment its Sender Sequence Number value by 1, after having completed an encryption operation by means of the current group key.  </t>
            <t>
When the Publisher exhausts its Sender Sequence Numbers, the Publisher <bcp14>MUST NOT</bcp14> protect further topic data by using the current group key while still retaining its current Sender ID, and <bcp14>MUST</bcp14> send a Key Renewal Request message to the KDC (see <xref target="sec-key-renewal-request"/>). 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 <bcp14>MUST</bcp14> reset its Sender Sequence Number to 0 upon receiving a new Sender ID from the KDC.</t>
          </li>
          <li>
            <t>The 'Countersignature version 2' parameter, specifying the countersignature of the COSE_Encrypt0 object. In particular:  </t>
            <ul spacing="normal">
              <li>
                <t>The 'protected' field includes the 'alg' parameter, with value the identifier of the Signature Algorithm used in the security group.</t>
              </li>
              <li>
                <t>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 value of the 'group_SenderId' parameter of the Join Response (see <xref target="join-response"/>).</t>
              </li>
              <li>
                <t>The 'signature' field, with value the countersignature.</t>
              </li>
            </ul>
            <t>
The countersignature is computed as defined in <xref target="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:  </t>
            <ul spacing="normal">
              <li>
                <t>'context' takes "CounterSignature".</t>
              </li>
              <li>
                <t>'body_protected' takes the serialized parameters from the 'protected' field of the COSE_Encrypt0 object, i.e., the 'alg' parameter.</t>
              </li>
              <li>
                <t>'sign_protected' takes the serialized parameters from the 'protected' field of the 'Countersignature version 2' parameter, i.e., the 'alg' parameter.</t>
              </li>
              <li>
                <t>'external_aad is not supplied.</t>
              </li>
              <li>
                <t>'payload' is the ciphertext of the COSE_Encrypt0 object (see below).</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>The 'ciphertext' field specifies the ciphertext computed over the topic data to publish. The ciphertext is computed as defined in <xref target="RFC9052"/><xref target="RFC9053"/>, by using the current group key as encryption key, the AEAD Nonce computed as defined in <xref target="ssec-aead-nonce"/>, the topic data to publish as plaintext, and the Enc_structure populated as follows:</t>
        <ul spacing="normal">
          <li>
            <t>'context' takes "Encrypt0".</t>
          </li>
          <li>
            <t>'protected' takes the serialization of the protected parameter 'alg' from the 'protected' field of the COSE_Encrypt0 object.</t>
          </li>
          <li>
            <t>'external_aad is not supplied.</t>
          </li>
        </ul>
      </section>
      <section anchor="ssec-aead-nonce">
        <name>AEAD Nonce</name>
        <t>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 <xref section="5.2" sectionFormat="of" target="RFC8613"/>).</t>
        <t>The AEAD nonce for producing or consuming the COSE_Encrypt0 object is constructed as defined below and also shown in <xref target="fig-aead-nonce"/>.</t>
        <ol spacing="normal" type="1"><li>
            <t>Left-pad the Partial IV (PIV) with zeroes to exactly 5 bytes.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>Concatenate the size of the ID_PIV (a single byte S) with the padded ID_PIV and the padded PIV.</t>
          </li>
          <li>
            <t>XOR the result from the previous step with the Base IV.</t>
          </li>
        </ol>
        <figure anchor="fig-aead-nonce">
          <name>AEAD Nonce Construction</name>
          <artwork align="center"><![CDATA[
     <- nonce length minus 6 B -> <-- 5 bytes -->
+---+-------------------+--------+---------+-----+
| S |      padding      | ID_PIV | padding | PIV |-----+
+---+-------------------+--------+---------+-----+     |
                                                       |
 <---------------- nonce length ---------------->      |
+------------------------------------------------+     |
|                    Base IV                     |-->(XOR)
+------------------------------------------------+     |
                                                       |
 <---------------- nonce length ---------------->      |
+------------------------------------------------+     |
|                     Nonce                      |<----+
+------------------------------------------------+
]]></artwork>
        </figure>
        <t>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:</t>
        <ul spacing="normal">
          <li>
            <t>Since Publisher's Sender IDs are unique within the security group and they are not reassigned until a group rekeying occurs (see <xref target="join-response"/> and <xref target="rekeying"/>), two Publisher Clients cannot share the same tuple (S, padded ID_PIV) by construction.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
        </ul>
      </section>
      <section anchor="ssec-replay-checks">
        <name>Replay Checks</name>
        <t>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 <bcp14>RECOMMENDED</bcp14> that the Replay Window has a default size of 32.</t>
        <t>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 <xref target="oscon"/>), and determines the Replay Window W_P associated with P.</t>
        <t>The Subscriber <bcp14>MUST</bcp14> 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.</t>
        <t>If the verification above fails, the Subscriber <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> stop processing the COSE_Encrypt0 object.</t>
        <t>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 the COSE_Encrypt0 object using the group key. If both operations succeed, the Subscriber updates W_P as follows:</t>
        <ul spacing="normal">
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>SN_P is marked to denote that it has been received.</t>
          </li>
        </ul>
        <t>The operation of validating the 'Partial IV' and updating the Replay Window <bcp14>MUST</bcp14> be atomic.</t>
        <t>Upon installing a new group key (e.g., due to a group rekeying performed by the KDC, see <xref target="rekeying"/>) 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.</t>
        <!--# Applicability to the MQTT Pub-Sub Profile {#mqtt-pubsub}

This section describes how this profile can be applicable to the MQTT protocol {{MQTT-OASIS-Standard-v5}}.

The MQTT clients would go through steps similar to those performed by the CoAP clients, and the payload of the MQTT PUBLISH messages is protected using COSE. The MQTT clients need to use CoAP for communicating with the KDC, in order to join security groups and be part of the pairwise rekeying initiated by the KDC.

The discovery of the AS is defined in {{Section 2.4.1 of RFC9431}} for MQTT v5 clients, and it is not supported for MQTT v3 clients. $SYS/ has been widely adopted as a prefix to topics that contain server-specific information or control APIs, and may be used for discovering topics and the KDC.

In the Join Response from the KDC to a Client (see {{join-response}}), the 'ace-groupcomm-profile' parameter has value "mqtt_pubsub_app", which is registered in {{iana-profile}}.

Both Publishers and Subscribers MUST authorise to the Broker with their respective tokens, as described in {{RFC9431}}. A Publisher sends PUBLISH messages for a given topic and protects the payload with the corresponding key for the associated security group. A Subscriber may send SUBSCRIBE messages with one or multiple topic filters. A topic filter may correspond to multiple topics. The Broker forwards all PUBLISH messages to all authorised Subscribers, including the retained messages.
-->

</section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Security considerations for this profile are inherited from <xref target="RFC9594"/>, the ACE framework for Authentication and Authorization <xref target="RFC9200"/>, and the specific transport profile of ACE used, such as <xref target="RFC9202"/> and <xref target="RFC9203"/>.</t>
      <t>The following security considerations also apply for this profile.</t>
      <t>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.</t>
      <t>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 data. This ensures integrity of the published topic data as well as its origin, thus preventing a group member from impersonating another one.</t>
      <t>To this end, both Publishers and Subscribers rely on asymmetric cryptography, while Subscribers must be able to access the public keys of all 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.</t>
      <t>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 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.</t>
      <t>With respect to the reusage of nonces for Proof-of-Possession input, the same considerations apply as in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>.</t>
      <t>Access tokens might have to be revoked before their expiration time. <xref target="I-D.ietf-ace-revoked-token-notification"/> provides a list of possible circumstances where this can happen, and 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.</t>
      <t>Clients can be excluded from future communications related to a topic, by appropriately re-keying the group associated with the topic in question.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>Note to RFC Editor: Please replace "[RFC-XXXX]" with the RFC number of this document and delete this paragraph.</t>
      <t>This document has the following actions for IANA.</t>
      <section anchor="iana-ace-groupcomm-key">
        <name>ACE Groupcomm Key Types</name>
        <t>IANA is asked to register the following entry in the "ACE Groupcomm Key Types" registry defined in <xref section="11.8" sectionFormat="of" target="RFC9594"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Name: Group_PubSub_Keying_Material</t>
          </li>
          <li>
            <t>Key Type Value: GROUPCOMM_KEY_TBD</t>
          </li>
          <li>
            <t>Profile: coap_group_pubsub_app (<xref target="iana-profile"/> of [RFC-XXXX]).</t>
          </li>
          <li>
            <t>Description: Encoded as described in <xref target="join-response"/> of [RFC-XXXX].</t>
          </li>
          <li>
            <t>References: <xref target="RFC9052"/>, <xref target="RFC9053"/>, [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-profile">
        <name>ACE Groupcomm Profiles</name>
        <t>IANA is asked to register the following entries in the "ACE Groupcomm Profiles" registry defined in <xref section="11.9" sectionFormat="of" target="RFC9594"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Name: coap_group_pubsub_app</t>
          </li>
          <li>
            <t>Description: Application profile to provision keying material for participating in group communication based on the Pub-Sub architecture <xref target="I-D.ietf-core-coap-pubsub"/> for CoAP <xref target="RFC7252"/> and protected with COSE <xref target="RFC9052"/><xref target="RFC9053"/><xref target="RFC9338"/>.</t>
          </li>
          <li>
            <t>CBOR Value: TBD</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
      <section anchor="core_rt">
        <name>CoRE Resource Type</name>
        <t>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.</t>
        <ul spacing="normal">
          <li>
            <t>Value: "core.ps.gm"</t>
          </li>
          <li>
            <t>Description: Group-membership resource for Pub-Sub communication.</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t>Clients can use this resource type to discover a group membership resource at the KDC.</t>
      </section>
      <section anchor="aif">
        <name>AIF Media-Type Sub-Parameters</name>
        <t>For the media-types application/aif+cbor and application/aif+json defined in <xref section="5.1" sectionFormat="of" target="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 <xref section="5.2" sectionFormat="of" target="RFC9237"/> within the "MIME Media Type Sub-Parameter" registry group.</t>
        <ul spacing="normal">
          <li>
            <t>Parameter: Toid</t>
          </li>
          <li>
            <t>Name: pubsub-topic</t>
          </li>
          <li>
            <t>Description/Specification: Name of one application group (topic) or of a corresponding security group.</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Parameter: Tperm</t>
          </li>
          <li>
            <t>Name: pubsub-perm</t>
          </li>
          <li>
            <t>Description/Specification: Permissions pertaining to application groups (topics) or to corresponding security groups.</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
      <section anchor="content_formats">
        <name>CoAP Content-Formats</name>
        <t>IANA is asked to register the following entries to the "CoAP Content-Formats" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <ul spacing="normal">
          <li>
            <t>Content Type: application/aif+cbor;Toid="pubsub-topic",Tperm="pubsub-perm"</t>
          </li>
          <li>
            <t>Content Coding: -</t>
          </li>
          <li>
            <t>ID: 294 (suggested)</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Content Type: application/aif+json;Toid="pubsub-topic",Tperm="pubsub-perm"</t>
          </li>
          <li>
            <t>Content Coding: -</t>
          </li>
          <li>
            <t>ID: 295 (suggested)</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
      <section anchor="tls_exporter">
        <name>TLS Exporter Labels</name>
        <t>IANA is asked to register the following entry to the "TLS Exporter Labels" registry defined in <xref section="6" sectionFormat="of" target="RFC5705"/> and updated in <xref section="12" sectionFormat="of" target="RFC8447"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Value: EXPORTER-ACE-Sign-Challenge-pubsub-app</t>
          </li>
          <li>
            <t>DTLS-OK: Y</t>
          </li>
          <li>
            <t>Recommended: N</t>
          </li>
          <li>
            <t>Reference: <xref target="pop"/> of [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="IANA.cose_algorithms" target="https://www.iana.org/assignments/cose">
          <front>
            <title>COSE Algorithms</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.cose_key-type" target="https://www.iana.org/assignments/cose">
          <front>
            <title>COSE Key Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.cose_header-parameters" target="https://www.iana.org/assignments/cose">
          <front>
            <title>COSE Header Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC5705">
          <front>
            <title>Keying Material Exporters for Transport Layer Security (TLS)</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="March" year="2010"/>
            <abstract>
              <t>A number of protocols wish to leverage Transport Layer Security (TLS) to perform key establishment but then use some of the keying material for their own purposes. This document describes a general mechanism for allowing that. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5705"/>
          <seriesInfo name="DOI" value="10.17487/RFC5705"/>
        </reference>
        <reference anchor="RFC6347">
          <front>
            <title>Datagram Transport Layer Security Version 1.2</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="January" year="2012"/>
            <abstract>
              <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol. The DTLS protocol provides communications privacy for datagram protocols. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees. Datagram semantics of the underlying transport are preserved by the DTLS protocol. This document updates DTLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6347"/>
          <seriesInfo name="DOI" value="10.17487/RFC6347"/>
        </reference>
        <reference anchor="RFC6690">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links. Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type. "RESTful" refers to the Representational State Transfer (REST) architecture. A well-known URI is defined as a default entry point for requesting the links hosted by a server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC7925">
          <front>
            <title>Transport Layer Security (TLS) / Datagram Transport Layer Security (DTLS) Profiles for the Internet of Things</title>
            <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig"/>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>A common design pattern in Internet of Things (IoT) deployments is the use of a constrained device that collects data via sensors or controls actuators for use in home automation, industrial control systems, smart cities, and other IoT deployments.</t>
              <t>This document defines a Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) 1.2 profile that offers communications security for this data exchange thereby preventing eavesdropping, tampering, and message forgery. The lack of communication security is a common vulnerability in IoT products that can easily be solved by using these well-researched and widely deployed Internet security protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7925"/>
          <seriesInfo name="DOI" value="10.17487/RFC7925"/>
        </reference>
        <reference anchor="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8447">
          <front>
            <title>IANA Registry Updates for TLS and DTLS</title>
            <author fullname="J. Salowey" initials="J." surname="Salowey"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document describes a number of changes to TLS and DTLS IANA registries that range from adding notes to the registry all the way to changing the registration policy. These changes were mostly motivated by WG review of the TLS- and DTLS-related registries undertaken as part of the TLS 1.3 development process.</t>
              <t>This document updates the following RFCs: 3749, 5077, 4680, 5246, 5705, 5878, 6520, and 7301.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8447"/>
          <seriesInfo name="DOI" value="10.17487/RFC8447"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
        <reference anchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="RFC9237">
          <front>
            <title>An Authorization Information Format (AIF) for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Information about which entities are authorized to perform what operations on which constituents of other entities is a crucial component of producing an overall system that is secure. Conveying precise authorization information is especially critical in highly automated systems with large numbers of entities, such as the Internet of Things.</t>
              <t>This specification provides a generic information model and format for representing such authorization information, as well as two variants of a specific instantiation of that format for use with Representational State Transfer (REST) resources identified by URI path.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9237"/>
          <seriesInfo name="DOI" value="10.17487/RFC9237"/>
        </reference>
        <reference anchor="RFC9277">
          <front>
            <title>On Stable Storage for Items in Concise Binary Object Representation (CBOR)</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document defines a stored ("file") format for Concise Binary Object Representation (CBOR) data items that is friendly to common systems that recognize file types, such as the Unix file(1) command.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9277"/>
          <seriesInfo name="DOI" value="10.17487/RFC9277"/>
        </reference>
        <reference anchor="RFC9290">
          <front>
            <title>Concise Problem Details for Constrained Application Protocol (CoAP) APIs</title>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="October" year="2022"/>
            <abstract>
              <t>This document defines a concise "problem detail" as a way to carry machine-readable details of errors in a Representational State Transfer (REST) response to avoid the need to define new error response formats for REST APIs for constrained environments. The format is inspired by, but intended to be more concise than, the problem details for HTTP APIs defined in RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9290"/>
          <seriesInfo name="DOI" value="10.17487/RFC9290"/>
        </reference>
        <reference anchor="RFC9338">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Countersignatures</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="December" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. CBOR Object Signing and Encryption (COSE) defines a set of security services for CBOR. This document defines a countersignature algorithm along with the needed header parameters and CBOR tags for COSE. This document updates RFC 9052.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9338"/>
          <seriesInfo name="DOI" value="10.17487/RFC9338"/>
        </reference>
        <reference anchor="RFC9594">
          <front>
            <title>Key Provisioning for Group Communication Using Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="M. Tiloca" initials="M." surname="Tiloca"/>
            <date month="September" year="2024"/>
            <abstract>
              <t>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.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9594"/>
          <seriesInfo name="DOI" value="10.17487/RFC9594"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pubsub">
          <front>
            <title>A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Jaime Jimenez" initials="J." surname="Jimenez">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>Dogtiger Labs</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="28" month="February" year="2025"/>
            <abstract>
              <t>   This document describes a publish-subscribe architecture for the
   Constrained Application Protocol (CoAP), extending the capabilities
   of CoAP communications for supporting endpoints with long breaks in
   connectivity and/or up-time.  CoAP clients publish on and subscribe
   to a topic via a corresponding topic resource at a CoAP server acting
   as broker.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-18"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC9202">
          <front>
            <title>Datagram Transport Layer Security (DTLS) Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="S. Gerdes" initials="S." surname="Gerdes"/>
            <author fullname="O. Bergmann" initials="O." surname="Bergmann"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a profile of the Authentication and Authorization for Constrained Environments (ACE) framework that allows constrained servers to delegate client authentication and authorization. The protocol relies on DTLS version 1.2 or later for communication security between entities in a constrained network using either raw public keys or pre-shared keys. A resource-constrained server can use this protocol to delegate management of authorization information to a trusted host with less-severe limitations regarding processing power and memory.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9202"/>
          <seriesInfo name="DOI" value="10.17487/RFC9202"/>
        </reference>
        <reference anchor="RFC9203">
          <front>
            <title>The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework. It utilizes Object Security for Constrained RESTful Environments (OSCORE) to provide communication security and proof-of-possession for a key owned by the client and bound to an OAuth 2.0 access token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9203"/>
          <seriesInfo name="DOI" value="10.17487/RFC9203"/>
        </reference>
        <reference anchor="I-D.ietf-cose-cbor-encoded-cert">
          <front>
            <title>CBOR Encoded X.509 Certificates (C509 Certificates)</title>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Shahid Raza" initials="S." surname="Raza">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Joel Höglund" initials="J." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Martin Furuhed" initials="M." surname="Furuhed">
              <organization>Nexus Group</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   This document specifies a CBOR encoding of X.509 certificates.  The
   resulting certificates are called C509 Certificates.  The CBOR
   encoding supports a large subset of RFC 5280 and all certificates
   compatible with the RFC 7925, IEEE 802.1AR (DevID), CNSA, RPKI, GSMA
   eUICC, and CA/Browser Forum Baseline Requirements profiles.  When
   used to re-encode DER encoded X.509 certificates, the CBOR encoding
   can in many cases reduce the size of RFC 7925 profiled certificates
   with over 50% while also significantly reducing memory and code size
   compared to ASN.1.  The CBOR encoded structure can alternatively be
   signed directly ("natively signed"), which does not require re-
   encoding for the signature to be verified.  The TLSA selectors
   registry defined in RFC 6698 is extended to include CBOR
   certificates.  The document also specifies C509 Certificate Signing
   Requests, C509 COSE headers, a C509 TLS certificate type, and a C509
   file format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cbor-encoded-cert-13"/>
        </reference>
        <reference anchor="I-D.ietf-ace-edhoc-oscore-profile">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC) and Object Security for Constrained Environments (OSCORE) Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   This document specifies a profile for the Authentication and
   Authorization for Constrained Environments (ACE) framework.  It
   utilizes Ephemeral Diffie-Hellman Over COSE (EDHOC) for achieving
   mutual authentication between an ACE-OAuth client and resource
   server, and it binds an authentication credential of the client to an
   ACE-OAuth access token.  EDHOC also establishes an Object Security
   for Constrained RESTful Environments (OSCORE) Security Context, which
   is used to secure communications between the client and resource
   server when accessing protected resources according to the
   authorization information indicated in the access token.  This
   profile can be used to delegate management of authorization
   information from a resource-constrained server to a trusted host with
   less severe limitations regarding processing power and memory.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-edhoc-oscore-profile-07"/>
        </reference>
        <reference anchor="I-D.ietf-ace-revoked-token-notification">
          <front>
            <title>Notification of Revoked Access Tokens in the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Sebastian Echeverria" initials="S." surname="Echeverria">
              <organization>CMU SEI</organization>
            </author>
            <author fullname="Grace Lewis" initials="G." surname="Lewis">
              <organization>CMU SEI</organization>
            </author>
            <date day="22" month="September" year="2024"/>
            <abstract>
              <t>   This document specifies a method of the Authentication and
   Authorization for Constrained Environments (ACE) framework, which
   allows an authorization server to notify clients and resource servers
   (i.e., registered devices) about revoked access tokens.  As specified
   in this document, the method allows clients and resource servers to
   access a Token Revocation List on the authorization server by using
   the Constrained Application Protocol (CoAP), with the possible
   additional use of resource observation.  Resulting (unsolicited)
   notifications of revoked access tokens complement alternative
   approaches such as token introspection, while not requiring
   additional endpoints on clients and resource servers.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-revoked-token-notification-09"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for Group Object Security for Constrained RESTful Environments (Group OSCORE) Using Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="11" month="April" year="2025"/>
            <abstract>
              <t>   This document defines an application profile of the Authentication
   and Authorization for Constrained Environments (ACE) framework, to
   request and provision keying material in group communication
   scenarios that are based on the Constrained Application Protocol
   (CoAP) and are secured with Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  This application profile
   delegates the authentication and authorization of Clients, which join
   an OSCORE group through a Resource Server acting as Group Manager for
   that group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication, and proof-of-possession for a key owned by the Client
   and bound to an OAuth 2.0 access token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-17"/>
        </reference>
      </references>
    </references>
    <?line 1027?>

<section anchor="groupcomm_requirements">
      <name>Requirements on Application Profiles</name>
      <t>This section lists how this application profile of ACE addresses the requirements defined in <xref section="A" sectionFormat="of" target="RFC9594"/>.</t>
      <section anchor="mandatory-to-address-requirements">
        <name>Mandatory-to-Address Requirements</name>
        <ul spacing="normal">
          <li>
            <t>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 <xref target="scope"/>.</t>
          </li>
          <li>
            <t>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 <xref target="RFC9237"/>: see <xref target="aif"/> and <xref target="content_formats"/>.</t>
          </li>
          <li>
            <t>REQ3: If used, specify the acceptable values for the 'sign_alg' parameter: values from the "Value" column of the "COSE Algorithms" registry <xref target="IANA.cose_algorithms"/>.</t>
          </li>
          <li>
            <t>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 <xref target="IANA.cose_algorithms"/>.</t>
          </li>
          <li>
            <t>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 <xref target="IANA.cose_key-type"/>.</t>
          </li>
          <li>
            <t>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 <xref target="token-post"/> and <xref target="join-response"/>). Consistent acceptable values for 'cred_fmt' are taken from the "Label" column of the "COSE Header Parameters" registry <xref target="IANA.cose_header-parameters"/>.</t>
          </li>
          <li>
            <t>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; a perfect matching is required.</t>
          </li>
          <li>
            <t>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 <xref target="join-response"/>.</t>
          </li>
          <li>
            <t>REQ9: Specify if any part of the KDC interface as defined in <xref target="RFC9594"/> is not supported by the KDC: some are left optional, see <xref target="kdc-interface"/>.</t>
          </li>
          <li>
            <t>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 <xref target="core_rt"/>.</t>
          </li>
          <li>
            <t>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 <xref target="kdc-interface"/> of this document.</t>
          </li>
          <li>
            <t>REQ12: Categorize possible newly defined operations for Clients into primary operations expected to be minimally supported and secondary operations, and provide accompanying considerations: none added.</t>
          </li>
          <li>
            <t>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 <xref target="join-response"/>).</t>
          </li>
          <li>
            <t>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 <xref target="pop"/>.</t>
          </li>
          <li>
            <t>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 <xref target="pop"/>.</t>
          </li>
          <li>
            <t>REQ16: Define the initial value of the version number for the group keying material: the initial value <bcp14>MUST</bcp14> be set to 0 (see <xref target="join-response"/>).</t>
          </li>
          <li>
            <t>REQ17: Specify the format of the group keying material that is conveyed in the 'key' parameter: see <xref target="join-response"/>.</t>
          </li>
          <li>
            <t>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 <xref target="join-response"/> and <xref target="iana-ace-groupcomm-key"/>.</t>
          </li>
          <li>
            <t>REQ19: Specify and register the application profile identifier: coap_group_pubsub_app (see <xref target="join-response"/> and <xref target="iana-profile"/>) (see <xref target="iana-profile"/>).</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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 <xref target="join-response"/>.</t>
          </li>
          <li>
            <t>REQ22: Specify the communication protocol that members of the group use to communicate with each other (e.g., CoAP for group communication): CoAP <xref target="RFC7252"/>, used for Pub-Sub communications as defined in <xref target="I-D.ietf-core-coap-pubsub"/>.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>REQ24: Specify how the communication is secured between the Client and the KDC. Optionally, specify a transport profile of ACE <xref target="RFC9200"/> to use between the Client and the KDC: ACE transport profile such as for DTLS <xref target="RFC9202"/> or OSCORE <xref target="RFC9203"/>.</t>
          </li>
          <li>
            <t>REQ25: Specify the format of the node identifiers of group members: the Sender ID defined in <xref target="join-response"/>.</t>
          </li>
          <li>
            <t>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 <xref target="query"/>.</t>
          </li>
          <li>
            <t>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 <xref target="sec-key-renewal-request"/>.</t>
          </li>
          <li>
            <t>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 <xref target="as-response"/> and <xref target="content_formats"/>.</t>
          </li>
          <li>
            <t>REQ29: Categorize newly defined parameters according to the same criteria of <xref section="8" sectionFormat="of" target="RFC9594"/>: a Publisher Client <bcp14>MUST</bcp14> support 'group_SenderId' in 'key'; see <xref target="join-response"/>.</t>
          </li>
          <li>
            <t>REQ30: Define whether Clients must, should, or may support the conditional parameters defined in <xref section="8" sectionFormat="of" target="RFC9594"/> and under which circumstances: a Publisher Client <bcp14>MUST</bcp14> support the client_cred', 'cnonce', and 'client_cred_verify' parameters (see <xref target="join-request"/>). A Publisher Client that provides the access token to the KDC through the /authz-info endpoint <bcp14>MUST</bcp14> support the parameter 'kdcchallenge' (see <xref target="token-post"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="optional-to-address-requirements">
        <name>Optional-to-Address Requirements</name>
        <ul spacing="normal">
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>OPT2: Optionally, specify the additional parameters used in the exchange of Token Transfer Request and Response: none are defined.</t>
          </li>
          <li>
            <t>OPT3: Optionally, specify the negotiation of parameter values for signature algorithm and signature keys, if the 'sign_info' parameter is not used: see <xref target="token-post"/>.</t>
          </li>
          <li>
            <t>OPT4: Optionally, specify possible or required payload formats for specific error cases: see <xref target="join-error"/>.</t>
          </li>
          <li>
            <t>OPT5: Optionally, specify additional identifiers of error types as values of the 'error-id' field within the Custom Problem Detail entry 'ace-groupcomm-error': no.</t>
          </li>
          <li>
            <t>OPT6: Optionally, specify the encoding of the 'creds_repo' parameter if the default one is not used: no.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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 <bcp14>MUST</bcp14> reply with a 4.00 (Bad Request) error response to the Join Request (see <xref target="join-error"/>).</t>
          </li>
          <li>
            <t>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 <xref section="11.13" sectionFormat="of" target="RFC9594"/>.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>OPT11: Optionally, specify policies that instruct Clients to retain messages and for how long, if those are unsuccessfully decrypted: no.</t>
          </li>
          <li>
            <t>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 <bcp14>SHOULD NOT</bcp14> perform a group rekeying, unless already scheduled to occur shortly (see <xref target="sec-key-renewal-request"/>).</t>
          </li>
          <li>
            <t>OPT13: Optionally, specify how the identifier of a group member's authentication credential is included in requests sent to other group members: no.</t>
          </li>
          <li>
            <t>OPT14: Optionally, specify additional information to include in rekeying messages for the "Point-to-Point" group rekeying scheme (see <xref section="6" sectionFormat="of" target="RFC9594"/>): no.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-10-11">
        <name>Version -10 to -11</name>
        <ul spacing="normal">
          <li>
            <t>Recommended /ps/TOPICNAME as path ot topic resources at the Broker.</t>
          </li>
          <li>
            <t>The request for a new Sender ID uses the method POST.</t>
          </li>
          <li>
            <t>Fixed description of ACE Group Error with identifier 4.</t>
          </li>
          <li>
            <t>Aligned requirement formulation with that in RFC 9594.</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-09-10">
        <name>Version -09 to -10</name>
        <ul spacing="normal">
          <li>
            <t>More details on the scope format.</t>
          </li>
          <li>
            <t>More details in the encoding of the 'key' parameter in the Join Response.</t>
          </li>
          <li>
            <t>More details on exchanges between group members and KDC.</t>
          </li>
          <li>
            <t>More details on the rekeying process and rekeying messages.</t>
          </li>
          <li>
            <t>Defined replay checks at the Subscriber.</t>
          </li>
          <li>
            <t>Improved examples.</t>
          </li>
          <li>
            <t>Improved security considerations.</t>
          </li>
          <li>
            <t>Revised IANA considerations.</t>
          </li>
          <li>
            <t>Aligned the list of profile requirements with draft-ietf-ace-key-groupcomm.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-08-09">
        <name>Version -08 to -09</name>
        <ul spacing="normal">
          <li>
            <t>Improved terminology section.</t>
          </li>
          <li>
            <t>Generalized scope format for future, admin-related extensions.</t>
          </li>
          <li>
            <t>Improved definition of permissions in the format of scope.</t>
          </li>
          <li>
            <t>Clarified alternative computing of N_S Challenge when DTLS is used.</t>
          </li>
          <li>
            <t>Use of the parameter 'exi' in the Join Response.</t>
          </li>
          <li>
            <t>Use of RFC 9290 instead of the custom format of error responses.</t>
          </li>
          <li>
            <t>Fixed construction of the COSE_Encrypt0 object.</t>
          </li>
          <li>
            <t>Fixed use of the resource type "core.ps.gm".</t>
          </li>
          <li>
            <t>Updated formulation of profile requirements.</t>
          </li>
          <li>
            <t>Clarification and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-07-08">
        <name>Version -07 to -08</name>
        <ul spacing="normal">
          <li>
            <t>Revised presentation of the scope format.</t>
          </li>
          <li>
            <t>Revised presentation of the Join Request-Response exchange.</t>
          </li>
          <li>
            <t>The 'cnonce' parameter must be present in the Join Request.</t>
          </li>
          <li>
            <t>The 'kid' of the group key is used as Group Identifier.</t>
          </li>
          <li>
            <t>Relaxed inclusion of the 'peer_roles' parameter.</t>
          </li>
          <li>
            <t>More detailed description of the encryption and signing operations.</t>
          </li>
          <li>
            <t>Defined construction of the AEAD nonce.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-06-07">
        <name>Version -06 to -07</name>
        <ul spacing="normal">
          <li>
            <t>Revised abstract and introduction.</t>
          </li>
          <li>
            <t>Clarified use of "application groups".</t>
          </li>
          <li>
            <t>Revised use of protocols and transport profiles with Broker and KDC.</t>
          </li>
          <li>
            <t>Revised overview of the profile and its security associations.</t>
          </li>
          <li>
            <t>Revised presentation of authorization flow.</t>
          </li>
          <li>
            <t>Subscribers cannot be anonymous anymore.</t>
          </li>
          <li>
            <t>Revised scope definition.</t>
          </li>
          <li>
            <t>Revised Join Response.</t>
          </li>
          <li>
            <t>Revised COSE countersignature, COSE encrypt objects.</t>
          </li>
          <li>
            <t>Further clarifications, fixes and editorial improvements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors wish to thank <contact fullname="Ari Keränen"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Jim Schaad"/>, <contact fullname="Ludwig Seitz"/>, and <contact fullname="Göran Selander"/> for the useful discussion and reviews that helped shape this document.</t>
      <t>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).</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAVVJGgAA+292XYbSZYg+K5z4h+8qD5NMgOAuGphLF0URUWwUhKZBJWR
eTKymU7ASXoJgKPcHaQYCtWvzDzMN8wHdP1Y293MrpmbA6CkyMyZ0zpVGQTg
bsu1a3dfut3uVw9u9pLtrx589aDO61G2lxwU+yfJyexilFfX3f7sohqU+UWW
nJTFZT7KksuiTPZn9XU2qfNBWufFJEknQ/yqKPNf6Bt46KCYVHWZ5pNsmBxO
bvKymIzNS1Wytn9wuP7Vg/TioszM3OaTnRPmk5m+ejAsBpN0bJY0LNPLuptn
9WU3HWTdQZFOu1OzMvPClB7ujtI6q2rYRj4t95K6nFX11sbGs40tM1OZpXtJ
PxvMyry+++rB7RXN+lNRvssnV8kPZTGbfvXg3e1ecjSps3KS1d0XMOVXD8wO
95KqHn71wEw2zqvK7K6+m5o1HR2evYTpBsXQjLGXzMzinsIXKUJi76sHBrSJ
+ZdPqr3kZS85SUfF+CKf5PQ17exlmU4GWTVIw5+L0ox5WOaDqiom9FU2TvPR
XnIpr/Sm8sq/Zvxgb1CM/YkPembjk6vZSM96kF8Ns7H3A873vJxNslHydpLf
ZGWFsFITDyp8/l/TwbhnHvfned1LzvJRMUj1PK/TclB43+M0p0f9w2T/uTf4
GB7t1fjov5Z5r8oAlpOiHBuMusn24OGj/Tf7ZodVdp6Orgyy1dfjKvjhXXbX
xfPxv77O0mFWdqdpadZlTpheO315sPtkY1f+fry988T+/fjZhv37yc4z+fvJ
1u6W/fvxzqb9+9mWHefp9jP7zNOdncfqbzv+08ebdvynz9z4zzbc+Obvbfv3
pnv3mcFr9/e2+v6J+tut/9n29lP79+6zHYJN90UPL9SgKL0btYd3aHLpQZ5W
bFfzdGv3mVrNlvp7Oxy9MqNfFGU3m5ibkg27g6ys/WfgSmfD62LQLSpcDd/p
5lOGXhTvzBi1+d9Jd1LU+SXToOazgAlXcLHNlRjzyLg3IFz1Hb7QP3z1ci9Z
+YtZevdP5t9fV+CBbrebpBdAuwZIUM6u8yoxtGgG5CsZZpeGpFWG6CXpdDoS
GshrTorLxNDGL0Eh4aKPs1tDozpJXSTZJL0w41dAxbIEd5bA1mYTmSSf4NRN
0r3GlHU9MZfsOq+zQQ1jwBLgBb2MfbUlQ4frYlCMkjUgz+vJz39RdDhEm5//
2klur7PSzm8uGW7bLsN8duvNzMxmC1fXSWqojjnO0tAPgLPAscxGuYEyQRaX
0a2m2QAO3BD3dFJNi7KWpysAO1B0A6fU7DC7yQLYVEz8O+av0hC3JPUOqINL
NaMVl13zf9OiqjKk9QikNDHIlBS3AKCLO4KZWZ1BBnjropiZ/4WZJ8kxHHKy
1dswyzA0ukoQU3lrFoV4I2bZMJSZ9SaHuYAVwYAZXL5Bho+afaUe3tibKTiE
C6lo52ZBVQD/R+YZdQQdeOI2G43gv43ZzWxmp/CXmcHwlHSECxLgJY5+mnfT
2k4+qwib4KgMcsEAZuy89A+hMjuDu2tIwdAeP6yBEQDu2psCUKMAYpIcDvPa
MNLkZJSlFWDEdGQudrKyAA9XklvDGXBgGGUyG5uN0700S7aHABsbZqMMUREQ
z+ztqkyn1z2iAON8OBwhE3oIUkFZDGcD2AV8c2RudDLle1ZF7lk1MNe1zIuO
meImHwC5ILAsOp/k23/pdnH9o3xsburQbNtgdHqRj8wBdLvfe3foJk/t/aHt
Me5URmYBwJgJuuaL27QcJmODj+kVLOIiq2+zDKiFoc6MnNnlJZzcTTa6Y1Jj
lgeHOgbQRciNXPfU4JIiO7Frb0BrLlo+TREETKYqg0lW5KuLqbnXRk4zc0yq
3PDqDBY8xteZpOILmuTSolIj9wzyFEDF527AgOMhQv0E38FGBjOkJrxUnNWj
hkTXh7C8Dx9auePHj/cmmx8+sNzw8WOHUO0fyUtoOSBCwHJur/PBtT1vgYtP
OvmYGdxmTXNOmriTQaF5lN6QC8ADgA4e0fNZPhoi+aHjIURFimLIUCWkGegp
POUdFIs0TdD+A2lsAghoydrfjeJ6xDVCfIFYBNTW0LGiHALtKGQk74IU06zk
t709faEt8Zl9Hstfy3pXvY5Fa7xl8mEbPhgoqQvdJmx+/Lj+zyo9kAyKpLFm
fGXekwlVzxg9kILm5WA2QoLI0/GhEajhkLOhxhbHDmCOsswMoCd4IS2a41Lh
9xyWYMR4je+GgxR0kuan1jM9ODZKHx3MBtBC+dOcEY5uHgnRBtEKJquLL8Ri
eoaV87MGROZuVsXMkIHgPH0IC9jzSrADATvODEYKiW4DW5Vf4Z2oZobMykDI
pnJziQ1OmD3mN0Akzd7xoIH//3QNoPPgiPwrm8/BiA3snwD+j/+jrh3LwlX6
jIcgVyXXxa0/08Ag4oVltKByGOi//sPZmRkV/tM93u8f9bv92hyBESu6N7sf
P/aSvpFWDECTdJhOayYZMFI6qozq8r7OCMkvZ2UNcPGuM151OtLYvqqeEXtQ
DnuYnGXlOJ8Uo+LqTm4FXC7D2IZVsvL6bf9spUP/Td4c49+nh394e3R6+AL+
7v+4/+qV/eMBP9H/8fjtqxfuL/fmwfHr14dvXtDL5tvE++rByuv9P6/Q3V85
Pjk7On6z/2qFcE/DGu6k2foFXZ5yWmZw/9LqgRwCsrLnByf/6//e3DFA/hdz
L7Y2N5+Zc6MPTzefGAYHfJgpTTExHJY+GmjePTBnlRnY5xMUxgbpNK8N3JHx
VNeAZMDBew8e/O4vAJm/7iXfXgymmzvf8xewYe9LgZn3JcKs+U3jZQJi5KvI
NBaa3vcBpP317v/Z+yxwV19++z9GRj5IuptP/8f3DwBLTtH4U+FBZO+nRP/o
RC5Tg7a5gR3cSbQO/C4BpDLnNCaMNJd2kE3NZfVOC8Uyw3ycWLWUWVTJXj07
D+MzjoC2CSCYuZBjKw17Vx3wy4lBjm/gBGCvggkCUodYmU8Go5nZCrOgTnKa
MQnsE2dbO+2vdyJLl5/3++s9Byf/mSMlN73Ev8zzRy/XZd/bTwwaGzKG0Dcn
UQKPaxW9enOOA/hKWjvOsEBkFGGwKTSyDOULh2U2yW7hQ8iQ8knU8CLaXoWH
WmUCZVwamblzponmar3HOQzivjdnCDYs0pZZUQWWDpTVqG93wKDT4ZDABPd+
CoOkI/19mf3HLC9RkDU3HpiQqHHz4Beg88GLF68ILmCXBLgcPD8+5W+eATYR
Sszh4fTn9vZTg3n3mBjs/kpB6iVkALhmcRPeT1YM85gWhniuAN4j/qBKclmM
RgWeEzBTugR4K3IWyvIx3JvagblkZK+IIRv6+LdHKGP9Ddf4t0c5KPoIwr+J
xLvf7/CPgKm/dAFD7Y+n/dC2MyzM6GY6lNBJTTRbdMsCXuw2JBqYGWFlf0LX
/y4uzOA4wi1X5sOYlDTkpDF8RQGEJIU0OJC5qi9Ouo/LuyNmllU1vddYcmxe
pTWko9JQ5XCr8AO/Scp/giTLTDS4TidXmRFH7ug0kYMmK0TFgD1b3VW+MRd7
ZVIMMwEVOnn2zPhVhiI0/MZSc3VNlofxOCKEtqpjnsrUVLcQyIVhRKlZ7jXZ
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
jAEA

-->

</rfc>
