<?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-08" 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-08"/>
    <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="2024" month="March" day="04"/>
    <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 <xref target="I-D.ietf-core-groupcomm-bis"/>, e.g., over IP multicast. 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 addressed to multiple clients, e.g., 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"/>, CDDL <xref target="RFC8610"/>, 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 some clients are not able to directly 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 for clients to opt in for receiving 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 set up 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 start 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>Without proxy - This is the simplest network configuration, where the clients participating in 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 in 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 the corresponding observer 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 that the server 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' (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, i.e., the source addressing information of the multicast notifications that are sent for the group observation. Such addressing information MUST be equal to the destination addressing information of the registration requests sent by the clients to observe the target resource at the server.</t>
          <t>The 'srv_addr' element includes at least one inner 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 of 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 set to 0. As per <xref section="3.2" sectionFormat="of" target="RFC7252"/>, this is represented with an empty option value (a zero-length sequence of bytes). 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 a 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 notification of such a burst.</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 value 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 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"/>. The mechanism defined in this section 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 at 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>
        </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 in the group observation.</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 listens 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 the proxy 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 that listens to an IP multicast address and port number 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 origin 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 origin 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 client includes: the outer option Proxy-Uri or Proxy-Cri <xref target="I-D.ietf-core-href"/>; or the outer options (Uri-Host, Uri-Port), together with the outer option Proxy-Scheme or Proxy-Scheme-Number <xref target="I-D.ietf-core-href"/>. These options are set in order to specify the same request URI of 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 in 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 the option Proxy-Uri, or Proxy-Scheme, or Proxy-Cri, or Proxy-Scheme-Number from the ticket request.</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 listens 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">exi</td>
            <td align="left">15</td>
            <td align="left">uint</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">exp</td>
            <td align="left">16</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="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="9" month="January" year="2024"/>
            <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 –14 of this draft picks up comments from the
   // shepherd review and adds sections on CoAP integration and on cri
   // application-oriented literals for the Extended Diagnostic
   // Notation.  This revision still contains open issues and is
   // intended to serve as a snapshot while the processing of the
   // shepherd review is being completed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-14"/>
        </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="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="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="4" month="March" year="2024"/>
            <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-06"/>
        </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="January" year="2024"/>
            <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-08"/>
        </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="4" month="March" year="2024"/>
            <abstract>
              <t>   This document specifies a CBOR encoding of X.509 certificates.  The
   resulting certificates are called C509 Certificates.  The CBOR
   encoding supports a large subset of RFC 5280 and all certificates
   compatible with the RFC 7925, IEEE 802.1AR (DevID), CNSA, RPKI, GSMA
   eUICC, and CA/Browser Forum Baseline Requirements profiles.  When
   used to re-encode DER encoded X.509 certificates, the CBOR encoding
   can in many cases reduce the size of RFC 7925 profiled certificates
   with over 50% while also significantly reducing memory and code size
   compared to ASN.1.  The CBOR encoded structure can alternatively be
   signed directly ("natively signed"), which does not require re-
   encoding for the signature to be verified.  The document also
   specifies C509 Certificate Signing Requests, C509 COSE headers, a
   C509 TLS certificate type, and a C509 file format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cbor-encoded-cert-09"/>
        </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="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>
      </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);
    opt.set(0);
    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);
    opt.set(0);
    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
         received between t1 and t2, and including
         the MRFD option with value 0>;

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 set up 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>
          <t>
