<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.24 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ace-pubsub-profile-04" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.43.0 -->
  <front>
    <title abbrev="pubsub-profile">Pub-Sub Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ace-pubsub-profile-04"/>
    <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>
    <date year="2021" month="December" day="29"/>
    <area>Security</area>
    <workgroup>ACE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This specification defines an application profile for authentication and authorization for Publishers and Subscribers in a constrained pub-sub scenario, using the ACE framework. This profile relies on transport layer or application layer security to authorize the pub-sub clients to the broker. Moreover, it describes the use of application layer security to protect the content of the pub-sub client message exchange through the broker. The profile covers pub-sub scenarios using
either the Constrained Application Protocol (CoAP) <xref target="I-D.ietf-core-coap-pubsub" format="default"/> or the
Message Queue Telemetry Transport (MQTT) <xref target="MQTT-OASIS-Standard-v5" format="default"/> protocol.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/ace-wg/pubsub-profile">https://github.com/ace-wg/pubsub-profile</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>In the publish-subscribe (pub-sub) scenario, devices with limited reachability communicate via a broker, which enables store-and-forward messaging between the devices. This document defines a way to authorize pub-sub clients using the ACE framework <xref target="I-D.ietf-ace-oauth-authz" format="default"/> to obtain the keys for protecting the content
of their pub-sub messages when communicating through the broker. The pub-sub communication using the Constrained Application Protocol (CoAP) <xref target="RFC7252" format="default"/> is specified in <xref target="I-D.ietf-core-coap-pubsub" format="default"/>, while the one using MQTT is specified in <xref target="MQTT-OASIS-Standard-v5" format="default"/>.  This document gives detailed specifications for MQTT and CoAP pub-sub, but can easily be adapted for other transport protocols as well.</t>
      <section anchor="terminology" numbered="true" toc="default">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 <xref target="RFC2119" format="default"/>.</t>
        <t>Readers are expected to be familiar with the terms and concepts
described in <xref target="I-D.ietf-ace-oauth-authz" format="default"/>, <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>. In particular, analogously to <xref target="I-D.ietf-ace-oauth-authz" format="default"/>, terminology for entities in the architecture such as Client (C), Resource Server (RS), and Authorization Server (AS) is defined in OAuth 2.0 <xref target="RFC6749" format="default"/> and <xref target="I-D.ietf-ace-actors" format="default"/>, and terminology for entities such as the Key Distribution Center (KDC) and Dispatcher in <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>.</t>
        <t>Readers are expected to be familiar with terms and concepts of pub-sub group communication, as described in <xref target="I-D.ietf-core-coap-pubsub" format="default"/>, or MQTT <xref target="MQTT-OASIS-Standard-v5" format="default"/>.</t>
      </section>
    </section>
    <section anchor="overview" numbered="true" toc="default">
      <name>Application Profile Overview</name>
      <t>The objective of this document is to specify how to authorize nodes, provide keys, and protect a pub-sub communication, using <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>, which expands from the ACE framework (<xref target="I-D.ietf-ace-oauth-authz" format="default"/>), and transport profiles (<xref target="I-D.ietf-ace-dtls-authorize" format="default"/>, <xref target="I-D.ietf-ace-oscore-profile" format="default"/>, <xref target="I-D.ietf-ace-mqtt-tls-profile" format="default"/>). The pub-sub communication protocol can be based on CoAP, as described in <xref target="I-D.ietf-core-coap-pubsub" format="default"/>, MQTT <xref target="MQTT-OASIS-Standard-v5" format="default"/> , or other transport. Note that both Publishers and Subscribers use the same pub-sub communication protocol and the same transport profile of ACE in their interaction with the broker. However, all clients need to use CoAP when communicating to the KDC.</t>
      <t>The architecture of the scenario is shown in <xref target="archi" format="default"/>.</t>
      <figure anchor="archi">
        <name>Architecture for Pub-Sub with Authorization Server and Key Distribution Center</name>
        <artwork align="center" name="" type="" alt=""><![CDATA[
             +----------------+   +----------------+
             |                |   |      Key       |
             | Authorization  |   |  Distribution  |
             |    Server      |   |     Center     |
             |      (AS)      |   |     (KDC)      |
             +----------------+   +----------------+
                      ^                  ^
                      |                  |
     +---------(A)----+                  |
     |   +--------------------(B)--------+
     v   v
+------------+             +------------+
|            |             |            |
| Pub-Sub    | <-- (C)---> |   Broker   |
| Client     |             |            |
|            |             |            |
+------------+             +------------+
]]></artwork>
      </figure>
      <t>Publisher or Subscriber Clients is referred to as Client in short.
A Client can act both as a publisher and a subscriber, publishing to some topics, 
and subscribing to others. However, for the simplicity of presentation, this profile
describes Publisher and Subscriber clients separately.
The Broker acts as the ACE RS, and also corresponds to the Dispatcher in <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>).</t>
      <t>This profile specifies:</t>
      <ol spacing="normal" type="1">
        <li>The establishment of a secure connection between a Client and Broker, using an ACE transport profile such as DTLS <xref target="I-D.ietf-ace-dtls-authorize" format="default"/>, OSCORE <xref target="I-D.ietf-ace-oscore-profile" format="default"/>, or MQTT-TLS <xref target="I-D.ietf-ace-mqtt-tls-profile" format="default"/> (A and C).</li>
        <li>The Clients retrieval of keying material for the Publisher Client to publish protected publications to the Broker, and for the Subscriber Client to read protected publications (B).</li>
      </ol>
      <t>These exchanges aim at setting up two different security associations. 
