<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-observe-multicast-notifications-12" category="std" consensus="true" submissionType="IETF" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.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-12"/>
    <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="2025" month="July" day="07"/>
    <area>WIT</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 130?>

<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>
    <?line 134?>

<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) groups that use the security protocol Group Object Security for Constrained RESTful Environments (Group OSCORE) <xref target="I-D.ietf-core-oscore-groupcomm"/>, by retrieving from the Resource Directory updated links and descriptions to join those groups 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 particular, the group of potential observers entrusts the server to manage the Token space for multicast notifications. Building on that, the server provides all the observers of a target resource with the same Token value to bind to their own observation, by sending a unicast informative response to each observer client. That Token value is then used in every multicast notification for the target resource under that observation.</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>
        <?line -18?>

<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"/>, Concise Data Definition Language (CDDL) <xref target="RFC8610"/>, Concise Binary Object Representation (CBOR) <xref target="RFC8949"/>, Object Security for Constrained RESTful Environments (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 method 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 security protocol Group OSCORE <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 security protocol Group OSCORE <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 that have:  </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.  </t>
            <t>
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", which is registered in <xref target="content-format"/>. The payload of the informative response is a CBOR map, whose fields use the CBOR abbreviations that are defined in <xref target="informative-response-params"/>.</t>
        <t>When using the method specified in this document, the CBOR map conveyed as the payload of the informative response includes the following parameters with the semantics defined below. Other specifications may define different uses of the informative response for providing alternative information that is relevant to other protocols and applications.</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>
          <li>
            <t>'ending', with value the time when the group observation of the target resource is planned to be canceled, encoded as a CBOR integer or as a CBOR floating-point number. The value is 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"/>. This parameter <bcp14>MAY</bcp14> be included.</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'
 ? 4 => ~time  ; 'ending'
}
]]></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 of an informative response 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  ; The number, format, and encoding of the elements
              ; depend on the scheme-id and authority 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 source addressing information from which the informative response is sent by the server (see <xref target="ssec-server-side-notifications"/>).</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.  </t>
              <t>
Consistent with <xref section="5.1.1" sectionFormat="of" target="I-D.ietf-core-href"/>, the CRI scheme is given as a negative integer 'scheme-id'. In particular, 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>
The combination of URI scheme and 'authority' component determines the CoAP transport used to distribute multicast notifications for the group observation. Note that:  </t>
              <ul spacing="normal">
                <li>
                  <t>If the 'authority' component specifies a host-ip, then the 'scheme-id' (hence the URI scheme) is sufficient to identify the transport.</t>
                </li>
                <li>
                  <t>If the 'authority' component specifies a host-name, then the consumer of the CRI has to resolve the host-name and consider the result together with the 'scheme-id' (hence the URI scheme) in order to identify the transport. For instance, DNS resolution can be used (e.g., as defined in <xref target="I-D.ietf-core-dns-over-coap"/>).</t>
                </li>
              </ul>
              <t>
The identified transport determines what 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. Those elements are specified in the 'Transport Information Details' column of the "CoAP Transport Information" registry for the entry associated with the identified CoAP transport (see <xref target="iana-coap-transport-information"/>)</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 CoAP transport, which is identified according to the CRI conveyed by the 'tpi_server' element, as described above.  </t>
              <t>
In the "CoAP Transport Information" registry defined in <xref target="iana-coap-transport-information"/> of this document, the entry corresponding to the identified CoAP transport specifies the list of elements composing 'tpi_details' for that transport, as indicated in the 'Transport Information Details' column. Within 'tpi_details', its elements <bcp14>MUST</bcp14> be ordered according to what is specified in the 'Transport Information Details' column 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 transport "CoAP over UDP". When such a transport is used, i.e., CoAP responses are transported over UDP as per <xref target="RFC7252"/> and <xref target="I-D.ietf-core-groupcomm-bis"/>, 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>
            </li>
            <li>
              <t>Register an entry in the "CRI Scheme Numbers" registry defined in <xref section="11.1" sectionFormat="of" target="I-D.ietf-core-href"/>, where the value in the 'CRI scheme number' column is (-1 - ID). In particular, ID is the negative integer to be used as 'scheme-id' for CRIs conveyed by the 'tpi_server' element and by elements in 'tpi_details'.</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, 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, whose value is 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 CoAP is transported over UDP.</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 CoAP is transported over UDP.</t>
            <t>In the example, SRV_ADDR is 2001:db8::ab, SRV_PORT is 5683 (omitted in the CRI of 'tpi_server' as it is the default port number when CoAP is transported over UDP), 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 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>
