<?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.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-observe-multicast-notifications-09" category="std" consensus="true" submissionType="IETF" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="Observe Multicast Notifications">Observe Notifications as CoAP Multicast Responses</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-09"/>
    <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="July" day="08"/>
    <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 originally 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 "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <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"/>, Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>, and Constrained Resource Identifiers (CRIs) <xref target="I-D.ietf-core-href"/>.</t>
        <t>This document additionally defines the following terminology.</t>
        <ul spacing="normal">
          <li>
            <t>Traditional observation. A resource observation associated with a single observer client, as defined in <xref target="RFC7641"/>.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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.</t>
          </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>
          <t>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.</t>
        </li>
        <li>
          <t>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.</t>
        </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 instead 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>
              <t>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"/>.</t>
            </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>
              <t>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"/>.</t>
            </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 Requirements</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>
          <t>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.</t>
        </li>
        <li>
          <t>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.</t>
        </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>
            <t>The server builds a phantom observation request, i.e., a GET request with an Observe Option set to 0 (register).</t>
          </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>
                <t>As source address and port number, the IP multicast address GRP_ADDR and port number GRP_PORT.</t>
              </li>
              <li>
                <t>As destination address and port number, the server address SRV_ADDR and port number SRV_PORT, intended for accessing the target resource.</t>
              </li>
            </ul>
            <t>
This Token space is under exclusive control of the server.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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 <bcp14>MUST</bcp14> use T as its own local Token value associated with that observation, with respect to the (previous hop towards the) clients.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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 <bcp14>MUST</bcp14> 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 which the server deletes the message INIT_NOTIF.</t>
          </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 <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> be Confirmable and <bcp14>MUST NOT</bcp14> 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 abbreviations are defined in <xref target="informative-response-params"/>.</t>
        <ul spacing="normal">
          <li>
            <t>'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 <bcp14>MUST</bcp14> be included.</t>
          </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 <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> 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>
            <t>'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 <bcp14>MAY</bcp14> be included.</t>
          </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 <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> 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>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 = [
    tpi_server: CRI-no-local,  ; Addressing information of the server
  ? tpi_details                ; Further information about the request
]

tpi_details = (
  + elements  ; Number, format, and encoding of the elements depend
              ; on the scheme-id of the CRI specified as 'tpi_server'
)

CRI-no-local = [
  scheme-id,
  authority
]

scheme-id = nint  ; -1 - scheme-number

authority = [?userinfo, host, ?port]
userinfo  = (false, text .feature "userinfo")
host      = (host-ip // host-name)
host-name = (*text) ; lowercase, NFC labels
host-ip   = (bytes .size 4 //
               (bytes .size 16, ?zone-id))
zone-id   = text
port      = 0..65535
]]></artwork>
          </figure>
          <t>The following holds for the two elements 'tpi_server' and 'tpi_details'.</t>
          <ul spacing="normal">
            <li>
              <t>The 'tpi_server' element <bcp14>MUST</bcp14> be present and specifies:  </t>
              <ul spacing="normal">
                <li>
                  <t>The transport protocol used to transport a CoAP response from the server, i.e., a multicast notification in this document; and</t>
                </li>
                <li>
                  <t>The addressing information of the server, i.e., the source addressing information of the multicast notifications that are sent for the group observation.      </t>
                  <t>
Such addressing information <bcp14>MUST</bcp14> be equal to the destination addressing information of the registration requests sent by the clients to observe the target resource at the server.</t>
                </li>
              </ul>
              <t>
This element specifies a CRI <xref target="I-D.ietf-core-href"/>, of which both 'scheme' and 'authority' are given, while 'path', 'query', and 'fragment' are not given. The CRI scheme is given as a negative integer 'scheme-id', with value taken from the "Scheme ID" column of the "CoAP Transport Information" registry defined in <xref target="iana-coap-transport-information"/> of this document.  </t>
              <t>
Consistent with <xref section="5.1.1" sectionFormat="of" target="I-D.ietf-core-href"/>, a 'scheme-id' with value ID denotes the CRI scheme that has CRI scheme number equal to (-1 - ID). The latter identifies the corresponding URI scheme, per the associated entry in the "CRI Scheme Numbers" registry defined in <xref section="11.1" sectionFormat="of" target="I-D.ietf-core-href"/>.  </t>
              <t>
Furthermore, the CRI scheme determines how many elements are required in the 'tpi_details' element of the 'tp_info' array, as well as what information they convey, their encoding, and their semantics.</t>
            </li>
            <li>
              <t>The 'tpi_details' element <bcp14>MAY</bcp14> be present and specifies transport-specific information related to a pertinent request message, i.e., the phantom observation request in this document.  </t>
              <t>
The exact format of 'tpi_details' depends on the CRI scheme of the CRI specified by the 'tpi_server' element.  </t>
              <t>
In the "CoAP Transport Information" registry defined in <xref target="iana-coap-transport-information"/> of this document, the entry corresponding to a certain CRI scheme specifies the list of elements composing 'tpi_details' for that CRI scheme, as value of the column "Transport Information Details". Within 'tpi_details', its elements <bcp14>MUST</bcp14> be ordered according to what is specified in the column "Transport Information Details" of the "CoAP Transport Information" registry.</t>
            </li>
          </ul>
          <t><xref target="transport-protocol-identifiers"/> registers an entry in the "CoAP Transport Information" registry, for the CRI scheme identified by the negative integer -1 ("coap"). This value is used as 'scheme-id' for the CRI in the 'tpi_server' 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>If a future specification defines the use of CoAP multicast notifications transported over different transport protocols, then that specification <bcp14>MUST</bcp14> perform the following actions, unless those have been already performed for different reasons:</t>
          <ul spacing="normal">
            <li>
              <t>Define the elements in 'tpi_details', as to what information they convey, their encoding, and their semantics.</t>
            </li>
            <li>
              <t>Register an entry in the "CoAP Transport Information" registry defined in <xref target="iana-coap-transport-information"/> of this document.  </t>
              <t>
The value of the column "Scheme ID" is the negative integer ID to be used as 'scheme-id' for the CRI specified by the 'tpi_server' element, which provides source addressing information of the multicast notifications. The same use applies to the CRI specified by an element of 'tpi_details', which provides destination addressing information of the multicast notifications.  </t>
              <t>
As a pre-condition for such a registration, it is <bcp14>REQUIRED</bcp14> that the "CRI Scheme Numbers" registry defined in <xref section="11.1" sectionFormat="of" target="I-D.ietf-core-href"/> includes an entry where the value in the column "CRI scheme number" is (-1 - ID).</t>
            </li>
          </ul>
          <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 'tp_info' CBOR array as follows.</t>
            <ul spacing="normal">
              <li>
                <t>In the 'tpi_server' element, the CRI has 'scheme-id' with value -1 ("coap"), while 'authority' conveys addressing information of the server, i.e., the source addressing information of the multicast notifications that are sent for the group observation.  </t>
                <t>
This information consists of the IP address SRV_ADDR (expressed as a literal or resulting from a name resolution) and the port number SRV_PORT of the server hosting the target resource, and from where the server will send multicast notifications for the target resource.</t>
              </li>
              <li>
                <t>The 'tpi_details' element <bcp14>MUST</bcp14> be present and in turn includes the following two elements:  </t>
                <ul spacing="normal">
                  <li>
                    <t>'tpi_client' is a CRI, with the same format of 'tpi_server' (see <xref target="sssec-transport-specific-encoding"/>). In particular, the CRI has 'scheme-id' with value -1 ("coap"), while 'authority' conveys the destination addressing information of the multicast notifications that the server sends for the group observation.      </t>
                    <t>
This information consists of the IP multicast address GRP_ADDR (expressed as a literal or resulting from a name resolution) and the port number GRP_PORT, where the server will send multicast notifications for the target resource.</t>
                  </li>
                  <li>
                    <t>'tpi_token' 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"/>).</t>
                  </li>
                </ul>
              </li>
            </ul>
            <t>The CDDL notation in <xref target="tp-info-udp"/> describes the format of the 'tp_info' CBOR array when using UDP as transport protocol.</t>
            <figure anchor="tp-info-udp">
              <name>Format of 'tp_info' with UDP as transport protocol</name>
              <artwork><![CDATA[
tp_info_coap_udp = [
  tpi_server: CRI-no-local,  ; Source addressing information
                             ; of the multicast notifications
  tpi_client: CRI-no-local,  ; Destination addressing information
                             ; of the multicast notifications
  tpi_token: bstr            ; Token value of the phantom request and
                             ; associated multicast notifications
]
]]></artwork>
            </figure>
            <t>The CBOR diagnostic notation in <xref target="tp-info-udp-example"/> provides an example of the 'tp_info' CBOR array when using UDP as transport protocol. In the example, SRV_ADDR is 2001:db8::ab, SRV_PORT is 5683 (omitted in the CRI of 'tpi_server' as it is the CoAP default port number), GRP_ADDR is ff35:30:2001:db8::23, and GRP_PORT is 61616.</t>
            <figure anchor="tp-info-udp-example">
              <name>Example of 'tp_info' with UDP as transport protocol</name>
              <artwork><![CDATA[
[ / tp_info /
  [ / tpi_server /
    -1,        / scheme-id -- equivalent to "coap" /
    h'20010db80000000000000000000000ab'  / host-ip /
  ],
  [ / tpi_client /
    -1,        / scheme-id -- equivalent to "coap" /
    h'ff35003020010db80000000000000023', / host-ip /
    61616                                   / port /
  ],
  h'7b'                                / tpi_token /
]
]]></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 CBOR 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>
              <t>A single byte, with value the content of the Code field in the CoAP message.</t>
            </li>
            <li>
              <t>The byte serialization of the complete sequence of CoAP options in the CoAP message.</t>
            </li>
            <li>
              <t>If the CoAP message includes a non-zero length payload, the one-byte Payload Marker (0xff) followed by the payload.</t>
            </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>
            <t>It <bcp14>MUST</bcp14> be Non-confirmable.</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> include an Observe Option, as per <xref target="RFC7641"/>.</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> have the same Token value T of the phantom registration request that started the group observation.  </t>
            <t>
That is, every multicast notification for a target resource is not bound to the observation requests from the different clients, but instead to the phantom registration request associated with the whole set of clients taking part in the group observation of that resource.  </t>
            <t>
The Token value T is specified by an element of 'tpi_details' within the 'tp_info' parameter, in the informative response sent to the observer clients. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref target="ssssec-udp-transport-specific"/>).</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> 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"/>). That is, redirection <bcp14>MUST NOT</bcp14> be used.  </t>
            <t>
The addressing information above is provided to the observer clients through the CRI specified by the element 'tpi_server' within the 'tp_info' parameter, in the informative response (see <xref target="sssec-transport-specific-encoding"/>).</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> be sent to the IP multicast address GRP_ADDR and port number GRP_PORT.  </t>
            <t>
The addressing information above is provided to the observer clients through the CRI specified by an element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref target="ssssec-udp-transport-specific"/>).</t>
          </li>
        </ul>
        <t>For each target resource with an active group observation, the server <bcp14>MUST</bcp14> 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>
            <t>The multicast notifications <bcp14>MUST</bcp14> be Non-confirmable.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>The server <bcp14>SHOULD</bcp14> 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.</t>
          </li>
          <li>
            <t>Following related guidelines from <xref section="4.5.1" sectionFormat="of" target="RFC7641"/>, the server <bcp14>SHOULD NOT</bcp14> send more than one multicast notification every 3 seconds, and <bcp14>SHOULD</bcp14> 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 to the server.</t>
          </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 Requirements</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 <bcp14>MUST NOT</bcp14> 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>
                <t>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 by the CRI conveyed by the element 'tpi_server' within the 'tp_info' parameter, in the informative response (see <xref target="sssec-transport-specific-encoding"/>).      </t>
                <t>
If the port number is not present in the CRI, then the client <bcp14>MUST</bcp14> use as SRV_PORT the default port number defined for the URI scheme that corresponds to the CRI scheme number (e.g., 5683 when the URI scheme is "coap").</t>
              </li>
              <li>
                <t>As destination address and port number, the IP multicast address GRP_ADDR and port number GRP_PORT. These are specified by the CRI conveyed by a dedicated element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref target="ssssec-udp-transport-specific"/>).      </t>
                <t>
If the port number is not present in the CRI, then the client <bcp14>MUST</bcp14> use as GRP_PORT the default port number defined for the URI scheme that corresponds to the CRI scheme number (e.g., 5683 when the URI scheme is "coap").</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The client rebuilds the phantom registration request as follows.  </t>
            <ul spacing="normal">
              <li>
                <t>The client uses the Token value T, specified by a dedicated element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref target="ssssec-udp-transport-specific"/>).</t>
              </li>
              <li>
                <t>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.</t>
              </li>
              <li>
                <t>If the 'ph_req' parameter is present in the informative response, the client uses the transport-independent information specified in the parameter.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>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 <bcp14>SHOULD</bcp14> explicitly withdraw from the group observation.</t>
          </li>
          <li>
            <t>The client stores the phantom registration request, as associated with the observation of the target resource. In particular, the client <bcp14>MUST</bcp14> 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.</t>
          </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>
                <t>The same Token value T used at step 2; and</t>
              </li>
              <li>
                <t>The transport-independent information, specified in the 'last_notif' parameter of the informative response.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>If a traditional observation to the target resource is ongoing, the client <bcp14>MAY</bcp14> silently cancel it without notifying the server.</t>
          </li>
        </ol>
        <t>If any of the expected fields in the informative response are not present or malformed, the client <bcp14>MAY</bcp14> try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). If the client chooses not to, then the client <bcp14>SHOULD</bcp14> 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 <bcp14>OPTIONAL</bcp14> 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 <bcp14>MUST NOT</bcp14> be given for the "gp-obs" attribute and any present value <bcp14>MUST</bcp14> be ignored by the recipient.  The "gp-obs" attribute <bcp14>MUST NOT</bcp14> appear more than once in a given link-value; occurrences after the first <bcp14>MUST</bcp14> 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 C1 and C2 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>
          <t>The application-extension identifier "cri" defined in <xref section="C" sectionFormat="of" target="I-D.ietf-core-href"/> is used to notate a CBOR Extended Diagnostic Notation (EDN) literal for a CRI.</t>
        </li>
        <li>
          <t>'bstr(X)' denotes a CBOR byte string with value the byte serialization of X, with '|' denoting byte concatenation.</t>
        </li>
        <li>
          <t>'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.</t>
        </li>
        <li>
          <t>'PAYLOAD' denotes a CoAP payload. This refers to the latest multicast notification encoded by the 'last_notif' parameter.</t>
        </li>
      </ul>
      <figure anchor="example-no-oscore">
        <name>Example of group observation</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1296" width="552" viewBox="0 0 552 1296" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,432" fill="none" stroke="black"/>
              <path d="M 8,464 L 8,672" fill="none" stroke="black"/>
              <path d="M 8,704 L 8,832" fill="none" stroke="black"/>
              <path d="M 8,864 L 8,1120" fill="none" stroke="black"/>
              <path d="M 8,1184 L 8,1280" fill="none" stroke="black"/>
              <path d="M 32,1120 L 32,1184" fill="none" stroke="black"/>
              <path d="M 512,48 L 512,432" fill="none" stroke="black"/>
              <path d="M 512,464 L 512,672" fill="none" stroke="black"/>
              <path d="M 512,704 L 512,832" fill="none" stroke="black"/>
              <path d="M 512,864 L 512,1136" fill="none" stroke="black"/>
              <path d="M 512,1168 L 512,1280" fill="none" stroke="black"/>
              <path d="M 32,32 L 192,32" fill="none" stroke="black"/>
              <path d="M 304,32 L 496,32" fill="none" stroke="black"/>
              <path d="M 80,208 L 496,208" fill="none" stroke="black"/>
              <path d="M 80,256 L 496,256" fill="none" stroke="black"/>
              <path d="M 32,448 L 192,448" fill="none" stroke="black"/>
              <path d="M 304,448 L 496,448" fill="none" stroke="black"/>
              <path d="M 32,688 L 192,688" fill="none" stroke="black"/>
              <path d="M 304,688 L 496,688" fill="none" stroke="black"/>
              <path d="M 32,848 L 192,848" fill="none" stroke="black"/>
              <path d="M 304,848 L 496,848" fill="none" stroke="black"/>
              <path d="M 8,1120 L 32,1120" fill="none" stroke="black"/>
              <path d="M 48,1152 L 192,1152" fill="none" stroke="black"/>
              <path d="M 320,1152 L 496,1152" fill="none" stroke="black"/>
              <path d="M 8,1184 L 32,1184" fill="none" stroke="black"/>
              <path d="M 68,232 L 80,256" fill="none" stroke="black"/>
              <path d="M 68,232 L 80,208" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="504,688 492,682.4 492,693.6" fill="black" transform="rotate(0,496,688)"/>
              <polygon class="arrowhead" points="504,256 492,250.4 492,261.6" fill="black" transform="rotate(0,496,256)"/>
              <polygon class="arrowhead" points="504,32 492,26.4 492,37.6" fill="black" transform="rotate(0,496,32)"/>
              <polygon class="arrowhead" points="56,1152 44,1146.4 44,1157.6" fill="black" transform="rotate(180,48,1152)"/>
              <polygon class="arrowhead" points="40,848 28,842.4 28,853.6" fill="black" transform="rotate(180,32,848)"/>
              <polygon class="arrowhead" points="40,448 28,442.4 28,453.6" fill="black" transform="rotate(180,32,448)"/>
              <g class="text">
                <text x="12" y="36">C1</text>
                <text x="208" y="36">[</text>
                <text x="248" y="36">Unicast</text>
                <text x="288" y="36">]</text>
                <text x="512" y="36">S</text>
                <text x="540" y="36">/r</text>
                <text x="40" y="52">GET</text>
                <text x="52" y="68">Token:</text>
                <text x="100" y="68">0x4a</text>
                <text x="60" y="84">Observe:</text>
                <text x="104" y="84">0</text>
                <text x="156" y="84">(register)</text>
                <text x="64" y="100">Uri-Path:</text>
                <text x="120" y="100">"r"</text>
                <text x="52" y="116">&lt;Other</text>
                <text x="116" y="116">options&gt;</text>
                <text x="136" y="148">(</text>
                <text x="152" y="148">S</text>
                <text x="200" y="148">allocates</text>
                <text x="256" y="148">the</text>
                <text x="312" y="148">available</text>
                <text x="376" y="148">Token</text>
                <text x="424" y="148">value</text>
                <text x="468" y="148">0x7b</text>
                <text x="496" y="148">)</text>
                <text x="56" y="180">(</text>
                <text x="72" y="180">S</text>
                <text x="104" y="180">sends</text>
                <text x="140" y="180">to</text>
                <text x="180" y="180">itself</text>
                <text x="216" y="180">a</text>
                <text x="256" y="180">phantom</text>
                <text x="336" y="180">observation</text>
                <text x="416" y="180">request</text>
                <text x="476" y="180">PH_REQ</text>
                <text x="76" y="196">as</text>
                <text x="116" y="196">coming</text>
                <text x="164" y="196">from</text>
                <text x="200" y="196">the</text>
                <text x="228" y="196">IP</text>
                <text x="280" y="196">multicast</text>
                <text x="352" y="196">address</text>
                <text x="420" y="196">GRP_ADDR</text>
                <text x="464" y="196">)</text>
                <text x="540" y="260">/r</text>
                <text x="336" y="276">GET</text>
                <text x="348" y="292">Token:</text>
                <text x="396" y="292">0x7b</text>
                <text x="356" y="308">Observe:</text>
                <text x="400" y="308">0</text>
                <text x="452" y="308">(register)</text>
                <text x="360" y="324">Uri-Path:</text>
                <text x="416" y="324">"r"</text>
                <text x="348" y="340">&lt;Other</text>
                <text x="412" y="340">options&gt;</text>
                <text x="192" y="372">(</text>
                <text x="208" y="372">S</text>
                <text x="248" y="372">creates</text>
                <text x="288" y="372">a</text>
                <text x="320" y="372">group</text>
                <text x="392" y="372">observation</text>
                <text x="452" y="372">of</text>
                <text x="476" y="372">/r</text>
                <text x="496" y="372">)</text>
                <text x="224" y="404">(</text>
                <text x="240" y="404">S</text>
                <text x="292" y="404">increments</text>
                <text x="352" y="404">the</text>
                <text x="404" y="404">observer</text>
                <text x="472" y="404">counter</text>
                <text x="248" y="420">for</text>
                <text x="280" y="420">the</text>
                <text x="320" y="420">group</text>
                <text x="392" y="420">observation</text>
                <text x="452" y="420">of</text>
                <text x="476" y="420">/r</text>
                <text x="496" y="420">)</text>
                <text x="12" y="452">C1</text>
                <text x="208" y="452">[</text>
                <text x="248" y="452">Unicast</text>
                <text x="288" y="452">]</text>
                <text x="512" y="452">S</text>
                <text x="44" y="468">5.03</text>
                <text x="52" y="484">Token:</text>
                <text x="100" y="484">0x4a</text>
                <text x="88" y="500">Content-Format:</text>
                <text x="304" y="500">application/informative-response+cbor</text>
                <text x="60" y="516">Max-Age:</text>
                <text x="104" y="516">0</text>
                <text x="52" y="532">&lt;Other</text>
                <text x="116" y="532">options&gt;</text>
                <text x="60" y="548">Payload:</text>
                <text x="104" y="548">{</text>
                <text x="48" y="564">/</text>
                <text x="88" y="564">tp_info</text>
                <text x="128" y="564">/</text>
                <text x="168" y="564">0</text>
                <text x="184" y="564">:</text>
                <text x="200" y="564">[</text>
                <text x="328" y="580">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="344" y="596">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="252" y="612">0x7b</text>
                <text x="204" y="628">],</text>
                <text x="48" y="644">/</text>
                <text x="100" y="644">last_notif</text>
                <text x="152" y="644">/</text>
                <text x="168" y="644">2</text>
                <text x="184" y="644">:</text>
                <text x="232" y="644">bstr(0x45</text>
                <text x="280" y="644">|</text>
                <text x="304" y="644">OPT</text>
                <text x="328" y="644">|</text>
                <text x="356" y="644">0xff</text>
                <text x="384" y="644">|</text>
                <text x="428" y="644">PAYLOAD)</text>
                <text x="32" y="660">}</text>
                <text x="12" y="692">C2</text>
                <text x="208" y="692">[</text>
                <text x="248" y="692">Unicast</text>
                <text x="288" y="692">]</text>
                <text x="512" y="692">S</text>
                <text x="540" y="692">/r</text>
                <text x="40" y="708">GET</text>
                <text x="52" y="724">Token:</text>
                <text x="100" y="724">0x01</text>
                <text x="60" y="740">Observe:</text>
                <text x="104" y="740">0</text>
                <text x="156" y="740">(register)</text>
                <text x="64" y="756">Uri-Path:</text>
                <text x="120" y="756">"r"</text>
                <text x="52" y="772">&lt;Other</text>
                <text x="116" y="772">options&gt;</text>
                <text x="216" y="804">(</text>
                <text x="232" y="804">S</text>
                <text x="284" y="804">increments</text>
                <text x="344" y="804">the</text>
                <text x="396" y="804">observer</text>
                <text x="464" y="804">counter</text>
                <text x="240" y="820">for</text>
                <text x="272" y="820">the</text>
                <text x="312" y="820">group</text>
                <text x="384" y="820">observation</text>
                <text x="444" y="820">of</text>
                <text x="468" y="820">/r</text>
                <text x="488" y="820">)</text>
                <text x="12" y="852">C2</text>
                <text x="208" y="852">[</text>
                <text x="248" y="852">Unicast</text>
                <text x="288" y="852">]</text>
                <text x="512" y="852">S</text>
                <text x="44" y="868">5.03</text>
                <text x="52" y="884">Token:</text>
                <text x="100" y="884">0x01</text>
                <text x="88" y="900">Content-Format:</text>
                <text x="304" y="900">application/informative-response+cbor</text>
                <text x="60" y="916">Max-Age:</text>
                <text x="104" y="916">0</text>
                <text x="52" y="932">&lt;Other</text>
                <text x="116" y="932">options&gt;</text>
                <text x="60" y="948">Payload:</text>
                <text x="104" y="948">{</text>
                <text x="48" y="964">/</text>
                <text x="88" y="964">tp_info</text>
                <text x="128" y="964">/</text>
                <text x="168" y="964">0</text>
                <text x="184" y="964">:</text>
                <text x="200" y="964">[</text>
                <text x="328" y="980">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="344" y="996">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="252" y="1012">0x7b</text>
                <text x="204" y="1028">],</text>
                <text x="48" y="1044">/</text>
                <text x="100" y="1044">last_notif</text>
                <text x="152" y="1044">/</text>
                <text x="168" y="1044">2</text>
                <text x="184" y="1044">:</text>
                <text x="232" y="1044">bstr(0x45</text>
                <text x="280" y="1044">|</text>
                <text x="304" y="1044">OPT</text>
                <text x="328" y="1044">|</text>
                <text x="356" y="1044">0xff</text>
                <text x="384" y="1044">|</text>
                <text x="428" y="1044">PAYLOAD)</text>
                <text x="32" y="1060">}</text>
                <text x="104" y="1092">(</text>
                <text x="128" y="1092">The</text>
                <text x="168" y="1092">value</text>
                <text x="204" y="1092">of</text>
                <text x="232" y="1092">the</text>
                <text x="284" y="1092">resource</text>
                <text x="332" y="1092">/r</text>
                <text x="376" y="1092">changes</text>
                <text x="420" y="1092">to</text>
                <text x="460" y="1092">"5678"</text>
                <text x="496" y="1092">)</text>
                <text x="12" y="1140">C1</text>
                <text x="208" y="1156">[</text>
                <text x="256" y="1156">Multicast</text>
                <text x="304" y="1156">]</text>
                <text x="512" y="1156">S</text>
                <text x="12" y="1172">C2</text>
                <text x="88" y="1172">(</text>
                <text x="144" y="1172">Destination</text>
                <text x="248" y="1172">address/port:</text>
                <text x="376" y="1172">GRP_ADDR/GRP_PORT</text>
                <text x="456" y="1172">)</text>
                <text x="60" y="1204">2.05</text>
                <text x="68" y="1220">Token:</text>
                <text x="116" y="1220">0x7b</text>
                <text x="76" y="1236">Observe:</text>
                <text x="124" y="1236">11</text>
                <text x="68" y="1252">&lt;Other</text>
                <text x="132" y="1252">options&gt;</text>
                <text x="76" y="1268">Payload:</text>
                <text x="140" y="1268">"5678"</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