Note that no information is provided as related to the AEAD Algorithm, or to the Pairwise Key Agreement Algorithm and its parameters. In fact, the clients and the server will never use the pairwise mode of Group OSCORE as per <xref section="9" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, and will not need to compute a cofactor Diffie-Hellman shared secret in this OSCORE group. It follows that:  </t>
          <ul spacing="normal">
            <li>In the Common Context of the Group OSCORE Security Context, the parameter AEAD Algorithm and the parameter Pairwise Key Agreement Algorithm are not set (see <xref section="2.1.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> and <xref section="2.1.9" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</li>
            <li>Consistently, when building the two OSCORE 'external_aad' to process messages protected with Group OSCORE in this OSCORE group, (see <xref section="4.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), the elements 'alg_aead' and 'alg_pairwise_key_agreement' within the 'algorithms' arrays are set to the CBOR simple value <tt>null</tt> (0xf6).</li>
          </ul>
        </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>'exi': this element has as value the residual lifetime of the keying material of the OSCORE group specified in the 'gp_material' parameter, encoded as a CBOR unsigned integer. The value represents the residual lifetime of the keying material in seconds, i.e., the number of seconds between the current time at the server and the time when the keying material expires. Upon receiving the informative response containing the 'exi' parameter, a client determines the expiration time of the keying material by adding the seconds specified in the 'exi' parameter to its current time.</li>
      </ul>
      <t>If the server has a reliable way to synchronize its internal clock with UTC, then the server includes also the following field:</t>
      <ul spacing="normal">
        <li>'exp': this element has as value the expiration time of the keying material of the OSCORE group specified in the 'gp_material' parameter, encoded as a CBOR unsigned integer. The value represents 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>If a client has a reliable way to synchronize its internal clock with UTC and the 'exp' parameter is present in the informative response, then the client MUST use the 'exp' parameter value as expiration time for the group keying material.</t>
      <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 the phantom requests and the multicast notifications in group observations that it hosts, 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 that 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>Upon expiration of the group keying material as indicated in the informative response by the 'exp' parameter (if present) and the 'exi' parameter:</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"/>) that: 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, and 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 or 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 the multicast address and group observation for listening to multicast notifications (if able to directly do so), 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 a 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 port number, 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', 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>Note that, like in <xref target="self-managed-oscore-group"/>, no information is provided as related to the Pairwise Key Agreement Algorithm and its parameters. In fact, the clients and the server will not need to compute a cofactor Diffie-Hellman shared secret in this OSCORE group. It follows that:</t>
      <ul spacing="normal">
        <li>In the Common Context of the Group OSCORE Security Context, the parameter Pairwise Key Agreement Algorithm is not set (see <xref section="2.1.9" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</li>
        <li>Consistently, when building the two OSCORE 'external_aad' to process messages protected with Group OSCORE in this OSCORE group, (see <xref section="4.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), the element 'alg_pairwise_key_agreement' within the 'algorithms' arrays is set to the CBOR simple value <tt>null</tt> (0xf6).</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 in 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 a phantom observation request.</t>
      <ul spacing="normal">
        <li>Every client interested to take part in 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 the 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 unicast, and protected with Group OSCORE end-to-end
     between the server and the clients.

(**) 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 was not 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"/> where the ticket request is not a deterministic request, 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 a deterministic request 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-specific information, the phantom request, and (optionally) the latest notification.</li>
          <li>From the received 5.03 (Service Unavailable) 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 (Service Unavailable) 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 unicast and unprotected.

(**) 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-07-08">
        <name>Version -07 to -08</name>
        <ul spacing="normal">
          <li>Fixed the CDDL definition 'srv_addr' in 'tp_info'.</li>
          <li>Early mentioning that 'srv_addr' cannot instruct redirection.</li>
          <li>The replay protection of multicast notifications is as per Group OSCORE.</li>
          <li>Consistently use the format uint for the Multicast-Response-Feedback-Divider Option.</li>
          <li>Fixed consumption of proxy-related options in a ticket request sent to the proxy.</li>
          <li>Possible use of the option Proxy-Cri or Proxy-Scheme-Number in a ticket request.</li>
          <li>Explained non-provisioning of some parameters in self-managed OSCORE groups.</li>
          <li>Use of 'exi' for relative expiration time in self-managed OSCORE groups.</li>
          <li>Improved notation in the examples of message exchanges with proxy.</li>
          <li>Clarifications and editorial improvements.</li>
        </ul>
      </section>
      <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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
m50Hm5219sr/AyVW+/JWyAIA

-->

</rfc>