Note that, in most cases, such SRV_ADDR and SRV_PORT are those to which original observation requests are sent to by clients (see <xref target="ssec-client-side-request"/>), unless those requests are sent to a multicast address (see <xref target="I-D.ietf-core-groupcomm-bis"/>).  </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 a certain point in time, the server might want to cancel a group observation of a target resource. For instance, the server realizes that no clients or not enough clients are interested in taking part in the group observation anymore. <xref target="sec-rough-counting"/> defines a possible approach that the server can use to make an assessment in this respect. Another reason is that the group observation has reached its ending time, as originally scheduled by the server.</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 defined in <xref target="sec-rough-counting"/>), which in turn can play a role in deciding to cancel the group observation (see <xref target="ssec-server-side-cancellation"/>).</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 has to identify the CoAP transport used to distribute multicast notifications for the group observation.</t>
        <t>To this end, the client relies on the element 'tpi_server' within the 'tp_info' parameter of the informative response (see <xref target="sssec-transport-specific-encoding"/>).</t>
        <t>In particular, the client considers the CRI conveyed by 'tpi_server' and identifies the CoAP transport, by assessing together the 'authority' component and the URI scheme determined from 'scheme-id' (see <xref target="sssec-transport-specific-encoding"/>).</t>
        <t>After that, the client parses the remainder of the 'tp_info' array, i.e., the information conveyed by 'tpi_details', according to what is specified in the 'Transport Information Details' column of the "CoAP Transport Information" registry for the entry associated with the identified CoAP transport (see <xref target="iana-coap-transport-information"/>).</t>
        <t>Then, the client performs the following steps.</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, the client <bcp14>MUST</bcp14> use as SRV_PORT the default port number defined for the identified CoAP transport (e.g., the default port number is 5683 when the transport is CoAP over UDP).</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, the client <bcp14>MUST</bcp14> use as GRP_PORT the default port number defined for the identified CoAP transport (e.g., the default port number is 5683 when the transport is CoAP over UDP).</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 that is 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>In addition to 'tpi_server', further elements of the 'tp_info' array can convey a CRI. The client <bcp14>MUST</bcp14> treat any CRI within the 'tp_info' array as invalid if the 'authority' component is a host-name that, when resolved, indicates multiple transports. As a possible way to verify if that is the case, the client can rely on DNS resolution (e.g., as defined in <xref target="I-D.ietf-core-dns-over-coap"/>).</t>
        <t>If any of the expected fields in the informative response are absent, malformed, or invalid, 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 it 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 CoRE Link-Format notation from <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. The server 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="B" 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 'N' column 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 that is interested in continuing receiving multicast notifications for the target resource <bcp14>SHOULD</bcp14> acknowledge its interest, as described below.</t>
        <t>The client picks an integer random number I, from 0 inclusive to the number Z = (2<sup>Q</sup>) exclusive, where Q is the value specified in the option. If I is different from 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 looking 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 that 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 <bcp14>RECOMMENDED</bcp14> 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 that have arrived as unicast observation requests to the target resource, since the time when 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<sup>Q</sup>). 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, which can be taken into account 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 sends 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 sends 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 the security protocol 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 protected, 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 protected, by using Group OSCORE. In particular, the group mode of Group OSCORE defined in <xref section="7" 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="7.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"/>). Consequently, the following applies:</t>
          <ul spacing="normal">
            <li>
              <t>The specified Code is always 0.05 (FETCH).</t>
            </li>
            <li>
              <t>The sequence of CoAP options will be limited to the outer, non encrypted options.</t>
            </li>
            <li>
              <t>A payload is always present, as the authenticated ciphertext followed by the signature.</t>
            </li>
          </ul>
          <t>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="7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> <bcp14>MUST</bcp14> be used.</t>
          <t>The process described in <xref section="7.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="3.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 as defined in <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="7.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="7.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="7.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="3.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 under this group observation.</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="B" 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 'N' column 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">byte string</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">byte string</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">unsigned integer</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/></td>
          </tr>
          <tr>
            <td align="left">ending</td>
            <td align="left">4</td>
            <td align="left">integer or float</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/></td>
          </tr>
          <tr>
            <td align="left">join_uri</td>
            <td align="left">5</td>
            <td align="left">text string</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">sec_gp</td>
            <td align="left">6</td>
            <td align="left">text string</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">as_uri</td>
            <td align="left">7</td>
            <td align="left">text string</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">hkdf</td>
            <td align="left">8</td>
            <td align="left">integer or text string</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">cred_fmt</td>
            <td align="left">9</td>
            <td align="left">integer</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">gp_enc_alg</td>
            <td align="left">10</td>
            <td align="left">integer or text string</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">sign_alg</td>
            <td align="left">11</td>
            <td align="left">integer or text string</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">sign_params</td>
            <td align="left">12</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">13</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">14</td>
            <td align="left">byte string</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">srv_identifier</td>
            <td align="left">15</td>
            <td align="left">byte string</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">exi</td>
            <td align="left">16</td>
            <td align="left">unsigned integer</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">exp</td>
            <td align="left">17</td>
            <td align="left">integer or float</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">CoAP Transport</th>
            <th align="left">Transport Information Details</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">CoAP over UDP</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 protected, 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 protected.</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 that match 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., as based on 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, 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 (value between 0 and 255)</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.</t>
        <t>The registration policy is either "Private Use", "Standards Action with Expert Review", or "Specification Required" or "Expert Review" per <xref target="RFC8126"/>. "Expert Review" guidelines are provided in <xref target="iana-review"/>.</t>
        <t>All assignments according to "Standards Action with Expert Review" are made on a "Standards Action" basis per <xref section="4.9" sectionFormat="of" target="RFC8126"/> with "Expert Review" additionally required per <xref section="4.5" sectionFormat="of" target="RFC8126"/>. The procedure for early IANA allocation of "standards track code points" defined in <xref target="RFC7120"/> also applies. When such a procedure is used, IANA will ask the designated expert(s) to approve the early allocation before registration. In addition, working group chairs are encouraged to consult the expert(s) early during the process outlined in <xref section="3.1" sectionFormat="of" target="RFC7120"/>.</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 the CBOR map 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. Different ranges of values use different registration policies <xref target="RFC8126"/>. Integer values from -256 to 255 as well as text strings of length 1 are designated as "Standards Action With Expert Review". Integer values from -65536 to -257 and from 256 to 65535 as well as text strings of length 2 are designated as "Specification Required". Integer values greater than 65535 as well as text strings of length greater than 2 are designated as "Expert Review". Integer values less than -65536 are marked as "Private Use".</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.</t>
        <t>The registration policy is "Expert Review" <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>CoAP Transport: This field contains a text string. The value <bcp14>MUST</bcp14> be unique and it uniquely identifies the transport used for CoAP messages.</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>
        <ul spacing="normal">
          <li>
            <t>Attribute Name: gp-obs</t>
          </li>
          <li>
            <t>Brief Description: Observable resource supporting group observation</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="sec-web-linking"/> of [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-review">
        <name>Expert Review Instructions</name>
        <t>"Standards Action with Expert Review", "Specification Required", and "Expert Review" are three of the registration policies defined for the IANA registries established in this document. 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 anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-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="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="2" month="July" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) is a web transfer
   protocol for constrained devices and constrained networks.  In a
   number of use cases, constrained devices often naturally operate in
   groups (e.g., in a building automation scenario, all lights in a
   given room may need to be switched on/off as a group).  This document
   specifies the use of 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-14"/>
        </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="5" month="July" year="2025"/>
            <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 each 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-26"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for Group Object Security for Constrained RESTful Environments (Group OSCORE) Using Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="11" month="April" year="2025"/>
            <abstract>
              <t>   This document defines an application profile of the Authentication
   and Authorization for Constrained Environments (ACE) framework, to
   request and provision keying material in group communication
   scenarios that are based on the Constrained Application Protocol
   (CoAP) and are secured with Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  This application profile
   delegates the authentication and authorization of Clients, which join
   an OSCORE group through a Resource Server acting as Group Manager for
   that group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication, and proof-of-possession for a key owned by the Client
   and bound to an OAuth 2.0 access token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-17"/>
        </reference>
        <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="20" month="March" year="2025"/>
            <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) rather than as a
   sequence of characters.  This approach simplifies parsing,
   comparison, and reference resolution in environments with severe
   limitations on processing power, code size, and memory size.

   This RFC updates RFC 7595 to add a note on how the "URI Schemes"
   registry of RFC 7595 cooperates with the "CRI Scheme Numbers"
   registry created by the present RFC.


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision –22 addresses a few remaining post-WGLC nits.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-22"/>
        </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="RFC7120">
          <front>
            <title>Early IANA Allocation of Standards Track Code Points</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <date month="January" year="2014"/>
            <abstract>
              <t>This memo describes the process for early allocation of code points by IANA from registries for which "Specification Required", "RFC Required", "IETF Review", or "Standards Action" policies apply. This process can be used to alleviate the problem where code point allocation is needed to facilitate desired or required implementation and deployment experience prior to publication of an RFC, which would normally trigger code point allocation. The procedures in this document are intended to apply only to IETF Stream documents.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="100"/>
          <seriesInfo name="RFC" value="7120"/>
          <seriesInfo name="DOI" value="10.17487/RFC7120"/>
        </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="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>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-core-coap-pubsub">
          <front>
            <title>A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Jaime Jimenez" initials="J." surname="Jimenez">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>Dogtiger Labs</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="28" month="February" year="2025"/>
            <abstract>
              <t>   This document describes a publish-subscribe architecture for the
   Constrained Application Protocol (CoAP), extending the capabilities
   of CoAP communications for supporting endpoints with long breaks in
   connectivity and/or up-time.  CoAP clients publish on and subscribe
   to a topic via a corresponding topic resource at a CoAP server acting
   as broker.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-18"/>
        </reference>
        <reference anchor="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="3" month="March" year="2025"/>
            <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-17"/>
        </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="6" month="July" year="2025"/>
            <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-11"/>
        </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="23" month="June" year="2025"/>
            <abstract>
              <t>   This document specifies a CBOR encoding of X.509 certificates.  The
   resulting certificates are called C509 Certificates.  The CBOR
   encoding supports a large subset of RFC 5280 and all certificates
   compatible with the RFC 7925, IEEE 802.1AR (DevID), CNSA 1.0, RPKI,
   GSMA eUICC, and CA/Browser Forum Baseline Requirements profiles.
   When used to re-encode DER encoded X.509 certificates, the CBOR
   encoding can in many cases reduce the size of RFC 7925 profiled
   certificates with over 50% while also significantly reducing memory
   and code size compared to ASN.1.  The CBOR encoded structure can
   alternatively be signed directly ("natively signed"), which does not
   require re-encoding for the signature to be verified.  The TLSA
   selectors registry defined in RFC 6698 is extended to include C509
   certificates.  The document also specifies C509 Certificate 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-14"/>
        </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="3" month="March" year="2025"/>
            <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, and between an application endpoint and an intermediary or
   between two intermediaries.  Therefore, this document updates RFC
   8613.  Furthermore, this document updates RFC 8768, by explicitly
   defining the processing with OSCORE for the CoAP option Hop-Limit.
   The approach defined in this document 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-04"/>
        </reference>
        <reference anchor="I-D.ietf-core-dns-over-coap">
          <front>
            <title>DNS over CoAP (DoC)</title>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Cenk Gündoğan" initials="C." surname="Gündoğan">
              <organization>NeuralAgent GmbH</organization>
            </author>
            <author fullname="Thomas C. Schmidt" initials="T. C." surname="Schmidt">
              <organization>HAW Hamburg</organization>
            </author>
            <author fullname="Matthias Wählisch" initials="M." surname="Wählisch">
              <organization>TUD Dresden University of Technology &amp; Barkhausen Institut</organization>
            </author>
            <date day="19" month="June" year="2025"/>
            <abstract>
              <t>   This document defines a protocol for exchanging DNS messages over the
   Constrained Application Protocol (CoAP).  These CoAP messages can be
   protected by DTLS-Secured CoAP (CoAPS) or Object Security for
   Constrained RESTful Environments (OSCORE) to provide encrypted DNS
   message exchange for constrained devices in the Internet of Things
   (IoT).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-dns-over-coap-15"/>
        </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>
    <?line 1404?>

