<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version  (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-observe-multicast-notifications-10" category="std" consensus="true" submissionType="IETF" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="Observe Multicast Notifications">Observe Notifications as CoAP Multicast Responses</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-10"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <street>Hollandstr. 12/4</street>
          <city>Vienna</city>
          <code>1020</code>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <author initials="F." surname="Palombini" fullname="Francesca Palombini">
      <organization>Ericsson AB</organization>
      <address>
        <postal>
          <street>Torshamnsgatan 23</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>francesca.palombini@ericsson.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <area>WIT</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>The Constrained Application Protocol (CoAP) allows clients to "observe" resources at a server, and receive notifications as unicast responses upon changes of the resource state. In some use cases, such as based on publish-subscribe, it would be convenient for the server to send a single notification addressed to all the clients observing a same target resource. This document updates RFC7252 and RFC7641, and defines how a server sends observe notifications as response messages over multicast, synchronizing  all the observers of a same resource on a same shared Token value. Besides, this document defines how Group OSCORE can be used to protect multicast notifications end-to-end between the server and the observer clients.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  Constrained RESTful Environments Working Group mailing list (core@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/core-wg/observe-multicast-notifications"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> has been extended with a number of mechanisms, including resource Observation <xref target="RFC7641"/>. This enables CoAP clients to register at a CoAP server as "observers" of a resource, and hence being automatically notified with an unsolicited response upon changes of the resource state.</t>
      <t>CoAP supports group communication <xref target="I-D.ietf-core-groupcomm-bis"/>, e.g., over IP multicast. This includes support for Observe registration requests over multicast, in order for clients to efficiently register as observers of a resource hosted at multiple servers.</t>
      <t>However, in a number of use cases, using multicast messages for responses would also be desirable. That is, it would be useful that a server sends observe notifications for a same target resource to multiple observers as responses over IP multicast.</t>
      <t>For instance, in CoAP publish-subscribe <xref target="I-D.ietf-core-coap-pubsub"/>, multiple clients can subscribe to a topic, by observing the related resource hosted at the responsible broker. When a new value is published on that topic, it would be convenient for the broker to send a single multicast notification at once, to all the subscriber clients observing that topic.</t>
      <t>A different use case concerns clients observing a same registration resource at the CoRE Resource Directory <xref target="RFC9176"/>. For example, multiple clients can benefit of observation for discovering (to-be-created) 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>
        <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 including the following parameters, whose CBOR abbreviations are defined in <xref target="informative-response-params"/>.</t>
        <ul spacing="normal">
          <li>
            <t>'tp_info', with value a CBOR array. This includes the transport-specific information required to correctly receive multicast notifications bound to the phantom observation request. Typically, this comprises the Token value associated with the group observation, as well as the source and destination addressing information of the related multicast notifications. The CBOR array is formatted as defined in <xref target="sssec-transport-specific-encoding"/>. This parameter <bcp14>MUST</bcp14> be included.</t>
          </li>
          <li>
            <t>'ph_req', with value the byte serialization of the transport-independent information of the phantom observation request (see <xref target="ssec-server-side-request"/>), encoded as a CBOR byte string. The value of the CBOR byte string is formatted as defined in <xref target="sssec-transport-independent-encoding"/>.  </t>
            <t>
This parameter <bcp14>MAY</bcp14> be omitted, in case the phantom request is, in terms of transport-independent information, identical to the registration request from the client. Otherwise, this parameter <bcp14>MUST</bcp14> be included.  </t>
            <t>
Note that the registration request from the client may indeed differ from the phantom observation request in terms of transport-independent information, but still be acceptable for the server to register the client as taking part in the group observation.</t>
          </li>
          <li>
            <t>'last_notif', with value the byte serialization of the transport-independent information of the latest multicast notification for the target resource, encoded as a CBOR byte string. The value of the CBOR byte string is formatted as defined in <xref target="sssec-transport-independent-encoding"/>. This parameter <bcp14>MAY</bcp14> be included.</t>
          </li>
          <li>
            <t>'next_not_before', with value the amount of seconds that will minimally elapse before the server sends the next multicast notification for the group observation of the target resource, encoded as a CBOR unsigned integer. This parameter <bcp14>MAY</bcp14> be included.  </t>
            <t>
This information can help a new client to align itself with the server's timeline, especially in scenarios where multicast notifications are regularly sent. Also, it can help synchronizing different clients when orchestrating a content distribution through multicast notifications.</t>
          </li>
        </ul>
        <t>The CDDL notation <xref target="RFC8610"/> provided below describes the payload of the informative response.</t>
        <figure anchor="informative-response-payload">
          <name>Format of the Informative Response Payload</name>
          <artwork><![CDATA[
informative_response_payload = {
   0 => array, ; 'tp_info' (transport-specific information)
 ? 1 => bstr,  ; 'ph_req' (transport-independent information)
 ? 2 => bstr,  ; 'last_notif' (transport-independent information)
 ? 3 => uint   ; 'next_not_before'
}
]]></artwork>
        </figure>
        <t>Upon receiving a registration request to observe the target resource, the server does not create a corresponding individual observation for the requesting client. Instead, the server considers that client as now taking part in the group observation of the target resource, of which it increments the observer counter by 1. Then, the server replies to the client with the same informative response message defined above, which <bcp14>MUST</bcp14> be Confirmable.</t>
        <t>Note that this also applies when, with no ongoing traditional observations on the target resource, the server receives a registration request from a first client and decides to start a group observation on the target resource.</t>
        <section anchor="sssec-transport-specific-encoding">
          <name>Transport-Specific Message Information</name>
          <t>The CBOR array specified in the 'tp_info' parameter is formatted according to the following CDDL notation.</t>
          <figure anchor="tp-info-general">
            <name>General Format of 'tp_info'</name>
            <artwork><![CDATA[
tp_info = [
    tpi_server: CRI-no-local,  ; Addressing information of the server
  ? tpi_details                ; Further information about the request
]

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

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

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

authority = [?userinfo, host, ?port]
userinfo  = (false, text .feature "userinfo")
host      = (host-ip // host-name)
host-name = (*text) ; lowercase, NFC labels
host-ip   = (bytes .size 4 //
               (bytes .size 16, ?zone-id))
zone-id   = text
port      = 0..65535
]]></artwork>
          </figure>
          <t>The following holds for the two elements 'tpi_server' and 'tpi_details'.</t>
          <ul spacing="normal">
            <li>
              <t>The 'tpi_server' element <bcp14>MUST</bcp14> be present and specifies:  </t>
              <ul spacing="normal">
                <li>
                  <t>The transport protocol used to transport a CoAP response from the server, i.e., a multicast notification in this document; and</t>
                </li>
                <li>
                  <t>The addressing information of the server, i.e., the source addressing information of the multicast notifications that are sent for the group observation.      </t>
                  <t>
Such addressing information <bcp14>MUST</bcp14> be equal to the destination addressing information of the registration requests sent by the clients to observe the target resource at the server.</t>
                </li>
              </ul>
              <t>
This element specifies a CRI <xref target="I-D.ietf-core-href"/>, of which both 'scheme' and 'authority' are given, while 'path', 'query', and 'fragment' are not given. The CRI scheme is given as a negative integer 'scheme-id', with value taken from the "Scheme ID" column of the "CoAP Transport Information" registry defined in <xref target="iana-coap-transport-information"/> of this document.  </t>
              <t>
Consistent with <xref section="5.1.1" sectionFormat="of" target="I-D.ietf-core-href"/>, a 'scheme-id' with value ID denotes the CRI scheme that has CRI scheme number equal to (-1 - ID). The latter identifies the corresponding URI scheme, per the associated entry in the "CRI Scheme Numbers" registry defined in <xref section="11.1" sectionFormat="of" target="I-D.ietf-core-href"/>.  </t>
              <t>
Furthermore, the CRI scheme determines how many elements are required in the 'tpi_details' element of the 'tp_info' array, as well as what information they convey, their encoding, and their semantics.</t>
            </li>
            <li>
              <t>The 'tpi_details' element <bcp14>MAY</bcp14> be present and specifies transport-specific information related to a pertinent request message, i.e., the phantom observation request in this document.  </t>
              <t>
The exact format of 'tpi_details' depends on the CRI scheme of the CRI specified by the 'tpi_server' element.  </t>
              <t>
In the "CoAP Transport Information" registry defined in <xref target="iana-coap-transport-information"/> of this document, the entry corresponding to a certain CRI scheme specifies the list of elements composing 'tpi_details' for that CRI scheme, as value of the column "Transport Information Details". Within 'tpi_details', its elements <bcp14>MUST</bcp14> be ordered according to what is specified in the column "Transport Information Details" of the "CoAP Transport Information" registry.</t>
            </li>
          </ul>
          <t><xref target="transport-protocol-identifiers"/> registers an entry in the "CoAP Transport Information" registry, for the CRI scheme identified by the negative integer -1 ("coap"). This value is used as 'scheme-id' for the CRI in the 'tpi_server' element, when CoAP responses are transported over UDP. In such a case, the full encoding of the 'tp_info' CBOR array is as defined in <xref target="ssssec-udp-transport-specific"/>.</t>
          <t>If a future specification defines the use of CoAP multicast notifications transported over different transport protocols, then that specification <bcp14>MUST</bcp14> perform the following actions, unless those have been already performed for different reasons:</t>
          <ul spacing="normal">
            <li>
              <t>Define the elements in 'tpi_details', as to what information they convey, their encoding, and their semantics.</t>
            </li>
            <li>
              <t>Register an entry in the "CoAP Transport Information" registry defined in <xref target="iana-coap-transport-information"/> of this document.  </t>
              <t>
The value of the column "Scheme ID" is the negative integer ID to be used as 'scheme-id' for the CRI specified by the 'tpi_server' element, which provides source addressing information of the multicast notifications. The same use applies to the CRI specified by an element of 'tpi_details', which provides destination addressing information of the multicast notifications.  </t>
              <t>
As a pre-condition for such a registration, it is <bcp14>REQUIRED</bcp14> that the "CRI Scheme Numbers" registry defined in <xref section="11.1" sectionFormat="of" target="I-D.ietf-core-href"/> includes an entry where the value in the column "CRI scheme number" is (-1 - ID).</t>
            </li>
          </ul>
          <section anchor="ssssec-udp-transport-specific">
            <name>UDP Transport-Specific Information</name>
            <t>When CoAP multicast notifications are transported over UDP as per <xref target="RFC7252"/> and <xref target="I-D.ietf-core-groupcomm-bis"/>, the server specifies the 'tp_info' CBOR array as follows.</t>
            <ul spacing="normal">
              <li>
                <t>In the 'tpi_server' element, the CRI has 'scheme-id' with value -1 ("coap"), while 'authority' conveys addressing information of the server, i.e., the source addressing information of the multicast notifications that are sent for the group observation.  </t>
                <t>
This information consists of the IP address SRV_ADDR (expressed as a literal or resulting from a name resolution) and the port number SRV_PORT of the server hosting the target resource, and from where the server will send multicast notifications for the target resource.</t>
              </li>
              <li>
                <t>The 'tpi_details' element <bcp14>MUST</bcp14> be present and in turn includes the following two elements:  </t>
                <ul spacing="normal">
                  <li>
                    <t>'tpi_client' is a CRI, with the same format of 'tpi_server' (see <xref target="sssec-transport-specific-encoding"/>). In particular, the CRI has 'scheme-id' with value -1 ("coap"), while 'authority' conveys the destination addressing information of the multicast notifications that the server sends for the group observation.      </t>
                    <t>
This information consists of the IP multicast address GRP_ADDR (expressed as a literal or resulting from a name resolution) and the port number GRP_PORT, where the server will send multicast notifications for the target resource.</t>
                  </li>
                  <li>
                    <t>'tpi_token' is a CBOR byte string, with value the Token value of the phantom observation request generated by the server (see <xref target="ssec-server-side-request"/>). Note that the same Token value is used for the multicast notifications bound to that phantom observation request (see <xref target="ssec-server-side-notifications"/>).</t>
                  </li>
                </ul>
              </li>
            </ul>
            <t>The CDDL notation in <xref target="tp-info-udp"/> describes the format of the 'tp_info' CBOR array when using UDP as transport protocol.</t>
            <figure anchor="tp-info-udp">
              <name>Format of 'tp_info' with UDP as Transport Protocol</name>
              <artwork><![CDATA[
tp_info_coap_udp = [
  tpi_server: CRI-no-local,  ; Source addressing information
                             ; of the multicast notifications
  tpi_client: CRI-no-local,  ; Destination addressing information
                             ; of the multicast notifications
  tpi_token: bstr            ; Token value of the phantom request and
                             ; associated multicast notifications
]
]]></artwork>
            </figure>
            <t>The CBOR diagnostic notation in <xref target="tp-info-udp-example"/> provides an example of the 'tp_info' CBOR array when using UDP as transport protocol. In the example, SRV_ADDR is 2001:db8::ab, SRV_PORT is 5683 (omitted in the CRI of 'tpi_server' as it is the CoAP default port number), GRP_ADDR is ff35:30:2001:db8::23, and GRP_PORT is 61616.</t>
            <figure anchor="tp-info-udp-example">
              <name>Example of 'tp_info' with UDP as Transport Protocol</name>
              <artwork><![CDATA[
[ / tp_info /
  [ / tpi_server /
    -1,        / scheme-id -- equivalent to "coap" /
    h'20010db80000000000000000000000ab'  / host-ip /
  ],
  [ / tpi_client /
    -1,        / scheme-id -- equivalent to "coap" /
    h'ff35003020010db80000000000000023', / host-ip /
    61616                                   / port /
  ],
  h'7b'                                / tpi_token /
]
]]></artwork>
            </figure>
          </section>
        </section>
        <section anchor="sssec-transport-independent-encoding">
          <name>Transport-Independent Message Information</name>
          <t>For both the parameters 'ph_req' and 'last_notif' in the informative response, the value of the CBOR byte string is the concatenation of the following components, in the order specified below.</t>
          <t>When defining the value of each component, "CoAP message" refers to the phantom observation request for the 'ph_req' parameter, and to the corresponding latest multicast notification for the 'last_notif' parameter.</t>
          <ul spacing="normal">
            <li>
              <t>A single byte, with value the content of the Code field in the CoAP message.</t>
            </li>
            <li>
              <t>The byte serialization of the complete sequence of CoAP options in the CoAP message.</t>
            </li>
            <li>
              <t>If the CoAP message includes a non-zero length payload, the one-byte Payload Marker (0xff) followed by the payload.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="ssec-server-side-notifications">
        <name>Notifications</name>
        <t>Upon a change in the status of the target resource under group observation, the server sends a multicast notification, intended to all the clients taking part in the group observation of that resource. In particular, each of such multicast notifications is formatted as follows.</t>
        <ul spacing="normal">
          <li>
            <t>It <bcp14>MUST</bcp14> be Non-confirmable.</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> include an Observe Option, as per <xref target="RFC7641"/>.</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> have the same Token value T of the phantom registration request that started the group observation.  </t>
            <t>
That is, every multicast notification for a target resource is not bound to the observation requests from the different clients, but instead to the phantom registration request associated with the whole set of clients taking part in the group observation of that resource.  </t>
            <t>
The Token value T is specified by an element of 'tpi_details' within the 'tp_info' parameter, in the informative response sent to the observer clients. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref target="ssssec-udp-transport-specific"/>).</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> be sent from the same IP address SRV_ADDR and port number SRV_PORT where: i) the original Observe registration requests are sent to by the clients; and ii) the corresponding informative responses are sent from by the server (see <xref target="ssec-server-side-informative"/>). That is, redirection <bcp14>MUST NOT</bcp14> be used.  </t>
            <t>
The addressing information above is provided to the observer clients through the CRI specified by the element 'tpi_server' within the 'tp_info' parameter, in the informative response (see <xref target="sssec-transport-specific-encoding"/>).</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> be sent to the IP multicast address GRP_ADDR and port number GRP_PORT.  </t>
            <t>