On the one hand, the Publisher and the Subscriber clients have a security association with the Broker, so that, as the ACE RS, it can verify that the Clients are authorized (Security Association 1). On the other hand, the Publisher has a security association with the Subscriber, to protect the publication content (Security Association 2) while sending it through the broker. The Security Association 1 is set up using AS and a transport profile of <xref target="I-D.ietf-ace-oauth-authz" format="default"/>, the Security Association 2 is set up using AS, KDC and <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>. Note that, given that the publication content is protected, the Broker MAY accept unauthorised Subscribers. In this case, the Subscriber client can skip setting up Security Association 1 with the Broker and connect to it as an anonymous client to subscribe to topics of interest at the Broker.</t>
      <figure anchor="associations">
        <name>Security Associations between Publisher, Broker, Subscriber pairs.</name>
        <artwork align="center" name="" type="" alt=""><![CDATA[
+------------+             +------------+              +------------+
|            |             |            |              |            |
| Publisher  |             |   Broker   |              | Subscriber |
|            |             |            |              |            |
|            |             |            |              |            |
+------------+             +------------+              +------------+
      :   :                       : :                       : :
      :   '------ Security -------' '-----------------------' :
      :         Association 1                                 :
      '------------------------------- Security --------------'
                                     Association 2
]]></artwork>
      </figure>
    </section>
    <section anchor="authorisation" numbered="true" toc="default">
      <name>PubSub Authorisation</name>
      <t>Since <xref target="I-D.ietf-ace-oauth-authz" format="default"/> recommends the use of CoAP and CBOR, this document describes the exchanges assuming CoAP and CBOR are used. However, using HTTP instead of CoAP is possible, using the corresponding parameters and methods. Analogously, JSON
 <xref target="RFC8259" format="default"/> can be used instead of CBOR, using the conversion method specified in Sections 6.1 and 6.2 of <xref target="RFC8949" format="default"/>. In case JSON is used, the Content Format or Media Type of the message has to be changed accordingly. Exact definition of these exchanges are considered out of scope for this document.</t>
      <t><xref target="authorisation-flow" format="default"/> shows the message flow for authorisation purposes.</t>
      <figure anchor="authorisation-flow">
        <name>Authorisation Flow</name>
        <artwork align="center" name="" type="" alt=""><![CDATA[
   Client                                       Broker   AS      KDC
      | [--Resource Request (CoAP/MQTT/other)-->] |       |       |
      |                                           |       |       |
      | [<----AS Information (CoAP/MQTT/other)--] |       |       |
      |                                                   |       |
      | ----- Authorisation Request (CoAP/HTTP/other)---->|       |
      |                                                   |       |
      | <------Authorisation Response (CoAP/HTTP/other) --|       |
      |                                                           |
      |----------------------Token Post (CoAP)------------------->|
      |                                                           |
      |------------------- Joining Request (CoAP) --------------->|
      |                                                           |
      |------------------ Joining Response (CoAP) --------------->|

]]></artwork>
      </figure>
      <section anchor="AS-discovery" numbered="true" toc="default">
        <name>AS Discovery (Optional)</name>
        <t>Complementary to what is defined in <xref target="I-D.ietf-ace-oauth-authz" format="default"/> (Section 5.1) for AS discovery, the Broker MAY send the address of the AS to the Client in the 'AS' parameter in the AS Information as a response to an Unauthorized Resource Request (Section 5.2).  An example using CBOR diagnostic notation and CoAP is given below:</t>
        <figure anchor="AS-info-ex">
          <name>AS Information example</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
    4.01 Unauthorized
    Content-Format: application/ace-groupcomm+cbor
    {"AS": "coaps://as.example.com/token"}
]]></artwork>
        </figure>
        <t>Authorisation Server (AS) Discovery is also defined in Section 2.2.6.1 of 
<xref target="I-D.ietf-ace-mqtt-tls-profile" format="default"/> for MQTT v5 clients (and not supported for MQTT v3 clients).</t>
      </section>
      <section anchor="auth-request" numbered="true" toc="default">
        <name>Authorising to the KDC and the Broker</name>
        <t>After retrieving the AS address, the Client sends two Authorisation Requests to the AS for the KDC and the Broker, respectively.</t>
        <t>Note that the AS authorises what topics a Client is allowed to Publish or Subscribe to the Broker, which means authorising which application and security groups a Client can join. This is because being able to publish or subscribe to a topic at the Broker is considered as being part of an application group. As this profile secures the message contents, an application group may be a part of a security group, or can be associated to multiple security groups. Therefore, a Client MUST send Authorization Requests for 
both.</t>
        <t>Both requests include the following fields from the Authorization Request
(Section 3.1 of <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>):</t>
        <ul spacing="normal">
          <li>'scope', containing the group identifiers, that the Client wishes to access</li>
          <li>'audience', an identifier, corresponding to either the KDC or the Broker.
Other additional parameters can be included if necessary, as defined in
<xref target="I-D.ietf-ace-oauth-authz" format="default"/>.</li>
        </ul>
        <t>It must be noted that for pub-sub brokers, the scope represents pub-sub topics i.e., the application group. On the other hand, for the KDC, the scope represents
the security group. If there is a one-to-one mapping between the application group
and the security group, the client uses the same scope for both requests.
If there is not a one-to-one mapping, the correct policies regarding both
sets of scopes MUST be available to the AS. To be able to join the right security group associated with requested application groups (i.e., pub-sub topics), the client The client MUST ask for the correct scopes in its Authorization Requests. How the client discovers the (application group, security group) association is out of scope of this document.
ToDo: Check OSCORE Groups with the CoRE Resource Directory to see if it applies.</t>
        <t>The 'scope' parameter is encoded as follows, where 'gname' is treated as topic identifier or filter.</t>
        <figure anchor="scope-aif">
          <name>CDLL definition of scope, using as example group name encoded as tstr and role as tstr.</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
   gname = tstr

   role = tstr

   scope_entry = [ gname , ? ( role / [ 2*role ] ) ]

   scope = << [ + scope_entry ] >>
]]></artwork>
        </figure>
        <t>Other scope representations are also possible and are described in (Section 3.1 of <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>). Note that in the AIF-MQTT data model described in Section 3 of the <xref target="I-D.ietf-ace-mqtt-tls-profile" format="default"/>, the role values have been further constrained to "pub" and "sub".</t>
        <t>The AS responds with an Authorization Response to each request as defined in Section 5.8.2 of <xref target="I-D.ietf-ace-oauth-authz" format="default"/> and Section 3.2 of <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>. 