<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 also make the same group observation data available through different means, such as those described in <xref target="appendix-different-sources-pubsub"/> and <xref target="appendix-different-sources-introspection"/>.</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>When distributed through different means than informative responses, the group observation data has to specify the time when the group observation is planned to be canceled by the server. In particular, the server commits to keeping the group observation ongoing until the scheduled cancellation time is reached. Before that time, the server might however retract the advertised group observation data and thus make it not available to new clients.</t>
      <t>After a client has obtained the group observation data from different sources than an informative response, the client 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="appendix-different-sources-pubsub">
        <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_server' and 'tp_info_client', 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: 65087 (application/coral+cbor)

Response:

    2.05 Content
    Content-Format: 65087 (application/coral+cbor)

    rdf:type [ = <http://example.org/pubsub/topic-list>,
           topic [ = </ps/topics/1234>,
               tp_info_server <coap://[2001:db8::1]>,
               tp_info_client <coap://[ff35:30:2001:db8::123]>,
               tp_info_token "7b"^^xsd::hexBinary,
               ph_req "0160.."^^xsd::hexBinary,
               last_notif "256105.."^^xsd::hexBinary,
               ending "2051251201"^^xsd::unsignedLong,
           ]
    ]
]]></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="appendix-different-sources-introspection">
        <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 relies 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...528c', / elided for brevity /
  / last_notif / 2 : h'256105...4fa1', / elided for brevity /
  / ending /     4 : 2051251201

}
]]></artwork>
        </figure>
        <t>For example, a network sniffer could offer sending such a request when unknown multicast notifications are seen in the 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', 'gp_enc_alg', 'sign_alg', and 'sign_params'. These elements <bcp14>MUST</bcp14> be included.</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="8" 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.10" 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="3.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 byte serialization of the server's authentication credential used in the OSCORE group. In particular, the original byte serialization 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.  </t>
          <t>
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 integer or as a CBOR floating-point number.  </t>
          <t>