The addressing information above is provided to the observer clients through the CRI specified by an element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref target="ssssec-udp-transport-specific"/>).</t>
          </li>
        </ul>
        <t>For each target resource with an active group observation, the server <bcp14>MUST</bcp14> store the latest multicast notification.</t>
      </section>
      <section anchor="ssec-server-side-congestion">
        <name>Congestion Control</name>
        <t>In order to not cause congestion, the server should conservatively control the sending of multicast notifications. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>The multicast notifications <bcp14>MUST</bcp14> be Non-confirmable.</t>
          </li>
          <li>
            <t>In constrained environments such as low-power, lossy networks (LLNs), the server should only support multicast notifications for resources that are small. Following related guidelines from <xref section="3.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/>, this can consist, for example, in having the payload of multicast notifications as limited to approximately 5% of the IP Maximum Transmit Unit (MTU) size, so that it fits into a single link-layer frame in case IPv6 over Low-Power Wireless Personal Area Networks (6LoWPAN) (see <xref section="4" sectionFormat="of" target="RFC4944"/>) is used.</t>
          </li>
          <li>
            <t>The server <bcp14>SHOULD</bcp14> provide multicast notifications with the smallest possible IP multicast scope that fulfills the application needs. For example, following related guidelines from <xref section="3.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/>, site-local scope is always preferred over global scope IP multicast, if this fulfills the application needs. Similarly, realm-local scope is always preferred over site-local scope, if this fulfills the application needs. Ultimately, it is up to the server administrator to explicitly configure the most appropriate IP multicast scope.</t>
          </li>
          <li>
            <t>Following related guidelines from <xref section="4.5.1" sectionFormat="of" target="RFC7641"/>, the server <bcp14>SHOULD NOT</bcp14> send more than one multicast notification every 3 seconds, and <bcp14>SHOULD</bcp14> use an even less aggressive rate when possible (see also <xref section="3.1.2" sectionFormat="of" target="RFC8085"/>). The transmission rate of multicast notifications should also take into account the avoidance of a possible "broadcast storm" problem <xref target="MOBICOM99"/>. This prevents a following, considerable increase of the channel load, whose origin would be likely attributed to a router rather than to the server.</t>
          </li>
        </ul>
      </section>
      <section anchor="ssec-server-side-cancellation">
        <name>Cancellation</name>
        <t>At any point in time, the server may want to cancel a group observation of a target resource. For instance, the server may realize that no clients or not enough clients are interested in taking part in the group observation anymore. A possible approach that the server can use to assess this is defined in <xref target="sec-rough-counting"/>.</t>
        <t>In order to cancel the group observation, the server sends a multicast response with response code 5.03 (Service Unavailable), signaling that the group observation has been terminated. The response has the same Token value T of the phantom registration request, it has no payload, and it does not include an Observe Option.</t>
        <t>The server sends the response to the same multicast IP address GRP_ADDR and port number GRP_PORT used to send the multicast notifications related to the target resource. Finally, the server releases the resources allocated for the group observation, and especially frees up the Token value T used at its CoAP endpoint.</t>
      </section>
    </section>
    <section anchor="sec-client-side">
      <name>Client-Side Requirements</name>
      <section anchor="ssec-client-side-request">
        <name>Request</name>
        <t>A client sends an observation request to the server as described in <xref target="RFC7641"/>, i.e., a GET request with an Observe Option set to 0 (register). The request <bcp14>MUST NOT</bcp14> encode link-local addresses. If the server is not configured to accept registrations on that target resource specifically for a group observation, this would still result in a positive notification response to the client as described in <xref target="RFC7641"/>, in case the server is able and willing to add the client to the list of observers.</t>
        <t>In a particular setup, the information typically specified in the 'tp_info' parameter of the informative response (see <xref target="ssec-server-side-informative"/>) can be pre-configured on the server and the clients. For example, the destination multicast address and port number where to send multicast notifications for a group observation, as well as the associated Token value to use, can be set aside for particular tasks (e.g., enforcing observations of a specific resource). Alternative mechanisms can rely on using some bytes from the hash of the observation request as the last bytes of the multicast address or as part of the Token value.</t>
        <t>In such a particular setup, the client may also have an early knowledge of the phantom request, i.e., it will be possible for the server to safely omit the parameter 'ph_req' from the informative response to the observation request (see <xref target="ssec-server-side-informative"/>). In this case, the client can include a No-Response Option <xref target="RFC7967"/> with value 16 in its Observe registration request, which results in the server suppressing the informative response. As a consequence, the observation request only informs the server that there is one additional client interested to take part in the group observation.</t>
        <t>While the considered client is able to simply set up its multicast address and start receiving multicast notifications for the group observation, sending an observation request as above allows the server to increment the observer counter. This helps the server to assess the current number of clients interested in the group observation over time (e.g., by using the method in <xref target="sec-rough-counting"/>), which in turn can play a role in deciding to cancel the group observation (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 proceeds as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>The client configures an observation of the target resource. To this end, it relies on a CoAP endpoint used for messages having:  </t>
            <ul spacing="normal">
              <li>
                <t>As source address and port number, the server address SRV_ADDR and port number SRV_PORT intended for accessing the target resource. These are specified by the CRI conveyed by the element 'tpi_server' within the 'tp_info' parameter, in the informative response (see <xref target="sssec-transport-specific-encoding"/>).      </t>
                <t>
If the port number is not present in the CRI, then the client <bcp14>MUST</bcp14> use as SRV_PORT the default port number defined for the URI scheme that corresponds to the CRI scheme number (e.g., 5683 when the URI scheme is "coap").</t>
              </li>
              <li>
                <t>As destination address and port number, the IP multicast address GRP_ADDR and port number GRP_PORT. These are specified by the CRI conveyed by a dedicated element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref target="ssssec-udp-transport-specific"/>).      </t>
                <t>
If the port number is not present in the CRI, then the client <bcp14>MUST</bcp14> use as GRP_PORT the default port number defined for the URI scheme that corresponds to the CRI scheme number (e.g., 5683 when the URI scheme is "coap").</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The client rebuilds the phantom registration request as follows.  </t>
            <ul spacing="normal">
              <li>
                <t>The client uses the Token value T, specified by a dedicated element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref target="ssssec-udp-transport-specific"/>).</t>
              </li>
              <li>
                <t>If the 'ph_req' parameter is not present in the informative response, the client uses the transport-independent information from its original Observe registration request.</t>
              </li>
              <li>
                <t>If the 'ph_req' parameter is present in the informative response, the client uses the transport-independent information specified in the parameter.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the informative response includes the parameter 'ph_req', and the transport-independent information specified therein differs from the one in the original Observe registration request, then the client checks whether a response to the rebuilt phantom request can, if available in a cache entry, be used to satisfy the original observation request. If this is not the case, the client <bcp14>SHOULD</bcp14> explicitly withdraw from the group observation.</t>
          </li>
          <li>
            <t>The client stores the phantom registration request, as associated with the observation of the target resource. In particular, the client <bcp14>MUST</bcp14> use the Token value T of this phantom registration request as its own local Token value associated with that group observation, with respect to the server. The particular way to achieve this is implementation specific.</t>
          </li>
          <li>
            <t>If the informative response includes the parameter 'last_notif', the client rebuilds the latest multicast notification, by using:  </t>
            <ul spacing="normal">
              <li>
                <t>The same Token value T used at Step 2; and</t>
              </li>
              <li>
                <t>The transport-independent information, specified in the 'last_notif' parameter of the informative response.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the informative response includes the parameter 'last_notif', the client processes the multicast notification rebuilt at Step 5 as defined in <xref section="3.2" sectionFormat="of" target="RFC7641"/>. In particular, the value of the Observe Option is used as initial baseline for notification reordering in this group observation.</t>
          </li>
          <li>
            <t>If a traditional observation to the target resource is ongoing, the client <bcp14>MAY</bcp14> silently cancel it without notifying the server.</t>
          </li>
        </ol>
        <t>If any of the expected fields in the informative response are not present or malformed, the client <bcp14>MAY</bcp14> try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). If the client chooses not to, then the client <bcp14>SHOULD</bcp14> explicitly withdraw from the group observation.</t>
        <t><xref target="appendix-different-sources"/> describes possible alternative ways for clients to retrieve the phantom registration request and other information related to a group observation.</t>
      </section>
      <section anchor="ssec-client-side-notifications">
        <name>Notifications</name>
        <t>After having successfully processed the informative response as defined in <xref target="ssec-client-side-informative"/>, the client will receive, accept, and process multicast notifications about the state of the target resource from the server, as responses to the phantom registration request and with Token value T.</t>
        <t>The client relies on the value of the Observe Option for notification reordering, as defined in <xref section="3.4" sectionFormat="of" target="RFC7641"/>.</t>
      </section>
      <section anchor="ssec-client-side-cancellation">
        <name>Cancellation</name>
        <t>At a certain point in time, a client may become not interested in receiving further multicast notifications about a target resource. When this happens, the client can simply "forget" about being part of the group observation for that target resource, as per <xref section="3.6" sectionFormat="of" target="RFC7641"/>.</t>
        <t>When, later on, the server sends the next multicast notification, the client will not recognize the Token value T in the message. Since the multicast notification is Non-confirmable, it is <bcp14>OPTIONAL</bcp14> for the client to reject the multicast notification with a Reset message, as defined in <xref section="3.5" sectionFormat="of" target="RFC7641"/>.</t>
        <t>In case the server has canceled a group observation as defined in <xref target="ssec-server-side-cancellation"/>, the client simply forgets about the group observation and frees up the used Token value T for that endpoint, upon receiving the multicast error response defined in <xref target="ssec-server-side-cancellation"/>.</t>
      </section>
    </section>
    <section anchor="sec-web-linking">
      <name>Web Linking</name>
      <t>The possible use of multicast notifications in a group observation may be indicated by a target attribute "gp-obs" in a web link <xref target="RFC8288"/> to a resource, e.g., using a link-format document <xref target="RFC6690"/>.</t>
      <t>The "gp-obs" attribute is a hint, indicating that the server might send multicast notifications for observations of the resource targeted by the link. Note that this is simply a hint, i.e., it does not include any information required to participate in a group observation, and to receive and process multicast notifications.</t>
      <t>A value <bcp14>MUST NOT</bcp14> be given for the "gp-obs" attribute and any present value <bcp14>MUST</bcp14> be ignored by the recipient.  The "gp-obs" attribute <bcp14>MUST NOT</bcp14> appear more than once in a given link-value; occurrences after the first <bcp14>MUST</bcp14> be ignored by the recipient.</t>
      <t>The example in <xref target="example-web-link"/> shows a use of the "gp-obs" attribute: the client does resource discovery on a server and gets back a list of resources, one of which includes the "gp-obs" attribute indicating that the server might send multicast notifications for observations of that resource. The 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, and starts the group observation upon receiving a registration request from a first client that wishes to start a traditional observation on the resource /r.</t>
      <t>The following notation is used for the payload of the informative responses:</t>
      <ul spacing="normal">
        <li>
          <t>The application-extension identifier "cri" defined in <xref section="C" sectionFormat="of" target="I-D.ietf-core-href"/> is used to notate a CBOR Extended Diagnostic Notation (EDN) literal for a CRI.</t>
        </li>
        <li>
          <t>'bstr(X)' denotes a CBOR byte string with value the byte serialization of X, with '|' denoting byte concatenation.</t>
        </li>
        <li>
          <t>'OPT' denotes a sequence of CoAP options. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</t>
        </li>
        <li>
          <t>'PAYLOAD' denotes a CoAP payload. This refers to the latest multicast notification encoded by the 'last_notif' parameter.</t>
        </li>
      </ul>
      <figure anchor="example-no-oscore">
        <name>Example of Group Observation</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1296" width="552" viewBox="0 0 552 1296" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,432" fill="none" stroke="black"/>
              <path d="M 8,464 L 8,672" fill="none" stroke="black"/>
              <path d="M 8,704 L 8,832" fill="none" stroke="black"/>
              <path d="M 8,864 L 8,1120" fill="none" stroke="black"/>
              <path d="M 8,1184 L 8,1280" fill="none" stroke="black"/>
              <path d="M 32,1120 L 32,1184" fill="none" stroke="black"/>
              <path d="M 512,48 L 512,432" fill="none" stroke="black"/>
              <path d="M 512,464 L 512,672" fill="none" stroke="black"/>
              <path d="M 512,704 L 512,832" fill="none" stroke="black"/>
              <path d="M 512,864 L 512,1136" fill="none" stroke="black"/>
              <path d="M 512,1168 L 512,1280" fill="none" stroke="black"/>
              <path d="M 32,32 L 192,32" fill="none" stroke="black"/>
              <path d="M 304,32 L 496,32" fill="none" stroke="black"/>
              <path d="M 80,208 L 496,208" fill="none" stroke="black"/>
              <path d="M 80,256 L 496,256" fill="none" stroke="black"/>
              <path d="M 32,448 L 192,448" fill="none" stroke="black"/>
              <path d="M 304,448 L 496,448" fill="none" stroke="black"/>
              <path d="M 32,688 L 192,688" fill="none" stroke="black"/>
              <path d="M 304,688 L 496,688" fill="none" stroke="black"/>
              <path d="M 32,848 L 192,848" fill="none" stroke="black"/>
              <path d="M 304,848 L 496,848" fill="none" stroke="black"/>
              <path d="M 8,1120 L 32,1120" fill="none" stroke="black"/>
              <path d="M 48,1152 L 192,1152" fill="none" stroke="black"/>
              <path d="M 320,1152 L 496,1152" fill="none" stroke="black"/>
              <path d="M 8,1184 L 32,1184" fill="none" stroke="black"/>
              <path d="M 68,232 L 80,256" fill="none" stroke="black"/>
              <path d="M 68,232 L 80,208" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="504,688 492,682.4 492,693.6" fill="black" transform="rotate(0,496,688)"/>
              <polygon class="arrowhead" points="504,256 492,250.4 492,261.6" fill="black" transform="rotate(0,496,256)"/>
              <polygon class="arrowhead" points="504,32 492,26.4 492,37.6" fill="black" transform="rotate(0,496,32)"/>
              <polygon class="arrowhead" points="56,1152 44,1146.4 44,1157.6" fill="black" transform="rotate(180,48,1152)"/>
              <polygon class="arrowhead" points="40,848 28,842.4 28,853.6" fill="black" transform="rotate(180,32,848)"/>
              <polygon class="arrowhead" points="40,448 28,442.4 28,453.6" fill="black" transform="rotate(180,32,448)"/>
              <g class="text">
                <text x="12" y="36">C1</text>
                <text x="208" y="36">[</text>
                <text x="248" y="36">Unicast</text>
                <text x="288" y="36">]</text>
                <text x="512" y="36">S</text>
                <text x="540" y="36">/r</text>
                <text x="40" y="52">GET</text>
                <text x="52" y="68">Token:</text>
                <text x="100" y="68">0x4a</text>
                <text x="60" y="84">Observe:</text>
                <text x="104" y="84">0</text>
                <text x="156" y="84">(register)</text>
                <text x="64" y="100">Uri-Path:</text>
                <text x="120" y="100">"r"</text>
                <text x="52" y="116">&lt;Other</text>
                <text x="116" y="116">options&gt;</text>
                <text x="136" y="148">(</text>
                <text x="152" y="148">S</text>
                <text x="200" y="148">allocates</text>
                <text x="256" y="148">the</text>
                <text x="312" y="148">available</text>
                <text x="376" y="148">Token</text>
                <text x="424" y="148">value</text>
                <text x="468" y="148">0x7b</text>
                <text x="496" y="148">)</text>
                <text x="56" y="180">(</text>
                <text x="72" y="180">S</text>
                <text x="104" y="180">sends</text>
                <text x="140" y="180">to</text>
                <text x="180" y="180">itself</text>
                <text x="216" y="180">a</text>
                <text x="256" y="180">phantom</text>
                <text x="336" y="180">observation</text>
                <text x="416" y="180">request</text>
                <text x="476" y="180">PH_REQ</text>
                <text x="76" y="196">as</text>
                <text x="116" y="196">coming</text>
                <text x="164" y="196">from</text>
                <text x="200" y="196">the</text>
                <text x="228" y="196">IP</text>
                <text x="280" y="196">multicast</text>
                <text x="352" y="196">address</text>
                <text x="420" y="196">GRP_ADDR</text>
                <text x="464" y="196">)</text>
                <text x="540" y="260">/r</text>
                <text x="336" y="276">GET</text>
                <text x="348" y="292">Token:</text>
                <text x="396" y="292">0x7b</text>
                <text x="356" y="308">Observe:</text>
                <text x="400" y="308">0</text>
                <text x="452" y="308">(register)</text>
                <text x="360" y="324">Uri-Path:</text>
                <text x="416" y="324">"r"</text>
                <text x="348" y="340">&lt;Other</text>
                <text x="412" y="340">options&gt;</text>
                <text x="192" y="372">(</text>
                <text x="208" y="372">S</text>
                <text x="248" y="372">creates</text>
                <text x="288" y="372">a</text>
                <text x="320" y="372">group</text>
                <text x="392" y="372">observation</text>
                <text x="452" y="372">of</text>
                <text x="476" y="372">/r</text>
                <text x="496" y="372">)</text>
                <text x="224" y="404">(</text>
                <text x="240" y="404">S</text>
                <text x="292" y="404">increments</text>
                <text x="352" y="404">the</text>
                <text x="404" y="404">observer</text>
                <text x="472" y="404">counter</text>
                <text x="248" y="420">for</text>
                <text x="280" y="420">the</text>
                <text x="320" y="420">group</text>
                <text x="392" y="420">observation</text>
                <text x="452" y="420">of</text>
                <text x="476" y="420">/r</text>
                <text x="496" y="420">)</text>
                <text x="12" y="452">C1</text>
                <text x="208" y="452">[</text>
                <text x="248" y="452">Unicast</text>
                <text x="288" y="452">]</text>
                <text x="512" y="452">S</text>
                <text x="44" y="468">5.03</text>
                <text x="52" y="484">Token:</text>
                <text x="100" y="484">0x4a</text>
                <text x="88" y="500">Content-Format:</text>
                <text x="304" y="500">application/informative-response+cbor</text>
                <text x="60" y="516">Max-Age:</text>
                <text x="104" y="516">0</text>
                <text x="52" y="532">&lt;Other</text>
                <text x="116" y="532">options&gt;</text>
                <text x="60" y="548">Payload:</text>
                <text x="104" y="548">{</text>
                <text x="48" y="564">/</text>
                <text x="88" y="564">tp_info</text>
                <text x="128" y="564">/</text>
                <text x="168" y="564">0</text>
                <text x="184" y="564">:</text>
                <text x="200" y="564">[</text>
                <text x="328" y="580">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="344" y="596">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="252" y="612">0x7b</text>
                <text x="204" y="628">],</text>
                <text x="48" y="644">/</text>
                <text x="100" y="644">last_notif</text>
                <text x="152" y="644">/</text>
                <text x="168" y="644">2</text>
                <text x="184" y="644">:</text>
                <text x="232" y="644">bstr(0x45</text>
                <text x="280" y="644">|</text>
                <text x="304" y="644">OPT</text>
                <text x="328" y="644">|</text>
                <text x="356" y="644">0xff</text>
                <text x="384" y="644">|</text>
                <text x="428" y="644">PAYLOAD)</text>
                <text x="32" y="660">}</text>
                <text x="12" y="692">C2</text>
                <text x="208" y="692">[</text>
                <text x="248" y="692">Unicast</text>
                <text x="288" y="692">]</text>
                <text x="512" y="692">S</text>
                <text x="540" y="692">/r</text>
                <text x="40" y="708">GET</text>
                <text x="52" y="724">Token:</text>
                <text x="100" y="724">0x01</text>
                <text x="60" y="740">Observe:</text>
                <text x="104" y="740">0</text>
                <text x="156" y="740">(register)</text>
                <text x="64" y="756">Uri-Path:</text>
                <text x="120" y="756">"r"</text>
                <text x="52" y="772">&lt;Other</text>
                <text x="116" y="772">options&gt;</text>
                <text x="216" y="804">(</text>
                <text x="232" y="804">S</text>
                <text x="284" y="804">increments</text>
                <text x="344" y="804">the</text>
                <text x="396" y="804">observer</text>
                <text x="464" y="804">counter</text>
                <text x="240" y="820">for</text>
                <text x="272" y="820">the</text>
                <text x="312" y="820">group</text>
                <text x="384" y="820">observation</text>
                <text x="444" y="820">of</text>
                <text x="468" y="820">/r</text>
                <text x="488" y="820">)</text>
                <text x="12" y="852">C2</text>
                <text x="208" y="852">[</text>
                <text x="248" y="852">Unicast</text>
                <text x="288" y="852">]</text>
                <text x="512" y="852">S</text>
                <text x="44" y="868">5.03</text>
                <text x="52" y="884">Token:</text>
                <text x="100" y="884">0x01</text>
                <text x="88" y="900">Content-Format:</text>
                <text x="304" y="900">application/informative-response+cbor</text>
                <text x="60" y="916">Max-Age:</text>
                <text x="104" y="916">0</text>
                <text x="52" y="932">&lt;Other</text>
                <text x="116" y="932">options&gt;</text>
                <text x="60" y="948">Payload:</text>
                <text x="104" y="948">{</text>
                <text x="48" y="964">/</text>
                <text x="88" y="964">tp_info</text>
                <text x="128" y="964">/</text>
                <text x="168" y="964">0</text>
                <text x="184" y="964">:</text>
                <text x="200" y="964">[</text>
                <text x="328" y="980">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="344" y="996">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="252" y="1012">0x7b</text>
                <text x="204" y="1028">],</text>
                <text x="48" y="1044">/</text>
                <text x="100" y="1044">last_notif</text>
                <text x="152" y="1044">/</text>
                <text x="168" y="1044">2</text>
                <text x="184" y="1044">:</text>
                <text x="232" y="1044">bstr(0x45</text>
                <text x="280" y="1044">|</text>
                <text x="304" y="1044">OPT</text>
                <text x="328" y="1044">|</text>
                <text x="356" y="1044">0xff</text>
                <text x="384" y="1044">|</text>
                <text x="428" y="1044">PAYLOAD)</text>
                <text x="32" y="1060">}</text>
                <text x="104" y="1092">(</text>
                <text x="128" y="1092">The</text>
                <text x="168" y="1092">value</text>
                <text x="204" y="1092">of</text>
                <text x="232" y="1092">the</text>
                <text x="284" y="1092">resource</text>
                <text x="332" y="1092">/r</text>
                <text x="376" y="1092">changes</text>
                <text x="420" y="1092">to</text>
                <text x="460" y="1092">"5678"</text>
                <text x="496" y="1092">)</text>
                <text x="12" y="1140">C1</text>
                <text x="208" y="1156">[</text>
                <text x="256" y="1156">Multicast</text>
                <text x="304" y="1156">]</text>
                <text x="512" y="1156">S</text>
                <text x="12" y="1172">C2</text>
                <text x="88" y="1172">(</text>
                <text x="144" y="1172">Destination</text>
                <text x="248" y="1172">address/port:</text>
                <text x="376" y="1172">GRP_ADDR/GRP_PORT</text>
                <text x="456" y="1172">)</text>
                <text x="60" y="1204">2.05</text>
                <text x="68" y="1220">Token:</text>
                <text x="116" y="1220">0x7b</text>
                <text x="76" y="1236">Observe:</text>
                <text x="124" y="1236">11</text>
                <text x="68" y="1252">&lt;Other</text>
                <text x="132" y="1252">options&gt;</text>
                <text x="76" y="1268">Payload:</text>
                <text x="140" y="1268">"5678"</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