C1 --------------------- [ Unicast ] ------------------------> S  /r
|  GET                                                         |
|  Token: 0x4a                                                 |
|  Observe: 0 (register)                                       |
|  Uri-Path: "r"                                               |
|  <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)  |
|                                       Uri-Path: "r"          |
|                                       <Other options>        |
|                                                              |
|                      ( S creates a group observation of /r ) |
|                                                              |
|                          ( S increments the observer counter |
|                            for the group observation of /r ) |
|                                                              |
C1 <-------------------- [ Unicast ] ------------------------- S
|  5.03                                                        |
|  Token: 0x4a                                                 |
|  Content-Format: application/informative-response+cbor       |
|  Max-Age: 0                                                  |
|  <Other options>                                             |
|  Payload: {                                                  |
|    / tp_info /    0 : [                                      |
|                        cri'coap://SRV_ADDR:SRV_PORT/',       |
|                          cri'coap://GRP_ADDR:GRP_PORT/',     |
|                            0x7b                              |
|                       ],                                     |
|    / last_notif / 2 : bstr(0x45 | OPT | 0xff | PAYLOAD)      |
|  }                                                           |
|                                                              |
C2 --------------------- [ Unicast ] ------------------------> S  /r
|  GET                                                         |
|  Token: 0x01                                                 |
|  Observe: 0 (register)                                       |
|  Uri-Path: "r"                                               |
|  <Other options>                                             |
|                                                              |
|                         ( S increments the observer counter  |
|                           for the group observation of /r )  |
|                                                              |
C2 <-------------------- [ Unicast ] ------------------------- S
|  5.03                                                        |
|  Token: 0x01                                                 |
|  Content-Format: application/informative-response+cbor       |
|  Max-Age: 0                                                  |
|  <Other options>                                             |
|  Payload: {                                                  |
|    / tp_info /    0 : [                                      |
|                        cri'coap://SRV_ADDR:SRV_PORT/',       |
|                          cri'coap://GRP_ADDR:GRP_PORT/',     |
|                            0x7b                              |
|                       ],                                     |
|    / last_notif / 2 : bstr(0x45 | OPT | 0xff | PAYLOAD)      |
|  }                                                           |
|                                                              |
|           ( The value of the resource /r changes to "5678" ) |
|                                                              |
+--+                                                           |
C1 |                                                           |
   | <------------------ [ Multicast ] ----------------------- S
C2 |      ( Destination address/port: GRP_ADDR/GRP_PORT )      |
+--+                                                           |
|    2.05                                                      |
|    Token: 0x7b                                               |
|    Observe: 11                                               |
|    <Other options>                                           |
|    Payload: "5678"                                           |
|                                                              |
]]></artwork>
        </artset>
      </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 <bcp14>SHOULD</bcp14> be supported by clients that listen to multicast responses.</t>
        <t>The option is called Multicast-Response-Feedback-Divider and has the properties summarized in <xref target="mrfd-table"/>, which extends Table 4 of <xref target="RFC7252"/>. 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>
        <table align="center" anchor="mrfd-table">
          <name>The Multicast-Response-Feedback-Divider Option.                C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left"> </td>
              <td align="left">x</td>
              <td align="left">-</td>
              <td align="left"> </td>
              <td align="left">Multicast-Response-<br/>Feedback-Divider</td>
              <td align="left">uint</td>
              <td align="left">0-1</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
        <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="ssec-rough-counting-client-side">
        <name>Processing on the Client Side</name>
        <t>Upon receiving a response with a Multicast-Response-Feedback-Divider Option, a client <bcp14>SHOULD</bcp14> 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 <bcp14>MUST</bcp14> be addressed to the same target resource, and <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> send the unicast request in a non confirmable way, and with the maximum No-Response setting <xref target="RFC7967"/>. In the request, the client <bcp14>MUST</bcp14> include a Multicast-Response-Feedback-Divider Option, whose value <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST NOT</bcp14> 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>
      </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 <bcp14>SHOULD</bcp14> 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>
              <t>L is computed as L = ceil(log2(N / M)).</t>
            </li>
            <li>
              <t>N is the current value of the observer counter, possibly rounded up to 1, i.e., N = max(COUNT, 1).</t>
            </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 <bcp14>RECOMMENDED</bcp14> 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 <bcp14>MUST</bcp14> 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 with value Q = 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 anchor="impact-from-proxies">
        <name>Impact from Proxies</name>
        <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 not Safe-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 endpoints, 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 holds 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"/>), then the Multicast-Response-Feedback-Divider Option is visible to the proxy.      </t>
                <t>