The value is 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="3.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="12.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, while it is analogous to the informative response defined in <xref target="ssec-server-side-informative"/>, this response has the following differences:</t>
      <ul spacing="normal">
        <li>
          <t>it additionally contains the parameters mentioned above, for the next group keying material to be used; and</t>
        </li>
        <li>
          <t>it <bcp14>MAY</bcp14> omit the 'tp_info' and 'ph_req' parameters, since the associated information is immutable throughout the observation lifetime.</t>
        </li>
      </ul>
      <t>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="12.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 that the protected multicast notifications will match under 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"/> where 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.10" 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="3.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>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="1664" width="576" viewBox="0 0 576 1664" 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="4304" width="576" viewBox="0 0 576 4304" 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 like it normally would.</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 values:</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>
        <figure anchor="example-proxy-oscore-det-request">
          <name>Example of Group Observation with a Proxy and Group OSCORE, where the Phantom Request is a Deterministic Request</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="3424" width="576" viewBox="0 0 576 3424" 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>
        </figure>
      </section>
    </section>
    <section anchor="intermediaries-example-e2e-security-det-rev-proxy">
      <name>Example with a Reverse-Proxy and Deterministic Requests</name>
      <t>This section describes an example where specifically a reverse-proxy PRX is used between the clients and the server (see <xref section="5.7.3" sectionFormat="of" target="RFC7252"/>).</t>
      <t>Like for the example in <xref target="intermediaries-example-e2e-security-det"/>, 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>
      <t>The same assumptions compiled in <xref target="intermediaries-example-e2e-security-det-intro"/> apply in this scenario too, with the following differences:</t>
      <ul spacing="normal">
        <li>
          <t>Assumption (2): when the server makes the phantom request available through other means (see <xref target="appendix-different-sources"/>), the accompanying group observation data does <em>not</em> specify client-side, transport-specific information for listening to multicast notifications bound to the phantom request.</t>
        </li>
        <li>
          <t>Assumption (4): this assumption does not apply, since all the clients rely on PRX, although they are not aware to communicate with a proxy.</t>
        </li>
      </ul>
      <t>Furthermore, the following assumptions apply to this scenario:</t>
      <ul spacing="normal">
        <li>
          <t>The server knows the address PRX_ADDR and port number PRX_PORT that PRX exposes to the clients when acting as stand-in for the server.  </t>
          <t>