C1 --------------------- [ Unicast ] ------------------------> S  /r
|  GET                                                         |
|  Token: 0x4a                                                 |
|  Observe: 0 (register)                                       |
|  Uri-Path: "r"                                               |
|  <Other options>                                             |
|                                                              |
|               ( S allocates the available Token value 0x7b ) |
|                                                              |
|     ( S sends to itself a phantom observation request PH_REQ |
|       as coming from the IP multicast address GRP_ADDR )     |
|        .---------------------------------------------------- |
|       /                                                      |
|       \                                                      |
|        `---------------------------------------------------> |  /r
|                                       GET                    |
|                                       Token: 0x7b            |
|                                       Observe: 0 (register)  |
|                                       Uri-Path: "r"          |
|                                       <Other options>        |
|                                                              |
|                      ( S creates a group observation of /r ) |
|                                                              |
|                          ( S increments the observer counter |
|                            for the group observation of /r ) |
|                                                              |
C1 <-------------------- [ Unicast ] ------------------------- S
|  5.03                                                        |
|  Token: 0x4a                                                 |
|  Content-Format: application/informative-response+cbor       |
|  Max-Age: 0                                                  |
|  <Other options>                                             |
|  Payload: {                                                  |
|    / tp_info /    0 : [                                      |
|                        cri'coap://SRV_ADDR:SRV_PORT/',       |
|                          cri'coap://GRP_ADDR:GRP_PORT/',     |
|                            0x7b                              |
|                       ],                                     |
|    / last_notif / 2 : bstr(0x45 | OPT | 0xff | PAYLOAD)      |
|  }                                                           |
|                                                              |
C2 --------------------- [ Unicast ] ------------------------> S  /r
|  GET                                                         |
|  Token: 0x01                                                 |
|  Observe: 0 (register)                                       |
|  Uri-Path: "r"                                               |
|  <Other options>                                             |
|                                                              |
|                         ( S increments the observer counter  |
|                           for the group observation of /r )  |
|                                                              |
C2 <-------------------- [ Unicast ] ------------------------- S
|  5.03                                                        |
|  Token: 0x01                                                 |
|  Content-Format: application/informative-response+cbor       |
|  Max-Age: 0                                                  |
|  <Other options>                                             |
|  Payload: {                                                  |
|    / tp_info /    0 : [                                      |
|                        cri'coap://SRV_ADDR:SRV_PORT/',       |
|                          cri'coap://GRP_ADDR:GRP_PORT/',     |
|                            0x7b                              |
|                       ],                                     |
|    / last_notif / 2 : bstr(0x45 | OPT | 0xff | PAYLOAD)      |
|  }                                                           |
|                                                              |
|           ( The value of the resource /r changes to "5678" ) |
|                                                              |
+--+                                                           |
C1 |                                                           |
   | <------------------ [ Multicast ] ----------------------- S
C2 |      ( Destination address/port: GRP_ADDR/GRP_PORT )      |
+--+                                                           |
|    2.05                                                      |
|    Token: 0x7b                                               |
|    Observe: 11                                               |
|    <Other options>                                           |
|    Payload: "5678"                                           |
|                                                              |
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="sec-rough-counting">
      <name>Rough Counting of Clients in the Group Observation</name>
      <t>This section specifies a method that the server can use to keep an estimate of still active and interested clients, without creating undue traffic on the network.</t>
      <section anchor="multicast-response-feedback-divider-option">
        <name>Multicast-Response-Feedback-Divider Option</name>
        <t>In order to enable the rough counting of still active and interested clients, a new CoAP option is introduced, which <bcp14>SHOULD</bcp14> be supported by clients that listen to multicast responses.</t>
        <t>The option is called Multicast-Response-Feedback-Divider and has the properties summarized in <xref target="mrfd-table"/>, which extends Table 4 of <xref target="RFC7252"/>. The option is not Critical, not Safe-to-Forward, and integer valued. Since the option is not Safe-to-Forward, the column "N" indicates a dash for "not applicable".</t>
        <table align="center" anchor="mrfd-table">
          <name>The Multicast-Response-Feedback-Divider Option. C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left"> </td>
              <td align="left">x</td>
              <td align="left">-</td>
              <td align="left"> </td>
              <td align="left">Multicast-Response-<br/>Feedback-Divider</td>
              <td align="left">uint</td>
              <td align="left">0-1</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
        <t>The Multicast-Response-Feedback-Divider Option is of class E for OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      </section>
      <section anchor="ssec-rough-counting-client-side">
        <name>Processing on the Client Side</name>
        <t>Upon receiving a response with a Multicast-Response-Feedback-Divider Option, a client 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^Q) exclusive, where Q is the value specified in the option and "^" is the exponentiation operator. 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 showing as an attempted observation at the server, the client <bcp14>MUST</bcp14> send the unicast request in a non confirmable way, and with the maximum No-Response setting <xref target="RFC7967"/>. In the request, the client <bcp14>MUST</bcp14> include a Multicast-Response-Feedback-Divider Option, whose value <bcp14>MUST</bcp14> be set to 0. As per <xref section="3.2" sectionFormat="of" target="RFC7252"/>, this is represented with an empty option value (a zero-length sequence of bytes). The client does not need to wait for responses, and can keep processing further notifications on the same Token.</t>
        <t>The client <bcp14>MUST</bcp14> ignore the Multicast-Response-Feedback-Divider Option, if the multicast notification is retrieved from the 'last_notif' parameter of an informative response (see <xref target="ssec-server-side-informative"/>). A client includes the Multicast-Response-Feedback-Divider Option only in a re-registration request triggered by the server as described above, and <bcp14>MUST NOT</bcp14> include it in any other request.</t>
        <t><xref target="appendix-pseudo-code-counting-client"/> and <xref target="appendix-pseudo-code-counting-client-constrained"/> provide a description in pseudo-code of the operations above performed by the client.</t>
      </section>
      <section anchor="processing-on-the-server-side">
        <name>Processing on the Server Side</name>
        <t>In order to avoid needless use of network resources, a server <bcp14>SHOULD</bcp14> keep a rough, updated count of the number of clients taking part in the group observation of a target resource. To this end, the server updates the value COUNT of the associated observer counter (see <xref target="sec-server-side"/>), for instance by using the method described below.</t>
        <section anchor="request-for-feedback">
          <name>Request for Feedback</name>
          <t>When it wants to obtain a new estimated count, the server considers a number M of confirmations it would like to receive from the clients. It is up to applications to define policies about how the server determines and possibly adjusts the value of M.</t>
          <t>Then, the server computes the value Q = max(L, 0), where:</t>
          <ul spacing="normal">
            <li>
              <t>L is computed as L = ceil(log2(N / M)).</t>
            </li>
            <li>
              <t>N is the current value of the observer counter, possibly rounded up to 1, i.e., N = max(COUNT, 1).</t>
            </li>
          </ul>
          <t>Finally, the server sets Q as the value of the Multicast-Response-Feedback-Divider Option, which is sent within a successful multicast notification.</t>
          <t>If several multicast notifications are sent in a burst fashion, it is <bcp14>RECOMMENDED</bcp14> for the server to include the Multicast-Response-Feedback-Divider Option only in the first notification of such a burst.</t>
        </section>
        <section anchor="collection-of-feedback">
          <name>Collection of Feedback</name>
          <t>The server collects unicast observation requests from the clients, for an amount of time of MAX_CONFIRMATION_WAIT seconds. During this time, the server regularly increments the observer counter when adding a new client to the group observation (see <xref target="ssec-server-side-informative"/>).</t>
          <t>It is up to applications to define the value of MAX_CONFIRMATION_WAIT, which has to take into account the transmission time of the multicast notification and of unicast observation requests, as well as the leisure time of the clients, which may be hard to know or estimate for the server.</t>
          <t>If this information is not known to the server, it is recommended to define MAX_CONFIRMATION_WAIT as follows.</t>
          <t>MAX_CONFIRMATION_WAIT = MAX_RTT + MAX_CLIENT_REQUEST_DELAY</t>
          <t>where MAX_RTT is as defined in <xref section="4.8.2" sectionFormat="of" target="RFC7252"/> and has default value 202 seconds, while MAX_CLIENT_REQUEST_DELAY is equivalent to MAX_SERVER_RESPONSE_DELAY defined in <xref section="3.1.5" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/> and has default value 250 seconds. In the absence of more specific information, the server can thus consider a conservative MAX_CONFIRMATION_WAIT of 452 seconds.</t>
          <t>If more information is available in deployments, a much shorter MAX_CONFIRMATION_WAIT can be set. This can be based on a realistic round trip time (replacing MAX_RTT) and on the largest leisure time configured on the clients (replacing MAX_CLIENT_REQUEST_DELAY), e.g., DEFAULT_LEISURE = 5 seconds, thus shortening MAX_CONFIRMATION_WAIT to a few seconds.</t>
        </section>
        <section anchor="processing-of-feedback">
          <name>Processing of Feedback</name>
          <t>Once MAX_CONFIRMATION_WAIT seconds have passed, the server counts the R confirmations arrived as unicast observation requests to the target resource, since the multicast notification with the Multicast-Response-Feedback-Divider Option has been sent. In particular, the server considers a unicast observation request as a confirmation from a client only if it includes a Multicast-Response-Feedback-Divider Option with value 0.</t>
          <t>Then, the server computes a feedback indicator as E = R * (2^Q), where "^" is the exponentiation operator. According to what is defined by application policies, the server determines the next time when to ask clients for their confirmation, e.g., after a certain number of multicast notifications has been sent. For example, the decision can be influenced by the reception of no confirmations from the clients, i.e., R = 0, or by the value of the ratios (E/N) and (N/E).</t>
          <t>Finally, the server computes a new estimated count of the observers. To this end, the server first considers COUNT' as the current value of the observer counter at this point in time. Note that COUNT' may be greater than the value COUNT used at the beginning of this process, if the server has incremented the observer counter upon adding new clients to the group observation (see <xref target="ssec-server-side-informative"/>).</t>
          <t>In particular, the server computes the new estimated count value as COUNT' + ((E - N) / D), where D &gt; 0 is an integer value used as dampener. This step has to be performed atomically. That is, until this step is completed, the server <bcp14>MUST</bcp14> hold the processing of an observation request for the same target resource from a new client. Finally, the server considers the result as the current observer counter, and assesses it for possibly canceling the group observation (see <xref target="ssec-server-side-cancellation"/>).</t>
          <t>This estimate is skewed by packet loss, but it gives the server a sufficiently good estimation for further counts and for deciding when to cancel the group observation. It is up to applications to define policies about how the server takes the newly updated estimate into account and determines whether to cancel the group observation.</t>
          <t>As an example, if the server currently estimates that N = COUNT = 32 observers are active and considers a constant M = 8, it sends out a notification with Multicast-Response-Feedback-Divider with value Q = 2. Then, out of 18 actually active clients, 5 send a re-registration request based on their random draw, of which one request gets lost, thus leaving 4 re-registration requests received by the server. Also, no new clients have been added to the group observation during this time, i.e., COUNT' is equal to COUNT. As a consequence, assuming that a dampener value D = 1 is used, the server computes the new estimated count value as 32 + (16 - 32) = 16, and keeps the group observation active.</t>
          <t>To produce a most accurate updated counter, a server can include a Multicast-Response-Feedback-Divider Option with value Q = 0 in its multicast notifications, as if M is equal to N. This will trigger all the active clients to state their interest in continuing receiving notifications for the target resource. Thus, the amount R of arrived confirmations is affected only by possible packet loss.</t>
          <t><xref target="appendix-pseudo-code-counting-server"/> provides a description in pseudo-code of the operations above performed by the server, including example behaviors for scheduling the next count update and deciding whether to cancel the group observation.</t>
        </section>
      </section>
      <section anchor="impact-from-proxies">
        <name>Impact from Proxies</name>
        <t><xref target="intermediaries"/> specifies how the approach presented in <xref target="sec-server-side"/> and <xref target="sec-client-side"/> works when a proxy is used between the origin clients and the origin server. That is, the clients register as observers at the proxy, which in turn registers as a participant to the group observation at the server, receives the multicast notifications from the server, and forwards those to the clients. In such a case, the following applies.</t>
        <ul spacing="normal">
          <li>
            <t>Since the Multicast-Response-Feedback-Divider Option is not Safe-to-Forward, the proxy needs to recognize and understand the option in order to participate to the rough counting process.  </t>
            <t>
If the proxy receives a request that includes the Multicast-Response-Feedback-Divider Option but the proxy does not recognize and understand the option, then the proxy has to stop processing the request and 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 (see <xref target="ssec-server-side-cancellation"/>), the multicast response with error code 5.03 (Service Unavailable) is also protected with Group OSCORE, as per <xref section="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="C" sectionFormat="of" target="I-D.ietf-core-href"/> is used to notate a CBOR Extended Diagnostic Notation (EDN) literal for a CRI.</t>
        </li>
        <li>
          <t>'bstr(X)' denotes a CBOR byte string with value the byte serialization of X, with '|' denoting byte concatenation.</t>
        </li>
        <li>
          <t>'OPT' denotes a sequence of CoAP options. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</t>
        </li>
        <li>
          <t>'PAYLOAD' denotes an encrypted CoAP payload. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</t>
        </li>
        <li>
          <t>'SIGN' denotes the signature appended to an encrypted CoAP payload. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</t>
        </li>
      </ul>
      <figure anchor="example-oscore">
        <name>Example of Group Observation with Group OSCORE</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="2192" width="552" viewBox="0 0 552 2192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,720" fill="none" stroke="black"/>
              <path d="M 8,752 L 8,1152" fill="none" stroke="black"/>
              <path d="M 8,1184 L 8,1408" fill="none" stroke="black"/>
              <path d="M 8,1440 L 8,1888" fill="none" stroke="black"/>
              <path d="M 8,1952 L 8,2176" fill="none" stroke="black"/>
              <path d="M 32,1888 L 32,1952" fill="none" stroke="black"/>
              <path d="M 512,48 L 512,720" fill="none" stroke="black"/>
              <path d="M 512,752 L 512,1152" fill="none" stroke="black"/>
              <path d="M 512,1184 L 512,1408" fill="none" stroke="black"/>
              <path d="M 512,1440 L 512,1904" fill="none" stroke="black"/>
              <path d="M 512,1936 L 512,2176" fill="none" stroke="black"/>
              <path d="M 32,32 L 152,32" fill="none" stroke="black"/>
              <path d="M 352,32 L 496,32" fill="none" stroke="black"/>
              <path d="M 56,304 L 496,304" fill="none" stroke="black"/>
              <path d="M 56,352 L 496,352" fill="none" stroke="black"/>
              <path d="M 432,608 L 448,608" fill="none" stroke="black"/>
              <path d="M 32,736 L 152,736" fill="none" stroke="black"/>
              <path d="M 344,736 L 496,736" fill="none" stroke="black"/>
              <path d="M 32,1168 L 152,1168" fill="none" stroke="black"/>
              <path d="M 352,1168 L 496,1168" fill="none" stroke="black"/>
              <path d="M 32,1424 L 152,1424" fill="none" stroke="black"/>
              <path d="M 344,1424 L 496,1424" fill="none" stroke="black"/>
              <path d="M 8,1888 L 32,1888" fill="none" stroke="black"/>
              <path d="M 48,1920 L 136,1920" fill="none" stroke="black"/>
              <path d="M 392,1920 L 496,1920" fill="none" stroke="black"/>
              <path d="M 8,1952 L 32,1952" fill="none" stroke="black"/>
              <path d="M 44,328 L 56,352" fill="none" stroke="black"/>
              <path d="M 44,328 L 56,304" fill="none" stroke="black"/>
              <path d="M 248,1936 L 256,1920" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="504,1168 492,1162.4 492,1173.6" fill="black" transform="rotate(0,496,1168)"/>
              <polygon class="arrowhead" points="504,352 492,346.4 492,357.6" fill="black" transform="rotate(0,496,352)"/>
              <polygon class="arrowhead" points="504,32 492,26.4 492,37.6" fill="black" transform="rotate(0,496,32)"/>
              <polygon class="arrowhead" points="440,608 428,602.4 428,613.6" fill="black" transform="rotate(180,432,608)"/>
              <polygon class="arrowhead" points="56,1920 44,1914.4 44,1925.6" fill="black" transform="rotate(180,48,1920)"/>
              <polygon class="arrowhead" points="40,1424 28,1418.4 28,1429.6" fill="black" transform="rotate(180,32,1424)"/>
              <polygon class="arrowhead" points="40,736 28,730.4 28,741.6" fill="black" transform="rotate(180,32,736)"/>
              <g class="text">
                <text x="12" y="36">C1</text>
                <text x="168" y="36">[</text>
                <text x="208" y="36">Unicast</text>
                <text x="252" y="36">w/</text>
                <text x="292" y="36">OSCORE</text>
                <text x="328" y="36">]</text>
                <text x="512" y="36">S</text>
                <text x="540" y="36">/r</text>
                <text x="44" y="52">0.05</text>
                <text x="96" y="52">(FETCH)</text>
                <text x="52" y="68">Token:</text>
                <text x="100" y="68">0x4a</text>
                <text x="56" y="84">OSCORE:</text>
                <text x="112" y="84">{kid:</text>
                <text x="160" y="84">0x01;</text>
                <text x="204" y="84">piv:</text>
                <text x="244" y="84">101;</text>
                <text x="284" y="84">...}</text>
                <text x="52" y="100">&lt;Other</text>
                <text x="104" y="100">class</text>
                <text x="144" y="100">U/I</text>
                <text x="196" y="100">options&gt;</text>
                <text x="44" y="116">0xff</text>
                <text x="96" y="132">Encrypted_payload</text>
                <text x="176" y="132">{</text>
                <text x="60" y="148">0x01</text>
                <text x="108" y="148">(GET),</text>
                <text x="76" y="164">Observe:</text>
                <text x="120" y="164">0</text>
                <text x="176" y="164">(register),</text>
                <text x="80" y="180">Uri-Path:</text>
                <text x="140" y="180">"r",</text>
                <text x="68" y="196">&lt;Other</text>
                <text x="120" y="196">class</text>
                <text x="152" y="196">E</text>
                <text x="196" y="196">options&gt;</text>
                <text x="32" y="212">}</text>
                <text x="136" y="244">(</text>
                <text x="152" y="244">S</text>
                <text x="200" y="244">allocates</text>
                <text x="256" y="244">the</text>
                <text x="312" y="244">available</text>
                <text x="376" y="244">Token</text>
                <text x="424" y="244">value</text>
                <text x="468" y="244">0x7b</text>
                <text x="496" y="244">)</text>
                <text x="56" y="276">(</text>
                <text x="72" y="276">S</text>
                <text x="104" y="276">sends</text>
                <text x="140" y="276">to</text>
                <text x="180" y="276">itself</text>
                <text x="216" y="276">a</text>
                <text x="256" y="276">phantom</text>
                <text x="336" y="276">observation</text>
                <text x="416" y="276">request</text>
                <text x="476" y="276">PH_REQ</text>
                <text x="76" y="292">as</text>
                <text x="116" y="292">coming</text>
                <text x="164" y="292">from</text>
                <text x="200" y="292">the</text>
                <text x="228" y="292">IP</text>
                <text x="280" y="292">multicast</text>
                <text x="352" y="292">address</text>
                <text x="420" y="292">GRP_ADDR</text>
                <text x="472" y="292">)</text>
                <text x="540" y="356">/r</text>
                <text x="228" y="372">0.05</text>
                <text x="280" y="372">(FETCH)</text>
                <text x="236" y="388">Token:</text>
                <text x="284" y="388">0x7b</text>
                <text x="240" y="404">OSCORE:</text>
                <text x="296" y="404">{kid:</text>
                <text x="340" y="404">0x05</text>
                <text x="368" y="404">;</text>
                <text x="396" y="404">piv:</text>
                <text x="436" y="404">501;</text>
                <text x="296" y="420">kid</text>
                <text x="348" y="420">context:</text>
                <text x="424" y="420">0x57ab2e;</text>
                <text x="484" y="420">...}</text>
                <text x="236" y="436">&lt;Other</text>
                <text x="288" y="436">class</text>
                <text x="328" y="436">U/I</text>
                <text x="380" y="436">options&gt;</text>
                <text x="228" y="452">0xff</text>
                <text x="280" y="468">Encrypted_payload</text>
                <text x="360" y="468">{</text>
                <text x="244" y="484">0x01</text>
                <text x="292" y="484">(GET),</text>
                <text x="260" y="500">Observe:</text>
                <text x="304" y="500">0</text>
                <text x="360" y="500">(register),</text>
                <text x="264" y="516">Uri-Path:</text>
                <text x="324" y="516">"r",</text>
                <text x="252" y="532">&lt;Other</text>
                <text x="304" y="532">class</text>
                <text x="336" y="532">E</text>
                <text x="380" y="532">options&gt;</text>
                <text x="216" y="548">}</text>
                <text x="256" y="564">&lt;Signature&gt;</text>
                <text x="232" y="596">(</text>
                <text x="248" y="596">S</text>
                <text x="280" y="596">steps</text>
                <text x="324" y="596">SN_5</text>
                <text x="356" y="596">in</text>
                <text x="384" y="596">the</text>
                <text x="424" y="596">Group</text>
                <text x="476" y="596">OSCORE</text>
                <text x="276" y="612">Security</text>
                <text x="348" y="612">Context:</text>
                <text x="404" y="612">SN_5</text>
                <text x="472" y="612">502</text>
                <text x="496" y="612">)</text>
                <text x="192" y="660">(</text>
                <text x="208" y="660">S</text>
                <text x="248" y="660">creates</text>
                <text x="288" y="660">a</text>
                <text x="320" y="660">group</text>
                <text x="392" y="660">observation</text>
                <text x="452" y="660">of</text>
                <text x="476" y="660">/r</text>
                <text x="496" y="660">)</text>
                <text x="224" y="692">(</text>
                <text x="240" y="692">S</text>
                <text x="292" y="692">increments</text>
                <text x="352" y="692">the</text>
                <text x="404" y="692">observer</text>
                <text x="472" y="692">counter</text>
                <text x="248" y="708">for</text>
                <text x="280" y="708">the</text>
                <text x="320" y="708">group</text>
                <text x="392" y="708">observation</text>
                <text x="452" y="708">of</text>
                <text x="476" y="708">/r</text>
                <text x="496" y="708">)</text>
                <text x="12" y="740">C1</text>
                <text x="168" y="740">[</text>
                <text x="208" y="740">Unicast</text>
                <text x="252" y="740">w/</text>
                <text x="292" y="740">OSCORE</text>
                <text x="328" y="740">]</text>
                <text x="512" y="740">S</text>
                <text x="44" y="756">2.05</text>
                <text x="104" y="756">(Content)</text>
                <text x="52" y="772">Token:</text>
                <text x="100" y="772">0x4a</text>
                <text x="56" y="788">OSCORE:</text>
                <text x="112" y="788">{piv:</text>
                <text x="156" y="788">301;</text>
                <text x="196" y="788">...}</text>
                <text x="60" y="804">Max-Age:</text>
                <text x="104" y="804">0</text>
                <text x="52" y="820">&lt;Other</text>
                <text x="104" y="820">class</text>
                <text x="144" y="820">U/I</text>
                <text x="196" y="820">options&gt;</text>
                <text x="44" y="836">0xff</text>
                <text x="96" y="852">Encrypted_payload</text>
                <text x="176" y="852">{</text>
                <text x="60" y="868">5.03</text>
                <text x="116" y="868">(Service</text>
                <text x="208" y="868">Unavailable),</text>
                <text x="104" y="884">Content-Format:</text>
                <text x="324" y="884">application/informative-response+cbor,</text>
                <text x="68" y="900">&lt;Other</text>
                <text x="120" y="900">class</text>
                <text x="152" y="900">E</text>
                <text x="200" y="900">options&gt;,</text>
                <text x="64" y="916">0xff,</text>
                <text x="72" y="932">Payload</text>
                <text x="112" y="932">{</text>
                <text x="64" y="948">/</text>
                <text x="104" y="948">tp_info</text>
                <text x="144" y="948">/</text>
                <text x="184" y="948">0</text>
                <text x="200" y="948">:</text>
                <text x="216" y="948">[</text>
                <text x="344" y="964">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="360" y="980">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="268" y="996">0x7b</text>
                <text x="220" y="1012">],</text>
                <text x="64" y="1028">/</text>
                <text x="100" y="1028">ph_req</text>
                <text x="136" y="1028">/</text>
                <text x="184" y="1028">1</text>
                <text x="200" y="1028">:</text>
                <text x="248" y="1028">bstr(0x05</text>
                <text x="296" y="1028">|</text>
                <text x="320" y="1028">OPT</text>
                <text x="344" y="1028">|</text>
                <text x="372" y="1028">0xff</text>
                <text x="400" y="1028">|</text>
                <text x="280" y="1044">PAYLOAD</text>
                <text x="320" y="1044">|</text>
                <text x="356" y="1044">SIGN),</text>
                <text x="64" y="1060">/</text>
                <text x="116" y="1060">last_notif</text>
                <text x="168" y="1060">/</text>
                <text x="184" y="1060">2</text>
                <text x="200" y="1060">:</text>
                <text x="248" y="1060">bstr(0x45</text>
                <text x="296" y="1060">|</text>
                <text x="320" y="1060">OPT</text>
                <text x="344" y="1060">|</text>
                <text x="372" y="1060">0xff</text>
                <text x="400" y="1060">|</text>
                <text x="280" y="1076">PAYLOAD</text>
                <text x="320" y="1076">|</text>
                <text x="356" y="1076">SIGN),</text>
                <text x="64" y="1092">/</text>
                <text x="108" y="1092">join_uri</text>
                <text x="152" y="1092">/</text>
                <text x="184" y="1092">4</text>
                <text x="200" y="1092">:</text>
                <text x="340" y="1092">"coap://myGM/ace-group/myGroup",</text>
                <text x="64" y="1108">/</text>
                <text x="100" y="1108">sec_gp</text>
                <text x="136" y="1108">/</text>
                <text x="184" y="1108">5</text>
                <text x="200" y="1108">:</text>
                <text x="248" y="1108">"myGroup"</text>
                <text x="48" y="1124">}</text>
                <text x="32" y="1140">}</text>
                <text x="12" y="1172">C2</text>
                <text x="168" y="1172">[</text>
                <text x="208" y="1172">Unicast</text>
                <text x="252" y="1172">w/</text>
                <text x="292" y="1172">OSCORE</text>
                <text x="328" y="1172">]</text>
                <text x="512" y="1172">S</text>
                <text x="540" y="1172">/r</text>
                <text x="44" y="1188">0.05</text>
                <text x="96" y="1188">(FETCH)</text>
                <text x="52" y="1204">Token:</text>
                <text x="100" y="1204">0x01</text>
                <text x="56" y="1220">OSCORE:</text>
                <text x="112" y="1220">{kid:</text>
                <text x="160" y="1220">0x02;</text>
                <text x="204" y="1220">piv:</text>
                <text x="244" y="1220">201;</text>
                <text x="284" y="1220">...}</text>
                <text x="52" y="1236">&lt;Other</text>
                <text x="104" y="1236">class</text>
                <text x="144" y="1236">U/I</text>
                <text x="196" y="1236">options&gt;</text>
                <text x="44" y="1252">0xff</text>
                <text x="96" y="1268">Encrypted_payload</text>
                <text x="176" y="1268">{</text>
                <text x="60" y="1284">0x01</text>
                <text x="108" y="1284">(GET),</text>
                <text x="76" y="1300">Observe:</text>
                <text x="120" y="1300">0</text>
                <text x="176" y="1300">(register),</text>
                <text x="80" y="1316">Uri-Path:</text>
                <text x="140" y="1316">"r",</text>
                <text x="68" y="1332">&lt;Other</text>
                <text x="120" y="1332">class</text>
                <text x="152" y="1332">E</text>
                <text x="196" y="1332">options&gt;</text>
                <text x="32" y="1348">}</text>
                <text x="224" y="1380">(</text>
                <text x="240" y="1380">S</text>
                <text x="292" y="1380">increments</text>
                <text x="352" y="1380">the</text>
                <text x="404" y="1380">observer</text>
                <text x="472" y="1380">counter</text>
                <text x="248" y="1396">for</text>
                <text x="280" y="1396">the</text>
                <text x="320" y="1396">group</text>
                <text x="392" y="1396">observation</text>
                <text x="452" y="1396">of</text>
                <text x="476" y="1396">/r</text>
                <text x="496" y="1396">)</text>
                <text x="12" y="1428">C2</text>
                <text x="168" y="1428">[</text>
                <text x="208" y="1428">Unicast</text>
                <text x="252" y="1428">w/</text>
                <text x="292" y="1428">OSCORE</text>
                <text x="328" y="1428">]</text>
                <text x="512" y="1428">S</text>
                <text x="44" y="1444">2.05</text>
                <text x="104" y="1444">(Content)</text>
                <text x="52" y="1460">Token:</text>
                <text x="100" y="1460">0x01</text>
                <text x="56" y="1476">OSCORE:</text>
                <text x="112" y="1476">{piv:</text>
                <text x="156" y="1476">401;</text>
                <text x="196" y="1476">...}</text>
                <text x="60" y="1492">Max-Age:</text>
                <text x="104" y="1492">0</text>
                <text x="52" y="1508">&lt;Other</text>
                <text x="104" y="1508">class</text>
                <text x="144" y="1508">U/I</text>
                <text x="196" y="1508">options&gt;</text>
                <text x="48" y="1524">0xff,</text>
                <text x="96" y="1540">Encrypted_payload</text>
                <text x="176" y="1540">{</text>
                <text x="60" y="1556">5.03</text>
                <text x="116" y="1556">(Service</text>
                <text x="208" y="1556">Unavailable),</text>
                <text x="104" y="1572">Content-Format:</text>
                <text x="324" y="1572">application/informative-response+cbor,</text>
                <text x="68" y="1588">&lt;Other</text>
                <text x="120" y="1588">class</text>
                <text x="152" y="1588">E</text>
                <text x="200" y="1588">options&gt;,</text>
                <text x="64" y="1604">0xff,</text>
                <text x="72" y="1620">Payload</text>
                <text x="112" y="1620">{</text>
                <text x="64" y="1636">/</text>
                <text x="104" y="1636">tp_info</text>
                <text x="144" y="1636">/</text>
                <text x="184" y="1636">0</text>
                <text x="200" y="1636">:</text>
                <text x="216" y="1636">[</text>
                <text x="344" y="1652">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="360" y="1668">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="268" y="1684">0x7b</text>
                <text x="220" y="1700">],</text>
                <text x="64" y="1716">/</text>
                <text x="100" y="1716">ph_req</text>
                <text x="136" y="1716">/</text>
                <text x="184" y="1716">1</text>
                <text x="200" y="1716">:</text>
                <text x="248" y="1716">bstr(0x05</text>
                <text x="296" y="1716">|</text>
                <text x="320" y="1716">OPT</text>
                <text x="344" y="1716">|</text>
                <text x="372" y="1716">0xff</text>
                <text x="400" y="1716">|</text>
                <text x="280" y="1732">PAYLOAD</text>
                <text x="320" y="1732">|</text>
                <text x="356" y="1732">SIGN),</text>
                <text x="64" y="1748">/</text>
                <text x="116" y="1748">last_notif</text>
                <text x="168" y="1748">/</text>
                <text x="184" y="1748">2</text>
                <text x="200" y="1748">:</text>
                <text x="248" y="1748">bstr(0x45</text>
                <text x="296" y="1748">|</text>
                <text x="320" y="1748">OPT</text>
                <text x="344" y="1748">|</text>
                <text x="372" y="1748">0xff</text>
                <text x="400" y="1748">|</text>
                <text x="280" y="1764">PAYLOAD</text>
                <text x="320" y="1764">|</text>
                <text x="356" y="1764">SIGN),</text>
                <text x="64" y="1780">/</text>
                <text x="108" y="1780">join_uri</text>
                <text x="152" y="1780">/</text>
                <text x="184" y="1780">4</text>
                <text x="200" y="1780">:</text>
                <text x="340" y="1780">"coap://myGM/ace-group/myGroup",</text>
                <text x="64" y="1796">/</text>
                <text x="100" y="1796">sec_gp</text>
                <text x="136" y="1796">/</text>
                <text x="184" y="1796">5</text>
                <text x="200" y="1796">:</text>
                <text x="248" y="1796">"myGroup"</text>
                <text x="48" y="1812">}</text>
                <text x="32" y="1828">}</text>
                <text x="104" y="1860">(</text>
                <text x="128" y="1860">The</text>
                <text x="168" y="1860">value</text>
                <text x="204" y="1860">of</text>
                <text x="232" y="1860">the</text>
                <text x="284" y="1860">resource</text>
                <text x="332" y="1860">/r</text>
                <text x="376" y="1860">changes</text>
                <text x="420" y="1860">to</text>
                <text x="460" y="1860">"5678"</text>
                <text x="496" y="1860">)</text>
                <text x="12" y="1908">C1</text>
                <text x="152" y="1924">[</text>
                <text x="200" y="1924">Multicast</text>
                <text x="248" y="1924">w</text>
                <text x="288" y="1924">Group</text>
                <text x="340" y="1924">OSCORE</text>
                <text x="376" y="1924">]</text>
                <text x="512" y="1924">S</text>
                <text x="12" y="1940">C2</text>
                <text x="132" y="1940">(Destination</text>
                <text x="216" y="1940">address</text>
                <text x="272" y="1940">port:</text>
                <text x="372" y="1940">GRP_ADDR/GRP_PORT)</text>
                <text x="60" y="1972">2.05</text>
                <text x="120" y="1972">(Content)</text>
                <text x="68" y="1988">Token:</text>
                <text x="116" y="1988">0x7b</text>
                <text x="72" y="2004">OSCORE:</text>
                <text x="128" y="2004">{kid:</text>
                <text x="176" y="2004">0x05;</text>
                <text x="220" y="2004">piv:</text>
                <text x="260" y="2004">502;</text>
                <text x="300" y="2004">...}</text>
                <text x="68" y="2020">&lt;Other</text>
                <text x="120" y="2020">class</text>
                <text x="160" y="2020">U/I</text>
                <text x="212" y="2020">options&gt;</text>
                <text x="60" y="2036">0xff</text>
                <text x="112" y="2052">Encrypted_payload</text>
                <text x="192" y="2052">{</text>
                <text x="76" y="2068">2.05</text>
                <text x="140" y="2068">(Content),</text>
                <text x="92" y="2084">Observe:</text>
                <text x="164" y="2084">[empty],</text>
                <text x="84" y="2100">&lt;Other</text>
                <text x="136" y="2100">class</text>
                <text x="168" y="2100">E</text>
                <text x="216" y="2100">options&gt;,</text>
                <text x="80" y="2116">0xff,</text>
                <text x="92" y="2132">Payload:</text>
                <text x="156" y="2132">"5678"</text>
                <text x="48" y="2148">}</text>
                <text x="88" y="2164">&lt;Signature&gt;</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
C1 ---------------- [ Unicast w/ OSCORE ]  ------------------> S  /r
|  0.05 (FETCH)                                                |
|  Token: 0x4a                                                 |
|  OSCORE: {kid: 0x01; piv: 101; ...}                          |
|  <Other class U/I options>                                   |
|  0xff                                                        |
|  Encrypted_payload {                                         |
|    0x01 (GET),                                               |
|    Observe: 0 (register),                                    |
|    Uri-Path: "r",                                            |
|    <Other class E options>                                   |
|  }                                                           |
|                                                              |
|               ( S allocates the available Token value 0x7b ) |
|                                                              |
|     ( S sends to itself a phantom observation request PH_REQ |
|       as coming from the IP multicast address GRP_ADDR  )    |
|     .------------------------------------------------------- |
|    /                                                         |
|    \                                                         |
|     `------------------------------------------------------> |  /r
|                         0.05 (FETCH)                         |
|                         Token: 0x7b                          |
|                         OSCORE: {kid: 0x05 ; piv: 501;       |
|                                  kid context: 0x57ab2e; ...} |
|                         <Other class U/I options>            |
|                         0xff                                 |
|                         Encrypted_payload {                  |
|                           0x01 (GET),                        |
|                           Observe: 0 (register),             |
|                           Uri-Path: "r",                     |
|                           <Other class E options>            |
|                         }                                    |
|                         <Signature>                          |
|                                                              |
|                           ( S steps SN_5 in the Group OSCORE |
|                             Security Context: SN_5 <-- 502 ) |
|                                                              |
|                                                              |
|                      ( S creates a group observation of /r ) |
|                                                              |
|                          ( S increments the observer counter |
|                            for the group observation of /r ) |
|                                                              |
C1 <--------------- [ Unicast w/ OSCORE ] -------------------- S
|  2.05 (Content)                                              |
|  Token: 0x4a                                                 |
|  OSCORE: {piv: 301; ...}                                     |
|  Max-Age: 0                                                  |
|  <Other class U/I options>                                   |
|  0xff                                                        |
|  Encrypted_payload {                                         |
|    5.03 (Service Unavailable),                               |
|    Content-Format: application/informative-response+cbor,    |
|    <Other class E options>,                                  |
|    0xff,                                                     |
|    Payload {                                                 |
|      / tp_info /    0 : [                                    |
|                          cri'coap://SRV_ADDR:SRV_PORT/',     |
|                            cri'coap://GRP_ADDR:GRP_PORT/',   |
|                              0x7b                            |
|                         ],                                   |
|      / ph_req /     1 : bstr(0x05 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / last_notif / 2 : bstr(0x45 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / join_uri /   4 : "coap://myGM/ace-group/myGroup",     |
|      / sec_gp /     5 : "myGroup"                            |
|    }                                                         |
|  }                                                           |
|                                                              |
C2 ---------------- [ Unicast w/ OSCORE ]  ------------------> S  /r
|  0.05 (FETCH)                                                |
|  Token: 0x01                                                 |
|  OSCORE: {kid: 0x02; piv: 201; ...}                          |
|  <Other class U/I options>                                   |
|  0xff                                                        |
|  Encrypted_payload {                                         |
|    0x01 (GET),                                               |
|    Observe: 0 (register),                                    |
|    Uri-Path: "r",                                            |
|    <Other class E options>                                   |
|  }                                                           |
|                                                              |
|                          ( S increments the observer counter |
|                            for the group observation of /r ) |
|                                                              |
C2 <--------------- [ Unicast w/ OSCORE ] -------------------- S
|  2.05 (Content)                                              |
|  Token: 0x01                                                 |
|  OSCORE: {piv: 401; ...}                                     |
|  Max-Age: 0                                                  |
|  <Other class U/I options>                                   |
|  0xff,                                                       |
|  Encrypted_payload {                                         |
|    5.03 (Service Unavailable),                               |
|    Content-Format: application/informative-response+cbor,    |
|    <Other class E options>,                                  |
|    0xff,                                                     |
|    Payload {                                                 |
|      / tp_info /    0 : [                                    |
|                          cri'coap://SRV_ADDR:SRV_PORT/',     |
|                            cri'coap://GRP_ADDR:GRP_PORT/',   |
|                              0x7b                            |
|                         ],                                   |
|      / ph_req /     1 : bstr(0x05 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / last_notif / 2 : bstr(0x45 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / join_uri /   4 : "coap://myGM/ace-group/myGroup",     |
|      / sec_gp /     5 : "myGroup"                            |
|    }                                                         |
|  }                                                           |
|                                                              |
|           ( The value of the resource /r changes to "5678" ) |
|                                                              |
+--+                                                           |
C1 |                                                           |
   | <----------- [ Multicast w/ Group OSCORE ] -------------- S
C2 |      (Destination address/port: GRP_ADDR/GRP_PORT)        |
+--+                                                           |
|    2.05 (Content)                                            |
|    Token: 0x7b                                               |
|    OSCORE: {kid: 0x05; piv: 502; ...}                        |
|    <Other class U/I options>                                 |
|    0xff                                                      |
|    Encrypted_payload {                                       |
|      2.05 (Content),                                         |
|      Observe: [empty],                                       |
|      <Other class E options>,                                |
|      0xff,                                                   |
|      Payload: "5678"                                         |
|    }                                                         |
|    <Signature>                                               |
|                                                              |
]]></artwork>
        </artset>
      </figure>
      <t>The two external_aad used to encrypt and sign the multicast notification above have 'request_kid' = 5, 'request_piv' = 501, and 'request_kid_context' = 0x57ab2e. These values are specified in the 'kid', 'piv', and 'kid context' field of the OSCORE Option of the phantom observation request, which is encoded in the 'ph_req' parameter of the unicast informative response to the two clients. Thus, the two clients can build the two same external_aad for decrypting and verifying this multicast notification and the following ones in the group observation.</t>
    </section>
    <section anchor="intermediaries">
      <name>Intermediaries</name>
      <t>This section specifies how the approach presented in <xref target="sec-server-side"/> and <xref target="sec-client-side"/> works when a proxy is used between the clients and the server. In addition to what is specified in <xref section="5.7" sectionFormat="of" target="RFC7252"/> and <xref section="5" sectionFormat="of" target="RFC7641"/>, the following applies.</t>
      <t>A client sends its original observation request to the proxy. If the proxy is not already registered at the server for that target resource, the proxy forwards the observation request to the server, hence registering itself as an observer. If the server has an ongoing group observation for the target resource or decides to start one, the server considers the proxy as taking part in the group observation, and replies to the proxy with an informative response.</t>
      <t>Upon receiving an informative response, the proxy performs as specified for the client in <xref target="sec-client-side"/>, with the peculiarity that "consuming" the last notification (if present) means populating its cache.</t>
      <t>In particular, by using the information retrieved from the informative response, the proxy configures an observation of the target resource at the origin server, acting as a client directly taking part in the group observation.</t>
      <t>As a consequence, the proxy listens to the IP multicast address and port number indicated by the server, i.e., per the CRI specified by a dedicated element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref target="ssssec-udp-transport-specific"/>).</t>
      <t>Furthermore, multicast notifications will match the phantom request stored at the proxy, based on the Token value specified by a dedicated element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref target="ssssec-udp-transport-specific"/>).</t>
      <t>Then, the proxy performs the following actions.</t>
      <ul spacing="normal">
        <li>
          <t>If the 'last_notif' field is not present, the proxy responds to the client with an Empty Acknowledgement (if indicated by the message type, and if the proxy has not already done so).</t>
        </li>
        <li>
          <t>If the 'last_notif' field is present, the proxy rebuilds the latest multicast notification, as defined in <xref target="sec-client-side"/>. Then, the proxy responds to the client, by forwarding back the latest multicast notification.</t>
        </li>
      </ul>
      <t>When responding to an observation request from a client, the proxy also adds that client (and its Token) to the list of its registered observers for the target resource, next to the older observations.</t>
      <t>Upon receiving a multicast notification from the server, the proxy forwards it back separately to each observer client over unicast. Note that the notification forwarded back to a certain client has the same Token value of the original observation request sent by that client to the proxy.</t>
      <t>Note that the proxy configures the observation of the target resource at the server only once, when receiving the informative response associated with a (newly started) group observation for that target resource.</t>
      <t>After that, when receiving an observation request from a following new client to be added to the same group observation, the proxy does not take any further action with the server. Instead, the proxy responds to the client either with the latest multicast notification if available from its cache, or with an Empty Acknowledgement otherwise, as defined above.</t>
      <t>As a result, the observer counter at the server (see <xref target="sec-server-side"/>) is not incremented when a new origin client behind the proxy registers as an observer at the proxy. Instead, the observer counter takes into account only the proxy, which has registered as observer at the server and has received the informative response from the server.</t>
      <t>An example is provided in <xref target="intermediaries-example"/>.</t>
      <t>In the general case with a chain of two or more proxies, every proxy in the chain takes the role of client with the (next hop towards the) origin server. Note that the proxy adjacent to the origin server is the only one in the chain that receives informative responses, and that listens to an IP multicast address and port number to receive notifications for the group observation. Furthermore, every proxy in the chain takes the role of server with the (previous hop towards the) origin client.</t>
    </section>
    <section anchor="intermediaries-e2e-security">
      <name>Intermediaries Together with End-to-End Security</name>
      <t>As defined in <xref target="sec-secured-notifications"/>, Group OSCORE can be used to protect multicast notifications end-to-end between the origin server and the origin clients. In such a case, additional actions are required when also the informative responses from the origin server are protected specifically end-to-end, by using OSCORE or Group OSCORE.</t>
      <t>In fact, the proxy adjacent to the origin server is not able to access the encrypted payload of such informative responses. Hence, the proxy cannot retrieve the 'ph_req' and 'tp_info' parameters necessary to correctly receive multicast notifications and forward them back to the clients.</t>
      <t>Then, differently from what is defined in <xref target="intermediaries"/>, each proxy receiving an informative response simply forwards it back to the client that has sent the corresponding observation request. Note that the proxy does not even realize that the message is an actual informative response, since the outer Code field is set to 2.05 (Content).</t>
      <t>Upon receiving the informative response, the client does not configure an observation of the target resource. Instead, the client performs a new observe registration request, by transmitting the re-built phantom request as intended to reach the proxy adjacent to the origin server. In particular, the client includes the new Listen-To-Multicast-Responses CoAP option defined in <xref target="ltmr-option"/>, to provide that proxy with the transport-specific information required for receiving multicast notifications for the group observation.</t>
      <t>As a result, the observer counter at the server (see <xref target="sec-server-side"/>) is incremented when, after having received the original observation request from a new origin client, the origin server replies with the informative response. In particular, the observer counter at the server reliably takes into account the new, different origin clients behind the proxy, which the server distinguishes through their security identity specified by the pair (OSCORE Sender ID, OSCORE ID Context) in the OSCORE Option of their original observation request. Note that this does not hold anymore if the origin endpoints use phantom observation requests as deterministic requests (see <xref target="deterministic-phantom-Request"/>).</t>
      <t>Details on the additional message exchange and processing are defined in <xref target="intermediaries-e2e-security-processing"/>.</t>
      <section anchor="ltmr-option">
        <name>Listen-To-Multicast-Responses Option</name>
        <t>In order to allow the proxy to listen to the multicast notifications sent by the server, a new CoAP option is introduced. This option <bcp14>MUST</bcp14> be supported by clients interested to take part in group observations through intermediaries, and by proxies that collect multicast notifications and forward them back to the observer clients.</t>
        <t>The option is called Listen-To-Multicast-Response, is intended only for requests, and has the properties summarized in <xref target="ltmr-table"/>, which extends Table 4 of <xref target="RFC7252"/>. The option is critical and not Safe-to-Forward. Since the option is not Safe-to-Forward, the column "N" indicates a dash for "not applicable".</t>
        <table align="center" anchor="ltmr-table">
          <name>The Listen-To-Multicast-Responses Option. C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left">-</td>
              <td align="left"> </td>
              <td align="left">Listen-To-<br/>Multicast-Responses</td>
              <td align="left">(*)</td>
              <td align="left">3-1024</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
        <t>The Listen-To-Multicast-Responses Option includes the byte serialization of a CBOR array. This specifies transport-specific message information required for listening to the multicast notifications of a group observation, and intended to the proxy adjacent to the origin server sending those notifications. In particular, the serialized CBOR array has the same format specified in <xref target="sssec-transport-specific-encoding"/> for the 'tp_info' parameter of the informative response defined in <xref target="ssec-server-side-informative"/>.</t>
        <t>The Listen-To-Multicast-Responses Option is of class U for OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      </section>
      <section anchor="intermediaries-e2e-security-processing">
        <name>Message Processing</name>
        <t>Compared to <xref target="intermediaries"/>, the following additions apply when informative responses are protected end-to-end between the origin server and the origin clients.</t>
        <t>After the origin server sends an informative response, each proxy simply forwards it back to the (previous hop towards the) origin client that has sent the observation request.</t>
        <t>Once received the informative response, the origin client proceeds in a different way than in <xref target="ssec-client-side-informative-oscore"/>:</t>
        <ul spacing="normal">
          <li>
            <t>The client performs all the additional decryption and verification steps of <xref target="ssec-client-side-informative-oscore"/> on the phantom request specified in the 'ph_req' parameter and on the last notification specified in the 'last_notif' parameter (if present).</t>
          </li>
          <li>
            <t>The client builds a ticket request (see Appendix B of <xref target="I-D.amsuess-core-cachable-oscore"/>), as intended to reach the proxy adjacent to the origin server. The ticket request is formatted as follows.  </t>
            <ul spacing="normal">
              <li>
                <t>The Token is chosen as the client sees fit. In fact, there is no reason for this Token to be the same as the phantom request's.</t>
              </li>
              <li>
                <t>The outer Code field, the outer CoAP options, and the encrypted payload with AEAD tag (protecting the inner Code, the inner CoAP options, and the possible plain CoAP payload) concatenated with the signature are the same of the phantom request used for the group observation. That is, they are as specified in the 'ph_req' parameter of the received informative response.</t>
              </li>
              <li>
                <t>An outer Observe Option is included and set to 0 (register). This will usually be set in the phantom request already.</t>
              </li>
              <li>
                <t>The client includes: the outer option Proxy-Uri or Proxy-Cri <xref target="I-D.ietf-core-href"/>; or the outer options (Uri-Host, Uri-Port), together with the outer option Proxy-Scheme or Proxy-Scheme-Number <xref target="I-D.ietf-core-href"/>. These options are set in order to specify the same request URI of the original registration request sent by the client.</t>
              </li>
              <li>
                <t>The new option Listen-To-Multicast-Responses is included as an outer option. The value is set to the byte serialization of the CBOR array specified by the 'tp_info' parameter of the informative response.      </t>
                <t>
