<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-multicast-notifications-proxy-03" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Proxies for Observe Multicast Notifications">Using Proxies for Observe Notifications as CoAP Multicast Responses</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-multicast-notifications-proxy-03"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>164 40</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>164 40</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>164 40</code>
          <country>Sweden</country>
        </postal>
        <email>francesca.palombini@ericsson.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>WIT</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 80?>

<t>The Constrained Application Protocol (CoAP) allows clients to "observe" resources at a server and to receive notifications as unicast responses upon changes of the resource state. Instead of sending a distinct unicast notification to each different client, a server can alternatively send a single notification as a response message over multicast, to all the clients observing the same target resource. When doing so, the security protocol Group Object Security for Constrained RESTful Environments (Group OSCORE) can be used to protect multicast notifications end-to-end between the server and the observer clients. This document describes how multicast notifications can be used in network setups that leverage a proxy, e.g., in order to accommodate clients that are not able to directly listen to multicast traffic.</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/multicast-notifications-proxy"/>.</t>
    </note>
  </front>
  <middle>
    <?line 84?>

<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>In a number of use cases, it is conversely desirable that a server sends observe notifications for the same target resource to multiple observers at once. In general, this is beneficial when several CoAP clients observe the same target resource at a CoAP server, and thus they could all be notified at once by means of a single response message.</t>
      <t>To this end, <xref target="I-D.ietf-core-observe-multicast-notifications"/> defines a method that a server can use to deliver observe notifications as CoAP responses addressed to multiple clients, e.g., over IP multicast. Also, it defines how to use the security protocol Group Object Security for Constrained RESTful Environments (Group OSCORE) <xref target="I-D.ietf-core-oscore-groupcomm"/> to protect multicast notifications end-to-end between the server and the observer clients.</t>
      <t>This document describes how the method specified in <xref target="I-D.ietf-core-observe-multicast-notifications"/> can be used in network setups that leverage a proxy, e.g., in order to accommodate clients that are not able to directly listen to multicast traffic.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>Readers are expected to be familiar with terms and concepts described in CoAP <xref target="RFC7252"/>, group communication for CoAP <xref target="I-D.ietf-core-groupcomm-bis"/>, Observe <xref target="RFC7641"/>, Concise Data Definition Language (CDDL) <xref target="RFC8610"/>, Concise Binary Object Representation (CBOR) <xref target="RFC8949"/>, Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/>, Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>, and Constrained Resource Identifiers (CRIs) <xref target="I-D.ietf-core-href"/>.</t>
        <t>Readers are also expected to be familiar with terms and concepts described in <xref target="I-D.ietf-core-observe-multicast-notifications"/>, particularly with the terms "traditional observation", "group observation", "phantom request", and "informative response".</t>
      </section>
    </section>
    <section anchor="sec-variants">
      <name>High-Level Overview of Available Variants</name>
      <t>Building on what is specified in <xref target="I-D.ietf-core-observe-multicast-notifications"/>, this document considers network setups where proxies are deployed, which is expected if (some of) the clients participating in the group observation are not capable to listen to multicast traffic. In such setups, a proxy directly receives multicast notifications from the server and relays them back to the clients.</t>
      <t>Therefore, with respect to <xref target="I-D.ietf-core-observe-multicast-notifications"/>, this document introduces additional variants to enforce a group observation. As a complement to <xref section="3" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>, the rest of this section provides an overview of such additional variants, which differ as to whether exchanged messages are protected end-to-end between the observer clients and the server.</t>
      <ul spacing="normal">
        <li>
          <t>Variant with proxy and 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>Variant with proxy and 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 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.ietf-core-cacheable-oscore"/>, the same advantages mentioned in <xref section="3" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> for the case without a proxy apply (see <xref section="D" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>). 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>
    </section>
    <section anchor="intermediaries">
      <name>Setup with Proxies</name>
      <t>This section specifies how the approach presented in Sections <xref target="I-D.ietf-core-observe-multicast-notifications" section="4" sectionFormat="bare"/> and <xref target="I-D.ietf-core-observe-multicast-notifications" section="5" sectionFormat="bare"/> of <xref target="I-D.ietf-core-observe-multicast-notifications"/> 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 see <xref section="4.2" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>.</t>
      <t>Upon receiving an informative response, the proxy performs as specified for the client in  <xref section="5" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>, with the peculiarity that "consuming" the last notification (if present) means populating the proxy's 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 <xref target="I-D.ietf-core-href"/> specified by a dedicated element of 'tpi_details', within the 'tp_info' parameter of the informative response. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref section="4.2.1.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).</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 of the informative response. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref section="4.2.1.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).</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 replies to the client with an Empty Acknowledgement (if elicited by the message type of the original observation request, 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 section="5" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>. Then, the proxy replies 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 replies 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 section="4" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>) 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 an 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>Setup with Proxies and with Group OSCORE</name>
      <t>As defined in <xref section="9" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>, the security protocol Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> can be used to protect multicast notifications end-to-end between the origin server and the origin clients.</t>
      <t>Since the informative responses from the origin server are protected specifically end-to-end by using OSCORE or Group OSCORE, additional actions are required in the presence of a proxy.</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>Consequently, differently from what is defined in <xref target="intermediaries"/>, a proxy that receives an informative response simply forwards it back to the (previous hop towards the) origin client that has sent the corresponding observation request. Note that the proxy does not even realize that the message is an informative response, since the outer Code field is set to 2.05 (Content).</t>
      <t>Upon receiving the informative response, the origin client does not configure an observation of the target resource yet. Instead, the origin 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 origin client includes the new CoAP option Listen-To-Multicast-Responses 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 section="4" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>) 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 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 value 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 section="D" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).</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 a proxy to listen to multicast notifications sent by a server, a new CoAP option is defined. This option <bcp14>MUST</bcp14> be supported by clients that are interested to take part in group observations through intermediaries and by proxies that collect multicast notifications and forward them back to the observer clients.</t>
        <t>The option is called Listen-To-Multicast-Response, is intended only for requests, and has the properties summarized in <xref target="ltmr-table"/>, which extends Table 4 of <xref target="RFC7252"/>. The option is critical and not Safe-to-Forward. Since the option is not Safe-to-Forward, the 'N' column indicates a dash for "not applicable".</t>
        <table align="center" anchor="ltmr-table">
          <name>The Listen-To-Multicast-Responses Option. C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD47</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>Note to RFC Editor: In the table above, please replace TBD47 with the registered option number. Then, please delete this paragraph.</t>
        <t>The value of the Listen-To-Multicast-Responses Option is the byte serialization of a CBOR array. The content of the array specifies transport-specific message information that is required for listening to the multicast notifications of a group observation and is 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 section="4.2.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> for the 'tp_info' parameter of the informative response defined in <xref section="4.2" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>.</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 with Group OSCORE 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 the one defined in <xref section="9.3.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>:</t>
        <ul spacing="normal">
          <li>
            <t>The client performs all the additional decryption and verification steps of <xref section="9.3.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> 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 <xref section="C" sectionFormat="of" target="I-D.ietf-core-cacheable-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 (protecting the inner Code, the inner CoAP options, and the possible plain CoAP payload) concatenated with the countersignature are the same as those 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 is meant to 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 of the option 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 countersignature.</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 specified within the option value.</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 concatenated with the countersignature.</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 value. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref section="4.2.1.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).</t>
        <t>The multicast notifications of the group observation in question 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 value of 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 section="4.2.1.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).</t>
        <t>An example is provided in <xref target="intermediaries-example-e2e-security"/>.</t>
      </section>
    </section>
    <section anchor="impact-on-counting">
      <name>Impact from Proxies on Rough Counting of Clients in the Group Observation</name>
      <t><xref target="intermediaries"/> specifies how the approach defined in Sections <xref target="I-D.ietf-core-observe-multicast-notifications" section="4" sectionFormat="bare"/> and <xref target="I-D.ietf-core-observe-multicast-notifications" section="5" sectionFormat="bare"/> of <xref target="I-D.ietf-core-observe-multicast-notifications"/> works when a proxy is used between the origin clients and the origin server.</t>
      <t>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.</t>
      <t>With reference to the method defined in <xref section="8" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>, this has an impact on the rough counting that the server performs to keep an estimate of still active and interested clients. In particular, the following applies.</t>
      <ul spacing="normal">
        <li>
          <t>Since the Feedback-Divider Option defined in <xref section="8.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> 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 Feedback-Divider Option but the proxy does not recognize and understand the option, then the proxy stops 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 Feedback-Divider Option but the proxy does not recognize and understand the option, then the proxy stops 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 section="9" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> and <xref target="intermediaries-e2e-security"/> of the present document). In fact, in such a case, the 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 <xref section="8" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> but communications are not protected end-to-end between the origin endpoints, then it is practically required that the proxy recognizes and understands the 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 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 Feedback-Divider Option is visible to the proxy.      </t>
              <t>