That is, a request sent with destination address PRX_ADDR and port number PRX_PORT will reach PRX, which forwards the request to the server.</t>
        </li>
        <li>
          <t>When the server makes the phantom request available through other means (see <xref target="appendix-different-sources"/>), the accompanying group observation data is such that:  </t>
          <ul spacing="normal">
            <li>
              <t>It provides server-side, transport-specific information, which consists of the address PRX_ADDR and port number PRX_PORT associated with PRX.</t>
            </li>
            <li>
              <t>It does not provide any further client-side, transport-specific information.</t>
            </li>
          </ul>
          <t>
Assuming that the group information data has a format consistent with the 'tp_info' array of the informative response (see <xref target="sssec-transport-specific-encoding"/>), this means that the 'tp_info' array includes only the 'tpi_server' element specifying a CRI with addressing information PRX_ADDR and PRX_PORT (i.e., targeting PRX). That is, 'tp_info' does not include the 'tpi_details' element, regardless of what is expected per the transport used.</t>
        </li>
      </ul>
      <section anchor="rev-proxy-main-process">
        <name>Taking Part in Group Observations</name>
        <t>The rest of this section describes how a client can take part in a group observation.</t>
        <t>If any of the following conditions does not hold, then the client first performs the initialization procedure described in <xref target="rev-proxy-client-pre-steps"/>.</t>
        <ul spacing="normal">
          <li>
            <t>The client has already obtained the group observation data specifying the deterministic phantom request, which the server has made available through other means (see <xref target="appendix-different-sources"/>).</t>
          </li>
          <li>
            <t>The client is already a member of the correct OSCORE group.</t>
          </li>
        </ul>
        <t>The main process consists of the following steps.</t>
        <ol spacing="normal" type="1"><li>
            <t>From the group observation data, the client knows the deterministic phantom request PH_REQ, the address PRX_ADDR, and the port number PRX_PORT, but no other client-side, transport-specific information.  </t>
            <t>