Note that, except for transport-specific information such as the Token and Message ID values, every different client participating in the same group observation (hence rebuilding the same phantom request) will build the same ticket request.      </t>
                <t>
Note also that, identically to the phantom request, the ticket request is still protected with Group OSCORE, i.e., it has the same OSCORE Option, encrypted payload, and signature.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Then, the client sends the ticket request to the next hop towards the origin server. Every proxy in the chain forwards the ticket request to the next hop towards the origin server, until the last proxy in the chain is reached. This last proxy, adjacent to the origin server, proceeds as follows.</t>
        <ul spacing="normal">
          <li>
            <t>The proxy <bcp14>MUST NOT</bcp14> further forward the ticket request to the origin server.</t>
          </li>
          <li>
            <t>The proxy removes the option Proxy-Uri, or Proxy-Scheme, or Proxy-Cri, or Proxy-Scheme-Number from the ticket request.</t>
          </li>
          <li>
            <t>The proxy removes the Listen-To-Multicast-Responses Option from the ticket request, and extracts the transport-specific information conveyed therein.</t>
          </li>
          <li>
            <t>The proxy rebuilds the phantom request associated with the group observation, by using the ticket request as directly providing the required transport-independent information. This includes the outer Code field, the outer CoAP options, and the encrypted payload with AEAD tag concatenated with the signature.</t>
          </li>
          <li>
            <t>The proxy configures an observation of the target resource at the origin server, acting as a client directly taking part in the group observation. To this end, the proxy uses the rebuilt phantom request and the transport-specific information retrieved from the Listen-To-Multicast-Responses Option. The particular way to achieve this is implementation specific.</t>
          </li>
        </ul>
        <t>After that, the proxy listens to the IP multicast address and port number indicated in the Listen-To-Multicast-Responses Option, i.e., per the CRI specified by a dedicated element of 'tpi_details' within the serialized CBOR array conveyed in the option. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref target="ssssec-udp-transport-specific"/>).</t>
        <t>Furthermore, multicast notifications will match the phantom request stored at the proxy, based on the Token value specified by a dedicated element of 'tpi_details' within the serialized CBOR array conveyed in the Listen-To-Multicast-Responses Option. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref target="ssssec-udp-transport-specific"/>).</t>
        <t>An example is provided in <xref target="intermediaries-example-e2e-security"/>.</t>
      </section>
    </section>
    <section anchor="informative-response-params">
      <name>Informative Response Parameters</name>
      <t>This document defines a number of fields used in the informative response defined in <xref target="ssec-server-side-informative"/>.</t>
      <t>The table below summarizes them and specifies the CBOR key to use as abbreviation, instead of the full descriptive name. Note that the media type application/informative-response+cbor <bcp14>MUST</bcp14> be used when these fields are transported.</t>
      <table align="center" anchor="_table-informative-response-params">
        <name>Informative Response Parameters.</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">CBOR Key</th>
            <th align="left">CBOR Type</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">tp_info</td>
            <td align="left">0</td>
            <td align="left">array</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/></td>
          </tr>
          <tr>
            <td align="left">ph_req</td>
            <td align="left">1</td>
            <td align="left">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">join_uri</td>
            <td align="left">4</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">5</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">6</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">7</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">8</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">9</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">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_params</td>
            <td align="left">11</td>
            <td align="left">array</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">gp_material</td>
            <td align="left">12</td>
            <td align="left">map</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">srv_cred</td>
            <td align="left">13</td>
            <td align="left">byte string</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">srv_identifier</td>
            <td align="left">14</td>
            <td align="left">byte string</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">exi</td>
            <td align="left">15</td>
            <td align="left">unsigned integer</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">exp</td>
            <td align="left">16</td>
            <td align="left">unsigned integer</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="transport-protocol-identifiers">
      <name>Transport Protocol Information</name>
      <t><xref target="ssssec-udp-transport-specific"/> defines the transport-specific information that the server has to specify as elements of 'tpi_details' within the 'tp_info' parameter of the informative response defined in <xref target="ssec-server-side-informative"/>, when CoAP responses are transported over UDP.</t>
      <t><xref target="_table-transport-information"/> defines the corresponding entry that <xref target="iana-coap-transport-information"/> registers in the "CoAP Transport Information" registry defined in this document.</t>
      <table align="center" anchor="_table-transport-information">
        <name>CoAP Transport Information for CoAP over UDP.</name>
        <thead>
          <tr>
            <th align="left">Scheme ID</th>
            <th align="left">URI Scheme Name</th>
            <th align="left">Transport Information Details</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">-1</td>
            <td align="left">coap</td>
            <td align="left">tpi_client <br/> tpi_token</td>
            <td align="left">
              <xref target="ssssec-udp-transport-specific"/> of [RFC-XXXX]</td>
          </tr>
        </tbody>
      </table>
      <t>Note to RFC Editor: In the table above, please replace "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>In addition to the security considerations from <xref target="RFC7252"/>, <xref target="RFC7641"/>, <xref target="I-D.ietf-core-groupcomm-bis"/>, <xref target="RFC8613"/>, and <xref target="I-D.ietf-core-oscore-groupcomm"/>, the following considerations hold for this document.</t>
      <section anchor="unprotected-communications">
        <name>Unprotected Communications</name>
        <t>In case communications are not protected, the server might not be able to effectively authenticate a new client when it registers as an observer. <xref section="7" sectionFormat="of" target="RFC7641"/> specifies how, in such a case, the server must strictly limit the number of notifications sent between receiving acknowledgements from the client, as confirming to be still interested in the observation; i.e., any notifications sent in Non-confirmable messages must be interspersed with confirmable messages.</t>
        <t>This is not possible to achieve by the same means when using the communication model defined in this document, since multicast notifications are sent as Non-confirmable messages. Nonetheless, the server might obtain such acknowledgements by other means.</t>
        <t>For instance, the method defined in <xref target="sec-rough-counting"/> to perform the rough counting of still interested clients triggers (some of) them to explicitly send a new observation request to acknowledge their interest. Then, the server can decide to terminate the group observation altogether, in case not enough clients are estimated to be still active.</t>
        <t>If the method defined in <xref target="sec-rough-counting"/> is used, the server <bcp14>SHOULD NOT</bcp14> send more than a strict number of multicast notifications for a given group observation, without having first performed a new rough counting of active clients. Note that, when using the method defined in <xref target="sec-rough-counting"/> with unprotected communications, an adversary can craft and inject multiple new observation requests including the Multicast-Response-Feedback-Divider Option, hence inducing the server to overestimate the number of still interested clients, and thus to inappropriately continue the group observation.</t>
      </section>
      <section anchor="protected-communications">
        <name>Protected Communications</name>
        <t>If multicast notifications for an observed resource are protected using Group OSCORE as per <xref target="sec-secured-notifications"/>, it is ensured that those are securely bound to the phantom registration request that started the group observation of that resource. Furthermore, the following applies.</t>
        <ul spacing="normal">
          <li>
            <t>The original registration requests and related unicast (notification) responses <bcp14>MUST</bcp14> also be 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</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>Scheme ID: This field contains the value used as 'scheme-id' to identify a CRI scheme, per <xref section="5.1.1" sectionFormat="of" target="I-D.ietf-core-href"/>. The value is a negative integer and <bcp14>MUST</bcp14> be unique.  </t>
            <t>