The client needs to keep track of which response corresponds to which entity to
use the right token for the right audience, i.e., the KDC or the Broker.
In case CoAP PubSub is used as communication protocol, 'profile' claim is set to "coap_pubsub_app" as defined in <xref target="iana-coap-profile" format="default"/>. In case MQTT PubSub is used as communication protocol, 'profile' claim is set to "mqtt_pubsub_app" as defined in <xref target="iana-mqtt-profile" format="default"/>.</t>
      </section>
    </section>
    <section anchor="retr-cosekey" numbered="true" toc="default">
      <name>Key Distribution for PubSub Content Protection</name>
      <section anchor="token-post" numbered="true" toc="default">
        <name>Token POST</name>
        <t>After receiving a token from the AS, the Client posts the token to the KDC 
(Section 3.3 <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>).  In addition to the token post, 
a Subscriber Client MAY ask for the format of the public keys in the group, used for source authentication, as well as any other group parameters. In this case, the message MUST have Content-Format set to "application/ace+cbor" defined in Section 8.16 of <xref target="I-D.ietf-ace-oauth-authz" format="default"/>.  The message payload MUST be formatted as a CBOR map, which MUST include the access token and
the 'sign_info' parameter. The details for the 'sign_info' parameter can be found in Section 3.3 of <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>. Alternatively, the joining node may retrieve this information by other means as described in <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>.</t>
        <t>The KDC verifies the token to check of the Client is authorized to access the topic with the requested role. After successful verification, the Client is authorized to receive the group keying material from the KDC and join the group. The KDC replies to the Client with a 2.01 (Created) response, using Content-Format "application/ace+cbor". The payload of the 2.01 response is a CBOR map.</t>
        <t>A Publisher Client MUST send its own public key to the KDC when joining the group.
Since the access token from a Publisher Client will have "pub" role, the KDC MUST include
'kdcchallenge' in the CBOR map, specifying a dedicated challenge N_S generated by the KDC.  The Client uses this challenge to prove possession of its own private key (see <xref target="I-D.ietf-ace-key-groupcomm" format="default"/> for details).</t>
      </section>
      <section anchor="join-request" numbered="true" toc="default">
        <name>Join Request and Join Response</name>
        <t>In the next step, a joining node MUST have a secure communication association
established with the KDC, before starting to join a group under that KDC.  Possible ways to provide a secure communication association are described in the DTLS transport profile
<xref target="I-D.ietf-ace-dtls-authorize" format="default"/> and OSCORE transport profile <xref target="I-D.ietf-ace-oscore-profile" format="default"/> of ACE.</t>
        <t>After establishing a secure communication, the Client sends a Joining Request to the KDC as described in Section 4.3 of <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>. More specifically, the Client sends a POST request to the /ace-group/GROUPNAME endpoint on KDC, with Content-Format "application/ace-groupcomm+cbor" that MUST contain in the payload (formatted as a CBOR map, Section 4.1.2.1 of <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>):</t>
        <ul spacing="normal">
          <li>'scope' parameter set to the specific group that the Client is attempting to join, i.e., the group name, and the roles it wishes to have in the group. This value corresponds to one scope entry, as defined in <xref target="auth-request" format="default"/>.</li>
          <li>'get_pub_keys' parameter set to the empty array if the Client needs to retrieve the public keys of the other pubsub members,</li>
          <li>'client_cred' parameter containing the Client's public key formatted according
to the encoding of the public keys used in the group, if the Client is a Publisher,</li>
          <li>'cnonce', encoded as a CBOR byte string, and including a dedicated nonce N_C generated by the Client, if 'client_cred' is present,</li>
          <li>'client_cred_verify', set to a signature computed over the 'rsnonce' concatenated with cnonce, if 'client_cred' is present,</li>
          <li>OPTIONALLY, if needed, the 'pub_keys_repos' parameter</li>
        </ul>
        <t>TODO: Check 'cnonce'</t>
        <t>Note that for a Subscriber-only Client,  the Joining Request MUST NOT contain the 'client_cred parameter', the role element in the 'scope' parameter MUST be set to "sub". The Subscriber MUST have access to the public keys of all the Publishers; this MAY be achieved in the Joining Request by using the parameter 'get_pub_keys' 
encoding the CBOR simple value 'null' (0xf6) (as described in Section 4.3.1 of <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>) to retrieve the public keys of all the Publishers.</t>
        <t>If the 'client_cred' parameter is present, KDC stores the public key of the Client.