In such a particular situation, the client sends PH_REQ with destination address PRX_ADDR and port number PRX_PORT, i.e., to PRX.</t>
          </li>
          <li>
            <t>Upon receiving PH_REQ, PRX performs the same actions performed by the proxy in the scenario of <xref target="intermediaries-example-e2e-security-det"/>.  </t>
            <t>
That is, if PH_REQ results in a cache hit at PRX, then PRX replies to the client with the latest multicast notification for the target resource from its cache, and takes no further actions.  </t>
            <t>
Otherwise, PRX forwards PH_REQ to the server. After recognizing PH_REQ byte-by-byte, the server replies to PRX with an unprotected informative response, where 'tp_info' specifies the information to receive multicast notifications for the target resource. Based on such information, PRX starts listening to multicast notifications. If the informative response includes a latest notification, then PRX caches that notification and forwards it to the client.</t>
          </li>
        </ol>
        <t>Editor's note: add a figure showing an example of message exchange.</t>
        <section anchor="rev-proxy-client-pre-steps">
          <name>Client Initialization Procedure</name>
          <t>The following early initialization procedure is performed by a client that does not have the group observation data and/or is not a member of the correct OSCORE group, before starting the main process described in <xref target="rev-proxy-main-process"/>.</t>
          <t>The client is minimally provided with the pair (PRX_ADDR, PRX_PORT) associated with PRX, which the client believes to be targeting the origin server.</t>
          <t>a. The client sends a traditional Observe registration request with destination address PRX_ADDR and port number PRX_PORT, i.e., to PRX. The request is protected with (Group) OSCORE, i.e., end-to-end between the client and the server.</t>
          <t>b. PRX receives the request and forwards it to the server, as usual.</t>
          <t>c. The server replies with a 5.03 informative response. The response is protected with (Group) OSCORE, i.e., end-to-end between the client and the server. The payload of the response specifies the following parameters.</t>
          <ul spacing="normal">
            <li>
              <t>The 'tp_info' parameter, within which the 'tpi_server' element is a CRI with addressing information PRX_ADDR and PRX_PORT (i.e., targeting PRX). The 'tp_info' parameter does not include the 'tpi_details' element, regardless of what is expected per the transport used.</t>
            </li>
            <li>
              <t>The 'ph_req' parameter, conveying the deterministic phantom request PH_REQ.</t>
            </li>
            <li>
              <t>Optionally, parameters conveying information that the client can use for joining the OSCORE group if that has not happened yet, or the keying material used in the OSCORE group if the server is managing it (see <xref target="self-managed-oscore-group"/>).</t>
            </li>
          </ul>
          <t>d. PRX receives the protected 5.03 informative response and forwards it to the client, as usual.</t>
          <t>e. Upon receiving the protected 5.03 informative response, the client takes its payload as the group observation data for the group observation of interest.</t>
          <t>Per the instructions specified in the response, the client takes the necessary steps to join the correct OSCORE group, in case it is not already a member.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-11-12">
        <name>Version -11 to -12</name>
        <ul spacing="normal">
          <li>
            <t>Changed CBOR type of 'ending' and 'exp' to be integer or float.</t>
          </li>
          <li>
            <t>Avoid limiting the informative response to this protocol.</t>
          </li>
          <li>
            <t>Transport identified by (scheme-id, authority) in the CRI of 'tpi_server'.</t>
          </li>
          <li>
            <t>Renamed 'sign_enc_alg' to 'gp_enc_alg', now aligned with draft-ietf-ace-key-groupcomm-oscore.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-10-11">
        <name>Version -10 to -11</name>
        <ul spacing="normal">
          <li>
            <t>Do not rule out original observation requests sent over multicast.</t>
          </li>
          <li>
            <t>Defined 'ending' parameter for the informative response payload.</t>
          </li>
          <li>
            <t>Group observation data available on different sources can be removed.</t>
          </li>
          <li>
            <t>Initial description of a scenario with a reverse-proxy.</t>
          </li>
          <li>
            <t>Minor fixes in examples.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-09-10">
        <name>Version -09 to -10</name>
        <ul spacing="normal">
          <li>
            <t>Fixed section numbers of referred documents.</t>
          </li>
          <li>
            <t>Revised registration policies in the IANA considerations.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-08-09">
        <name>Version -08 to -09</name>
        <ul spacing="normal">
          <li>
            <t>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="Matthias Kovatsch⁩"/>, <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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