As a pre-condition for registering a value ID, it is <bcp14>REQUIRED</bcp14> that the "CRI Scheme Numbers" registry defined in <xref section="11.1" sectionFormat="of" target="I-D.ietf-core-href"/> includes an entry where the value in the column "CRI scheme number" is (-1 - ID).</t>
          </li>
          <li>
            <t>URI Scheme Name: This field contains a text string. Its value is the name of the URI scheme that corresponds to the CRI scheme identified by the value of the "Scheme ID" field in the present entry.  </t>
            <t>
Given the value ID of the "Scheme ID" field in the present entry, then the value of the "URI Scheme Name" field <bcp14>MUST</bcp14> be the same as in the column "URI scheme name" of the entry of the "CRI Scheme Numbers" registry where the value in the column "CRI scheme number" is (-1 - ID).</t>
          </li>
          <li>
            <t>Transport Information Details: This field contains a lists of text strings. Each text string is the name of an element that provides transport-specific information related to a pertinent CoAP request. Optional elements are prepended by '?', and <bcp14>MUST</bcp14> be specified next to each other as last ones.</t>
          </li>
          <li>
            <t>Reference: This contains a pointer to the public specification for the item.</t>
          </li>
        </ul>
        <t>This registry has been initially populated by the entry in <xref target="_table-transport-information"/>.</t>
      </section>
      <section anchor="iana-target-attributes">
        <name>Target Attributes Registry</name>
        <t>IANA is asked to register the following entry in the "Target Attributes" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <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. Documents published via Standards Action can also register points outside the Standards Action range. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.ietf-core-groupcomm-bis">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Chonggang Wang" initials="C." surname="Wang">
              <organization>InterDigital</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="24" month="April" year="2024"/>
            <abstract>
              <t>   This document specifies the use of the Constrained Application
   Protocol (CoAP) for group communication, including the use of UDP/IP
   multicast as the default underlying data transport.  Both unsecured
   and secured CoAP group communication are specified.  Security is
   achieved by use of the Group Object Security for Constrained RESTful
   Environments (Group OSCORE) protocol.  The target application area of
   this specification is any group communication use cases that involve
   resource-constrained devices or networks that support CoAP.  This
   document replaces and obsoletes RFC 7390, while it updates RFC 7252
   and RFC 7641.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-23"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for OSCORE Groups in ACE</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="6" month="March" year="2023"/>
            <abstract>
              <t>   This document defines an application profile of the ACE framework for
   Authentication and Authorization, to request and provision keying
   material in group communication scenarios that are based on CoAP and
   are secured with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  This application profile delegates the
   authentication and authorization of Clients, that join an OSCORE
   group through a Resource Server acting as Group Manager for that
   group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication and proof-of-possession for a key owned by the Client
   and bound to an OAuth 2.0 Access Token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-16"/>
        </reference>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="24" month="July" year="2024"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) instead of in a
   sequence of characters.  This simplifies parsing, comparison, and
   reference resolution in environments with severe limitations on
   processing power, code size, and memory size.

   This RFC updates RFC 7595 to add a note on how the URI Schemes
   registry RFC 7595 describes 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 –16 of this draft continues -15 by picking up
   // more comments; it was made specifically for IETF 120.  This
   // revision still contains open issues and is intended to serve as a
   // snapshot.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-16"/>
        </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>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-core-coap-pubsub">
          <front>
            <title>A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Jaime Jimenez" initials="J." surname="Jimenez">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>Dogtiger Labs</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="18" month="April" year="2024"/>
            <abstract>
              <t>   This document describes a publish-subscribe architecture for the
   Constrained Application Protocol (CoAP), extending the capabilities
   of CoAP communications for supporting endpoints with long breaks in
   connectivity and/or up-time.  CoAP clients publish on and subscribe
   to a topic via a corresponding topic resource at a CoAP server acting
   as broker.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-14"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-discovery">
          <front>
            <title>Discovery of OSCORE Groups with the CoRE Resource Directory</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
         </author>
            <date day="4" month="September" year="2024"/>
            <abstract>
              <t>   Group communication over the Constrained Application Protocol (CoAP)
   can be secured by means of Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  At deployment time, devices may
   not know the exact security groups to join, the respective Group
   Manager, or other information required to perform the joining
   process.  This document describes how a CoAP endpoint can use
   descriptions and links of resources registered at the CoRE Resource
   Directory to discover security groups and to acquire information for
   joining them through the respective Group Manager.  A given security
   group may protect multiple application groups, which are separately
   announced in the Resource Directory as sets of endpoints sharing a
   pool of resources.  This approach is consistent with, but not limited
   to, the joining of security groups based on the ACE framework for
   Authentication and Authorization in constrained environments.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-oscore-discovery-16"/>
        </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="8" month="July" year="2024"/>
            <abstract>
              <t>   Group communication with the Constrained Application Protocol (CoAP)
   can be secured end-to-end using Group Object Security for Constrained
   RESTful Environments (Group OSCORE), also across untrusted
   intermediary proxies.  However, this sidesteps the proxies' abilities
   to cache responses from the origin server(s).  This specification
   restores cacheability of protected responses at proxies, by
   introducing consensus requests which any client in a group can send
   to one server or multiple servers in the same group.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cbor-encoded-cert-11"/>
        </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="8" month="July" year="2024"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) can be
   used to protect CoAP messages end-to-end between two endpoints at the
   application layer, also in the presence of intermediaries such as
   proxies.  This document defines how to use OSCORE for protecting CoAP
   messages also between an origin application endpoint and an
   intermediary, or between two intermediaries.  Also, it defines rules
   to escalate the protection of a CoAP option, in order to encrypt and
   integrity-protect it whenever possible.  Finally, it defines how to
   secure a CoAP message by applying multiple, nested OSCORE
   protections, e.g., both end-to-end between origin application
   endpoints, 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-02"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC6690">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links. Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type. "RESTful" refers to the Representational State Transfer (REST) architecture. A well-known URI is defined as a default entry point for requesting the links hosted by a server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC9176">
          <front>
            <title>Constrained RESTful Environments (CoRE) Resource Directory</title>
            <author fullname="C. Amsüss" initials="C." role="editor" surname="Amsüss"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="M. Koster" initials="M." surname="Koster"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>In many Internet of Things (IoT) applications, direct discovery of resources is not practical due to sleeping nodes or networks where multicast traffic is inefficient. These problems can be solved by employing an entity called a Resource Directory (RD), which contains information about resources held on other servers, allowing lookups to be performed for those resources. The input to an RD is composed of links, and the output is composed of links constructed from the information stored in the RD. This document specifies the web interfaces that an RD supports for web servers to discover the RD and to register, maintain, look up, and remove information on resources. Furthermore, new target attributes useful in conjunction with an RD are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9176"/>
          <seriesInfo name="DOI" value="10.17487/RFC9176"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="MOBICOM99" target="https://people.eecs.berkeley.edu/~culler/cs294-f03/papers/bcast-storm.pdf">
          <front>
            <title>The Broadcast Storm Problem in a Mobile Ad Hoc Network</title>
            <author initials="S." surname="Ni" fullname="Sze-Yao Ni">
              <organization/>
            </author>
            <author initials="Y." surname="Tseng" fullname="Yu-Chee Tseng">
              <organization/>
            </author>
            <author initials="Y." surname="Chen" fullname="Yuh-Shyan Chen">
              <organization/>
            </author>
            <author initials="J." surname="Sheu" fullname="Jang-Ping Sheu">
              <organization/>
            </author>
            <date year="1999" month="August"/>
          </front>
          <seriesInfo name="Proceedings of the 5th annual ACM/IEEE international conference on Mobile computing and networking" value=""/>
        </reference>
      </references>
    </references>
    <section anchor="appendix-different-sources">
      <name>Different Sources for Group Observation Data</name>
      <t>While the clients usually receive the phantom registration request and other information related to the group observation through an informative response (see <xref target="ssec-server-side-informative"/>), the server can make the same data available through different means, such as the following ones.</t>
      <t>In such a case, the server has to first start the group observation (see <xref target="ssec-server-side-request"/>), before making the corresponding data available.</t>
      <t>A client that receives such information from different sources may be able to simply set up the right multicast address and start receiving multicast notifications for the group observation. In such a case, the client does not need to perform additional setup traffic, e.g., in order to configure a proxy for listening to multicast notifications on its behalf (see <xref target="intermediaries"/> and <xref target="intermediaries-e2e-security"/>). Consequently, the server will not receive an observation request due to that client, will not follow-up with a corresponding informative response, and thus its observer counter (see <xref target="sec-server-side"/>) is not incremented to reflect the presence of the new client.</t>
      <section anchor="topic-discovery-in-publish-subscribe-settings">
        <name>Topic Discovery in Publish-Subscribe Settings</name>
        <t>In a Publish-Subscribe scenario <xref target="I-D.ietf-core-coap-pubsub"/>, a group observation can be discovered along with topic metadata.</t>
        <t>To this end, together with topic metadata, the server has to publish the same information associated with the group observation that would be conveyed in the informative response returned to observer clients (see <xref target="ssec-server-side-informative"/>).</t>
        <t>This information especially includes the phantom observation request associated with the group observation, as well as the addressing information of the server and the addressing information where multicast notifications are sent to.</t>
        <t><xref target="discovery-pub-sub"/> provides an example where a group observation is discovered. The example assumes a CoRAL namespace <xref target="I-D.ietf-core-coral"/>, that contains properties analogous to those in the content-format application/informative-response+cbor.</t>
        <t>Note that the information about the transport protocol used for the group observation is not expressed through a dedicated element equivalent to 'tp_id' of the informative response (see <xref target="sssec-transport-specific-encoding"/>). Instead, it is expressed through the scheme component of the two URIs specified as 'tp_info_srv' and 'tp_info_cli', where the former specifies the addressing information of the server (like 'tpi_server' in <xref target="ssssec-udp-transport-specific"/>), while the latter specifies the addressing information where multicast notifications are sent to (like 'tpi_client' in <xref target="ssssec-udp-transport-specific"/>).</t>
        <figure anchor="discovery-pub-sub">
          <name>Group Observation Discovery in a Pub-Sub Scenario</name>
          <artwork><![CDATA[
Request:

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

Response:

    2.05 Content
    Content-Format: application/coral+cbor

    rdf:type [ = <http://example.org/pubsub/topic-list>,
           topic [ = </ps/topics/1234>,
               tp_info_srv <coap://[2001:db8::1]>,
               tp_info_token "7b"^^xsd::hexBinary,
               tp_info_cli <coap://[ff35:30:2001:db8::123]>,
               ph_req "0160.."^^xsd::hexBinary,
               last_notif "256105.."^^xsd::hexBinary,
           ]
    ]
]]></artwork>
        </figure>
        <t>With this information from the topic discovery step, the client can already set up its multicast address and start receiving multicast notifications for the group observation in question. Clients that are not directly able to listen to multicast notifications can instead rely on a proxy to do so on their behalf (see <xref target="intermediaries"/> and <xref target="intermediaries-e2e-security"/>).</t>
        <t>In heavily asymmetric networks like municipal notification services, discovery and notifications do not necessarily need to use the same network link. For example, a departure monitor could use its (costly and usually-off) cellular uplink to discover the topics it needs to update its display to, and then listen on a LoRA-WAN interface for receiving the actual multicast notifications.</t>
      </section>
      <section anchor="introspection-at-the-multicast-notification-sender">
        <name>Introspection at the Multicast Notification Sender</name>
        <t>For network debugging purposes, it can be useful to query a server that sends multicast responses as matching a phantom registration request.</t>
        <t>Such an interface is left for other documents to specify on demand. As an example, a possible interface can be as follows, and 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/.../',
  / last_notif / 2 : h'256105/.../'
}
]]></artwork>
        </figure>
        <t>For example, a network sniffer could offer sending such a request when unknown multicast notifications are seen in 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', 'sign_enc_alg', 'sign_alg', and 'sign_params'. These elements <bcp14>MUST</bcp14> be included.      </t>
              <t>