In this case, the proxy proceeds like defined in <xref section="8.2" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> for an origin client, i.e., by answering on its own to the server if 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 verifying whether the origin clients are still interested in the observation, e.g., by regularly forwarding notifications to the clients as unicast separate responses that are specifically Confirmable 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 section="5.4" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).</t>
            </li>
            <li>
              <t>If the multicast notification is protected end-to-end by using Group OSCORE (see <xref section="9" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> and <xref target="intermediaries-e2e-security"/> of this document), then the 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 anchor="intermediaries-example">
      <name>Example with a Proxy</name>
      <t>This section provides an example where a proxy P is used between the clients and the server. The same assumptions and notation used in <xref section="7" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> 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="1856" width="576" viewBox="0 0 576 1856" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,1120" fill="none" stroke="black"/>
              <path d="M 8,1184 L 8,1376" fill="none" stroke="black"/>
              <path d="M 8,1440 L 8,1792" fill="none" stroke="black"/>
              <path d="M 64,48 L 64,104" fill="none" stroke="black"/>
              <path d="M 64,120 L 64,1032" fill="none" stroke="black"/>
              <path d="M 64,1048 L 64,1120" fill="none" stroke="black"/>
              <path d="M 64,1184 L 64,1376" fill="none" stroke="black"/>
              <path d="M 64,1440 L 64,1608" fill="none" stroke="black"/>
              <path d="M 64,1624 L 64,1792" fill="none" stroke="black"/>
              <path d="M 120,48 L 120,1120" fill="none" stroke="black"/>
              <path d="M 120,1184 L 120,1376" fill="none" stroke="black"/>
              <path d="M 120,1440 L 120,1792" fill="none" stroke="black"/>
              <path d="M 192,48 L 192,1120" fill="none" stroke="black"/>
              <path d="M 192,1184 L 192,1376" fill="none" stroke="black"/>
              <path d="M 192,1440 L 192,1792" fill="none" stroke="black"/>
              <path d="M 8,112 L 112,112" fill="none" stroke="black"/>
              <path d="M 120,176 L 184,176" fill="none" stroke="black"/>
              <path d="M 144,352 L 192,352" fill="none" stroke="black"/>
              <path d="M 144,400 L 184,400" fill="none" stroke="black"/>
              <path d="M 128,720 L 192,720" fill="none" stroke="black"/>
              <path d="M 16,1040 L 120,1040" fill="none" stroke="black"/>
              <path d="M 64,1200 L 112,1200" fill="none" stroke="black"/>
              <path d="M 72,1296 L 120,1296" fill="none" stroke="black"/>
              <path d="M 128,1520 L 192,1520" fill="none" stroke="black"/>
              <path d="M 16,1616 L 120,1616" fill="none" stroke="black"/>
              <path d="M 72,1712 L 120,1712" fill="none" stroke="black"/>
              <path d="M 132,376 L 144,400" fill="none" stroke="black"/>
              <path d="M 132,376 L 144,352" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="192,400 180,394.4 180,405.6" fill="black" transform="rotate(0,184,400)"/>
              <polygon class="arrowhead" points="192,176 180,170.4 180,181.6" fill="black" transform="rotate(0,184,176)"/>
              <polygon class="arrowhead" points="136,1520 124,1514.4 124,1525.6" fill="black" transform="rotate(180,128,1520)"/>
              <polygon class="arrowhead" points="136,720 124,714.4 124,725.6" fill="black" transform="rotate(180,128,720)"/>
              <polygon class="arrowhead" points="120,1200 108,1194.4 108,1205.6" fill="black" transform="rotate(0,112,1200)"/>
              <polygon class="arrowhead" points="120,112 108,106.4 108,117.6" fill="black" transform="rotate(0,112,112)"/>
              <polygon class="arrowhead" points="80,1712 68,1706.4 68,1717.6" fill="black" transform="rotate(180,72,1712)"/>
              <polygon class="arrowhead" points="80,1296 68,1290.4 68,1301.6" fill="black" transform="rotate(180,72,1296)"/>
              <polygon class="arrowhead" points="24,1616 12,1610.4 12,1621.6" fill="black" transform="rotate(180,16,1616)"/>
              <polygon class="arrowhead" points="24,1040 12,1034.4 12,1045.6" fill="black" transform="rotate(180,16,1040)"/>
              <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="308" y="68">representation</text>
                <text x="380" y="68">of</text>
                <text x="408" y="68">the</text>
                <text x="252" y="84">resource</text>
                <text x="300" y="84">/r</text>
                <text x="324" y="84">is</text>
                <text x="368" y="84">"1234")</text>
                <text x="236" y="116">Token:</text>
                <text x="284" y="116">0x4a</text>
                <text x="32" y="132">GET</text>
                <text x="244" y="132">Observe:</text>
                <text x="288" y="132">0</text>
                <text x="340" y="132">(register)</text>
                <text x="252" y="148">Proxy-Uri:</text>
                <text x="400" y="148">"coap://sensor.example/r"</text>
                <text x="236" y="180">Token:</text>
                <text x="284" y="180">0x5e</text>
                <text x="144" y="196">GET</text>
                <text x="244" y="196">Observe:</text>
                <text x="288" y="196">0</text>
                <text x="340" y="196">(register)</text>
                <text x="248" y="212">Uri-Host:</text>
                <text x="356" y="212">"sensor.example"</text>
                <text x="248" y="228">Uri-Path:</text>
                <text x="304" y="228">"r"</text>
                <text x="220" y="260">(S</text>
                <text x="272" y="260">allocates</text>
                <text x="328" y="260">the</text>
                <text x="384" y="260">available</text>
                <text x="448" y="260">Token</text>
                <text x="496" y="260">value</text>
                <text x="544" y="260">0x7b)</text>
                <text x="220" y="292">(S</text>
                <text x="256" y="292">sends</text>
                <text x="292" y="292">to</text>
                <text x="332" y="292">itself</text>
                <text x="368" y="292">a</text>
                <text x="408" y="292">phantom</text>
                <text x="488" y="292">observation</text>
                <text x="240" y="308">request</text>
                <text x="300" y="308">PH_REQ</text>
                <text x="340" y="308">as</text>
                <text x="380" y="308">coming</text>
                <text x="428" y="308">from</text>
                <text x="464" y="308">the</text>
                <text x="220" y="324">IP</text>
                <text x="272" y="324">multicast</text>
                <text x="344" y="324">address</text>
                <text x="416" y="324">GRP_ADDR)</text>
                <text x="236" y="404">Token:</text>
                <text x="284" y="404">0x7b</text>
                <text x="168" y="420">GET</text>
                <text x="244" y="420">Observe:</text>
                <text x="288" y="420">0</text>
                <text x="340" y="420">(register)</text>
                <text x="248" y="436">Uri-Host:</text>
                <text x="356" y="436">"sensor.example"</text>
                <text x="248" y="452">Uri-Path:</text>
                <text x="304" y="452">"r"</text>
                <text x="220" y="484">(S</text>
                <text x="264" y="484">creates</text>
                <text x="304" y="484">a</text>
                <text x="336" y="484">group</text>
                <text x="408" y="484">observation</text>
                <text x="468" y="484">of</text>
                <text x="496" y="484">/r)</text>
                <text x="220" y="516">(S</text>
                <text x="268" y="516">prepares</text>
                <text x="320" y="516">the</text>
                <text x="368" y="516">initial</text>
                <text x="440" y="516">multicast</text>
                <text x="268" y="532">notification</text>
                <text x="364" y="532">INIT_NOTIF</text>
                <text x="436" y="532">below)</text>
                <text x="228" y="564">2.05</text>
                <text x="288" y="564">(Content)</text>
                <text x="236" y="580">Token:</text>
                <text x="284" y="580">0x7b</text>
                <text x="244" y="596">Observe:</text>
                <text x="288" y="596">0</text>
                <text x="236" y="612">&lt;Other</text>
                <text x="300" y="612">options&gt;</text>
                <text x="228" y="628">0xff</text>
                <text x="244" y="644">Payload:</text>
                <text x="308" y="644">"1234"</text>
                <text x="220" y="676">(S</text>
                <text x="276" y="676">increments</text>
                <text x="336" y="676">the</text>
                <text x="388" y="676">observer</text>
                <text x="456" y="676">counter</text>
                <text x="232" y="692">for</text>
                <text x="264" y="692">the</text>
                <text x="304" y="692">group</text>
                <text x="376" y="692">observation</text>
                <text x="436" y="692">of</text>
                <text x="464" y="692">/r)</text>
                <text x="236" y="724">Token:</text>
                <text x="284" y="724">0x5e</text>
                <text x="148" y="740">5.03</text>
                <text x="272" y="740">Content-Format:</text>
                <text x="388" y="740">application/</text>
                <text x="336" y="756">informative-response+cbor</text>
                <text x="244" y="772">Max-Age:</text>
                <text x="288" y="772">0</text>
                <text x="236" y="788">&lt;Other</text>
                <text x="300" y="788">options&gt;</text>
                <text x="228" y="804">0xff</text>
                <text x="244" y="820">Payload:</text>
                <text x="288" y="820">{</text>
                <text x="232" y="836">/</text>
                <text x="272" y="836">tp_info</text>
                <text x="312" y="836">/</text>
                <text x="352" y="836">0</text>
                <text x="368" y="836">:</text>
                <text x="384" y="836">[</text>
                <text x="416" y="852">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="432" y="868">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="348" y="884">0x7b],</text>
                <text x="232" y="900">/</text>
                <text x="284" y="900">last_notif</text>
                <text x="336" y="900">/</text>
                <text x="352" y="900">2</text>
                <text x="368" y="900">:</text>
                <text x="416" y="900">bstr(0x45</text>
                <text x="464" y="900">|</text>
                <text x="488" y="900">OPT</text>
                <text x="512" y="900">|</text>
                <text x="540" y="900">0xff</text>
                <text x="568" y="900">|</text>
                <text x="452" y="916">PAYLOAD)</text>
                <text x="216" y="932">}</text>
                <text x="228" y="964">(The</text>
                <text x="272" y="964">proxy</text>
                <text x="324" y="964">starts</text>
                <text x="392" y="964">listening</text>
                <text x="444" y="964">to</text>
                <text x="472" y="964">the</text>
                <text x="252" y="980">GRP_ADDR</text>
                <text x="320" y="980">address</text>
                <text x="368" y="980">and</text>
                <text x="400" y="980">the</text>
                <text x="452" y="980">GRP_PORT</text>
                <text x="512" y="980">port)</text>
                <text x="228" y="1012">(The</text>
                <text x="272" y="1012">proxy</text>
                <text x="316" y="1012">adds</text>
                <text x="348" y="1012">C1</text>
                <text x="372" y="1012">to</text>
                <text x="400" y="1012">its</text>
                <text x="436" y="1012">list</text>
                <text x="468" y="1012">of</text>
                <text x="524" y="1012">observers)</text>
                <text x="236" y="1044">Token:</text>
                <text x="284" y="1044">0x4a</text>
                <text x="36" y="1060">2.05</text>
                <text x="244" y="1060">Observe:</text>
                <text x="304" y="1060">54120</text>
                <text x="236" y="1076">&lt;Other</text>
                <text x="300" y="1076">options&gt;</text>
                <text x="228" y="1092">0xff</text>
                <text x="244" y="1108">Payload:</text>
                <text x="308" y="1108">"1234"</text>
                <text x="16" y="1156">...</text>
                <text x="64" y="1156">...</text>
                <text x="120" y="1156">...</text>
                <text x="184" y="1156">...</text>
                <text x="236" y="1204">Token:</text>
                <text x="284" y="1204">0x01</text>
                <text x="88" y="1220">GET</text>
                <text x="244" y="1220">Observe:</text>
                <text x="288" y="1220">0</text>
                <text x="340" y="1220">(register)</text>
                <text x="252" y="1236">Proxy-Uri:</text>
                <text x="400" y="1236">"coap://sensor.example/r"</text>
                <text x="228" y="1268">(The</text>
                <text x="272" y="1268">proxy</text>
                <text x="312" y="1268">has</text>
                <text x="336" y="1268">a</text>
                <text x="368" y="1268">fresh</text>
                <text x="420" y="1268">cached</text>
                <text x="512" y="1268">representation)</text>
                <text x="236" y="1300">Token:</text>
                <text x="284" y="1300">0x01</text>
                <text x="92" y="1316">2.05</text>
                <text x="244" y="1316">Observe:</text>
                <text x="304" y="1316">54120</text>
                <text x="236" y="1332">&lt;Other</text>
                <text x="300" y="1332">options&gt;</text>
                <text x="228" y="1348">0xff</text>
                <text x="244" y="1364">Payload:</text>
                <text x="308" y="1364">"1234"</text>
                <text x="16" y="1412">...</text>
                <text x="64" y="1412">...</text>
                <text x="120" y="1412">...</text>
                <text x="184" y="1412">...</text>
                <text x="228" y="1460">(The</text>
                <text x="308" y="1460">representation</text>
                <text x="380" y="1460">of</text>
                <text x="408" y="1460">the</text>
                <text x="252" y="1476">resource</text>
                <text x="300" y="1476">/r</text>
                <text x="344" y="1476">changes</text>
                <text x="388" y="1476">to</text>
                <text x="432" y="1476">"5678")</text>
                <text x="152" y="1508">(#)</text>
                <text x="236" y="1524">Token:</text>
                <text x="284" y="1524">0x7b</text>
                <text x="148" y="1540">2.05</text>
                <text x="244" y="1540">Observe:</text>
                <text x="292" y="1540">11</text>
                <text x="236" y="1556">&lt;Other</text>
                <text x="300" y="1556">options&gt;</text>
                <text x="228" y="1572">0xff</text>
                <text x="244" y="1588">Payload:</text>
                <text x="308" y="1588">"5678"</text>
                <text x="236" y="1620">Token:</text>
                <text x="284" y="1620">0x4a</text>
                <text x="36" y="1636">2.05</text>
                <text x="244" y="1636">Observe:</text>
                <text x="304" y="1636">54123</text>
                <text x="236" y="1652">&lt;Other</text>
                <text x="300" y="1652">options&gt;</text>
                <text x="228" y="1668">0xff</text>
                <text x="244" y="1684">Payload:</text>
                <text x="308" y="1684">"5678"</text>
                <text x="236" y="1716">Token:</text>
                <text x="284" y="1716">0x01</text>
                <text x="92" y="1732">2.05</text>
                <text x="244" y="1732">Observe:</text>
                <text x="304" y="1732">54123</text>
                <text x="236" y="1748">&lt;Other</text>
                <text x="300" y="1748">options&gt;</text>
                <text x="228" y="1764">0xff</text>
                <text x="244" y="1780">Payload:</text>
                <text x="308" y="1780">"5678"</text>
                <text x="16" y="1844">(#)</text>
                <text x="52" y="1844">Sent</text>
                <text x="92" y="1844">over</text>
                <text x="124" y="1844">IP</text>
                <text x="176" y="1844">multicast</text>
                <text x="228" y="1844">to</text>
                <text x="332" y="1844">GROUP_ADDR:GROUP_PORT.</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
C1     C2     P        S
|      |      |        |
|      |      |        |  (The representation 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 prepares the initial multicast
|      |      |        |   notification INIT_NOTIF below)
|      |      |        |
|      |      |        |  2.05 (Content)
|      |      |        |  Token: 0x7b
|      |      |        |  Observe: 0
|      |      |        |  <Other options>
|      |      |        |  0xff
|      |      |        |  Payload: "1234"
|      |      |        |
|      |      |        |  (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>
|      |      |        |  0xff
|      |      |        |  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 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>
|      |      |        |  0xff
|      |      |        |  Payload: "1234"
|      |      |        |

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

|      |      |        |
|      +----->|        |  Token: 0x01
|      | GET  |        |  Observe: 0 (register)
|      |      |        |  Proxy-Uri: "coap://sensor.example/r"
|      |      |        |
|      |      |        |  (The proxy has a fresh cached representation)
|      |      |        |
|      |<-----+        |  Token: 0x01
|      | 2.05 |        |  Observe: 54120
|      |      |        |  <Other options>
|      |      |        |  0xff
|      |      |        |  Payload: "1234"
|      |      |        |

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

|      |      |        |
|      |      |        |  (The representation of the
|      |      |        |   resource /r changes to "5678")
|      |      |        |
|      |      |  (#)   |
|      |      |<-------+  Token: 0x7b
|      |      | 2.05   |  Observe: 11
|      |      |        |  <Other options>
|      |      |        |  0xff
|      |      |        |  Payload: "5678"
|      |      |        |
|<------------+        |  Token: 0x4a
| 2.05 |      |        |  Observe: 54123
|      |      |        |  <Other options>
|      |      |        |  0xff
|      |      |        |  Payload: "5678"
|      |      |        |
|      |<-----+        |  Token: 0x01
|      | 2.05 |        |  Observe: 54123
|      |      |        |  <Other options>
|      |      |        |  0xff
|      |      |        |  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 that it receives to all the registered clients.</t>
    </section>
    <section anchor="intermediaries-example-e2e-security">
      <name>Example with a Proxy and with Group OSCORE</name>
      <t>This section provides an example where 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 section="10" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> 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="4672" width="576" viewBox="0 0 576 4672" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,2400" fill="none" stroke="black"/>
              <path d="M 8,2464 L 8,3888" fill="none" stroke="black"/>
              <path d="M 8,3952 L 8,4544" fill="none" stroke="black"/>
              <path d="M 72,48 L 72,104" fill="none" stroke="black"/>
              <path d="M 72,120 L 72,1832" fill="none" stroke="black"/>
              <path d="M 72,1848 L 72,1944" fill="none" stroke="black"/>
              <path d="M 72,1960 L 72,2376" fill="none" stroke="black"/>
              <path d="M 72,2464 L 72,3888" fill="none" stroke="black"/>
              <path d="M 72,3952 L 72,4264" fill="none" stroke="black"/>
              <path d="M 72,4280 L 72,4544" fill="none" stroke="black"/>
              <path d="M 136,48 L 136,2400" fill="none" stroke="black"/>
              <path d="M 136,2464 L 136,3888" fill="none" stroke="black"/>
              <path d="M 136,3952 L 136,4544" fill="none" stroke="black"/>
              <path d="M 216,48 L 216,2400" fill="none" stroke="black"/>
              <path d="M 216,2464 L 216,3888" fill="none" stroke="black"/>
              <path d="M 216,3952 L 216,4544" fill="none" stroke="black"/>
              <path d="M 8,112 L 128,112" fill="none" stroke="black"/>
              <path d="M 136,336 L 208,336" 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 432,960 L 448,960" fill="none" stroke="black"/>
              <path d="M 424,1328 L 440,1328" fill="none" stroke="black"/>
              <path d="M 144,1408 L 216,1408" fill="none" stroke="black"/>
              <path d="M 16,1840 L 136,1840" fill="none" stroke="black"/>
              <path d="M 8,1952 L 128,1952" fill="none" stroke="black"/>
              <path d="M 16,2384 L 136,2384" fill="none" stroke="black"/>
              <path d="M 72,2480 L 128,2480" fill="none" stroke="black"/>
              <path d="M 136,2704 L 208,2704" fill="none" stroke="black"/>
              <path d="M 144,2960 L 216,2960" fill="none" stroke="black"/>
              <path d="M 80,3392 L 136,3392" fill="none" stroke="black"/>
              <path d="M 72,3488 L 128,3488" fill="none" stroke="black"/>
              <path d="M 80,3856 L 136,3856" fill="none" stroke="black"/>
              <path d="M 144,4032 L 216,4032" fill="none" stroke="black"/>
              <path d="M 16,4272 L 136,4272" fill="none" stroke="black"/>
              <path d="M 80,4416 L 136,4416" 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="440,960 428,954.4 428,965.6" fill="black" transform="rotate(180,432,960)"/>
              <polygon class="arrowhead" points="432,1328 420,1322.4 420,1333.6" fill="black" transform="rotate(180,424,1328)"/>
              <polygon class="arrowhead" points="216,2704 204,2698.4 204,2709.6" fill="black" transform="rotate(0,208,2704)"/>
              <polygon class="arrowhead" points="216,704 204,698.4 204,709.6" fill="black" transform="rotate(0,208,704)"/>
              <polygon class="arrowhead" points="216,336 204,330.4 204,341.6" fill="black" transform="rotate(0,208,336)"/>
              <polygon class="arrowhead" points="152,4032 140,4026.4 140,4037.6" fill="black" transform="rotate(180,144,4032)"/>
              <polygon class="arrowhead" points="152,2960 140,2954.4 140,2965.6" fill="black" transform="rotate(180,144,2960)"/>
              <polygon class="arrowhead" points="152,1408 140,1402.4 140,1413.6" fill="black" transform="rotate(180,144,1408)"/>
              <polygon class="arrowhead" points="136,3488 124,3482.4 124,3493.6" fill="black" transform="rotate(0,128,3488)"/>
              <polygon class="arrowhead" points="136,2480 124,2474.4 124,2485.6" fill="black" transform="rotate(0,128,2480)"/>
              <polygon class="arrowhead" points="136,1952 124,1946.4 124,1957.6" fill="black" transform="rotate(0,128,1952)"/>
              <polygon class="arrowhead" points="136,112 124,106.4 124,117.6" fill="black" transform="rotate(0,128,112)"/>
              <polygon class="arrowhead" points="88,4416 76,4410.4 76,4421.6" fill="black" transform="rotate(180,80,4416)"/>
              <polygon class="arrowhead" points="88,3856 76,3850.4 76,3861.6" fill="black" transform="rotate(180,80,3856)"/>
              <polygon class="arrowhead" points="88,3392 76,3386.4 76,3397.6" fill="black" transform="rotate(180,80,3392)"/>
              <polygon class="arrowhead" points="24,4272 12,4266.4 12,4277.6" fill="black" transform="rotate(180,16,4272)"/>
              <polygon class="arrowhead" points="24,2384 12,2378.4 12,2389.6" fill="black" transform="rotate(180,16,2384)"/>
              <polygon class="arrowhead" points="24,1840 12,1834.4 12,1845.6" fill="black" transform="rotate(180,16,1840)"/>
              <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="332" y="68">representation</text>
                <text x="404" y="68">of</text>
                <text x="432" y="68">the</text>
                <text x="276" y="84">resource</text>
                <text x="324" y="84">/r</text>
                <text x="348" y="84">is</text>
                <text x="392" y="84">"1234")</text>
                <text x="260" y="116">Token:</text>
                <text x="308" y="116">0x4a</text>
                <text x="40" y="132">FETCH</text>
                <text x="268" y="132">Observe:</text>
                <text x="312" y="132">0</text>
                <text x="364" y="132">(register)</text>
                <text x="264" y="148">OSCORE:</text>
                <text x="340" y="148">[kid:0x01,</text>
                <text x="416" y="148">Partial</text>
                <text x="484" y="148">IV:0x65]</text>
                <text x="272" y="164">Uri-Host:</text>
                <text x="380" y="164">"sensor.example"</text>
                <text x="288" y="180">Proxy-Scheme:</text>
                <text x="372" y="180">"coap"</text>
                <text x="260" y="196">&lt;Other</text>
                <text x="312" y="196">class</text>
                <text x="352" y="196">U/I</text>
                <text x="404" y="196">options&gt;</text>
                <text x="252" y="212">0xff</text>
                <text x="304" y="228">Encrypted_payload</text>
                <text x="384" y="228">{</text>
                <text x="268" y="244">0.01</text>
                <text x="316" y="244">(GET),</text>
                <text x="284" y="260">Observe:</text>
                <text x="328" y="260">0</text>
                <text x="384" y="260">(register),</text>
                <text x="288" y="276">Uri-Path:</text>
                <text x="348" y="276">"r",</text>
                <text x="276" y="292">&lt;Other</text>
                <text x="328" y="292">class</text>
                <text x="360" y="292">E</text>
                <text x="404" y="292">options&gt;</text>
                <text x="240" y="308">}</text>
                <text x="260" y="340">Token:</text>
                <text x="308" y="340">0x5e</text>
                <text x="168" y="356">FETCH</text>
                <text x="268" y="356">Observe:</text>
                <text x="312" y="356">0</text>
                <text x="364" y="356">(register)</text>
                <text x="264" y="372">OSCORE:</text>
                <text x="340" y="372">[kid:0x01,</text>
                <text x="416" y="372">Partial</text>
                <text x="484" y="372">IV:0x65]</text>
                <text x="272" y="388">Uri-Host:</text>
                <text x="380" y="388">"sensor.example"</text>
                <text x="260" y="404">&lt;Other</text>
                <text x="312" y="404">class</text>
                <text x="352" y="404">U/I</text>
                <text x="404" y="404">options&gt;</text>
                <text x="252" y="420">0xff</text>
                <text x="304" y="436">Encrypted_payload</text>
                <text x="384" y="436">{</text>
                <text x="268" y="452">0.01</text>
                <text x="316" y="452">(GET),</text>
                <text x="284" y="468">Observe:</text>
                <text x="328" y="468">0</text>
                <text x="384" y="468">(register),</text>
                <text x="288" y="484">Uri-Path:</text>
                <text x="348" y="484">"r",</text>
                <text x="276" y="500">&lt;Other</text>
                <text x="328" y="500">class</text>
                <text x="360" y="500">E</text>
                <text x="404" y="500">options&gt;</text>
                <text x="240" y="516">}</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="360" y="564">0x7b)</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="272" y="612">request</text>
                <text x="332" y="612">PH_REQ</text>
                <text x="372" y="612">as</text>
                <text x="412" y="612">coming</text>
                <text x="460" y="612">from</text>
                <text x="496" y="612">the</text>
                <text x="252" y="628">IP</text>
                <text x="304" y="628">multicast</text>
                <text x="376" y="628">address</text>
                <text x="448" 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="340" y="740">[kid:0x05,</text>
                <text x="416" y="740">Partial</text>
                <text x="492" y="740">IV:0x01f5,</text>
                <text x="320" y="756">kid</text>
                <text x="408" y="756">context:0x57ab2e]</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">0.01</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="308" y="916">&lt;Countersignature&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="348" y="964">Context:</text>
                <text x="404" y="964">SN_5</text>
                <text x="476" 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="236" y="1028">(S</text>
                <text x="284" y="1028">prepares</text>
                <text x="336" y="1028">the</text>
                <text x="384" y="1028">initial</text>
                <text x="456" y="1028">multicast</text>
                <text x="284" y="1044">notification</text>
                <text x="380" y="1044">INIT_NOTIF</text>
                <text x="452" y="1044">below)</text>
                <text x="244" y="1076">2.05</text>
                <text x="304" y="1076">(Content)</text>
                <text x="252" y="1092">Token:</text>
                <text x="300" y="1092">0x7b</text>
                <text x="260" y="1108">Observe:</text>
                <text x="304" y="1108">0</text>
                <text x="256" y="1124">OSCORE:</text>
                <text x="332" y="1124">[kid:0x05,</text>
                <text x="408" y="1124">Partial</text>
                <text x="484" y="1124">IV:0x01f6]</text>
                <text x="252" y="1140">&lt;Other</text>
                <text x="304" y="1140">class</text>
                <text x="344" y="1140">U/I</text>
                <text x="396" y="1140">options&gt;</text>
                <text x="244" y="1156">0xff</text>
                <text x="296" y="1172">Encrypted_payload</text>
                <text x="376" y="1172">{</text>
                <text x="260" y="1188">2.05</text>
                <text x="324" y="1188">(Content),</text>
                <text x="276" y="1204">Observe:</text>
                <text x="320" y="1204">-</text>
                <text x="364" y="1204">(empty),</text>
                <text x="268" y="1220">&lt;Other</text>
                <text x="320" y="1220">class</text>
                <text x="352" y="1220">E</text>
                <text x="400" y="1220">options&gt;,</text>
                <text x="264" y="1236">0xff,</text>
                <text x="276" y="1252">Payload:</text>
                <text x="340" y="1252">"1234"</text>
                <text x="232" y="1268">}</text>
                <text x="300" y="1284">&lt;Countersignature&gt;</text>
                <text x="236" y="1316">(S</text>
                <text x="272" y="1316">steps</text>
                <text x="316" y="1316">SN_5</text>
                <text x="348" y="1316">in</text>
                <text x="376" y="1316">the</text>
                <text x="416" y="1316">Group</text>
                <text x="468" y="1316">OSCORE</text>
                <text x="268" y="1332">Security</text>
                <text x="340" y="1332">Context:</text>
                <text x="396" y="1332">SN_5</text>
                <text x="468" y="1332">503)</text>
                <text x="244" y="1364">(S</text>
                <text x="300" y="1364">increments</text>
                <text x="360" y="1364">the</text>
                <text x="412" y="1364">observer</text>
                <text x="480" y="1364">counter</text>
                <text x="256" y="1380">for</text>
                <text x="288" y="1380">the</text>
                <text x="328" y="1380">group</text>
                <text x="400" y="1380">observation</text>
                <text x="460" y="1380">of</text>
                <text x="488" y="1380">/r)</text>
                <text x="260" y="1412">Token:</text>
                <text x="308" y="1412">0x5e</text>
                <text x="164" y="1428">2.04</text>
                <text x="264" y="1428">OSCORE:</text>
                <text x="304" y="1428">-</text>
                <text x="344" y="1428">(empty)</text>
                <text x="260" y="1444">&lt;Other</text>
                <text x="312" y="1444">class</text>
                <text x="352" y="1444">U/I</text>
                <text x="404" y="1444">options&gt;</text>
                <text x="252" y="1460">0xff</text>
                <text x="304" y="1476">Encrypted_payload</text>
                <text x="384" y="1476">{</text>
                <text x="268" y="1492">5.03</text>
                <text x="324" y="1492">(Service</text>
                <text x="416" y="1492">Unavailable),</text>
                <text x="312" y="1508">Content-Format:</text>
                <text x="428" y="1508">application/</text>
                <text x="380" y="1524">informative-response+cbor,</text>
                <text x="276" y="1540">&lt;Other</text>
                <text x="328" y="1540">class</text>
                <text x="360" y="1540">E</text>
                <text x="408" y="1540">options&gt;,</text>
                <text x="272" y="1556">0xff,</text>
                <text x="280" y="1572">Payload</text>
                <text x="320" y="1572">{</text>
                <text x="272" y="1588">/</text>
                <text x="312" y="1588">tp_info</text>
                <text x="352" y="1588">/</text>
                <text x="392" y="1588">0</text>
                <text x="408" y="1588">:</text>
                <text x="424" y="1588">[</text>
                <text x="432" y="1604">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="448" y="1620">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="364" y="1636">0x7b],</text>
                <text x="272" y="1652">/</text>
                <text x="308" y="1652">ph_req</text>
                <text x="344" y="1652">/</text>
                <text x="392" y="1652">1</text>
                <text x="408" y="1652">:</text>
                <text x="456" y="1652">bstr(0x05</text>
                <text x="504" y="1652">|</text>
                <text x="440" y="1668">OPT</text>
                <text x="464" y="1668">|</text>
                <text x="492" y="1668">0xff</text>
                <text x="520" y="1668">|</text>
                <text x="456" y="1684">PAYLOAD</text>
                <text x="496" y="1684">|</text>
                <text x="532" y="1684">SIGN),</text>
                <text x="272" y="1700">/</text>
                <text x="324" y="1700">last_notif</text>
                <text x="376" y="1700">/</text>
                <text x="392" y="1700">2</text>
                <text x="408" y="1700">:</text>
                <text x="456" y="1700">bstr(0x45</text>
                <text x="504" y="1700">|</text>
                <text x="440" y="1716">OPT</text>
                <text x="464" y="1716">|</text>
                <text x="492" y="1716">0xff</text>
                <text x="520" y="1716">|</text>
                <text x="456" y="1732">PAYLOAD</text>
                <text x="496" y="1732">|</text>
                <text x="532" y="1732">SIGN),</text>
                <text x="272" y="1748">/</text>
                <text x="316" y="1748">join_uri</text>
                <text x="360" y="1748">/</text>
                <text x="392" y="1748">5</text>
                <text x="408" y="1748">:</text>
                <text x="472" y="1748">"coap://myGM/</text>
                <text x="496" y="1764">ace-group/myGroup",</text>
                <text x="272" y="1780">/</text>
                <text x="308" y="1780">sec_gp</text>
                <text x="344" y="1780">/</text>
                <text x="392" y="1780">6</text>
                <text x="408" y="1780">:</text>
                <text x="456" y="1780">"myGroup"</text>
                <text x="256" y="1796">}</text>
                <text x="240" y="1812">}</text>
                <text x="260" y="1844">Token:</text>
                <text x="308" y="1844">0x4a</text>
                <text x="36" y="1860">2.04</text>
                <text x="264" y="1860">OSCORE:</text>
                <text x="304" y="1860">-</text>
                <text x="344" y="1860">(empty)</text>
                <text x="260" y="1876">&lt;Other</text>
                <text x="312" y="1876">class</text>
                <text x="352" y="1876">U/I</text>
                <text x="404" y="1876">options&gt;</text>
                <text x="252" y="1892">0xff</text>
                <text x="256" y="1908">(Same</text>
                <text x="356" y="1908">Encrypted_payload)</text>
                <text x="40" y="1940">(#)</text>
                <text x="260" y="1956">Token:</text>
                <text x="308" y="1956">0x4b</text>
                <text x="40" y="1972">FETCH</text>
                <text x="268" y="1972">Observe:</text>
                <text x="312" y="1972">0</text>
                <text x="364" y="1972">(register)</text>
                <text x="264" y="1988">OSCORE:</text>
                <text x="340" y="1988">[kid:0x05,</text>
                <text x="416" y="1988">Partial</text>
                <text x="492" y="1988">IV:0x01f5,</text>
                <text x="320" y="2004">kid</text>
                <text x="408" y="2004">context:0x57ab2e]</text>
                <text x="272" y="2020">Uri-Host:</text>
                <text x="380" y="2020">"sensor.example"</text>
                <text x="288" y="2036">Proxy-Scheme:</text>
                <text x="372" y="2036">"coap"</text>
                <text x="356" y="2052">Listen-To-Multicast-Responses:</text>
                <text x="488" y="2052">{</text>
                <text x="380" y="2068">[cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="400" y="2084">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="312" y="2100">0x7b]</text>
                <text x="240" y="2116">}</text>
                <text x="260" y="2132">&lt;Other</text>
                <text x="312" y="2132">class</text>
                <text x="352" y="2132">U/I</text>
                <text x="404" y="2132">options&gt;</text>
                <text x="252" y="2148">0xff</text>
                <text x="304" y="2164">Encrypted_payload</text>
                <text x="384" y="2164">{</text>
                <text x="268" y="2180">0.01</text>
                <text x="316" y="2180">(GET),</text>
                <text x="284" y="2196">Observe:</text>
                <text x="328" y="2196">0</text>
                <text x="384" y="2196">(register),</text>
                <text x="288" y="2212">Uri-Path:</text>
                <text x="348" y="2212">"r",</text>
                <text x="276" y="2228">&lt;Other</text>
                <text x="328" y="2228">class</text>
                <text x="360" y="2228">E</text>
                <text x="404" y="2228">options&gt;</text>
                <text x="240" y="2244">}</text>
                <text x="308" y="2260">&lt;Countersignature&gt;</text>
                <text x="252" y="2292">(The</text>
                <text x="296" y="2292">proxy</text>
                <text x="348" y="2292">starts</text>
                <text x="416" y="2292">listening</text>
                <text x="468" y="2292">to</text>
                <text x="496" y="2292">the</text>
                <text x="276" y="2308">GRP_ADDR</text>
                <text x="344" y="2308">address</text>
                <text x="392" y="2308">and</text>
                <text x="424" y="2308">the</text>
                <text x="476" y="2308">GRP_PORT</text>
                <text x="536" y="2308">port)</text>
                <text x="252" y="2340">(The</text>
                <text x="296" y="2340">proxy</text>
                <text x="340" y="2340">adds</text>
                <text x="372" y="2340">C1</text>
                <text x="396" y="2340">to</text>
                <text x="256" y="2356">its</text>
                <text x="292" y="2356">list</text>
                <text x="324" y="2356">of</text>
                <text x="380" y="2356">observers)</text>
                <text x="72" y="2404">|</text>
                <text x="104" y="2404">ACK</text>
                <text x="16" y="2436">...</text>
                <text x="72" y="2436">...</text>
                <text x="136" y="2436">...</text>
                <text x="208" y="2436">...</text>
                <text x="260" y="2484">Token:</text>
                <text x="308" y="2484">0x01</text>
                <text x="104" y="2500">FETCH</text>
                <text x="268" y="2500">Observe:</text>
                <text x="312" y="2500">0</text>
                <text x="364" y="2500">(register)</text>
                <text x="264" y="2516">OSCORE:</text>
                <text x="340" y="2516">[kid:0x02,</text>
                <text x="416" y="2516">Partial</text>
                <text x="484" y="2516">IV:0xc9]</text>
                <text x="272" y="2532">Uri-Host:</text>
                <text x="380" y="2532">"sensor.example"</text>
                <text x="288" y="2548">Proxy-Scheme:</text>
                <text x="372" y="2548">"coap"</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">0.01</text>
                <text x="316" y="2612">(GET),</text>
                <text x="284" y="2628">Observe:</text>
                <text x="328" y="2628">0</text>
                <text x="384" y="2628">(register),</text>
                <text x="288" y="2644">Uri-Path:</text>
                <text x="348" y="2644">"r",</text>
                <text x="276" y="2660">&lt;Other</text>
                <text x="328" y="2660">class</text>
                <text x="360" y="2660">E</text>
                <text x="404" y="2660">options&gt;</text>
                <text x="240" y="2676">}</text>
                <text x="260" y="2708">Token:</text>
                <text x="308" y="2708">0x5f</text>
                <text x="168" y="2724">FETCH</text>
                <text x="268" y="2724">Observe:</text>
                <text x="312" y="2724">0</text>
                <text x="364" y="2724">(register)</text>
                <text x="264" y="2740">OSCORE:</text>
                <text x="340" y="2740">[kid:0x02,</text>
                <text x="416" y="2740">Partial</text>
                <text x="484" y="2740">IV:0xc9]</text>
                <text x="272" y="2756">Uri-Host:</text>
                <text x="380" y="2756">"sensor.example"</text>
                <text x="260" y="2772">&lt;Other</text>
                <text x="312" y="2772">class</text>
                <text x="352" y="2772">U/I</text>
                <text x="404" y="2772">options&gt;</text>
                <text x="252" y="2788">0xff</text>
                <text x="304" y="2804">Encrypted_payload</text>
                <text x="384" y="2804">{</text>
                <text x="268" y="2820">0.01</text>
                <text x="316" y="2820">(GET),</text>
                <text x="284" y="2836">Observe:</text>
                <text x="328" y="2836">0</text>
                <text x="384" y="2836">(register),</text>
                <text x="288" y="2852">Uri-Path:</text>
                <text x="348" y="2852">"r",</text>
                <text x="276" y="2868">&lt;Other</text>
                <text x="328" y="2868">class</text>
                <text x="360" y="2868">E</text>
                <text x="404" y="2868">options&gt;</text>
                <text x="240" y="2884">}</text>
                <text x="244" y="2916">(S</text>
                <text x="300" y="2916">increments</text>
                <text x="360" y="2916">the</text>
                <text x="412" y="2916">observer</text>
                <text x="480" y="2916">counter</text>
                <text x="256" y="2932">for</text>
                <text x="288" y="2932">the</text>
                <text x="328" y="2932">group</text>
                <text x="400" y="2932">observation</text>
                <text x="460" y="2932">of</text>
                <text x="488" y="2932">/r)</text>
                <text x="260" y="2964">Token:</text>
                <text x="308" y="2964">0x5f</text>
                <text x="164" y="2980">2.04</text>
                <text x="264" y="2980">OSCORE:</text>
                <text x="304" y="2980">-</text>
                <text x="344" y="2980">(empty)</text>
                <text x="260" y="2996">&lt;Other</text>
                <text x="312" y="2996">class</text>
                <text x="352" y="2996">U/I</text>
                <text x="404" y="2996">options&gt;</text>
                <text x="252" y="3012">0xff</text>
                <text x="304" y="3028">Encrypted_payload</text>
                <text x="384" y="3028">{</text>
                <text x="268" y="3044">5.03</text>
                <text x="324" y="3044">(Service</text>
                <text x="416" y="3044">Unavailable),</text>
                <text x="312" y="3060">Content-Format:</text>
                <text x="428" y="3060">application/</text>
                <text x="380" y="3076">informative-response+cbor,</text>
                <text x="276" y="3092">&lt;Other</text>
                <text x="328" y="3092">class</text>
                <text x="360" y="3092">E</text>
                <text x="408" y="3092">options&gt;,</text>
                <text x="272" y="3108">0xff,</text>
                <text x="280" y="3124">Payload</text>
                <text x="320" y="3124">{</text>
                <text x="272" y="3140">/</text>
                <text x="312" y="3140">tp_info</text>
                <text x="352" y="3140">/</text>
                <text x="392" y="3140">0</text>
                <text x="408" y="3140">:</text>
                <text x="424" y="3140">[</text>
                <text x="432" y="3156">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="448" y="3172">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="364" y="3188">0x7b],</text>
                <text x="272" y="3204">/</text>
                <text x="308" y="3204">ph_req</text>
                <text x="344" y="3204">/</text>
                <text x="392" y="3204">1</text>
                <text x="408" y="3204">:</text>
                <text x="456" y="3204">bstr(0x05</text>
                <text x="504" y="3204">|</text>
                <text x="440" y="3220">OPT</text>
                <text x="464" y="3220">|</text>
                <text x="492" y="3220">0xff</text>
                <text x="520" y="3220">|</text>
                <text x="456" y="3236">PAYLOAD</text>
                <text x="496" y="3236">|</text>
                <text x="532" y="3236">SIGN),</text>
                <text x="272" y="3252">/</text>
                <text x="324" y="3252">last_notif</text>
                <text x="376" y="3252">/</text>
                <text x="392" y="3252">2</text>
                <text x="408" y="3252">:</text>
                <text x="456" y="3252">bstr(0x45</text>
                <text x="504" y="3252">|</text>
                <text x="440" y="3268">OPT</text>
                <text x="464" y="3268">|</text>
                <text x="492" y="3268">0xff</text>
                <text x="520" y="3268">|</text>
                <text x="456" y="3284">PAYLOAD</text>
                <text x="496" y="3284">|</text>
                <text x="532" y="3284">SIGN),</text>
                <text x="272" y="3300">/</text>
                <text x="316" y="3300">join_uri</text>
                <text x="360" y="3300">/</text>
                <text x="392" y="3300">5</text>
                <text x="408" y="3300">:</text>
                <text x="472" y="3300">"coap://myGM/</text>
                <text x="496" y="3316">ace-group/myGroup",</text>
                <text x="272" y="3332">/</text>
                <text x="308" y="3332">sec_gp</text>
                <text x="344" y="3332">/</text>
                <text x="392" y="3332">6</text>
                <text x="408" y="3332">:</text>
                <text x="456" y="3332">"myGroup"</text>
                <text x="256" y="3348">}</text>
                <text x="240" y="3364">}</text>
                <text x="260" y="3396">Token:</text>
                <text x="308" y="3396">0x01</text>
                <text x="100" y="3412">2.04</text>
                <text x="264" y="3412">OSCORE:</text>
                <text x="304" y="3412">-</text>
                <text x="344" y="3412">(empty)</text>
                <text x="260" y="3428">&lt;Other</text>
                <text x="312" y="3428">class</text>
                <text x="352" y="3428">U/I</text>
                <text x="404" y="3428">options&gt;</text>
                <text x="252" y="3444">0xff</text>
                <text x="256" y="3460">(Same</text>
                <text x="356" y="3460">Encrypted_payload)</text>
                <text x="104" y="3476">(#)</text>
                <text x="260" y="3492">Token:</text>
                <text x="308" y="3492">0x02</text>
                <text x="104" y="3508">FETCH</text>
                <text x="268" y="3508">Observe:</text>
                <text x="312" y="3508">0</text>
                <text x="364" y="3508">(register)</text>
                <text x="264" y="3524">OSCORE:</text>
                <text x="340" y="3524">[kid:0x05,</text>
                <text x="416" y="3524">Partial</text>
                <text x="492" y="3524">IV:0x01f5,</text>
                <text x="320" y="3540">kid</text>
                <text x="408" y="3540">context:0x57ab2e]</text>
                <text x="272" y="3556">Uri-Host:</text>
                <text x="380" y="3556">"sensor.example"</text>
                <text x="288" y="3572">Proxy-Scheme:</text>
                <text x="372" y="3572">"coap"</text>
                <text x="356" y="3588">Listen-To-Multicast-Responses:</text>
                <text x="488" y="3588">{</text>
                <text x="380" y="3604">[cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="400" y="3620">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="312" y="3636">0x7b]</text>
                <text x="240" y="3652">}</text>
                <text x="260" y="3668">&lt;Other</text>
                <text x="312" y="3668">class</text>
                <text x="352" y="3668">U/I</text>
                <text x="404" y="3668">options&gt;</text>
                <text x="252" y="3684">0xff</text>
                <text x="304" y="3700">Encrypted_payload</text>
                <text x="384" y="3700">{</text>
                <text x="268" y="3716">0.01</text>
                <text x="316" y="3716">(GET),</text>
                <text x="284" y="3732">Observe:</text>
                <text x="328" y="3732">0</text>
                <text x="384" y="3732">(register),</text>
                <text x="288" y="3748">Uri-Path:</text>
                <text x="348" y="3748">"r",</text>
                <text x="276" y="3764">&lt;Other</text>
                <text x="328" y="3764">class</text>
                <text x="360" y="3764">E</text>
                <text x="404" y="3764">options&gt;</text>
                <text x="240" y="3780">}</text>
                <text x="308" y="3796">&lt;Countersignature&gt;</text>
                <text x="252" y="3828">(The</text>
                <text x="296" y="3828">proxy</text>
                <text x="340" y="3828">adds</text>
                <text x="372" y="3828">C2</text>
                <text x="396" y="3828">to</text>
                <text x="256" y="3844">its</text>
                <text x="292" y="3844">list</text>
                <text x="324" y="3844">of</text>
                <text x="380" y="3844">observers)</text>
                <text x="104" y="3876">ACK</text>
                <text x="16" y="3924">...</text>
                <text x="72" y="3924">...</text>
                <text x="136" y="3924">...</text>
                <text x="208" y="3924">...</text>
                <text x="252" y="3972">(The</text>
                <text x="332" y="3972">representation</text>
                <text x="404" y="3972">of</text>
                <text x="432" y="3972">the</text>
                <text x="276" y="3988">resource</text>
                <text x="324" y="3988">/r</text>
                <text x="368" y="3988">changes</text>
                <text x="412" y="3988">to</text>
                <text x="456" y="3988">"5678")</text>
                <text x="180" y="4020">(##)</text>
                <text x="260" y="4036">Token:</text>
                <text x="308" y="4036">0x7b</text>
                <text x="164" y="4052">2.05</text>
                <text x="268" y="4052">Observe:</text>
                <text x="316" y="4052">11</text>
                <text x="264" y="4068">OSCORE:</text>
                <text x="340" y="4068">[kid:0x05,</text>
                <text x="416" y="4068">Partial</text>
                <text x="492" y="4068">IV:0x01f7]</text>
                <text x="268" y="4084">Max-Age:</text>
                <text x="312" y="4084">0</text>
                <text x="260" y="4100">&lt;Other</text>
                <text x="312" y="4100">class</text>
                <text x="352" y="4100">U/I</text>
                <text x="404" y="4100">options&gt;</text>
                <text x="252" y="4116">0xff</text>
                <text x="304" y="4132">Encrypted_payload</text>
                <text x="384" y="4132">{</text>
                <text x="268" y="4148">2.05</text>
                <text x="332" y="4148">(Content),</text>
                <text x="284" y="4164">Observe:</text>
                <text x="328" y="4164">-</text>
                <text x="372" y="4164">(empty),</text>
                <text x="276" y="4180">&lt;Other</text>
                <text x="328" y="4180">class</text>
                <text x="360" y="4180">E</text>
                <text x="408" y="4180">options&gt;,</text>
                <text x="272" y="4196">0xff,</text>
                <text x="284" y="4212">Payload:</text>
                <text x="348" y="4212">"5678"</text>
                <text x="240" y="4228">}</text>
                <text x="308" y="4244">&lt;Countersignature&gt;</text>
                <text x="40" y="4260">(#)</text>
                <text x="260" y="4276">Token:</text>
                <text x="308" y="4276">0x4b</text>
                <text x="36" y="4292">2.05</text>
                <text x="268" y="4292">Observe:</text>
                <text x="328" y="4292">54123</text>
                <text x="264" y="4308">OSCORE:</text>
                <text x="340" y="4308">[kid:0x05,</text>
                <text x="416" y="4308">Partial</text>
                <text x="492" y="4308">IV:0x01f7]</text>
                <text x="268" y="4324">Max-Age:</text>
                <text x="312" y="4324">0</text>
                <text x="260" y="4340">&lt;Other</text>
                <text x="312" y="4340">class</text>
                <text x="352" y="4340">U/I</text>
                <text x="404" y="4340">options&gt;</text>
                <text x="252" y="4356">0xff</text>
                <text x="256" y="4372">(Same</text>
                <text x="352" y="4372">Encrypted_payload</text>
                <text x="256" y="4388">and</text>
                <text x="344" y="4388">Countersignature)</text>
                <text x="104" y="4404">(#)</text>
                <text x="260" y="4420">Token:</text>
                <text x="308" y="4420">0x02</text>
                <text x="100" y="4436">2.05</text>
                <text x="268" y="4436">Observe:</text>
                <text x="328" y="4436">54123</text>
                <text x="264" y="4452">OSCORE:</text>
                <text x="340" y="4452">[kid:0x05,</text>
                <text x="416" y="4452">Partial</text>
                <text x="492" y="4452">IV:0x01f7]</text>
                <text x="268" y="4468">Max-Age:</text>
                <text x="312" y="4468">0</text>
                <text x="260" y="4484">&lt;Other</text>
                <text x="312" y="4484">class</text>
                <text x="352" y="4484">U/I</text>
                <text x="404" y="4484">options&gt;</text>
                <text x="252" y="4500">0xff</text>
                <text x="256" y="4516">(Same</text>
                <text x="352" y="4516">Encrypted_payload</text>
                <text x="256" y="4532">and</text>
                <text x="344" y="4532">Countersignature)</text>
                <text x="16" y="4596">(#)</text>
                <text x="60" y="4596">Sent</text>
                <text x="100" y="4596">over</text>
                <text x="156" y="4596">unicast,</text>
                <text x="208" y="4596">and</text>
                <text x="264" y="4596">protected</text>
                <text x="324" y="4596">with</text>
                <text x="368" y="4596">Group</text>
                <text x="420" y="4596">OSCORE</text>
                <text x="492" y="4596">end-to-end</text>
                <text x="72" y="4612">between</text>
                <text x="120" y="4612">the</text>
                <text x="164" y="4612">server</text>
                <text x="208" y="4612">and</text>
                <text x="240" y="4612">the</text>
                <text x="292" y="4612">clients.</text>
                <text x="20" y="4644">(##)</text>
                <text x="60" y="4644">Sent</text>
                <text x="100" y="4644">over</text>
                <text x="132" y="4644">IP</text>
                <text x="184" y="4644">multicast</text>
                <text x="236" y="4644">to</text>
                <text x="340" y="4644">GROUP_ADDR:GROUP_PORT,</text>
                <text x="472" y="4644">protected</text>
                <text x="84" y="4660">end-to-end</text>
                <text x="148" y="4660">with</text>
                <text x="192" y="4660">Group</text>
                <text x="244" y="4660">OSCORE</text>
                <text x="304" y="4660">between</text>
                <text x="352" y="4660">the</text>
                <text x="396" y="4660">server</text>
                <text x="440" y="4660">and</text>
                <text x="472" y="4660">the</text>
                <text x="524" y="4660">clients.</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
C1      C2      P         S
|       |       |         |
|       |       |         |  (The representation of the
|       |       |         |   resource /r is "1234")
|       |       |         |
+-------------->|         |  Token: 0x4a
| FETCH |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: [kid:0x01, Partial IV:0x65]
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  Proxy-Scheme: "coap"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0.01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       +-------->|  Token: 0x5e
|       |       | FETCH   |  Observe: 0 (register)
|       |       |         |  OSCORE: [kid:0x01, Partial IV:0x65]
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0.01 (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, Partial IV:0x01f5,
|       |       |         |           kid context:0x57ab2e]
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0.01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |  <Countersignature>
|       |       |         |
|       |       |         |  (S steps SN_5 in the Group OSCORE
|       |       |         |   Security Context: SN_5 <-- 502)
|       |       |         |
|       |       |         |  (S creates a group observation of /r)
|       |       |         |
|       |       |         | (S prepares the initial multicast
|       |       |         |  notification INIT_NOTIF below)
|       |       |         |
|       |       |         | 2.05 (Content)
|       |       |         | Token: 0x7b
|       |       |         | Observe: 0
|       |       |         | OSCORE: [kid:0x05, Partial IV:0x01f6]
|       |       |         | <Other class U/I options>
|       |       |         | 0xff
|       |       |         | Encrypted_payload {
|       |       |         |   2.05 (Content),
|       |       |         |   Observe: - (empty),
|       |       |         |   <Other class E options>,
|       |       |         |   0xff,
|       |       |         |   Payload: "1234"
|       |       |         | }
|       |       |         | <Countersignature>
|       |       |         |
|       |       |         | (S steps SN_5 in the Group OSCORE
|       |       |         |  Security Context: SN_5 <-- 503)
|       |       |         |
|       |       |         |  (S increments the observer counter
|       |       |         |   for the group observation of /r)
|       |       |         |
|       |       |<--------+  Token: 0x5e
|       |       | 2.04    |  OSCORE: - (empty)
|       |       |         |  <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 /   5 : "coap://myGM/
|       |       |         |                         ace-group/myGroup",
|       |       |         |      / sec_gp /     6 : "myGroup"
|       |       |         |    }
|       |       |         |  }
|       |       |         |
|<--------------+         |  Token: 0x4a
| 2.04  |       |         |  OSCORE: - (empty)
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload)
|       |       |         |
|  (#)  |       |         |
+-------------->|         |  Token: 0x4b
| FETCH |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: [kid:0x05, Partial IV:0x01f5,
|       |       |         |           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 {
|       |       |         |    0.01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |  <Countersignature>
|       |       |         |
|       |       |         |  (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, Partial IV:0xc9]
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  Proxy-Scheme: "coap"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0.01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       +-------->|  Token: 0x5f
|       |       | FETCH   |  Observe: 0 (register)
|       |       |         |  OSCORE: [kid:0x02, Partial IV:0xc9]
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0.01 (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.04    |  OSCORE: - (empty)
|       |       |         |  <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 /   5 : "coap://myGM/
|       |       |         |                         ace-group/myGroup",
|       |       |         |      / sec_gp /     6 : "myGroup"
|       |       |         |    }
|       |       |         |  }
|       |       |         |
|       |<------+         |  Token: 0x01
|       | 2.04  |         |  OSCORE: - (empty)
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload)
|       |  (#)  |         |
|       +------>|         |  Token: 0x02
|       | FETCH |         |  Observe: 0 (register)
|       |       |         |  OSCORE: [kid:0x05, Partial IV:0x01f5,
|       |       |         |           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 {
|       |       |         |    0.01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |  <Countersignature>
|       |       |         |
|       |       |         |  (The proxy adds C2 to
|       |       |         |   its list of observers)
|       |<------+         |
|       |  ACK  |         |
|       |       |         |

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

|       |       |         |
|       |       |         |  (The representation of the
|       |       |         |   resource /r changes to "5678")
|       |       |         |
|       |       |   (##)  |
|       |       |<--------+  Token: 0x7b
|       |       | 2.05    |  Observe: 11
|       |       |         |  OSCORE: [kid:0x05, Partial IV:0x01f7]
|       |       |         |  Max-Age: 0
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    2.05 (Content),
|       |       |         |    Observe: - (empty),
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    Payload: "5678"
|       |       |         |  }
|       |       |         |  <Countersignature>
|  (#)  |       |         |
|<--------------+         |  Token: 0x4b
| 2.05  |       |         |  Observe: 54123
|       |       |         |  OSCORE: [kid:0x05, Partial IV:0x01f7]
|       |       |         |  Max-Age: 0
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload
|       |       |         |   and Countersignature)
|       |  (#)  |         |
|       |<------+         |  Token: 0x02
|       | 2.05  |         |  Observe: 54123
|       |       |         |  OSCORE: [kid:0x05, Partial IV:0x01f7]
|       |       |         |  Max-Age: 0
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload
|       |       |         |   and Countersignature)
|       |       |         |


(#)  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, protected
     end-to-end with Group OSCORE between the server and the clients.
]]></artwork>
        </artset>
      </figure>
      <t>Unlike in the unprotected example in <xref target="intermediaries-example"/>, the proxy does not 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 with Deterministic Requests</name>
      <t>This section provides an example where 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 section="D" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>), which is protected with the pairwise mode of Group OSCORE as defined in <xref target="I-D.ietf-core-cacheable-oscore"/>.</t>
      <t>Since the server replies to such a Deterministic Request with an informative response that is not protected (see <xref section="D" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>), the proxy is 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>In particular, 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.ietf-core-cacheable-oscore"/>.</t>
      <t><xref section="D" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> discusses how, when using a Deterministic Request as a phantom observation request, the observer counter at the server (see <xref section="4" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>) is not reliably incremented when new clients start participating in the group observation. The same applies also if a proxy is deployed.</t>
      <t>That is, 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>
      <t>Also in this 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>
      <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.ietf-core-cacheable-oscore"/>, stores it locally as one of its issued phantom requests, and starts the corresponding 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 section="A" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).</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.ietf-core-cacheable-oscore"/>, thus all composing the same Deterministic Request to be used as phantom observation request.</t>
          </li>
          <li>
            <t>If a 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 a 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 for the case 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 in <xref target="intermediaries-e2e-security"/>, 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 section="D" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>). 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 section="4.2" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>), 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 section="4.2" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).</t>
          </li>
          <li>
            <t>After receiving the informative response, the proxy proceeds as follows.  </t>
            <t>
If the informative response includes the 'ph_req' parameter and this specifies transport-independent information different from the one of the sent Deterministic Request, then the proxy considers the informative response malformed.  </t>
            <t>
Otherwise, 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.  </t>
            <t>
After that, if the informative response includes the 'last_notif' parameter specifying the latest notification, the proxy caches that notification and forwards it back to the client. Otherwise, the proxy replies with an empty ACK (if it has not done that already and the request from the client was a Confirmable message).</t>
          </li>
          <li>
            <t>Like for the case with a non-deterministic phantom request 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, the latter 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.ietf-core-cacheable-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 section="10" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> 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>C1, C2, and S are members of the OSCORE group with 'kid context' = 0x57ab2e as Group ID.  </t>
            <t>
In the OSCORE group, S has 'kid' = 0x05 as Sender ID and SN_5 = 501 (i.e., 0x01f5) 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 as Sender ID.</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="3776" width="576" viewBox="0 0 576 3776" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,48 L 8,2304" fill="none" stroke="black"/>
                <path d="M 8,2368 L 8,2944" fill="none" stroke="black"/>
                <path d="M 8,3008 L 8,3664" fill="none" stroke="black"/>
                <path d="M 72,48 L 72,1032" fill="none" stroke="black"/>
                <path d="M 72,1048 L 72,2056" fill="none" stroke="black"/>
                <path d="M 72,2072 L 72,2304" fill="none" stroke="black"/>
                <path d="M 72,2368 L 72,2944" fill="none" stroke="black"/>
                <path d="M 72,3008 L 72,3384" fill="none" stroke="black"/>
                <path d="M 72,3400 L 72,3664" fill="none" stroke="black"/>
                <path d="M 136,48 L 136,2304" fill="none" stroke="black"/>
                <path d="M 136,2368 L 136,2944" fill="none" stroke="black"/>
                <path d="M 136,3008 L 136,3664" fill="none" stroke="black"/>
                <path d="M 216,48 L 216,2304" fill="none" stroke="black"/>
                <path d="M 216,2368 L 216,2944" fill="none" stroke="black"/>
                <path d="M 216,3008 L 216,3664" fill="none" stroke="black"/>
                <path d="M 512,1552 L 512,1560" fill="none" stroke="black"/>
                <path d="M 160,256 L 216,256" fill="none" stroke="black"/>
                <path d="M 160,304 L 208,304" fill="none" stroke="black"/>
                <path d="M 432,912 L 448,912" fill="none" stroke="black"/>
                <path d="M 8,1040 L 128,1040" fill="none" stroke="black"/>
                <path d="M 136,1296 L 208,1296" fill="none" stroke="black"/>
                <path d="M 144,1712 L 216,1712" fill="none" stroke="black"/>
                <path d="M 16,2064 L 136,2064" fill="none" stroke="black"/>
                <path d="M 72,2416 L 128,2416" fill="none" stroke="black"/>
                <path d="M 80,2704 L 136,2704" fill="none" stroke="black"/>
                <path d="M 144,3088 L 216,3088" fill="none" stroke="black"/>
                <path d="M 16,3392 L 136,3392" fill="none" stroke="black"/>
                <path d="M 80,3536 L 136,3536" fill="none" stroke="black"/>
                <path d="M 148,280 L 160,304" fill="none" stroke="black"/>
                <path d="M 148,280 L 160,256" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="440,912 428,906.4 428,917.6" fill="black" transform="rotate(180,432,912)"/>
                <polygon class="arrowhead" points="216,1296 204,1290.4 204,1301.6" fill="black" transform="rotate(0,208,1296)"/>
                <polygon class="arrowhead" points="216,304 204,298.4 204,309.6" fill="black" transform="rotate(0,208,304)"/>
                <polygon class="arrowhead" points="152,3088 140,3082.4 140,3093.6" fill="black" transform="rotate(180,144,3088)"/>
                <polygon class="arrowhead" points="152,1712 140,1706.4 140,1717.6" fill="black" transform="rotate(180,144,1712)"/>
                <polygon class="arrowhead" points="136,2416 124,2410.4 124,2421.6" fill="black" transform="rotate(0,128,2416)"/>
                <polygon class="arrowhead" points="136,1040 124,1034.4 124,1045.6" fill="black" transform="rotate(0,128,1040)"/>
                <polygon class="arrowhead" points="88,3536 76,3530.4 76,3541.6" fill="black" transform="rotate(180,80,3536)"/>
                <polygon class="arrowhead" points="88,2704 76,2698.4 76,2709.6" fill="black" transform="rotate(180,80,2704)"/>
                <polygon class="arrowhead" points="24,3392 12,3386.4 12,3397.6" fill="black" transform="rotate(180,16,3392)"/>
                <polygon class="arrowhead" points="24,2064 12,2058.4 12,2069.6" fill="black" transform="rotate(180,16,2064)"/>
                <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="332" y="68">representation</text>
                  <text x="404" y="68">of</text>
                  <text x="432" y="68">the</text>
                  <text x="276" y="84">resource</text>
                  <text x="324" y="84">/r</text>
                  <text x="348" y="84">is</text>
                  <text x="392" y="84">"1234")</text>
                  <text x="244" y="116">(S</text>
                  <text x="296" y="116">allocates</text>
                  <text x="352" y="116">the</text>
                  <text x="408" y="116">available</text>
                  <text x="264" y="132">Token</text>
                  <text x="312" y="132">value</text>
                  <text x="360" y="132">0x7b)</text>
                  <text x="244" y="164">(S</text>
                  <text x="280" y="164">sends</text>
                  <text x="316" y="164">to</text>
                  <text x="356" y="164">itself</text>
                  <text x="392" y="164">a</text>
                  <text x="432" y="164">phantom</text>
                  <text x="512" y="164">observation</text>
                  <text x="272" y="180">request</text>
                  <text x="332" y="180">PH_REQ</text>
                  <text x="372" y="180">as</text>
                  <text x="412" y="180">coming</text>
                  <text x="460" y="180">from</text>
                  <text x="496" y="180">the</text>
                  <text x="252" y="196">IP</text>
                  <text x="304" y="196">multicast</text>
                  <text x="376" y="196">address</text>
                  <text x="448" y="196">GRP_ADDR.</text>
                  <text x="256" y="212">The</text>
                  <text x="296" y="212">Group</text>
                  <text x="348" y="212">OSCORE</text>
                  <text x="420" y="212">processing</text>
                  <text x="492" y="212">occurs</text>
                  <text x="532" y="212">as</text>
                  <text x="280" y="228">specified</text>
                  <text x="336" y="228">for</text>
                  <text x="360" y="228">a</text>
                  <text x="424" y="228">Deterministic</text>
                  <text x="516" y="228">Request)</text>
                  <text x="260" y="308">Token:</text>
                  <text x="308" y="308">0x7b</text>
                  <text x="184" y="324">FETCH</text>
                  <text x="272" y="324">Uri-Host:</text>
                  <text x="380" y="324">"sensor.example"</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="340" y="356">[kid:0x09,</text>
                  <text x="416" y="356">Partial</text>
                  <text x="464" y="356">IV:</text>
                  <text x="504" y="356">0x00,</text>
                  <text x="320" y="372">kid</text>
                  <text x="408" y="372">context:0x57ab2e]</text>
                  <text x="288" y="388">Request-Hash:</text>
                  <text x="388" y="388">0x4a086e65</text>
                  <text x="448" y="388">...</text>
                  <text x="260" y="404">&lt;Other</text>
                  <text x="312" y="404">class</text>
                  <text x="352" y="404">U/I</text>
                  <text x="404" y="404">options&gt;</text>
                  <text x="252" y="420">0xff</text>
                  <text x="304" y="436">Encrypted_payload</text>
                  <text x="384" y="436">{</text>
                  <text x="268" y="452">0.01</text>
                  <text x="316" y="452">(GET),</text>
                  <text x="284" y="468">Observe:</text>
                  <text x="328" y="468">0</text>
                  <text x="384" y="468">(register),</text>
                  <text x="288" y="484">Uri-Path:</text>
                  <text x="348" y="484">"r",</text>
                  <text x="276" y="500">&lt;Other</text>
                  <text x="328" y="500">class</text>
                  <text x="360" y="500">E</text>
                  <text x="404" y="500">options&gt;</text>
                  <text x="240" y="516">}</text>
                  <text x="244" y="548">(S</text>
                  <text x="288" y="548">creates</text>
                  <text x="328" y="548">a</text>
                  <text x="360" y="548">group</text>
                  <text x="432" y="548">observation</text>
                  <text x="492" y="548">of</text>
                  <text x="520" y="548">/r)</text>
                  <text x="244" y="580">(S</text>
                  <text x="292" y="580">prepares</text>
                  <text x="344" y="580">the</text>
                  <text x="392" y="580">initial</text>
                  <text x="464" y="580">multicast</text>
                  <text x="292" y="596">notification</text>
                  <text x="388" y="596">INIT_NOTIF</text>
                  <text x="460" y="596">below)</text>
                  <text x="252" y="628">2.05</text>
                  <text x="312" y="628">(Content)</text>
                  <text x="260" y="644">Token:</text>
                  <text x="308" y="644">0x7b</text>
                  <text x="268" y="660">Observe:</text>
                  <text x="316" y="660">10</text>
                  <text x="264" y="676">OSCORE:</text>
                  <text x="340" y="676">[kid:0x05,</text>
                  <text x="416" y="676">Partial</text>
                  <text x="492" y="676">IV:0x01f5]</text>
                  <text x="268" y="692">Max-Age:</text>
                  <text x="324" y="692">3000</text>
                  <text x="260" y="708">&lt;Other</text>
                  <text x="312" y="708">class</text>
                  <text x="352" y="708">U/I</text>
                  <text x="404" y="708">options&gt;</text>
                  <text x="252" y="724">0xff</text>
                  <text x="304" y="740">Encrypted_payload</text>
                  <text x="384" y="740">{</text>
                  <text x="268" y="756">2.05</text>
                  <text x="332" y="756">(Content),</text>
                  <text x="284" y="772">Observe:</text>
                  <text x="328" y="772">-</text>
                  <text x="372" y="772">(empty),</text>
                  <text x="284" y="788">Max-Age:</text>
                  <text x="344" y="788">3000,</text>
                  <text x="276" y="804">&lt;Other</text>
                  <text x="328" y="804">class</text>
                  <text x="360" y="804">E</text>
                  <text x="408" y="804">options&gt;,</text>
                  <text x="272" y="820">0xff,</text>
                  <text x="284" y="836">Payload:</text>
                  <text x="348" y="836">"1234"</text>
                  <text x="240" y="852">}</text>
                  <text x="308" y="868">&lt;Countersignature&gt;</text>
                  <text x="244" y="900">(S</text>
                  <text x="280" y="900">steps</text>
                  <text x="324" y="900">SN_5</text>
                  <text x="356" y="900">in</text>
                  <text x="384" y="900">the</text>
                  <text x="424" y="900">Group</text>
                  <text x="476" y="900">OSCORE</text>
                  <text x="276" y="916">Security</text>
                  <text x="348" y="916">Context:</text>
                  <text x="404" y="916">SN_5</text>
                  <text x="476" y="916">502)</text>
                  <text x="252" y="948">(The</text>
                  <text x="300" y="948">server</text>
                  <text x="348" y="948">does</text>
                  <text x="384" y="948">not</text>
                  <text x="432" y="948">respond</text>
                  <text x="476" y="948">to</text>
                  <text x="520" y="948">PH_REQ.</text>
                  <text x="256" y="964">The</text>
                  <text x="300" y="964">server</text>
                  <text x="356" y="964">stores</text>
                  <text x="412" y="964">PH_REQ</text>
                  <text x="472" y="964">locally</text>
                  <text x="520" y="964">and</text>
                  <text x="264" y="980">makes</text>
                  <text x="300" y="980">it</text>
                  <text x="352" y="980">available</text>
                  <text x="404" y="980">at</text>
                  <text x="428" y="980">an</text>
                  <text x="476" y="980">external</text>
                  <text x="544" y="980">source)</text>
                  <text x="248" y="1012">(C1</text>
                  <text x="296" y="1012">obtains</text>
                  <text x="356" y="1012">PH_REQ</text>
                  <text x="400" y="1012">and</text>
                  <text x="440" y="1012">sends</text>
                  <text x="476" y="1012">it</text>
                  <text x="500" y="1012">to</text>
                  <text x="524" y="1012">P)</text>
                  <text x="260" y="1044">Token:</text>
                  <text x="308" y="1044">0x4a</text>
                  <text x="40" y="1060">FETCH</text>
                  <text x="272" y="1060">Uri-Host:</text>
                  <text x="380" y="1060">"sensor.example"</text>
                  <text x="268" y="1076">Observe:</text>
                  <text x="312" y="1076">0</text>
                  <text x="364" y="1076">(register)</text>
                  <text x="264" y="1092">OSCORE:</text>
                  <text x="340" y="1092">[kid:0x09,</text>
                  <text x="416" y="1092">Partial</text>
                  <text x="464" y="1092">IV:</text>
                  <text x="504" y="1092">0x00,</text>
                  <text x="320" y="1108">kid</text>
                  <text x="408" y="1108">context:0x57ab2e]</text>
                  <text x="288" y="1124">Proxy-Scheme:</text>
                  <text x="372" y="1124">"coap"</text>
                  <text x="288" y="1140">Request-Hash:</text>
                  <text x="388" y="1140">0x4a086e65</text>
                  <text x="448" y="1140">...</text>
                  <text x="260" y="1156">&lt;Other</text>
                  <text x="312" y="1156">class</text>
                  <text x="352" y="1156">U/I</text>
                  <text x="404" y="1156">options&gt;</text>
                  <text x="252" y="1172">0xff</text>
                  <text x="304" y="1188">Encrypted_payload</text>
                  <text x="384" y="1188">{</text>
                  <text x="268" y="1204">0.01</text>
                  <text x="316" y="1204">(GET),</text>
                  <text x="284" y="1220">Observe:</text>
                  <text x="328" y="1220">0</text>
                  <text x="384" y="1220">(register),</text>
                  <text x="288" y="1236">Uri-Path:</text>
                  <text x="348" y="1236">"r",</text>
                  <text x="276" y="1252">&lt;Other</text>
                  <text x="328" y="1252">class</text>
                  <text x="360" y="1252">E</text>
                  <text x="404" y="1252">options&gt;</text>
                  <text x="240" y="1268">}</text>
                  <text x="260" y="1300">Token:</text>
                  <text x="308" y="1300">0x5e</text>
                  <text x="168" y="1316">FETCH</text>
                  <text x="272" y="1316">Uri-Host:</text>
                  <text x="380" y="1316">"sensor.example"</text>
                  <text x="268" y="1332">Observe:</text>
                  <text x="312" y="1332">0</text>
                  <text x="364" y="1332">(register)</text>
                  <text x="264" y="1348">OSCORE:</text>
                  <text x="340" y="1348">[kid:0x09,</text>
                  <text x="416" y="1348">Partial</text>
                  <text x="464" y="1348">IV:</text>
                  <text x="504" y="1348">0x00,</text>
                  <text x="320" y="1364">kid</text>
                  <text x="408" y="1364">context:0x57ab2e]</text>
                  <text x="288" y="1380">Request-Hash:</text>
                  <text x="388" y="1380">0x4a086e65</text>
                  <text x="448" y="1380">...</text>
                  <text x="260" y="1396">&lt;Other</text>
                  <text x="312" y="1396">class</text>
                  <text x="352" y="1396">U/I</text>
                  <text x="404" y="1396">options&gt;</text>
                  <text x="252" y="1412">0xff</text>
                  <text x="304" y="1428">Encrypted_payload</text>
                  <text x="384" y="1428">{</text>
                  <text x="268" y="1444">0.01</text>
                  <text x="316" y="1444">(GET),</text>
                  <text x="284" y="1460">Observe:</text>
                  <text x="328" y="1460">0</text>
                  <text x="384" y="1460">(register),</text>
                  <text x="288" y="1476">Uri-Path:</text>
                  <text x="348" y="1476">"r",</text>
                  <text x="276" y="1492">&lt;Other</text>
                  <text x="328" y="1492">class</text>
                  <text x="360" y="1492">E</text>
                  <text x="404" y="1492">options&gt;</text>
                  <text x="240" y="1508">}</text>
                  <text x="244" y="1540">(S</text>
                  <text x="300" y="1540">recognizes</text>
                  <text x="372" y="1540">PH_REQ</text>
                  <text x="432" y="1540">through</text>
                  <text x="516" y="1540">byte-by-byte</text>
                  <text x="284" y="1556">comparison</text>
                  <text x="360" y="1556">against</text>
                  <text x="408" y="1556">the</text>
                  <text x="452" y="1556">stored</text>
                  <text x="496" y="1556">one</text>
                  <text x="536" y="1556">and</text>
                  <text x="264" y="1572">skips</text>
                  <text x="304" y="1572">any</text>
                  <text x="344" y="1572">Group</text>
                  <text x="396" y="1572">OSCORE</text>
                  <text x="472" y="1572">processing)</text>
                  <text x="244" y="1604">(S</text>
                  <text x="300" y="1604">increments</text>
                  <text x="360" y="1604">the</text>
                  <text x="412" y="1604">observer</text>
                  <text x="480" y="1604">counter</text>
                  <text x="256" y="1620">for</text>
                  <text x="288" y="1620">the</text>
                  <text x="328" y="1620">group</text>
                  <text x="400" y="1620">observation</text>
                  <text x="460" y="1620">of</text>
                  <text x="488" y="1620">/r)</text>
                  <text x="244" y="1652">(S</text>
                  <text x="292" y="1652">responds</text>
                  <text x="340" y="1652">to</text>
                  <text x="368" y="1652">the</text>
                  <text x="408" y="1652">proxy</text>
                  <text x="452" y="1652">with</text>
                  <text x="484" y="1652">an</text>
                  <text x="288" y="1668">unprotected</text>
                  <text x="384" y="1668">informative</text>
                  <text x="472" y="1668">response)</text>
                  <text x="176" y="1700">(#)</text>
                  <text x="260" y="1716">Token:</text>
                  <text x="308" y="1716">0x5e</text>
                  <text x="164" y="1732">5.03</text>
                  <text x="296" y="1732">Content-Format:</text>
                  <text x="412" y="1732">application/</text>
                  <text x="352" y="1748">informative-response+cbor</text>
                  <text x="268" y="1764">Max-Age:</text>
                  <text x="312" y="1764">0</text>
                  <text x="252" y="1780">0xff</text>
                  <text x="264" y="1796">Payload</text>
                  <text x="304" y="1796">{</text>
                  <text x="256" y="1812">/</text>
                  <text x="296" y="1812">tp_info</text>
                  <text x="336" y="1812">/</text>
                  <text x="376" y="1812">0</text>
                  <text x="392" y="1812">:</text>
                  <text x="408" y="1812">[</text>
                  <text x="432" y="1828">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                  <text x="448" y="1844">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                  <text x="364" y="1860">0x7b],</text>
                  <text x="256" y="1876">/</text>
                  <text x="308" y="1876">last_notif</text>
                  <text x="360" y="1876">/</text>
                  <text x="376" y="1876">2</text>
                  <text x="392" y="1876">:</text>
                  <text x="424" y="1876">&lt;this</text>
                  <text x="480" y="1876">conveys</text>
                  <text x="528" y="1876">the</text>
                  <text x="452" y="1892">INIT_NOTIF</text>
                  <text x="532" y="1892">response</text>
                  <text x="444" y="1908">prepared</text>
                  <text x="508" y="1908">above&gt;</text>
                  <text x="240" y="1924">}</text>
                  <text x="244" y="1956">(P</text>
                  <text x="292" y="1956">extracts</text>
                  <text x="356" y="1956">PH_REQ</text>
                  <text x="400" y="1956">and</text>
                  <text x="444" y="1956">starts</text>
                  <text x="512" y="1956">listening</text>
                  <text x="252" y="1972">to</text>
                  <text x="304" y="1972">multicast</text>
                  <text x="400" y="1972">notifications</text>
                  <text x="476" y="1972">with</text>
                  <text x="520" y="1972">Token</text>
                  <text x="260" y="1988">0x7b</text>
                  <text x="292" y="1988">at</text>
                  <text x="380" y="1988">GRP_ADDR:GRP_PORT)</text>
                  <text x="244" y="2020">(P</text>
                  <text x="292" y="2020">extracts</text>
                  <text x="344" y="2020">the</text>
                  <text x="404" y="2020">INIT_NOTIF</text>
                  <text x="488" y="2020">response,</text>
                  <text x="268" y="2036">caches</text>
                  <text x="312" y="2036">it,</text>
                  <text x="344" y="2036">and</text>
                  <text x="396" y="2036">forwards</text>
                  <text x="444" y="2036">it</text>
                  <text x="476" y="2036">back</text>
                  <text x="508" y="2036">to</text>
                  <text x="536" y="2036">C1)</text>
                  <text x="260" y="2068">Token:</text>
                  <text x="308" y="2068">0x4a</text>
                  <text x="36" y="2084">2.05</text>
                  <text x="268" y="2084">Observe:</text>
                  <text x="328" y="2084">54120</text>
                  <text x="264" y="2100">OSCORE:</text>
                  <text x="340" y="2100">[kid:0x05,</text>
                  <text x="416" y="2100">Partial</text>
                  <text x="492" y="2100">IV:0x01f5]</text>
                  <text x="268" y="2116">Max-Age:</text>
                  <text x="324" y="2116">2995</text>
                  <text x="260" y="2132">&lt;Other</text>
                  <text x="312" y="2132">class</text>
                  <text x="352" y="2132">U/I</text>
                  <text x="404" y="2132">options&gt;</text>
                  <text x="252" y="2148">0xff</text>
                  <text x="304" y="2164">Encrypted_payload</text>
                  <text x="384" y="2164">{</text>
                  <text x="268" y="2180">0x45</text>
                  <text x="312" y="2180">(2.05</text>
                  <text x="376" y="2180">Content),</text>
                  <text x="284" y="2196">Observe:</text>
                  <text x="328" y="2196">-</text>
                  <text x="372" y="2196">(empty),</text>
                  <text x="284" y="2212">Max-Age:</text>
                  <text x="344" y="2212">3000,</text>
                  <text x="276" y="2228">&lt;Other</text>
                  <text x="328" y="2228">class</text>
                  <text x="360" y="2228">E</text>
                  <text x="408" y="2228">options&gt;,</text>
                  <text x="272" y="2244">0xff,</text>
                  <text x="284" y="2260">Payload:</text>
                  <text x="348" y="2260">"1234"</text>
                  <text x="240" y="2276">}</text>
                  <text x="308" y="2292">&lt;Countersignature&gt;</text>
                  <text x="16" y="2340">...</text>
                  <text x="72" y="2340">...</text>
                  <text x="136" y="2340">...</text>
                  <text x="208" y="2340">...</text>
                  <text x="248" y="2388">(C2</text>
                  <text x="296" y="2388">obtains</text>
                  <text x="356" y="2388">PH_REQ</text>
                  <text x="400" y="2388">and</text>
                  <text x="440" y="2388">sends</text>
                  <text x="476" y="2388">it</text>
                  <text x="500" y="2388">to</text>
                  <text x="524" y="2388">P)</text>
                  <text x="260" y="2420">Token:</text>
                  <text x="308" y="2420">0x01</text>
                  <text x="104" y="2436">FETCH</text>
                  <text x="272" y="2436">Uri-Host:</text>
                  <text x="380" y="2436">"sensor.example"</text>
                  <text x="268" y="2452">Observe:</text>
                  <text x="312" y="2452">0</text>
                  <text x="364" y="2452">(register)</text>
                  <text x="264" y="2468">OSCORE:</text>
                  <text x="340" y="2468">[kid:0x09,</text>
                  <text x="416" y="2468">Partial</text>
                  <text x="464" y="2468">IV:</text>
                  <text x="504" y="2468">0x00,</text>
                  <text x="320" y="2484">kid</text>
                  <text x="408" y="2484">context:0x57ab2e]</text>
                  <text x="288" y="2500">Proxy-Scheme:</text>
                  <text x="372" y="2500">"coap"</text>
                  <text x="288" y="2516">Request-Hash:</text>
                  <text x="388" y="2516">0x4a086e65</text>
                  <text x="448" y="2516">...</text>
                  <text x="260" y="2532">&lt;Other</text>
                  <text x="312" y="2532">class</text>
                  <text x="352" y="2532">U/I</text>
                  <text x="404" y="2532">options&gt;</text>
                  <text x="252" y="2548">0xff</text>
                  <text x="304" y="2564">Encrypted_payload</text>
                  <text x="384" y="2564">{</text>
                  <text x="268" y="2580">0.01</text>
                  <text x="316" y="2580">(GET),</text>
                  <text x="284" y="2596">Observe:</text>
                  <text x="328" y="2596">0</text>
                  <text x="384" y="2596">(register),</text>
                  <text x="288" y="2612">Uri-Path:</text>
                  <text x="348" y="2612">"r",</text>
                  <text x="276" y="2628">&lt;Other</text>
                  <text x="328" y="2628">class</text>
                  <text x="360" y="2628">E</text>
                  <text x="404" y="2628">options&gt;</text>
                  <text x="240" y="2644">}</text>
                  <text x="244" y="2676">(P</text>
                  <text x="284" y="2676">serves</text>
                  <text x="324" y="2676">C2</text>
                  <text x="356" y="2676">from</text>
                  <text x="388" y="2676">it</text>
                  <text x="428" y="2676">cache)</text>
                  <text x="260" y="2708">Token:</text>
                  <text x="308" y="2708">0x01</text>
                  <text x="100" y="2724">2.05</text>
                  <text x="268" y="2724">Observe:</text>
                  <text x="328" y="2724">54120</text>
                  <text x="264" y="2740">OSCORE:</text>
                  <text x="340" y="2740">[kid:0x05,</text>
                  <text x="416" y="2740">Partial</text>
                  <text x="492" y="2740">IV:0x01f5]</text>
                  <text x="268" y="2756">Max-Age:</text>
                  <text x="324" y="2756">1800</text>
                  <text x="260" y="2772">&lt;Other</text>
                  <text x="312" y="2772">class</text>
                  <text x="352" y="2772">U/I</text>
                  <text x="404" y="2772">options&gt;</text>
                  <text x="252" y="2788">0xff</text>
                  <text x="304" y="2804">Encrypted_payload</text>
                  <text x="384" y="2804">{</text>
                  <text x="268" y="2820">0x45</text>
                  <text x="312" y="2820">(2.05</text>
                  <text x="376" y="2820">Content),</text>
                  <text x="284" y="2836">Observe:</text>
                  <text x="328" y="2836">-</text>
                  <text x="372" y="2836">(empty),</text>
                  <text x="284" y="2852">Max-Age:</text>
                  <text x="344" y="2852">3000,</text>
                  <text x="276" y="2868">&lt;Other</text>
                  <text x="328" y="2868">class</text>
                  <text x="360" y="2868">E</text>
                  <text x="408" y="2868">options&gt;,</text>
                  <text x="272" y="2884">0xff,</text>
                  <text x="284" y="2900">Payload:</text>
                  <text x="348" y="2900">"1234"</text>
                  <text x="240" y="2916">}</text>
                  <text x="308" y="2932">&lt;Countersignature&gt;</text>
                  <text x="16" y="2980">...</text>
                  <text x="72" y="2980">...</text>
                  <text x="136" y="2980">...</text>
                  <text x="208" y="2980">...</text>
                  <text x="252" y="3028">(The</text>
                  <text x="332" y="3028">representation</text>
                  <text x="404" y="3028">of</text>
                  <text x="432" y="3028">the</text>
                  <text x="276" y="3044">resource</text>
                  <text x="324" y="3044">/r</text>
                  <text x="368" y="3044">changes</text>
                  <text x="412" y="3044">to</text>
                  <text x="456" y="3044">"5678")</text>
                  <text x="180" y="3076">(##)</text>
                  <text x="260" y="3092">Token:</text>
                  <text x="308" y="3092">0x7b</text>
                  <text x="164" y="3108">2.05</text>
                  <text x="268" y="3108">Observe:</text>
                  <text x="316" y="3108">11</text>
                  <text x="264" y="3124">OSCORE:</text>
                  <text x="340" y="3124">[kid:0x05,</text>
                  <text x="416" y="3124">Partial</text>
                  <text x="492" y="3124">IV:0x01f6]</text>
                  <text x="268" y="3140">Max-Age:</text>
                  <text x="324" y="3140">3000</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="304" y="3188">Encrypted_payload</text>
                  <text x="384" y="3188">{</text>
                  <text x="268" y="3204">2.05</text>
                  <text x="332" y="3204">(Content),</text>
                  <text x="284" y="3220">Observe:</text>
                  <text x="328" y="3220">-</text>
                  <text x="372" y="3220">(empty),</text>
                  <text x="284" y="3236">Max-Age:</text>
                  <text x="344" y="3236">3000,</text>
                  <text x="276" y="3252">&lt;Other</text>
                  <text x="328" y="3252">class</text>
                  <text x="360" y="3252">E</text>
                  <text x="408" y="3252">options&gt;,</text>
                  <text x="272" y="3268">0xff,</text>
                  <text x="284" y="3284">Payload:</text>
                  <text x="348" y="3284">"5678"</text>
                  <text x="240" y="3300">}</text>
                  <text x="308" y="3316">&lt;Countersignature&gt;</text>
                  <text x="244" y="3348">(P</text>
                  <text x="288" y="3348">updates</text>
                  <text x="336" y="3348">its</text>
                  <text x="376" y="3348">cache</text>
                  <text x="424" y="3348">entry</text>
                  <text x="260" y="3364">with</text>
                  <text x="300" y="3364">this</text>
                  <text x="376" y="3364">notification)</text>
                  <text x="260" y="3396">Token:</text>
                  <text x="308" y="3396">0x4a</text>
                  <text x="36" y="3412">2.05</text>
                  <text x="268" y="3412">Observe:</text>
                  <text x="328" y="3412">54123</text>
                  <text x="264" y="3428">OSCORE:</text>
                  <text x="340" y="3428">[kid:0x05,</text>
                  <text x="416" y="3428">Partial</text>
                  <text x="492" y="3428">IV:0x01f6]</text>
                  <text x="268" y="3444">Max-Age:</text>
                  <text x="324" y="3444">2998</text>
                  <text x="260" y="3460">&lt;Other</text>
                  <text x="312" y="3460">class</text>
                  <text x="352" y="3460">U/I</text>
                  <text x="404" y="3460">options&gt;</text>
                  <text x="252" y="3476">0xff</text>
                  <text x="256" y="3492">(Same</text>
                  <text x="352" y="3492">Encrypted_payload</text>
                  <text x="256" y="3508">and</text>
                  <text x="344" y="3508">Countersignature)</text>
                  <text x="260" y="3540">Token:</text>
                  <text x="308" y="3540">0x01</text>
                  <text x="100" y="3556">2.05</text>
                  <text x="268" y="3556">Observe:</text>
                  <text x="328" y="3556">54123</text>
                  <text x="264" y="3572">OSCORE:</text>
                  <text x="340" y="3572">[kid:0x05,</text>
                  <text x="416" y="3572">Partial</text>
                  <text x="492" y="3572">IV:0x01f6]</text>
                  <text x="268" y="3588">Max-Age:</text>
                  <text x="324" y="3588">2996</text>
                  <text x="260" y="3604">&lt;Other</text>
                  <text x="312" y="3604">class</text>
                  <text x="352" y="3604">U/I</text>
                  <text x="404" y="3604">options&gt;</text>
                  <text x="252" y="3620">0xff</text>
                  <text x="256" y="3636">(Same</text>
                  <text x="352" y="3636">Encrypted_payload</text>
                  <text x="256" y="3652">and</text>
                  <text x="344" y="3652">Countersignature)</text>
                  <text x="16" y="3716">(#)</text>
                  <text x="60" y="3716">Sent</text>
                  <text x="100" y="3716">over</text>
                  <text x="152" y="3716">unicast</text>
                  <text x="200" y="3716">and</text>
                  <text x="268" y="3716">unprotected.</text>
                  <text x="20" y="3748">(##)</text>
                  <text x="60" y="3748">Sent</text>
                  <text x="100" y="3748">over</text>
                  <text x="132" y="3748">IP</text>
                  <text x="184" y="3748">multicast</text>
                  <text x="236" y="3748">to</text>
                  <text x="340" y="3748">GROUP_ADDR:GROUP_PORT,</text>
                  <text x="472" y="3748">protected</text>
                  <text x="84" y="3764">end-to-end</text>
                  <text x="148" y="3764">with</text>
                  <text x="192" y="3764">Group</text>
                  <text x="244" y="3764">OSCORE</text>
                  <text x="304" y="3764">between</text>
                  <text x="352" y="3764">the</text>
                  <text x="396" y="3764">server</text>
                  <text x="440" y="3764">and</text>
                  <text x="472" y="3764">the</text>
                  <text x="524" y="3764">clients.</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
C1      C2      P         S
|       |       |         |
|       |       |         |  (The representation 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, Partial IV: 0x00,
|       |       |         |           kid context:0x57ab2e]
|       |       |         |  Request-Hash: 0x4a086e65 ...
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0.01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       |         |  (S creates a group observation of /r)
|       |       |         |
|       |       |         |  (S prepares the initial multicast
|       |       |         |   notification INIT_NOTIF below)
|       |       |         |
|       |       |         |  2.05 (Content)
|       |       |         |  Token: 0x7b
|       |       |         |  Observe: 10
|       |       |         |  OSCORE: [kid:0x05, Partial IV:0x01f5]
|       |       |         |  Max-Age: 3000
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    2.05 (Content),
|       |       |         |    Observe: - (empty),
|       |       |         |    Max-Age: 3000,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    Payload: "1234"
|       |       |         |  }
|       |       |         |  <Countersignature>
|       |       |         |
|       |       |         |  (S steps SN_5 in the Group OSCORE
|       |       |         |   Security Context: SN_5 <-- 502)
|       |       |         |
|       |       |         |  (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, Partial IV: 0x00,
|       |       |         |           kid context:0x57ab2e]
|       |       |         |  Proxy-Scheme: "coap"
|       |       |         |  Request-Hash: 0x4a086e65 ...
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0.01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       +-------->|  Token: 0x5e
|       |       | FETCH   |  Uri-Host: "sensor.example"
|       |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: [kid:0x09, Partial IV: 0x00,
|       |       |         |           kid context:0x57ab2e]
|       |       |         |  Request-Hash: 0x4a086e65 ...
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0.01 (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 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
|       |       |         |                        INIT_NOTIF response
|       |       |         |                        prepared above>
|       |       |         |  }
|       |       |         |
|       |       |         |  (P extracts PH_REQ and starts listening
|       |       |         |   to multicast notifications with Token
|       |       |         |   0x7b at GRP_ADDR:GRP_PORT)
|       |       |         |
|       |       |         |  (P extracts the INIT_NOTIF response,
|       |       |         |   caches it, and forwards it back to C1)
|       |       |         |
|<--------------+         |  Token: 0x4a
| 2.05  |       |         |  Observe: 54120
|       |       |         |  OSCORE: [kid:0x05, Partial IV:0x01f5]
|       |       |         |  Max-Age: 2995
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x45 (2.05 Content),
|       |       |         |    Observe: - (empty),
|       |       |         |    Max-Age: 3000,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    Payload: "1234"
|       |       |         |  }
|       |       |         |  <Countersignature>
|       |       |         |

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

|       |       |         |
|       |       |         |  (C2 obtains PH_REQ and sends it to P)
|       |       |         |
|       +------>|         |  Token: 0x01
|       | FETCH |         |  Uri-Host: "sensor.example"
|       |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: [kid:0x09, Partial IV: 0x00,
|       |       |         |           kid context:0x57ab2e]
|       |       |         |  Proxy-Scheme: "coap"
|       |       |         |  Request-Hash: 0x4a086e65 ...
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0.01 (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, Partial IV:0x01f5]
|       |       |         |  Max-Age: 1800
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x45 (2.05 Content),
|       |       |         |    Observe: - (empty),
|       |       |         |    Max-Age: 3000,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    Payload: "1234"
|       |       |         |  }
|       |       |         |  <Countersignature>
|       |       |         |

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

|       |       |         |
|       |       |         |  (The representation of the
|       |       |         |   resource /r changes to "5678")
|       |       |         |
|       |       |   (##)  |
|       |       |<--------+  Token: 0x7b
|       |       | 2.05    |  Observe: 11
|       |       |         |  OSCORE: [kid:0x05, Partial IV:0x01f6]
|       |       |         |  Max-Age: 3000
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    2.05 (Content),
|       |       |         |    Observe: - (empty),
|       |       |         |    Max-Age: 3000,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    Payload: "5678"
|       |       |         |  }
|       |       |         |  <Countersignature>
|       |       |         |
|       |       |         |  (P updates its cache entry
|       |       |         |   with this notification)
|       |       |         |
|<--------------+         |  Token: 0x4a
| 2.05  |       |         |  Observe: 54123
|       |       |         |  OSCORE: [kid:0x05, Partial IV:0x01f6]
|       |       |         |  Max-Age: 2998
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload
|       |       |         |   and Countersignature)
|       |       |         |
|       |<------+         |  Token: 0x01
|       | 2.05  |         |  Observe: 54123
|       |       |         |  OSCORE: [kid:0x05, Partial IV:0x01f6]
|       |       |         |  Max-Age: 2996
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload
|       |       |         |   and Countersignature)
|       |       |         |


(#)  Sent over unicast and unprotected.

(##) Sent over IP multicast to GROUP_ADDR:GROUP_PORT, protected
     end-to-end with Group OSCORE between the server and the clients.
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="intermediaries-example-e2e-security-det-rev-proxy">
      <name>Example with a Reverse-Proxy and with Deterministic Requests</name>
      <t>This section describes an example where specifically a reverse-proxy PRX is used between the clients and the server (see <xref section="5.7.3" sectionFormat="of" target="RFC7252"/>).</t>
      <t>Like for the example in <xref target="intermediaries-example-e2e-security-det"/>, the phantom request is especially a Deterministic Request (see <xref section="D" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>), which is protected with the pairwise mode of Group OSCORE as defined in <xref target="I-D.ietf-core-cacheable-oscore"/>.</t>
      <t>The same assumptions compiled in <xref target="intermediaries-example-e2e-security-det-intro"/> apply in this scenario too, with the following differences:</t>
      <ul spacing="normal">
        <li>
          <t>Assumption (2): when the server makes the phantom request available through other means (see <xref section="A" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>), the accompanying group observation data does <em>not</em> specify client-side transport-specific information for listening to multicast notifications bound to the phantom request.</t>
        </li>
        <li>
          <t>Assumption (4): this assumption does not apply, since all the clients rely on PRX, although they are not aware to communicate with a proxy.</t>
        </li>
      </ul>
      <t>Furthermore, the following assumptions apply to this scenario:</t>
      <ul spacing="normal">
        <li>
          <t>The proxy has address PRX_ADDR and listens to the port number PRX_PORT. In particular, PRX exposes PRX_ADDR and PRX_PORT to clients when acting as stand-in for the server.  </t>
          <t>
That is, a request sent with destination address PRX_ADDR and port number PRX_PORT will reach PRX, which forwards the request to the server.</t>
        </li>
        <li>
          <t>The server knows the address PRX_ADDR and port number PRX_PORT that PRX exposes to clients.</t>
        </li>
        <li>
          <t>When the server makes the phantom request available through other means (see <xref section="A" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>), the accompanying group observation data is such that:  </t>
          <ul spacing="normal">
            <li>
              <t>It provides server-side, transport-specific information, which consists of the address PRX_ADDR and port number PRX_PORT associated with PRX.</t>
            </li>
            <li>
              <t>It does not provide any client-side transport-specific information.</t>
            </li>
          </ul>
          <t>
Assuming that the group information data has a format consistent with the 'tp_info' array of the informative response (see <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>), this means that the 'tp_info' array includes only the 'tpi_server' element specifying a CRI with addressing information PRX_ADDR and PRX_PORT (i.e., targeting PRX). That is, 'tp_info' does not include the 'tpi_details' element, regardless of what is expected as per the transport used.</t>
        </li>
      </ul>
      <section anchor="rev-proxy-main-process">
        <name>Taking Part in Group Observations</name>
        <t>The rest of this section describes how a client can take part in a group observation.</t>
        <t>If any of the following conditions does not hold, then the client first performs the initialization procedure described in <xref target="rev-proxy-client-pre-steps"/>.</t>
        <ul spacing="normal">
          <li>
            <t>The client has already obtained the group observation data specifying the deterministic phantom request, which the server has made available through other means (see <xref section="A" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).</t>
          </li>
          <li>
            <t>The client is already a member of the correct OSCORE group.</t>
          </li>
        </ul>
        <t>The main process consists of the following steps.</t>
        <ol spacing="normal" type="1"><li>
            <t>From the group observation data, the client knows the deterministic phantom request PH_REQ, the address PRX_ADDR, and the port number PRX_PORT. However, the client does not have client-side transport-specific information.  </t>
            <t>
In such a particular situation, the client sends PH_REQ with destination address PRX_ADDR and port number PRX_PORT, i.e., to PRX.</t>
          </li>
          <li>
            <t>Upon receiving PH_REQ, PRX performs the same actions that are performed by the proxy in the scenario of <xref target="intermediaries-example-e2e-security-det"/>.  </t>
            <t>
That is, if PH_REQ results in a cache hit at PRX, then PRX replies to the client with the latest multicast notification for the target resource from its cache and takes no further actions.  </t>
            <t>
Otherwise, PRX forwards PH_REQ to the server. After recognizing PH_REQ byte-by-byte, the server replies to PRX with an unprotected informative response, where 'tp_info' includes:  </t>
            <ul spacing="normal">
              <li>
                <t>The 'tpi_server' element, specifying the addressing information of the server, i.e., the source addressing information of the multicast notifications that are sent for the group observation.</t>
              </li>
              <li>
                <t>The 'tpi_details' element, specifying the information to receive multicast notifications for the target resource.</t>
              </li>
            </ul>
            <t>
Based on such information, PRX starts listening to multicast notifications. If the informative response includes a latest notification, then PRX caches that notification and forwards it to the client.</t>
          </li>
        </ol>
        <t>Editor's note: add a figure showing an example of message exchange.</t>
        <section anchor="rev-proxy-client-pre-steps">
          <name>Client Initialization Procedure</name>
          <t>The following early initialization procedure is performed by a client that does not have the group observation data and/or is not a member of the correct OSCORE group, before starting the main process described in <xref target="rev-proxy-main-process"/>.</t>
          <t>The client is minimally provided with the pair (PRX_ADDR, PRX_PORT) associated with PRX, which the client believes to be associated with the origin server.</t>
          <t>a. The client sends a traditional Observe registration request with destination address PRX_ADDR and port number PRX_PORT, i.e., to PRX. The request is protected with (Group) OSCORE, i.e., end-to-end between the client and the server.</t>
          <t>b. PRX receives the request and forwards it to the server, as usual.</t>
          <t>c. The server replies with a 5.03 (Service Unavailable) informative response. The response is protected with (Group) OSCORE, i.e., end-to-end between the client and the server. The payload of the response specifies the following parameters:</t>
          <ul spacing="normal">
            <li>
              <t>The 'tp_info' parameter, within which the 'tpi_server' element is a CRI with addressing information PRX_ADDR and PRX_PORT (i.e., targeting PRX). The 'tp_info' parameter does not include the 'tpi_details' element, regardless of what is expected as per the transport used.</t>
            </li>
            <li>
              <t>The 'ph_req' parameter, conveying the deterministic phantom request PH_REQ.</t>
            </li>
            <li>
              <t>Optionally, parameters conveying information that the client can use for joining the OSCORE group if that has not happened yet (see <xref section="9.1" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>), as well as the keying material used in the OSCORE group if the server is managing it (see <xref section="C" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).</t>
            </li>
          </ul>
          <t>d. PRX receives the protected informative response and forwards it to the client, as usual.</t>
          <t>e. Upon receiving the protected informative response, the client takes its payload as the group observation data for the group observation of interest.</t>
          <t>Per the instructions specified in the response, the client takes the necessary steps to join the correct OSCORE group, if it is not already a member.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>In addition to the security considerations from <xref target="I-D.ietf-core-observe-multicast-notifications"/>, the following considerations hold for this document.</t>
      <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 incorrectly configuring 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. Alternatively, it would result in the proxy configuring 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="iana-coap-options">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to enter the following option number to the "CoAP Option Numbers" registry <xref target="CoAP.Option.Numbers"/> 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">TBD47</td>
              <td align="left">Listen-To-Multicast-Responses</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
          </tbody>
        </table>
        <t>For the Listen-To-Multicast-Responses Option, the preferred value range is 0-255. In particular, 47 is the preferred option number.</t>
        <t>Note to RFC Editor: In the table above, please replace TBD47 with the registered option number. Then, please delete this paragraph and the previous paragraph.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-core-groupcomm-bis">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="10" month="February" year="2026"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) is a web transfer
   protocol for constrained devices and constrained networks.  In a
   number of use cases, constrained devices often naturally operate in
   groups (e.g., in a building automation scenario, all lights in a
   given room may need to be switched on/off as a group).  This document
   specifies the use of CoAP for group communication, including the use
   of UDP/IP multicast as the default underlying data transport.  Both
   unsecured and secured CoAP group communication are specified.
   Security is achieved by use of the Group Object Security for
   Constrained RESTful Environments (Group OSCORE) protocol.  The target
   application area of this specification is any group communication use
   cases that involve resource-constrained devices or networks that
   support CoAP.  This document replaces and obsoletes RFC 7390, while
   it updates RFC 7252 and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-18"/>
        </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="23" month="December" year="2025"/>
            <abstract>
              <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of messages exchanged with the Constrained Application
   Protocol (CoAP) between members of a group, e.g., sent over IP
   multicast.  In particular, the described protocol defines how OSCORE
   is used in a group communication setting to provide source
   authentication for CoAP group requests, sent by a client to multiple
   servers, and for protection of the corresponding CoAP responses.
   Group OSCORE also defines a pairwise mode where each member of the
   group can efficiently derive a symmetric pairwise key with each other
   member of the group for pairwise OSCORE communication.  Group OSCORE
   can be used between endpoints communicating with CoAP or CoAP-
   mappable HTTP.

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

   This RFC updates RFC 7595 by adding a column on the "URI Schemes"
   registry.


   // (This "cref" paragraph will be removed by the RFC editor:) After
   // approval of -28 and nit fixes in -29, the present revision -30
   // contains two more small fixes for nits that were uncovered in the
   // RPC intake process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-30"/>
        </reference>
        <reference anchor="I-D.ietf-core-observe-multicast-notifications">
          <front>
            <title>Observe Notifications as CoAP Multicast Responses</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>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="2" month="November" year="2026"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server and to receive notifications as
   unicast responses upon changes of the resource state.  In some use
   cases, such as those based on publish-subscribe, it would be
   convenient for the server to send a single notification addressed to
   all the clients observing the same target resource.  This document
   updates RFC7252 and RFC7641, and it defines how a server sends
   observe notifications as response messages over multicast,
   synchronizing all the observers of the same resource on the same
   shared Token value.  Besides, this document defines how the security
   protocol Group Object Security for Constrained RESTful Environments
   (Group OSCORE) can be used to protect multicast notifications end-to-
   end between the server and the observer clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-16"/>
        </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="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="CoAP.Option.Numbers" target="https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#option-numbers">
          <front>
            <title>CoAP Option Numbers</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-core-cacheable-oscore">
          <front>
            <title>End-to-End Protected and Cacheable CoAP Responses using Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   When using the Constrained Application Protocol (CoAP), exchanged
   messages can be protected end-to-end also across untrusted
   intermediary proxies.  This can be achieved with Object Security for
   Constrained RESTful Environments (OSCORE) or, in the case of group
   communication, with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  However, this sidesteps the proxies'
   abilities to cache responses from the origin server(s).  This
   document restores cacheability of end-to-end protected responses at
   proxies, by using Group OSCORE and introducing consensus requests,
   which any client in an OSCORE group can send to one server or
   multiple servers in the same group.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-cacheable-oscore-02"/>
        </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="2" month="November" year="2026"/>
            <abstract>
              <t>   When using the Constrained Application Protocol (CoAP), messages
   exchanged between two endpoints can be protected end-to-end at the
   application layer by means of Object Security for Constrained RESTful
   Environments (OSCORE), 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 Hop-Limit Option.
   The approach defined in this document can be seamlessly employed also
   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-08"/>
        </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>
      </references>
    </references>
    <?line 1133?>

<section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Fixes in the example of message exchange with Group OSCORE:  </t>
            <ul spacing="normal">
              <li>
                <t>Integer abbreviations of 'join_uri' and 'sec_gp'.</t>
              </li>
              <li>
                <t>Outer response code of the informative responses.</t>
              </li>
              <li>
                <t>The server consumes a Partial IV when producing INIT_NOTIF.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Fixes in the example of message exchange with Group OSCORE and Deterministic Request.</t>
          </li>
          <li>
            <t>Examples: aligned notation with that of draft-ietf-core-observe-multicast-notifications.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Clarifications:  </t>
            <ul spacing="normal">
              <li>
                <t>Proxy error handling for the informative response, when using deterministic phantom requests.</t>
              </li>
              <li>
                <t>Unprotected informative response sent to the reverse-proxy, when using deterministic phantom requests.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Minor clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Renamed the Multicast-Response-Feedback-Divider Option as Feedback-Divider.</t>
          </li>
          <li>
            <t>Fixes in the examples of message exchanges.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00">
        <name>Version -00</name>
        <ul spacing="normal">
          <li>
            <t>Imported content about proxies from draft-ietf-core-observe-multicast-notifications-12.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowldegment">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Carsten Bormann"/>, <contact fullname="Klaus Hartke"/>, <contact fullname="Jaime Jiménez"/>, <contact fullname="Matthias Kovatsch⁩"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Jim Schaad"/>, <contact fullname="Ludwig Seitz"/>, and <contact fullname="Göran Selander"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by the Sweden's Innovation Agency VINNOVA and the Celtic-Next projects CRITISEC and CYPRESS; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