In this case, the proxy proceeds like defined in <xref target="ssec-rough-counting-client-side"/> 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>
Furthermore, the proxy <bcp14>MUST</bcp14> 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>
              <li>
                <t>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>
            </ul>
          </li>
        </ul>
      </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 for 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 <bcp14>MAY</bcp14> 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 <bcp14>MAY</bcp14> 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, then the original registration requests and related unicast (notification) responses <bcp14>MUST</bcp14> also be secured, including and especially the informative responses from the server. An exception is the case discussed in <xref target="deterministic-phantom-Request"/>, where the informative response from the server is not protected.</t>
      <t>In order to protect unicast messages exchanged between the server and each client, including the original client registration (see <xref target="sec-client-side"/>), alternative security protocols than Group OSCORE can be used, such as OSCORE <xref target="RFC8613"/> and/or DTLS <xref target="RFC9147"/>. However, it is <bcp14>RECOMMENDED</bcp14> to use OSCORE or Group OSCORE.</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 <bcp14>MAY</bcp14> 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 <bcp14>OPTIONAL</bcp14> 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 abbreviations are defined in <xref target="informative-response-params"/>.</t>
        <ul spacing="normal">
          <li>
            <t>'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.</t>
          </li>
          <li>
            <t>'sec_gp', with value the name of the OSCORE group, encoded as a CBOR text string.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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"/>.</t>
          </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 <bcp14>MUST</bcp14> 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 C509 certificates, there is a pending registration requested by draft-ietf-cose-cbor-encoded-cert. ]</t>
          </li>
          <li>
            <t>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"/>.</t>
          </li>
          <li>
            <t>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"/>.</t>
          </li>
          <li>
            <t>Optionally, 'sign_params', encoded as a CBOR array and including the following two elements:  </t>
            <ul spacing="normal">
              <li>
                <t>'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"/>.</t>
              </li>
              <li>
                <t>'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"/>.</t>
              </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 <bcp14>OPTIONAL</bcp14>, all the fields are <bcp14>OPTIONAL</bcp14> in the informative response. However, the 'join_uri' and 'sec_gp' fields <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> ignore these fields, since they would not be sufficient to start the (ACE) join procedure. When this happens, the client <bcp14>MAY</bcp14> try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). If the client chooses not to, then the client <bcp14>SHOULD</bcp14> 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"/> <bcp14>MUST NOT</bcp14> 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 <bcp14>MUST</bcp14> 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"/> <bcp14>MUST</bcp14> 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>
              <t>As 'kid', the Sender ID of the server in the OSCORE group.</t>
            </li>
            <li>
              <t>As 'piv', the Partial IV encoding the previously consumed Sender Sequence Number value SN of the server in the OSCORE group, i.e., (SN* - 1).</t>
            </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 <bcp14>MUST</bcp14> 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"/> <bcp14>MUST</bcp14> 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>
              <t>The 'request_kid' is the 'kid' value in the OSCORE Option of the phantom registration request, i.e., the Sender ID of the server.</t>
            </li>
            <li>
              <t>The 'request_piv' is the 'piv' value in the OSCORE Option of the phantom registration request, i.e., the Partial IV encoding the consumed Sender Sequence Number SN of the server.</t>
            </li>
            <li>
              <t>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.</t>
            </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 <bcp14>MUST</bcp14> use its own Sender Sequence Number as Partial IV to protect the error response, and include its encoding as the 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>
              <t>The client <bcp14>MUST NOT</bcp14> perform any replay check. That is, the client skips step 3 in <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</t>
            </li>
            <li>
              <t>If decryption and verification of the phantom registration request succeed:  </t>
              <ul spacing="normal">
                <li>
                  <t>The client <bcp14>MUST NOT</bcp14> 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"/>.</t>
                </li>
                <li>
                  <t>The client <bcp14>MUST NOT</bcp14> 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 <bcp14>MUST NOT</bcp14> deliver the phantom registration request to the application, and <bcp14>MUST NOT</bcp14> take any action in the Token space of its unicast endpoint, where the informative response has been received.</t>
                </li>
                <li>
                  <t>The client stores the values of the 'kid', 'piv', and 'kid context' fields from the OSCORE Option of the phantom registration request.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If decryption and verification of the phantom registration request fail, the client <bcp14>MAY</bcp14> try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). If the client chooses not to, then the client <bcp14>SHOULD</bcp14> explicitly withdraw from the group observation.</t>
            </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 <bcp14>MUST</bcp14> 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>
              <t>'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"/>).</t>
            </li>
            <li>
              <t>'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"/>).</t>
            </li>
            <li>
              <t>'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"/>).</t>
            </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 C1 and C2 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>
          <t>C1 and S have a pairwise OSCORE Security Context. In particular, C1 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.</t>
        </li>
        <li>
          <t>C2 and S have a pairwise OSCORE Security Context. In particular, C2 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.</t>
        </li>
        <li>
          <t>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.</t>
        </li>
      </ul>
      <t>The following notation is used for the payload of the informative responses:</t>
      <ul spacing="normal">
        <li>
          <t>The application-extension identifier "cri" defined in <xref section="C" sectionFormat="of" target="I-D.ietf-core-href"/> is used to notate a CBOR Extended Diagnostic Notation (EDN) literal for a CRI.</t>
        </li>
        <li>
          <t>'bstr(X)' denotes a CBOR byte string with value the byte serialization of X, with '|' denoting byte concatenation.</t>
        </li>
        <li>
          <t>'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.</t>
        </li>
        <li>
          <t>'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.</t>
        </li>
        <li>
          <t>'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.</t>
        </li>
      </ul>
      <figure anchor="example-oscore">
        <name>Example of group observation with Group OSCORE</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="2192" width="552" viewBox="0 0 552 2192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,720" fill="none" stroke="black"/>
              <path d="M 8,752 L 8,1152" fill="none" stroke="black"/>
              <path d="M 8,1184 L 8,1408" fill="none" stroke="black"/>
              <path d="M 8,1440 L 8,1888" fill="none" stroke="black"/>
              <path d="M 8,1952 L 8,2176" fill="none" stroke="black"/>
              <path d="M 32,1888 L 32,1952" fill="none" stroke="black"/>
              <path d="M 512,48 L 512,720" fill="none" stroke="black"/>
              <path d="M 512,752 L 512,1152" fill="none" stroke="black"/>
              <path d="M 512,1184 L 512,1408" fill="none" stroke="black"/>
              <path d="M 512,1440 L 512,1904" fill="none" stroke="black"/>
              <path d="M 512,1936 L 512,2176" fill="none" stroke="black"/>
              <path d="M 32,32 L 152,32" fill="none" stroke="black"/>
              <path d="M 352,32 L 496,32" fill="none" stroke="black"/>
              <path d="M 56,304 L 496,304" fill="none" stroke="black"/>
              <path d="M 56,352 L 496,352" fill="none" stroke="black"/>
              <path d="M 432,608 L 448,608" fill="none" stroke="black"/>
              <path d="M 32,736 L 152,736" fill="none" stroke="black"/>
              <path d="M 344,736 L 496,736" fill="none" stroke="black"/>
              <path d="M 32,1168 L 152,1168" fill="none" stroke="black"/>
              <path d="M 352,1168 L 496,1168" fill="none" stroke="black"/>
              <path d="M 32,1424 L 152,1424" fill="none" stroke="black"/>
              <path d="M 344,1424 L 496,1424" fill="none" stroke="black"/>
              <path d="M 8,1888 L 32,1888" fill="none" stroke="black"/>
              <path d="M 48,1920 L 136,1920" fill="none" stroke="black"/>
              <path d="M 392,1920 L 496,1920" fill="none" stroke="black"/>
              <path d="M 8,1952 L 32,1952" fill="none" stroke="black"/>
              <path d="M 44,328 L 56,352" fill="none" stroke="black"/>
              <path d="M 44,328 L 56,304" fill="none" stroke="black"/>
              <path d="M 248,1936 L 256,1920" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="504,1168 492,1162.4 492,1173.6" fill="black" transform="rotate(0,496,1168)"/>
              <polygon class="arrowhead" points="504,352 492,346.4 492,357.6" fill="black" transform="rotate(0,496,352)"/>
              <polygon class="arrowhead" points="504,32 492,26.4 492,37.6" fill="black" transform="rotate(0,496,32)"/>
              <polygon class="arrowhead" points="440,608 428,602.4 428,613.6" fill="black" transform="rotate(180,432,608)"/>
              <polygon class="arrowhead" points="56,1920 44,1914.4 44,1925.6" fill="black" transform="rotate(180,48,1920)"/>
              <polygon class="arrowhead" points="40,1424 28,1418.4 28,1429.6" fill="black" transform="rotate(180,32,1424)"/>
              <polygon class="arrowhead" points="40,736 28,730.4 28,741.6" fill="black" transform="rotate(180,32,736)"/>
              <g class="text">
                <text x="12" y="36">C1</text>
                <text x="168" y="36">[</text>
                <text x="208" y="36">Unicast</text>
                <text x="252" y="36">w/</text>
                <text x="292" y="36">OSCORE</text>
                <text x="328" y="36">]</text>
                <text x="512" y="36">S</text>
                <text x="540" y="36">/r</text>
                <text x="44" y="52">0.05</text>
                <text x="96" y="52">(FETCH)</text>
                <text x="52" y="68">Token:</text>
                <text x="100" y="68">0x4a</text>
                <text x="56" y="84">OSCORE:</text>
                <text x="112" y="84">{kid:</text>
                <text x="160" y="84">0x01;</text>
                <text x="204" y="84">piv:</text>
                <text x="244" y="84">101;</text>
                <text x="284" y="84">...}</text>
                <text x="52" y="100">&lt;Other</text>
                <text x="104" y="100">class</text>
                <text x="144" y="100">U/I</text>
                <text x="196" y="100">options&gt;</text>
                <text x="44" y="116">0xff</text>
                <text x="96" y="132">Encrypted_payload</text>
                <text x="176" y="132">{</text>
                <text x="60" y="148">0x01</text>
                <text x="108" y="148">(GET),</text>
                <text x="76" y="164">Observe:</text>
                <text x="120" y="164">0</text>
                <text x="176" y="164">(register),</text>
                <text x="80" y="180">Uri-Path:</text>
                <text x="140" y="180">"r",</text>
                <text x="68" y="196">&lt;Other</text>
                <text x="120" y="196">class</text>
                <text x="152" y="196">E</text>
                <text x="196" y="196">options&gt;</text>
                <text x="32" y="212">}</text>
                <text x="136" y="244">(</text>
                <text x="152" y="244">S</text>
                <text x="200" y="244">allocates</text>
                <text x="256" y="244">the</text>
                <text x="312" y="244">available</text>
                <text x="376" y="244">Token</text>
                <text x="424" y="244">value</text>
                <text x="468" y="244">0x7b</text>
                <text x="496" y="244">)</text>
                <text x="56" y="276">(</text>
                <text x="72" y="276">S</text>
                <text x="104" y="276">sends</text>
                <text x="140" y="276">to</text>
                <text x="180" y="276">itself</text>
                <text x="216" y="276">a</text>
                <text x="256" y="276">phantom</text>
                <text x="336" y="276">observation</text>
                <text x="416" y="276">request</text>
                <text x="476" y="276">PH_REQ</text>
                <text x="76" y="292">as</text>
                <text x="116" y="292">coming</text>
                <text x="164" y="292">from</text>
                <text x="200" y="292">the</text>
                <text x="228" y="292">IP</text>
                <text x="280" y="292">multicast</text>
                <text x="352" y="292">address</text>
                <text x="420" y="292">GRP_ADDR</text>
                <text x="472" y="292">)</text>
                <text x="540" y="356">/r</text>
                <text x="228" y="372">0.05</text>
                <text x="280" y="372">(FETCH)</text>
                <text x="236" y="388">Token:</text>
                <text x="284" y="388">0x7b</text>
                <text x="240" y="404">OSCORE:</text>
                <text x="296" y="404">{kid:</text>
                <text x="340" y="404">0x05</text>
                <text x="368" y="404">;</text>
                <text x="396" y="404">piv:</text>
                <text x="436" y="404">501;</text>
                <text x="296" y="420">kid</text>
                <text x="348" y="420">context:</text>
                <text x="424" y="420">0x57ab2e;</text>
                <text x="484" y="420">...}</text>
                <text x="236" y="436">&lt;Other</text>
                <text x="288" y="436">class</text>
                <text x="328" y="436">U/I</text>
                <text x="380" y="436">options&gt;</text>
                <text x="228" y="452">0xff</text>
                <text x="280" y="468">Encrypted_payload</text>
                <text x="360" y="468">{</text>
                <text x="244" y="484">0x01</text>
                <text x="292" y="484">(GET),</text>
                <text x="260" y="500">Observe:</text>
                <text x="304" y="500">0</text>
                <text x="360" y="500">(register),</text>
                <text x="264" y="516">Uri-Path:</text>
                <text x="324" y="516">"r",</text>
                <text x="252" y="532">&lt;Other</text>
                <text x="304" y="532">class</text>
                <text x="336" y="532">E</text>
                <text x="380" y="532">options&gt;</text>
                <text x="216" y="548">}</text>
                <text x="256" y="564">&lt;Signature&gt;</text>
                <text x="232" y="596">(</text>
                <text x="248" y="596">S</text>
                <text x="280" y="596">steps</text>
                <text x="324" y="596">SN_5</text>
                <text x="356" y="596">in</text>
                <text x="384" y="596">the</text>
                <text x="424" y="596">Group</text>
                <text x="476" y="596">OSCORE</text>
                <text x="276" y="612">Security</text>
                <text x="348" y="612">Context:</text>
                <text x="404" y="612">SN_5</text>
                <text x="472" y="612">502</text>
                <text x="496" y="612">)</text>
                <text x="192" y="660">(</text>
                <text x="208" y="660">S</text>
                <text x="248" y="660">creates</text>
                <text x="288" y="660">a</text>
                <text x="320" y="660">group</text>
                <text x="392" y="660">observation</text>
                <text x="452" y="660">of</text>
                <text x="476" y="660">/r</text>
                <text x="496" y="660">)</text>
                <text x="224" y="692">(</text>
                <text x="240" y="692">S</text>
                <text x="292" y="692">increments</text>
                <text x="352" y="692">the</text>
                <text x="404" y="692">observer</text>
                <text x="472" y="692">counter</text>
                <text x="248" y="708">for</text>
                <text x="280" y="708">the</text>
                <text x="320" y="708">group</text>
                <text x="392" y="708">observation</text>
                <text x="452" y="708">of</text>
                <text x="476" y="708">/r</text>
                <text x="496" y="708">)</text>
                <text x="12" y="740">C1</text>
                <text x="168" y="740">[</text>
                <text x="208" y="740">Unicast</text>
                <text x="252" y="740">w/</text>
                <text x="292" y="740">OSCORE</text>
                <text x="328" y="740">]</text>
                <text x="512" y="740">S</text>
                <text x="44" y="756">2.05</text>
                <text x="104" y="756">(Content)</text>
                <text x="52" y="772">Token:</text>
                <text x="100" y="772">0x4a</text>
                <text x="56" y="788">OSCORE:</text>
                <text x="112" y="788">{piv:</text>
                <text x="156" y="788">301;</text>
                <text x="196" y="788">...}</text>
                <text x="60" y="804">Max-Age:</text>
                <text x="104" y="804">0</text>
                <text x="52" y="820">&lt;Other</text>
                <text x="104" y="820">class</text>
                <text x="144" y="820">U/I</text>
                <text x="196" y="820">options&gt;</text>
                <text x="44" y="836">0xff</text>
                <text x="96" y="852">Encrypted_payload</text>
                <text x="176" y="852">{</text>
                <text x="60" y="868">5.03</text>
                <text x="116" y="868">(Service</text>
                <text x="208" y="868">Unavailable),</text>
                <text x="104" y="884">Content-Format:</text>
                <text x="324" y="884">application/informative-response+cbor,</text>
                <text x="68" y="900">&lt;Other</text>
                <text x="120" y="900">class</text>
                <text x="152" y="900">E</text>
                <text x="200" y="900">options&gt;,</text>
                <text x="64" y="916">0xff,</text>
                <text x="72" y="932">Payload</text>
                <text x="112" y="932">{</text>
                <text x="64" y="948">/</text>
                <text x="104" y="948">tp_info</text>
                <text x="144" y="948">/</text>
                <text x="184" y="948">0</text>
                <text x="200" y="948">:</text>
                <text x="216" y="948">[</text>
                <text x="344" y="964">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="360" y="980">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="268" y="996">0x7b</text>
                <text x="220" y="1012">],</text>
                <text x="64" y="1028">/</text>
                <text x="100" y="1028">ph_req</text>
                <text x="136" y="1028">/</text>
                <text x="184" y="1028">1</text>
                <text x="200" y="1028">:</text>
                <text x="248" y="1028">bstr(0x05</text>
                <text x="296" y="1028">|</text>
                <text x="320" y="1028">OPT</text>
                <text x="344" y="1028">|</text>
                <text x="372" y="1028">0xff</text>
                <text x="400" y="1028">|</text>
                <text x="280" y="1044">PAYLOAD</text>
                <text x="320" y="1044">|</text>
                <text x="356" y="1044">SIGN),</text>
                <text x="64" y="1060">/</text>
                <text x="116" y="1060">last_notif</text>
                <text x="168" y="1060">/</text>
                <text x="184" y="1060">2</text>
                <text x="200" y="1060">:</text>
                <text x="248" y="1060">bstr(0x45</text>
                <text x="296" y="1060">|</text>
                <text x="320" y="1060">OPT</text>
                <text x="344" y="1060">|</text>
                <text x="372" y="1060">0xff</text>
                <text x="400" y="1060">|</text>
                <text x="280" y="1076">PAYLOAD</text>
                <text x="320" y="1076">|</text>
                <text x="356" y="1076">SIGN),</text>
                <text x="64" y="1092">/</text>
                <text x="108" y="1092">join_uri</text>
                <text x="152" y="1092">/</text>
                <text x="184" y="1092">4</text>
                <text x="200" y="1092">:</text>
                <text x="340" y="1092">"coap://myGM/ace-group/myGroup",</text>
                <text x="64" y="1108">/</text>
                <text x="100" y="1108">sec_gp</text>
                <text x="136" y="1108">/</text>
                <text x="184" y="1108">5</text>
                <text x="200" y="1108">:</text>
                <text x="248" y="1108">"myGroup"</text>
                <text x="48" y="1124">}</text>
                <text x="32" y="1140">}</text>
                <text x="12" y="1172">C2</text>
                <text x="168" y="1172">[</text>
                <text x="208" y="1172">Unicast</text>
                <text x="252" y="1172">w/</text>
                <text x="292" y="1172">OSCORE</text>
                <text x="328" y="1172">]</text>
                <text x="512" y="1172">S</text>
                <text x="540" y="1172">/r</text>
                <text x="44" y="1188">0.05</text>
                <text x="96" y="1188">(FETCH)</text>
                <text x="52" y="1204">Token:</text>
                <text x="100" y="1204">0x01</text>
                <text x="56" y="1220">OSCORE:</text>
                <text x="112" y="1220">{kid:</text>
                <text x="160" y="1220">0x02;</text>
                <text x="204" y="1220">piv:</text>
                <text x="244" y="1220">201;</text>
                <text x="284" y="1220">...}</text>
                <text x="52" y="1236">&lt;Other</text>
                <text x="104" y="1236">class</text>
                <text x="144" y="1236">U/I</text>
                <text x="196" y="1236">options&gt;</text>
                <text x="44" y="1252">0xff</text>
                <text x="96" y="1268">Encrypted_payload</text>
                <text x="176" y="1268">{</text>
                <text x="60" y="1284">0x01</text>
                <text x="108" y="1284">(GET),</text>
                <text x="76" y="1300">Observe:</text>
                <text x="120" y="1300">0</text>
                <text x="176" y="1300">(register),</text>
                <text x="80" y="1316">Uri-Path:</text>
                <text x="140" y="1316">"r",</text>
                <text x="68" y="1332">&lt;Other</text>
                <text x="120" y="1332">class</text>
                <text x="152" y="1332">E</text>
                <text x="196" y="1332">options&gt;</text>
                <text x="32" y="1348">}</text>
                <text x="224" y="1380">(</text>
                <text x="240" y="1380">S</text>
                <text x="292" y="1380">increments</text>
                <text x="352" y="1380">the</text>
                <text x="404" y="1380">observer</text>
                <text x="472" y="1380">counter</text>
                <text x="248" y="1396">for</text>
                <text x="280" y="1396">the</text>
                <text x="320" y="1396">group</text>
                <text x="392" y="1396">observation</text>
                <text x="452" y="1396">of</text>
                <text x="476" y="1396">/r</text>
                <text x="496" y="1396">)</text>
                <text x="12" y="1428">C2</text>
                <text x="168" y="1428">[</text>
                <text x="208" y="1428">Unicast</text>
                <text x="252" y="1428">w/</text>
                <text x="292" y="1428">OSCORE</text>
                <text x="328" y="1428">]</text>
                <text x="512" y="1428">S</text>
                <text x="44" y="1444">2.05</text>
                <text x="104" y="1444">(Content)</text>
                <text x="52" y="1460">Token:</text>
                <text x="100" y="1460">0x01</text>
                <text x="56" y="1476">OSCORE:</text>
                <text x="112" y="1476">{piv:</text>
                <text x="156" y="1476">401;</text>
                <text x="196" y="1476">...}</text>
                <text x="60" y="1492">Max-Age:</text>
                <text x="104" y="1492">0</text>
                <text x="52" y="1508">&lt;Other</text>
                <text x="104" y="1508">class</text>
                <text x="144" y="1508">U/I</text>
                <text x="196" y="1508">options&gt;</text>
                <text x="48" y="1524">0xff,</text>
                <text x="96" y="1540">Encrypted_payload</text>
                <text x="176" y="1540">{</text>
                <text x="60" y="1556">5.03</text>
                <text x="116" y="1556">(Service</text>
                <text x="208" y="1556">Unavailable),</text>
                <text x="104" y="1572">Content-Format:</text>
                <text x="324" y="1572">application/informative-response+cbor,</text>
                <text x="68" y="1588">&lt;Other</text>
                <text x="120" y="1588">class</text>
                <text x="152" y="1588">E</text>
                <text x="200" y="1588">options&gt;,</text>
                <text x="64" y="1604">0xff,</text>
                <text x="72" y="1620">Payload</text>
                <text x="112" y="1620">{</text>
                <text x="64" y="1636">/</text>
                <text x="104" y="1636">tp_info</text>
                <text x="144" y="1636">/</text>
                <text x="184" y="1636">0</text>
                <text x="200" y="1636">:</text>
                <text x="216" y="1636">[</text>
                <text x="344" y="1652">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="360" y="1668">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="268" y="1684">0x7b</text>
                <text x="220" y="1700">],</text>
                <text x="64" y="1716">/</text>
                <text x="100" y="1716">ph_req</text>
                <text x="136" y="1716">/</text>
                <text x="184" y="1716">1</text>
                <text x="200" y="1716">:</text>
                <text x="248" y="1716">bstr(0x05</text>
                <text x="296" y="1716">|</text>
                <text x="320" y="1716">OPT</text>
                <text x="344" y="1716">|</text>
                <text x="372" y="1716">0xff</text>
                <text x="400" y="1716">|</text>
                <text x="280" y="1732">PAYLOAD</text>
                <text x="320" y="1732">|</text>
                <text x="356" y="1732">SIGN),</text>
                <text x="64" y="1748">/</text>
                <text x="116" y="1748">last_notif</text>
                <text x="168" y="1748">/</text>
                <text x="184" y="1748">2</text>
                <text x="200" y="1748">:</text>
                <text x="248" y="1748">bstr(0x45</text>
                <text x="296" y="1748">|</text>
                <text x="320" y="1748">OPT</text>
                <text x="344" y="1748">|</text>
                <text x="372" y="1748">0xff</text>
                <text x="400" y="1748">|</text>
                <text x="280" y="1764">PAYLOAD</text>
                <text x="320" y="1764">|</text>
                <text x="356" y="1764">SIGN),</text>
                <text x="64" y="1780">/</text>
                <text x="108" y="1780">join_uri</text>
                <text x="152" y="1780">/</text>
                <text x="184" y="1780">4</text>
                <text x="200" y="1780">:</text>
                <text x="340" y="1780">"coap://myGM/ace-group/myGroup",</text>
                <text x="64" y="1796">/</text>
                <text x="100" y="1796">sec_gp</text>
                <text x="136" y="1796">/</text>
                <text x="184" y="1796">5</text>
                <text x="200" y="1796">:</text>
                <text x="248" y="1796">"myGroup"</text>
                <text x="48" y="1812">}</text>
                <text x="32" y="1828">}</text>
                <text x="104" y="1860">(</text>
                <text x="128" y="1860">The</text>
                <text x="168" y="1860">value</text>
                <text x="204" y="1860">of</text>
                <text x="232" y="1860">the</text>
                <text x="284" y="1860">resource</text>
                <text x="332" y="1860">/r</text>
                <text x="376" y="1860">changes</text>
                <text x="420" y="1860">to</text>
                <text x="460" y="1860">"5678"</text>
                <text x="496" y="1860">)</text>
                <text x="12" y="1908">C1</text>
                <text x="152" y="1924">[</text>
                <text x="200" y="1924">Multicast</text>
                <text x="248" y="1924">w</text>
                <text x="288" y="1924">Group</text>
                <text x="340" y="1924">OSCORE</text>
                <text x="376" y="1924">]</text>
                <text x="512" y="1924">S</text>
                <text x="12" y="1940">C2</text>
                <text x="132" y="1940">(Destination</text>
                <text x="216" y="1940">address</text>
                <text x="272" y="1940">port:</text>
                <text x="372" y="1940">GRP_ADDR/GRP_PORT)</text>
                <text x="60" y="1972">2.05</text>
                <text x="120" y="1972">(Content)</text>
                <text x="68" y="1988">Token:</text>
                <text x="116" y="1988">0x7b</text>
                <text x="72" y="2004">OSCORE:</text>
                <text x="128" y="2004">{kid:</text>
                <text x="176" y="2004">0x05;</text>
                <text x="220" y="2004">piv:</text>
                <text x="260" y="2004">502;</text>
                <text x="300" y="2004">...}</text>
                <text x="68" y="2020">&lt;Other</text>
                <text x="120" y="2020">class</text>
                <text x="160" y="2020">U/I</text>
                <text x="212" y="2020">options&gt;</text>
                <text x="60" y="2036">0xff</text>
                <text x="112" y="2052">Encrypted_payload</text>
                <text x="192" y="2052">{</text>
                <text x="76" y="2068">2.05</text>
                <text x="140" y="2068">(Content),</text>
                <text x="92" y="2084">Observe:</text>
                <text x="164" y="2084">[empty],</text>
                <text x="84" y="2100">&lt;Other</text>
                <text x="136" y="2100">class</text>
                <text x="168" y="2100">E</text>
                <text x="216" y="2100">options&gt;,</text>
                <text x="80" y="2116">0xff,</text>
                <text x="92" y="2132">Payload:</text>
                <text x="156" y="2132">"5678"</text>
                <text x="48" y="2148">}</text>
                <text x="88" y="2164">&lt;Signature&gt;</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
