<?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  (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-observe-multicast-notifications-07" category="std" consensus="true" submissionType="IETF" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <front>
    <title abbrev="Observe Multicast Notifications">Observe Notifications as CoAP Multicast Responses</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-07"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <street>Hollandstr. 12/4</street>
          <city>Vienna</city>
          <code>1020</code>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <author initials="F." surname="Palombini" fullname="Francesca Palombini">
      <organization>Ericsson AB</organization>
      <address>
        <postal>
          <street>Torshamnsgatan 23</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>francesca.palombini@ericsson.com</email>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <area>ART</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>The Constrained Application Protocol (CoAP) allows clients to "observe" resources at a server, and receive notifications as unicast responses upon changes of the resource state. In some use cases, such as based on publish-subscribe, it would be convenient for the server to send a single notification addressed to all the clients observing a same target resource. This document updates RFC7252 and RFC7641, and defines how a server sends observe notifications as response messages over multicast, synchronizing  all the observers of a same resource on a same shared Token value. Besides, this document defines how Group OSCORE can be used to protect multicast notifications end-to-end between the server and the observer clients.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  Constrained RESTful Environments Working Group mailing list (core@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/core-wg/observe-multicast-notifications"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> has been extended with a number of mechanisms, including resource Observation <xref target="RFC7641"/>. This enables CoAP clients to register at a CoAP server as "observers" of a resource, and hence being automatically notified with an unsolicited response upon changes of the resource state.</t>
      <t>CoAP supports group communication over IP multicast <xref target="I-D.ietf-core-groupcomm-bis"/>. This includes support for Observe registration requests over multicast, in order for clients to efficiently register as observers of a resource hosted at multiple servers.</t>
      <t>However, in a number of use cases, using multicast messages for responses would also be desirable. That is, it would be useful that a server sends observe notifications for a same target resource to multiple observers as responses over IP multicast.</t>
      <t>For instance, in CoAP publish-subscribe <xref target="I-D.ietf-core-coap-pubsub"/>, multiple clients can subscribe to a topic, by observing the related resource hosted at the responsible broker. When a new value is published on that topic, it would be convenient for the broker to send a single multicast notification at once, to all the subscriber clients observing that topic.</t>
      <t>A different use case concerns clients observing a same registration resource at the CoRE Resource Directory <xref target="RFC9176"/>. For example, multiple clients can benefit of observation for discovering (to-be-created) OSCORE groups <xref target="I-D.ietf-core-oscore-groupcomm"/>, by retrieving from the Resource Directory updated links and descriptions to join them through the respective Group Manager <xref target="I-D.tiloca-core-oscore-discovery"/>.</t>
      <t>More in general, multicast notifications would be beneficial whenever several CoAP clients observe a same target resource at a CoAP server, and can be all notified at once by means of a single response message. However, CoAP does not currently define response messages over IP multicast. This document fills this gap and provides the following twofold contribution.</t>
      <t>First, it updates <xref target="RFC7252"/> and <xref target="RFC7641"/>, by defining a method to deliver Observe notifications as CoAP responses addressed to multiple clients, e.g., over IP multicast. In the proposed method, the group of potential observers entrusts the server to manage the Token space for multicast notifications. By doing so, the server provides all the observers of a target resource with the same Token value to bind to their own observation. That Token value is then used in every multicast notification for the target resource. This is achieved by means of a unicast informative response sent by the server to each observer client.</t>
      <t>Second, this document defines how to use Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> to protect multicast notifications end-to-end between the server and the observer clients. This is also achieved by means of the unicast informative response mentioned above, which additionally includes parameter values used by the server to protect every multicast notification for the target resource by using Group OSCORE. This provides a secure binding between each of such notifications and the observation of each of the clients.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>Readers are expected to be familiar with terms and concepts described in CoAP <xref target="RFC7252"/>, group communication for CoAP <xref target="I-D.ietf-core-groupcomm-bis"/>, Observe <xref target="RFC7641"/>, CBOR <xref target="RFC8949"/>, OSCORE <xref target="RFC8613"/>, and Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
        <t>This document additionally defines the following terminology.</t>
        <ul spacing="normal">
          <li>Traditional observation. A resource observation associated with a single observer client, as defined in <xref target="RFC7641"/>.</li>
          <li>Group observation. A resource observation associated with a group of clients. The server sends notifications for the group-observed resource over IP multicast to all the observer clients.</li>
          <li>Phantom request. The CoAP request message that the server would have received to start a group observation on one of its resources. A phantom request is generated inside the server and does not hit the wire.</li>
          <li>Informative response. A CoAP response message that the server sends to a given client via unicast, providing the client with information on a group observation.</li>
        </ul>
      </section>
    </section>
    <section anchor="sec-prereq">
      <name>Prerequisites</name>
      <t>In order to use multicast notifications as defined in this document, the following prerequisites have to be fulfilled.</t>
      <ul spacing="normal">
        <li>The server and the clients need to be on a network on which multicast notifications can reach a sufficiently large portion of the clients. These may leverage intermediaries such as proxies, if not directly able to listen to multicast traffic.</li>
        <li>The server needs to be provisioned with multicast addresses whose token space is placed under its control. On general purpose networks, unmanaged multicast addresses such as "All CoAP Nodes" (see <xref section="12.8" sectionFormat="of" target="RFC7252"/>) are not suitable for this purpose.</li>
        <li>
          <t>The server and the clients need to agree out of band that multicast notifications may be used.  </t>
          <t>
This document does not describe a way for a client to influence the server's decision to start group observations and thus to use multicast notifications. This is done on purpose.  </t>
          <t>
That is, the mechanism specified in this document is expected to be used in situations where sending individual notifications is not feasible, or is not preferred beyond a certain number of clients observing a target resource.  </t>
          <t>
If applications arise where a negotiation between the clients and the server does make sense, those applications are welcome to specify additional means to opt in to multicast notifications.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-variants">
      <name>High-Level Overview of Available Variants</name>
      <t>The method defined in this document fundamentally enables a server to setup a group observation. This is associated with a phantom observation request generated by the server, and to which the multicast notifications of the group observation are bound.</t>
      <t>While the server can provide the phantom request in question to the interested clients as they reach out for registering to the group observation, the server may alternatively distribute the phantom request in advance by alternative means (e.g., see <xref target="appendix-different-sources"/>). Clients that have already retrieved the phantom request can immediately starts listening to multicast notifications if able to directly do so, or rather instruct an assisting intermediary such as a proxy to do that on their behalf.</t>
      <t>The following provides an overview of the available variants to enforce a group observation, depending on whether a proxy is deployed or not, and on whether exchanged messages are protected end-to-end between the observer clients and the server.</t>
      <ul spacing="normal">
        <li>
          <t>No proxy -  This is simplest network configuration, where the clients participating to the group observation are capable to listen to multicast traffic. In such a setup, the clients directly receive multicast notifications from the server.  </t>
          <ul spacing="normal">
            <li>Without end-to-end security - Messages pertaining to the group observation are not protected. This basic case is defined in <xref target="sec-server-side"/> and <xref target="sec-client-side"/> from the server and the client side, respectively. An example is provided in <xref target="sec-example-no-security"/>.</li>
            <li>
              <t>With end-to-end security - Messages pertaining to the group observation are protected end-to-end between the clients and the server, by using the Group OSCORE security protocol <xref target="I-D.ietf-core-oscore-groupcomm"/>. This case is defined in <xref target="sec-secured-notifications"/>. An example is provided in <xref target="sec-example-with-security"/>.      </t>
              <t>
If the participating endpoints using Group OSCORE also support the concept of Deterministic Client <xref target="I-D.amsuess-core-cachable-oscore"/>, then the possible early distribution of the phantom request can specifically make available its smaller, plain version. Then, all the clients are able to compute the same protected phantom request to use (see <xref target="deterministic-phantom-Request"/>).</t>
            </li>
          </ul>
        </li>
        <li>
          <t>With proxy - This network configuration is expected in case (some of) the clients participating to the group observation are not capable to listen to multicast traffic. In such a setup, the proxy directly receives multicast notifications from the server, and relays them back to the clients.  </t>
          <ul spacing="normal">
            <li>Without end-to-end security - Messages pertaining to the group observation are not protected end-to-end between the clients and the server. This basic case is defined in <xref target="intermediaries"/>. An example is provided in <xref target="intermediaries-example"/>.</li>
            <li>
              <t>With end-to-end security - Messages pertaining to the group observation are protected end-to-end between the clients and the server, by using the Group OSCORE security protocol <xref target="I-D.ietf-core-oscore-groupcomm"/>. In particular, the clients are required to separately provide the proxy with the obtained phantom request, thus enabling the proxy to receive the multicast notifications from the server. This case is defined in <xref target="intermediaries-e2e-security"/>. An example is provided in <xref target="intermediaries-example-e2e-security"/>.      </t>
              <t>
If the participating endpoints using Group OSCORE also support the concept of Deterministic Client <xref target="I-D.amsuess-core-cachable-oscore"/>, the same advantages mentioned above for the case without a proxy applies (see <xref target="deterministic-phantom-Request"/>). In addition, this allows for a more efficient setup and enforcement of the group observation, by reducing the amount of message exchanges and allowing the proxy to effectively serve protected multicast notifications from its cache. An example is provided in <xref target="intermediaries-example-e2e-security-det-exchange"/>.</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="sec-server-side">
      <name>Server-Side</name>
      <t>The server can, at any time, start a group observation on one of its resources. Practically, the server may want to do that under the following circumstances.</t>
      <ul spacing="normal">
        <li>In the absence of observations for the target resource, the server receives a registration request from a first client wishing to start a traditional observation on that resource.</li>
        <li>When a certain amount of traditional observations has been established on the target resource, the server decides to make those clients part of a group observation on that resource.</li>
      </ul>
      <t>The server maintains an observer counter for each group observation to a target resource, as a rough estimation of the observers actively taking part in the group observation.</t>
      <t>The server initializes the counter to 0 when starting the group observation, and increments it after a new client starts taking part in that group observation. Also, the server should keep the counter up-to-date over time, for instance by using the method described in <xref target="sec-rough-counting"/>. This allows the server to possibly terminate a group observation in case, at some point in time, not enough clients are estimated to be still active and interested.</t>
      <section anchor="ssec-server-side-request">
        <name>Request</name>
        <t>Assuming it is reachable at the address SRV_ADDR and port number SRV_PORT, the server starts a group observation on one of its resources as defined below. The server intends to send multicast notifications for the target resource to the multicast IP address GRP_ADDR and port number GRP_PORT.</t>
        <ol spacing="normal" type="1"><li>The server builds a phantom observation request, i.e., a GET request with an Observe Option set to 0 (register).</li>
          <li>
            <t>The server selects an available value T, from the Token space of a CoAP endpoint used for messages having:  </t>
            <ul spacing="normal">
              <li>As source address and port number, the IP multicast address GRP_ADDR and port number GRP_PORT.</li>
              <li>As destination address and port number, the server address SRV_ADDR and port number SRV_PORT, intended for accessing the target resource.</li>
            </ul>
            <t>
This Token space is under exclusive control of the server.</t>
          </li>
          <li>The server processes the phantom observation request above, without transmitting it on the wire. The request is addressed to the resource for which the server wants to start the group observation, as if sent by the group of observers, i.e., with GRP_ADDR as source address and GRP_PORT as source port.</li>
          <li>Upon processing the self-generated phantom registration request, the server interprets it as an observe registration received from the group of potential observer clients. In particular, from then on, the server MUST use T as its own local Token value associated with that observation, with respect to the (previous hop towards the) clients.</li>
          <li>The server does not immediately respond to the phantom observation request with a multicast notification sent on the wire. The server stores the phantom observation request as is, throughout the lifetime of the group observation.</li>
          <li>The server builds a CoAP response message INIT_NOTIF as initial multicast notification for the target resource, in response to the phantom observation request. This message is formatted as other multicast notifications (see <xref target="ssec-server-side-notifications"/>) and MUST include the current representation of the target resource as payload. The server stores the message INIT_NOTIF and does not transmit it. The server considers this message as the latest multicast notification for the target resource, until it transmits a new multicast notification for that resource as a CoAP message on the wire. After that, the server deletes the message INIT_NOTIF.</li>
        </ol>
      </section>
      <section anchor="ssec-server-side-informative">
        <name>Informative Response</name>
        <t>After having started a group observation on a target resource, the server proceeds as follows.</t>
        <t>For each traditional observation ongoing on the target resource, the server MAY cancel that observation. Then, the server considers the corresponding clients as now taking part in the group observation, for which it increases the corresponding observer counter accordingly.</t>
        <t>The server sends to each of such clients an informative response message, encoded as a unicast response with response code 5.03 (Service Unavailable). As per <xref target="RFC7641"/>, such a response does not include an Observe Option. The response MUST be Confirmable and MUST NOT encode link-local addresses.</t>
        <t>The Content-Format of the informative response is set to application/informative-response+cbor, defined in <xref target="content-format"/>. The payload of the informative response is a CBOR map including the following parameters, whose CBOR labels are defined in <xref target="informative-response-params"/>.</t>
        <ul spacing="normal">
          <li>'tp_info', with value a CBOR array. This includes the transport-specific information required to correctly receive multicast notifications bound to the phantom observation request. Typically, this comprises the Token value associated with the group observation, as well as the source and destination addressing information of the related multicast notifications. The CBOR array is formatted as defined in <xref target="sssec-transport-specific-encoding"/>. This parameter MUST be included.</li>
          <li>
            <t>'ph_req', with value the byte serialization of the transport-independent information of the phantom observation request (see <xref target="ssec-server-side-request"/>), encoded as a CBOR byte string. The value of the CBOR byte string is formatted as defined in <xref target="sssec-transport-independent-encoding"/>.  </t>
            <t>
This parameter MAY be omitted, in case the phantom request is, in terms of transport-independent information, identical to the registration request from the client. Otherwise, this parameter MUST be included.  </t>
            <t>
Note that the registration request from the client may indeed differ from the phantom observation request in terms of transport-independent information, but still be acceptable for the server to register the client as taking part in the group observation.</t>
          </li>
          <li>'last_notif', with value the byte serialization of the transport-independent information of the latest multicast notification for the target resource, encoded as a CBOR byte string. The value of the CBOR byte string is formatted as defined in <xref target="sssec-transport-independent-encoding"/>. This parameter MAY be included.</li>
          <li>
            <t>'next_not_before', with value the amount of seconds that will minimally elapse before the server sends the next multicast notification for the group observation of the target resource, encoded as a CBOR unsigned integer. This parameter MAY be included.  </t>
            <t>
This information can help a new client to align itself with the server's timeline, especially in scenarios where multicast notifications are regularly sent. Also, it can help synchronizing different clients when orchestrating a content distribution through multicast notifications.</t>
          </li>
        </ul>
        <t>The CDDL notation <xref target="RFC8610"/> provided below describes the payload of the informative response.</t>
        <figure anchor="informative-response-payload">
          <name>Format of the informative response payload</name>
          <artwork><![CDATA[
informative_response_payload = {
   0 => array, ; 'tp_info', i.e., transport-specific information
 ? 1 => bstr,  ; 'ph_req' (transport-independent information)
 ? 2 => bstr   ; 'last_notif' (transport-independent information)
 ? 3 => uint   ; 'next_not_before'
}
]]></artwork>
        </figure>
        <t>Upon receiving a registration request to observe the target resource, the server does not create a corresponding individual observation for the requesting client. Instead, the server considers that client as now taking part in the group observation of the target resource, of which it increments the observer counter by 1. Then, the server replies to the client with the same informative response message defined above, which MUST be Confirmable.</t>
        <t>Note that this also applies when, with no ongoing traditional observations on the target resource, the server receives a registration request from a first client and decides to start a group observation on the target resource.</t>
        <section anchor="sssec-transport-specific-encoding">
          <name>Transport-Specific Message Information</name>
          <t>[ This encoding might be replaced by CRIs <xref target="I-D.ietf-core-href"/> in a later version of this document. ]</t>
          <t>The CBOR array specified in the 'tp_info' parameter is formatted according to the following CDDL notation.</t>
          <figure anchor="tp-info-general">
            <name>General format of 'tp_info'</name>
            <artwork><![CDATA[
tp_info = [
    srv_addr  ; Addressing information of the server
  ? req_info  ; Request data extension
]

srv_addr = (
    tp_id : int,  ; Identifier of the used transport protocol
  + elements      ; Number, format, and encoding
                  ; based on the value of 'tp_id'
)

req_info = (
  + elements  ; Number, format, and encoding based on
              ; the value of 'tp_id' in 'srv_addr'
)
]]></artwork>
          </figure>
          <t>The 'srv_addr' element of 'tp_info' specifies the addressing information of the server, and includes at least one element 'tp_id' which is formatted as follows.</t>
          <ul spacing="normal">
            <li>
              <t>'tp_id' : this element is a CBOR integer, which specifies the transport protocol used to transport the CoAP response from the server, i.e., a multicast notification in this document.  </t>
              <t>
This element takes value from the "Value" column of the "CoAP Transport Information" registry defined in <xref target="iana-transport-protocol-identifiers"/> of this document. This element MUST be present. The value of this element determines:  </t>
              <ul spacing="normal">
                <li>How many elements are required to follow in 'srv_addr', as well as what information they convey, their encoding, and their semantics.</li>
                <li>How many elements are required in the 'req_info' element of the 'tp_info' array, as well as what information they convey, their encoding, and their semantics.</li>
              </ul>
              <t>
This document registers the integer value 1 ("UDP") to be used as value for the 'tp_id' element, when CoAP responses are transported over UDP. In such a case, the full encoding of the 'tp_info' CBOR array is as defined in <xref target="ssssec-udp-transport-specific"/>.  </t>
              <t>
Future specifications that consider CoAP multicast notifications transported over different transport protocols MUST:  </t>
              <ul spacing="normal">
                <li>Register an entry with an integer value to be used for 'tp_id', in the "CoAP Transport Information" registry defined in <xref target="iana-transport-protocol-identifiers"/> of this document.</li>
                <li>Accordingly, define the elements of the 'tp_info' CBOR array, i.e., the elements following 'tp_id' in 'srv_addr' as well as the elements in 'req_info', as to what information they convey, their encoding, and their semantics.</li>
              </ul>
            </li>
          </ul>
          <t>The 'req_info' element of 'tp_info' specifies transport-specific information related to a pertinent request message, i.e., the phantom observation request in this document. The exact format of 'req_info' depends on the value of 'tp_id'.</t>
          <t>Given a specific value of 'tp_id', the complete set of elements composing 'srv_addr' and 'req_info' in the 'tp_info' CBOR array is indicated by the two columns "Srv Addr" and "Req Info" of the "CoAP Transport Information" registry defined in <xref target="iana-transport-protocol-identifiers"/>, respectively.</t>
          <section anchor="ssssec-udp-transport-specific">
            <name>UDP Transport-Specific Information</name>
            <t>When CoAP multicast notifications are transported over UDP as per <xref target="RFC7252"/> and <xref target="I-D.ietf-core-groupcomm-bis"/>, the server specifies the integer value 1 ("UDP") as value of 'tp_id' in the 'srv_addr' element of the 'tp_info' CBOR array in the informative response. Then, the rest of the 'tp_info' CBOR array is defined as follows.</t>
            <ul spacing="normal">
              <li>
                <t>'srv_addr' includes two more elements following 'tp_id':  </t>
                <ul spacing="normal">
                  <li>'srv_host': this element is a CBOR byte string, with value the destination IP address of the phantom observation request. This parameter is tagged and identified by the CBOR tag 260 "Network Address (IPv4 or IPv6 or MAC Address)".  That is, the value of the CBOR byte string is the IP address SRV_ADDR of the server hosting the target resource, from where the server will send multicast notifications for the target resource. This element MUST be present.</li>
                  <li>'srv_port': this element is a CBOR unsigned integer, with value the destination port number of the phantom observation request. That is, the specified value is the port number SRV_PORT, from where the server will send multicast notifications for the target resource. This element MUST be present.</li>
                </ul>
              </li>
              <li>
                <t>'req_info' includes the following elements:  </t>
                <ul spacing="normal">
                  <li>'token': this element is a CBOR byte string, with value the Token value of the phantom observation request generated by the server (see <xref target="ssec-server-side-request"/>). Note that the same Token value is used for the multicast notifications bound to that phantom observation request (see <xref target="ssec-server-side-notifications"/>). This element MUST be present.</li>
                  <li>'cli_host': this element is a CBOR byte string, with value the source IP address of the phantom observation request. This parameter is tagged and identified by the CBOR tag 260 "Network Address (IPv4 or IPv6 or MAC Address)". That is, the value of the CBOR byte string is the IP multicast address GRP_ADDR, where the server will send multicast notifications for the target resource. This element MUST be present.</li>
                  <li>'cli_port': this element is a CBOR unsigned integer, with value the source port number of the phantom observation request. That is, the specified value is the port number GRP_PORT, where the server will send multicast notifications for the target resource. This element is OPTIONAL. If not included, the default port number 5683 is assumed.</li>
                </ul>
              </li>
            </ul>
            <t>The CDDL notation provided below describes the full 'tp_info' CBOR array using the format above.</t>
            <figure anchor="tp-info-udp">
              <name>Format of 'tp_info' with UDP as transport protocol</name>
              <artwork><![CDATA[
tp_info = [
    tp_id    : 1,             ; UDP as transport protocol
    srv_host : #6.260(bstr),  ; Src. address of multicast notifications
    srv_port : uint,          ; Src. port of multicast notifications
    token    : bstr,          ; Token of the phantom request and
                              ; associated multicast notifications
    cli_host : #6.260(bstr),  ; Dst. address of multicast notifications
  ? cli_port : uint           ; Dst. port of multicast notifications
]
]]></artwork>
            </figure>
          </section>
        </section>
        <section anchor="sssec-transport-independent-encoding">
          <name>Transport-Independent Message Information</name>
          <t>For both the parameters 'ph_req' and 'last_notif' in the informative response, the value of the byte string is the concatenation of the following components, in the order specified below.</t>
          <t>When defining the value of each component, "CoAP message" refers to the phantom observation request for the 'ph_req' parameter, and to the corresponding latest multicast notification for the 'last_notif' parameter.</t>
          <ul spacing="normal">
            <li>A single byte, with value the content of the Code field in the CoAP message.</li>
            <li>The byte serialization of the complete sequence of CoAP options in the CoAP message.</li>
            <li>If the CoAP message includes a non-zero length payload, the one-byte Payload Marker (0xff) followed by the payload.</li>
          </ul>
        </section>
      </section>
      <section anchor="ssec-server-side-notifications">
        <name>Notifications</name>
        <t>Upon a change in the status of the target resource under group observation, the server sends a multicast notification, intended to all the clients taking part in the group observation of that resource. In particular, each of such multicast notifications is formatted as follows.</t>
        <ul spacing="normal">
          <li>It MUST be Non-confirmable.</li>
          <li>It MUST include an Observe Option, as per <xref target="RFC7641"/>.</li>
          <li>
            <t>It MUST have the same Token value T of the phantom registration request that started the group observation. This Token value is specified in the 'token' element of 'req_info' under the 'tp_info' parameter, in the informative response sent to all the observer clients.  </t>
            <t>
That is, every multicast notification for a target resource is not bound to the observation requests from the different clients, but rather to the phantom registration request associated with the whole set of clients taking part in the group observation of that resource.</t>
          </li>
          <li>It MUST be sent from the same IP address SRV_ADDR and port number SRV_PORT where: i) the original Observe registration requests are sent to by the clients; and ii) the corresponding informative responses are sent from by the server (see <xref target="ssec-server-side-informative"/>). These are indicated to the observer clients as value of the 'srv_host' and 'srv_port' elements of 'srv_addr' under the 'tp_info' parameter, in the informative response (see <xref target="ssssec-udp-transport-specific"/>). That is, redirection MUST NOT be used.</li>
          <li>It MUST be sent to the IP multicast address GRP_ADDR and port number GRP_PORT. These are indicated to the observer clients as value of the 'cli_host' and 'cli_port' elements of 'req_info' under the 'tp_info' parameter, in the informative response (see <xref target="ssssec-udp-transport-specific"/>).</li>
        </ul>
        <t>For each target resource with an active group observation, the server MUST store the latest multicast notification.</t>
      </section>
      <section anchor="ssec-server-side-congestion">
        <name>Congestion Control</name>
        <t>In order to not cause congestion, the server should conservatively control the sending of multicast notifications. In particular:</t>
        <ul spacing="normal">
          <li>The multicast notifications MUST be Non-confirmable.</li>
          <li>In constrained environments such as low-power, lossy networks (LLNs), the server should only support multicast notifications for resources that are small. Following related guidelines from <xref section="3.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/>, this can consist, for example, in having the payload of multicast notifications as limited to approximately 5% of the IP Maximum Transmit Unit (MTU) size, so that it fits into a single link-layer frame in case IPv6 over Low-Power Wireless Personal Area Networks (6LoWPAN) (see <xref section="4" sectionFormat="of" target="RFC4944"/>) is used.</li>
          <li>The server SHOULD provide multicast notifications with the smallest possible IP multicast scope that fulfills the application needs. For example, following related guidelines from <xref section="3.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/>, site-local scope is always preferred over global scope IP multicast, if this fulfills the application needs. Similarly, realm-local scope is always preferred over site-local scope, if this fulfills the application needs. Ultimately, it is up to the server administrator to explicitly configure the most appropriate IP multicast scope.</li>
          <li>Following related guidelines from <xref section="4.5.1" sectionFormat="of" target="RFC7641"/>, the server SHOULD NOT send more than one multicast notification every 3 seconds, and SHOULD use an even less aggressive rate when possible (see also <xref section="3.1.2" sectionFormat="of" target="RFC8085"/>). The transmission rate of multicast notifications should also take into account the avoidance of a possible "broadcast storm" problem <xref target="MOBICOM99"/>. This prevents a following, considerable increase of the channel load, whose origin would be likely attributed to a router rather than the server.</li>
        </ul>
      </section>
      <section anchor="ssec-server-side-cancellation">
        <name>Cancellation</name>
        <t>At any point in time, the server may want to cancel a group observation of a target resource. For instance, the server may realize that no clients or not enough clients are interested in taking part in the group observation anymore. A possible approach that the server can use to assess this is defined in <xref target="sec-rough-counting"/>.</t>
        <t>In order to cancel the group observation, the server sends a multicast response with response code 5.03 (Service Unavailable), signaling that the group observation has been terminated. The response has the same Token value T of the phantom registration request, it has no payload, and it does not include an Observe Option.</t>
        <t>The server sends the response to the same multicast IP address GRP_ADDR and port number GRP_PORT used to send the multicast notifications related to the target resource. Finally, the server releases the resources allocated for the group observation, and especially frees up the Token value T used at its CoAP endpoint.</t>
      </section>
    </section>
    <section anchor="sec-client-side">
      <name>Client-Side</name>
      <section anchor="ssec-client-side-request">
        <name>Request</name>
        <t>A client sends an observation request to the server as described in <xref target="RFC7641"/>, i.e., a GET request with an Observe Option set to 0 (register). The request MUST NOT encode link-local addresses. If the server is not configured to accept registrations on that target resource specifically for a group observation, this would still result in a positive notification response to the client as described in <xref target="RFC7641"/>, in case the server is able and willing to add the client to the list of observers.</t>
        <t>In a particular setup, the information typically specified in the 'tp_info' parameter of the informative response (see <xref target="ssec-server-side-informative"/>) can be pre-configured on the server and the clients. For example, the destination multicast address and port number where to send multicast notifications for a group observation, as well as the associated Token value to use, can be set aside for particular tasks (e.g., enforcing observations of a specific resource). Alternative mechanisms can rely on using some bytes from the hash of the observation request as the last bytes of the multicast address or as part of the Token value.</t>
        <t>In such a particular setup, the client may also have an early knowledge of the phantom request, i.e., it will be possible for the server to safely omit the parameter 'ph_req' from the informative response to the observation request (see <xref target="ssec-server-side-informative"/>). In this case, the client can include a No-Response Option <xref target="RFC7967"/> with value 16 in its Observe registration request, which results in the server suppressing the informative response. As a consequence, the observation request only informs the server that there is one additional client interested to take part in the group observation.</t>
        <t>While the considered client is able to simply set up its multicast address and start receiving multicast notifications for the group observation, sending an observation request as above allows the server to increment the observer counter. This helps the server to assess the current number of clients interested in the group observation over time (e.g., by using the method in <xref target="sec-rough-counting"/>), which in turn can play a role in deciding to cancel the group observation.</t>
      </section>
      <section anchor="ssec-client-side-informative">
        <name>Informative Response</name>
        <t>Upon receiving the informative response defined in <xref target="ssec-server-side-informative"/>, the client proceeds as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>The client configures an observation of the target resource. To this end, it relies on a CoAP endpoint used for messages having:  </t>
            <ul spacing="normal">
              <li>As source address and port number, the server address SRV_ADDR and port number SRV_PORT intended for accessing the target resource. These are specified as value of the 'srv_host' and 'srv_port' elements of 'srv_addr' under the 'tp_info' parameter, in the informative response (see <xref target="ssssec-udp-transport-specific"/>).</li>
              <li>As destination address and port number, the IP multicast address GRP_ADDR and port number GRP_PORT. These are specified as value of the 'cli_host' and 'cli_port' elements of 'req_info' under the 'tp_info' parameter, in the informative response (see <xref target="ssssec-udp-transport-specific"/>). If the 'cli_port' element is omitted in 'req_info', the client MUST assume the default port number 5683 as GRP_PORT.</li>
            </ul>
          </li>
          <li>
            <t>The client rebuilds the phantom registration request as follows.  </t>
            <ul spacing="normal">
              <li>The client uses the Token value T, specified in the 'token' element of 'req_info' under the 'tp_info' parameter of the informative response.</li>
              <li>If the 'ph_req' parameter is not present in the informative response, the client uses the transport-independent information from its original Observe registration request.</li>
              <li>If the 'ph_req' parameter is present in the informative response, the client uses the transport-independent information specified in the parameter.</li>
            </ul>
          </li>
          <li>If the informative response includes the parameter 'ph_req', and the transport-independent information specified therein differs from the one in the original Observe registration request, then the client checks whether a response to the rebuilt phantom request can, if available in a cache entry, be used to satisfy the original observation request. If this is not the case, the client SHOULD explicitly withdraw from the group observation.</li>
          <li>The client stores the phantom registration request, as associated with the observation of the target resource. In particular, the client MUST use the Token value T of this phantom registration request as its own local Token value associated with that group observation, with respect to the server. The particular way to achieve this is implementation specific.</li>
          <li>
            <t>If the informative response includes the parameter 'last_notif', the client rebuilds the latest multicast notification, by using:  </t>
            <ul spacing="normal">
              <li>The transport-independent information, specified in the 'last_notif' parameter of the informative response.</li>
              <li>The Token value T, specified in the 'token' element of 'req_info' under the 'tp_info' parameter of the informative response.</li>
            </ul>
          </li>
          <li>If the informative response includes the parameter 'last_notif', the client processes the multicast notification rebuilt at step 5 as defined in <xref section="3.2" sectionFormat="of" target="RFC7641"/>. In particular, the value of the Observe Option is used as initial baseline for notification reordering in this group observation.</li>
          <li>If a traditional observation to the target resource is ongoing, the client MAY silently cancel it without notifying the server.</li>
        </ol>
        <t>If any of the expected fields in the informative response are not present or malformed, the client MAY try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). Otherwise, the client SHOULD explicitly withdraw from the group observation.</t>
        <t><xref target="appendix-different-sources"/> describes possible alternative ways for clients to retrieve the phantom registration request and other information related to a group observation.</t>
      </section>
      <section anchor="ssec-client-side-notifications">
        <name>Notifications</name>
        <t>After having successfully processed the informative response as defined in <xref target="ssec-client-side-informative"/>, the client will receive, accept, and process multicast notifications about the state of the target resource from the server, as responses to the phantom registration request and with Token value T.</t>
        <t>The client relies on the value of the Observe Option for notification reordering, as defined in <xref section="3.4" sectionFormat="of" target="RFC7641"/>.</t>
      </section>
      <section anchor="ssec-client-side-cancellation">
        <name>Cancellation</name>
        <t>At a certain point in time, a client may become not interested in receiving further multicast notifications about a target resource. When this happens, the client can simply "forget" about being part of the group observation for that target resource, as per <xref section="3.6" sectionFormat="of" target="RFC7641"/>.</t>
        <t>When, later on, the server sends the next multicast notification, the client will not recognize the Token value T in the message. Since the multicast notification is Non-confirmable, it is OPTIONAL for the client to reject the multicast notification with a Reset message, as defined in <xref section="3.5" sectionFormat="of" target="RFC7641"/>.</t>
        <t>In case the server has canceled a group observation as defined in <xref target="ssec-server-side-cancellation"/>, the client simply forgets about the group observation and frees up the used Token value T for that endpoint, upon receiving the multicast error response defined in <xref target="ssec-server-side-cancellation"/>.</t>
      </section>
    </section>
    <section anchor="sec-web-linking">
      <name>Web Linking</name>
      <t>The possible use of multicast notifications in a group observation may be indicated by a target attribute "gp-obs" in a web link <xref target="RFC8288"/> to a resource, e.g., using a link-format document <xref target="RFC6690"/>.</t>
      <t>The "gp-obs" attribute is a hint, indicating that the server might send multicast notifications for observations of the resource targeted by the link. Note that this is simply a hint, i.e., it does not include any information required to participate in a group observation, and to receive and process multicast notifications.</t>
      <t>A value MUST NOT be given for the "gp-obs" attribute and any present value MUST be ignored by the recipient.  The "gp-obs" attribute MUST NOT appear more than once in a given link-value; occurrences after the first MUST be ignored by the recipient.</t>
      <t>The example in <xref target="example-web-link"/> shows a use of the "gp-obs" attribute: the client does resource discovery on a server and gets back a list of resources, one of which includes the "gp-obs" attribute indicating that the server might send multicast notifications for observations of that resource. The link-format notation (see <xref section="5" sectionFormat="of" target="RFC6690"/>) is used.</t>
      <figure anchor="example-web-link">
        <name>The Web Link</name>
        <artwork><![CDATA[
REQ: GET /.well-known/core

RES: 2.05 Content
    </sensors/temp>;gp-obs,
    </sensors/light>;if="sensor"
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-example-no-security">
      <name>Example</name>
      <t>The following example refers to two clients C_1 and C_2 that register to observe a resource /r at a Server S, which has address SRV_ADDR and listens to the port number SRV_PORT. Before the following exchanges occur, no clients are observing the resource /r , which has value "1234".</t>
      <t>The server S sends multicast notifications to the IP multicast address GRP_ADDR and port number GRP_PORT, and starts the group observation upon receiving a registration request from a first client that wishes to start a traditional observation on the resource /r.</t>
      <t>The following notation is used for the payload of the informative responses:</t>
      <ul spacing="normal">
        <li>'bstr(X)' denotes a CBOR byte string with value the byte serialization of X, with '|' denoting byte concatenation.</li>
        <li>'OPT' denotes a sequence of CoAP options. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</li>
        <li>'PAYLOAD' denotes a CoAP payload. This refers to the latest multicast notification encoded by the 'last_notif' parameter.</li>
      </ul>
      <figure anchor="example-no-oscore">
        <name>Example of group observation</name>
        <artwork><![CDATA[
C_1     ----------------- [ Unicast ] ------------------------> S  /r
 |  GET                                                         |
 |  Token: 0x4a                                                 |
 |  Observe: 0 (register)                                       |
 |  <Other options>                                             |
 |                                                              |
 |               (S allocates the available Token value 0x7b .) |
 |                                                              |
 |      (S sends to itself a phantom observation request PH_REQ |
 |       as coming from the IP multicast address GRP_ADDR .)    |
 |         ------------------------------------------------     |
 |       /                                                      |
 |       \----------------------------------------------------> |  /r
 |                                       GET                    |
 |                                       Token: 0x7b            |
 |                                       Observe: 0 (register)  |
 |                                       <Other options>        |
 |                                                              |
 |                      (S creates a group observation of /r .) |
 |                                                              |
 |                          (S increments the observer counter  |
 |                           for the group observation of /r .) |
 |                                                              |
C_1 <-------------------- [ Unicast ] ---------------------     S
 |  5.03                                                        |
 |  Token: 0x4a                                                 |
 |  Content-Format: application/informative-response+cbor       |
 |  Max-Age: 0                                                  |
 |  <Other options>                                             |
 |  Payload: {                                                  |
 |    tp_info    : [1, bstr(SRV_ADDR), SRV_PORT,                |
 |                  0x7b, bstr(GRP_ADDR), GRP_PORT],            |
 |    last_notif : bstr(0x45 | OPT | 0xff | PAYLOAD)            |
 |  }                                                           |
 |                                                              |
C_2     ----------------- [ Unicast ] ------------------------> S  /r
 |  GET                                                         |
 |  Token: 0x01                                                 |
 |  Observe: 0 (register)                                       |
 |  <Other options>                                             |
 |                                                              |
 |                          (S increments the observer counter  |
 |                           for the group observation of /r .) |
 |                                                              |
C_2 <-------------------- [ Unicast ] ---------------------     S
 |  5.03                                                        |
 |  Token: 0x01                                                 |
 |  Content-Format: application/informative-response+cbor       |
 |  Max-Age: 0                                                  |
 |  <Other options>                                             |
 |  Payload: {                                                  |
 |    tp_info    : [1, bstr(SRV_ADDR), SRV_PORT,                |
 |                  0x7b, bstr(GRP_ADDR), GRP_PORT],            |
 |    last_notif : bstr(0x45 | OPT | 0xff | PAYLOAD)            |
 |  }                                                           |
 |                                                              |
 |          (The value of the resource /r changes to "5678".)   |
 |                                                              |
C_1                                                             |
 +  <------------------- [ Multicast ] --------------------     S
C_2        (Destination address/port: GRP_ADDR/GRP_PORT)        |
 |  2.05                                                        |
 |  Token: 0x7b                                                 |
 |  Observe: 11                                                 |
 |  Content-Format: application/cbor                            |
 |  <Other options>                                             |
 |  Payload: : "5678"                                           |
 |                                                              |
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-rough-counting">
      <name>Rough Counting of Clients in the Group Observation</name>
      <t>This section specifies a method that the server can use to keep an estimate of still active and interested clients, without creating undue traffic on the network.</t>
      <section anchor="multicast-response-feedback-divider-option">
        <name>Multicast-Response-Feedback-Divider Option</name>
        <t>In order to enable the rough counting of still active and interested clients, a new CoAP option is introduced, which SHOULD be supported by clients that listen to multicast responses.</t>
        <t>The option is called Multicast-Response-Feedback-Divider. As summarized in <xref target="mrfd-table"/>, the option is not Critical, not Safe-to-Forward, and integer valued. Since the option is not Safe-to-Forward, the column "N" indicates a dash for "not applicable".</t>
        <figure anchor="mrfd-table">
          <name>Multicast-Response-Feedback-Divider</name>
          <artwork align="center"><![CDATA[
+-----+---+---+---+---+---------------------+--------+------+---------+
| No. | C | U | N | R | Name                | Format | Len. | Default |
+-----+---+---+---+---+---------------------+--------+------+---------+
| TBD |   | x | - |   | Multicast-Response- | uint   | 0-1  | (none)  |
|     |   |   |   |   | Feedback-Divider    |        |      |         |
+-----+---+---+---+---+---------------------+--------+------+---------+

      C = Critical, U = Unsafe, N = NoCacheKey, R = Repeatable
]]></artwork>
        </figure>
        <t>The Multicast-Response-Feedback-Divider Option is of class E for OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      </section>
      <section anchor="processing-on-the-client-side">
        <name>Processing on the Client Side</name>
        <t>Upon receiving a response with a Multicast-Response-Feedback-Divider Option, a client SHOULD acknowledge its interest in continuing receiving multicast notifications for the target resource, as described below.</t>
        <t>The client picks an integer random number I, from 0 inclusive to the number Z = (2^Q) exclusive, where Q is the value specified in the option and "^" is the exponentiation operator. If I is different than 0, the client takes no further action. Otherwise, the client should wait a random fraction of the Leisure time (see <xref section="8.2" sectionFormat="of" target="RFC7252"/>), and then registers a regular unicast observation on the same target resource.</t>
        <t>To this end, the client essentially follows the steps that got it originally subscribed to group notifications for the target resource. In particular, the client sends an observation request to the server, i.e., a GET request with an Observe Option set to 0 (register). The request MUST be addressed to the same target resource, and MUST have the same destination IP address and port number used for the original registration request, regardless the source IP address and port number of the received multicast notification.</t>
        <t>Since the Observe registration is only done for its side effect of showing as an attempted observation at the server, the client MUST send the unicast request in a non confirmable way, and with the maximum No-Response setting <xref target="RFC7967"/>. In the request, the client MUST include a Multicast-Response-Feedback-Divider Option, whose value MUST be empty (Option Length = 0). The client does not need to wait for responses, and can keep processing further notifications on the same Token.</t>
        <t>The client MUST ignore the Multicast-Response-Feedback-Divider Option, if the multicast notification is retrieved from the 'last_notif' parameter of an informative response (see <xref target="ssec-server-side-informative"/>). A client includes the Multicast-Response-Feedback-Divider Option only in a re-registration request triggered by the server as described above, and MUST NOT include it in any other request.</t>
        <t><xref target="appendix-pseudo-code-counting-client"/> and <xref target="appendix-pseudo-code-counting-client-constrained"/> provide a description in pseudo-code of the operations above performed by the client.</t>
        <t><xref target="intermediaries"/> specifies how the approach presented in <xref target="sec-server-side"/> and <xref target="sec-client-side"/> works when a proxy is used between the origin clients and the origin server. That is, the clients register as observers at the proxy, which in turn registers as participant to the group observation at the server, receives the multicast notifications from the server, and forwards those to the clients. In such a case, the following applies.</t>
        <ul spacing="normal">
          <li>
            <t>Since the Multicast-Response-Feedback-Divider Option is unsafe to forward, the proxy needs to recognize and understand the option in order to participate to the rough counting process.  </t>
            <t>
If the proxy receives a request that includes the Multicast-Response-Feedback-Divider Option but the proxy does not recognize and understand the option, then the proxy has to stop processing the request and send a 4.02 (Bad Option) response to the observer client (see <xref section="5.7.1" sectionFormat="of" target="RFC7252"/>). This results in the client terminating its observation at the proxy, after which the client stops receiving notifications for the group observation.  </t>
            <t>
If the proxy receives a multicast notification that includes the Multicast-Response-Feedback-Divider Option but the proxy does not recognize and understand the option, then the proxy has to stop processing the received multicast notification and send a 5.02 (Bad Gateway) response to each of the observer clients (see <xref section="5.7.1" sectionFormat="of" target="RFC7252"/>). This results in all the observer clients terminating their observation at the proxy, after which they stop receiving notifications for the group observation. Consequently, the proxy may decide to forget about its participation to the group observation at the server.  </t>
            <t>
This is not an issue if communications between the origin endpoints are protected end-to-end, i.e., both for the requests from the origin clients by using OSCORE or Group OSCORE, as well as for the multicast notifications from the origin server by using Group OSCORE (see <xref target="sec-secured-notifications"/> and <xref target="intermediaries-e2e-security"/>). In fact, in such a case, the Multicast-Response-Feedback-Divider Option is protected end-to-end as well, and is thus hidden from the proxy.  </t>
            <t>
Therefore, if the server uses the rough counting process defined in this section but communications are not protected end-to-end between the origin enpoints, then it is practically required that the proxy recognizes and understands the Multicast-Response-Feedback-Divider Option. If that is not the case, then every execution of the rough counting process will effectively prevent the clients from receiving further notifications for the group observation, until they register again as observers at the proxy.</t>
          </li>
          <li>
            <t>The following applies when the proxy receives a multicast notification including the Multicast-Response-Feedback-Divider Option.  </t>
            <ul spacing="normal">
              <li>
                <t>If the multicast notification is not protected end-to-end by using Group OSCORE (see <xref target="intermediaries"/>), the Multicast-Response-Feedback-Divider Option is visible to the proxy. Then, the proxy proceeds like defined above for an origin client, i.e., by answering to the server on its own in case it picks a random number I equal to 0. When doing so, the proxy will be counted by the server as a single client.      </t>
                <t>
Instead, if the multicast notification is protected end-to-end by using Group OSCORE (see <xref target="sec-secured-notifications"/> and <xref target="intermediaries-e2e-security"/>), then the Multicast-Response-Feedback-Divider Option is protected end-to-end as well, and is thus hidden from the proxy. As a consequence, the proxy forwards the notification to (the previous hop towards) any of the origin clients, each of which answers to the server if it picks a random number I equal to 0.</t>
              </li>
              <li>
                <t>If the multicast notification is not protected end-to-end by using Group OSCORE, then the Multicast-Response-Feedback-Divider Option is visible to the proxy, which MUST remove the option before forwarding the notification to (the previous hop towards) any of the origin clients.      </t>
                <t>
The proxy would have to rely on separate means for asserting whether the origin clients are still interested in the observation, e.g., by regularly forwarding notifications to the clients as unicast, Confirmable response messages.      </t>
                <t>
When no interested origin clients remain, the proxy can simply forget about being part of the group observation for the target resource at the server, like an origin client would do (see <xref target="ssec-client-side-cancellation"/>).</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="processing-on-the-server-side">
        <name>Processing on the Server Side</name>
        <t>In order to avoid needless use of network resources, a server SHOULD keep a rough, updated count of the number of clients taking part in the group observation of a target resource. To this end, the server updates the value COUNT of the associated observer counter (see <xref target="sec-server-side"/>), for instance by using the method described below.</t>
        <section anchor="request-for-feedback">
          <name>Request for Feedback</name>
          <t>When it wants to obtain a new estimated count, the server considers a number M of confirmations it would like to receive from the clients. It is up to applications to define policies about how the server determines and possibly adjusts the value of M.</t>
          <t>Then, the server computes the value Q = max(L, 0), where:</t>
          <ul spacing="normal">
            <li>L is computed as L = ceil(log2(N / M)).</li>
            <li>N is the current value of the observer counter, possibly rounded up to 1, i.e., N = max(COUNT, 1).</li>
          </ul>
          <t>Finally, the server sets Q as the value of the Multicast-Response-Feedback-Divider Option, which is sent within a successful multicast notification.</t>
          <t>If several multicast notifications are sent in a burst fashion, it is RECOMMENDED for the server to include the Multicast-Response-Feedback-Divider Option only in the first one of those notifications.</t>
        </section>
        <section anchor="collection-of-feedback">
          <name>Collection of Feedback</name>
          <t>The server collects unicast observation requests from the clients, for an amount of time of MAX_CONFIRMATION_WAIT seconds. During this time, the server regularly increments the observer counter when adding a new client to the group observation (see <xref target="ssec-server-side-informative"/>).</t>
          <t>It is up to applications to define the value of MAX_CONFIRMATION_WAIT, which has to take into account the transmission time of the multicast notification and of unicast observation requests, as well as the leisure time of the clients, which may be hard to know or estimate for the server.</t>
          <t>If this information is not known to the server, it is recommended to define MAX_CONFIRMATION_WAIT as follows.</t>
          <t>MAX_CONFIRMATION_WAIT = MAX_RTT + MAX_CLIENT_REQUEST_DELAY</t>
          <t>where MAX_RTT is as defined in <xref section="4.8.2" sectionFormat="of" target="RFC7252"/> and has default value 202 seconds, while MAX_CLIENT_REQUEST_DELAY is equivalent to MAX_SERVER_RESPONSE_DELAY defined in <xref section="3.1.5" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/> and has default value 250 seconds. In the absence of more specific information, the server can thus consider a conservative MAX_CONFIRMATION_WAIT of 452 seconds.</t>
          <t>If more information is available in deployments, a much shorter MAX_CONFIRMATION_WAIT can be set. This can be based on a realistic round trip time (replacing MAX_RTT) and on the largest leisure time configured on the clients (replacing MAX_CLIENT_REQUEST_DELAY), e.g., DEFAULT_LEISURE = 5 seconds, thus shortening MAX_CONFIRMATION_WAIT to a few seconds.</t>
        </section>
        <section anchor="processing-of-feedback">
          <name>Processing of Feedback</name>
          <t>Once MAX_CONFIRMATION_WAIT seconds have passed, the server counts the R confirmations arrived as unicast observation requests to the target resource, since the multicast notification with the Multicast-Response-Feedback-Divider Option has been sent. In particular, the server considers a unicast observation request as a confirmation from a client only if it includes a Multicast-Response-Feedback-Divider Option with an empty value (Option Length = 0).</t>
          <t>Then, the server computes a feedback indicator as E = R * (2^Q), where "^" is the exponentiation operator. According to what is defined by application policies, the server determines the next time when to ask clients for their confirmation, e.g., after a certain number of multicast notifications has been sent. For example, the decision can be influenced by the reception of no confirmations from the clients, i.e., R = 0, or by the value of the ratios (E/N) and (N/E).</t>
          <t>Finally, the server computes a new estimated count of the observers. To this end, the server first considers COUNT' as the current value of the observer counter at this point in time. Note that COUNT' may be greater than the value COUNT used at the beginning of this process, if the server has incremented the observer counter upon adding new clients to the group observation (see <xref target="ssec-server-side-informative"/>).</t>
          <t>In particular, the server computes the new estimated count value as COUNT' + ((E - N) / D), where D &gt; 0 is an integer value used as dampener. This step has to be performed atomically. That is, until this step is completed, the server MUST hold the processing of an observation request for the same target resource from a new client. Finally, the server considers the result as the current observer counter, and assesses it for possibly canceling the group observation (see <xref target="ssec-server-side-cancellation"/>).</t>
          <t>This estimate is skewed by packet loss, but it gives the server a sufficiently good estimation for further counts and for deciding when to cancel the group observation. It is up to applications to define policies about how the server takes the newly updated estimate into account and determines whether to cancel the group observation.</t>
          <t>As an example, if the server currently estimates that N = COUNT = 32 observers are active and considers a constant M = 8, it sends out a notification with Multicast-Response-Feedback-Divider: 2. Then, out of 18 actually active clients, 5 send a re-registration request based on their random draw, of which one request gets lost, thus leaving 4 re-registration requests received by the server. Also, no new clients have been added to the group observation during this time, i.e., COUNT' is equal to COUNT. As a consequence, assuming that a dampener value D = 1 is used, the server computes the new estimated count value as 32 + (16 - 32) = 16, and keeps the group observation active.</t>
          <t>To produce a most accurate updated counter, a server can include a Multicast-Response-Feedback-Divider Option with value Q = 0 in its multicast notifications, as if M is equal to N. This will trigger all the active clients to state their interest in continuing receiving notifications for the target resource. Thus, the amount R of arrived confirmations is affected only by possible packet loss.</t>
          <t><xref target="appendix-pseudo-code-counting-server"/> provides a description in pseudo-code of the operations above performed by the server, including example behaviors for scheduling the next count update and deciding whether to cancel the group observation.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-secured-notifications">
      <name>Protection of Multicast Notifications with Group OSCORE</name>
      <t>A server can protect multicast notifications by using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>, thus ensuring that they are protected end-to-end with the observer clients. This requires that both the server and the clients interested in receiving multicast notifications from that server are members of the same OSCORE group.</t>
      <t>In some settings, the OSCORE group to refer to can be pre-configured on the clients and the server. In such a case, a server which is aware of such pre-configuration can simply assume a client to be already member of the correct OSCORE group.</t>
      <t>In any other case, the server MAY communicate to clients what OSCORE group they are required to join, by providing additional guidance in the informative response as described in <xref target="sec-inf-response"/>. Note that clients can already be members of the right OSCORE group, in case they have previously joined it to securely communicate with the same server and/or with other servers to access their resources.</t>
      <t>Both the clients and the server MAY join the OSCORE group by using the approach described in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> and based on the ACE framework for Authentication and Authorization in constrained environments <xref target="RFC9200"/>. Further details on how to discover the OSCORE group and join it are out of the scope of this document.</t>
      <t>If multicast notifications are protected using Group OSCORE, the original registration requests and related unicast (notification) responses MUST also be secured, including and especially the informative responses from the server.</t>
      <t>To this end, alternative security protocols than Group OSCORE, such as OSCORE <xref target="RFC8613"/> and/or DTLS <xref target="RFC9147"/>, can be used to protect other exchanges via unicast between the server and each client, including the original client registration (see <xref target="sec-client-side"/>).</t>
      <section anchor="sec-inf-response">
        <name>Signaling the OSCORE Group in the Informative Response</name>
        <t>This section describes a mechanism for the server to communicate to the client what OSCORE group to join in order to decrypt and verify the multicast notifications protected with Group OSCORE. The client MAY use the information provided by the server to start the ACE joining procedure described in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>. This mechanism is OPTIONAL to support for the client and server.</t>
        <t>Additionally to what is defined in <xref target="sec-server-side"/>, the CBOR map in the informative response payload contains the following fields, whose CBOR labels are defined in <xref target="informative-response-params"/>.</t>
        <ul spacing="normal">
          <li>'join_uri', with value the URI for joining the OSCORE group at the respective Group Manager, encoded as a CBOR text string. If the procedure described in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> is used for joining, this field specifically indicates the URI of the group-membership resource at the Group Manager.</li>
          <li>'sec_gp', with value the name of the OSCORE group, encoded as a CBOR text string.</li>
          <li>Optionally, 'as_uri', with value the URI of the Authorization Server associated with the Group Manager for the OSCORE group, encoded as a CBOR text string.</li>
          <li>Optionally, 'hkdf', with value the HKDF Algorithm used in the OSCORE group, encoded as a CBOR text string or integer. The value is taken from the 'Value' column of the "COSE Algorithms" registry <xref target="COSE.Algorithms"/>.</li>
          <li>
            <t>Optionally, 'cred_fmt', with value the format of the authentication credentials used in the OSCORE group, encoded as a CBOR integer. The value is taken from the 'Label' column of the "COSE Header Parameters" Registry <xref target="COSE.Header.Parameters"/>. Consistently with <xref section="2.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, acceptable values denote a format that MUST explicitly provide the comprehensive set of information related to the public key algorithm, including, e.g., the used elliptic curve (when applicable).  </t>
            <t>
At the time of writing this specification, acceptable formats of authentication credentials are CBOR Web Tokens (CWTs) and CWT Claim Sets (CCSs) <xref target="RFC8392"/>, X.509 certificates <xref target="RFC5280"/> 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.  </t>
            <t>
[ As to CWTs and unprotected CWT claim sets, there is a pending registration requested by draft-ietf-lake-edhoc. ]  </t>
            <t>
[ As to C509 certificates, there is a pending registration requested by draft-ietf-cose-cbor-encoded-cert. ]</t>
          </li>
          <li>Optionally, 'gp_enc_alg', with value the Group Encryption Algorithm used in the OSCORE group to encrypt messages protected with the group mode, encoded as a CBOR text string or integer. The value is taken from the 'Value' column of the "COSE Algorithms" registry <xref target="COSE.Algorithms"/>.</li>
          <li>Optionally, 'sign_alg', with value the Signature Algorithm used to sign messages in the OSCORE group, encoded as a CBOR text string or integer. The value is taken from the 'Value' column of the "COSE Algorithms" registry <xref target="COSE.Algorithms"/>.</li>
          <li>
            <t>Optionally, 'sign_params', encoded as a CBOR array and including the following two elements:  </t>
            <ul spacing="normal">
              <li>'sign_alg_capab': a CBOR array, with the same format and value of the COSE capabilities array for the algorithm indicated in 'sign_alg', as specified for that algorithm in the 'Capabilities' column of the "COSE Algorithms" Registry <xref target="COSE.Algorithms"/>.</li>
              <li>'sign_key_type_capab': 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 algorithm indicated in 'sign_alg', as specified for that key type in the 'Capabilities' column of the "COSE Key Types" Registry <xref target="COSE.Key.Types"/>.</li>
            </ul>
          </li>
        </ul>
        <t>The values of 'sign_alg', 'sign_params', and 'cred_fmt' provide an early knowledge of the format of authentication credentials as well as of the type of public keys used in the OSCORE group. Thus, the client does not need to ask the Group Manager for this information as a preliminary step before the (ACE) join process, or to perform a trial-and-error exchange with the Group Manager upon joining the group. Hence, the client is able to provide the Group Manager with its own authentication credential in the correct expected format and including a public key of the correct expected type, at the very first step of the (ACE) join process.</t>
        <t>The values of 'hkdf', 'gp_enc_alg', and 'sign_alg' provide an early knowledge of the algorithms used in the OSCORE group. Thus, the client is able to decide whether to actually proceed with the (ACE) join process, depending on its support for the indicated algorithms.</t>
        <t>As mentioned above, since this mechanism is OPTIONAL, all the fields are OPTIONAL in the informative response. However, the 'join_uri' and 'sec_gp' fields MUST be present if the mechanism is implemented and used. If any of the fields are present without the 'join_uri' and 'sec_gp' fields present, the client MUST ignore these fields, since they would not be sufficient to start the (ACE) join procedure. When this happens, the client MAY try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). Otherwise, the client SHOULD explicitly withdraw from the group observation.</t>
        <t><xref target="self-managed-oscore-group"/> describes a possible alternative approach, where the server self-manages the OSCORE group, and provides the observer clients with the necessary keying material in the informative response. The approach in <xref target="self-managed-oscore-group"/> MUST NOT be used together with the mechanism defined in this section for indicating what OSCORE group to join.</t>
      </section>
      <section anchor="sec-server-side-with-security">
        <name>Server-Side Requirements</name>
        <t>When using Group OSCORE to protect multicast notifications, the server performs the operations described in <xref target="sec-server-side"/>, with the following differences.</t>
        <section anchor="ssec-server-side-request-oscore">
          <name>Registration</name>
          <t>The phantom registration request MUST be secured, by using Group OSCORE. In particular, the group mode of Group OSCORE defined in <xref section="8" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> MUST be used.</t>
          <t>The server protects the phantom registration request as defined in <xref section="8.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, as if it was the actual sender, i.e., by using its Sender Context. As a consequence, the server consumes the current value of its Sender Sequence Number SN in the OSCORE group, and hence updates it to SN* = (SN + 1). Consistently, the OSCORE Option in the phantom registration request includes:</t>
          <ul spacing="normal">
            <li>As 'kid', the Sender ID of the server in the OSCORE group.</li>
            <li>As 'piv', the previously consumed Sender Sequence Number value SN of the server in the OSCORE group, i.e., (SN* - 1).</li>
          </ul>
        </section>
        <section anchor="ssec-server-side-informative-oscore">
          <name>Informative Response</name>
          <t>The value of the CBOR byte string in the 'ph_req' parameter encodes the phantom observation request as a message protected with Group OSCORE (see <xref target="ssec-server-side-request-oscore"/>). As a consequence: the specified Code is always 0.05 (FETCH); the sequence of CoAP options will be limited to the outer, non encrypted options; a payload is always present, as the authenticated ciphertext followed by the signature. Note that, in terms of transport-independent information, the registration request from the client typically differs from the phantom request. Thus, the server has to include the 'ph_req' parameter in the informative response. An exception is the case discussed in <xref target="deterministic-phantom-Request"/>.</t>
          <t>Similarly, the value of the CBOR byte string in the 'last_notif' parameter encodes the latest multicast notification as a message protected with Group OSCORE (see <xref target="ssec-server-side-notifications-oscore"/>). This applies also to the initial multicast notification INIT_NOTIF built in step 6 of <xref target="ssec-server-side-request"/>.</t>
          <t>Optionally, the informative response includes information on the OSCORE group to join, as additional parameters (see <xref target="sec-inf-response"/>).</t>
        </section>
        <section anchor="ssec-server-side-notifications-oscore">
          <name>Notifications</name>
          <t>The server MUST protect every multicast notification for the target resource with Group OSCORE. In particular, the group mode of Group OSCORE defined in <xref section="8" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> MUST be used.</t>
          <t>The process described in <xref section="8.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> applies, with the following additions when building the two OSCORE 'external_aad' to encrypt and sign the multicast notification (see <xref section="4.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</t>
          <ul spacing="normal">
            <li>The 'request_kid' is the 'kid' value in the OSCORE Option of the phantom registration request, i.e., the Sender ID of the server.</li>
            <li>The 'request_piv' is the 'piv' value in the OSCORE Option of the phantom registration request, i.e., the consumed Sender Sequence Number SN of the server.</li>
            <li>The 'request_kid_context' is the 'kid context' value in the OSCORE Option of the phantom registration request, i.e., the Group Identifier value (Gid) of the OSCORE group used as ID Context.</li>
          </ul>
          <t>Note that these same values are used to protect each and every multicast notification sent for the target resource under this group observation.</t>
        </section>
        <section anchor="ssec-server-side-cancellation-oscore">
          <name>Cancellation</name>
          <t>When canceling a group observation (see <xref target="ssec-server-side-cancellation"/>), the multicast response with error code 5.03 (Service Unavailable) is also protected with Group OSCORE, as per <xref section="8.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. The server MUST use its own Sender Sequence Number as Partial IV to protect the error response, and include it as Partial IV in the OSCORE Option of the response.</t>
        </section>
      </section>
      <section anchor="sec-client-side-with-security">
        <name>Client-Side Requirements</name>
        <t>When using Group OSCORE to protect multicast notifications, the client performs as described in <xref target="sec-client-side"/>, with the following differences.</t>
        <section anchor="ssec-client-side-informative-oscore">
          <name>Informative Response</name>
          <t>Upon receiving the informative response from the server, the client performs as described in <xref target="ssec-client-side-informative"/>, with the following additions.</t>
          <t>When performing step 2, the client expects the 'ph_req' parameter to be included in the informative response, which is otherwise considered malformed. An exception is the case discussed in <xref target="deterministic-phantom-Request"/>.</t>
          <t>Once completed step 2, the client decrypts and verifies the rebuilt phantom registration request as defined in <xref section="8.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, with the following differences.</t>
          <ul spacing="normal">
            <li>The client MUST NOT perform any replay check. That is, the client skips step 3 in <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</li>
            <li>
              <t>If decryption and verification of the phantom registration request succeed:  </t>
              <ul spacing="normal">
                <li>The client MUST NOT update the Replay Window in the Recipient Context associated with the server. That is, the client skips the second bullet of step 6 in <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</li>
                <li>The client MUST NOT take any further process as normally expected according to <xref target="RFC7252"/>. That is, the client skips step 8 in <xref section="8.2" sectionFormat="of" target="RFC8613"/>. In particular, the client MUST NOT deliver the phantom registration request to the application, and MUST NOT take any action in the Token space of its unicast endpoint, where the informative response has been received.</li>
                <li>The client stores the values of the 'kid', 'piv', and 'kid context' fields from the OSCORE Option of the phantom registration request.</li>
              </ul>
            </li>
            <li>If decryption and verification of the phantom registration request fail, the client MAY try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). Otherwise, the client SHOULD explicitly withdraw from the group observation.</li>
          </ul>
          <t>After successful decryption and verification, the client performs step 3 in <xref target="ssec-client-side-informative"/>, considering the decrypted phantom registration request.</t>
          <t>If the informative response includes the parameter 'last_notif', the client also decrypts and verifies the latest multicast notification rebuilt at step 5 in <xref target="ssec-client-side-informative"/>, just like it would for the multicast notifications transmitted as CoAP messages on the wire (see <xref target="ssec-client-side-notifications-oscore"/>). If decryption and verification succeed, the client proceeds with step 6, considering the decrypted latest multicast notification. Otherwise, the client proceeds to step 7.</t>
        </section>
        <section anchor="ssec-client-side-notifications-oscore">
          <name>Notifications</name>
          <t>After having successfully processed the informative response as defined in <xref target="ssec-client-side-informative-oscore"/>, the client will decrypt and verify every multicast notification for the target resource as defined in <xref section="8.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, with the following difference.</t>
          <t>For both decryption and signature verification, the client MUST set the 'external_aad' defined in <xref section="4.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> as follows. The particular way to achieve this is implementation specific.</t>
          <ul spacing="normal">
            <li>'request_kid' takes the value of the 'kid' field from the OSCORE Option of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</li>
            <li>'request_piv' takes the value of the 'piv' field from the OSCORE Option of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</li>
            <li>'request_kid_context' takes the value of the 'kid context' field from the OSCORE Option of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</li>
          </ul>
          <t>Note that these same values are used to decrypt and verify each and every multicast notification received for the target resource.</t>
          <t>The replay protection and checking of multicast notifications is performed as specified in <xref section="4.1.3.5.2" sectionFormat="of" target="RFC8613"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-example-with-security">
      <name>Example with Group OSCORE</name>
      <t>The following example refers to two clients C_1 and C_2 that register to observe a resource /r at a Server S, which has address SRV_ADDR and listens to the port number SRV_PORT. Before the following exchanges occur, no clients are observing the resource /r , which has value "1234".</t>
      <t>The server S sends multicast notifications to the IP multicast address GRP_ADDR and port number GRP_PORT, and starts the group observation upon receiving a registration request from a first client that wishes to start a traditional observation on the resource /r.</t>
      <t>Pairwise communication over unicast is protected with OSCORE, while S protects multicast notifications with Group OSCORE. Specifically:</t>
      <ul spacing="normal">
        <li>C_1 and S have a pairwise OSCORE Security Context. In particular, C_1 has 'kid' = 0x01 as Sender ID, and SN_1 = 101 as Sender Sequence Number. Also, S has 'kid' = 0x03 as Sender ID, and SN_3 = 301 as Sender Sequence Number.</li>
        <li>C_2 and S have a pairwise OSCORE Security Context. In particular, C_2 has 'kid' = 0x02 as Sender ID, and SN_2 = 201 as Sender Sequence Number. Also, S has 'kid' = 0x04 as Sender ID, and SN_4 = 401 as Sender Sequence Number.</li>
        <li>S is a member of the OSCORE group with name "myGroup", and 'kid context' = 0x57ab2e as Group ID. In the OSCORE group, S has 'kid' = 0x05 as Sender ID, and SN_5 = 501 as Sender Sequence Number.</li>
      </ul>
      <t>The following notation is used for the payload of the informative responses:</t>
      <ul spacing="normal">
        <li>'bstr(X)' denotes a CBOR byte string with value the byte serialization of X, with '|' denoting byte concatenation.</li>
        <li>'OPT' denotes a sequence of CoAP options. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</li>
        <li>'PAYLOAD' denotes an encrypted CoAP payload. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</li>
        <li>'SIGN' denotes the signature appended to an encrypted CoAP payload. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</li>
      </ul>
      <figure anchor="example-oscore">
        <name>Example of group observation with Group OSCORE</name>
        <artwork><![CDATA[
C_1     ------------ [ Unicast w/ OSCORE ]  ------------------> S  /r
 |  0.05 (FETCH)                                                |
 |  Token: 0x4a                                                 |
 |  OSCORE: {kid: 0x01; piv: 101; ...}                          |
 |  <Other class U/I options>                                   |
 |  0xff                                                        |
 |  Encrypted_payload {                                         |
 |    0x01 (GET),                                               |
 |    Observe: 0 (register),                                    |
 |    <Other class E options>                                   |
 |  }                                                           |
 |                                                              |
 |              (S allocates the available Token value 0x7b .)  |
 |                                                              |
 |      (S sends to itself a phantom observation request PH_REQ |
 |       as coming from the IP multicast address GRP_ADDR .)    |
 |     ------------------------------------------------------   |
 |    /                                                         |
 |    \-------------------------------------------------------> |  /r
 |                         0.05 (FETCH)                         |
 |                         Token: 0x7b                          |
 |                         OSCORE: {kid: 0x05 ; piv: 501;       |
 |                                  kid context: 0x57ab2e; ...} |
 |                         <Other class U/I options>            |
 |                         0xff                                 |
 |                         Encrypted_payload {                  |
 |                           0x01 (GET),                        |
 |                           Observe: 0 (register),             |
 |                           <Other class E options>            |
 |                         }                                    |
 |                         <Signature>                          |
 |                                                              |
 |   (S steps SN_5 in the Group OSCORE Sec. Ctx : SN_5 <== 502) |
 |                                                              |
 |                     (S creates a group observation of /r .)  |
 |                                                              |
 |                          (S increments the observer counter  |
 |                           for the group observation of /r .) |
 |                                                              |
C_1 <--------------- [ Unicast w/ OSCORE ] ----------------     S
 |  2.05 (Content)                                              |
 |  Token: 0x4a                                                 |
 |  OSCORE: {piv: 301; ...}                                     |
 |  Max-Age: 0                                                  |
 |  <Other class U/I options>                                   |
 |  0xff                                                        |
 |  Encrypted_payload {                                         |
 |    5.03 (Service Unavailable),                               |
 |    Content-Format: application/informative-response+cbor,    |
 |    <Other class E options>,                                  |
 |    0xff,                                                     |
 |    CBOR_payload {                                            |
 |      tp_info    : [1, bstr(SRV_ADDR), SRV_PORT,              |
 |                    0x7b, bstr(GRP_ADDR), GRP_PORT],          |
 |      ph_req     : bstr(0x05 | OPT | 0xff | PAYLOAD | SIGN),  |
 |      last_notif : bstr(0x45 | OPT | 0xff | PAYLOAD | SIGN),  |
 |      join_uri   : "coap://myGM/ace-group/myGroup",           |
 |      sec_gp     : "myGroup"                                  |
 |    }                                                         |
 |  }                                                           |
 |                                                              |
C_2     ------------ [ Unicast w/ OSCORE ]  ------------------> S  /r
 |  0.05 (FETCH)                                                |
 |  Token: 0x01                                                 |
 |  OSCORE: {kid: 0x02; piv: 201; ...}                          |
 |  <Other class U/I options>                                   |
 |  0xff                                                        |
 |  Encrypted_payload {                                         |
 |    0x01 (GET),                                               |
 |    Observe: 0 (register),                                    |
 |    <Other class E options>                                   |
 |  }                                                           |
 |                                                              |
 |                          (S increments the observer counter  |
 |                           for the group observation of /r .) |
 |                                                              |
C_2 <--------------- [ Unicast w/ OSCORE ] ----------------     S
 |  2.05 (Content)                                              |
 |  Token: 0x01                                                 |
 |  OSCORE: {piv: 401; ...}                                     |
 |  Max-Age: 0                                                  |
 |  <Other class U/I options>                                   |
 |  0xff,                                                       |
 |  Encrypted_payload {                                         |
 |    5.03 (Service Unavailable),                               |
 |    Content-Format: application/informative-response+cbor,    |
 |    <Other class E options>,                                  |
 |    0xff,                                                     |
 |    CBOR_payload {                                            |
 |      tp_info    : [1, bstr(SRV_ADDR), SRV_PORT,              |
 |                    0x7b, bstr(GRP_ADDR), GRP_PORT],          |
 |      ph_req     : bstr(0x05 | OPT | 0xff | PAYLOAD | SIGN),  |
 |      last_notif : bstr(0x45 | OPT | 0xff | PAYLOAD | SIGN),  |
 |      join_uri   : "coap://myGM/ace-group/myGroup",           |
 |      sec_gp     : "myGroup"                                  |
 |    }                                                         |
 |  }                                                           |
 |                                                              |
 |            (The value of the resource /r changes to "5678".) |
 |                                                              |
C_1                                                             |
 +  <----------- [ Multicast w/ Group OSCORE ] ------------     S
C_2       (Destination address/port: GRP_ADDR/GRP_PORT)         |
 |  2.05 (Content)                                              |
 |  Token: 0x7b                                                 |
 |  OSCORE: {kid: 0x05; piv: 502; ...}                          |
 |  <Other class U/I options>                                   |
 |  0xff                                                        |
 |  Encrypted_payload {                                         |
 |    2.05 (Content),                                           |
 |    Observe: [empty],                                         |
 |    Content-Format: application/cbor,                         |
 |    <Other class E options>,                                  |
 |    0xff,                                                     |
 |    CBOR_Payload: "5678"                                      |
 |  }                                                           |
 |  <Signature>                                                 |
 |                                                              |
]]></artwork>
      </figure>
      <t>The two external_aad used to encrypt and sign the multicast notification above have 'request_kid' = 5, 'request_piv' = 501, and 'request_kid_context' = 0x57ab2e. These values are specified in the 'kid', 'piv', and 'kid context' field of the OSCORE Option of the phantom observation request, which is encoded in the 'ph_req' parameter of the unicast informative response to the two clients. Thus, the two clients can build the two same external_aad for decrypting and verifying this multicast notification and the following ones.</t>
    </section>
    <section anchor="intermediaries">
      <name>Intermediaries</name>
      <t>This section specifies how the approach presented in <xref target="sec-server-side"/> and <xref target="sec-client-side"/> works when a proxy is used between the clients and the server. In addition to what is specified in <xref section="5.7" sectionFormat="of" target="RFC7252"/> and <xref section="5" sectionFormat="of" target="RFC7641"/>, the following applies.</t>
      <t>A client sends its original observation request to the proxy. If the proxy is not already registered at the server for that target resource, the proxy forwards the observation request to the server, hence registering itself as an observer. If the server has an ongoing group observation for the target resource or decides to start one, the server considers the proxy as taking part in the group observation, and replies to the proxy with an informative response.</t>
      <t>Upon receiving an informative response, the proxy performs as specified for the client in <xref target="sec-client-side"/>, with the peculiarity that "consuming" the last notification (if present) means populating its cache.</t>
      <t>In particular, by using the information retrieved from the informative response, the proxy configures an observation of the target resource at the origin server, acting as a client directly taking part in the group observation.</t>
      <t>As a consequence, the proxy will listen to the IP multicast address and port number indicated by the server in the informative response, as 'cli_host' and 'cli_port' element of 'req_info' under the 'tp_info' parameter, respectively (see <xref target="ssssec-udp-transport-specific"/>). Furthermore, multicast notifications will match the phantom request stored at the proxy, based on the Token value specified in the 'token' element of 'req_info' under the 'tp_info' parameter in the informative response.</t>
      <t>Then, the proxy performs the following actions.</t>
      <ul spacing="normal">
        <li>If the 'last_notif' field is not present, the proxy responds to the client with an Empty Acknowledgement (if indicated by the message type, and if it has not already done so).</li>
        <li>If the 'last_notif' field is present, the proxy rebuilds the latest multicast notification, as defined in <xref target="sec-client-side"/>. Then, the proxy responds to the client, by forwarding back the latest multicast notification.</li>
      </ul>
      <t>When responding to an observation request from a client, the proxy also adds that client (and its Token) to the list of its registered observers for the target resource, next to the older observations.</t>
      <t>Upon receiving a multicast notification from the server, the proxy forwards it back separately to each observer client over unicast. Note that the notification forwarded back to a certain client has the same Token value of the original observation request sent by that client to the proxy.</t>
      <t>Note that the proxy configures the observation of the target resource at the server only once, when receiving the informative response associated with a (newly started) group observation for that target resource.</t>
      <t>After that, when receiving an observation request from a following new client to be added to the same group observation, the proxy does not take any further action with the server. Instead, the proxy responds to the client either with the latest multicast notification if available from its cache, or with an Empty Acknowledgement otherwise, as defined above.</t>
      <t>As a result, the observer counter at the server (see <xref target="sec-server-side"/>) is not incremented when a new origin client behind the proxy registers as an observer at the proxy. Instead, the observer counter takes into account only the proxy, which has registered as observer at the server and has received the informative response from the server.</t>
      <t>An example is provided in <xref target="intermediaries-example"/>.</t>
      <t>In the general case with a chain of two or more proxies, every proxy in the chain takes the role of client with the (next hop towards the) origin server. Note that the proxy adjacent to the origin server is the only one in the chain that receives informative responses and listens to an IP multicast address to receive notifications for the group observation. Furthermore, every proxy in the chain takes the role of server with the (previous hop towards the) origin client.</t>
    </section>
    <section anchor="intermediaries-e2e-security">
      <name>Intermediaries Together with End-to-End Security</name>
      <t>As defined in <xref target="sec-secured-notifications"/>, Group OSCORE can be used to protect multicast notifications end-to-end between the origin server and the clients. In such a case, additional actions are required when also the informative responses from the origin server are protected specifically end-to-end, by using OSCORE or Group OSCORE.</t>
      <t>In fact, the proxy adjacent to the origin server is not able to access the encrypted payload of such informative responses. Hence, the proxy cannot retrieve the 'ph_req' and 'tp_info' parameters necessary to correctly receive multicast notifications and forward them back to the clients.</t>
      <t>Then, differently from what is defined in <xref target="intermediaries"/>, each proxy receiving an informative response simply forwards it back to the client that has sent the corresponding observation request. Note that the proxy does not even realize that the message is an actual informative response, since the outer Code field is set to 2.05 (Content).</t>
      <t>Upon receiving the informative response, the client does not configure an observation of the target resource. Instead, the client performs a new observe registration request, by transmitting the re-built phantom request as intended to reach the proxy adjacent to the origin server. In particular, the client includes the new Listen-To-Multicast-Responses CoAP option defined in <xref target="ltmr-option"/>, to provide that proxy with the transport-specific information required for receiving multicast notifications for the group observation.</t>
      <t>As a result, the observer counter at the server (see <xref target="sec-server-side"/>) is incremented when, after having received the original observation request from a new origin client, the origin server replies with the informative response. In particular, the observer counter at the server reliably takes into account the new, different origin clients behind the proxy, which the server distinguishes through their security identity specified by the pair (OSCORE Sender ID, OSCORE ID Context) in the OSCORE Option of their original observation request. Note that this does not hold anymore if the origin endpoints use phantom observation requests as deterministic requests (see <xref target="deterministic-phantom-Request"/>).</t>
      <t>Details on the additional message exchange and processing are defined in <xref target="intermediaries-e2e-security-processing"/>.</t>
      <section anchor="ltmr-option">
        <name>Listen-To-Multicast-Responses Option</name>
        <t>In order to allow the proxy to listen to the multicast notifications sent by the server, a new CoAP option is introduced. This option MUST be supported by clients interested to take part in group observations through intermediaries, and by proxies that collect multicast notifications and forward them back to the observer clients.</t>
        <t>The option is called Listen-To-Multicast-Responses and is intended only for requests. As summarized in <xref target="ltmr-table"/>, the option is critical and not Safe-to-Forward. Since the option is not Safe-to-Forward, the column "N" indicates a dash for "not applicable".</t>
        <figure anchor="ltmr-table">
          <name>Listen-To-Multicast-Responses</name>
          <artwork align="center"><![CDATA[
+-----+---+---+---+---+-------------------+--------+--------+---------+
| No. | C | U | N | R | Name              | Format | Len.   | Default |
+-----+---+---+---+---+-------------------+--------+--------+---------+
| TBD | x | x | - |   | Listen-To-        |  (*)   | 3-1024 | (none)  |
|     |   |   |   |   | Multicast-        |        |        |         |
|     |   |   |   |   | Responses         |        |        |         |
+-----+---+---+---+---+-------------------+--------+--------+---------+

      C = Critical, U = Unsafe, N = NoCacheKey, R = Repeatable
      (*) See below.
]]></artwork>
        </figure>
        <t>The Listen-To-Multicast-Responses Option includes the serialization of a CBOR array. This specifies transport-specific message information required for listening to the multicast notifications of a group observation, and intended to the proxy adjacent to the origin server sending those notifications. In particular, the serialized CBOR array has the same format specified in <xref target="sssec-transport-specific-encoding"/> for the 'tp_info' parameter of the informative response (see <xref target="ssec-server-side-informative"/>).</t>
        <t>The Listen-To-Multicast-Responses Option is of class U for OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      </section>
      <section anchor="intermediaries-e2e-security-processing">
        <name>Message Processing</name>
        <t>Compared to <xref target="intermediaries"/>, the following additions apply when informative responses are protected end-to-end between the origin server and the clients.</t>
        <t>After the origin server sends an informative response, each proxy simply forwards it back to the (previous hop towards the) origin client that has sent the observation request.</t>
        <t>Once received the informative response, the origin client proceeds in a different way than in <xref target="ssec-client-side-informative-oscore"/>:</t>
        <ul spacing="normal">
          <li>The client performs all the additional decryption and verification steps of <xref target="ssec-client-side-informative-oscore"/> on the phantom request specified in the 'ph_req' parameter and on the last notification specified in the 'last_notif' parameter (if present).</li>
          <li>
            <t>The client builds a ticket request (see Appendix B of <xref target="I-D.amsuess-core-cachable-oscore"/>), as intended to reach the proxy adjacent to the origin server. The ticket request is formatted as follows.  </t>
            <ul spacing="normal">
              <li>The Token is chosen as the client sees fit. In fact, there is no reason for this Token to be the same as the phantom request's.</li>
              <li>The outer Code field, the outer CoAP options, and the encrypted payload with AEAD tag (protecting the inner Code, the inner CoAP options, and the possible plain CoAP payload) concatenated with the signature are the same of the phantom request used for the group observation. That is, they are as specified in the 'ph_req' parameter of the received informative response.</li>
              <li>An outer Observe Option is included and set to 0 (register). This will usually be set in the phantom request already.</li>
              <li>The outer option Proxy-Uri or the outer options (Proxy-Scheme, Uri-Host, Uri-Port) are included, and set to the same values they had in the original registration request sent by the client.</li>
              <li>
                <t>The new option Listen-To-Multicast-Responses is included as an outer option. The value is set to the serialization of the CBOR array specified by the 'tp_info' parameter of the informative response.      </t>
                <t>
Note that, except for transport-specific information such as the Token and Message ID values, every different client participating to the same group observation (hence rebuilding the same phantom request) will build the same ticket request.      </t>
                <t>
Note also that, identically to the phantom request, the ticket request is still protected with Group OSCORE, i.e., it has the same OSCORE Option, encrypted payload, and signature.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Then, the client sends the ticket request to the next hop towards the origin server. Every proxy in the chain forwards the ticket request to the next hop towards the origin server, until the last proxy in the chain is reached. This last proxy, adjacent to the origin server, proceeds as follows.</t>
        <ul spacing="normal">
          <li>The proxy MUST NOT further forward the ticket request to the origin server.</li>
          <li>The proxy removes from the ticket request the Proxy-Uri Option or the (Proxy-Scheme, Uri-Host, Uri-Port) Options.</li>
          <li>The proxy removes the Listen-To-Multicast-Responses Option from the ticket request, and extracts the conveyed transport-specific information.</li>
          <li>The proxy rebuilds the phantom request associated with the group observation, by using the ticket request as directly providing the required transport-independent information. This includes the outer Code field, the outer CoAP options, and the encrypted payload with AEAD tag concatenated with the signature.</li>
          <li>The proxy configures an observation of the target resource at the origin server, acting as a client directly taking part in the group observation. To this end, the proxy uses the rebuilt phantom request and the transport-specific information retrieved from the Listen-To-Multicast-Responses Option. The particular way to achieve this is implementation specific.</li>
        </ul>
        <t>After that, the proxy will listen to the IP multicast address and port number indicated in the Listen-To-Multicast-Responses Option, as 'cli_host' and 'cli_port' element of the serialized CBOR array, respectively. In particular, multicast notifications will match the phantom request stored at the proxy, based on the Token value specified in the 'token' element of the serialized CBOR array in the Listen-To-Multicast-Responses Option.</t>
        <t>An example is provided in <xref target="intermediaries-example-e2e-security"/>.</t>
      </section>
    </section>
    <section anchor="informative-response-params">
      <name>Informative Response Parameters</name>
      <t>This document defines a number of fields used in the informative response defined in <xref target="ssec-server-side-informative"/>.</t>
      <t>The table below summarizes them and specifies the CBOR key to use instead of the full descriptive name. Note that the media type application/informative-response+cbor MUST be used when these fields are transported.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">CBOR Key</th>
            <th align="left">CBOR Type</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">tp_info</td>
            <td align="left">0</td>
            <td align="left">array</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/></td>
          </tr>
          <tr>
            <td align="left">ph_req</td>
            <td align="left">1</td>
            <td align="left">bstr</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/></td>
          </tr>
          <tr>
            <td align="left">last_notif</td>
            <td align="left">2</td>
            <td align="left">bstr</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/></td>
          </tr>
          <tr>
            <td align="left">next_not_before</td>
            <td align="left">3</td>
            <td align="left">uint</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/></td>
          </tr>
          <tr>
            <td align="left">join_uri</td>
            <td align="left">4</td>
            <td align="left">tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">sec_gp</td>
            <td align="left">5</td>
            <td align="left">tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">as_uri</td>
            <td align="left">6</td>
            <td align="left">tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">hkdf</td>
            <td align="left">7</td>
            <td align="left">int / tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">cred_fmt</td>
            <td align="left">8</td>
            <td align="left">int</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">gp_enc_alg</td>
            <td align="left">9</td>
            <td align="left">int / tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">sign_alg</td>
            <td align="left">10</td>
            <td align="left">int / tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">sign_params</td>
            <td align="left">11</td>
            <td align="left">array</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">gp_material</td>
            <td align="left">12</td>
            <td align="left">map</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">srv_cred</td>
            <td align="left">13</td>
            <td align="left">bstr</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">srv_identifier</td>
            <td align="left">14</td>
            <td align="left">bstr</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">exp</td>
            <td align="left">15</td>
            <td align="left">uint</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="transport-protocol-identifiers">
      <name>Transport Protocol Information</name>
      <t>This document defines some values of transport protocol identifiers to use within the 'tp_info' parameter of the informative response defined in <xref target="ssec-server-side-informative"/>.</t>
      <t>According to the encoding specified in <xref target="sssec-transport-specific-encoding"/>, these values are used for the 'tp_id' element of 'srv_addr', under the 'tp_info' parameter.</t>
      <t>The table below summarizes them, specifies the integer value to use instead of the full descriptive name, and provides the corresponding comprehensive set of information elements to include in the 'tp_info' parameter.</t>
      <t>Note to RFC Editor: Please replace in the table below all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <figure anchor="values_tp_id">
        <name>Transport protocol information</name>
        <artwork><![CDATA[
+-----------+-------------+-------+----------+-----------+------------+
| Transport | Description | Value | Srv Addr | Req Info  | Reference  |
| Protocol  |             |       |          |           |            |
+-----------+-------------+-------+----------+-----------+------------+
| Reserved  | This value  | 0     |          |           | [RFC-XXXX] |
|           | is reserved |       |          |           |            |
|           |             |       |          |           |            |
| UDP       | UDP is used | 1     | tp_id    |  token    | [RFC-XXXX] |
|           | as per      |       | srv_host |  cli_host |            |
|           | RFC7252     |       | srv_port | ?cli_port |            |
+-----------+-------------+-------+----------+-----------+------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>In addition to the security considerations from <xref target="RFC7252"/><xref target="RFC7641"/><xref target="I-D.ietf-core-groupcomm-bis"/><xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>, the following considerations hold for this document.</t>
      <section anchor="unprotected-communications">
        <name>Unprotected Communications</name>
        <t>In case communications are not protected, the server might not be able to effectively authenticate a new client when it registers as an observer. <xref section="7" sectionFormat="of" target="RFC7641"/> specifies how, in such a case, the server must strictly limit the number of notifications sent between receiving acknowledgements from the client, as confirming to be still interested in the observation; i.e., any notifications sent in Non-confirmable messages must be interspersed with confirmable messages.</t>
        <t>This is not possible to achieve by the same means when using the communication model defined in this document, since multicast notifications are sent as Non-confirmable messages. Nonetheless, the server might obtain such acknowledgements by other means.</t>
        <t>For instance, the method defined in <xref target="sec-rough-counting"/> to perform the rough counting of still interested clients triggers (some of) them to explicitly send a new observation request to acknowledge their interest. Then, the server can decide to terminate the group observation altogether, in case not enough clients are estimated to be still active.</t>
        <t>If the method defined in <xref target="sec-rough-counting"/> is used, the server SHOULD NOT send more than a strict number of multicast notifications for a given group observation, without having first performed a new rough counting of active clients. Note that, when using the method defined in <xref target="sec-rough-counting"/> with unprotected communications, an adversary can craft and inject multiple new observation requests including the Multicast-Response-Feedback-Divider Option, hence inducing the server to overestimate the number of still interested clients, and thus to inappropriately continue the group observation.</t>
      </section>
      <section anchor="protected-communications">
        <name>Protected Communications</name>
        <t>If multicast notifications are protected using Group OSCORE as per <xref target="sec-secured-notifications"/>, the following applies.</t>
        <ul spacing="normal">
          <li>The original registration requests and related unicast (notification) responses MUST also be secured, including and especially the informative responses from the server. This prevents on-path active adversaries from altering the conveyed IP multicast address and serialized phantom registration request. Thus, it ensures secure binding between every multicast notification for a same observed resource and the phantom registration request that started the group observation of that resource.</li>
          <li>A re-registration request, possibly including the Multicast-Response-Feedback-Divider Option to support the rough counting of clients (see <xref target="sec-rough-counting"/>), MUST also be secured.</li>
        </ul>
        <t>To this end, clients and servers SHOULD use OSCORE or Group OSCORE, so ensuring that the secure binding above is enforced end-to-end between the server and each observing client.</t>
      </section>
      <section anchor="sec-security-considerations-ltmr">
        <name>Listen-To-Multicast-Responses Option</name>
        <t>The CoAP option Listen-To-Multicast-Responses defined in <xref target="ltmr-option"/> is of class U for OSCORE and Group OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
        <t>This allows the proxy adjacent to the origin server to access the option value conveyed in a ticket request (see <xref target="intermediaries-e2e-security-processing"/>), and to retrieve from it the transport-specific information about a phantom request. By doing so, the proxy becomes able to configure an observation of the target resource and to receive multicast notifications matching to the phantom request.</t>
        <t>Any proxy in the chain, as well as further possible intermediaries or on-path active adversaries, are thus able to remove the option or alter its content, before the ticket request reaches the proxy adjacent to the origin server.</t>
        <t>Removing the option would result in the proxy adjacent to the origin server to not configure the group observation, if that has not happened yet. In such a case, the proxy would not receive the corresponding multicast notifications to be forwarded back to the clients.</t>
        <t>Altering the option content would result in the proxy adjacent to the origin server to incorrectly configure a group observation (e.g., by indicating a wrong multicast IP address) hence preventing the correct reception of multicast notifications and their forwarding to the clients; or to configure bogus group observations that are currently not active on the origin server.</t>
        <t>In order to prevent what is described above, the ticket requests conveying the Listen-To-Multicast-Responses Option can be additionally protected hop-by-hop. This can be achieved by the client protecting the ticket request sent to the proxy using OSCORE (see <xref target="I-D.ietf-core-oscore-capable-proxies"/>) and/or DTLS <xref target="RFC9147"/>.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="media-type">
        <name>Media Type Registrations</name>
        <t>This document registers the media type "application/informative-response+cbor" for error messages as informative response defined in <xref target="ssec-server-side-informative"/>, when carrying parameters encoded in CBOR. This registration follows the procedures specified in <xref target="RFC6838"/>.</t>
        <ul spacing="normal">
          <li>Type name: application</li>
          <li>Subtype name: informative-response+cbor</li>
          <li>Required parameters: N/A</li>
          <li>Optional parameters: N/A</li>
          <li>Encoding considerations: Must be encoded as a CBOR map containing the parameters defined in <xref target="ssec-server-side-informative"/> of [RFC-XXXX].</li>
          <li>Security considerations: See <xref target="sec-security-considerations"/> of [RFC-XXXX].</li>
          <li>Interoperability considerations: N/A</li>
          <li>Published specification: [RFC-XXXX]</li>
          <li>Applications that use this media type: The type is used by CoAP servers and clients that support error messages as informative response defined in <xref target="ssec-server-side-informative"/> of [RFC-XXXX].</li>
          <li>Fragment identifier considerations: N/A</li>
          <li>Additional information: N/A</li>
          <li>Person &amp; email address to contact for further information: CoRE WG mailing list (core@ietf.org) or IETF Applications and Real-Time Area (art@ietf.org)</li>
          <li>Intended usage: COMMON</li>
          <li>Restrictions on usage: None</li>
          <li>Author/Change controller: IETF</li>
          <li>Provisional registration:  No</li>
        </ul>
      </section>
      <section anchor="content-format">
        <name>CoAP Content-Formats Registry</name>
        <t>IANA is asked to add the following entry to the "CoAP Content-Formats" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <t>Content Type: application/informative-response+cbor</t>
        <t>Content Coding: -</t>
        <t>ID: TBD</t>
        <t>Reference: [RFC-XXXX]</t>
      </section>
      <section anchor="iana-coap-options">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to enter the following option numbers to the "CoAP Option Numbers" registry within the "CoRE Parameters" registry group.</t>
        <artwork align="center"><![CDATA[
+--------+--------------------------------------+------------+
| Number |                 Name                 | Reference  |
+--------+--------------------------------------+------------+
|  TBD   |  Multicast-Response-Feedback-Divider | [RFC-XXXX] |
+--------+--------------------------------------+------------+
|  TBD   |  Listen-To-Multicast-Responses       | [RFC-XXXX] |
+--------+--------------------------------------+------------+
]]></artwork>
      </section>
      <section anchor="iana-informative-response-params">
        <name>Informative Response Parameters Registry</name>
        <t>This document establishes the "Informative Response Parameters" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group. The registry has been created to use the "Expert Review" registration procedure <xref target="RFC8126"/>. Expert review guidelines are provided in <xref target="iana-review"/>.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>Name: This is a descriptive name that enables easier reference to the item. The name MUST be unique. It is not used in the encoding.</li>
          <li>CBOR Key: This is the value used as CBOR key of the item. These values MUST be unique. The value can be a positive integer, a negative integer, or a string.</li>
          <li>CBOR Type: This contains the CBOR type of the item, or a pointer to the registry that defines its type, when that depends on another item.</li>
          <li>Reference: This contains a pointer to the public specification for the item.</li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="informative-response-params"/>. The "Reference" column for all of these entries refers to sections of this document.</t>
      </section>
      <section anchor="iana-transport-protocol-identifiers">
        <name>CoAP Transport Information Registry</name>
        <t>This document establishes the "CoAP Transport Information" registry within the "CoRE Parameters" registry group. The registry has been created to use the "Expert Review" registration procedure <xref target="RFC8126"/>. Expert review guidelines are provided in <xref target="iana-review"/>. It should be noted that, in addition to the expert review, some portions of the Registry require a specification, potentially a Standards Track RFC, to be supplied as well.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>Transport Protocol: This is a descriptive name that enables easier reference to the item. The name MUST be unique. It is not used in the encoding.</li>
          <li>Description: Text giving an overview of the transport protocol referred by this item.</li>
          <li>Value: CBOR abbreviation for the transport protocol referred by this item. Different ranges of values use different registration policies <xref target="RFC8126"/>. Integer values from -256 to 255 are designated as "Standards Action With Expert Review". Integer values from -65536 to -257 and from 256 to 65535 are designated as "Specification Required". Integer values greater than 65535 are designated as "Expert Review". Integer values less than -65536 are marked as "Private Use".</li>
          <li>Server Addr: List of elements providing addressing information of the server.</li>
          <li>Req Info: List of elements providing transport-specific information related to a pertinent CoAP request. Optional elements are prepended by '?'.</li>
          <li>Reference: This contains a pointer to the public specification for the item.</li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="transport-protocol-identifiers"/>. The "Reference" column for all of these entries refers to sections of this document.</t>
      </section>
      <section anchor="iana-target-attributes">
        <name>Target Attributes Registry</name>
        <t>IANA is asked to register the following entry in the "Target Attributes" registry within the "CoRE Parameters" registry group.</t>
        <artwork><![CDATA[
Attribute Name: gp-obs
Brief Description: Observable resource supporting group observation
Change Controller: IETF
Reference: Section 6 of [RFC-XXXX]
]]></artwork>
      </section>
      <section anchor="iana-review">
        <name>Expert Review Instructions</name>
        <t>The IANA registries established in this document are defined as "Expert Review". This section gives some general guidelines for what the experts should be looking for, but they are being designated as experts for a reason, so they should be given substantial latitude.</t>
        <t>Expert reviewers should take into consideration the following points:</t>
        <ul spacing="normal">
          <li>Point squatting should be discouraged. Reviewers are encouraged to get sufficient information for registration requests to ensure that the usage is not going to duplicate one that is already registered and that the point is likely to be used in deployments. The zones tagged as "Private Use" are intended for testing purposes and closed environments. Code points in other ranges should not be assigned for testing.</li>
          <li>Specifications are required for the "Standards Action With Expert Review" range of point assignment. Specifications should exist for "Specification Required" ranges, but early assignment before a specification is available is considered to be permissible. When specifications are not provided, the description provided needs to have sufficient information to identify what the point is being used for.</li>
          <li>Experts should take into account the expected usage of fields when approving point assignment. The fact that there is a range for Standards Track documents does not mean that a Standards Track document cannot have points assigned outside of that range. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size.</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.ietf-core-groupcomm-bis">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Chonggang Wang" initials="C." surname="Wang">
              <organization>InterDigital</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <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 and obsoletes RFC 7390, while it updates RFC 7252
   and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-10"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm">
          <front>
            <title>Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <date day="2" month="September" year="2023"/>
            <abstract>
              <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of CoAP messages exchanged between members of a group, e.g.,
   sent over IP multicast.  In particular, the described protocol
   defines how OSCORE is used in a group communication setting to
   provide source authentication for CoAP group requests, sent by a
   client to multiple servers, and for protection of the corresponding
   CoAP responses.  Group OSCORE also defines a pairwise mode where each
   member of the group can efficiently derive a symmetric pairwise key
   with any other member of the group for pairwise OSCORE communication.
   Group OSCORE can be used between endpoints communicating with CoAP or
   CoAP-mappable HTTP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-20"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for OSCORE Groups in ACE</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="6" month="March" year="2023"/>
            <abstract>
              <t>   This document defines an application profile of the ACE framework for
   Authentication and Authorization, to request and provision keying
   material in group communication scenarios that are based on CoAP and
   are secured with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  This application profile delegates the
   authentication and authorization of Clients, that 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-16"/>
        </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="RFC4944">
          <front>
            <title>Transmission of IPv6 Packets over IEEE 802.15.4 Networks</title>
            <author fullname="G. Montenegro" initials="G." surname="Montenegro"/>
            <author fullname="N. Kushalnagar" initials="N." surname="Kushalnagar"/>
            <author fullname="J. Hui" initials="J." surname="Hui"/>
            <author fullname="D. Culler" initials="D." surname="Culler"/>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document describes the frame format for transmission of IPv6 packets and the method of forming IPv6 link-local addresses and statelessly autoconfigured addresses on IEEE 802.15.4 networks. Additional specifications include a simple header compression scheme using shared context and provisions for packet delivery in IEEE 802.15.4 meshes. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4944"/>
          <seriesInfo name="DOI" value="10.17487/RFC4944"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </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="RFC7967">
          <front>
            <title>Constrained Application Protocol (CoAP) Option for No Server Response</title>
            <author fullname="A. Bhattacharyya" initials="A." surname="Bhattacharyya"/>
            <author fullname="S. Bandyopadhyay" initials="S." surname="Bandyopadhyay"/>
            <author fullname="A. Pal" initials="A." surname="Pal"/>
            <author fullname="T. Bose" initials="T." surname="Bose"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>There can be machine-to-machine (M2M) scenarios where server responses to client requests are redundant. This kind of open-loop exchange (with no response path from the server to the client) may be desired to minimize resource consumption in constrained systems while updating many resources simultaneously or performing high-frequency updates. CoAP already provides Non-confirmable (NON) messages that are not acknowledged by the recipient. However, the request/response semantics still require the server to respond with a status code indicating "the result of the attempt to understand and satisfy the request", per RFC 7252.</t>
              <t>This specification introduces a CoAP option called 'No-Response'. Using this option, the client can explicitly express to the server its disinterest in all responses against the particular request. This option also provides granular control to enable expression of disinterest to a particular response class or a combination of response classes. The server MAY decide to suppress the response by not transmitting it back to the client according to the value of the No-Response option in the request. This option may be effective for both unicast and multicast requests. This document also discusses a few examples of applications that benefit from this option.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7967"/>
          <seriesInfo name="DOI" value="10.17487/RFC7967"/>
        </reference>
        <reference anchor="RFC8085">
          <front>
            <title>UDP Usage Guidelines</title>
            <author fullname="L. Eggert" initials="L." surname="Eggert"/>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="G. Shepherd" initials="G." surname="Shepherd"/>
            <date month="March" year="2017"/>
            <abstract>
              <t>The User Datagram Protocol (UDP) provides a minimal message-passing transport that has no inherent congestion control mechanisms. This document provides guidelines on the use of UDP for the designers of applications, tunnels, and other protocols that use UDP. Congestion control guidelines are a primary focus, but the document also provides guidance on other topics, including message sizes, reliability, checksums, middlebox traversal, the use of Explicit Congestion Notification (ECN), Differentiated Services Code Points (DSCPs), and ports.</t>
              <t>Because congestion control is critical to the stable operation of the Internet, applications and other protocols that choose to use UDP as an Internet transport must employ mechanisms to prevent congestion collapse and to establish some degree of fairness with concurrent traffic. They may also need to implement additional mechanisms, depending on how they use UDP.</t>
              <t>Some guidance is also applicable to the design of other protocols (e.g., protocols layered directly on IP or via IP-based tunnels), especially when these protocols do not themselves provide congestion control.</t>
              <t>This document obsoletes RFC 5405 and adds guidelines for multicast UDP usage.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="145"/>
          <seriesInfo name="RFC" value="8085"/>
          <seriesInfo name="DOI" value="10.17487/RFC8085"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </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>
        <reference anchor="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
        <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="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="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="COSE.Algorithms" target="https://www.iana.org/assignments/cose/cose.xhtml#algorithms">
          <front>
            <title>COSE Algorithms</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="COSE.Key.Types" target="https://www.iana.org/assignments/cose/cose.xhtml#key-type">
          <front>
            <title>COSE Key Types</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="COSE.Header.Parameters" target="https://www.iana.org/assignments/cose/cose.xhtml#header-parameters">
          <front>
            <title>COSE Header Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <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="20" month="October" year="2023"/>
            <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-13"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-discovery">
          <front>
            <title>Discovery of OSCORE Groups with the CoRE Resource Directory</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
              <organization>Consultant</organization>
            </author>
            <date day="8" month="September" year="2023"/>
            <abstract>
              <t>   Group communication over the Constrained Application Protocol (CoAP)
   can be secured by means of Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  At deployment time, devices may
   not know the exact security groups to join, the respective Group
   Manager, or other information required to perform the joining
   process.  This document describes how a CoAP endpoint can use
   descriptions and links of resources registered at the CoRE Resource
   Directory to discover security groups and to acquire information for
   joining them through the respective Group Manager.  A given security
   group may protect multiple application groups, which are separately
   announced in the Resource Directory as sets of endpoints sharing a
   pool of resources.  This approach is consistent with, but not limited
   to, the joining of security groups based on the ACE framework for
   Authentication and Authorization in constrained environments.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-oscore-discovery-14"/>
        </reference>
        <reference anchor="I-D.ietf-core-coral">
          <front>
            <title>The Constrained RESTful Application Language (CoRAL)</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>ARM</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   The Constrained RESTful Application Language (CoRAL) defines a data
   model and interaction model as well as a compact serialization
   formats for the description of typed connections between resources on
   the Web ("links"), possible operations on such resources ("forms"),
   and simple resource metadata.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coral-05"/>
        </reference>
        <reference anchor="I-D.amsuess-core-cachable-oscore">
          <front>
            <title>Cacheable OSCORE</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   Group communication with the Constrained Application Protocol (CoAP)
   can be secured end-to-end using Group Object Security for Constrained
   RESTful Environments (Group OSCORE), also across untrusted
   intermediary proxies.  However, this sidesteps the proxies' abilities
   to cache responses from the origin server(s).  This specification
   restores cacheability of protected responses at proxies, by
   introducing consensus requests which any client in a group can send
   to one server or multiple servers in the same group.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-core-cachable-oscore-07"/>
        </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="20" month="October" year="2023"/>
            <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>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cbor-encoded-cert-07"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-capable-proxies">
          <front>
            <title>OSCORE-capable Proxies</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="18" month="October" year="2023"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) can be
   used to protect CoAP messages end-to-end between two endpoints at the
   application layer, also in the presence of intermediaries such as
   proxies.  This document defines how to use OSCORE for protecting CoAP
   messages also between an origin application endpoint and an
   intermediary, or between two intermediaries.  Also, it defines how to
   secure a CoAP message by applying multiple, nested OSCORE
   protections, e.g., both end-to-end between origin application
   endpoints, as well as between an application endpoint and an
   intermediary or between two intermediaries.  Thus, this document
   updates RFC 8613.  The same approach can be seamlessly used with
   Group OSCORE, for protecting CoAP messages when group communication
   with intermediaries is used.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-capable-proxies-00"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </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="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </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="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="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="RFC9176">
          <front>
            <title>Constrained RESTful Environments (CoRE) Resource Directory</title>
            <author fullname="C. Amsüss" initials="C." role="editor" surname="Amsüss"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="M. Koster" initials="M." surname="Koster"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>In many Internet of Things (IoT) applications, direct discovery of resources is not practical due to sleeping nodes or networks where multicast traffic is inefficient. These problems can be solved by employing an entity called a Resource Directory (RD), which contains information about resources held on other servers, allowing lookups to be performed for those resources. The input to an RD is composed of links, and the output is composed of links constructed from the information stored in the RD. This document specifies the web interfaces that an RD supports for web servers to discover the RD and to register, maintain, look up, and remove information on resources. Furthermore, new target attributes useful in conjunction with an RD are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9176"/>
          <seriesInfo name="DOI" value="10.17487/RFC9176"/>
        </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="MOBICOM99" target="https://people.eecs.berkeley.edu/~culler/cs294-f03/papers/bcast-storm.pdf">
          <front>
            <title>The Broadcast Storm Problem in a Mobile Ad Hoc Network</title>
            <author initials="S." surname="Ni" fullname="Sze-Yao Ni">
              <organization/>
            </author>
            <author initials="Y." surname="Tseng" fullname="Yu-Chee Tseng">
              <organization/>
            </author>
            <author initials="Y." surname="Chen" fullname="Yuh-Shyan Chen">
              <organization/>
            </author>
            <author initials="J." surname="Sheu" fullname="Jang-Ping Sheu">
              <organization/>
            </author>
            <date year="1999" month="August"/>
          </front>
          <seriesInfo name="Proceedings of the 5th annual ACM/IEEE international conference on Mobile computing and networking" value=""/>
        </reference>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) instead of a sequence
   of characters.  This simplifies parsing, comparison and reference
   resolution in environments with severe limitations on processing
   power, code size, and memory size.


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision -13 of this draft picks up some additional
   // discussion points and is intended as input to the CoRE WG meeting
   // at IETF 117.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-13"/>
        </reference>
      </references>
    </references>
    <section anchor="appendix-different-sources">
      <name>Different Sources for Group Observation Data</name>
      <t>While the clients usually receive the phantom registration request and other information related to the group observation through an informative response (see <xref target="ssec-server-side-informative"/>), the server can make the same data available through different means, such as the following ones.</t>
      <t>In such a case, the server has to first start the group observation (see <xref target="ssec-server-side-request"/>), before making the corresponding data available.</t>
      <t>A client that receives such information from different sources may be able to simply set up the right multicast address and start receiving multicast notifications for the group observation. In such a case, the client does not need to perform additional setup traffic, e.g., in order to configure a proxy for listening to multicast notifications on its behalf (see <xref target="intermediaries"/> and <xref target="intermediaries-e2e-security"/>). Consequently, the server will not receive an observation request due to that client, will not follow-up with a corresponding informative response, and thus its observer counter (see <xref target="sec-server-side"/>) is not incremented to reflect the presence of the new client.</t>
      <section anchor="topic-discovery-in-publish-subscribe-settings">
        <name>Topic Discovery in Publish-Subscribe Settings</name>
        <t>In a Publish-Subscribe scenario <xref target="I-D.ietf-core-coap-pubsub"/>, a group observation can be discovered along with topic metadata.</t>
        <t>To this end, together with topic metadata, the server has to publish the same information associated with the group observation that would be conveyed in the informative response returned to observer clients (see <xref target="ssec-server-side-informative"/>).</t>
        <t>This information especially includes the phantom observation request associated with the group observation, as well as the addressing information of the server and the addressing information where multicast notifications are sent to.</t>
        <t><xref target="discovery-pub-sub"/> provides an example where a group observation is discovered. The example assumes a CoRAL namespace <xref target="I-D.ietf-core-coral"/>, that contains properties analogous to those in the content-format application/informative-response+cbor.</t>
        <t>Note that the information about the transport protocol used for the group observation is not expressed through a dedicated element equivalent to 'tp_id' of the informative response (see <xref target="sssec-transport-specific-encoding"/>). Rather, it is expressed through the scheme component of the two URIs specified as 'tp_info_srv' and 'tp_info_cli', where the former specifies the addressing information of the server (like 'srv_host' and 'srv_port' in <xref target="ssssec-udp-transport-specific"/>), while the latter specifies the addressing information where multicast notifications are sent to (like 'cli_host' and 'cli_port' in <xref target="ssssec-udp-transport-specific"/>).</t>
        <figure anchor="discovery-pub-sub">
          <name>Group observation discovery in a Pub-Sub scenario</name>
          <artwork><![CDATA[
Request:

    GET </ps/topics?rt=oic.r.temperature>
    Accept: application/coral+cbor

Response:

    2.05 Content
    Content-Format: application/coral+cbor

    rdf:type [ = <http://example.org/pubsub/topic-list>,
           topic [ = </ps/topics/1234>,
               tp_info_srv <coap://[2001:db8::1]>,
               tp_info_token "7b"^^xsd::hexBinary,
               tp_info_cli <coap://[ff35:30:2001:db8::123]>,
               ph_req "0160.."^^xsd::hexBinary,
               last_notif "256105.."^^xsd::hexBinary,
           ]
    ]
]]></artwork>
        </figure>
        <t>With this information from the topic discovery step, the client can already set up its multicast address and start receiving multicast notifications for the group observation in question. Clients that are not directly able to listen to multicast notifications can instead rely on a proxy to do so on their behalf (see <xref target="intermediaries"/> and <xref target="intermediaries-e2e-security"/>).</t>
        <t>In heavily asymmetric networks like municipal notification services, discovery and notifications do not necessarily need to use the same network link. For example, a departure monitor could use its (costly and usually-off) cellular uplink to discover the topics it needs to update its display to, and then listen on a LoRA-WAN interface for receiving the actual multicast notifications.</t>
      </section>
      <section anchor="introspection-at-the-multicast-notification-sender">
        <name>Introspection at the Multicast Notification Sender</name>
        <t>For network debugging purposes, it can be useful to query a server that sends multicast responses as matching a phantom registration request.</t>
        <t>Such an interface is left for other documents to specify on demand. As an example, a possible interface can be as follows, and rely on the already known Token value of intercepted multicast notifications, associated with a phantom registration request.</t>
        <figure anchor="discovery-introspection">
          <name>Group observation discovery with server introspection</name>
          <artwork><![CDATA[
Request:

GET </.well-known/core/mc-sender?token=6464>

Response:

2.05 Content
Content-Format: application/informative-response+cbor

{
  / tp_info /    0 : [1, h'7b', h'20010db80100/.../0001', 5683,
                      h'ff35003020010db8/.../1234', 5683],
  / ph_req /     1 : h'0160/.../',
  / last_notif / 2 : h'256105/.../'
}
]]></artwork>
        </figure>
        <t>For example, a network sniffer could offer sending such a request when unknown multicast notifications are seen in a network. Consequently, it can associate those notifications with a URI, or decrypt them, if member of the correct OSCORE group.</t>
      </section>
    </section>
    <section anchor="appendix-pseudo-code-counting">
      <name>Pseudo-Code for Rough Counting of Clients</name>
      <t>This appendix provides a description in pseudo-code of the two algorithms used for the rough counting of active observers, as defined in <xref target="sec-rough-counting"/>.</t>
      <t>In particular, <xref target="appendix-pseudo-code-counting-client"/> describes the algorithm for the client side, while <xref target="appendix-pseudo-code-counting-client-constrained"/> describes an optimized version for constrained clients. Finally, <xref target="appendix-pseudo-code-counting-server"/> describes the algorithm for the server side.</t>
      <section anchor="appendix-pseudo-code-counting-client">
        <name>Client Side</name>
        <artwork><![CDATA[
input:  int Q, // Value of the MRFD option
        int LEISURE_TIME, // DEFAULT_LEISURE from RFC 7252,
                          // unless overridden

output: None


int RAND_MIN = 0;
int RAND_MAX = (2^Q) - 1;
int I = randomInteger(RAND_MIN, RAND_MAX);

if (I == 0) {
    float fraction = randomFloat(0, 1);

    Timer t = new Timer();
    t.setAndStart(fraction * LEISURE_TIME);
    while(!t.isExpired());

    Request req = new Request();
    // Initialize as NON and with maximum
    // No-Response settings, set options ...

    Option opt = new Option(OBSERVE);
    opt.set(0);
    req.setOption(opt);

    opt = new Option(MRFD);
    req.setOption(opt);

    req.send(SRV_ADDR, SRV_PORT);
}
]]></artwork>
      </section>
      <section anchor="appendix-pseudo-code-counting-client-constrained">
        <name>Client Side - Optimized Version</name>
        <artwork><![CDATA[
input:  int Q, // Value of the MRFD option
        int LEISURE_TIME, // DEFAULT_LEISURE from RFC 7252,
                          // unless overridden

output: None


const unsigned int UINT_BIT = CHAR_BIT * sizeof(unsigned int);

if (respond_to(Q) == true) {
    float fraction = randomFloat(0, 1);

    Timer t = new Timer();
    t.setAndStart(fraction * LEISURE_TIME);
    while(!t.isExpired());

    Request req = new Request();
    // Initialize as NON and with maximum
    // No-Response settings, set options ...

    Option opt = new Option(OBSERVE);
    opt.set(0);
    req.setOption(opt);

    opt = new Option(MRFD);
    req.setOption(opt);

    req.send(SRV_ADDR, SRV_PORT);
}

bool respond_to(int Q) {
    while (Q >= UINT_BIT) {
        if (rand() != 0) return false;
        Q -= UINT_BIT;
    }
    unsigned int mask = ~((~0u) << Q);
    unsigned int masked = mask & rand();
    return masked == 0;
}
]]></artwork>
      </section>
      <section anchor="appendix-pseudo-code-counting-server">
        <name>Server Side</name>
        <artwork><![CDATA[
input:  int COUNT, // Current observer counter
        int M, // Desired number of confirmations
        int MAX_CONFIRMATION_WAIT,
        Response notification, // Multicast notification to send

output: int NEW_COUNT // Updated observer counter


int D = 4; // Dampener value
int RETRY_NEXT_THRESHOLD = 4;
float CANCEL_THRESHOLD = 0.2;

int N = max(COUNT, 1);
int Q = max(ceil(log2(N / M)), 0);
Option opt = new Option(MRFD);
opt.set(Q);

notification.setOption(opt);
<Finalize the notification message>
notification.send(GRP_ADDR, GRP_PORT);

Timer t = new Timer();
t.setAndStart(MAX_CONFIRMATION_WAIT); // Time t1
while(!t.isExpired());

// Time t2

int R = <number of requests to the target resource
         between t1 and t2, with the MRFD option>;

int E = R * (2^Q);

// Determine after how many multicast notifications
// the next count update will be performed
if ((R == 0) || (max(E/N, N/E) > RETRY_NEXT_THRESHOLD)) {
    <Next count update with the next multicast notification>
}
else {
    <Next count update after 10 multicast notifications>
}

// Compute the new count estimate
int COUNT_PRIME = <current value of the observer counter>;
int NEW_COUNT = COUNT_PRIME + ((E - N) / D);

// Determine whether to cancel the group observation
if (NEW_COUNT < CANCEL_THRESHOLD) {
    <Cancel the group observation>;
    return 0;
}

return NEW_COUNT;
]]></artwork>
      </section>
    </section>
    <section anchor="self-managed-oscore-group">
      <name>OSCORE Group Self-Managed by the Server</name>
      <t>For simple settings, where no pre-arranged group with suitable memberships is available, the server can be responsible to setup and manage the OSCORE group used to protect the group observation.</t>
      <t>In such a case, a client would implicitly request to join the OSCORE group when sending the observe registration request to the server. When replying, the server includes the group keying material and related information in the informative response (see <xref target="ssec-server-side-informative"/>).</t>
      <t>Additionally to what is defined in <xref target="sec-server-side"/>, the CBOR map in the informative response payload contains the following fields, whose CBOR labels are defined in <xref target="informative-response-params"/>.</t>
      <ul spacing="normal">
        <li>
          <t>'gp_material': this element is a CBOR map, which includes what the client needs in order to set up the Group OSCORE Security Context.  </t>
          <t>
This parameter has as value a subset of the Group_OSCORE_Input_Material object, which is defined in <xref section="6.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/> and extends the OSCORE_Input_Material object encoded in CBOR as defined in <xref section="3.2.1" sectionFormat="of" target="RFC9203"/>.  </t>
          <t>
In particular, the following elements of the Group_OSCORE_Input_Material object are included, using the same CBOR labels from the OSCORE Security Context Parameters Registry, as in <xref section="6.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>.  </t>
          <ul spacing="normal">
            <li>
              <t>'ms', 'contexId', 'cred_fmt', 'sign_enc_alg', 'sign_alg' and 'sign_params'. These elements MUST be included.      </t>
              <t>
Editor's note: as per the text above, the referred version of <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> still uses 'sign_enc_alg' as parameter name. The next version of <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> will be updated in order to use 'gp_enc_alg' instead, consistently with the naming used in the latest version of <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
            </li>
            <li>'hkdf' and 'salt'. These elements MAY be included.</li>
          </ul>
          <t>
The 'group_senderId' element of the Group_OSCORE_Input_Material object MUST NOT be included.</t>
        </li>
        <li>'srv_cred': this element is a CBOR byte string, with value the original binary representation of the server's authentication credential used in the OSCORE group. In particular, the original binary representation complies with the format specified by the 'cred_fmt' element of 'gp_material'.</li>
        <li>'srv_identifier': this element MUST be included and is encoded as a CBOR byte string, with value the Sender ID that the server has in the OSCORE group.</li>
        <li>'exp': with value the expiration time of the keying material of the OSCORE group specified in the 'gp_material' parameter, encoded as a CBOR unsigned integer. This field contains a numeric value representing the number of seconds from 1970-01-01T00:00:00Z UTC until the specified UTC date/time, ignoring leap seconds, analogous to what is specified for NumericDate in <xref section="2" sectionFormat="of" target="RFC7519"/>.</li>
      </ul>
      <t>Note that the informative response does not require to include an explicit proof-of-possession (PoP) of the server's private key. Although the server is also acting as Group Manager and a PoP evidence of the Group Manager's private key is included in a full-fledged Join Response (see <xref section="6.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>), such proof-of-possession will be achieved through every multicast notification, that the server sends as protected with the group mode of Group OSCORE and including a signature computed with its private key.</t>
      <t>A client receiving an informative response uses the information above to set up the Group OSCORE Security Context, as described in <xref section="2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. Note that the client does not obtain a Sender ID of its own, hence it installs a Security Context that a "silent server" would, i.e., without Sender Context. From then on, the client uses the received keying material to process the incoming multicast notifications from the server.</t>
      <t>Since the server is also acting as Group Manager, the authentication credential of the server provided in the 'srv_cred' element of the informative response is also used in the 'gm_cred' element of the external_aad for encrypting and signing the phantom request and multicast notifications (see <xref section="4.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</t>
      <t>Furthermore, the server complies with the following points.</t>
      <ul spacing="normal">
        <li>
          <t>The server MUST NOT self-manage OSCORE groups and provide the related keying material in the informative response for any other purpose than the protection of group observations, as defined in this document.  </t>
          <t>
The server MAY use the same self-managed OSCORE group to protect the phantom request and the multicast notifications of multiple group observations it hosts.</t>
        </li>
        <li>The server MUST NOT provide in the informative response the keying material of other OSCORE groups it is or has been a member of.</li>
      </ul>
      <t>After the time indicated in the 'exp' field:</t>
      <ul spacing="normal">
        <li>
          <t>The server MUST stop using the keying material and MUST cancel the group observations for which that keying material is used (see <xref target="ssec-server-side-cancellation"/> and <xref target="ssec-server-side-cancellation-oscore"/>). If the server creates a new group observation as a replacement or follow-up using the same OSCORE group:  </t>
          <ul spacing="normal">
            <li>The server MUST update the OSCORE Master Secret.</li>
            <li>The server MUST update the ID Context used as Group Identifier (Gid), consistently with <xref section="3.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>.</li>
            <li>The server MAY update the OSCORE Master Salt.</li>
          </ul>
        </li>
        <li>The client MUST stop using the keying material and MAY re-register the observation at the server.</li>
      </ul>
      <t>Before the keying material has expired, the server can send a multicast response with response code 5.03 (Service Unavailable) to the observing clients, protected with the current keying material. In particular, this is an informative response (see <xref target="ssec-server-side-informative"/>), which: i) additionally contains the abovementioned parameters for the next group keying material to be used; and ii) MAY omit the 'tp_info' and 'ph_req' parameters, since the associated information is immutable throughout the observation lifetime. The response has the same Token value T of the phantom registration request and it does not include an Observe Option. The server MUST use its own Sender Sequence Number as Partial IV to protect the error response, and include it as Partial IV in the OSCORE Option of the response.</t>
      <t>When some clients leave the OSCORE group and forget about the group observation, the server does not have to provide the remaining clients with any stale Sender IDs, as normally required for Group OSCORE (see <xref section="3.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>). In fact, only two entities in the group have a Sender ID, i.e., the server and possibly the Deterministic Client, if the optimization defined in this appendix is combined with the use of phantom requests as deterministic requests (see <xref target="deterministic-phantom-Request"/>). In particular, both of them never change their Sender ID during the group lifetime, while they both remain part of the group until the group ceases to exist.</t>
      <t>As an alternative to renewing the keying material before it expires, the server can simply cancel the group observation (see <xref target="ssec-server-side-cancellation"/> and <xref target="ssec-server-side-cancellation-oscore"/>), which results in the eventual re-registration of the clients that are still interested in the group observation.</t>
      <t>Applications requiring backward security and forward security are REQUIRED to use an actual group joining process (usually through a dedicated Group Manager), e.g., the ACE joining procedure defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>. The server can facilitate the clients by providing them information about the OSCORE group to join, as described in <xref target="sec-inf-response"/>.</t>
    </section>
    <section anchor="deterministic-phantom-Request">
      <name>Phantom Request as Deterministic Request</name>
      <t>In some settings, the server can assume that all the approaching clients already have the exact phantom observation request to use, together with the transport-specific information required to listen to corresponding multicast notifications.</t>
      <t>For instance, the clients can be pre-configured with the phantom observation request, or they may be expected to retrieve it through dedicated means (see <xref target="appendix-different-sources"/>). In either case, the server would already have started the group observation, before the associated phantom observation request was disseminated.</t>
      <t>Then, the clients either set up their multicast address and group observation for listening to multicast notifications if directly able to, or rely on a proxy to do so on their behalf (see <xref target="intermediaries"/> and <xref target="intermediaries-e2e-security"/>).</t>
      <t>If Group OSCORE is used to protect the group observation (see <xref target="sec-secured-notifications"/>), and the OSCORE group supports the concept of Deterministic Client <xref target="I-D.amsuess-core-cachable-oscore"/>, then the server and each client in the OSCORE group can also independently compute the protected phantom observation request.</t>
      <t>In such a case, the unprotected version of the phantom observation request can be made available to the clients as a smaller, plain CoAP message. As above, this can be pre-configured on the clients, or they can obtain it through dedicated means (see <xref target="appendix-different-sources"/>). In either case, the clients and the server can independently protect the plain CoAP message by using the approach defined in <xref section="3" sectionFormat="of" target="I-D.amsuess-core-cachable-oscore"/>, thus all computing the same protected deterministic request. The latter is used as the actual phantom observation request, against which the protected multicast notifications will match for the group observation in question.</t>
      <t>If relying on a proxy, each client sends the deterministic request to the proxy as a ticket request (see <xref target="intermediaries-e2e-security"/>). However, differently from what is defined in <xref target="intermediaries-e2e-security"/> when the ticket request is not a deterministic request, the clients do not include a Listen-to-Multicast-Responses Option. This results in the proxy forwarding the ticket request (i.e., the phantom observation request) to the server and obtaining the information required to listen to multicast notifications, unless the proxy has already set itself to do so. Also, the proxy will be able to serve multicast notifications from its cache as per <xref target="I-D.amsuess-core-cachable-oscore"/>. An example considering such a setup is shown in <xref target="intermediaries-example-e2e-security-det"/>.</t>
      <t>Note that the phantom registration request is, in terms of transport-independent information, identical to the same deterministic request possibly sent by each client (e.g., if a proxy is deployed). Thus, if the server receives such a phantom registration request, the informative response may omit the 'ph_req' parameter (see <xref target="ssec-server-side-informative"/>). If a client receives an informative response that includes the 'ph_req' parameter, and this specifies transport-independent information different from the one of the sent deterministic request, then the client considers the informative response malformed.</t>
      <t>When using a deterministic request as phantom observation request, the observer counter at the server (see <xref target="sec-server-side"/>) is not reliably incremented when new clients start participating in the group observation. In fact:</t>
      <ul spacing="normal">
        <li>If a proxy is not deployed, the clients simply set up the right multicast address and starts listening to multicast notifications bound to the deterministic request. Hence, the observer counter at the server is not incremented as new clients start listening to multicast notifications.</li>
        <li>If a proxy is deployed, the origin server increments its observer counter after having sent the informative response to the proxy, as a reply to the deterministic request forwarded to the origin server on behalf of the first origin client that contacted the proxy. After that, the same deterministic request sent by any origin client will not be forwarded to the origin server, but will instead produce a cache hit at the proxy that will serve the client accordingly. Hence, the observer counter at the server is not further incremented as additional, new origin clients start participating in the group observation through the proxy.</li>
      </ul>
      <t>In either case, the security identity associated with the sender of any deterministic request in the OSCORE group is exactly the same one, i.e., the pair (SID, OSCORE ID Context), where SID is the OSCORE Sender ID of the deterministic client in the OSCORE group, which all the clients in the group rely on to produce deterministic requests.</t>
      <t>If the optimization defined in <xref target="self-managed-oscore-group"/> is also used, the 'gp_material' element in the informative response from the server MUST also include the following elements from the Group_OSCORE_Input_Material object.</t>
      <ul spacing="normal">
        <li>'alg', 'ecdh_alg', and 'ecdh_params', as per <xref section="6.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>.</li>
        <li>'det_senderId' and 'det_hash_alg', defined in <xref section="4" sectionFormat="of" target="I-D.amsuess-core-cachable-oscore"/>. These specify the Sender ID of the Deterministic Client in the OSCORE group, and the hash algorithm used to compute the deterministic request (see <xref section="3.4.1" sectionFormat="of" target="I-D.amsuess-core-cachable-oscore"/>).</li>
      </ul>
      <t>If a deterministic request is used as phantom observation request for a group observation, the server does not assist clients that are interested to take part to the group observation but do not support deterministic requests. This is consistent with the fact that the setup in question already relies on a lot of agreed pre-configuration.</t>
      <t>Therefore, the following holds when a group observation relies on a deterministic request as phantom observation request.</t>
      <ul spacing="normal">
        <li>Every client interested to take part to such a group observation: has to support deterministic requests; and has to know the phantom observation request, as a result of pre-configuration or following its retrieval through dedicated means (see <xref target="appendix-different-sources"/>).</li>
        <li>
          <t>When running such an observation request, the server does not simultaneously run a parallel group observation for the same target resource, as associated with a different phantom observation request and intended to clients that do not support deterministic requests.  </t>
          <t>
Upon receiving an individual observation request for the same target resource, the server MUST reply with a generic 5.03 (Service Unavailable) response (i.e., not the informative response defined in <xref target="ssec-server-side-informative"/>), if the request differs from the specific deterministic request associated with the group observation.</t>
        </li>
      </ul>
    </section>
    <section anchor="intermediaries-example">
      <name>Example with a Proxy</name>
      <t>This section provides an example when a proxy P is used between the clients and the server. The same assumptions and notation used in <xref target="sec-example-no-security"/> are used for this example. In addition, the proxy has address PRX_ADDR and listens to the port number PRX_PORT.</t>
      <t>Unless explicitly indicated, all messages transmitted on the wire are sent over unicast.</t>
      <figure anchor="example-proxy-no-oscore">
        <name>Example of group observation with a proxy</name>
        <artwork><![CDATA[
C1     C2     P        S
|      |      |        |
|      |      |        |  (The value of the resource /r is "1234")
|      |      |        |
+------------>|        |  Token: 0x4a
| GET  |      |        |  Observe: 0 register)
|      |      |        |  Proxy-Uri: coap://sensor.example/r
|      |      |        |
|      |      +------->|  Token: 0x5e
|      |      | GET    |  Observe: 0 (register)
|      |      |        |  Uri-Host: sensor.example
|      |      |        |  Uri-Path: r
|      |      |        |
|      |      |        |  (S allocates the available Token value 0x7b)
|      |      |        |
|      |      |        |  (S sends to itself a phantom observation
|      |      |        |  request PH_REQ as coming from the
|      |      |        |  IP multicast address GRP_ADDR)
|      |      |        |
|      |      |  ------+
|      |      | /      |
|      |      | \----->|  Token: 0x7b
|      |      |   GET  |  Observe: 0 (register)
|      |      |        |  Uri-Host: sensor.example
|      |      |        |  Uri-Path: r
|      |      |        |
|      |      |        |  (S creates a group observation of /r)
|      |      |        |
|      |      |        |  (S increments the observer counter
|      |      |        |  for the group observation of /r)
|      |      |        |
|      |      |        |
|      |      |        |
|      |      |<-------+  Token: 0x5e
|      |      | 5.03   |  Content-Format: application/
|      |      |        |     informative-response+cbor
|      |      |        |  Max-Age: 0
|      |      |        |  <Other options>
|      |      |        |  Payload: {
|      |      |        |    tp_info    : [1, bstr(SRV_ADDR), SRV_PORT,
|      |      |        |                  0x7b, bstr(GRP_ADDR),
|      |      |        |                  GRP_PORT],
|      |      |        |    last_notif : bstr(0x45 | OPT |
|      |      |        |                      0xff | PAYLOAD)
|      |      |        |  }
|      |      |        |
|      |      |        |  (PAYLOAD in 'last_notif' : "1234")
|      |      |        |
|      |      |        |
|      |      |        |  (The proxy starts listening to the
|      |      |        |   GRP_ADDR address and the GRP_PORT port.)
|      |      |        |
|      |      |        |  (The proxy adds C1 to its list of observers.)
|      |      |        |
|<------------+        |  Token: 0x4a
| 2.05 |      |        |  Observe: 54120
|      |      |        |  Content-Format: application/cbor
|      |      |        |  <Other options>
|      |      |        |  Payload: "1234"
|      |      |        |
:      :      :        :
:      :      :        :
:      :      :        :
|      |      |        |
|      +----->|        |  Token: 0x01
|      | GET  |        |  Observe: 0 (register)
|      |      |        |  Proxy-Uri: coap://sensor.example/r
|      |      |        |
|      |      |        |  (The proxy has a fresh cache representation)
|      |      |        |
|      |<-----+        |  Token: 0x01
|      | 2.05 |        |  Observe: 54120
|      |      |        |  Content-Format: application/cbor
|      |      |        |  <Other options>
|      |      |        |  Payload: "1234"
|      |      |        |
:      :      :        :
:      :      :        :  (The value of the resource
:      :      :        :  /r changes to "5678".)
:      :      :        :
|      |      |        |
|      |      |  (*)   |
|      |      |<-------+  Token: 0x7b
|      |      | 2.05   |  Observe: 11
|      |      |        |  Content-Format: application/cbor
|      |      |        |  <Other options>
|      |      |        |  Payload: "5678"
|      |      |        |
|<------------+        |  Token: 0x4a
| 2.05 |      |        |  Observe: 54123
|      |      |        |  Content-Format: application/cbor
|      |      |        |  <Other options>
|      |      |        |  Payload: "5678"
|      |      |        |
|      |<-----+        |  Token: 0x01
|      | 2.05 |        |  Observe: 54123
|      |      |        |  Content-Format: application/cbor
|      |      |        |  <Other options>
|      |      |        |  Payload: "5678"
|      |      |        |


(*) Sent over IP multicast to GROUP_ADDR:GROUP_PORT

]]></artwork>
      </figure>
      <t>Note that the proxy has all the information to understand the observation request from C2, and can immediately start to serve the still fresh values.</t>
      <t>This behavior is mandated by <xref section="5" sectionFormat="of" target="RFC7641"/>, i.e., the proxy registers itself only once with the next hop and fans out the notifications it receives to all registered clients.</t>
    </section>
    <section anchor="intermediaries-example-e2e-security">
      <name>Example with a Proxy and Group OSCORE</name>
      <t>This section provides an example when a proxy P is used between the clients and the server, and Group OSCORE is used to protect multicast notifications end-to-end between the server and the clients.</t>
      <t>The same assumptions and notation used in <xref target="sec-example-with-security"/> are used for this example. In addition, the proxy has address PRX_ADDR and listens to the port number PRX_PORT.</t>
      <t>Unless explicitly indicated, all messages transmitted on the wire are sent over unicast and protected with OSCORE end-to-end between a client and the server.</t>
      <figure anchor="example-proxy-oscore">
        <name>Example of group observation with a proxy and Group OSCORE</name>
        <artwork><![CDATA[
C1      C2      P         S
|       |       |         |
|       |       |         |  (The value of the resource /r is "1234")
|       |       |         |
+-------------->|         |  Token: 0x4a
| FETCH |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x01; piv: 101; ...}
|       |       |         |  Uri-Host: sensor.example
|       |       |         |  Proxy-Scheme: coap
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: r,
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       +-------->|  Token: 0x5e
|       |       | FETCH   |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x01; piv: 101; ...}
|       |       |         |  Uri-Host: sensor.example
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: r,
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       |         |
|       |       |         |  (S allocates the available
|       |       |         |   Token value 0x7b .)
|       |       |         |
|       |       |         |  (S sends to itself a phantom observation
|       |       |         |  request PH_REQ as coming from the
|       |       |         |  IP multicast address GRP_ADDR)
|       |       |         |
|       |       |  -------+
|       |       | /       |
|       |       | \------>|  Token: 0x7b
|       |       |   FETCH |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x05; piv: 501;
|       |       |         |           kid context: 0x57ab2e; ...}
|       |       |         |  Uri-Host: sensor.example
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: r,
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|       |       |         |  (S steps SN_5 in the Group OSCORE
|       |       |         |   Security Context : SN_5 <== 502)
|       |       |         |
|       |       |         |  (S creates a group observation of /r)
|       |       |         |
|       |       |         |
|       |       |         |  (S increments the observer counter
|       |       |         |  for the group observation of /r)
|       |       |         |
|       |       |<--------+  Token: 0x5e
|       |       | 2.05    |  OSCORE: {piv: 301; ...}
|       |       |         |  Max-Age: 0
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    5.03 (Service Unavailable),
|       |       |         |    Content-Format: application/
|       |       |         |       informative-response+cbor,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    CBOR_payload {
|       |       |         |       tp_info : [1, bstr(SRV_ADDR),
|       |       |         |                  SRV_PORT, 0x7b,
|       |       |         |                  bstr(GRP_ADDR), GRP_PORT],
|       |       |         |       ph_req : bstr(0x05 | OPT | 0xff |
|       |       |         |                     PAYLOAD | SIGN),
|       |       |         |       last_notif : bstr(0x45 | OPT | 0xff |
|       |       |         |                         PAYLOAD | SIGN),
|       |       |         |       join_uri : "coap://myGM/
|       |       |         |                   ace-group/myGroup",
|       |       |         |       sec_gp : "myGroup"
|       |       |         |    }
|       |       |         |  }
|       |       |         |
|<--------------+         |  Token: 0x4a
| 2.05  |       |         |  OSCORE: {piv: 301; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload)
|       |       |         |
|       |       |         |
+-------------->|         |  Token: 0x4b
| FETCH |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x05 ; piv: 501;
|       |       |         |           kid context: 0x57ab2e; ...}
|       |       |         |  Uri-Host: sensor.example
|       |       |         |  Proxy-Scheme: coap
|       |       |         |  Listen-To-
|       |       |         |  Multicast-Responses: {[1, bstr(SRV_ADDR),
|       |       |         |                         SRV_PORT, 0x7b,
|       |       |         |                         bstr(GRP_ADDR),
|       |       |         |                         GRP_PORT]
|       |       |         |                       }
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: r
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|       |       |         |  (The proxy starts listening to the
|       |       |         |   GRP_ADDR address and the GRP_PORT port.)
|       |       |         |
|       |       |         |  (The proxy adds C1 to
|       |       |         |   its list of observers.)
|       |       |         |
|<--------------|         |
|       |  ACK  |         |
:       :       :         :
:       :       :         :
:       :       :         :
|       |       |         |
|       +------>|         |  Token: 0x01
|       | FETCH |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x02; piv: 201; ...}
|       |       |         |  Uri-Host: sensor.example
|       |       |         |  Proxy-Scheme: coap
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: r,
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       +-------->|  Token: 0x5f
|       |       | FETCH   |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x02; piv: 201; ...}
|       |       |         |  Uri-Host: sensor.example
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: r,
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       |         |  (S increments the observer counter
|       |       |         |  for the group observation of /r)
|       |       |         |
|       |       |<--------+  Token: 0x5f
|       |       | 2.05    |  OSCORE: {piv: 401; ...}
|       |       |         |  Max-Age: 0
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    5.03 (Service Unavailable),
|       |       |         |    Content-Format: application/
|       |       |         |       informative-response+cbor,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    CBOR_payload {
|       |       |         |       tp_info : [1, bstr(SRV_ADDR),
|       |       |         |                  SRV_PORT, 0x7b,
|       |       |         |                  bstr(GRP_ADDR), GRP_PORT],
|       |       |         |       ph_req : bstr(0x05 | OPT | 0xff |
|       |       |         |                     PAYLOAD | SIGN),
|       |       |         |       last_notif : bstr(0x45 | OPT | 0xff |
|       |       |         |                         PAYLOAD | SIGN),
|       |       |         |       join_uri : "coap://myGM/
|       |       |         |                   ace-group/myGroup",
|       |       |         |       sec_gp : "myGroup"
|       |       |         |    }
|       |       |         |  }
|       |       |         |
|       |<------+         |  Token: 0x01
|       | 2.05  |         |  OSCORE: {piv: 401; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload)
|       |       |         |
|       +------>|         |  Token: 0x02
|       | FETCH |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x05; piv: 501;
|       |       |         |           kid context: 57ab2e; ...}
|       |       |         |  Uri-Host: sensor.example
|       |       |         |  Proxy-Scheme: coap
|       |       |         |  Listen-To-
|       |       |         |  Multicast-Responses: {[1, bstr(SRV_ADDR),
|       |       |         |                         SRV_PORT, 0x7b,
|       |       |         |                         bstr(GRP_ADDR),
|       |       |         |                         GRP_PORT]
|       |       |         |                       }
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: r
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|       |       |         |  (The proxy adds C2 to
|       |       |         |   its list of observers.)
|       |<------|         |
|       |  ACK  |         |
|       |       |         |
:       :       :         :
:       :       :         :  (The value of the resource
:       :       :         :  /r changes to "5678".)
:       :       :         :
|       |       |   (*)   |
|       |       |<--------+  Token: 0x7b
|       |       | 2.05    |  Observe: 11
|       |       |         |  OSCORE: {kid: 0x05; piv: 502; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    2.05 (Content),
|       |       |         |    Observe: [empty],
|       |       |         |    Content-Format: application/cbor,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    CBOR_Payload: "5678"
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|<--------------+         |  Token: 0x4b
| 2.05  |       |         |  Observe: 54123
|       |       |         |  OSCORE: {kid: 0x05; piv: 502; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload and Signature)
|       |       |         |
|       |<------+         |  Token: 0x02
|       | 2.05  |         |  Observe: 54123
|       |       |         |  OSCORE: {kid: 0x05; piv: 502; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload and signature)
|       |       |         |


(*) Sent over IP multicast to GROUP_ADDR:GROUP_PORT and protected
    with Group OSCORE end-to-end between the server and the clients.

]]></artwork>
      </figure>
      <t>Unlike in the unprotected example in <xref target="intermediaries-example"/>, the proxy does <em>not</em> have all the information to perform request deduplication, and can only recognize the identical request once the client sends the ticket request.</t>
    </section>
    <section anchor="intermediaries-example-e2e-security-det">
      <name>Example with a Proxy and Deterministic Requests</name>
      <t>This section provides an example when a proxy P is used between the clients and the server, and Group OSCORE is used to protect multicast notifications end-to-end between the server and the clients.</t>
      <t>In addition, the phantom request is especially a deterministic request (see <xref target="deterministic-phantom-Request"/>), which is protected with the pairwise mode of Group OSCORE as defined in <xref target="I-D.amsuess-core-cachable-oscore"/>.</t>
      <section anchor="intermediaries-example-e2e-security-det-intro">
        <name>Assumptions and Walkthrough</name>
        <t>The example provided in this appendix as reflected by the message exchange shown in <xref target="intermediaries-example-e2e-security-det-exchange"/> assumes the following.</t>
        <ol spacing="normal" type="1"><li>The OSCORE group supports deterministic requests. Thus, the server creates the phantom request as a deterministic request <xref target="I-D.amsuess-core-cachable-oscore"/>, stores it locally as one of its issued phantom requests, and starts the group observation.</li>
          <li>The server makes the phantom request available through other means, e.g., a pub-sub broker, together with the transport-specific information for listening to multicast notifications bound to the phantom request (see <xref target="appendix-different-sources"/>).</li>
          <li>Since the phantom request is a deterministic request, the server can more efficiently make it available in its smaller, plain version. The clients can obtain it from the particular alternative source and protect it as per <xref section="3" sectionFormat="of" target="I-D.amsuess-core-cachable-oscore"/>, thus all computing the same deterministic request to be used as phantom observation request.</li>
          <li>If the client does not rely on a proxy between itself and the server, it simply sets the group observation and starts listening to multicast notifications. Building on point (2) above, the same would happen if the phantom request would not be specifically a deterministic request.</li>
          <li>If the client relies on a proxy between itself and the server, it uses the phantom request as a ticket request (see <xref target="intermediaries-e2e-security"/>). However, unlike the case considered in <xref target="intermediaries-e2e-security"/> when the ticket request is not deterministic, the client does not include a Listen-to-Multicast-Responses Option in the phantom request sent to the proxy.</li>
          <li>Unlike for the case considered in <xref target="intermediaries-e2e-security"/>, here the proxy does not know that the request is exactly a ticket request for subscribing to multicast notifications. Thus, the proxy simply forwards the ticket request to the server as it normally does for any request.</li>
          <li>The server receives the ticket request, which is a deviation from the case where the ticket request is not deterministic and stops at the proxy (see <xref target="intermediaries-e2e-security"/>). Then, the server can clearly understand what is happening. In fact, as the result of an early check, the server recognizes the phantom request among the stored ones. This happens through a byte-by-byte comparison of the incoming message minus the transport-related fields, i.e., by considering only: i) the outer REST code; ii) the outer options; and iii) the ciphertext from the message payload.</li>
          <li>Having recognized the incoming request as one of the self-generated deterministic phantom requests made available at external sources, the server does not perform any OSCORE processing on it. This opens for replying to the proxy with an unprotected response, although not signaling any OSCORE-related error.</li>
          <li>The server starts the group observation and replies with an error response, i.e., the usual 5.03 informative response, including: the transport information, the phantom request, and (optionally) the latest notification.</li>
          <li>From the received 5.03 response, the proxy retrieves everything needed to set itself as an observer in the group observation, and it starts listening to multicast notifications. If the 5.03 response included a latest notification, the proxy caches it and forwards it back to the client, otherwise it replies with an empty ACK (if it has not done it already and the request from the client was Confirmable).</li>
          <li>Like in the case with a non-deterministic phantom request considered in <xref target="intermediaries-e2e-security"/>, the proxy fans out the multicast notifications to the origin clients as they come. Also, as new clients following the first one contact the proxy, this does not have to contact the server again as in <xref target="intermediaries-e2e-security"/>, since the deterministic phantom request would produce a cache hit as per <xref target="I-D.amsuess-core-cachable-oscore"/>. Thus, the proxy can serve such clients with the latest fresh multicast notification from its cache.</li>
        </ol>
      </section>
      <section anchor="intermediaries-example-e2e-security-det-exchange">
        <name>Message Exchange</name>
        <t>The same assumptions and notation used in <xref target="sec-example-with-security"/> are used for this example. As a recap of some specific value:</t>
        <ul spacing="normal">
          <li>Two clients C_1 and C_2 register to observe a resource /r at a Server S, which has address SRV_ADDR and listens to the port number SRV_PORT. Before the following exchanges occur, no clients are observing the resource /r , which has value "1234".</li>
          <li>The server S sends multicast notifications to the IP multicast address GRP_ADDR and port number GRP_PORT, and starts the group observation already after creating the deterministic phantom request to early disseminate.</li>
          <li>S is a member of the OSCORE group with 'kid context' = 0x57ab2e as Group ID. In the OSCORE group, S has 'kid' = 0x05 as Sender ID, and SN_5 = 501 as Sender Sequence Number.</li>
        </ul>
        <t>In addition:</t>
        <ul spacing="normal">
          <li>The proxy has address PRX_ADDR and listens to the port number PRX_PORT.</li>
          <li>The deterministic client in the OSCORE group has 'kid' = 0x09.</li>
        </ul>
        <t>Unless explicitly indicated, all messages transmitted on the wire are sent over unicast and protected with Group OSCORE end-to-end between a client and the server.</t>
        <artwork><![CDATA[
C1      C2      P         S
|       |       |         |
|       |       |         |  (The value of the resource /r is "1234")
|       |       |         |
|       |       |         |  (S allocates the available
|       |       |         |   Token value 0x7b .)
|       |       |         |
|       |       |         |  (S sends to itself a phantom observation
|       |       |         |   request PH_REQ as coming from the
|       |       |         |   IP multicast address GRP_ADDR.
|       |       |         |   The OSCORE processing occurs as
|       |       |         |   specified for a deterministic request)
|       |       |         |
|       |       |  -------|
|       |       | /       |
|       |       | \------>|  Token: 0x7b
|       |       |   FETCH |  Uri-Host: sensor.example
|       |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x09 ; piv: 0 ;
|       |       |         |           kid context: 0x57ab2e ; ... }
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: r,
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       |         |  (S creates a group observation of /r)
|       |       |         |
|       |       |         |  (The server does not respond to PH_REQ.
|       |       |         |   The server stores PH_REQ locally and
|       |       |         |   makes it available at an external source)
|       |       |         |
|       |       |         |
|       |       |         |  (C1 obtains PH_REQ and sends it to P)
|       |       |         |
|       |       |         |
+-------------->|         |  Token: 0x4a
| FETCH |       |         |  Uri-Host: sensor.example
|       |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x09 ; piv: 0 ;
|       |       |         |           kid context: 0x57ab2e ; ... }
|       |       |         |  Proxy-Scheme: coap
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: r,
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       +-------->|  Token: 0x5e
|       |       | FETCH   |  Uri-Host: sensor.example
|       |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x09 ; piv: 0 ;
|       |       |         |           kid context: 0x57ab2e ; ... }
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: r,
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       |         |  (S recognizes PH_REQ through byte-by-byte
|       |       |         |   comparison against the stored one, and
|       |       |         |   skips any OSCORE processing)
|       |       |         |
|       |       |         |  (S prepares the "last notification"
|       |       |         |   response defined below)
|       |       |         |
|       |       |         |  0x45 (2.05 Content)
|       |       |         |  Observe: 10
|       |       |         |  OSCORE: {kid: 0x05 ; piv: 501 ; ...}
|       |       |         |  Max-Age: 3000
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x45 (2.05 Content),
|       |       |         |    Observe: [empty],
|       |       |         |    CBOR_Payload: "1234"
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|       |       |         |  (S increments the observer counter
|       |       |         |  for the group observation of /r)
|       |       |         |
|       |       |         |  (S responds to the proxy with an
|       |       |         |   unprotected informative response)
|       |       |         |
|       |       |<--------|  Token: 0x5e
|       |       | 5.03    |  Content-Format: application/
|       |       |         |    informative-response+cbor
|       |       |         |  Max-Age: 0
|       |       |         |  0xff,
|       |       |         |  CBOR_payload {
|       |       |         |     tp_info : [1, bstr(SRV_ADDR), SRV_PORT,
|       |       |         |                0x7b, bstr(GRP_ADDR),
|       |       |         |                GRP_PORT],
|       |       |         |     last_notif : <the "last notification"
|       |       |         |                   response prepared above>
|       |       |         |    }
|       |       |         |  }
|       |       |         |
|       |       |         |  (P extracts PH_REQ and starts listening
|       |       |         |   to multicast notifications with Token
|       |       |         |   0x7b at GRP_ADDR:GRP_PORT)
|       |       |         |
|       |       |         |  (P extracts the "last notification"
|       |       |         |   response, caches it and forwards
|       |       |         |   it back to C1)
|       |       |         |
|<--------------+         |  Token: 0x4a
| 2.05  |       |         |  Observe: 54120
|       |       |         |  OSCORE: {kid: 0x05 ; piv: 501 ; ...}
|       |       |         |  Max-Age: 2995
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x45 (2.05 Content),
|       |       |         |    Observe: [empty],
|       |       |         |    CBOR_Payload: "1234"
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
:       :       :         |
:       :       :         |
:       :       :         |
|       |       |         |
|       |       |         |  (C2 obtains PH_REQ and sends it to P)
|       |       |         |
|       +------>|         |  Token: 0x01
|       | FETCH |         |  Uri-Host: sensor.example
|       |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x09 ; piv: 0 ;
|       |       |         |           kid context: 0x57ab2e; ...}
|       |       |         |  Proxy-Scheme: coap
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: r,
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       |         |  (P serves C2 from it cache)
|       |       |         |
|       |<------+         |  Token: 0x01
|       | 2.05  |         |  Observe: 54120
|       |       |         |  OSCORE: {kid: 0x05 ; piv: 501 ; ...}
|       |       |         |  Max-Age: 1800
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x45 (2.05 Content),
|       |       |         |    Observe: [empty],
|       |       |         |    CBOR_Payload: "1234"
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
:       :       :         |
:       :       :         |
:       :       :         |
|       |       |         |
|       |       |         |  (The value of the resource
|       |       |         |   /r changes to "5678".)
|       |       |         |
|       |       |   (*)   |
|       |       |<--------|  Token: 0x7b
|       |       | 2.05    |  Observe: 11
|       |       |         |  OSCORE: {kid: 0x05; piv: 502 ; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x45 (2.05 Content),
|       |       |         |    Observe: [empty],
|       |       |         |    Content-Format: application/cbor,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    CBOR_Payload: "5678"
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|       |       |         |  (P updates its cache entry
|       |       |         |   with this notification)
|       |       |         |
|<--------------+         |  Token: 0x4a
| 2.05  |       |         |  Observe: 54123
|       |       |         |  OSCORE: {kid: 0x05; piv: 502 ; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload and signature)
|       |       |         |
|       |<------+         |  Token: 0x01
|       | 2.05  |         |  Observe: 54123
|       |       |         |  OSCORE: {kid: 0x05; piv: 502 ; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload and signature)
|       |       |         |


(*) Sent over IP multicast to GROUP_ADDR:GROUP_PORT and protected
    with Group OSCORE end-to-end between the server and the clients.
]]></artwork>
      </section>
    </section>
    <section anchor="sec-document-updates">
      <name>Document Updates</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION.</t>
      <section anchor="sec-06-07">
        <name>Version -06 to -07</name>
        <ul spacing="normal">
          <li>Added more details on proxies that do not support the Multicast-Response-Feedback-Divider Option.</li>
          <li>Added more details on the reliability of the client rough counting.</li>
          <li>Added more details on the unreliability of counting new clients, when the phantom request is obtained from other sources or is an OSCORE deterministic request.</li>
          <li>Revised parameter naming.</li>
          <li>Fixes in IANA considerations.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-05-06">
        <name>Version -05 to -06</name>
        <ul spacing="normal">
          <li>Clarified rough counting of clients when a proxy is used</li>
          <li>IANA considerations: registration of target attribute "gp-obs"</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>If the phantom request is an OSCORE deterministic request, there is no parallel group observation for clients that lack support.</li>
          <li>Clarification on pre-configured clients.</li>
          <li>Clarified early publication of phantom request.</li>
          <li>Fixes in IANA considerations.</li>
          <li>Fixed example with proxy and Group OSCORE.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>Added a new section on prerequisites.</li>
          <li>Added a new section overviewing alternative variants.</li>
          <li>Consistent renaming of 'cli_addr' to 'cli_host' in 'tp_info'.</li>
          <li>Added pre-requirements for early retrieval of phantom request.</li>
          <li>Revised example with early retrieval of phantom request.</li>
          <li>Clarified use, rationale and example of phantom request as deterministic request.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>Distinction between authentication credential and public key.</li>
          <li>Fixed processing of informative response at the client, when Group OSCORE is used.</li>
          <li>Discussed scenarios with pre-configured address/port and Token value.</li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>Clarifications on client rough counting and IP multicast scope.</li>
          <li>The 'ph_req' parameter is optional in the informative response.</li>
          <li>New parameter 'next_not_before' for the informative response.</li>
          <li>Optimization when rekeying the self-managed OSCORE group.</li>
          <li>Security considerations on unsecured multicast notifications.</li>
          <li>Protection of the ticket request sent to a proxy.</li>
          <li>RFC8126 terminology in IANA considerations.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>Simplified cancellation of the group observation, without using a phantom cancellation request.</li>
          <li>Aligned parameter semantics with core-oscore-groupcomm and ace-key-groupcomm-oscore.</li>
          <li>Clarifications about self-managed OSCORE group and use of deterministic requests for cacheable OSCORE.</li>
          <li>New example with a proxy, Group OSCORE and a deterministic phantom request.</li>
          <li>Fixes in the examples and editorial improvements.</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowldegment">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Carsten Bormann"/>, <contact fullname="Klaus Hartke"/>, <contact fullname="Jaime Jiménez"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Jim Schaad"/>, <contact fullname="Ludwig Seitz"/>, and <contact fullname="Göran Selander"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