Note that the alg parameter in the 'client_cred' COSE_Key MUST be a signing algorithm, as defined in <xref target="I-D.ietf-cose-rfc8152bis-algs" format="default"/> <xref target="I-D.ietf-cose-rfc8152bis-struct" format="default"/>, and that it is the same algorithm used to compute the signature sent in 'client_cred_verify'.</t>
        <t>The KDC responds with a Joining Response, which has the Content-Format "application/ace-groupcomm+cbor". The payload (formatted as a CBOR map) MUST contain the following fields from the Joining Response (Section 4.3.1 of <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>):</t>
        <ul spacing="normal">
          <li>'gkty' identifies a key type for the 'key' parameter.</li>
          <li>
            <t>'key', which contains a "COSE_Key" object (defined in <xref target="I-D.ietf-cose-rfc8152bis-algs" format="default"/><xref target="I-D.ietf-cose-rfc8152bis-struct" format="default"/>, containing:
            </t>
            <ul spacing="normal">
              <li>'kty' with value 4 (symmetric)</li>
              <li>'alg' with value defined by the AS (Content Encryption Algorithm)</li>
              <li>'Base IV' with value defined by the AS</li>
              <li>'k' with value the symmetric key value</li>
              <li>OPTIONALLY, 'kid' with an identifier for the key value</li>
            </ul>
          </li>
          <li>OPTIONALLY, 'exp' with the expiration time of the key</li>
          <li>'pub_keys', containing the public keys of all Publisher Clients, formatted according to the public key encoding for the group, if the 'get_pub_keys' parameter was present and set to the empty array in the Key Distribution Request. For Subscriber Clients, the Joining Response MUST contain the 'pub_keys' parameter. The encoding accepted for this 
document is UCCS (Unprotectec CWT Claims Set) <xref target="I-D.draft-ietf-rats-uccs-01" format="default"/>.
ToDo: Consider allowing other public key formats with the following text. If CBOR Web Tokens (CWTs) or CWT Claims Sets (CCSs) <xref target="RFC8392" format="default"/> are used as public key format, the public key algorithm is fully described by a COSE key type and its "kty" and "crv" parameters. If X.509 certificates <xref target="RFC7925" format="default"/> or C509 certificates
<xref target="I-D.ietf-cose-cbor-encoded-cert" format="default"/> are used as public key format, the public key algorithm is fully described by the "algorithm" field of the "SubjectPublicKeyInfo" structure, and by the "subjectPublicKeyAlgorithm" element, respectively.</li>
        </ul>
        <t>An example of the Joining Request and corresponding Response for a CoAP Publisher using CoAP and CBOR is specified in <xref target="fig-req-pub-kdc" format="default"/> and <xref target="fig-resp-pub-kdc" format="default"/>, where SIG is a signature computed using the private key associated to the public key and the algorithm in 'client_cred'.</t>
        <figure anchor="fig-req-pub-kdc">
          <name>Joining Request payload for a Publisher</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
{
  "scope" : ["Broker1/Temp", "pub"],
  "client_cred" :
    { / COSE_Key /
      / type / 1 : 2, / EC2 /
      / kid / 2 : h'11',
      / alg / 3 : -7, / ECDSA with SHA-256 /
      / crv / -1 : 1 , / P-256 /
      / x / -2 : h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de1
      08de439c08551d',
      / y /-3 : h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e
      9eecd0084d19c',
  "cnonce" : h'd36b581d1eef9c7c,
  "client_cred_verify" : SIG
    }
}
]]></artwork>
        </figure>
        <figure anchor="fig-resp-pub-kdc">
          <name>Joining Response payload for a Publisher</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
{
  "gkty" : "COSE_Key",
  "key" : {1: 4, 2: h'1234', 3: 12, 5: h'1f389d14d17dc7',
          -1: h'02e2cc3a9b92855220f255fff1c615bc'}
}
]]></artwork>
        </figure>
        <t>An example of the payload of a Joining Request and corresponding Response for a Subscriber using CoAP and CBOR is specified in <xref target="fig-req-sub-kdc" format="default"/> and <xref target="fig-resp-sub-kdc" format="default"/>.</t>
        <figure anchor="fig-req-sub-kdc">
          <name>Joining Request payload for a Subscriber</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
{
  "scope" : ["Broker1/Temp", "sub"],
  "get_pub_keys" : null
}
]]></artwork>
        </figure>
        <figure anchor="fig-resp-sub-kdc">
          <name>Joining Response payload for a Subscriber</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
{
  "scope" : ["Broker1/Temp", "sub"],
  "gkty" : "COSE_Key"
  "key" : {1: 4, 2: h'1234', 3: 12, 5: h'1f389d14d17dc7',
          -1: h'02e2cc3a9b92855220f255fff1c615bc'},
  "pub_keys" : [
   {/UCCS/
      2:  "42-50-31-FF-EF-37-32-39", /sub/
      8: {/cnf/
      1: {/COSE_Key/
      1 : 1, /alg/
      3 : -8 /kty/
      -1 : 6 , /crv/
      -2 : h'C6EC665E817BD064340E7C24BB93A11E /x/
8EC0735CE48790F9C458F7FA340B8CA3', / x /
    }
    }
   }
  ]
}
]]></artwork>
        </figure>
        <t>ToDO: Fix Example for COSE_Key for public key</t>
      </section>
    </section>
    <section anchor="protected_communication" numbered="true" toc="default">
      <name>PubSub Protected Communication</name>
      <figure anchor="pubsub-3">
        <name>Secure communication between Publisher and Subscriber</name>
        <artwork align="center" name="" type="" alt=""><![CDATA[
+------------+             +------------+              +------------+
|            |             |            |              |            |
| Publisher  | ----(D)---> |   Broker   |              | Subscriber |
|            |             |            | <----(E)---- |            |
|            |             |            | -----(F)---> |            |
+------------+             +------------+              +------------+
]]></artwork>
      </figure>
      <t>(D) corresponds to the publication of a topic on the Broker.
The publication (the resource representation) is protected with COSE  (<xref target="I-D.ietf-cose-rfc8152bis-algs" format="default"/> <xref target="I-D.ietf-cose-rfc8152bis-struct" format="default"/>) by the Publisher.
The (E) message is the subscription of the Subscriber. The subscription MAY be unprotected.
The (F) message is the response from the Broker, where the publication is protected with COSE by the Publisher.</t>
      <figure anchor="flow">
        <name>(E), (F), (G): Example of protected communication for CoAP</name>
        <artwork align="center" name="" type="" alt=""><![CDATA[
  Publisher                Broker               Subscriber
      | --- PUT /topic ----> |                       |
      |  protected with COSE |                       |
      |                      | <--- GET /topic ----- |
      |                      |                       |
      |                      | ---- response ------> |
      |                      |  protected with COSE  |
]]></artwork>
      </figure>
      <t>The flow graph is presented below for CoAP. The message flow is similar for MQTT, where PUT corresponds to a PUBLISH message, and GET corresponds to a SUBSCRIBE message. 
Whenever a Client publishes a new message, the Broker sends this message to all valid subscribers.</t>
      <section anchor="oscon" numbered="true" toc="default">
        <name>Using COSE Objects To Protect The Resource Representation</name>
        <t>The Publisher uses the symmetric COSE Key received from the KDC (<xref target="retr-cosekey" format="default"/>) to protect the payload of the PUBLISH operation (Section 4.3 of <xref target="I-D.ietf-core-coap-pubsub" format="default"/> and <xref target="MQTT-OASIS-Standard-v5" format="default"/>). Specifically, the COSE Key is used to create a COSE_Encrypt0 object with algorithm specified by KDC. The Publisher uses the private key corresponding to the public key sent to the KDC in exchange B (<xref target="retr-cosekey" format="default"/>) to countersign the COSE Object as specified in <xref target="I-D.ietf-cose-rfc8152bis-algs" format="default"/> <xref target="I-D.ietf-cose-rfc8152bis-struct" format="default"/>. The payload is replaced by the COSE object before the publication is sent to the Broker.</t>
        <t>The Subscriber uses the 'kid' in the 'countersignature' field in the COSE object to retrieve the right public key to verify the countersignature. It then uses the symmetric key received from KDC to verify and decrypt the publication received in the payload from the Broker (in the case of CoAP the publication is received by the CoAP Notification and for MQTT, it is received as a PUBLISH message from the Broker to the subscribing client).</t>
        <t>The COSE object is constructed in the following way:</t>
        <ul spacing="normal">
          <li>The protected Headers (as described in <xref target="I-D.ietf-cose-rfc8152bis-algs" format="default"/> <xref target="I-D.ietf-cose-rfc8152bis-struct" format="default"/>) MUST contain the kid parameter if it was provided in the