Editor's note: as per the text above, the referred version of <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> still uses 'sign_enc_alg' as parameter name. The next version of <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> will be updated in order to use 'gp_enc_alg' instead, consistently with the naming used in the latest version of <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
            </li>
            <li>
              <t>'hkdf' and 'salt'. These elements <bcp14>MAY</bcp14> be included.</t>
            </li>
          </ul>
          <t>
The 'group_senderId' element of the Group_OSCORE_Input_Material object <bcp14>MUST NOT</bcp14> be included.  </t>
          <t>
Note that no information is provided as related to the AEAD Algorithm, or to the Pairwise Key Agreement Algorithm and its parameters. In fact, the clients and the server will never use the pairwise mode of Group OSCORE as per <xref section="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 binary representation of the server's authentication credential used in the OSCORE group. In particular, the original binary representation complies with the format specified by the 'cred_fmt' element of 'gp_material'.</t>
        </li>
        <li>
          <t>'srv_identifier': this element is encoded as a CBOR byte string, with value the Sender ID that the server has in the OSCORE group.</t>
        </li>
        <li>
          <t>'exi': this element has as value the residual lifetime of the keying material of the OSCORE group specified in the 'gp_material' parameter, encoded as a CBOR unsigned integer.  </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 unsigned integer.  </t>
          <t>