C1 ---------------- [ 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),                                    |
|    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  )    |
|     .------------------------------------------------------- |
|    /                                                         |
|    \                                                         |
|     `------------------------------------------------------> |  /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),             |
|                           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 ) |
|                                                              |
C1 <--------------- [ 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,                                                     |
|    Payload {                                                 |
|      / tp_info /    0 : [                                    |
|                          cri'coap://SRV_ADDR:SRV_PORT/',     |
|                            cri'coap://GRP_ADDR:GRP_PORT/',   |
|                              0x7b                            |
|                         ],                                   |
|      / ph_req /     1 : bstr(0x05 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / last_notif / 2 : bstr(0x45 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / join_uri /   4 : "coap://myGM/ace-group/myGroup",     |
|      / sec_gp /     5 : "myGroup"                            |
|    }                                                         |
|  }                                                           |
|                                                              |
C2 ---------------- [ 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),                                    |
|    Uri-Path: "r",                                            |
|    <Other class E options>                                   |
|  }                                                           |
|                                                              |
|                          ( S increments the observer counter |
|                            for the group observation of /r ) |
|                                                              |
C2 <--------------- [ 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,                                                     |
|    Payload {                                                 |
|      / tp_info /    0 : [                                    |
|                          cri'coap://SRV_ADDR:SRV_PORT/',     |
|                            cri'coap://GRP_ADDR:GRP_PORT/',   |
|                              0x7b                            |
|                         ],                                   |
|      / ph_req /     1 : bstr(0x05 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / last_notif / 2 : bstr(0x45 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / join_uri /   4 : "coap://myGM/ace-group/myGroup",     |
|      / sec_gp /     5 : "myGroup"                            |
|    }                                                         |
|  }                                                           |
|                                                              |
|           ( The value of the resource /r changes to "5678" ) |
|                                                              |
+--+                                                           |
C1 |                                                           |
   | <----------- [ Multicast w/ Group OSCORE ] -------------- S
C2 |      (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],                                       |
|      <Other class E options>,                                |
|      0xff,                                                   |
|      Payload: "5678"                                         |
|    }                                                         |
|    <Signature>                                               |
|                                                              |
]]></artwork>
        </artset>
      </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, i.e., per the CRI specified by a dedicated element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref target="ssssec-udp-transport-specific"/>).</t>
      <t>Furthermore, multicast notifications will match the phantom request stored at the proxy, based on the Token value specified by a dedicated element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref target="ssssec-udp-transport-specific"/>).</t>
      <t>Then, the proxy performs the following actions.</t>
      <ul spacing="normal">
        <li>
          <t>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).</t>
        </li>
        <li>
          <t>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.</t>
        </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 <bcp14>MUST</bcp14> 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-Response, is intended only for requests, and has the properties summarized in <xref target="ltmr-table"/>, which extends Table 4 of <xref target="RFC7252"/>. 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>
        <table align="center" anchor="ltmr-table">
          <name>The Listen-To-Multicast-Responses Option.                           C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left">-</td>
              <td align="left"> </td>
              <td align="left">Listen-To-<br/>Multicast-Responses</td>
              <td align="left">(*)</td>
              <td align="left">3-1024</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
        <t>The Listen-To-Multicast-Responses Option includes the byte 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 defined in <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>
            <t>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).</t>
          </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>
                <t>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.</t>
              </li>
              <li>
                <t>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.</t>
              </li>
              <li>
                <t>An outer Observe Option is included and set to 0 (register). This will usually be set in the phantom request already.</t>
              </li>
              <li>
                <t>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.</t>
              </li>
              <li>
                <t>The new option Listen-To-Multicast-Responses is included as an outer option. The value is set to the byte 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>
            <t>The proxy <bcp14>MUST NOT</bcp14> further forward the ticket request to the origin server.</t>
          </li>
          <li>
            <t>The proxy removes the option Proxy-Uri, or Proxy-Scheme, or Proxy-Cri, or Proxy-Scheme-Number from the ticket request.</t>
          </li>
          <li>
            <t>The proxy removes the Listen-To-Multicast-Responses Option from the ticket request, and extracts the transport-specific information conveyed therein.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
        </ul>
        <t>After that, the proxy listens to the IP multicast address and port number indicated in the Listen-To-Multicast-Responses Option, i.e., per the CRI specified by a dedicated element of 'tpi_details' within the serialized CBOR array conveyed in the option. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref target="ssssec-udp-transport-specific"/>).</t>
        <t>Furthermore, multicast notifications will match the phantom request stored at the proxy, based on the Token value specified by a dedicated element of 'tpi_details' within the serialized CBOR array conveyed in the Listen-To-Multicast-Responses Option. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref target="ssssec-udp-transport-specific"/>).</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 as abbreviation, instead of the full descriptive name. Note that the media type application/informative-response+cbor <bcp14>MUST</bcp14> be used when these fields are transported.</t>
      <table align="center" anchor="_table-informative-response-params">
        <name>Informative Response Parameters.</name>
        <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 or 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 or 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 or 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><xref target="ssssec-udp-transport-specific"/> defines the transport-specific information that the server has to specify as elements of 'tpi_details' within the 'tp_info' parameter of the informative response defined in <xref target="ssec-server-side-informative"/>, when CoAP responses are transported over UDP.</t>
      <t><xref target="_table-transport-information"/> defines the corresponding entry that <xref target="iana-coap-transport-information"/> registers in the "CoAP Transport Information" registry defined in this document.</t>
      <table align="center" anchor="_table-transport-information">
        <name>CoAP Transport Information for CoAP over UDP.</name>
        <thead>
          <tr>
            <th align="left">Scheme ID</th>
            <th align="left">URI Scheme Name</th>
            <th align="left">Transport Information Details</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">-1</td>
            <td align="left">coap</td>
            <td align="left">tpi_client <br/> tpi_token</td>
            <td align="left">
              <xref target="ssssec-udp-transport-specific"/> of [RFC-XXXX]</td>
          </tr>
        </tbody>
      </table>
      <t>Note to RFC Editor: In the table above, please replace "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
    </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"/>, and <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 <bcp14>SHOULD NOT</bcp14> 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 for an observed resource are protected using Group OSCORE as per <xref target="sec-secured-notifications"/>, it is ensured that those are securely bound to the phantom registration request that started the group observation of that resource. Furthermore, the following applies.</t>
        <ul spacing="normal">
          <li>
            <t>The original registration requests and related unicast (notification) responses <bcp14>MUST</bcp14> also be secured, including and especially the informative responses from the server. An exception is the case discussed in <xref target="deterministic-phantom-Request"/>, where the informative response from the server is not protected.  </t>
            <t>
Protecting informative responses from the server prevents on-path active adversaries from altering the conveyed IP multicast address and serialized phantom registration request.</t>
          </li>
          <li>
            <t>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"/>), <bcp14>MUST</bcp14> also be secured.</t>
          </li>
        </ul>
      </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. To this end, the client can further protect the ticket request by means of a secure communication association that it shares with the proxy, e.g., by 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>
            <t>Type name: application</t>
          </li>
          <li>
            <t>Subtype name: informative-response+cbor</t>
          </li>
          <li>
            <t>Required parameters: N/A</t>
          </li>
          <li>
            <t>Optional parameters: N/A</t>
          </li>
          <li>
            <t>Encoding considerations: Must be encoded as a CBOR map containing the parameters defined in <xref target="ssec-server-side-informative"/> of [RFC-XXXX].</t>
          </li>
          <li>
            <t>Security considerations: See <xref target="sec-security-considerations"/> of [RFC-XXXX].</t>
          </li>
          <li>
            <t>Interoperability considerations: N/A</t>
          </li>
          <li>
            <t>Published specification: [RFC-XXXX]</t>
          </li>
          <li>
            <t>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].</t>
          </li>
          <li>
            <t>Fragment identifier considerations: N/A</t>
          </li>
          <li>
            <t>Additional information: N/A</t>
          </li>
          <li>
            <t>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)</t>
          </li>
          <li>
            <t>Intended usage: COMMON</t>
          </li>
          <li>
            <t>Restrictions on usage: None</t>
          </li>
          <li>
            <t>Author/Change controller: IETF</t>
          </li>
          <li>
            <t>Provisional registration:  No</t>
          </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 "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <table align="center">
          <name>Registrations in the CoAP Option Numbers Registry</name>
          <thead>
            <tr>
              <th align="left">Number</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">Multicast-Response-Feedback-Divider</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">TBD</td>
              <td align="left">Listen-To-Multicast-Responses</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
          </tbody>
        </table>
      </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>
            <t>Name: This is a descriptive name that enables easier reference to the item. The name <bcp14>MUST</bcp14> be unique. It is not used in the encoding.</t>
          </li>
          <li>
            <t>CBOR Key: This is the value used as CBOR key of the item. These values <bcp14>MUST</bcp14> be unique. The value can be a positive integer, a negative integer, or a text string.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>Reference: This contains a pointer to the public specification for the item.</t>
          </li>
        </ul>
        <t>This registry has been initially populated by the entries in <xref target="_table-informative-response-params"/>. The "Reference" column for all of those entries refers to sections of this document.</t>
      </section>
      <section anchor="iana-coap-transport-information">
        <name>CoAP Transport Information Registry</name>
        <t>This document establishes the "CoAP Transport Information" 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>
            <t>Scheme ID: This field contains the value used as 'scheme-id' to identify a CRI scheme, per <xref section="5.1.1" sectionFormat="of" target="I-D.ietf-core-href"/>. The value is a negative integer and <bcp14>MUST</bcp14> be unique.  </t>
            <t>
As a pre-condition for registering a value ID, it is <bcp14>REQUIRED</bcp14> that the "CRI Scheme Numbers" registry defined in <xref section="11.1" sectionFormat="of" target="I-D.ietf-core-href"/> includes an entry where the value in the column "CRI scheme number" is (-1 - ID).</t>
          </li>
          <li>
            <t>URI Scheme Name: This field contains a text string. Its value is the name of the URI scheme that corresponds to the CRI scheme identified by the value of the "Scheme ID" field in the present entry.  </t>
            <t>
Given the value ID of the "Scheme ID" field in the present entry, then the value of the "URI Scheme Name" field <bcp14>MUST</bcp14> be the same as in the column "URI scheme name" of the entry of the "CRI Scheme Numbers" registry where the value in the column "CRI scheme number" is (-1 - ID).</t>
          </li>
          <li>
            <t>Transport Information Details: This field contains a lists of text strings. Each text string is the name of an element that provides transport-specific information related to a pertinent CoAP request. Optional elements are prepended by '?', and <bcp14>MUST</bcp14> be specified next to each other as last ones.</t>
          </li>
          <li>
            <t>Reference: This contains a pointer to the public specification for the item.</t>
          </li>
        </ul>
        <t>This registry has been initially populated by the entry in <xref target="_table-transport-information"/>.</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 "Constrained RESTful Environments (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>
            <t>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.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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.</t>
          </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="24" month="April" year="2024"/>
            <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-11"/>
        </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="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <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-21"/>
        </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="21" month="April" 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 in 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 –15 of this draft continues -14 by picking up
   // more comments, such as moving to a CRI scheme number registration
   // system based on unsigned numbers.  This revision still contains
   // open issues and is intended to serve as a snapshot.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-15"/>
        </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="18" month="April" year="2024"/>
            <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-14"/>
        </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">
         </author>
            <date day="4" month="March" year="2024"/>
            <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-15"/>
        </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="4" month="March" year="2024"/>
            <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 rules
   to escalate the protection of a CoAP option, in order to encrypt and
   integrity-protect it whenever possible.  Finally, 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
   is used in the presence of intermediaries.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-capable-proxies-01"/>
        </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"/>). Instead, 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 'tpi_server' in <xref target="ssssec-udp-transport-specific"/>), while the latter specifies the addressing information where multicast notifications are sent to (like 'tpi_client' 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 : [
                      [ / tpi_server /
                       -1,        / scheme-id -- equivalent to "coap" /
                        h'20010db80000000000000000000000ab' / host-ip /
                      ],
                      [ / tpi_client /
                       -1,        / scheme-id -- equivalent to "coap" /
                       h'ff35003020010db80000000000000023', / host-ip /
                       61616                                   / port /
                      ],
                      h'7b'                               / tpi_token /
                     ],
  / 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 abbreviations 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 abbreviations 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 <bcp14>MUST</bcp14> 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>
              <t>'hkdf' and 'salt'. These elements <bcp14>MAY</bcp14> be included.</t>
            </li>
          </ul>
          <t>
The 'group_senderId' element of the Group_OSCORE_Input_Material object <bcp14>MUST NOT</bcp14> 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>
              <t>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"/>).</t>
            </li>
            <li>
              <t>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).</t>
            </li>
          </ul>
        </li>
        <li>
          <t>'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'.</t>
        </li>
        <li>
          <t>'srv_identifier': this element is encoded as a CBOR byte string, with value the Sender ID that the server has in the OSCORE group.</t>
        </li>
        <li>
          <t>'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 number of seconds specified in the 'exi' parameter to its current time.</t>
        </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>
          <t>'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"/>.</t>
        </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 <bcp14>MUST</bcp14> 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 the Security Context like 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 <bcp14>MUST NOT</bcp14> 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 <bcp14>MAY</bcp14> 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>
          <t>The server <bcp14>MUST NOT</bcp14> provide in the informative response the keying material of other OSCORE groups it is or has been a member of.</t>
        </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 <bcp14>MUST</bcp14> stop using the keying material and <bcp14>MUST</bcp14> 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>
              <t>The server <bcp14>MUST</bcp14> update the OSCORE Master Secret.</t>
            </li>
            <li>
              <t>The server <bcp14>MUST</bcp14> update the ID Context used as Group Identifier (Gid), consistently with <xref section="3.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>.</t>
            </li>
            <li>
              <t>The server <bcp14>MAY</bcp14> update the OSCORE Master Salt.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>The client <bcp14>MUST</bcp14> stop using the keying material and <bcp14>MAY</bcp14> re-register the observation at the server.</t>
        </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) <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> use its own Sender Sequence Number as Partial IV to protect the error response, and include its encoding as the 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 <bcp14>REQUIRED</bcp14> 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 with 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>When receiving the deterministic request, 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 relies on 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.</t>
      <t>If the server recognizes the received deterministic request as one of its self-generated deterministic phantom requests, then the server does not perform any Group OSCORE processing on it. This opens for replying with an unprotected response, although not indicating any OSCORE-related error. In particular, the server <bcp14>MUST</bcp14> reply with an informative response that <bcp14>MUST NOT</bcp14> be protected. If a proxy is deployed between the clients and the server, the proxy is thus able to retrieve from the informative response everything needed to set itself as an observer in the group observation, and to start listening to multicast notifications.</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>
          <t>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.</t>
        </li>
        <li>
          <t>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.</t>
        </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 <bcp14>MUST</bcp14> also include the following elements from the Group_OSCORE_Input_Material object.</t>
      <ul spacing="normal">
        <li>
          <t>'alg', as per <xref section="6.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>.</t>
        </li>
        <li>
          <t>'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"/>).</t>
        </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>
          <t>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"/>).</t>
        </li>
        <li>
          <t>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).</t>
        </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 for a target resource relies on a deterministic request as a phantom observation request.</t>
      <ul spacing="normal">
        <li>
          <t>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"/>).</t>
        </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>
        </li>
        <li>
          <t>If the server receives an observation request for the target resource that differs from the specific deterministic request associated with the group observation for that target resource, then the server replies as usual with an informative response, including: the transport-specific information, the phantom request (i.e., the expected deterministic request), and (optionally) the latest notification.</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>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1680" width="576" viewBox="0 0 576 1680" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,992" fill="none" stroke="black"/>
              <path d="M 8,1056 L 8,1232" fill="none" stroke="black"/>
              <path d="M 8,1296 L 8,1600" fill="none" stroke="black"/>
              <path d="M 64,48 L 64,88" fill="none" stroke="black"/>
              <path d="M 64,104 L 64,920" fill="none" stroke="black"/>
              <path d="M 64,936 L 64,992" fill="none" stroke="black"/>
              <path d="M 64,1056 L 64,1232" fill="none" stroke="black"/>
              <path d="M 64,1296 L 64,1448" fill="none" stroke="black"/>
              <path d="M 64,1464 L 64,1600" fill="none" stroke="black"/>
              <path d="M 120,48 L 120,992" fill="none" stroke="black"/>
              <path d="M 120,1056 L 120,1232" fill="none" stroke="black"/>
              <path d="M 120,1296 L 120,1600" fill="none" stroke="black"/>
              <path d="M 192,48 L 192,992" fill="none" stroke="black"/>
              <path d="M 192,1056 L 192,1232" fill="none" stroke="black"/>
              <path d="M 192,1296 L 192,1600" fill="none" stroke="black"/>
              <path d="M 8,96 L 112,96" fill="none" stroke="black"/>
              <path d="M 120,160 L 184,160" fill="none" stroke="black"/>
              <path d="M 144,336 L 192,336" fill="none" stroke="black"/>
              <path d="M 144,384 L 184,384" fill="none" stroke="black"/>
              <path d="M 128,576 L 192,576" fill="none" stroke="black"/>
              <path d="M 16,928 L 120,928" fill="none" stroke="black"/>
              <path d="M 64,1072 L 112,1072" fill="none" stroke="black"/>
              <path d="M 72,1168 L 120,1168" fill="none" stroke="black"/>
              <path d="M 128,1376 L 192,1376" fill="none" stroke="black"/>
              <path d="M 16,1456 L 120,1456" fill="none" stroke="black"/>
              <path d="M 72,1536 L 120,1536" fill="none" stroke="black"/>
              <path d="M 132,360 L 144,384" fill="none" stroke="black"/>
              <path d="M 132,360 L 144,336" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="192,384 180,378.4 180,389.6" fill="black" transform="rotate(0,184,384)"/>
              <polygon class="arrowhead" points="192,160 180,154.4 180,165.6" fill="black" transform="rotate(0,184,160)"/>
              <polygon class="arrowhead" points="136,1376 124,1370.4 124,1381.6" fill="black" transform="rotate(180,128,1376)"/>
              <polygon class="arrowhead" points="136,576 124,570.4 124,581.6" fill="black" transform="rotate(180,128,576)"/>
              <polygon class="arrowhead" points="120,1072 108,1066.4 108,1077.6" fill="black" transform="rotate(0,112,1072)"/>
              <polygon class="arrowhead" points="120,96 108,90.4 108,101.6" fill="black" transform="rotate(0,112,96)"/>
              <polygon class="arrowhead" points="80,1536 68,1530.4 68,1541.6" fill="black" transform="rotate(180,72,1536)"/>
              <polygon class="arrowhead" points="80,1168 68,1162.4 68,1173.6" fill="black" transform="rotate(180,72,1168)"/>
              <polygon class="arrowhead" points="24,1456 12,1450.4 12,1461.6" fill="black" transform="rotate(180,16,1456)"/>
              <polygon class="arrowhead" points="24,928 12,922.4 12,933.6" fill="black" transform="rotate(180,16,928)"/>
              <g class="text">
                <text x="12" y="36">C1</text>
                <text x="68" y="36">C2</text>
                <text x="120" y="36">P</text>
                <text x="192" y="36">S</text>
                <text x="228" y="68">(The</text>
                <text x="272" y="68">value</text>
                <text x="308" y="68">of</text>
                <text x="336" y="68">the</text>
                <text x="388" y="68">resource</text>
                <text x="436" y="68">/r</text>
                <text x="460" y="68">is</text>
                <text x="504" y="68">"1234")</text>
                <text x="236" y="100">Token:</text>
                <text x="284" y="100">0x4a</text>
                <text x="32" y="116">GET</text>
                <text x="244" y="116">Observe:</text>
                <text x="288" y="116">0</text>
                <text x="340" y="116">(register)</text>
                <text x="252" y="132">Proxy-Uri:</text>
                <text x="400" y="132">"coap://sensor.example/r"</text>
                <text x="236" y="164">Token:</text>
                <text x="284" y="164">0x5e</text>
                <text x="144" y="180">GET</text>
                <text x="244" y="180">Observe:</text>
                <text x="288" y="180">0</text>
                <text x="340" y="180">(register)</text>
                <text x="248" y="196">Uri-Host:</text>
                <text x="356" y="196">"sensor.example"</text>
                <text x="248" y="212">Uri-Path:</text>
                <text x="304" y="212">"r"</text>
                <text x="220" y="244">(S</text>
                <text x="272" y="244">allocates</text>
                <text x="328" y="244">the</text>
                <text x="384" y="244">available</text>
                <text x="448" y="244">Token</text>
                <text x="496" y="244">value</text>
                <text x="544" y="244">0x7b)</text>
                <text x="220" y="276">(S</text>
                <text x="256" y="276">sends</text>
                <text x="292" y="276">to</text>
                <text x="332" y="276">itself</text>
                <text x="368" y="276">a</text>
                <text x="408" y="276">phantom</text>
                <text x="488" y="276">observation</text>
                <text x="240" y="292">request</text>
                <text x="300" y="292">PH_REQ</text>
                <text x="340" y="292">as</text>
                <text x="380" y="292">coming</text>
                <text x="428" y="292">from</text>
                <text x="464" y="292">the</text>
                <text x="220" y="308">IP</text>
                <text x="272" y="308">multicast</text>
                <text x="344" y="308">address</text>
                <text x="416" y="308">GRP_ADDR)</text>
                <text x="236" y="388">Token:</text>
                <text x="284" y="388">0x7b</text>
                <text x="168" y="404">GET</text>
                <text x="244" y="404">Observe:</text>
                <text x="288" y="404">0</text>
                <text x="340" y="404">(register)</text>
                <text x="248" y="420">Uri-Host:</text>
                <text x="356" y="420">"sensor.example"</text>
                <text x="248" y="436">Uri-Path:</text>
                <text x="304" y="436">"r"</text>
                <text x="220" y="468">(S</text>
                <text x="264" y="468">creates</text>
                <text x="304" y="468">a</text>
                <text x="336" y="468">group</text>
                <text x="408" y="468">observation</text>
                <text x="468" y="468">of</text>
                <text x="496" y="468">/r)</text>
                <text x="220" y="500">(S</text>
                <text x="276" y="500">increments</text>
                <text x="336" y="500">the</text>
                <text x="388" y="500">observer</text>
                <text x="456" y="500">counter</text>
                <text x="224" y="516">for</text>
                <text x="256" y="516">the</text>
                <text x="296" y="516">group</text>
                <text x="368" y="516">observation</text>
                <text x="428" y="516">of</text>
                <text x="456" y="516">/r)</text>
                <text x="236" y="580">Token:</text>
                <text x="284" y="580">0x5e</text>
                <text x="148" y="596">5.03</text>
                <text x="272" y="596">Content-Format:</text>
                <text x="388" y="596">application/</text>
                <text x="336" y="612">informative-response+cbor</text>
                <text x="244" y="628">Max-Age:</text>
                <text x="288" y="628">0</text>
                <text x="236" y="644">&lt;Other</text>
                <text x="300" y="644">options&gt;</text>
                <text x="244" y="660">Payload:</text>
                <text x="288" y="660">{</text>
                <text x="232" y="676">/</text>
                <text x="272" y="676">tp_info</text>
                <text x="312" y="676">/</text>
                <text x="352" y="676">0</text>
                <text x="368" y="676">:</text>
                <text x="384" y="676">[</text>
                <text x="416" y="692">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="432" y="708">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="348" y="724">0x7b],</text>
                <text x="232" y="740">/</text>
                <text x="284" y="740">last_notif</text>
                <text x="336" y="740">/</text>
                <text x="352" y="740">2</text>
                <text x="368" y="740">:</text>
                <text x="416" y="740">bstr(0x45</text>
                <text x="464" y="740">|</text>
                <text x="488" y="740">OPT</text>
                <text x="512" y="740">|</text>
                <text x="540" y="740">0xff</text>
                <text x="568" y="740">|</text>
                <text x="452" y="756">PAYLOAD)</text>
                <text x="216" y="772">}</text>
                <text x="244" y="804">(PAYLOAD</text>
                <text x="292" y="804">in</text>
                <text x="356" y="804">'last_notif'</text>
                <text x="416" y="804">:</text>
                <text x="456" y="804">"1234")</text>
                <text x="228" y="852">(The</text>
                <text x="272" y="852">proxy</text>
                <text x="324" y="852">starts</text>
                <text x="392" y="852">listening</text>
                <text x="444" y="852">to</text>
                <text x="472" y="852">the</text>
                <text x="252" y="868">GRP_ADDR</text>
                <text x="320" y="868">address</text>
                <text x="368" y="868">and</text>
                <text x="400" y="868">the</text>
                <text x="452" y="868">GRP_PORT</text>
                <text x="516" y="868">port.)</text>
                <text x="228" y="900">(The</text>
                <text x="272" y="900">proxy</text>
                <text x="316" y="900">adds</text>
                <text x="348" y="900">C1</text>
                <text x="372" y="900">to</text>
                <text x="400" y="900">its</text>
                <text x="436" y="900">list</text>
                <text x="468" y="900">of</text>
                <text x="528" y="900">observers.)</text>
                <text x="236" y="932">Token:</text>
                <text x="284" y="932">0x4a</text>
                <text x="36" y="948">2.05</text>
                <text x="244" y="948">Observe:</text>
                <text x="304" y="948">54120</text>
                <text x="236" y="964">&lt;Other</text>
                <text x="300" y="964">options&gt;</text>
                <text x="244" y="980">Payload:</text>
                <text x="308" y="980">"1234"</text>
                <text x="16" y="1028">...</text>
                <text x="64" y="1028">...</text>
                <text x="120" y="1028">...</text>
                <text x="184" y="1028">...</text>
                <text x="236" y="1076">Token:</text>
                <text x="284" y="1076">0x01</text>
                <text x="88" y="1092">GET</text>
                <text x="244" y="1092">Observe:</text>
                <text x="288" y="1092">0</text>
                <text x="340" y="1092">(register)</text>
                <text x="252" y="1108">Proxy-Uri:</text>
                <text x="400" y="1108">"coap://sensor.example/r"</text>
                <text x="228" y="1140">(The</text>
                <text x="272" y="1140">proxy</text>
                <text x="312" y="1140">has</text>
                <text x="336" y="1140">a</text>
                <text x="368" y="1140">fresh</text>
                <text x="416" y="1140">cache</text>
                <text x="504" y="1140">representation)</text>
                <text x="236" y="1172">Token:</text>
                <text x="284" y="1172">0x01</text>
                <text x="92" y="1188">2.05</text>
                <text x="244" y="1188">Observe:</text>
                <text x="304" y="1188">54120</text>
                <text x="236" y="1204">&lt;Other</text>
                <text x="300" y="1204">options&gt;</text>
                <text x="244" y="1220">Payload:</text>
                <text x="308" y="1220">"1234"</text>
                <text x="16" y="1268">...</text>
                <text x="64" y="1268">...</text>
                <text x="120" y="1268">...</text>
                <text x="184" y="1268">...</text>
                <text x="228" y="1316">(The</text>
                <text x="272" y="1316">value</text>
                <text x="308" y="1316">of</text>
                <text x="336" y="1316">the</text>
                <text x="388" y="1316">resource</text>
                <text x="220" y="1332">/r</text>
                <text x="264" y="1332">changes</text>
                <text x="308" y="1332">to</text>
                <text x="356" y="1332">"5678".)</text>
                <text x="152" y="1364">(#)</text>
                <text x="236" y="1380">Token:</text>
                <text x="284" y="1380">0x7b</text>
                <text x="148" y="1396">2.05</text>
                <text x="244" y="1396">Observe:</text>
                <text x="292" y="1396">11</text>
                <text x="236" y="1412">&lt;Other</text>
                <text x="300" y="1412">options&gt;</text>
                <text x="244" y="1428">Payload:</text>
                <text x="308" y="1428">"5678"</text>
                <text x="236" y="1460">Token:</text>
                <text x="284" y="1460">0x4a</text>
                <text x="36" y="1476">2.05</text>
                <text x="244" y="1476">Observe:</text>
                <text x="304" y="1476">54123</text>
                <text x="236" y="1492">&lt;Other</text>
                <text x="300" y="1492">options&gt;</text>
                <text x="244" y="1508">Payload:</text>
                <text x="308" y="1508">"5678"</text>
                <text x="236" y="1540">Token:</text>
                <text x="284" y="1540">0x01</text>
                <text x="92" y="1556">2.05</text>
                <text x="244" y="1556">Observe:</text>
                <text x="304" y="1556">54123</text>
                <text x="236" y="1572">&lt;Other</text>
                <text x="300" y="1572">options&gt;</text>
                <text x="244" y="1588">Payload:</text>
                <text x="308" y="1588">"5678"</text>
                <text x="16" y="1652">(#)</text>
                <text x="52" y="1652">Sent</text>
                <text x="92" y="1652">over</text>
                <text x="124" y="1652">IP</text>
                <text x="176" y="1652">multicast</text>
                <text x="228" y="1652">to</text>
                <text x="332" y="1652">GROUP_ADDR:GROUP_PORT.</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![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 /    0 : [
|      |      |        |            cri'coap://SRV_ADDR:SRV_PORT/',
|      |      |        |              cri'coap://GRP_ADDR:GRP_PORT/',
|      |      |        |                0x7b],
|      |      |        |    / last_notif / 2 : 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
|      |      |        |  <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
|      |      |        |  <Other options>
|      |      |        |  Payload: "1234"
|      |      |        |

...   ...    ...     ...

|      |      |        |
|      |      |        |  (The value of the resource
|      |      |        |  /r changes to "5678".)
|      |      |        |
|      |      |  (#)   |
|      |      |<-------+  Token: 0x7b
|      |      | 2.05   |  Observe: 11
|      |      |        |  <Other options>
|      |      |        |  Payload: "5678"
|      |      |        |
|<------------+        |  Token: 0x4a
| 2.05 |      |        |  Observe: 54123
|      |      |        |  <Other options>
|      |      |        |  Payload: "5678"
|      |      |        |
|      |<-----+        |  Token: 0x01
|      | 2.05 |        |  Observe: 54123
|      |      |        |  <Other options>
|      |      |        |  Payload: "5678"
|      |      |        |


(#) Sent over IP multicast to GROUP_ADDR:GROUP_PORT.

]]></artwork>
        </artset>
      </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>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="4320" width="576" viewBox="0 0 576 4320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,2096" fill="none" stroke="black"/>
              <path d="M 8,2160 L 8,3600" fill="none" stroke="black"/>
              <path d="M 8,3664 L 8,4176" fill="none" stroke="black"/>
              <path d="M 72,48 L 72,88" fill="none" stroke="black"/>
              <path d="M 72,104 L 72,1528" fill="none" stroke="black"/>
              <path d="M 72,1544 L 72,1640" fill="none" stroke="black"/>
              <path d="M 72,1656 L 72,2072" fill="none" stroke="black"/>
              <path d="M 72,2160 L 72,3600" fill="none" stroke="black"/>
              <path d="M 72,3664 L 72,3960" fill="none" stroke="black"/>
              <path d="M 72,3976 L 72,4176" fill="none" stroke="black"/>
              <path d="M 136,48 L 136,2096" fill="none" stroke="black"/>
              <path d="M 136,2160 L 136,3600" fill="none" stroke="black"/>
              <path d="M 136,3664 L 136,4176" fill="none" stroke="black"/>
              <path d="M 216,48 L 216,2096" fill="none" stroke="black"/>
              <path d="M 216,2160 L 216,3600" fill="none" stroke="black"/>
              <path d="M 216,3664 L 216,4176" fill="none" stroke="black"/>
              <path d="M 8,96 L 128,96" fill="none" stroke="black"/>
              <path d="M 136,320 L 208,320" fill="none" stroke="black"/>
              <path d="M 160,656 L 216,656" fill="none" stroke="black"/>
              <path d="M 160,704 L 208,704" fill="none" stroke="black"/>
              <path d="M 440,960 L 456,960" fill="none" stroke="black"/>
              <path d="M 144,1088 L 216,1088" fill="none" stroke="black"/>
              <path d="M 16,1536 L 136,1536" fill="none" stroke="black"/>
              <path d="M 8,1648 L 128,1648" fill="none" stroke="black"/>
              <path d="M 16,2080 L 136,2080" fill="none" stroke="black"/>
              <path d="M 72,2176 L 128,2176" fill="none" stroke="black"/>
              <path d="M 136,2400 L 208,2400" fill="none" stroke="black"/>
              <path d="M 144,2656 L 216,2656" fill="none" stroke="black"/>
              <path d="M 80,3104 L 136,3104" fill="none" stroke="black"/>
              <path d="M 72,3200 L 128,3200" fill="none" stroke="black"/>
              <path d="M 80,3568 L 136,3568" fill="none" stroke="black"/>
              <path d="M 144,3744 L 216,3744" fill="none" stroke="black"/>
              <path d="M 16,3968 L 136,3968" fill="none" stroke="black"/>
              <path d="M 80,4080 L 136,4080" fill="none" stroke="black"/>
              <path d="M 148,680 L 160,704" fill="none" stroke="black"/>
              <path d="M 148,680 L 160,656" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="448,960 436,954.4 436,965.6" fill="black" transform="rotate(180,440,960)"/>
              <polygon class="arrowhead" points="216,2400 204,2394.4 204,2405.6" fill="black" transform="rotate(0,208,2400)"/>
              <polygon class="arrowhead" points="216,704 204,698.4 204,709.6" fill="black" transform="rotate(0,208,704)"/>
              <polygon class="arrowhead" points="216,320 204,314.4 204,325.6" fill="black" transform="rotate(0,208,320)"/>
              <polygon class="arrowhead" points="152,3744 140,3738.4 140,3749.6" fill="black" transform="rotate(180,144,3744)"/>
              <polygon class="arrowhead" points="152,2656 140,2650.4 140,2661.6" fill="black" transform="rotate(180,144,2656)"/>
              <polygon class="arrowhead" points="152,1088 140,1082.4 140,1093.6" fill="black" transform="rotate(180,144,1088)"/>
              <polygon class="arrowhead" points="136,3200 124,3194.4 124,3205.6" fill="black" transform="rotate(0,128,3200)"/>
              <polygon class="arrowhead" points="136,2176 124,2170.4 124,2181.6" fill="black" transform="rotate(0,128,2176)"/>
              <polygon class="arrowhead" points="136,1648 124,1642.4 124,1653.6" fill="black" transform="rotate(0,128,1648)"/>
              <polygon class="arrowhead" points="136,96 124,90.4 124,101.6" fill="black" transform="rotate(0,128,96)"/>
              <polygon class="arrowhead" points="88,4080 76,4074.4 76,4085.6" fill="black" transform="rotate(180,80,4080)"/>
              <polygon class="arrowhead" points="88,3568 76,3562.4 76,3573.6" fill="black" transform="rotate(180,80,3568)"/>
              <polygon class="arrowhead" points="88,3104 76,3098.4 76,3109.6" fill="black" transform="rotate(180,80,3104)"/>
              <polygon class="arrowhead" points="24,3968 12,3962.4 12,3973.6" fill="black" transform="rotate(180,16,3968)"/>
              <polygon class="arrowhead" points="24,2080 12,2074.4 12,2085.6" fill="black" transform="rotate(180,16,2080)"/>
              <polygon class="arrowhead" points="24,1536 12,1530.4 12,1541.6" fill="black" transform="rotate(180,16,1536)"/>
              <g class="text">
                <text x="12" y="36">C1</text>
                <text x="76" y="36">C2</text>
                <text x="136" y="36">P</text>
                <text x="216" y="36">S</text>
                <text x="252" y="68">(The</text>
                <text x="296" y="68">value</text>
                <text x="332" y="68">of</text>
                <text x="360" y="68">the</text>
                <text x="412" y="68">resource</text>
                <text x="460" y="68">/r</text>
                <text x="484" y="68">is</text>
                <text x="528" y="68">"1234")</text>
                <text x="260" y="100">Token:</text>
                <text x="308" y="100">0x4a</text>
                <text x="40" y="116">FETCH</text>
                <text x="268" y="116">Observe:</text>
                <text x="312" y="116">0</text>
                <text x="364" y="116">(register)</text>
                <text x="264" y="132">OSCORE:</text>
                <text x="320" y="132">{kid:</text>
                <text x="368" y="132">0x01;</text>
                <text x="412" y="132">piv:</text>
                <text x="452" y="132">101;</text>
                <text x="492" y="132">...}</text>
                <text x="272" y="148">Uri-Host:</text>
                <text x="380" y="148">"sensor.example"</text>
                <text x="288" y="164">Proxy-Scheme:</text>
                <text x="372" y="164">"coap"</text>
                <text x="260" y="180">&lt;Other</text>
                <text x="312" y="180">class</text>
                <text x="352" y="180">U/I</text>
                <text x="404" y="180">options&gt;</text>
                <text x="252" y="196">0xff</text>
                <text x="304" y="212">Encrypted_payload</text>
                <text x="384" y="212">{</text>
                <text x="268" y="228">0x01</text>
                <text x="316" y="228">(GET),</text>
                <text x="284" y="244">Observe:</text>
                <text x="328" y="244">0</text>
                <text x="384" y="244">(register),</text>
                <text x="288" y="260">Uri-Path:</text>
                <text x="348" y="260">"r",</text>
                <text x="276" y="276">&lt;Other</text>
                <text x="328" y="276">class</text>
                <text x="360" y="276">E</text>
                <text x="404" y="276">options&gt;</text>
                <text x="240" y="292">}</text>
                <text x="260" y="324">Token:</text>
                <text x="308" y="324">0x5e</text>
                <text x="168" y="340">FETCH</text>
                <text x="268" y="340">Observe:</text>
                <text x="312" y="340">0</text>
                <text x="364" y="340">(register)</text>
                <text x="264" y="356">OSCORE:</text>
                <text x="320" y="356">{kid:</text>
                <text x="368" y="356">0x01;</text>
                <text x="412" y="356">piv:</text>
                <text x="452" y="356">101;</text>
                <text x="492" y="356">...}</text>
                <text x="272" y="372">Uri-Host:</text>
                <text x="380" y="372">"sensor.example"</text>
                <text x="260" y="388">&lt;Other</text>
                <text x="312" y="388">class</text>
                <text x="352" y="388">U/I</text>
                <text x="404" y="388">options&gt;</text>
                <text x="252" y="404">0xff</text>
                <text x="304" y="420">Encrypted_payload</text>
                <text x="384" y="420">{</text>
                <text x="268" y="436">0x01</text>
                <text x="316" y="436">(GET),</text>
                <text x="284" y="452">Observe:</text>
                <text x="328" y="452">0</text>
                <text x="384" y="452">(register),</text>
                <text x="288" y="468">Uri-Path:</text>
                <text x="348" y="468">"r",</text>
                <text x="276" y="484">&lt;Other</text>
                <text x="328" y="484">class</text>
                <text x="360" y="484">E</text>
                <text x="404" y="484">options&gt;</text>
                <text x="240" y="500">}</text>
                <text x="244" y="548">(S</text>
                <text x="296" y="548">allocates</text>
                <text x="352" y="548">the</text>
                <text x="408" y="548">available</text>
                <text x="264" y="564">Token</text>
                <text x="312" y="564">value</text>
                <text x="356" y="564">0x7b</text>
                <text x="388" y="564">.)</text>
                <text x="244" y="596">(S</text>
                <text x="280" y="596">sends</text>
                <text x="316" y="596">to</text>
                <text x="356" y="596">itself</text>
                <text x="392" y="596">a</text>
                <text x="432" y="596">phantom</text>
                <text x="512" y="596">observation</text>
                <text x="264" y="612">request</text>
                <text x="324" y="612">PH_REQ</text>
                <text x="364" y="612">as</text>
                <text x="404" y="612">coming</text>
                <text x="452" y="612">from</text>
                <text x="488" y="612">the</text>
                <text x="244" y="628">IP</text>
                <text x="296" y="628">multicast</text>
                <text x="368" y="628">address</text>
                <text x="440" y="628">GRP_ADDR)</text>
                <text x="184" y="644">(#)</text>
                <text x="260" y="708">Token:</text>
                <text x="308" y="708">0x7b</text>
                <text x="184" y="724">FETCH</text>
                <text x="268" y="724">Observe:</text>
                <text x="312" y="724">0</text>
                <text x="364" y="724">(register)</text>
                <text x="264" y="740">OSCORE:</text>
                <text x="320" y="740">{kid:</text>
                <text x="368" y="740">0x05;</text>
                <text x="412" y="740">piv:</text>
                <text x="452" y="740">501;</text>
                <text x="320" y="756">kid</text>
                <text x="372" y="756">context:</text>
                <text x="448" y="756">0x57ab2e;</text>
                <text x="508" y="756">...}</text>
                <text x="272" y="772">Uri-Host:</text>
                <text x="380" y="772">"sensor.example"</text>
                <text x="260" y="788">&lt;Other</text>
                <text x="312" y="788">class</text>
                <text x="352" y="788">U/I</text>
                <text x="404" y="788">options&gt;</text>
                <text x="252" y="804">0xff</text>
                <text x="304" y="820">Encrypted_payload</text>
                <text x="384" y="820">{</text>
                <text x="268" y="836">0x01</text>
                <text x="316" y="836">(GET),</text>
                <text x="284" y="852">Observe:</text>
                <text x="328" y="852">0</text>
                <text x="384" y="852">(register),</text>
                <text x="288" y="868">Uri-Path:</text>
                <text x="348" y="868">"r",</text>
                <text x="276" y="884">&lt;Other</text>
                <text x="328" y="884">class</text>
                <text x="360" y="884">E</text>
                <text x="404" y="884">options&gt;</text>
                <text x="240" y="900">}</text>
                <text x="280" y="916">&lt;Signature&gt;</text>
                <text x="244" y="948">(S</text>
                <text x="280" y="948">steps</text>
                <text x="324" y="948">SN_5</text>
                <text x="356" y="948">in</text>
                <text x="384" y="948">the</text>
                <text x="424" y="948">Group</text>
                <text x="476" y="948">OSCORE</text>
                <text x="276" y="964">Security</text>
                <text x="344" y="964">Context</text>
                <text x="384" y="964">:</text>
                <text x="412" y="964">SN_5</text>
                <text x="484" y="964">502)</text>
                <text x="244" y="996">(S</text>
                <text x="288" y="996">creates</text>
                <text x="328" y="996">a</text>
                <text x="360" y="996">group</text>
                <text x="432" y="996">observation</text>
                <text x="492" y="996">of</text>
                <text x="520" y="996">/r)</text>
                <text x="244" y="1044">(S</text>
                <text x="300" y="1044">increments</text>
                <text x="360" y="1044">the</text>
                <text x="412" y="1044">observer</text>
                <text x="480" y="1044">counter</text>
                <text x="248" y="1060">for</text>
                <text x="280" y="1060">the</text>
                <text x="320" y="1060">group</text>
                <text x="392" y="1060">observation</text>
                <text x="452" y="1060">of</text>
                <text x="480" y="1060">/r)</text>
                <text x="260" y="1092">Token:</text>
                <text x="308" y="1092">0x5e</text>
                <text x="164" y="1108">2.05</text>
                <text x="264" y="1108">OSCORE:</text>
                <text x="320" y="1108">{piv:</text>
                <text x="364" y="1108">301;</text>
                <text x="404" y="1108">...}</text>
                <text x="268" y="1124">Max-Age:</text>
                <text x="312" y="1124">0</text>
                <text x="260" y="1140">&lt;Other</text>
                <text x="312" y="1140">class</text>
                <text x="352" y="1140">U/I</text>
                <text x="404" y="1140">options&gt;</text>
                <text x="252" y="1156">0xff</text>
                <text x="304" y="1172">Encrypted_payload</text>
                <text x="384" y="1172">{</text>
                <text x="268" y="1188">5.03</text>
                <text x="324" y="1188">(Service</text>
                <text x="416" y="1188">Unavailable),</text>
                <text x="312" y="1204">Content-Format:</text>
                <text x="428" y="1204">application/</text>
                <text x="380" y="1220">informative-response+cbor,</text>
                <text x="276" y="1236">&lt;Other</text>
                <text x="328" y="1236">class</text>
                <text x="360" y="1236">E</text>
                <text x="408" y="1236">options&gt;,</text>
                <text x="272" y="1252">0xff,</text>
                <text x="280" y="1268">Payload</text>
                <text x="320" y="1268">{</text>
                <text x="272" y="1284">/</text>
                <text x="312" y="1284">tp_info</text>
                <text x="352" y="1284">/</text>
                <text x="392" y="1284">0</text>
                <text x="408" y="1284">:</text>
                <text x="424" y="1284">[</text>
                <text x="432" y="1300">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="448" y="1316">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="364" y="1332">0x7b],</text>
                <text x="272" y="1348">/</text>
                <text x="308" y="1348">ph_req</text>
                <text x="344" y="1348">/</text>
                <text x="392" y="1348">1</text>
                <text x="408" y="1348">:</text>
                <text x="456" y="1348">bstr(0x05</text>
                <text x="504" y="1348">|</text>
                <text x="440" y="1364">OPT</text>
                <text x="464" y="1364">|</text>
                <text x="492" y="1364">0xff</text>
                <text x="520" y="1364">|</text>
                <text x="456" y="1380">PAYLOAD</text>
                <text x="496" y="1380">|</text>
                <text x="532" y="1380">SIGN),</text>
                <text x="272" y="1396">/</text>
                <text x="324" y="1396">last_notif</text>
                <text x="376" y="1396">/</text>
                <text x="392" y="1396">2</text>
                <text x="408" y="1396">:</text>
                <text x="456" y="1396">bstr(0x45</text>
                <text x="504" y="1396">|</text>
                <text x="440" y="1412">OPT</text>
                <text x="464" y="1412">|</text>
                <text x="492" y="1412">0xff</text>
                <text x="520" y="1412">|</text>
                <text x="456" y="1428">PAYLOAD</text>
                <text x="496" y="1428">|</text>
                <text x="532" y="1428">SIGN),</text>
                <text x="272" y="1444">/</text>
                <text x="316" y="1444">join_uri</text>
                <text x="360" y="1444">/</text>
                <text x="392" y="1444">4</text>
                <text x="408" y="1444">:</text>
                <text x="472" y="1444">"coap://myGM/</text>
                <text x="496" y="1460">ace-group/myGroup",</text>
                <text x="272" y="1476">/</text>
                <text x="308" y="1476">sec_gp</text>
                <text x="344" y="1476">/</text>
                <text x="392" y="1476">5</text>
                <text x="408" y="1476">:</text>
                <text x="456" y="1476">"myGroup"</text>
                <text x="256" y="1492">}</text>
                <text x="240" y="1508">}</text>
                <text x="260" y="1540">Token:</text>
                <text x="308" y="1540">0x4a</text>
                <text x="36" y="1556">2.05</text>
                <text x="264" y="1556">OSCORE:</text>
                <text x="320" y="1556">{piv:</text>
                <text x="364" y="1556">301;</text>
                <text x="404" y="1556">...}</text>
                <text x="260" y="1572">&lt;Other</text>
                <text x="312" y="1572">class</text>
                <text x="352" y="1572">U/I</text>
                <text x="404" y="1572">options&gt;</text>
                <text x="252" y="1588">0xff</text>
                <text x="256" y="1604">(Same</text>
                <text x="356" y="1604">Encrypted_payload)</text>
                <text x="40" y="1636">(#)</text>
                <text x="260" y="1652">Token:</text>
                <text x="308" y="1652">0x4b</text>
                <text x="40" y="1668">FETCH</text>
                <text x="268" y="1668">Observe:</text>
                <text x="312" y="1668">0</text>
                <text x="364" y="1668">(register)</text>
                <text x="264" y="1684">OSCORE:</text>
                <text x="320" y="1684">{kid:</text>
                <text x="364" y="1684">0x05</text>
                <text x="392" y="1684">;</text>
                <text x="420" y="1684">piv:</text>
                <text x="460" y="1684">501;</text>
                <text x="320" y="1700">kid</text>
                <text x="372" y="1700">context:</text>
                <text x="448" y="1700">0x57ab2e;</text>
                <text x="508" y="1700">...}</text>
                <text x="272" y="1716">Uri-Host:</text>
                <text x="380" y="1716">"sensor.example"</text>
                <text x="288" y="1732">Proxy-Scheme:</text>
                <text x="372" y="1732">"coap"</text>
                <text x="356" y="1748">Listen-To-Multicast-Responses:</text>
                <text x="488" y="1748">{</text>
                <text x="380" y="1764">[cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="400" y="1780">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="312" y="1796">0x7b]</text>
                <text x="240" y="1812">}</text>
                <text x="260" y="1828">&lt;Other</text>
                <text x="312" y="1828">class</text>
                <text x="352" y="1828">U/I</text>
                <text x="404" y="1828">options&gt;</text>
                <text x="252" y="1844">0xff</text>
                <text x="304" y="1860">Encrypted_payload</text>
                <text x="384" y="1860">{</text>
                <text x="268" y="1876">0x01</text>
                <text x="316" y="1876">(GET),</text>
                <text x="284" y="1892">Observe:</text>
                <text x="328" y="1892">0</text>
                <text x="384" y="1892">(register),</text>
                <text x="288" y="1908">Uri-Path:</text>
                <text x="348" y="1908">"r",</text>
                <text x="276" y="1924">&lt;Other</text>
                <text x="328" y="1924">class</text>
                <text x="360" y="1924">E</text>
                <text x="404" y="1924">options&gt;</text>
                <text x="240" y="1940">}</text>
                <text x="280" y="1956">&lt;Signature&gt;</text>
                <text x="252" y="1988">(The</text>
                <text x="296" y="1988">proxy</text>
                <text x="348" y="1988">starts</text>
                <text x="416" y="1988">listening</text>
                <text x="468" y="1988">to</text>
                <text x="496" y="1988">the</text>
                <text x="276" y="2004">GRP_ADDR</text>
                <text x="344" y="2004">address</text>
                <text x="392" y="2004">and</text>
                <text x="424" y="2004">the</text>
                <text x="476" y="2004">GRP_PORT</text>
                <text x="540" y="2004">port.)</text>
                <text x="252" y="2036">(The</text>
                <text x="296" y="2036">proxy</text>
                <text x="340" y="2036">adds</text>
                <text x="372" y="2036">C1</text>
                <text x="396" y="2036">to</text>
                <text x="256" y="2052">its</text>
                <text x="292" y="2052">list</text>
                <text x="324" y="2052">of</text>
                <text x="384" y="2052">observers.)</text>
                <text x="72" y="2100">|</text>
                <text x="104" y="2100">ACK</text>
                <text x="16" y="2132">...</text>
                <text x="72" y="2132">...</text>
                <text x="136" y="2132">...</text>
                <text x="208" y="2132">...</text>
                <text x="260" y="2180">Token:</text>
                <text x="308" y="2180">0x01</text>
                <text x="104" y="2196">FETCH</text>
                <text x="268" y="2196">Observe:</text>
                <text x="312" y="2196">0</text>
                <text x="364" y="2196">(register)</text>
                <text x="264" y="2212">OSCORE:</text>
                <text x="320" y="2212">{kid:</text>
                <text x="368" y="2212">0x02;</text>
                <text x="412" y="2212">piv:</text>
                <text x="452" y="2212">201;</text>
                <text x="492" y="2212">...}</text>
                <text x="272" y="2228">Uri-Host:</text>
                <text x="380" y="2228">"sensor.example"</text>
                <text x="288" y="2244">Proxy-Scheme:</text>
                <text x="372" y="2244">"coap"</text>
                <text x="260" y="2260">&lt;Other</text>
                <text x="312" y="2260">class</text>
                <text x="352" y="2260">U/I</text>
                <text x="404" y="2260">options&gt;</text>
                <text x="252" y="2276">0xff</text>
                <text x="304" y="2292">Encrypted_payload</text>
                <text x="384" y="2292">{</text>
                <text x="268" y="2308">0x01</text>
                <text x="316" y="2308">(GET),</text>
                <text x="284" y="2324">Observe:</text>
                <text x="328" y="2324">0</text>
                <text x="384" y="2324">(register),</text>
                <text x="288" y="2340">Uri-Path:</text>
                <text x="348" y="2340">"r",</text>
                <text x="276" y="2356">&lt;Other</text>
                <text x="328" y="2356">class</text>
                <text x="360" y="2356">E</text>
                <text x="404" y="2356">options&gt;</text>
                <text x="240" y="2372">}</text>
                <text x="260" y="2404">Token:</text>
                <text x="308" y="2404">0x5f</text>
                <text x="168" y="2420">FETCH</text>
                <text x="268" y="2420">Observe:</text>
                <text x="312" y="2420">0</text>
                <text x="364" y="2420">(register)</text>
                <text x="264" y="2436">OSCORE:</text>
                <text x="320" y="2436">{kid:</text>
                <text x="368" y="2436">0x02;</text>
                <text x="412" y="2436">piv:</text>
                <text x="452" y="2436">201;</text>
                <text x="492" y="2436">...}</text>
                <text x="272" y="2452">Uri-Host:</text>
                <text x="380" y="2452">"sensor.example"</text>
                <text x="260" y="2468">&lt;Other</text>
                <text x="312" y="2468">class</text>
                <text x="352" y="2468">U/I</text>
                <text x="404" y="2468">options&gt;</text>
                <text x="252" y="2484">0xff</text>
                <text x="304" y="2500">Encrypted_payload</text>
                <text x="384" y="2500">{</text>
                <text x="268" y="2516">0x01</text>
                <text x="316" y="2516">(GET),</text>
                <text x="284" y="2532">Observe:</text>
                <text x="328" y="2532">0</text>
                <text x="384" y="2532">(register),</text>
                <text x="288" y="2548">Uri-Path:</text>
                <text x="348" y="2548">"r",</text>
                <text x="276" y="2564">&lt;Other</text>
                <text x="328" y="2564">class</text>
                <text x="360" y="2564">E</text>
                <text x="404" y="2564">options&gt;</text>
                <text x="240" y="2580">}</text>
                <text x="244" y="2612">(S</text>
                <text x="300" y="2612">increments</text>
                <text x="360" y="2612">the</text>
                <text x="412" y="2612">observer</text>
                <text x="480" y="2612">counter</text>
                <text x="248" y="2628">for</text>
                <text x="280" y="2628">the</text>
                <text x="320" y="2628">group</text>
                <text x="392" y="2628">observation</text>
                <text x="452" y="2628">of</text>
                <text x="480" y="2628">/r)</text>
                <text x="260" y="2660">Token:</text>
                <text x="308" y="2660">0x5f</text>
                <text x="164" y="2676">2.05</text>
                <text x="264" y="2676">OSCORE:</text>
                <text x="320" y="2676">{piv:</text>
                <text x="364" y="2676">401;</text>
                <text x="404" y="2676">...}</text>
                <text x="268" y="2692">Max-Age:</text>
                <text x="312" y="2692">0</text>
                <text x="260" y="2708">&lt;Other</text>
                <text x="312" y="2708">class</text>
                <text x="352" y="2708">U/I</text>
                <text x="404" y="2708">options&gt;</text>
                <text x="252" y="2724">0xff</text>
                <text x="304" y="2740">Encrypted_payload</text>
                <text x="384" y="2740">{</text>
                <text x="268" y="2756">5.03</text>
                <text x="324" y="2756">(Service</text>
                <text x="416" y="2756">Unavailable),</text>
                <text x="312" y="2772">Content-Format:</text>
                <text x="428" y="2772">application/</text>
                <text x="380" y="2788">informative-response+cbor,</text>
                <text x="276" y="2804">&lt;Other</text>
                <text x="328" y="2804">class</text>
                <text x="360" y="2804">E</text>
                <text x="408" y="2804">options&gt;,</text>
                <text x="272" y="2820">0xff,</text>
                <text x="280" y="2836">Payload</text>
                <text x="320" y="2836">{</text>
                <text x="272" y="2852">/</text>
                <text x="312" y="2852">tp_info</text>
                <text x="352" y="2852">/</text>
                <text x="392" y="2852">0</text>
                <text x="408" y="2852">:</text>
                <text x="424" y="2852">[</text>
                <text x="432" y="2868">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="448" y="2884">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="364" y="2900">0x7b],</text>
                <text x="272" y="2916">/</text>
                <text x="308" y="2916">ph_req</text>
                <text x="344" y="2916">/</text>
                <text x="392" y="2916">1</text>
                <text x="408" y="2916">:</text>
                <text x="456" y="2916">bstr(0x05</text>
                <text x="504" y="2916">|</text>
                <text x="440" y="2932">OPT</text>
                <text x="464" y="2932">|</text>
                <text x="492" y="2932">0xff</text>
                <text x="520" y="2932">|</text>
                <text x="456" y="2948">PAYLOAD</text>
                <text x="496" y="2948">|</text>
                <text x="532" y="2948">SIGN),</text>
                <text x="272" y="2964">/</text>
                <text x="324" y="2964">last_notif</text>
                <text x="376" y="2964">/</text>
                <text x="392" y="2964">2</text>
                <text x="408" y="2964">:</text>
                <text x="456" y="2964">bstr(0x45</text>
                <text x="504" y="2964">|</text>
                <text x="440" y="2980">OPT</text>
                <text x="464" y="2980">|</text>
                <text x="492" y="2980">0xff</text>
                <text x="520" y="2980">|</text>
                <text x="456" y="2996">PAYLOAD</text>
                <text x="496" y="2996">|</text>
                <text x="532" y="2996">SIGN),</text>
                <text x="272" y="3012">/</text>
                <text x="316" y="3012">join_uri</text>
                <text x="360" y="3012">/</text>
                <text x="392" y="3012">4</text>
                <text x="408" y="3012">:</text>
                <text x="472" y="3012">"coap://myGM/</text>
                <text x="496" y="3028">ace-group/myGroup",</text>
                <text x="272" y="3044">/</text>
                <text x="308" y="3044">sec_gp</text>
                <text x="344" y="3044">/</text>
                <text x="392" y="3044">5</text>
                <text x="408" y="3044">:</text>
                <text x="456" y="3044">"myGroup"</text>
                <text x="256" y="3060">}</text>
                <text x="240" y="3076">}</text>
                <text x="260" y="3108">Token:</text>
                <text x="308" y="3108">0x01</text>
                <text x="100" y="3124">2.05</text>
                <text x="264" y="3124">OSCORE:</text>
                <text x="320" y="3124">{piv:</text>
                <text x="364" y="3124">401;</text>
                <text x="404" y="3124">...}</text>
                <text x="260" y="3140">&lt;Other</text>
                <text x="312" y="3140">class</text>
                <text x="352" y="3140">U/I</text>
                <text x="404" y="3140">options&gt;</text>
                <text x="252" y="3156">0xff</text>
                <text x="256" y="3172">(Same</text>
                <text x="356" y="3172">Encrypted_payload)</text>
                <text x="104" y="3188">(#)</text>
                <text x="260" y="3204">Token:</text>
                <text x="308" y="3204">0x02</text>
                <text x="104" y="3220">FETCH</text>
                <text x="268" y="3220">Observe:</text>
                <text x="312" y="3220">0</text>
                <text x="364" y="3220">(register)</text>
                <text x="264" y="3236">OSCORE:</text>
                <text x="320" y="3236">{kid:</text>
                <text x="368" y="3236">0x05;</text>
                <text x="412" y="3236">piv:</text>
                <text x="452" y="3236">501;</text>
                <text x="320" y="3252">kid</text>
                <text x="372" y="3252">context:</text>
                <text x="440" y="3252">57ab2e;</text>
                <text x="492" y="3252">...}</text>
                <text x="272" y="3268">Uri-Host:</text>
                <text x="380" y="3268">"sensor.example"</text>
                <text x="288" y="3284">Proxy-Scheme:</text>
                <text x="372" y="3284">"coap"</text>
                <text x="356" y="3300">Listen-To-Multicast-Responses:</text>
                <text x="488" y="3300">{</text>
                <text x="380" y="3316">[cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="400" y="3332">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="312" y="3348">0x7b]</text>
                <text x="240" y="3364">}</text>
                <text x="260" y="3380">&lt;Other</text>
                <text x="312" y="3380">class</text>
                <text x="352" y="3380">U/I</text>
                <text x="404" y="3380">options&gt;</text>
                <text x="252" y="3396">0xff</text>
                <text x="304" y="3412">Encrypted_payload</text>
                <text x="384" y="3412">{</text>
                <text x="268" y="3428">0x01</text>
                <text x="316" y="3428">(GET),</text>
                <text x="284" y="3444">Observe:</text>
                <text x="328" y="3444">0</text>
                <text x="384" y="3444">(register),</text>
                <text x="288" y="3460">Uri-Path:</text>
                <text x="348" y="3460">"r",</text>
                <text x="276" y="3476">&lt;Other</text>
                <text x="328" y="3476">class</text>
                <text x="360" y="3476">E</text>
                <text x="404" y="3476">options&gt;</text>
                <text x="240" y="3492">}</text>
                <text x="280" y="3508">&lt;Signature&gt;</text>
                <text x="252" y="3540">(The</text>
                <text x="296" y="3540">proxy</text>
                <text x="340" y="3540">adds</text>
                <text x="372" y="3540">C2</text>
                <text x="396" y="3540">to</text>
                <text x="256" y="3556">its</text>
                <text x="292" y="3556">list</text>
                <text x="324" y="3556">of</text>
                <text x="384" y="3556">observers.)</text>
                <text x="104" y="3588">ACK</text>
                <text x="16" y="3636">...</text>
                <text x="72" y="3636">...</text>
                <text x="136" y="3636">...</text>
                <text x="208" y="3636">...</text>
                <text x="252" y="3684">(The</text>
                <text x="296" y="3684">value</text>
                <text x="332" y="3684">of</text>
                <text x="360" y="3684">the</text>
                <text x="412" y="3684">resource</text>
                <text x="252" y="3700">/r</text>
                <text x="296" y="3700">changes</text>
                <text x="340" y="3700">to</text>
                <text x="388" y="3700">"5678".)</text>
                <text x="180" y="3732">(##)</text>
                <text x="260" y="3748">Token:</text>
                <text x="308" y="3748">0x7b</text>
                <text x="164" y="3764">2.05</text>
                <text x="268" y="3764">Observe:</text>
                <text x="316" y="3764">11</text>
                <text x="264" y="3780">OSCORE:</text>
                <text x="320" y="3780">{kid:</text>
                <text x="368" y="3780">0x05;</text>
                <text x="412" y="3780">piv:</text>
                <text x="452" y="3780">502;</text>
                <text x="492" y="3780">...}</text>
                <text x="260" y="3796">&lt;Other</text>
                <text x="312" y="3796">class</text>
                <text x="352" y="3796">U/I</text>
                <text x="404" y="3796">options&gt;</text>
                <text x="252" y="3812">0xff</text>
                <text x="304" y="3828">Encrypted_payload</text>
                <text x="384" y="3828">{</text>
                <text x="268" y="3844">2.05</text>
                <text x="332" y="3844">(Content),</text>
                <text x="284" y="3860">Observe:</text>
                <text x="356" y="3860">[empty],</text>
                <text x="276" y="3876">&lt;Other</text>
                <text x="328" y="3876">class</text>
                <text x="360" y="3876">E</text>
                <text x="408" y="3876">options&gt;,</text>
                <text x="272" y="3892">0xff,</text>
                <text x="284" y="3908">Payload:</text>
                <text x="348" y="3908">"5678"</text>
                <text x="240" y="3924">}</text>
                <text x="280" y="3940">&lt;Signature&gt;</text>
                <text x="40" y="3956">(#)</text>
                <text x="260" y="3972">Token:</text>
                <text x="308" y="3972">0x4b</text>
                <text x="36" y="3988">2.05</text>
                <text x="268" y="3988">Observe:</text>
                <text x="328" y="3988">54123</text>
                <text x="264" y="4004">OSCORE:</text>
                <text x="320" y="4004">{kid:</text>
                <text x="368" y="4004">0x05;</text>
                <text x="412" y="4004">piv:</text>
                <text x="452" y="4004">502;</text>
                <text x="492" y="4004">...}</text>
                <text x="260" y="4020">&lt;Other</text>
                <text x="312" y="4020">class</text>
                <text x="352" y="4020">U/I</text>
                <text x="404" y="4020">options&gt;</text>
                <text x="252" y="4036">0xff</text>
                <text x="256" y="4052">(Same</text>
                <text x="352" y="4052">Encrypted_payload</text>
                <text x="440" y="4052">and</text>
                <text x="500" y="4052">Signature)</text>
                <text x="104" y="4068">(#)</text>
                <text x="260" y="4084">Token:</text>
                <text x="308" y="4084">0x02</text>
                <text x="100" y="4100">2.05</text>
                <text x="268" y="4100">Observe:</text>
                <text x="328" y="4100">54123</text>
                <text x="264" y="4116">OSCORE:</text>
                <text x="320" y="4116">{kid:</text>
                <text x="368" y="4116">0x05;</text>
                <text x="412" y="4116">piv:</text>
                <text x="452" y="4116">502;</text>
                <text x="492" y="4116">...}</text>
                <text x="260" y="4132">&lt;Other</text>
                <text x="312" y="4132">class</text>
                <text x="352" y="4132">U/I</text>
                <text x="404" y="4132">options&gt;</text>
                <text x="252" y="4148">0xff</text>
                <text x="256" y="4164">(Same</text>
                <text x="352" y="4164">Encrypted_payload</text>
                <text x="440" y="4164">and</text>
                <text x="500" y="4164">signature)</text>
                <text x="16" y="4228">(#)</text>
                <text x="60" y="4228">Sent</text>
                <text x="100" y="4228">over</text>
                <text x="156" y="4228">unicast,</text>
                <text x="208" y="4228">and</text>
                <text x="264" y="4228">protected</text>
                <text x="324" y="4228">with</text>
                <text x="368" y="4228">Group</text>
                <text x="420" y="4228">OSCORE</text>
                <text x="492" y="4228">end-to-end</text>
                <text x="72" y="4244">between</text>
                <text x="120" y="4244">the</text>
                <text x="164" y="4244">server</text>
                <text x="208" y="4244">and</text>
                <text x="240" y="4244">the</text>
                <text x="292" y="4244">clients.</text>
                <text x="20" y="4276">(##)</text>
                <text x="60" y="4276">Sent</text>
                <text x="100" y="4276">over</text>
                <text x="132" y="4276">IP</text>
                <text x="184" y="4276">multicast</text>
                <text x="236" y="4276">to</text>
                <text x="340" y="4276">GROUP_ADDR:GROUP_PORT,</text>
                <text x="448" y="4276">and</text>
                <text x="504" y="4276">protected</text>
                <text x="60" y="4292">with</text>
                <text x="104" y="4292">Group</text>
                <text x="156" y="4292">OSCORE</text>
                <text x="228" y="4292">end-to-end</text>
                <text x="304" y="4292">between</text>
                <text x="352" y="4292">the</text>
                <text x="396" y="4292">server</text>
                <text x="440" y="4292">and</text>
                <text x="472" y="4292">the</text>
                <text x="524" y="4292">clients.</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![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,
|       |       |         |    Payload {
|       |       |         |      / tp_info /    0 : [
|       |       |         |           cri'coap://SRV_ADDR:SRV_PORT/',
|       |       |         |             cri'coap://GRP_ADDR:GRP_PORT/',
|       |       |         |               0x7b],
|       |       |         |      / ph_req /     1 : bstr(0x05 |
|       |       |         |                          OPT | 0xff |
|       |       |         |                          PAYLOAD | SIGN),
|       |       |         |      / last_notif / 2 : bstr(0x45 |
|       |       |         |                          OPT | 0xff |
|       |       |         |                          PAYLOAD | SIGN),
|       |       |         |      / join_uri /   4 : "coap://myGM/
|       |       |         |                         ace-group/myGroup",
|       |       |         |      / sec_gp /     5 : "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: {
|       |       |         |    [cri'coap://SRV_ADDR:SRV_PORT/',
|       |       |         |       cri'coap://GRP_ADDR:GRP_PORT/',
|       |       |         |         0x7b]
|       |       |         |  }
|       |       |         |  <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,
|       |       |         |    Payload {
|       |       |         |      / tp_info /    0 : [
|       |       |         |           cri'coap://SRV_ADDR:SRV_PORT/',
|       |       |         |             cri'coap://GRP_ADDR:GRP_PORT/',
|       |       |         |               0x7b],
|       |       |         |      / ph_req /     1 : bstr(0x05 |
|       |       |         |                          OPT | 0xff |
|       |       |         |                          PAYLOAD | SIGN),
|       |       |         |      / last_notif / 2 : bstr(0x45 |
|       |       |         |                          OPT | 0xff |
|       |       |         |                          PAYLOAD | SIGN),
|       |       |         |      / join_uri /   4 : "coap://myGM/
|       |       |         |                         ace-group/myGroup",
|       |       |         |      / sec_gp /     5 : "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: {
|       |       |         |    [cri'coap://SRV_ADDR:SRV_PORT/',
|       |       |         |       cri'coap://GRP_ADDR:GRP_PORT/',
|       |       |         |         0x7b]
|       |       |         |  }
|       |       |         |  <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],
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    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>
        </artset>
      </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>
            <t>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.</t>
          </li>
          <li>
            <t>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"/>).</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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 step 2 above, the same would happen if the phantom request was not specifically a deterministic request.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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 recognizes the phantom request among the stored ones, through a byte-by-byte comparison of the incoming message minus the transport-related fields (see <xref target="deterministic-phantom-Request"/>). Consequently, the server does not perform any Group OSCORE processing on it.</t>
          </li>
          <li>
            <t>The server replies with an unprotected informative response (see <xref target="ssec-server-side-informative"/>), including: the transport-specific information, (optionally) the phantom request, and (optionally) the latest notification.  </t>
            <t>
Note that the phantom request can be omitted, since it is the deterministic phantom request from the client, and thus "in terms of transport-independent information, identical to the registration request from the client" (see <xref target="ssec-server-side-informative"/>).</t>
          </li>
          <li>
            <t>From the received informative 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 informative 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).</t>
          </li>
          <li>
            <t>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.</t>
          </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>
            <t>Two clients C1 and C2 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>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
        </ul>
        <t>In addition:</t>
        <ul spacing="normal">
          <li>
            <t>The proxy has address PRX_ADDR and listens to the port number PRX_PORT.</t>
          </li>
          <li>
            <t>The deterministic client in the OSCORE group has 'kid' = 0x09.</t>
          </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>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="3440" width="576" viewBox="0 0 576 3440" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,2112" fill="none" stroke="black"/>
              <path d="M 8,2176 L 8,2688" fill="none" stroke="black"/>
              <path d="M 8,2752 L 8,3312" fill="none" stroke="black"/>
              <path d="M 72,48 L 72,664" fill="none" stroke="black"/>
              <path d="M 72,680 L 72,1912" fill="none" stroke="black"/>
              <path d="M 72,1928 L 72,2112" fill="none" stroke="black"/>
              <path d="M 72,2176 L 72,2688" fill="none" stroke="black"/>
              <path d="M 72,2752 L 72,3096" fill="none" stroke="black"/>
              <path d="M 72,3112 L 72,3312" fill="none" stroke="black"/>
              <path d="M 136,48 L 136,2112" fill="none" stroke="black"/>
              <path d="M 136,2176 L 136,2688" fill="none" stroke="black"/>
              <path d="M 136,2752 L 136,3312" fill="none" stroke="black"/>
              <path d="M 216,48 L 216,2112" fill="none" stroke="black"/>
              <path d="M 216,2176 L 216,2688" fill="none" stroke="black"/>
              <path d="M 216,2752 L 216,3312" fill="none" stroke="black"/>
              <path d="M 512,1152 L 512,1160" fill="none" stroke="black"/>
              <path d="M 160,240 L 216,240" fill="none" stroke="black"/>
              <path d="M 160,288 L 208,288" fill="none" stroke="black"/>
              <path d="M 8,672 L 128,672" fill="none" stroke="black"/>
              <path d="M 136,912 L 208,912" fill="none" stroke="black"/>
              <path d="M 144,1552 L 216,1552" fill="none" stroke="black"/>
              <path d="M 16,1920 L 136,1920" fill="none" stroke="black"/>
              <path d="M 72,2224 L 128,2224" fill="none" stroke="black"/>
              <path d="M 80,2496 L 136,2496" fill="none" stroke="black"/>
              <path d="M 144,2832 L 216,2832" fill="none" stroke="black"/>
              <path d="M 16,3104 L 136,3104" fill="none" stroke="black"/>
              <path d="M 80,3216 L 136,3216" fill="none" stroke="black"/>
              <path d="M 148,264 L 160,288" fill="none" stroke="black"/>
              <path d="M 148,264 L 160,240" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="216,912 204,906.4 204,917.6" fill="black" transform="rotate(0,208,912)"/>
              <polygon class="arrowhead" points="216,288 204,282.4 204,293.6" fill="black" transform="rotate(0,208,288)"/>
              <polygon class="arrowhead" points="152,2832 140,2826.4 140,2837.6" fill="black" transform="rotate(180,144,2832)"/>
              <polygon class="arrowhead" points="152,1552 140,1546.4 140,1557.6" fill="black" transform="rotate(180,144,1552)"/>
              <polygon class="arrowhead" points="136,2224 124,2218.4 124,2229.6" fill="black" transform="rotate(0,128,2224)"/>
              <polygon class="arrowhead" points="136,672 124,666.4 124,677.6" fill="black" transform="rotate(0,128,672)"/>
              <polygon class="arrowhead" points="88,3216 76,3210.4 76,3221.6" fill="black" transform="rotate(180,80,3216)"/>
              <polygon class="arrowhead" points="88,2496 76,2490.4 76,2501.6" fill="black" transform="rotate(180,80,2496)"/>
              <polygon class="arrowhead" points="24,3104 12,3098.4 12,3109.6" fill="black" transform="rotate(180,16,3104)"/>
              <polygon class="arrowhead" points="24,1920 12,1914.4 12,1925.6" fill="black" transform="rotate(180,16,1920)"/>
              <g class="text">
                <text x="12" y="36">C1</text>
                <text x="76" y="36">C2</text>
                <text x="136" y="36">P</text>
                <text x="216" y="36">S</text>
                <text x="252" y="68">(The</text>
                <text x="296" y="68">value</text>
                <text x="332" y="68">of</text>
                <text x="360" y="68">the</text>
                <text x="412" y="68">resource</text>
                <text x="460" y="68">/r</text>
                <text x="484" y="68">is</text>
                <text x="528" y="68">"1234")</text>
                <text x="244" y="100">(S</text>
                <text x="296" y="100">allocates</text>
                <text x="352" y="100">the</text>
                <text x="408" y="100">available</text>
                <text x="264" y="116">Token</text>
                <text x="312" y="116">value</text>
                <text x="356" y="116">0x7b</text>
                <text x="388" y="116">.)</text>
                <text x="244" y="148">(S</text>
                <text x="280" y="148">sends</text>
                <text x="316" y="148">to</text>
                <text x="356" y="148">itself</text>
                <text x="392" y="148">a</text>
                <text x="432" y="148">phantom</text>
                <text x="512" y="148">observation</text>
                <text x="272" y="164">request</text>
                <text x="332" y="164">PH_REQ</text>
                <text x="372" y="164">as</text>
                <text x="412" y="164">coming</text>
                <text x="460" y="164">from</text>
                <text x="496" y="164">the</text>
                <text x="252" y="180">IP</text>
                <text x="304" y="180">multicast</text>
                <text x="376" y="180">address</text>
                <text x="448" y="180">GRP_ADDR.</text>
                <text x="256" y="196">The</text>
                <text x="296" y="196">Group</text>
                <text x="348" y="196">OSCORE</text>
                <text x="420" y="196">processing</text>
                <text x="492" y="196">occurs</text>
                <text x="532" y="196">as</text>
                <text x="280" y="212">specified</text>
                <text x="336" y="212">for</text>
                <text x="360" y="212">a</text>
                <text x="424" y="212">deterministic</text>
                <text x="516" y="212">request)</text>
                <text x="260" y="292">Token:</text>
                <text x="308" y="292">0x7b</text>
                <text x="184" y="308">FETCH</text>
                <text x="272" y="308">Uri-Host:</text>
                <text x="380" y="308">"sensor.example"</text>
                <text x="268" y="324">Observe:</text>
                <text x="312" y="324">0</text>
                <text x="364" y="324">(register)</text>
                <text x="264" y="340">OSCORE:</text>
                <text x="320" y="340">{kid:</text>
                <text x="364" y="340">0x09</text>
                <text x="392" y="340">;</text>
                <text x="420" y="340">piv:</text>
                <text x="448" y="340">0</text>
                <text x="464" y="340">;</text>
                <text x="320" y="356">kid</text>
                <text x="372" y="356">context:</text>
                <text x="444" y="356">0x57ab2e</text>
                <text x="488" y="356">;</text>
                <text x="512" y="356">...</text>
                <text x="536" y="356">}</text>
                <text x="260" y="372">&lt;Other</text>
                <text x="312" y="372">class</text>
                <text x="352" y="372">U/I</text>
                <text x="404" y="372">options&gt;</text>
                <text x="252" y="388">0xff</text>
                <text x="304" y="404">Encrypted_payload</text>
                <text x="384" y="404">{</text>
                <text x="268" y="420">0x01</text>
                <text x="316" y="420">(GET),</text>
                <text x="284" y="436">Observe:</text>
                <text x="328" y="436">0</text>
                <text x="384" y="436">(register),</text>
                <text x="288" y="452">Uri-Path:</text>
                <text x="348" y="452">"r",</text>
                <text x="276" y="468">&lt;Other</text>
                <text x="328" y="468">class</text>
                <text x="360" y="468">E</text>
                <text x="404" y="468">options&gt;</text>
                <text x="240" y="484">}</text>
                <text x="244" y="516">(S</text>
                <text x="288" y="516">creates</text>
                <text x="328" y="516">a</text>
                <text x="360" y="516">group</text>
                <text x="432" y="516">observation</text>
                <text x="492" y="516">of</text>
                <text x="520" y="516">/r)</text>
                <text x="252" y="548">(The</text>
                <text x="300" y="548">server</text>
                <text x="348" y="548">does</text>
                <text x="384" y="548">not</text>
                <text x="432" y="548">respond</text>
                <text x="476" y="548">to</text>
                <text x="520" y="548">PH_REQ.</text>
                <text x="256" y="564">The</text>
                <text x="300" y="564">server</text>
                <text x="356" y="564">stores</text>
                <text x="412" y="564">PH_REQ</text>
                <text x="472" y="564">locally</text>
                <text x="520" y="564">and</text>
                <text x="264" y="580">makes</text>
                <text x="300" y="580">it</text>
                <text x="352" y="580">available</text>
                <text x="404" y="580">at</text>
                <text x="428" y="580">an</text>
                <text x="476" y="580">external</text>
                <text x="544" y="580">source)</text>
                <text x="248" y="628">(C1</text>
                <text x="296" y="628">obtains</text>
                <text x="356" y="628">PH_REQ</text>
                <text x="400" y="628">and</text>
                <text x="440" y="628">sends</text>
                <text x="476" y="628">it</text>
                <text x="500" y="628">to</text>
                <text x="524" y="628">P)</text>
                <text x="260" y="676">Token:</text>
                <text x="308" y="676">0x4a</text>
                <text x="40" y="692">FETCH</text>
                <text x="272" y="692">Uri-Host:</text>
                <text x="380" y="692">"sensor.example"</text>
                <text x="268" y="708">Observe:</text>
                <text x="312" y="708">0</text>
                <text x="364" y="708">(register)</text>
                <text x="264" y="724">OSCORE:</text>
                <text x="320" y="724">{kid:</text>
                <text x="364" y="724">0x09</text>
                <text x="392" y="724">;</text>
                <text x="420" y="724">piv:</text>
                <text x="448" y="724">0</text>
                <text x="464" y="724">;</text>
                <text x="320" y="740">kid</text>
                <text x="372" y="740">context:</text>
                <text x="444" y="740">0x57ab2e</text>
                <text x="488" y="740">;</text>
                <text x="512" y="740">...</text>
                <text x="536" y="740">}</text>
                <text x="288" y="756">Proxy-Scheme:</text>
                <text x="372" y="756">"coap"</text>
                <text x="260" y="772">&lt;Other</text>
                <text x="312" y="772">class</text>
                <text x="352" y="772">U/I</text>
                <text x="404" y="772">options&gt;</text>
                <text x="252" y="788">0xff</text>
                <text x="304" y="804">Encrypted_payload</text>
                <text x="384" y="804">{</text>
                <text x="268" y="820">0x01</text>
                <text x="316" y="820">(GET),</text>
                <text x="284" y="836">Observe:</text>
                <text x="328" y="836">0</text>
                <text x="384" y="836">(register),</text>
                <text x="288" y="852">Uri-Path:</text>
                <text x="348" y="852">"r",</text>
                <text x="276" y="868">&lt;Other</text>
                <text x="328" y="868">class</text>
                <text x="360" y="868">E</text>
                <text x="404" y="868">options&gt;</text>
                <text x="240" y="884">}</text>
                <text x="260" y="916">Token:</text>
                <text x="308" y="916">0x5e</text>
                <text x="168" y="932">FETCH</text>
                <text x="272" y="932">Uri-Host:</text>
                <text x="380" y="932">"sensor.example"</text>
                <text x="268" y="948">Observe:</text>
                <text x="312" y="948">0</text>
                <text x="364" y="948">(register)</text>
                <text x="264" y="964">OSCORE:</text>
                <text x="320" y="964">{kid:</text>
                <text x="364" y="964">0x09</text>
                <text x="392" y="964">;</text>
                <text x="420" y="964">piv:</text>
                <text x="448" y="964">0</text>
                <text x="464" y="964">;</text>
                <text x="320" y="980">kid</text>
                <text x="372" y="980">context:</text>
                <text x="444" y="980">0x57ab2e</text>
                <text x="488" y="980">;</text>
                <text x="512" y="980">...</text>
                <text x="536" y="980">}</text>
                <text x="260" y="996">&lt;Other</text>
                <text x="312" y="996">class</text>
                <text x="352" y="996">U/I</text>
                <text x="404" y="996">options&gt;</text>
                <text x="252" y="1012">0xff</text>
                <text x="304" y="1028">Encrypted_payload</text>
                <text x="384" y="1028">{</text>
                <text x="268" y="1044">0x01</text>
                <text x="316" y="1044">(GET),</text>
                <text x="284" y="1060">Observe:</text>
                <text x="328" y="1060">0</text>
                <text x="384" y="1060">(register),</text>
                <text x="288" y="1076">Uri-Path:</text>
                <text x="348" y="1076">"r",</text>
                <text x="276" y="1092">&lt;Other</text>
                <text x="328" y="1092">class</text>
                <text x="360" y="1092">E</text>
                <text x="404" y="1092">options&gt;</text>
                <text x="240" y="1108">}</text>
                <text x="244" y="1140">(S</text>
                <text x="300" y="1140">recognizes</text>
                <text x="372" y="1140">PH_REQ</text>
                <text x="432" y="1140">through</text>
                <text x="516" y="1140">byte-by-byte</text>
                <text x="284" y="1156">comparison</text>
                <text x="360" y="1156">against</text>
                <text x="408" y="1156">the</text>
                <text x="452" y="1156">stored</text>
                <text x="496" y="1156">one</text>
                <text x="536" y="1156">and</text>
                <text x="264" y="1172">skips</text>
                <text x="304" y="1172">any</text>
                <text x="344" y="1172">Group</text>
                <text x="396" y="1172">OSCORE</text>
                <text x="472" y="1172">processing)</text>
                <text x="244" y="1204">(S</text>
                <text x="292" y="1204">prepares</text>
                <text x="344" y="1204">the</text>
                <text x="384" y="1204">"last</text>
                <text x="464" y="1204">notification"</text>
                <text x="276" y="1220">response</text>
                <text x="344" y="1220">defined</text>
                <text x="404" y="1220">below)</text>
                <text x="252" y="1252">0x45</text>
                <text x="296" y="1252">(2.05</text>
                <text x="356" y="1252">Content)</text>
                <text x="268" y="1268">Observe:</text>
                <text x="316" y="1268">10</text>
                <text x="264" y="1284">OSCORE:</text>
                <text x="320" y="1284">{kid:</text>
                <text x="364" y="1284">0x05</text>
                <text x="392" y="1284">;</text>
                <text x="420" y="1284">piv:</text>
                <text x="456" y="1284">501</text>
                <text x="480" y="1284">;</text>
                <text x="508" y="1284">...}</text>
                <text x="268" y="1300">Max-Age:</text>
                <text x="324" y="1300">3000</text>
                <text x="260" y="1316">&lt;Other</text>
                <text x="312" y="1316">class</text>
                <text x="352" y="1316">U/I</text>
                <text x="404" y="1316">options&gt;</text>
                <text x="252" y="1332">0xff</text>
                <text x="304" y="1348">Encrypted_payload</text>
                <text x="384" y="1348">{</text>
                <text x="268" y="1364">0x45</text>
                <text x="312" y="1364">(2.05</text>
                <text x="376" y="1364">Content),</text>
                <text x="284" y="1380">Observe:</text>
                <text x="356" y="1380">[empty],</text>
                <text x="284" y="1396">Payload:</text>
                <text x="348" y="1396">"1234"</text>
                <text x="240" y="1412">}</text>
                <text x="280" y="1428">&lt;Signature&gt;</text>
                <text x="244" y="1460">(S</text>
                <text x="300" y="1460">increments</text>
                <text x="360" y="1460">the</text>
                <text x="412" y="1460">observer</text>
                <text x="480" y="1460">counter</text>
                <text x="248" y="1476">for</text>
                <text x="280" y="1476">the</text>
                <text x="320" y="1476">group</text>
                <text x="392" y="1476">observation</text>
                <text x="452" y="1476">of</text>
                <text x="480" y="1476">/r)</text>
                <text x="244" y="1508">(S</text>
                <text x="292" y="1508">responds</text>
                <text x="340" y="1508">to</text>
                <text x="368" y="1508">the</text>
                <text x="408" y="1508">proxy</text>
                <text x="452" y="1508">with</text>
                <text x="484" y="1508">an</text>
                <text x="288" y="1524">unprotected</text>
                <text x="384" y="1524">informative</text>
                <text x="472" y="1524">response)</text>
                <text x="176" y="1540">(#)</text>
                <text x="260" y="1556">Token:</text>
                <text x="308" y="1556">0x5e</text>
                <text x="164" y="1572">5.03</text>
                <text x="296" y="1572">Content-Format:</text>
                <text x="412" y="1572">application/</text>
                <text x="352" y="1588">informative-response+cbor</text>
                <text x="268" y="1604">Max-Age:</text>
                <text x="312" y="1604">0</text>
                <text x="252" y="1620">0xff</text>
                <text x="264" y="1636">Payload</text>
                <text x="304" y="1636">{</text>
                <text x="256" y="1652">/</text>
                <text x="296" y="1652">tp_info</text>
                <text x="336" y="1652">/</text>
                <text x="376" y="1652">0</text>
                <text x="392" y="1652">:</text>
                <text x="408" y="1652">[</text>
                <text x="432" y="1668">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="448" y="1684">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="364" y="1700">0x7b],</text>
                <text x="256" y="1716">/</text>
                <text x="308" y="1716">last_notif</text>
                <text x="360" y="1716">/</text>
                <text x="376" y="1716">2</text>
                <text x="392" y="1716">:</text>
                <text x="424" y="1716">&lt;this</text>
                <text x="480" y="1716">conveys</text>
                <text x="384" y="1732">the</text>
                <text x="424" y="1732">"last</text>
                <text x="504" y="1732">notification"</text>
                <text x="404" y="1748">response</text>
                <text x="476" y="1748">prepared</text>
                <text x="540" y="1748">above&gt;</text>
                <text x="240" y="1764">}</text>
                <text x="244" y="1796">(P</text>
                <text x="292" y="1796">extracts</text>
                <text x="356" y="1796">PH_REQ</text>
                <text x="400" y="1796">and</text>
                <text x="444" y="1796">starts</text>
                <text x="512" y="1796">listening</text>
                <text x="252" y="1812">to</text>
                <text x="304" y="1812">multicast</text>
                <text x="400" y="1812">notifications</text>
                <text x="476" y="1812">with</text>
                <text x="520" y="1812">Token</text>
                <text x="260" y="1828">0x7b</text>
                <text x="292" y="1828">at</text>
                <text x="380" y="1828">GRP_ADDR:GRP_PORT)</text>
                <text x="244" y="1860">(P</text>
                <text x="292" y="1860">extracts</text>
                <text x="344" y="1860">the</text>
                <text x="384" y="1860">"last</text>
                <text x="464" y="1860">notification"</text>
                <text x="280" y="1876">response,</text>
                <text x="348" y="1876">caches</text>
                <text x="388" y="1876">it</text>
                <text x="416" y="1876">and</text>
                <text x="468" y="1876">forwards</text>
                <text x="252" y="1892">it</text>
                <text x="284" y="1892">back</text>
                <text x="316" y="1892">to</text>
                <text x="344" y="1892">C1)</text>
                <text x="260" y="1924">Token:</text>
                <text x="308" y="1924">0x4a</text>
                <text x="36" y="1940">2.05</text>
                <text x="268" y="1940">Observe:</text>
                <text x="328" y="1940">54120</text>
                <text x="264" y="1956">OSCORE:</text>
                <text x="320" y="1956">{kid:</text>
                <text x="364" y="1956">0x05</text>
                <text x="392" y="1956">;</text>
                <text x="420" y="1956">piv:</text>
                <text x="456" y="1956">501</text>
                <text x="480" y="1956">;</text>
                <text x="508" y="1956">...}</text>
                <text x="268" y="1972">Max-Age:</text>
                <text x="324" y="1972">2995</text>
                <text x="260" y="1988">&lt;Other</text>
                <text x="312" y="1988">class</text>
                <text x="352" y="1988">U/I</text>
                <text x="404" y="1988">options&gt;</text>
                <text x="252" y="2004">0xff</text>
                <text x="304" y="2020">Encrypted_payload</text>
                <text x="384" y="2020">{</text>
                <text x="268" y="2036">0x45</text>
                <text x="312" y="2036">(2.05</text>
                <text x="376" y="2036">Content),</text>
                <text x="284" y="2052">Observe:</text>
                <text x="356" y="2052">[empty],</text>
                <text x="284" y="2068">Payload:</text>
                <text x="348" y="2068">"1234"</text>
                <text x="240" y="2084">}</text>
                <text x="280" y="2100">&lt;Signature&gt;</text>
                <text x="16" y="2148">...</text>
                <text x="72" y="2148">...</text>
                <text x="136" y="2148">...</text>
                <text x="208" y="2148">...</text>
                <text x="248" y="2196">(C2</text>
                <text x="296" y="2196">obtains</text>
                <text x="356" y="2196">PH_REQ</text>
                <text x="400" y="2196">and</text>
                <text x="440" y="2196">sends</text>
                <text x="476" y="2196">it</text>
                <text x="500" y="2196">to</text>
                <text x="524" y="2196">P)</text>
                <text x="260" y="2228">Token:</text>
                <text x="308" y="2228">0x01</text>
                <text x="104" y="2244">FETCH</text>
                <text x="272" y="2244">Uri-Host:</text>
                <text x="380" y="2244">"sensor.example"</text>
                <text x="268" y="2260">Observe:</text>
                <text x="312" y="2260">0</text>
                <text x="364" y="2260">(register)</text>
                <text x="264" y="2276">OSCORE:</text>
                <text x="320" y="2276">{kid:</text>
                <text x="364" y="2276">0x09</text>
                <text x="392" y="2276">;</text>
                <text x="420" y="2276">piv:</text>
                <text x="448" y="2276">0</text>
                <text x="464" y="2276">;</text>
                <text x="320" y="2292">kid</text>
                <text x="372" y="2292">context:</text>
                <text x="448" y="2292">0x57ab2e;</text>
                <text x="508" y="2292">...}</text>
                <text x="288" y="2308">Proxy-Scheme:</text>
                <text x="372" y="2308">"coap"</text>
                <text x="260" y="2324">&lt;Other</text>
                <text x="312" y="2324">class</text>
                <text x="352" y="2324">U/I</text>
                <text x="404" y="2324">options&gt;</text>
                <text x="252" y="2340">0xff</text>
                <text x="304" y="2356">Encrypted_payload</text>
                <text x="384" y="2356">{</text>
                <text x="268" y="2372">0x01</text>
                <text x="316" y="2372">(GET),</text>
                <text x="284" y="2388">Observe:</text>
                <text x="328" y="2388">0</text>
                <text x="384" y="2388">(register),</text>
                <text x="288" y="2404">Uri-Path:</text>
                <text x="348" y="2404">"r",</text>
                <text x="276" y="2420">&lt;Other</text>
                <text x="328" y="2420">class</text>
                <text x="360" y="2420">E</text>
                <text x="404" y="2420">options&gt;</text>
                <text x="240" y="2436">}</text>
                <text x="244" y="2468">(P</text>
                <text x="284" y="2468">serves</text>
                <text x="324" y="2468">C2</text>
                <text x="356" y="2468">from</text>
                <text x="388" y="2468">it</text>
                <text x="428" y="2468">cache)</text>
                <text x="260" y="2500">Token:</text>
                <text x="308" y="2500">0x01</text>
                <text x="100" y="2516">2.05</text>
                <text x="268" y="2516">Observe:</text>
                <text x="328" y="2516">54120</text>
                <text x="264" y="2532">OSCORE:</text>
                <text x="320" y="2532">{kid:</text>
                <text x="364" y="2532">0x05</text>
                <text x="392" y="2532">;</text>
                <text x="420" y="2532">piv:</text>
                <text x="456" y="2532">501</text>
                <text x="480" y="2532">;</text>
                <text x="508" y="2532">...}</text>
                <text x="268" y="2548">Max-Age:</text>
                <text x="324" y="2548">1800</text>
                <text x="260" y="2564">&lt;Other</text>
                <text x="312" y="2564">class</text>
                <text x="352" y="2564">U/I</text>
                <text x="404" y="2564">options&gt;</text>
                <text x="252" y="2580">0xff</text>
                <text x="304" y="2596">Encrypted_payload</text>
                <text x="384" y="2596">{</text>
                <text x="268" y="2612">0x45</text>
                <text x="312" y="2612">(2.05</text>
                <text x="376" y="2612">Content),</text>
                <text x="284" y="2628">Observe:</text>
                <text x="356" y="2628">[empty],</text>
                <text x="284" y="2644">Payload:</text>
                <text x="348" y="2644">"1234"</text>
                <text x="240" y="2660">}</text>
                <text x="280" y="2676">&lt;Signature&gt;</text>
                <text x="16" y="2724">...</text>
                <text x="72" y="2724">...</text>
                <text x="136" y="2724">...</text>
                <text x="208" y="2724">...</text>
                <text x="252" y="2772">(The</text>
                <text x="296" y="2772">value</text>
                <text x="332" y="2772">of</text>
                <text x="360" y="2772">the</text>
                <text x="412" y="2772">resource</text>
                <text x="252" y="2788">/r</text>
                <text x="296" y="2788">changes</text>
                <text x="340" y="2788">to</text>
                <text x="388" y="2788">"5678".)</text>
                <text x="180" y="2820">(##)</text>
                <text x="260" y="2836">Token:</text>
                <text x="308" y="2836">0x7b</text>
                <text x="164" y="2852">2.05</text>
                <text x="268" y="2852">Observe:</text>
                <text x="316" y="2852">11</text>
                <text x="264" y="2868">OSCORE:</text>
                <text x="320" y="2868">{kid:</text>
                <text x="368" y="2868">0x05;</text>
                <text x="412" y="2868">piv:</text>
                <text x="448" y="2868">502</text>
                <text x="472" y="2868">;</text>
                <text x="500" y="2868">...}</text>
                <text x="260" y="2884">&lt;Other</text>
                <text x="312" y="2884">class</text>
                <text x="352" y="2884">U/I</text>
                <text x="404" y="2884">options&gt;</text>
                <text x="252" y="2900">0xff</text>
                <text x="304" y="2916">Encrypted_payload</text>
                <text x="384" y="2916">{</text>
                <text x="268" y="2932">0x45</text>
                <text x="312" y="2932">(2.05</text>
                <text x="376" y="2932">Content),</text>
                <text x="284" y="2948">Observe:</text>
                <text x="356" y="2948">[empty],</text>
                <text x="276" y="2964">&lt;Other</text>
                <text x="328" y="2964">class</text>
                <text x="360" y="2964">E</text>
                <text x="408" y="2964">options&gt;,</text>
                <text x="272" y="2980">0xff,</text>
                <text x="284" y="2996">Payload:</text>
                <text x="348" y="2996">"5678"</text>
                <text x="240" y="3012">}</text>
                <text x="280" y="3028">&lt;Signature&gt;</text>
                <text x="244" y="3060">(P</text>
                <text x="288" y="3060">updates</text>
                <text x="336" y="3060">its</text>
                <text x="376" y="3060">cache</text>
                <text x="424" y="3060">entry</text>
                <text x="260" y="3076">with</text>
                <text x="300" y="3076">this</text>
                <text x="376" y="3076">notification)</text>
                <text x="260" y="3108">Token:</text>
                <text x="308" y="3108">0x4a</text>
                <text x="36" y="3124">2.05</text>
                <text x="268" y="3124">Observe:</text>
                <text x="328" y="3124">54123</text>
                <text x="264" y="3140">OSCORE:</text>
                <text x="320" y="3140">{kid:</text>
                <text x="368" y="3140">0x05;</text>
                <text x="412" y="3140">piv:</text>
                <text x="448" y="3140">502</text>
                <text x="472" y="3140">;</text>
                <text x="500" y="3140">...}</text>
                <text x="260" y="3156">&lt;Other</text>
                <text x="312" y="3156">class</text>
                <text x="352" y="3156">U/I</text>
                <text x="404" y="3156">options&gt;</text>
                <text x="252" y="3172">0xff</text>
                <text x="256" y="3188">(Same</text>
                <text x="352" y="3188">Encrypted_payload</text>
                <text x="440" y="3188">and</text>
                <text x="500" y="3188">signature)</text>
                <text x="260" y="3220">Token:</text>
                <text x="308" y="3220">0x01</text>
                <text x="100" y="3236">2.05</text>
                <text x="268" y="3236">Observe:</text>
                <text x="328" y="3236">54123</text>
                <text x="264" y="3252">OSCORE:</text>
                <text x="320" y="3252">{kid:</text>
                <text x="368" y="3252">0x05;</text>
                <text x="412" y="3252">piv:</text>
                <text x="448" y="3252">502</text>
                <text x="472" y="3252">;</text>
                <text x="500" y="3252">...}</text>
                <text x="260" y="3268">&lt;Other</text>
                <text x="312" y="3268">class</text>
                <text x="352" y="3268">U/I</text>
                <text x="404" y="3268">options&gt;</text>
                <text x="252" y="3284">0xff</text>
                <text x="256" y="3300">(Same</text>
                <text x="352" y="3300">Encrypted_payload</text>
                <text x="440" y="3300">and</text>
                <text x="500" y="3300">signature)</text>
                <text x="16" y="3364">(#)</text>
                <text x="60" y="3364">Sent</text>
                <text x="100" y="3364">over</text>
                <text x="152" y="3364">unicast</text>
                <text x="200" y="3364">and</text>
                <text x="268" y="3364">unprotected.</text>
                <text x="20" y="3396">(##)</text>
                <text x="60" y="3396">Sent</text>
                <text x="100" y="3396">over</text>
                <text x="132" y="3396">IP</text>
                <text x="184" y="3396">multicast</text>
                <text x="236" y="3396">to</text>
                <text x="340" y="3396">GROUP_ADDR:GROUP_PORT,</text>
                <text x="448" y="3396">and</text>
                <text x="504" y="3396">protected</text>
                <text x="60" y="3412">with</text>
                <text x="104" y="3412">Group</text>
                <text x="156" y="3412">OSCORE</text>
                <text x="228" y="3412">end-to-end</text>
                <text x="304" y="3412">between</text>
                <text x="352" y="3412">the</text>
                <text x="396" y="3412">server</text>
                <text x="440" y="3412">and</text>
                <text x="472" y="3412">the</text>
                <text x="524" y="3412">clients.</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![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 Group 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 Group 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],
|       |       |         |    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
|       |       |         |  Payload {
|       |       |         |    / tp_info /    0 : [
|       |       |         |           cri'coap://SRV_ADDR:SRV_PORT/',
|       |       |         |             cri'coap://GRP_ADDR:GRP_PORT/',
|       |       |         |               0x7b],
|       |       |         |    / last_notif / 2 : <this conveys
|       |       |         |                   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],
|       |       |         |    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],
|       |       |         |    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],
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    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>
        </artset>
      </section>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-08-09">
        <name>Version -08 to -09</name>
        <ul spacing="normal">
          <li>
            <t>Revised 'tp_info' also to use CRIs for transport information.</t>
          </li>
          <li>
            <t>Section restructuring: impact from proxies on rough counting of clients.</t>
          </li>
          <li>
            <t>Revised and repositioned text on deterministic phantom requests.</t>
          </li>
          <li>
            <t>Fixes in the examples with message exchanges.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-07-08">
        <name>Version -07 to -08</name>
        <ul spacing="normal">
          <li>
            <t>Fixed the CDDL definition 'srv_addr' in 'tp_info'.</t>
          </li>
          <li>
            <t>Early mentioning that 'srv_addr' cannot instruct redirection.</t>
          </li>
          <li>
            <t>The replay protection of multicast notifications is as per Group OSCORE.</t>
          </li>
          <li>
            <t>Consistently use the format uint for the Multicast-Response-Feedback-Divider Option.</t>
          </li>
          <li>
            <t>Fixed consumption of proxy-related options in a ticket request sent to the proxy.</t>
          </li>
          <li>
            <t>Possible use of the option Proxy-Cri or Proxy-Scheme-Number in a ticket request.</t>
          </li>
          <li>
            <t>Explained non-provisioning of some parameters in self-managed OSCORE groups.</t>
          </li>
          <li>
            <t>Use of 'exi' for relative expiration time in self-managed OSCORE groups.</t>
          </li>
          <li>
            <t>Improved notation in the examples of message exchanges with proxy.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-06-07">
        <name>Version -06 to -07</name>
        <ul spacing="normal">
          <li>
            <t>Added more details on proxies that do not support the Multicast-Response-Feedback-Divider Option.</t>
          </li>
          <li>
            <t>Added more details on the reliability of the client rough counting.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>Revised parameter naming.</t>
          </li>
          <li>
            <t>Fixes in IANA considerations.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-05-06">
        <name>Version -05 to -06</name>
        <ul spacing="normal">
          <li>
            <t>Clarified rough counting of clients when a proxy is used</t>
          </li>
          <li>
            <t>IANA considerations: registration of target attribute "gp-obs"</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>
            <t>If the phantom request is an OSCORE deterministic request, there is no parallel group observation for clients that lack support.</t>
          </li>
          <li>
            <t>Clarification on pre-configured clients.</t>
          </li>
          <li>
            <t>Clarified early publication of phantom request.</t>
          </li>
          <li>
            <t>Fixes in IANA considerations.</t>
          </li>
          <li>
            <t>Fixed example with proxy and Group OSCORE.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>
            <t>Added a new section on prerequisites.</t>
          </li>
          <li>
            <t>Added a new section overviewing alternative variants.</t>
          </li>
          <li>
            <t>Consistent renaming of 'cli_addr' to 'cli_host' in 'tp_info'.</t>
          </li>
          <li>
            <t>Added pre-requirements for early retrieval of phantom request.</t>
          </li>
          <li>
            <t>Revised example with early retrieval of phantom request.</t>
          </li>
          <li>
            <t>Clarified use, rationale and example of phantom request as deterministic request.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Distinction between authentication credential and public key.</t>
          </li>
          <li>
            <t>Fixed processing of informative response at the client, when Group OSCORE is used.</t>
          </li>
          <li>
            <t>Discussed scenarios with pre-configured address/port and Token value.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Clarifications on client rough counting and IP multicast scope.</t>
          </li>
          <li>
            <t>The 'ph_req' parameter is optional in the informative response.</t>
          </li>
          <li>
            <t>New parameter 'next_not_before' for the informative response.</t>
          </li>
          <li>
            <t>Optimization when rekeying the self-managed OSCORE group.</t>
          </li>
          <li>
            <t>Security considerations on unsecured multicast notifications.</t>
          </li>
          <li>
            <t>Protection of the ticket request sent to a proxy.</t>
          </li>
          <li>
            <t>RFC8126 terminology in IANA considerations.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Simplified cancellation of the group observation, without using a phantom cancellation request.</t>
          </li>
          <li>
            <t>Aligned parameter semantics with core-oscore-groupcomm and ace-key-groupcomm-oscore.</t>
          </li>
          <li>
            <t>Clarifications about self-managed OSCORE group and use of deterministic requests for cacheable OSCORE.</t>
          </li>
          <li>
            <t>New example with a proxy, Group OSCORE and a deterministic phantom request.</t>
          </li>
          <li>
            <t>Fixes in the examples and editorial improvements.</t>
          </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 the Sweden's Innovation Agency VINNOVA and the Celtic-Next projects CRITISEC and CYPRESS; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
BtvUvWyWNJU12nRf2idlZ9mu2qjvrS1Ik/dwtG5sZgusSLbngDfuDC1NOz2p
ik6nWXRz7W49akNK7hwB7YZiLNrENNMD2Mo7aFsqbWOEdfmMlbXvCWdEwr5y
tfagrXb06bqudXl7x+FL97tr71LWcLQakb1AgV5YDDTTVYciUpp1IzvivH9W
J71H/gzJxG7x5S1Xn/brKeeZKbauXfhSE1VdD6a2OuielGod59xrzd2GdiRj
vTkQZGbaWZvoK4TKN4y+c6IsdjSyXxbJPH/npWIMuQCaSOpGI/MkmTza5nES
UOGQqOVoSCPJfsetcO2zDFnOtd0PRQlx0C2K3Nxlrkww7K/C0KZYe+fBKXEj
DKP6BdQmdMVSBk+zI5V3O00HKhsp4ew2WHnNzGGcdD2UAUwYqxF9tG2S7JWO
MsvdFdVWDQcAdME9F6cWrydArF+Jt2lbrilwdA3qOC3HMc5bS4E37b1rEYz7
E4uP5e0Ppi0fy8dbWtrxwTrK76e5UD0jZrNIy6SorBEi9qquQXgwkfCCASB8
1Oaz+tXNydrmHZwWgQyfGhZRdSx8AuVWcTCMG6tze8Sum2SlGlgZ7+9aRV8b
t19TK4wCQsKNmNVJQHYprt9MtLVo9wqxFxsqyIAFUhA8GZsfgK4igQBtVVpg
YqFwCYsXk5D7ENPTibGRtfdFrRud1NpUN8UYE62JDIxvqfSlxMy5ozNSO3SM
jNWJ9fazIy6eFUk8vpMdm7gqrAkIyNHcsw2LtvxdfXFHPziSLrET3Rh55H3Y
KEa45YP/lqfcBYQtoGRvsq0kb5bSHr6zR0OjEy/eCHjU1IXAtAXrCdYVIqAU
FsMGAhRUn9bdgNfW905iToRyALBxJwm116a2tHgf0cfnQMdEhBByqbwi3hqG
sIqo0v2Ym0CmhY3AhiP5Wq9DGIfoUHAxTez0IpiNmbUGPHPb41HSf5vcORFb
fPWFGbh+oOjo+BSztOYJxYvj7T5aIi+oXBMGfgSU9O8qL0dOIDwQh3dpkWcc
NkkJJ58f7GFBbZWjIun5hVOSqTg3RYybO8XpCAaYRobXZWm4N7yySIw3X2t4
S5hXR+CspWNNIukwvs5MJD4rbWuhgTvb7mTWnlOyqEjddClQjEi8a9SvNSpv
uyENozDwS3RuavyIRkwjaiNIl5S6RcigzlOKQutLrcP+pfYm0diA1rtZm7ih
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

-->

</rfc>