Joining Response, with value the kid of the symmetric COSE Key received in <xref target="retr-cosekey" format="default"/> and MUST contain the content encryption algorithm.</li>
          <li>
            <t>The unprotected Headers MUST contain the Partial IV, with value a sequence number that is incremented for every message sent, and the counter signature that includes:
            </t>
            <ul spacing="normal">
              <li>the algorithm (same value as in the asymmetric COSE Key received in (B)) in the protected header;</li>
              <li>the kid (same value as the kid of the asymmetric COSE Key received in (B)) in the unprotected header;</li>
              <li>the signature computed as specified in <xref target="I-D.ietf-cose-rfc8152bis-algs" format="default"/> <xref target="I-D.ietf-cose-rfc8152bis-struct" format="default"/>.</li>
            </ul>
          </li>
          <li>The ciphertext, computed over the plaintext that MUST contain the message payload.</li>
        </ul>
        <t>The 'external_aad' is an empty string.</t>
        <t>An example is given in <xref target="fig-cose-ex" format="default"/>:</t>
        <figure anchor="fig-cose-ex">
          <name>Example of COSE Object sent in the payload of a PUBLISH operation</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
16(
  [
    / protected / h'a2010c04421234' / {
        \ alg \ 1:12, \ AES-CCM-64-64-128 \
        \ kid \ 4: h'1234'
      } / ,
    / unprotected / {
      / iv / 5:h'89f52f65a1c580',
      / countersign / 7:[
        / protected / h'a10126' / {
          \ alg \ 1:-7
        } / ,
        / unprotected / {
          / kid / 4:h'11'
        },
        / signature / SIG / 64 bytes signature /
      ]
    },
    / ciphertext / h'8df0a3b62fccff37aa313c8020e971f8aC8d'
  ]
)
]]></artwork>
        </figure>
        <t>The encryption and decryption operations are described in  <xref target="I-D.ietf-cose-rfc8152bis-algs" format="default"/> <xref target="I-D.ietf-cose-rfc8152bis-struct" format="default"/>.</t>
      </section>
    </section>
    <section anchor="profile-specific-considerations" numbered="true" toc="default">
      <name>Profile-specific Considerations</name>
      <t>This section summarises the CoAP and MQTT specific pub-sub communications, and considerations respectively.</t>
      <section anchor="coap_profile" numbered="true" toc="default">
        <name>CoAP PubSub Application Profile</name>
        <t>A CoAP Pub-Sub Client and Broker use an ACE transport profile such as DTLS <xref target="I-D.ietf-ace-dtls-authorize" format="default"/>, OSCORE <xref target="I-D.ietf-ace-oscore-profile" format="default"/>.</t>
        <t>As shown in <xref target="archi" format="default"/>, (A) is an Access Token Request and Response exchange between Publisher and Authorization Server to retrieve the Access Token and RS (Broker) Information. As specified, the Client has the role of a CoAP client, the Broker has the role of the CoAP server.</t>
        <t>(B) corresponds to the retrieval of the keying material to protect the publication end-to-end (see <xref target="oscon" format="default"/>), and uses <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>. The details are defined in <xref target="retr-cosekey" format="default"/>.</t>
        <t>(C) corresponds to the exchange between the Client and  the Broker, where the Client sends its access token to the Broker and establishes a secure connection with the Broker. Depending on the Information received in (A), this can be for example DTLS handshake, or other protocols. Depending on the application, there may not be the need for this set up phase: for example, if OSCORE is used directly. Note that, in line with what defined in the ACE transport profile used, the access token includes the scope (i.e. pubsub topics on the Broker) the Publisher is allowed to publish to. For implementation simplicity, it is RECOMMENDED that the ACE transport profile used.</t>
        <t>After the previous phases have taken place, the pub-sub communication can commence. The operations of publishing and subscribing are defined in <xref target="I-D.ietf-core-coap-pubsub" format="default"/>.</t>
      </section>
      <section anchor="mqtt-pubsub" numbered="true" toc="default">
        <name>MQTT PubSub Application Profile</name>
        <t>The steps MQTT clients go through are similar to the CoAP clients as described in <xref target="coap_profile" format="default"/>. 
 The payload that is carried in MQTT messages will be protected using COSE.</t>
        <t>In MQTT, topics are organised as a tree, and in the <xref target="I-D.ietf-ace-mqtt-tls-profile" format="default"/> 
'scope' captures permissions for not a single topic but a topic filter. Therefore, topic names (i.e., group names) may include wildcards spanning several levels of the topic tree.
Hence, it is important to distinguish application groups and security groups defined in <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>. An application group has relevance at the application level - for example, in MQTT an application group could denote all topics stored under ""home/lights/". On the other hand, a security group is a group of endpoints that each store group security material to exchange secure communication within the group. The group communication in <xref target="I-D.ietf-ace-key-groupcomm" format="default"/> refers to security groups.
ToDo: Give a more complete example</t>
        <t>For an MQTT client we envision the following steps to take place:</t>
        <ol spacing="normal" type="1">
          <li>Client sends a token request to AS for the requested topics (application groups) using the broker as the audience.</li>
          <li>Client sends a token request to AS for the corresponding security groups for its application groups using the KDC as the audience.</li>
          <li>Client sends join requests to KDC to gets the keys for these security groups.</li>
          <li>Client authorises to the Broker with the token (described in <xref target="I-D.ietf-ace-mqtt-tls-profile" format="default"/>).</li>
          <li>A Publisher Client sends PUBLISH messages for a given topic and protects the payload with the corresponding key for the associated security group. RS validates the PUBLISH message by checking the topic stored token.</li>
          <li>A Subscriber Client may send SUBSCRIBE messages with one or multiple topic filters. 