ceAn/PIyyW6A8n6MTpJJDPCm2IPrb0/woQ/yX59Ciz46J/PVsPgmdGk+Rltf
cPp59KS/t7v/FD/JQPXbxpgEjEOwkNcYBITrOldxEB1/fSxQ70Vvvn6TlQDJ
XnT+9Xl+jLaQPyRApi+/vkwWSUwzbMINTW+yrzdRdkgKDV9Y6957kkO4TI3b
PVWup3VfB2QAIyG2yQJMPMRk20U/aPIW76QrR62rpGhh2WqalzVlOch6FRRY
i8V26PUsndI6s+YlZz9EEzZ9LS//889G3gkoL10Fk1YU+PcKpQ7ugwglW0wo
GowWJ3yYW4lTgWWvJXi4YD9xnFeCAReWh3Wq8i7T2tg4zucACT7ZkPJU89SY
DiRINu5Yew4rzb52/Ck6vTXchlCsbPd7O4rfCrVuXctKQPELCUhS/H2lga/X
3K4tJJuildPKklQvdEp7XbeW5GGtgrtVtaSXqSMWdRbVpfR526to1bwqdTW8
p42IqWboEk4urzejCJoDhLtFudEG9TL24nSLgVOM3pF26hTpPKLqUOkHrnHG
NzCel/BAyZcQ7ePIBWy9zt4n6pm4tNpS0lIonZRP1hKyTl1y9vmgyIDUNdMG
Gia+B61WKRfrM6alImFpAVdYGk9JKp438WcYWqvyjn+Gj71V1C0NPc/+YMuk
9czVbtqnSEc7Oj06AaHyBi8ikQxrjMhkhp73d2hs0zd1MUN7qlvQa9up8eZV
8Ld1wQpn742irnwuXrm9gJ3XLah/RyPG5VpIb4LShV60xPsQ3I8yAbAE0zos
xbTCoFBJtvi4yX0iT1CMw7LkTsso7ycmVqVhQmFHd6Aivunx6By5iKQXiPb9
N0WKpk7+A0SsqM7PuGbgbyOBpzsEaHqYXPh9jjYfSjMEvr7dC3SKDUx8BVLb
PLFz89996VcTXoWGd+r0FN/JYDGKGR/kncUSBdKby7OG3zXcmMLR0Iyl3gCW
LBu8kW4Zwjtpdmw5UBg4yQ7W8NcucOI3jrzVMCncU2LiHcGP0ymRG6rwzem2
YrHpnikPUyVqAiESztmJxN+qF8VyR+VwJFOmCwkry+xhNR3FWxpH6PVRo4dr
12Bb+lCaGFh6yCfa/r7FoUBtIsfcZHLGoQGBWyYRtw0eUFY4a2erJw7vSmsB
AZ5Np9ekuT2/LroXqONFiAbWJVsI+fbqnO20zdPlBXw+dPxetAS4zqykEJiI
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

-->

</rfc>