The value represents the number of seconds from 1970-01-01T00:00:00Z UTC until the specified UTC date/time, ignoring leap seconds, analogous to what is specified for NumericDate in <xref section="2" sectionFormat="of" target="RFC7519"/>.</t>
        </li>
      </ul>
      <t>If a client has a reliable way to synchronize its internal clock with UTC and the 'exp' parameter is present in the informative response, then the client <bcp14>MUST</bcp14> use the 'exp' parameter value as expiration time for the group keying material.</t>
      <t>Note that the informative response does not require to include an explicit proof-of-possession (PoP) of the server's private key. Although the server is also acting as Group Manager and a PoP evidence of the Group Manager's private key is included in a full-fledged Join Response (see <xref section="6.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>), such proof-of-possession will be achieved through every multicast notification that the server sends, as protected with the group mode of Group OSCORE and including a signature computed with its private key.</t>
      <t>A client receiving an informative response uses the information above to set up the Group OSCORE Security Context, as described in <xref section="2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. Note that the client does not obtain a Sender ID of its own, hence it installs the Security Context like a "silent server" would, i.e., without Sender Context. From then on, the client uses the received keying material to process the incoming multicast notifications from the server.</t>
      <t>Since the server is also acting as Group Manager, the authentication credential of the server provided in the 'srv_cred' element of the informative response is also used in the 'gm_cred' element of the external_aad for encrypting and signing the phantom request and multicast notifications (see <xref section="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 abovementioned parameters 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="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <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="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:
H4sIAAAAAAAAA+y96XrbWJYg+F9PgZG/aUmZJLXYctiKJUshKSLUactKSa7I
mMwoN0iCEtIkwAZAy8qw61nmKebX/Jp+sTnrXYALkJIdVVHZqapISyRwl3PP
PfvS7/fX3h1Ej9fWqrSaJgfRq2GZFO+S6Cyv0kk6iqs0z8ooLqOj/PA8ermY
VvBhWUUXSTmHb5JyLR4Oi+SdfdM+442xNs5HWTyDKcZFPKn6aVJN+qO8SPo5
v9if6Yv9zH2xP42rpKzW1tYeRWUVZ+M38TTPYJyqWCRra+m8oF/Lam9n5/nO
3lpcJPFB9OPp1drt9QEs++Ik+jEv3qbZdfR9kS/ma29vD6LTrEqKLKn6x7iY
NZjqAAYfr5WL4SwtS5i3upvDHKcnV9+tLeZjXMJB9MXe/l4v+uLpk921tVE+
hiEPogVs49naWryobvLiYC2in778G0VpBu+9HERX6TQfxeZjhsTLuBjl9a/y
Aka9OL08iQ6/NR+WVZEksMbTMp78LS/G5XUMoIj29swTo7S6O4j+mAKI7Gf5
GGa5POnvPn3yZCe6rPLR25t8OnMeWGRVAe9d3ibjJDOfJ7M4nR5EM1zfoKL1
/UuRDsokvL+LQfTD//p/rqeLbFzb4UX6Ni7GzW9/Q5ssaImDm5xW2LXNo0F0
OCv/1/9blrVdHt0UsKQU1lr/HvfZ2N8P+XQKeAx/DqLdve0nte39a5pkWX1/
uzt7O80dHQLaF2lc39JI1/Mv8axcJGU5GOWz8J6+G0TncJ9mwzRLa7v6roiz
UVKO4sATdH4nRToqyzwLneFVXpQ38SzTM3z8q57hRJc6mOtS/yWR1dHe17K8
mAE9eZfgcZz2jweW/lwjVYCHZv1hWja/zkv/Ke+JeJT03yZ3zhj8eHOYmyKZ
4KcX3x09ef7kifz69NnjZ/LrF7t7O/or0Bn9FYiN/vr86Rfy67OdZ/v66+7e
U/1175kO9uzp7o799bH++vzJc/n1+d4OfXr06vJkcDi9zou0upmVjKw+MaOz
Pj08O6S/kRQCwOOp3BLhGzhOZMfhr+LiGnHhpqrm5cH29u3t7QCQMh7AiNsx
UNnrbJZkVbk9ysuE/mfw/qaaTR/F7ji0wj8md4MroMifuEAYJqJhPm19eOLI
H3R1PyTxOCkG53EBFwcYyyeukoeL7HCfttobGq4/t8Otpdmk/T6M8njeny+G
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
SYQdrQpWRuZYEe2ZTjASx4dKgj8LPxTHw8R/JmyNCemVctMcb6o55ILvyQae
WEFrVRN4uKhE+yiXB7PdmAgHmh1D0eo4MmVwpsiS6wHlLvhucJBGi2HSJsxv
1cwh+lnbVnm8GDFOfHpKj0EA3JTJS2G4kNEYt9y5ElFjtx633bdwdJYoC+R8
nLpeayHIicRMUofOvRDIhMwaG374/fvSITFlEOLKUTyL/TLpqO6i8A/Ew0i8
unptY/UXX+o774EIo5qwMUIowBjlItN6wKC8PI8xUbx6RDRhNUYkXFUxXvRC
th8NsQ/XOZXCIDPnnn/xZLpQxxQctMFPSuetBT/bCUEvD5/vcIGLVi3w1R93
9/qvD3ePj/Ze7uJTO7vPt17/eHTMH5A7AMWfgG5WpN5Qfa2pPYoJqKAUZvFw
GE1WVpLFHPtF5VMr8MrDrf2d45d7+8od7D6x/rL1Z/WXZu/ff1oN2sE6fbKn
/qSc6GEy5kzXpjzd0k+tPlHtKqNcfVe1uBq8x06ejpIQKGKpKlY38xz+3Oy2
gnV4DL4IVWJqWdQ3IEqLvzXVZ/DRvKPcmq3JsA++S1O39Y0za/xdFMzmH+ad
ON29mMLNaXNVXnGoy/L/k1/Df5EXqbnbowQbuEMDQKxX+2hhoSYahxfxeDGW
b+4nuhQH3C6MEbfQAROuGqXi6cXC4TqV4dEfmq++7+8e/ixdVx/DQJtd/l11
E37n76pPZRy5dkCqlm2EPpgMm/3Dn4+3dnYOWwH8dPDq8Eh9xT2XsnujjS+m
ffsz79u6+8XRBl/i3sH+OwCtweu9/aPj7/eO1Kpsv9g6xB+/wevS5LRpf1P2
CN+JKCujqbaZ2i/z2SK63TJf+JZZOUmSUWCtLQqyLCsdmc2fgmffaYGRz1CU
QS7UzDVXgz+gAqWrk+A0HKXRE/21n4K2eZ7+/AH/35HIMZQjfRf8d7P5393F
avD0qerHE//X1I/f0ff/JaD3yzTg6+UreErk1QKbmzWPTD6ai7f99qvX+0e4
ibcJsCJ3Iehs/Ze036MUc3TsdAYCMUShcp/Y+vPx9qv953uHL7eO9l7tH/+y
tXdkdIIWT9sSxZe89Bq8VEIwGRotAS/Z3/3lGEcCD77GoMowPxA6hnfU7D94
gsNQxjlkxJG3Tify7tHhr8f7u38+Oj56cbjbf/HqR/r+CimJ7a397d0fnc+6
nd4Tankf1/WiyXMKagMFkv88iOJRc5Sc9Zr7yjd5ubraCmAHFG083jCyWUCc
VuyZyG2Zp2iwgVZAP8CeNK6bf5ZtQAnfD4cHvLXgJ95aKwWaztVy3qVdxanF
EvT5+kqRqtNf6bFtBDFyI052Lh1a8i7IkTlRNE+gplJdp+hZT9h6GeLLPJI5
2UhvUrym+4xXcld151Apb7TKqLs7DLWmdC4y3ug8oQLHDJ4hf+xiThIo0T7J
DtK4i3hCNQ/ZjPvHP4ImiMvumrL19td2V4NnXrFcFV32dN/zCr5uxbf7e/hM
KZdIabriVmig692iIUILMEwgzl0IFCLc+GMjgpC4otXM8cGhOgRhpRkcx83d
z+7XZ7R9zN7+zmnmnpqzXWUZ7a+q3bSTWyXlPGMYEDJBAPh05I+u49ybVzzN
7XA9y9slrTxzNDjq7RX+Rbf9JKPKxXGmAEMfQOZfEsi8JJizqgeItyIEegoz
YO6OfcLTbd4E0YTaQD0wgWap2ygb6SKeM+IsFjGcx9PUSV7MZVad6BtYQc/l
qw/YZtQ3fMQOB5DLjaBGCCxUkAqUz7HSJFuU+wDDY8BYCxkWODjyr8SgiSHc
1mJVADiZWOPkhExACAJ0G2cKnKQHetMbQlzSPA02eqR9sVSWrVE7IWPLLt1W
vTbwUJkAhZOzw4RTUnZb1hMhW3NqvkwyHKV3gmRB2IgomyyGnpSLNq3OlFcQ
QqZpw2K5aGxypg2nBcQ2og6GPzCrjRdBJ7KymEyEJtpQlJo8NgeX0IZGh9IY
sn6PBLiJmAgggSeUqqkQE9UjnRSAzR1Tc8d7YEodvxQRSE4AmVZ3N/XXjT3s
3HfKxsJB1FbCZEGka/poZhHUFJRlr81CMOXiV6bcvKcLzh/3uvdxOdQseJjo
rfISi9ah3jRwcjnRs7YskGC8g/OIkL6BLVgrHwoGc05faXbZ82kHjXHaaAUN
TKK52Bviz0xYAz8jsQtTzujf6WfM/rCIXxpSyq6nS2qbZCI0OyoDkzUwWQbA
Y1JNYoeDteDesHp2ZsXsNCN3lfwQHjGSDLrDwNdpgSf6rCMxGJZ+jU54ZtPb
3olwb9ownD0NuXZuUXI8XHCCYjcmSzjWOemx0J9D1UBBt4oxRXlxgceI83TS
cDT3LNHWr/kVgsloYHvHdH2m5MJmtqu5BzQzau4FJvdqkrjnhcUYF6bZVGrk
wdyS0GqLkQnhk4Mwnr2L1cCAfmzrbBZRX/V3ySCeW+ueuqzoBvGcs+ucTFXg
GdbX6FN515jj7X7waNmT3+bLZH3sDhTG4NRWubkfsHUJua3QVUARjE/VedR+
EY1GyvII0vMQNoc6/WbC363m0LmXABQLAz8XctrRN0LQAZDayUTrGXt5i5QR
A3PqLeSui2Fi11+oXh7O5oCzhu0Cmb+ev3I6P4eciuE8163z4GqHZ2Tb2pSM
X+CwQsOlCk9JA06mmTJJjsOQysAF5kTjtJVQNnsXqpUd+f3Og1rdp+XQW7qh
NM1xGEG3cOPDryKzx0qJHYeyAC4tkbkuahBllyFAl3JoOLfY4CYD4e+TxWj0
96DZvTh9SEW8DWHaKrZqLGaslu2CosUqKOUnmCEFBinVPnsSBdXxYRGNYIaz
em9EVXW2Ds1sh/xRX/FW2IaY9aAVNeea5mnS9dnpMIHaxp6ZJQO155mrPLxi
2bRRrgqUkvtIqnzTgL2ILuLsqx37jw5gZU9DYs0oPo3msamfz/oA/GfHI3Hw
LXGC7KkwGqLlGW+Wlgx3KRxN1De9Ruly3UTwWcBLSIU/d+5UJ/GHJqpyrgFt
A2zXnV/NUQwfCXFm7qURBoDUmfN6mtgUM4UuSQZHE1fKni5DxSxeP00Dvoij
hSWTAKy1Q63X8oPPr5vbASytA/Bda2IMF4gleiEmDKG7zfTK6eVkcD5LJhCs
i7F+khQpVFoO3pBgvz7atlAOsm4oVsZ5XLRNlulppUzXnKXPK9H5VUEnYf3x
o267u67+d9TtbuL//g0mLICwN8VoTB/h72CWrsEwlbyfTRJEQxhFyiXW28DJ
rRfv2jQCV9j7i7Ea4WAHU/Zsl6Mn6F0b648pJeDUCOe1JEBvLVxSS/bQSIyE
KqloC1kCxL1Be1SsuGyj7PCmOdlwk1MzIlJcR+Ags0pNF1f4Mi44SDPl4VGI
ByyG5LSt/gfpeJCoDuVzB8nBau7cm3Ihs+pOR5lRwGwj+fyazYKw5TR5O9kf
FGYjtRUGqu0gAmvbqltyvue+KjAM98wuAGTE7VNkKBoGf4Sg1GEmvLO8a7rK
RYm+2RBni9mrTClDhElJ/mBt7kzETEz0njM2mllnv21vR9UhOIL1/5Auy4Y6
N4OOhrVCVr2ixS5WUP2JDqsjSlSS8jZaJrbDGTyCn57fspU+ZIZROlueyDRc
oWV6QMonBEneGRKhOXq84WiUspmSiWpg3nMY3EljzP6j9blDoU85noW4iV8k
wavgOYdMJlhmbPVRz6C+Ickqdstcp5lWYy5NUM+Q1Kys9JHnrP6Gow4Wm6tu
BYyNaoXKShvVWTfcK0LSF9sGbpyN/S3YjgwhXE4w9U1YfEDINZSjS5VB8e+C
ObuiMwOcbVlSI303kjfDXewLTXbET+gIhHWL4Bzn5O/zdLPMUMjBYzYWzjdR
TQn1HGeGB4jJh7PGJELGf8nMo4k6FE1m7KE040KIeI6prrmcvRxfauDMzNav
bl2Afc/iWjyZOwyfDJR1XegnwGmsGkPh+skKla1CgQVHi+IuOhXEJTODdRSa
DE/VCbTSLUOAl63g7gOWR0r7yjooPmLG8mjGp2LPrNo2j21vb/omJp0nUyu0
7LuTwe+V3QEKCk6MZDhqKXJyz8mjRbc11PiI8Z44BlP6LXPQK1/cUXsDxMJM
mYvPQ1pI1iSSWJAKm1lV4Jkgu73iFPJq52aQL3stI/9liHAbfYyndaofU8ee
nGUCD0h6f8/g6Dd/iIervpCvBafX69Q7lT09gp1cOI5wNNebyjaD68iOalgT
iXF03lkN26ZSL/neUBNlmzsXuzrD+wiXq0yDma+LoTmyPGK1/zc63ftBs08V
UcHrib6zXdUEPNhDJK4Q+kGPkSd+a9aczwaHKI+K1EWmAvkm2LoZkJIfzdO7
CHKFslRQA8RzF8faubBEGxG2hfo0svk+tAuDFxx+JWaQlJ7A4vPLQAQSYc81
vOUYVqSCBEtHpcL+ip0xdT2Z+H48Hi/mNiaJFFvbsiVBHA0cmpki3OF2udFR
/mgtAGyJLSPWcsJe8VU5pRV18nueS+CgHoEt0T6WGAwEDRH2/gHIjprOvZ+z
xyaReLhAFPJ6aFcqtwUKwGrJDd9JzpRAqFGDHQC0gdt/wDqTuwzl5b/1ZCYg
OHKCWUWm1N0DTmBtVD1jCLdEQ7NMpjGHquTFVEwxgfrRcGRFJ8lImYA4ODDs
Fo6Pw7C0rHpctS51kglkC7xD2od4zhC/ZqQ4EMt7sYOBVmhPEybC33dsyklO
UmZKs0iqC0jgsnaYLuJAXKzxCX6otRHIFuB35azCNHBYLs0nPD8VHJirOX12
kmhUqDFfaw0IX3COxa7GmbMA3GnCZEvqEs1Lao1WH9/i2kkmHsU48sBBRRBx
AEAGXjGWZSDL3YTUKGKqqMO/6FxioKB4LhHV/HFCWD5lNs9HsWUk8YFI4rSw
IaHZAllhXEpOqSTK1jQX0Yf7UoccChzaTDBbgJcFZG6Gvj7RBG/mb/AyAwVM
d9WwGlRFS6+DNCP0rthZbgpElg/VwvF3VwWWCPq+tb3rNoW8Bs5JWSdlwdbJ
sNRqnwN9k1g+MpUnl6ydWIjGHJTxInxkPR3opi92AkKgWtDZPEzfdsBb9lDD
vmSUhHzw/m75XqU8sGRsZ7JlJJvQVFhSRiTbiDYXUuWwvsHmmtxzUf7RBbAu
laHV0PLnYH7OKxk+tQZ3Cu9r0TJ6ydllDJx1x9DWhGVlKcySsVBWAGgnBvnS
cH02iSmaNIyIpgUYEdFEOZRgx7FeZaaWHDIa5e05q1BK6+yQelp2U9mCvQux
aj6NiOR9SHbSxJ1E7qAVMvTDNOQVZG20MPBdBXhBIzEggMIqLsQng1fIRGrF
a63Kv3QRv7xM36sGwtC9CCLYXiaoTiZQ6A5a3WcksIILx6lavZQhj9S2Rehk
0W/5Gy/MgAMUaPbcfDmfGioynhDNAvmXAysv2fg/JSJVgPZn09RbOUgVm1D2
L3L5WCCEDrMoufMpmIIQH1VePSTvAZA2p1AQToGkgsVFWiGxL3lSs/8HCCqH
UeqPst0LMoYIXcReCyd6lhulYRe1FXpB9qIYwdWStEBKaZYDJzBiFtRrXDKA
KOEnyT4SfDIyDkqPEo2zql9TpDzwMod4mBdodvq3qI0Bw16Oe4HuHUbu+ByM
CMgWX4VcTfqqk0iIiTFA3IdQpxUAxREjxmMDg/No8MZpXnUnOYPrTBcXTnud
40Tmf56QxEapJgkVOI0QEzyAeRYTPWDhlLZLzX4ztxQsOOqXRZo5pSV8LTnL
5NScGIpLQvccXW4G8Sr5LQtYaMA/xxDLkyB2PuBiuSfksMpng3iqNgOGvfTd
iHSLs6lz6QCZWdKXM97lg/kHZGi+U8LoNEF45wU36zflFal2XzWYpvJNnQPD
kJ4TAiYvT6LkImWsGcqMF9/W0YyWWy93sRReQF1DNymX/Cq9RBgR8KYj2XEH
fK9+aUHgO3STLXXHMMAqZy+mZANCtl0yVKjHbPJt5E5wyMptLvjCUBjeyc7R
NoWERjqOwRpRK6rWE/X/xJS+FDk6moKe4KTq2CUke2B88ILyHLSc4zTVqeV+
ERQGBSL6RnIRl3Lda7TkYVBfJO8inFF9tqgVxanzVjKUNmcB7GU6w8iDYZk6
lKVmsCgd/hLux3kZbbbWWI6Dq+FlNX14vmtNE1opOTp0CNeyfuj8zmVKFXoe
BfLQklJr02NMTbGAzFgmxUCFrIo0cRjoJfVAlwBBuLD0xhgzpJTARSYruPrw
Vm82sJu21mbbjMB/YwQpfzfxiww97YhOW4kFOq3utX5puDROEVYY2qbaB4vk
Qxs49qq0GG99QBFlbXL495eOrWEqjzqj7M3ZZFRjr/5aBVlcpDr2Zk4YCwe6
HEqqVay3wHE0Ue9cnLtu4VJgZ0LprpUqcafSKv9m8USs7Ky0elEs/Gutr/lo
pbmzsgjzOsPJoBJxTMsmb0SVnWKrkW1boJZIrZa68+ZqwAJqdvN5KmGbOQMN
8Xs1fjMmaxqU5pTPFzqM4ymd24XRN7EU5WrRPWgRmZCF1VW9y2GNI/IUJQK2
DKRiWs85P1GTpWsnCmz9F5GOvVRMsgcBG2L5ufmreT57Js2dMMrJtpI/Z5zf
7kXu5sLkEJ0CgmstklD7WG+ZO+XL0pmSE84Uo7j9SyYSyeBtRcD4/CUbrJ5Z
0DkahL1QKv+UOSDFbynWmqIsMeHEaV6Xj5xEFd0lYo93FGkmIEzVkeFigKUm
eGKdw13j3PSROo+P0MlnqQXN9Du6vIJEGSp4R7LMRWcLpcwZ63KbNbABj2nG
pejPE8Tj+DidZPNLL5Q3lUWRW3hZsFC+aA3CMIcYJdPLrHSxffkEpRpBsw83
UvyoyTFYlfJm9bEwmukEQCsNb15wWeXrk1xcSEhZJtiZTInjUTwNBcV/M2W8
vqL7MNDTRSXdH5zUNZoPN79aV0iUpWO52XrkGnGMjAxe3KD58k79YHVxm5QM
NbgWMlv1tWwlpmpJTahVbod37PAnZaiec8WlNyb0oF5MSCr/BA0UhnkNmRFn
EXpnoZ1J0NUOP/p3Rz490FR5lY9k1TZiW5RCWiVXreUKDT9yOeEnqPC7yfK+
ytlgRV5UvFe7CO/rqMC7VsUdktctUXCHFlTB+WNit2UBWyKsq5n+AWxW6Tx/
a23dV0PXgYkIEwIKT2SwPzgKwRcpRQeK5lU3+XNWAnA4sELO7BqbeLFFKGfC
rKOE4rmwJkPnMkHu1Y/gjD3V6cfmpDhPDM9XwbVZmAXscd59NSeIuMmwwkHf
BBXON/u+ud5tCjdL+XxToJe/CvCrVWEbbUJLoDw3oyZNE420eSoBRIgSXOda
JpMUq6VU7RjVl3ASJYsU0owWGABU+mw0ikYF66bNsczy0fByKNXGpy5lgZlQ
rdeEDXFn39QTf1Tl/ihHAWmSjCYrh/RS7Ldd0SDX+kWiWYerh14JuzA7edlI
PHhaMUGeYy5JaWS7ZaptNjP3HL5sBDfC6Ak+6lQA71j5oreZTCW/ku46GIHB
gQ+D3I9docYhiThAL+n9XX8sTtB8hZm0gGPH3JQfaP1dHavnzBjidk4XY8Y3
ZJIAWiKpBaEwiUQIJ4kdWwZNbiEFk7OChB9gTYhDZgdFz8lRw3jFweGfEU0N
30tRAJ0qa8Ux8HuAtQZ59hSVlQI4DNCwHmihQ6KPclz5cTyfmwvfd1BJp9lZ
kGoACBTCLEx8EIbp27OV7XVEHtnu4X8OBBKtv/IP+sH9j/qh8IMgaMJ8OwBe
epetoV97B4hO7qwWt32vbf17ZreNWa2bQffiQageB2B7Xw84XVV9DwA+KUO7
+HUBSWf79SzeJHz1zbU1NW1pMuvwEq/N7tSdiXtWt3VvN6Lc49j3K/VW9bP9
IknnqrNuL4v7SA8dhPNz9VD9sTir2geZSwZYgwCLajIX7FTj7sWjk5KVLW2f
r5wSfQXmOz5KmhCldvDi+HD3J9CifCcs+rzk2b0DT5BRIBCXGVAHV/9e7oO1
oif+WtjU33Ny9OjE1xMQpS9JjkwlS/6wVBpjraTX5Q1bcVBfhK3k4WKSnat2
qPYHT1lh3CvXF1jcgb+XEXGUDDEIAh/yGtF0FD/2Mrxob52BVJV86ekrDBRy
OsSzMlVL+Q+bwfvSrnoZQ0rHxv8Gs7jBKlywgTcFGhioIOq04bQiOmBTUFDr
txLgjv1b+dc9zBQn6XymfNgHG+obrw5gbyuH9rRU+Iv/HWz9+uOrrZ0yRfDh
StuNGwazqWGG0FD9rzzfr/K6I21W+W55ypW7VuTO9RGGenhR0QbrXE3vmJ6p
1tNAmVKM/wE9xCJLYY4ofcFT2+i5Z73AtXmQk8fTDa39Nx6s9254r9KCFvd9
pdPpqB/o/+U/hCBeNaH3Smy87rp53Db13PF+BhuvYPkJ0ONUCdg53xO5UEk1
xOtp8erbs2ELwZe8+kXz6fUeSh5ak0odNB/vbDx89O2dpXZz8+6q7wPf2eyx
wXA53HVYX7/hRcAxfSL1cf8T992Z7WsK/yfu+8oKiE5fO9mOH6Fk8YfDV6+1
AQE/knOf5ZqSkAMqEgg8UBxduKYkmmIwVywL1Q6xAL9UJofJSuga5RLFoLbF
pPwaozkTNAP/aZuR0zGFe4wxnDlcfDK9fWLdfFOZFilC3MqpMEdDGsDbOMEw
ALDtYezs5NK6VdgQyKSHD9bhasq6+8WRiK5PxUvEUkaoMMiAm58nXMwJEVOp
aMoAR1ipR/NET5C8wuI8KgxpwRucq5OiGJebqvgxA16tfKc8FR9FeTHKB4dM
R6g7t1+VAXQz83LV4BrM4tcYXhPMFPtujVfBM7U6BS4TsyyJ0UmQzkTpTJgu
yP7XUq++z5YP1nnf4MTrbGsuf/483z3afuHvSqlFV/AITqxyJt/EQzomngTT
+K06fuEnZYJ8KH++OgTif46MyT7SNLI9WfEEHz0D5Smlweu1vdwh5H8MHL/y
b+wSIFE0PBag9vflDwQ4T0FTWdSrraqvetek8iknSFT5bWdqdmtOTOnC5j67
Z4umJ8piNUIC+qUJ5K14fU7xqq9tC4PoFaPIhtiDTrlGrurFUqF2fyu1o+3+
x+sF3N1n0UvzDq7TdsPu1mdrJZPy17IJ+3teYxjfz+mYPtRuQmNssMbYUBqj
Srb5n3o0II6COeq1R+FJL7pVN1+JulFt9gVLs7Sd6l0/j6Zp0N8/3pDcI9tL
qBhZDp5yk1pSXruS1d719FH9K6EbV8g1L438z9e9N6rXMx3D8d8FWY1wxMlR
IKg17tezM/K3Or/9jV4Mb1a5KetcmZXo2MJ7s6tqg8rnYAIrv3RQd+bK79Mq
DpeaN2oVrdS+U6tsJ3urVjboHC88X61BAHGJF1r/fPdxy7Ug92b/CPp7P+xX
y27VFeGXNA4AEDpWpwiuyIPAXMWML394WWcn5v9B7QBqX2gD/lt9RENP0mhw
fDZlydiAnsjjVU9XaNYKz+GpGyq5Zz/qidT733Ellf/RVHmzD+G/nEKvPPvI
mvd8VjOcdPLxw0kbwRdgjC8fjOKC9iNvQftm9Xnyl+ufCTdxGuA5cD3D+jdk
3tz6MfJTjYh1rUyQgqEtmwxyrS6alJCKXlUkjCx7mtjPbW3/yX1uJX9XH8gP
K7WGfa9UNZvb2iCrom9MNfdYM/duI/1FD/wOdErdSL9vam840v+JBPJWvD6n
eLlq/gsIHvkWvTB49OA2eOR59DZ4dBs8ug0eff5x3AaP5KenZcEjx/h2g0hX
V/mfNXjkBIqC+l5I7+N7Ide9rL2NDnnn6TY6lD/Tv3JT++ajQxR66d1A6CWv
b0vDK2Wdv37opXjYpVUTBWMvr5yo3ZHm3YLUHK9X4k2jsb2SfBXF0vq491mP
tSvscBx/k52NJXb5X6LxdH5ZbdJ+Cm8iWy9xE3qg8Jqo5l0ayFrZXZq3eOQL
E7cCKwoj23o269lUFcalbVP5jMuvfTZT72xm2+CyIKsuiKsDWr7yAKdUwxQJ
rGBbtYowUP0uWYSU6Qq9raw/tbpSXth0xaqmXEELlDm9ngi4HXTABpyXCpoS
9GcmFGFLAbGRvlEu8jfMfOavlBJ8fMl8HUbDhQ4FmeIoLEjSeP7UkAZ+lmcT
4QLMwa278ODllUdeOqW0Xg0SYl5/PXVI+SKhDNQRVBQhMBJydBWhjdXkjhNc
0NjLki7wdgVE6RlI+xrwlEoI7gZbmQKrX8LRG0EIq73ibfW9WfKB6rZkiV1G
bZuRD9EfT0c0PqboFSqL6ILZ8ZbHWm/Ls1D4hcxdGXJPNeJ1Am7y0woVw+Et
MtxgnFjqkwgs1/aLQT1KImQswTJCyOlHsXKIOWI1NItYyFBwWGDV3gsANfye
w+g2Dt8UDcIQCLEsEKczIsUJz5zavouTdro4CU5m6iifXYHMrDbrlQOsncMb
q4dcd78TGA55z0Yu5XGwaG2AJT2ITlXnYiKWgHlEolg9a0iAlGaZlpjNqWNR
A6cZziQNEmcIShy2Rq6isw5ZfHEWC/dGWIsKKTqYtrYC5lLN+ANNN80HksYL
zLKUiTaWypGMzo/nFop7gXgvC9beCb4XnFP1cH8eTYOe4b7iOSBmOWIrEuqD
rOi8CxkDkSW87ChQk7KRnRQbrbLubCzSMvVzTdKUBRlB2MUwNZQYn4wuxUMX
XIsvRTOkZCaF0OktEHq1DA87ARt7cmO6/FhbgR6rZfNBvxnGk8vlbWuBschz
iwS9ULoUKTCrBNccSJyyRHuDEeh9Fl+G6IWM3LnhBUY5V7PyyDkgTB17rkHL
VoEFfRuzQhf9hZN5RVHgnZxMUxcPv6YcH2laxmuQhbUCQ7h68yxh9dmEAZ4Z
Sa8Rntka1BUItlZWvs0sLyGD+vi1vDDv9WhYlsYQzeF/ZlZoKZRQ5W8W8e04
RIkJ1d4LgzoRzsP3S5nOLAFnLmpSzmq971yXt8dLCJR53526VDgrK487wXN5
WDO/+TFfbSAM4hlLb5ZKDM7vZU7mPdlZHiHkI2EIuNJ5CbAHg3BJaEkz/zpp
R/U78DW73JgtsnDRwUIED3drYDgUg/LAvxrPEScCKWfAMoc3MOy1nNUF64fG
wjZANatxQaII+CTdjjrdTNSBVCd55ZNk0i4XyCUPLDM7DoRJkd3tUplYNKJz
5PtMxpHQdmWYaQz6NLpgRM0yiYSLxfSDiUZzdPf2F8U/PwMrOUxrDTTVpn75
/JGF5+ViWYZBLHskIzE6YtcgOrhMi3aMWHQJzsY/+xlGM/LXX/IZsyt+cn0n
XbvHnwRfZYsgygfhFPQh8WyL9if4HuRMOHpnMLq317EP2z0NlgOCwCqGAM81
iAig4Itc9MUYscFb5JK4CrxF7pCVO2A4oS2mkgu5yUoGatjIaqG3wUyS80TO
7R7anaJLNEI9yWKoS918xRYsLW3PMlfprPPqqIDRXEiIhKENP81rdueojhE9
q0WLjYPrk1U4jrArbCU5IRfcBg0raaERfKfLWmDjkSGzt9MRUg2XNKKPswoN
0IPdDXhIk6vQqLGQ+DvIorA+7KMxpVZoHyfKjfFtytLcCBYQNeXOYQmtdGZE
jz8tmlBVeP7rwBSquKH5enA0rgukUa5uOlUTkgEBcFwRUKNgQlS0IXSLQ+b4
8BMILDvPvxFIj6vmXd1EdtljKT/sBteqPgzwOvU23cn66XOnO1Vqlo+HiMEK
OhucIK8NfUfSRHVUBzfCFyGswfRlyGRY0QRdazjxeLAW4fKR6Ks4iv6x0D/U
8UcBfd13tMFQqcdoNh1c/dU3g4r3+9E/t6V2pU/95jTW1UD1fj/yfCudv6Xz
1LpZYFUvtwb2nUFFx60bBYxwpfPMZUSrxqGXvonhuqT4DuB6Lsl0Fqk+sl90
Z5SNUlSVqOjgreSonESj5N01uoSFRk3MFZTk1po7fb2ivrAUriNYqpLxfrf7
BRUzeqb05vOFC/D/r7A3bw7A7jdUbpvpGVvPqXN3LXcSFVNddZnn71mGssB8
Vh9FjjmF4C/XKXKtpBWq2HwVO696C9WuZf0dVrJ66j+fYvhfWTVvo8uq2E72
39UOlew/fcjwYTWkbJ6PaAAcgEs5Cwdz19PL3HRWDKMk6w13Ou62ijYw6qic
3NziX0f/WKO73qnfKriJrXjcuqfdXr8yZs0yCGhevpuPbib0Hj/euDUTnAc+
h5nwsYrotns3FA66HjzS1+Ai19lWtwGf0qd+4y71AQV/scSW0x/o8Kh5kF0P
xODz6P/1b2/dxK9Y/xfeW1dMwtdbRF1re/zuZP5LLaUu+mKlpl9Mh3gZqTPc
AjWxs8uKoXAGHWWQa1fkk7sH1yhD/rzifwN1yFkVcgOn7e95OovKurENK4z3
xZVkY9apzha8bnl2yyonOeB8qEO7es9btwxF3XeDnWSwgAhv8Jp1zt3g/V1I
bB3yB21WRh/UYGbRWM1uPJmdDj5gzu3PVLcXtJUjo2a5vd4N7koD3cfq1w+Q
7Pc8voiGuuiZ0gGxFmAWnUYzCEfJy1JMDjyM3saQOuuk/U8TyPSLUskQ3Nva
39Ip3pwdDw9vj8KZFSiCuYqG8TyZxeEoiMdQexvJq5wRfIsjUAMxI/hW/frB
7lGD45mNIBylCdJ5plGwfbiXUrhbahvsegZK/OTBKwtnPlsMlOhjDYjqD2Ry
oz0P8sHVbnRRhlF2TAw7tQqvTWdgaLNomqSYoQllCEATox4vTU6lNmBJ9FSy
hHJULVtvfM1pfUTT+q01rY/Ur5ZgQBe2d3Z+pCswHEzQSGdvjyG5roGE5zLt
2JVdTK2Fl6lvUkJuOLefGIQTqpCjuVYjH8YzWgCdfAplDOGlbH6+lSiKNsap
pLzb247mBSQQwpmQgwrCQEnSsPbBIp7M9TVIvjav/TyKhhDHa+/EUA8+41q9
jpkakG/OQof+kQqRgilW1DBBuZo5X13fN8FBkqYxZP1AR9nmplY4OLA9iwPV
XztS0KZ0YN9baDUusIQ3GmJFBpa2p7wukt0+DWfqKCASWcj9H522x+FEydjQ
yfMlQXtNXWtEF3EDJw+HC/cz0cU0ZmUwj8dRjbb2SC6t5P2sxMOiZ+WdtoGZ
tSuL/kMS/UeW6D9Uv6Lobw2hUAcLptV2DeMRbnzRASjRw4SKZ6kI/ypC5H8J
eVqjODyJR0Awlbg1t47uqWhmMck0pHWWVfHSIkyLgtpyigBCMisoQSqm5+L0
gIiLw4ksbVHhsNGJWtSCSTiW/mtlV3Rm7NZazg1azofWcm6oXz9YMgKHVpHu
dpE9GJoDpTTfq0337IMVCmdnaueF8/ksPlnMo+DO2bSdnKR36vf/AfV/w+r/
A/Ur9n/PX8BdPftY2aMEA70OnP7RKBp5Ln1hK8tMoHiP4AaDhTu/z2g3RO0B
VISdLVxyaHu+qdBiujgZ6SdPs+OoJwWkciMb/GXqtbeWkJn7NOcPrDm/r361
VECIW0WMIxo1dFtp0Tmfvd4vvoXimggrcWwYhLdqXkI9S/pwUjNBGwJ1q5pJ
PipV7/C38ySde45aejOsA3ZJkgFgLWneuSpSzULBrMvGdKa15rNmkRdwVUZr
FY4I5CEy5rKn0r9YU9Rbtx6t231r3XrqV1y3HWh0Qsugi0AWahtg0Sr+eaDk
FX5Vb0EXA6UzeBNdWoJmZ/6f+gs6uU5X6jBRgfgAfjrcrcEihblOB2qxZ3Gi
TzJnG3HJwhoeKtA7q0gjOw3rNA09axrW1a8fPMdiMvGfIPgKxx1THtA00oZY
g3CfG5bqhlOBK5rlwPZNDzaxr/aEebIBVPRw+X58giVrDW1+FTYAx+U4/i92
s2CGZ5FaKI33UWRhiFlPJI2uOoHJWEywGhAOzoJaXrTIHPvTgwcghlxoGSSH
z7e/Xe89DEjEk1Fydnn9061LS71uLXVX/YpL3QcUBdqJyrYeRKNRaHfZU9oM
ggcVtAuUb1Om4zxub8utUXw2cQ7wNFLTrmaDpRjdZvae8YWDZDxG4QJUabVi
5q/8Na/xdgK9KlxUCiyQBerHPKJzDGJymD5vHQggiZGLHMZlvC4cFfS43EUr
8dDKjc9gawDwGqNoeEaKGpYypL8NI/wbuPHsgkfD7+5Mkjtc9AoaLFEWOlYH
IwiNOqUnb4L3799vhzM4RILvYQdNJh+giFj9+U+jcJEGL8LZ/E0kf/tjCJb5
H+PxP/93Ev2X/mtyDh5GtPjn/wQvlQmTpoluRX03UJ5GGA7lLz8uhu/iM7W3
4jm1AINWf//hn/+n/Gv191EIBYvqI9ndMaSkjccaFO2UbeIODe1dMntDFiuW
U3PAA6oKT0B3A6AQ4OeQKWKAt/rvQIk30mBPuZNsxWydRZPBZfDz3v7+q5+3
dPBnO4It3t4HB1wtyX9EkBqyfbh3tNff3abS3V8PDnf7/Sf4C7/gRa/b68r3
g/7e871++wU4TM0f1ECVcj6bRbi4weON3sON3mpn5f8BehzWvDLnAgA=

-->

</rfc>