A topic filter may correspond to multiple topics. RS validates the SUBSCRIBE message by checking the stored token for the Client.</li>
        </ol>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>In the profile described above, the Publisher and Subscriber use asymmetric crypto, which would make the message exchange quite heavy for small constrained devices. Moreover, all Subscribers must be able to access the public keys of all the Publishers to a specific topic to be able to verify the publications. Such a database could be set up and managed by the same entity having control of the
key material for that topic, i.e. KDC.</t>
      <t>An application where it is not critical that only authorized Publishers can publish on a topic may decide not to make use of the asymmetric crypto and only use symmetric encryption/MAC to confidentiality and integrity protection of the publication.
However, this is not recommended since, as a result, any authorized Subscribers with access to the Broker may forge unauthorized publications without being detected. In this symmetric case the Subscribers would only need one symmetric key per topic, and would not need to know any information about the Publishers, that can be anonymous to it and the Broker.</t>
      <t>Subscribers can be excluded from future publications through re-keying for a certain topic. This could be set up to happen on a regular basis, for certain applications. How this could be done is out of scope for this work.</t>
      <t>The Broker is only trusted with verifying that the Publisher is authorized to publish, but is not trusted with the publications itself, which it cannot read nor modify. In this setting, caching of publications on the Broker is still allowed.</t>
      <t>TODO: expand on security and privacy considerations</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="iana-profile" numbered="true" toc="default">
        <name>ACE Groupcomm Profile Registry</name>
        <t>The following registrations are done for the "ACE Groupcomm Profile" Registry following the procedure specified in <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>.</t>
        <t>Note to RFC Editor: Please replace all occurrences of "[[This document]]"
with the RFC number of this specification and delete this paragraph.</t>
        <section anchor="iana-coap-profile" numbered="true" toc="default">
          <name>CoAP Profile Registration</name>
          <t>Name: coap_pubsub_app</t>
          <t>Description: Profile for delegating client authentication and authorization for publishers and subscribers in a CoAP pub-sub setting scenario in a constrained environment.</t>
          <t>CBOR Key: TBD</t>
          <t>Reference: [[This document]]</t>
        </section>
        <section anchor="iana-mqtt-profile" numbered="true" toc="default">
          <name>MQTT Profile Registration</name>
          <t>Name: mqtt_pubsub_app</t>
          <t>Description: Profile for delegating client authentication and authorization for publishers and subscribers in a MQTT pub-sub setting scenario in a constrained environment.</t>
          <t>CBOR Key: TBD</t>
          <t>Reference: [[This document]]</t>
        </section>
      </section>
      <section anchor="iana-ace-groupcomm-key" numbered="true" toc="default">
        <name>ACE Groupcomm Key Registry</name>
        <t>The following registrations are done for the ACE Groupcomm Key Registry following the procedure specified in <xref target="I-D.ietf-ace-key-groupcomm" format="default"/>.</t>
        <t>Note to RFC Editor: Please replace all occurrences of "[[This document]]"