JTJxW4OcvVzY2K7mpNW6ikHL6hil4NCKWNucAF97l9yg5NF55xsLcmKyms6G
ZueKgC7oRWzWoIh2Tw2VZE+AdXGIPrqyp6Egk6cif36BY4VcUIPbryWyFMg2
i27klrWy5rJs7QcjByNgWemCaQTdroO3n17K3A1dstv69FBZgeQ6m1g/WLbV
UuFHxzYsHL+auNd2U8st4HWnaB0/FONnie8I9K96ZR3zaM5opjf3SWAyuSDj
fLScc68kdHyQL3aplXelt8qy7O7+FOiO0GrvEXMPmw3JrmiN6yUb+UkMsHY7
lQTfJnQ3qEkaO5P1SLCRgzTPWtDCsDZw3elOIKXI3fUywL2mkmyxqSijSYBC
CpBSBW5pUzeGf+SF/x4WLr9e4vRkFpZuCxsNu+7H4K+1P+Bnw03nlul27a+M
lvLHqkPZcNOy5Z09+ysmWUfrj+UkaMs7+3ceCyUuHOvNkCu7f4we2LGWcFdu
MZaT9i3vPLS/VrV1NRqubrhJ3/Lco1u9H5fu7Pjc41u9P3079tJjP0Zf2V8R
FDs8Stv7I6CGbybzyr70xH9/xfxXizeAsm/i2ZU+9/Wt5kchwb5NOLZ76/eZ
eun7e+b9Or6H1w/IQORb398378/jhV0Xvj+b9OdxBgre2DMh00KKd28QmM5G
Hphf6wi+aqDUdgDFgR7eaaDkvYOXvKJH5tf6NekYCLjKpdI0FOurfJTPLKMh
/7UVhRbyQN/uoZ2vlPnca+1lptFRImcUJfQoYBp2fDvvw+140qHbxE3kYPJ/
3MFh0hNGUe8z4vlRxn5CDWICSmX3e90ZNavZZ6/GO1GeuDLtZW/BQHsaHvEu
VXXCj3TD1otFAoyxxFdK7r3nSsWyQa8FevtpmvSCHHM2o5NxCvLbQfRqlmBU
MnVQGZn3XQCgdZ46e3BbRVzF5ocP/35x8vzZzz9vWiUFR7WyTeW4B53M2nGC
3ST5W1zaVREvprVy4q471nfNftn8tPVhcmKbW4BOcoE/rORj9Ec6ro/RRfEu
OgTEIKHhb3QVPQGCnc/mqtZS1j/W/vV/9R/++Bn3BeIoXrYxTkHkgLHPiCit
6/kRDqn/J/j5yTjV9Ssym8iwt9tX61e3Huf18SvzFf6uqc0qLn0koWws75IC
sXJf0j+4th4kCKhP4UeqW3XvS7KgA+MIgv1OlbJf6tzr1Q6YAL5hkEiIwGWA
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
SjVeKdyzaYQTFjzd6jze6qy3Vv4fFa1FYRK2AgA=

-->

</rfc>