with the RFC number of this specification and delete this paragraph.</t>
        <t>Name: COSE_Key</t>
        <t>Key Type Value: TBD</t>
        <t>Profile: coap_pubsub_app, mqtt_pubsub_app</t>
        <t>Description: COSE_Key object</t>
        <t>References: <xref target="I-D.ietf-cose-rfc8152bis-algs" format="default"/> <xref target="I-D.ietf-cose-rfc8152bis-struct" format="default"/>, [[This document]]</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <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>
        </reference>
        <reference anchor="RFC6749" target="https://www.rfc-editor.org/info/rfc6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <seriesInfo name="DOI" value="10.17487/RFC6749"/>
            <seriesInfo name="RFC" value="6749"/>
            <author initials="D." surname="Hardt" fullname="D. Hardt" role="editor">
              <organization/>
            </author>
            <date year="2012" month="October"/>
            <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>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <seriesInfo name="DOI" value="10.17487/RFC7252"/>
            <seriesInfo name="RFC" value="7252"/>
            <author initials="Z." surname="Shelby" fullname="Z. Shelby">
              <organization/>
            </author>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <date year="2014" month="June"/>
            <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>
        </reference>
        <reference anchor="RFC7925" target="https://www.rfc-editor.org/info/rfc7925">
          <front>
            <title>Transport Layer Security (TLS) / Datagram Transport Layer Security (DTLS) Profiles for the Internet of Things</title>
            <seriesInfo name="DOI" value="10.17487/RFC7925"/>
            <seriesInfo name="RFC" value="7925"/>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig" role="editor">
              <organization/>
            </author>
            <author initials="T." surname="Fossati" fullname="T. Fossati">
              <organization/>
            </author>
            <date year="2016" month="July"/>
            <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>
        </reference>
        <reference anchor="RFC8392" target="https://www.rfc-editor.org/info/rfc8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <seriesInfo name="DOI" value="10.17487/RFC8392"/>
            <seriesInfo name="RFC" value="8392"/>
            <author initials="M." surname="Jones" fullname="M. Jones">
              <organization/>
            </author>
            <author initials="E." surname="Wahlstroem" fullname="E. Wahlstroem">
              <organization/>
            </author>
            <author initials="S." surname="Erdtman" fullname="S. Erdtman">
              <organization/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig">
              <organization/>
            </author>
            <date year="2018" month="May"/>
            <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>
        </reference>
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <seriesInfo name="DOI" value="10.17487/RFC8949"/>
            <seriesInfo name="RFC" value="8949"/>
            <seriesInfo name="STD" value="94"/>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization/>
            </author>
            <date year="2020" month="December"/>
            <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>
        </reference>
        <reference anchor="I-D.draft-ietf-rats-uccs-01" target="https://www.ietf.org/archive/id/draft-ietf-rats-uccs-01.txt">
          <front>
            <title>A CBOR Tag for Unprotected CWT Claims Sets</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-rats-uccs-01"/>
            <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author initials="J." surname="O'Donoghue" fullname="Jeremy O'Donoghue">
              <organization>Qualcomm Technologies Inc.</organization>
            </author>
            <author initials="N." surname="Cam-Winget" fullname="Nancy Cam-Winget">
              <organization>Cisco Systems</organization>
            </author>
            <author initials="C." surname="Bormann" fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date month="July" day="12" year="2021"/>
            <abstract>
              <t>   CBOR Web Token (CWT, RFC 8392) Claims Sets sometimes do not need the
   protection afforded by wrapping them into COSE, as is required for a
   true CWT.  This specification defines a CBOR tag for such unprotected
   CWT Claims Sets (UCCS) and discusses conditions for its proper use.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-cose-cbor-encoded-cert" target="https://www.ietf.org/archive/id/draft-ietf-cose-cbor-encoded-cert-02.txt">
          <front>
            <title>CBOR Encoded X.509 Certificates (C509 Certificates)</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cbor-encoded-cert-02"/>
            <author fullname="John Preuß Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Shahid Raza">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Joel Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Martin Furuhed">
              <organization>Nexus Group</organization>
            </author>
            <date month="July" day="12" year="2021"/>
            <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%.  The CBOR encoded structure can alternatively be
   signed directly ("natively signed"), which does not require re-
   encoding for the signature to be verified.  The document also
   specifies C509 COSE headers, a C509 TLS certificate type, and a C509
   file format.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-cose-rfc8152bis-algs" target="https://www.ietf.org/archive/id/draft-ietf-cose-rfc8152bis-algs-12.txt">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-cose-rfc8152bis-algs-12"/>
            <author fullname="Jim Schaad">
              <organization>August Cellars</organization>
            </author>
            <date month="September" day="24" year="2020"/>
            <abstract>
              <t>   Concise Binary Object Representation (CBOR) is a data format designed
   for small code size and small message size.  There is a need for the
   ability to have basic security services defined 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 XXXX.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-cose-rfc8152bis-struct" target="https://www.ietf.org/archive/id/draft-ietf-cose-rfc8152bis-struct-15.txt">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-cose-rfc8152bis-struct-15"/>
            <author fullname="Jim Schaad">
              <organization>August Cellars</organization>
            </author>
            <date month="February" day="1" year="2021"/>
            <abstract>
              <t>   Concise Binary Object Representation (CBOR) is a data format designed
   for small code size and small message size.  There is a need for the
   ability to have basic security services defined 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.

   This document along with [I-D.ietf-cose-rfc8152bis-algs] obsoletes
   RFC8152.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-ace-oauth-authz" target="https://www.ietf.org/archive/id/draft-ietf-ace-oauth-authz-46.txt">
          <front>
            <title>Authentication and Authorization for Constrained Environments (ACE) using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oauth-authz-46"/>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <author fullname="Goeran Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Erik Wahlstroem">
	 </author>
            <author fullname="Samuel Erdtman">
              <organization>Spotify AB</organization>
            </author>
            <author fullname="Hannes Tschofenig">
              <organization>Arm Ltd.</organization>
            </author>
            <date month="November" day="8" year="2021"/>
            <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>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pubsub" target="https://www.ietf.org/archive/id/draft-ietf-core-coap-pubsub-09.txt">
          <front>
            <title>Publish-Subscribe Broker for the Constrained Application Protocol (CoAP)</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-09"/>
            <author fullname="Michael Koster">
              <organization>SmartThings</organization>
            </author>
            <author fullname="Ari Keranen">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Jaime Jimenez">
              <organization>Ericsson</organization>
            </author>
            <date month="September" day="30" year="2019"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP), and related extensions
   are intended to support machine-to-machine communication in systems
   where one or more nodes are resource constrained, in particular for
   low power wireless sensor networks.  This document defines a publish-
   subscribe Broker for CoAP that extends the capabilities of CoAP for
   supporting nodes with long breaks in connectivity and/or up-time.

   There is work in progress to resolve some of the transfer layer
   issues by using a more RESTful approach.

   Please see https://github.com/core-wg/pubsub/blob/master/proposal.txt

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm" target="https://www.ietf.org/archive/id/draft-ietf-ace-key-groupcomm-15.txt">
          <front>
            <title>Key Provisioning for Group Communication using ACE</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-15"/>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date month="December" day="23" year="2021"/>
            <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 acting as Clients and authorized to join a
   group can do so by interacting with a Key Distribution Center (KDC)
   acting as 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>
        </reference>
        <reference anchor="I-D.ietf-core-groupcomm-bis" target="https://www.ietf.org/archive/id/draft-ietf-core-groupcomm-bis-05.txt">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-05"/>
            <author fullname="Esko Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Chonggang Wang">
              <organization>InterDigital</organization>
            </author>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date month="October" day="25" year="2021"/>
            <abstract>
              <t>   This document specifies the use of the Constrained Application
   Protocol (CoAP) for group communication, including the use of UDP/IP
   multicast as the default underlying data transport.  Both unsecured
   and secured CoAP group communication are specified.  Security is
   achieved by use of the Group Object Security for Constrained RESTful
   Environments (Group OSCORE) protocol.  The target application area of
   this specification is any group communication use cases that involve
   resource-constrained devices or networks that support CoAP.  This
   document replaces RFC 7390, while it updates RFC 7252 and RFC 7641.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="MQTT-OASIS-Standard-v5" target="http://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html">
          <front>
            <title>OASIS Standard MQTT Version 5.0</title>
            <author initials="A." surname="Banks">
              <organization/>
            </author>
            <author initials="E." surname="Briggs">
              <organization/>
            </author>
            <author initials="K." surname="Borgendale">
              <organization/>
            </author>
            <author initials="R." surname="Gupta">
              <organization/>
            </author>
            <date year="2017"/>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <seriesInfo name="DOI" value="10.17487/RFC8259"/>
            <seriesInfo name="RFC" value="8259"/>
            <seriesInfo name="STD" value="90"/>
            <author initials="T." surname="Bray" fullname="T. Bray" role="editor">
              <organization/>
            </author>
            <date year="2017" month="December"/>
            <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>
        </reference>
        <reference anchor="I-D.ietf-ace-actors" target="https://www.ietf.org/archive/id/draft-ietf-ace-actors-07.txt">
          <front>
            <title>An architecture for authorization in constrained environments</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-ace-actors-07"/>
            <author fullname="Stefanie Gerdes">
              <organization>Universitaet Bremen TZI</organization>
            </author>
            <author fullname="Ludwig Seitz">
              <organization>RISE SICS</organization>
            </author>
            <author fullname="Goeran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Carsten Bormann">
              <organization>Universitaet Bremen TZI</organization>
            </author>
            <date month="October" day="22" year="2018"/>
            <abstract>
              <t>   Constrained-node networks are networks where some nodes have severe
   constraints on code size, state memory, processing capabilities, user
   interface, power and communication bandwidth (RFC 7228).

   This document provides terminology, and identifies the elements that
   an architecture needs to address, providing a problem statement, for
   authentication and authorization in these networks.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-ace-dtls-authorize" target="https://www.ietf.org/archive/id/draft-ietf-ace-dtls-authorize-18.txt">
          <front>
            <title>Datagram Transport Layer Security (DTLS) Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-ace-dtls-authorize-18"/>
            <author fullname="Stefanie Gerdes">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Olaf Bergmann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <date month="June" day="4" year="2021"/>
            <abstract>
              <t>   This specification defines a profile of the ACE framework that allows
   constrained servers to delegate client authentication and
   authorization.  The protocol relies on DTLS version 1.2 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>
        </reference>
        <reference anchor="I-D.ietf-ace-oscore-profile" target="https://www.ietf.org/archive/id/draft-ietf-ace-oscore-profile-19.txt">
          <front>
            <title>OSCORE Profile of the Authentication and Authorization for Constrained Environments Framework</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oscore-profile-19"/>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Martin Gunnarsson">
              <organization>RISE</organization>
            </author>
            <date month="May" day="6" year="2021"/>
            <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>
        </reference>
        <reference anchor="I-D.ietf-ace-mqtt-tls-profile" target="https://www.ietf.org/archive/id/draft-ietf-ace-mqtt-tls-profile-13.txt">
          <front>
            <title>Message Queuing Telemetry Transport (MQTT)-TLS profile of Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-ace-mqtt-tls-profile-13"/>
            <author fullname="Cigdem Sengul">
              <organization>Brunel University</organization>
            </author>
            <author fullname="Anthony Kirby">
              <organization>Oxbotica</organization>
            </author>
            <date month="October" day="23" year="2021"/>
            <abstract>
              <t>   This document specifies a profile for the ACE (Authentication and
   Authorization for Constrained Environments) framework to enable
   authorization in a Message Queuing Telemetry Transport (MQTT)-based
   publish-subscribe messaging system.  Proof-of-possession keys, bound
   to OAuth2.0 access tokens, are used to authenticate and authorize
   MQTT Clients.  The protocol relies on TLS for confidentiality and
   MQTT server (broker) authentication.

              </t>
            </abstract>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="requirements-on-application-profiles" numbered="true" toc="default">
      <name>Requirements on Application Profiles</name>
      <t>This section lists the specifications on this profile based on the requirements defined in Appendix A of <xref target="I-D.ietf-ace-key-groupcomm" format="default"/></t>
      <ul spacing="normal">
        <li>REQ1: Specify the encoding and value of the identifier of group or topic of 'scope': see <xref target="retr-cosekey" format="default"/>).</li>
        <li>REQ2: Specify the encoding and value of roles of 'scope': see <xref target="retr-cosekey" format="default"/>).</li>
        <li>REQ3: Optionally, specify the acceptable values for 'sign_alg': TODO</li>
        <li>REQ4: Optionally, specify the acceptable values for 'sign_parameters': TODO</li>
        <li>REQ5: Optionally, specify the acceptable values for 'sign_key_parameters': TODO</li>
        <li>REQ6: Optionally, specify the acceptable values for 'pub_key_enc': TODO</li>
        <li>REQ7: Specify the exact format of the 'key' value: COSE_Key, see <xref target="retr-cosekey" format="default"/>.</li>
        <li>REQ8: Specify the acceptable values of 'kty' : "COSE_Key", see <xref target="retr-cosekey" format="default"/>.</li>
        <li>REQ9: Specify the format of the identifiers of group members: TODO</li>
        <li>REQ10: Optionally, specify the format and content of 'group_policies' entries: not defined</li>
        <li>REQ11: Specify the communication protocol the members of the group must use: CoAP pub/sub.</li>
        <li>REQ12: Specify the security protocol the group members must use to protect their communication. This must provide encryption, integrity and replay protection: Object Security of Content using COSE, see <xref target="oscon" format="default"/>.</li>
        <li>REQ13: Specify and register the application profile identifier : "coap_pubsub_app", see <xref target="iana-profile" format="default"/>.</li>
        <li>REQ14: Optionally, specify the encoding of public keys, of 'client_cred', and of 'pub_keys' if COSE_Keys are not used: NA.</li>
        <li>REQ15: Specify policies at the KDC to handle id that are not included in get_pub_keys: TODO</li>
        <li>REQ16: Specify the format and content of 'group_policies': TODO</li>
        <li>REQ17: Specify the format of newly-generated individual keying material for group members, or of the information to derive it, and corresponding CBOR label : not defined</li>
        <li>REQ18: Specify how the communication is secured between Client and KDC. Optionally, specify transport profile of ACE <xref target="I-D.ietf-ace-oauth-authz" format="default"/> to use between Client and KDC: pre-set, as KDC is AS.</li>
        <li>OPT1: Optionally, specify the encoding of public keys, of 'client_cred', and of 'pub_keys' if COSE_Keys are not used: NA</li>
        <li>OPT2: Optionally, specify the negotiation of parameter values for signature algorithm and signature keys, if 'sign_info' and 'pub_key_enc' are not used: NA</li>
        <li>OPT3: Optionally, specify the format and content of 'mgt_key_material': not defined</li>
        <li>OPT4: Optionally, specify policies that instruct clients to retain unsuccessfully decrypted messages and for how long, so that they can be decrypted after getting updated keying material: not defined</li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>The author wishes to thank Ari Keraenen, John Mattsson, Ludwig Seitz, Goeran Selander, Jim Schaad and Marco Tiloca for the useful discussion and reviews that helped shape this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
QPEFSJWs47U+y2I96P8B/eMtUNSQAAA=

-->

</rfc>
