<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-multicast-notifications-proxy-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.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-00"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <street>Hollandstr. 12/4</street>
          <city>Vienna</city>
          <code>1020</code>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <author initials="F." surname="Palombini" fullname="Francesca Palombini">
      <organization>Ericsson AB</organization>
      <address>
        <postal>
          <street>Torshamnsgatan 23</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>francesca.palombini@ericsson.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>WIT</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 74?>

<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>
      <t><cref anchor="status"/></t>
      <t>The present version -00 refers to version -12 of draft-ietf-core-observe-multicast-notifications, which includes content about proxies that is also included in the present document. Such content will be removed from draft-ietf-core-observe-multicast-notifications in its next revision.</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 83?>

<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 in case (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 are required to separately provide the proxy with the obtained phantom request, thus enabling the proxy to receive the multicast notifications from the server. This case is defined in <xref target="intermediaries-e2e-security"/>. An example is provided in <xref target="intermediaries-example-e2e-security"/>.  </t>
          <t>
If the participating endpoints using Group OSCORE also support the concept of Deterministic Client <xref target="I-D.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.</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 its cache.</t>
      <t>In particular, by using the information retrieved from the informative response, the proxy configures an observation of the target resource at the origin server, acting as a client directly taking part in the group observation.</t>
      <t>As a consequence, the proxy listens to the IP multicast address and port number indicated by the server, i.e., per the CRI <xref target="I-D.ietf-core-href"/> specified by a dedicated element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref 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, in 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 responds to the client with an Empty Acknowledgement (if indicated by the message type, and if the proxy has not already done so).</t>
        </li>
        <li>
          <t>If the 'last_notif' field is present, the proxy rebuilds the latest multicast notification, as defined in <xref section="5" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>. Then, the proxy responds to the client, by forwarding back the latest multicast notification.</t>
        </li>
      </ul>
      <t>When responding to an observation request from a client, the proxy also adds that client (and its Token) to the list of its registered observers for the target resource, next to the older observations.</t>
      <t>Upon receiving a multicast notification from the server, the proxy forwards it back separately to each observer client over unicast. Note that the notification forwarded back to a certain client has the same Token value of the original observation request sent by that client to the proxy.</t>
      <t>Note that the proxy configures the observation of the target resource at the server only once, when receiving the informative response associated with a (newly started) group observation for that target resource.</t>
      <t>After that, when receiving an observation request from a following new client to be added to the same group observation, the proxy does not take any further action with the server. Instead, the proxy responds to the client either with the latest multicast notification if available from its cache, or with an Empty Acknowledgement otherwise, as defined above.</t>
      <t>As a result, the observer counter at the server (see <xref 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 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>Then, differently from what is defined in <xref section="11" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>, each proxy receiving an informative response simply forwards it back to the client that has sent the corresponding observation request. Note that the proxy does not even realize that the message is an informative response, since the outer Code field is set to 2.05 (Content).</t>
      <t>Upon receiving the informative response, the client does not configure an observation of the target resource. Instead, the client performs a new observe registration request, by transmitting the re-built phantom request as intended to reach the proxy adjacent to the origin server. In particular, the client includes the new Listen-To-Multicast-Responses CoAP option defined in <xref target="ltmr-option"/>, to provide that proxy with the transport-specific information required for receiving multicast notifications for the group observation.</t>
      <t>As a result, the observer counter at the server (see <xref 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 the new, different origin clients behind the proxy, which the server distinguishes through their security identity specified by the pair (OSCORE Sender ID, OSCORE ID Context) in the OSCORE Option of their original observation request. Note that this does not hold anymore if the origin endpoints use phantom observation requests as deterministic requests (see <xref 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 the proxy to listen to the multicast notifications sent by the server, a new CoAP option is introduced. This option <bcp14>MUST</bcp14> be supported by clients interested to take part in group observations through intermediaries and by proxies that collect multicast notifications and forward them back to the observer clients.</t>
        <t>The option is called Listen-To-Multicast-Response, is intended only for requests, and has the properties summarized in <xref target="ltmr-table"/>, which extends Table 4 of <xref target="RFC7252"/>. The option is critical and not Safe-to-Forward. Since the option is not Safe-to-Forward, the 'N' column indicates a dash for "not applicable".</t>
        <table align="center" anchor="ltmr-table">
          <name>The Listen-To-Multicast-Responses Option. C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">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 Listen-To-Multicast-Responses Option includes the byte serialization of a CBOR array. This 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 between the origin server and the origin clients.</t>
        <t>After the origin server sends an informative response, each proxy simply forwards it back to the (previous hop towards the) origin client that has sent the observation request.</t>
        <t>Once received the informative response, the origin client proceeds in a different way than in <xref 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 with AEAD tag (protecting the inner Code, the inner CoAP options, and the possible plain CoAP payload) concatenated with the signature are the same of the phantom request used for the group observation. That is, they are as specified in the 'ph_req' parameter of the received informative response.</t>
              </li>
              <li>
                <t>An outer Observe Option is included and set to 0 (register). This will usually be set in the phantom request already.</t>
              </li>
              <li>
                <t>The client includes: the outer option Proxy-Uri or Proxy-Cri <xref target="I-D.ietf-core-href"/>; or the outer options (Uri-Host, Uri-Port), together with the outer option Proxy-Scheme or Proxy-Scheme-Number <xref target="I-D.ietf-core-href"/>. These options are set in order to specify the same request URI of the original registration request sent by the client.</t>
              </li>
              <li>
                <t>The new option Listen-To-Multicast-Responses is included as an outer option. The value is set to the byte serialization of the CBOR array specified by the 'tp_info' parameter of the informative response.      </t>
                <t>
Note that, except for transport-specific information such as the Token and Message ID values, every different client participating in the same group observation (hence rebuilding the same phantom request) will build the same ticket request.      </t>
                <t>
Note also that, identically to the phantom request, the ticket request is still protected with Group OSCORE, i.e., it has the same OSCORE Option, encrypted payload, and signature.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Then, the client sends the ticket request to the next hop towards the origin server. Every proxy in the chain forwards the ticket request to the next hop towards the origin server, until the last proxy in the chain is reached. This last proxy, adjacent to the origin server, proceeds as follows.</t>
        <ul spacing="normal">
          <li>
            <t>The proxy <bcp14>MUST NOT</bcp14> further forward the ticket request to the origin server.</t>
          </li>
          <li>
            <t>The proxy removes the option Proxy-Uri, or Proxy-Scheme, or Proxy-Cri, or Proxy-Scheme-Number from the ticket request.</t>
          </li>
          <li>
            <t>The proxy removes the Listen-To-Multicast-Responses Option from the ticket request and extracts the transport-specific information conveyed therein.</t>
          </li>
          <li>
            <t>The proxy rebuilds the phantom request associated with the group observation, by using the ticket request as directly providing the required transport-independent information. This includes the outer Code field, the outer CoAP options, and the encrypted payload with AEAD tag concatenated with the signature.</t>
          </li>
          <li>
            <t>The proxy configures an observation of the target resource at the origin server, acting as a client directly taking part in the group observation. To this end, the proxy uses the rebuilt phantom request and the transport-specific information retrieved from the Listen-To-Multicast-Responses Option. The particular way to achieve this is implementation specific.</t>
          </li>
        </ul>
        <t>After that, the proxy listens to the IP multicast address and port number indicated in the Listen-To-Multicast-Responses Option, i.e., per the CRI specified by a dedicated element of 'tpi_details' within the serialized CBOR array conveyed in the option. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref 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 serialized CBOR array conveyed in the Listen-To-Multicast-Responses Option. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref 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 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 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 Multicast-Response-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 Multicast-Response-Feedback-Divider Option but the proxy does not recognize and understand the option, then the proxy has to stop processing the request and sends a 4.02 (Bad Option) response to the observer client (see <xref section="5.7.1" sectionFormat="of" target="RFC7252"/>). This results in the client terminating its observation at the proxy, after which the client stops receiving notifications for the group observation.  </t>
          <t>
If the proxy receives a multicast notification that includes the Multicast-Response-Feedback-Divider Option but the proxy does not recognize and understand the option, then the proxy has to stop processing the received multicast notification and sends a 5.02 (Bad Gateway) response to each of the observer clients (see <xref section="5.7.1" sectionFormat="of" target="RFC7252"/>). This results in all the observer clients terminating their observation at the proxy, after which they stop receiving notifications for the group observation. Consequently, the proxy may decide to forget about its participation to the group observation at the server.  </t>
          <t>
This is not an issue if communications between the origin endpoints are protected end-to-end, i.e., both for the requests from the origin clients by using OSCORE or Group OSCORE, as well as for the multicast notifications from the origin server by using Group OSCORE (see <xref section="9" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> and <xref target="intermediaries-e2e-security"/> of this document). In fact, in such a case, the Multicast-Response-Feedback-Divider Option is protected end-to-end as well, and is thus hidden from the proxy.  </t>
          <t>
Therefore, if the server uses the rough counting process defined in <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 Multicast-Response-Feedback-Divider Option. If that is not the case, then every execution of the rough counting process will effectively prevent the clients from receiving further notifications for the group observation, until they register again as observers at the proxy.</t>
        </li>
        <li>
          <t>The following holds when the proxy receives a multicast notification including the Multicast-Response-Feedback-Divider Option.  </t>
          <ul spacing="normal">
            <li>
              <t>If the multicast notification is not protected end-to-end by using Group OSCORE (see <xref target="intermediaries"/>), then the Multicast-Response-Feedback-Divider Option is visible to the proxy.      </t>
              <t>
In this case, the proxy proceeds like defined in <xref section="8.2" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> for an origin client, i.e., by answering to the server on its own in case it picks a random number I equal to 0. When doing so, the proxy will be counted by the server as a single client.      </t>
              <t>
Furthermore, the proxy <bcp14>MUST</bcp14> remove the option before forwarding the notification to (the previous hop towards) any of the origin clients.      </t>
              <t>
The proxy would have to rely on separate means for verifying whether the origin clients are still interested in the observation, e.g., by regularly forwarding notifications to the clients as unicast, Confirmable response messages.      </t>
              <t>
When no interested origin clients remain, the proxy can simply forget about being part of the group observation for the target resource at the server, like an origin client would do (see <xref 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 Multicast-Response-Feedback-Divider Option is protected end-to-end as well, and is thus hidden from the proxy. As a consequence, the proxy forwards the notification to (the previous hop towards) any of the origin clients, each of which answers to the server if it picks a random number I equal to 0.</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="intermediaries-example">
      <name>Example with a Proxy</name>
      <t>This section provides an example when a proxy P is used between the clients and the server. The same assumptions and notation used in <xref 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="1664" width="576" viewBox="0 0 576 1664" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,992" fill="none" stroke="black"/>
              <path d="M 8,1056 L 8,1232" fill="none" stroke="black"/>
              <path d="M 8,1296 L 8,1600" fill="none" stroke="black"/>
              <path d="M 64,48 L 64,88" fill="none" stroke="black"/>
              <path d="M 64,104 L 64,920" fill="none" stroke="black"/>
              <path d="M 64,936 L 64,992" fill="none" stroke="black"/>
              <path d="M 64,1056 L 64,1232" fill="none" stroke="black"/>
              <path d="M 64,1296 L 64,1448" fill="none" stroke="black"/>
              <path d="M 64,1464 L 64,1600" fill="none" stroke="black"/>
              <path d="M 120,48 L 120,992" fill="none" stroke="black"/>
              <path d="M 120,1056 L 120,1232" fill="none" stroke="black"/>
              <path d="M 120,1296 L 120,1600" fill="none" stroke="black"/>
              <path d="M 192,48 L 192,992" fill="none" stroke="black"/>
              <path d="M 192,1056 L 192,1232" fill="none" stroke="black"/>
              <path d="M 192,1296 L 192,1600" fill="none" stroke="black"/>
              <path d="M 8,96 L 112,96" fill="none" stroke="black"/>
              <path d="M 120,160 L 184,160" fill="none" stroke="black"/>
              <path d="M 144,336 L 192,336" fill="none" stroke="black"/>
              <path d="M 144,384 L 184,384" fill="none" stroke="black"/>
              <path d="M 128,576 L 192,576" fill="none" stroke="black"/>
              <path d="M 16,928 L 120,928" fill="none" stroke="black"/>
              <path d="M 64,1072 L 112,1072" fill="none" stroke="black"/>
              <path d="M 72,1168 L 120,1168" fill="none" stroke="black"/>
              <path d="M 128,1376 L 192,1376" fill="none" stroke="black"/>
              <path d="M 16,1456 L 120,1456" fill="none" stroke="black"/>
              <path d="M 72,1536 L 120,1536" fill="none" stroke="black"/>
              <path d="M 132,360 L 144,384" fill="none" stroke="black"/>
              <path d="M 132,360 L 144,336" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="192,384 180,378.4 180,389.6" fill="black" transform="rotate(0,184,384)"/>
              <polygon class="arrowhead" points="192,160 180,154.4 180,165.6" fill="black" transform="rotate(0,184,160)"/>
              <polygon class="arrowhead" points="136,1376 124,1370.4 124,1381.6" fill="black" transform="rotate(180,128,1376)"/>
              <polygon class="arrowhead" points="136,576 124,570.4 124,581.6" fill="black" transform="rotate(180,128,576)"/>
              <polygon class="arrowhead" points="120,1072 108,1066.4 108,1077.6" fill="black" transform="rotate(0,112,1072)"/>
              <polygon class="arrowhead" points="120,96 108,90.4 108,101.6" fill="black" transform="rotate(0,112,96)"/>
              <polygon class="arrowhead" points="80,1536 68,1530.4 68,1541.6" fill="black" transform="rotate(180,72,1536)"/>
              <polygon class="arrowhead" points="80,1168 68,1162.4 68,1173.6" fill="black" transform="rotate(180,72,1168)"/>
              <polygon class="arrowhead" points="24,1456 12,1450.4 12,1461.6" fill="black" transform="rotate(180,16,1456)"/>
              <polygon class="arrowhead" points="24,928 12,922.4 12,933.6" fill="black" transform="rotate(180,16,928)"/>
              <g class="text">
                <text x="12" y="36">C1</text>
                <text x="68" y="36">C2</text>
                <text x="120" y="36">P</text>
                <text x="192" y="36">S</text>
                <text x="228" y="68">(The</text>
                <text x="272" y="68">value</text>
                <text x="308" y="68">of</text>
                <text x="336" y="68">the</text>
                <text x="388" y="68">resource</text>
                <text x="436" y="68">/r</text>
                <text x="460" y="68">is</text>
                <text x="504" y="68">"1234")</text>
                <text x="236" y="100">Token:</text>
                <text x="284" y="100">0x4a</text>
                <text x="32" y="116">GET</text>
                <text x="244" y="116">Observe:</text>
                <text x="288" y="116">0</text>
                <text x="340" y="116">(register)</text>
                <text x="252" y="132">Proxy-Uri:</text>
                <text x="400" y="132">"coap://sensor.example/r"</text>
                <text x="236" y="164">Token:</text>
                <text x="284" y="164">0x5e</text>
                <text x="144" y="180">GET</text>
                <text x="244" y="180">Observe:</text>
                <text x="288" y="180">0</text>
                <text x="340" y="180">(register)</text>
                <text x="248" y="196">Uri-Host:</text>
                <text x="356" y="196">"sensor.example"</text>
                <text x="248" y="212">Uri-Path:</text>
                <text x="304" y="212">"r"</text>
                <text x="220" y="244">(S</text>
                <text x="272" y="244">allocates</text>
                <text x="328" y="244">the</text>
                <text x="384" y="244">available</text>
                <text x="448" y="244">Token</text>
                <text x="496" y="244">value</text>
                <text x="544" y="244">0x7b)</text>
                <text x="220" y="276">(S</text>
                <text x="256" y="276">sends</text>
                <text x="292" y="276">to</text>
                <text x="332" y="276">itself</text>
                <text x="368" y="276">a</text>
                <text x="408" y="276">phantom</text>
                <text x="488" y="276">observation</text>
                <text x="240" y="292">request</text>
                <text x="300" y="292">PH_REQ</text>
                <text x="340" y="292">as</text>
                <text x="380" y="292">coming</text>
                <text x="428" y="292">from</text>
                <text x="464" y="292">the</text>
                <text x="220" y="308">IP</text>
                <text x="272" y="308">multicast</text>
                <text x="344" y="308">address</text>
                <text x="416" y="308">GRP_ADDR)</text>
                <text x="236" y="388">Token:</text>
                <text x="284" y="388">0x7b</text>
                <text x="168" y="404">GET</text>
                <text x="244" y="404">Observe:</text>
                <text x="288" y="404">0</text>
                <text x="340" y="404">(register)</text>
                <text x="248" y="420">Uri-Host:</text>
                <text x="356" y="420">"sensor.example"</text>
                <text x="248" y="436">Uri-Path:</text>
                <text x="304" y="436">"r"</text>
                <text x="220" y="468">(S</text>
                <text x="264" y="468">creates</text>
                <text x="304" y="468">a</text>
                <text x="336" y="468">group</text>
                <text x="408" y="468">observation</text>
                <text x="468" y="468">of</text>
                <text x="496" y="468">/r)</text>
                <text x="220" y="500">(S</text>
                <text x="276" y="500">increments</text>
                <text x="336" y="500">the</text>
                <text x="388" y="500">observer</text>
                <text x="456" y="500">counter</text>
                <text x="224" y="516">for</text>
                <text x="256" y="516">the</text>
                <text x="296" y="516">group</text>
                <text x="368" y="516">observation</text>
                <text x="428" y="516">of</text>
                <text x="456" y="516">/r)</text>
                <text x="236" y="580">Token:</text>
                <text x="284" y="580">0x5e</text>
                <text x="148" y="596">5.03</text>
                <text x="272" y="596">Content-Format:</text>
                <text x="388" y="596">application/</text>
                <text x="336" y="612">informative-response+cbor</text>
                <text x="244" y="628">Max-Age:</text>
                <text x="288" y="628">0</text>
                <text x="236" y="644">&lt;Other</text>
                <text x="300" y="644">options&gt;</text>
                <text x="244" y="660">Payload:</text>
                <text x="288" y="660">{</text>
                <text x="232" y="676">/</text>
                <text x="272" y="676">tp_info</text>
                <text x="312" y="676">/</text>
                <text x="352" y="676">0</text>
                <text x="368" y="676">:</text>
                <text x="384" y="676">[</text>
                <text x="416" y="692">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="432" y="708">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="348" y="724">0x7b],</text>
                <text x="232" y="740">/</text>
                <text x="284" y="740">last_notif</text>
                <text x="336" y="740">/</text>
                <text x="352" y="740">2</text>
                <text x="368" y="740">:</text>
                <text x="416" y="740">bstr(0x45</text>
                <text x="464" y="740">|</text>
                <text x="488" y="740">OPT</text>
                <text x="512" y="740">|</text>
                <text x="540" y="740">0xff</text>
                <text x="568" y="740">|</text>
                <text x="452" y="756">PAYLOAD)</text>
                <text x="216" y="772">}</text>
                <text x="244" y="804">(PAYLOAD</text>
                <text x="292" y="804">in</text>
                <text x="356" y="804">'last_notif'</text>
                <text x="416" y="804">:</text>
                <text x="456" y="804">"1234")</text>
                <text x="228" y="852">(The</text>
                <text x="272" y="852">proxy</text>
                <text x="324" y="852">starts</text>
                <text x="392" y="852">listening</text>
                <text x="444" y="852">to</text>
                <text x="472" y="852">the</text>
                <text x="252" y="868">GRP_ADDR</text>
                <text x="320" y="868">address</text>
                <text x="368" y="868">and</text>
                <text x="400" y="868">the</text>
                <text x="452" y="868">GRP_PORT</text>
                <text x="516" y="868">port.)</text>
                <text x="228" y="900">(The</text>
                <text x="272" y="900">proxy</text>
                <text x="316" y="900">adds</text>
                <text x="348" y="900">C1</text>
                <text x="372" y="900">to</text>
                <text x="400" y="900">its</text>
                <text x="436" y="900">list</text>
                <text x="468" y="900">of</text>
                <text x="528" y="900">observers.)</text>
                <text x="236" y="932">Token:</text>
                <text x="284" y="932">0x4a</text>
                <text x="36" y="948">2.05</text>
                <text x="244" y="948">Observe:</text>
                <text x="304" y="948">54120</text>
                <text x="236" y="964">&lt;Other</text>
                <text x="300" y="964">options&gt;</text>
                <text x="244" y="980">Payload:</text>
                <text x="308" y="980">"1234"</text>
                <text x="16" y="1028">...</text>
                <text x="64" y="1028">...</text>
                <text x="120" y="1028">...</text>
                <text x="184" y="1028">...</text>
                <text x="236" y="1076">Token:</text>
                <text x="284" y="1076">0x01</text>
                <text x="88" y="1092">GET</text>
                <text x="244" y="1092">Observe:</text>
                <text x="288" y="1092">0</text>
                <text x="340" y="1092">(register)</text>
                <text x="252" y="1108">Proxy-Uri:</text>
                <text x="400" y="1108">"coap://sensor.example/r"</text>
                <text x="228" y="1140">(The</text>
                <text x="272" y="1140">proxy</text>
                <text x="312" y="1140">has</text>
                <text x="336" y="1140">a</text>
                <text x="368" y="1140">fresh</text>
                <text x="416" y="1140">cache</text>
                <text x="504" y="1140">representation)</text>
                <text x="236" y="1172">Token:</text>
                <text x="284" y="1172">0x01</text>
                <text x="92" y="1188">2.05</text>
                <text x="244" y="1188">Observe:</text>
                <text x="304" y="1188">54120</text>
                <text x="236" y="1204">&lt;Other</text>
                <text x="300" y="1204">options&gt;</text>
                <text x="244" y="1220">Payload:</text>
                <text x="308" y="1220">"1234"</text>
                <text x="16" y="1268">...</text>
                <text x="64" y="1268">...</text>
                <text x="120" y="1268">...</text>
                <text x="184" y="1268">...</text>
                <text x="228" y="1316">(The</text>
                <text x="272" y="1316">value</text>
                <text x="308" y="1316">of</text>
                <text x="336" y="1316">the</text>
                <text x="388" y="1316">resource</text>
                <text x="220" y="1332">/r</text>
                <text x="264" y="1332">changes</text>
                <text x="308" y="1332">to</text>
                <text x="356" y="1332">"5678".)</text>
                <text x="152" y="1364">(#)</text>
                <text x="236" y="1380">Token:</text>
                <text x="284" y="1380">0x7b</text>
                <text x="148" y="1396">2.05</text>
                <text x="244" y="1396">Observe:</text>
                <text x="292" y="1396">11</text>
                <text x="236" y="1412">&lt;Other</text>
                <text x="300" y="1412">options&gt;</text>
                <text x="244" y="1428">Payload:</text>
                <text x="308" y="1428">"5678"</text>
                <text x="236" y="1460">Token:</text>
                <text x="284" y="1460">0x4a</text>
                <text x="36" y="1476">2.05</text>
                <text x="244" y="1476">Observe:</text>
                <text x="304" y="1476">54123</text>
                <text x="236" y="1492">&lt;Other</text>
                <text x="300" y="1492">options&gt;</text>
                <text x="244" y="1508">Payload:</text>
                <text x="308" y="1508">"5678"</text>
                <text x="236" y="1540">Token:</text>
                <text x="284" y="1540">0x01</text>
                <text x="92" y="1556">2.05</text>
                <text x="244" y="1556">Observe:</text>
                <text x="304" y="1556">54123</text>
                <text x="236" y="1572">&lt;Other</text>
                <text x="300" y="1572">options&gt;</text>
                <text x="244" y="1588">Payload:</text>
                <text x="308" y="1588">"5678"</text>
                <text x="16" y="1652">(#)</text>
                <text x="52" y="1652">Sent</text>
                <text x="92" y="1652">over</text>
                <text x="124" y="1652">IP</text>
                <text x="176" y="1652">multicast</text>
                <text x="228" y="1652">to</text>
                <text x="332" y="1652">GROUP_ADDR:GROUP_PORT.</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
C1     C2     P        S
|      |      |        |
|      |      |        |  (The value of the resource /r is "1234")
|      |      |        |
+------------>|        |  Token: 0x4a
| GET  |      |        |  Observe: 0 (register)
|      |      |        |  Proxy-Uri: "coap://sensor.example/r"
|      |      |        |
|      |      +------->|  Token: 0x5e
|      |      | GET    |  Observe: 0 (register)
|      |      |        |  Uri-Host: "sensor.example"
|      |      |        |  Uri-Path: "r"
|      |      |        |
|      |      |        |  (S allocates the available Token value 0x7b)
|      |      |        |
|      |      |        |  (S sends to itself a phantom observation
|      |      |        |  request PH_REQ as coming from the
|      |      |        |  IP multicast address GRP_ADDR)
|      |      |        |
|      |      |  .-----+
|      |      | /      |
|      |      | \      |
|      |      |  `---->|  Token: 0x7b
|      |      |    GET |  Observe: 0 (register)
|      |      |        |  Uri-Host: "sensor.example"
|      |      |        |  Uri-Path: "r"
|      |      |        |
|      |      |        |  (S creates a group observation of /r)
|      |      |        |
|      |      |        |  (S increments the observer counter
|      |      |        |  for the group observation of /r)
|      |      |        |
|      |      |        |
|      |      |        |
|      |      |<-------+  Token: 0x5e
|      |      | 5.03   |  Content-Format: application/
|      |      |        |     informative-response+cbor
|      |      |        |  Max-Age: 0
|      |      |        |  <Other options>
|      |      |        |  Payload: {
|      |      |        |    / tp_info /    0 : [
|      |      |        |            cri'coap://SRV_ADDR:SRV_PORT/',
|      |      |        |              cri'coap://GRP_ADDR:GRP_PORT/',
|      |      |        |                0x7b],
|      |      |        |    / last_notif / 2 : bstr(0x45 | OPT | 0xff |
|      |      |        |                            PAYLOAD)
|      |      |        |  }
|      |      |        |
|      |      |        |  (PAYLOAD in 'last_notif' : "1234")
|      |      |        |
|      |      |        |
|      |      |        |  (The proxy starts listening to the
|      |      |        |   GRP_ADDR address and the GRP_PORT port.)
|      |      |        |
|      |      |        |  (The proxy adds C1 to its list of observers.)
|      |      |        |
|<------------+        |  Token: 0x4a
| 2.05 |      |        |  Observe: 54120
|      |      |        |  <Other options>
|      |      |        |  Payload: "1234"
|      |      |        |

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

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

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

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


(#) Sent over IP multicast to GROUP_ADDR:GROUP_PORT.
]]></artwork>
        </artset>
      </figure>
      <t>Note that the proxy has all the information to understand the observation request from C2 and can immediately start to serve the still fresh values.</t>
      <t>This behavior is mandated by <xref section="5" sectionFormat="of" target="RFC7641"/>, i.e., the proxy registers itself only once with the next hop and fans out the notifications it receives to all the registered clients.</t>
    </section>
    <section anchor="intermediaries-example-e2e-security">
      <name>Example with a Proxy and with Group OSCORE</name>
      <t>This section provides an example when a proxy P is used between the clients and the server, and Group OSCORE is used to protect multicast notifications end-to-end between the server and the clients.</t>
      <t>The same assumptions and notation used in <xref 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="4304" width="576" viewBox="0 0 576 4304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,2096" fill="none" stroke="black"/>
              <path d="M 8,2160 L 8,3600" fill="none" stroke="black"/>
              <path d="M 8,3664 L 8,4176" fill="none" stroke="black"/>
              <path d="M 72,48 L 72,88" fill="none" stroke="black"/>
              <path d="M 72,104 L 72,1528" fill="none" stroke="black"/>
              <path d="M 72,1544 L 72,1640" fill="none" stroke="black"/>
              <path d="M 72,1656 L 72,2072" fill="none" stroke="black"/>
              <path d="M 72,2160 L 72,3600" fill="none" stroke="black"/>
              <path d="M 72,3664 L 72,3960" fill="none" stroke="black"/>
              <path d="M 72,3976 L 72,4176" fill="none" stroke="black"/>
              <path d="M 136,48 L 136,2096" fill="none" stroke="black"/>
              <path d="M 136,2160 L 136,3600" fill="none" stroke="black"/>
              <path d="M 136,3664 L 136,4176" fill="none" stroke="black"/>
              <path d="M 216,48 L 216,2096" fill="none" stroke="black"/>
              <path d="M 216,2160 L 216,3600" fill="none" stroke="black"/>
              <path d="M 216,3664 L 216,4176" fill="none" stroke="black"/>
              <path d="M 8,96 L 128,96" fill="none" stroke="black"/>
              <path d="M 136,320 L 208,320" fill="none" stroke="black"/>
              <path d="M 160,656 L 216,656" fill="none" stroke="black"/>
              <path d="M 160,704 L 208,704" fill="none" stroke="black"/>
              <path d="M 440,960 L 456,960" fill="none" stroke="black"/>
              <path d="M 144,1088 L 216,1088" fill="none" stroke="black"/>
              <path d="M 16,1536 L 136,1536" fill="none" stroke="black"/>
              <path d="M 8,1648 L 128,1648" fill="none" stroke="black"/>
              <path d="M 16,2080 L 136,2080" fill="none" stroke="black"/>
              <path d="M 72,2176 L 128,2176" fill="none" stroke="black"/>
              <path d="M 136,2400 L 208,2400" fill="none" stroke="black"/>
              <path d="M 144,2656 L 216,2656" fill="none" stroke="black"/>
              <path d="M 80,3104 L 136,3104" fill="none" stroke="black"/>
              <path d="M 72,3200 L 128,3200" fill="none" stroke="black"/>
              <path d="M 80,3568 L 136,3568" fill="none" stroke="black"/>
              <path d="M 144,3744 L 216,3744" fill="none" stroke="black"/>
              <path d="M 16,3968 L 136,3968" fill="none" stroke="black"/>
              <path d="M 80,4080 L 136,4080" fill="none" stroke="black"/>
              <path d="M 148,680 L 160,704" fill="none" stroke="black"/>
              <path d="M 148,680 L 160,656" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="448,960 436,954.4 436,965.6" fill="black" transform="rotate(180,440,960)"/>
              <polygon class="arrowhead" points="216,2400 204,2394.4 204,2405.6" fill="black" transform="rotate(0,208,2400)"/>
              <polygon class="arrowhead" points="216,704 204,698.4 204,709.6" fill="black" transform="rotate(0,208,704)"/>
              <polygon class="arrowhead" points="216,320 204,314.4 204,325.6" fill="black" transform="rotate(0,208,320)"/>
              <polygon class="arrowhead" points="152,3744 140,3738.4 140,3749.6" fill="black" transform="rotate(180,144,3744)"/>
              <polygon class="arrowhead" points="152,2656 140,2650.4 140,2661.6" fill="black" transform="rotate(180,144,2656)"/>
              <polygon class="arrowhead" points="152,1088 140,1082.4 140,1093.6" fill="black" transform="rotate(180,144,1088)"/>
              <polygon class="arrowhead" points="136,3200 124,3194.4 124,3205.6" fill="black" transform="rotate(0,128,3200)"/>
              <polygon class="arrowhead" points="136,2176 124,2170.4 124,2181.6" fill="black" transform="rotate(0,128,2176)"/>
              <polygon class="arrowhead" points="136,1648 124,1642.4 124,1653.6" fill="black" transform="rotate(0,128,1648)"/>
              <polygon class="arrowhead" points="136,96 124,90.4 124,101.6" fill="black" transform="rotate(0,128,96)"/>
              <polygon class="arrowhead" points="88,4080 76,4074.4 76,4085.6" fill="black" transform="rotate(180,80,4080)"/>
              <polygon class="arrowhead" points="88,3568 76,3562.4 76,3573.6" fill="black" transform="rotate(180,80,3568)"/>
              <polygon class="arrowhead" points="88,3104 76,3098.4 76,3109.6" fill="black" transform="rotate(180,80,3104)"/>
              <polygon class="arrowhead" points="24,3968 12,3962.4 12,3973.6" fill="black" transform="rotate(180,16,3968)"/>
              <polygon class="arrowhead" points="24,2080 12,2074.4 12,2085.6" fill="black" transform="rotate(180,16,2080)"/>
              <polygon class="arrowhead" points="24,1536 12,1530.4 12,1541.6" fill="black" transform="rotate(180,16,1536)"/>
              <g class="text">
                <text x="12" y="36">C1</text>
                <text x="76" y="36">C2</text>
                <text x="136" y="36">P</text>
                <text x="216" y="36">S</text>
                <text x="252" y="68">(The</text>
                <text x="296" y="68">value</text>
                <text x="332" y="68">of</text>
                <text x="360" y="68">the</text>
                <text x="412" y="68">resource</text>
                <text x="460" y="68">/r</text>
                <text x="484" y="68">is</text>
                <text x="528" y="68">"1234")</text>
                <text x="260" y="100">Token:</text>
                <text x="308" y="100">0x4a</text>
                <text x="40" y="116">FETCH</text>
                <text x="268" y="116">Observe:</text>
                <text x="312" y="116">0</text>
                <text x="364" y="116">(register)</text>
                <text x="264" y="132">OSCORE:</text>
                <text x="320" y="132">{kid:</text>
                <text x="368" y="132">0x01;</text>
                <text x="412" y="132">piv:</text>
                <text x="452" y="132">101;</text>
                <text x="492" y="132">...}</text>
                <text x="272" y="148">Uri-Host:</text>
                <text x="380" y="148">"sensor.example"</text>
                <text x="288" y="164">Proxy-Scheme:</text>
                <text x="372" y="164">"coap"</text>
                <text x="260" y="180">&lt;Other</text>
                <text x="312" y="180">class</text>
                <text x="352" y="180">U/I</text>
                <text x="404" y="180">options&gt;</text>
                <text x="252" y="196">0xff</text>
                <text x="304" y="212">Encrypted_payload</text>
                <text x="384" y="212">{</text>
                <text x="268" y="228">0x01</text>
                <text x="316" y="228">(GET),</text>
                <text x="284" y="244">Observe:</text>
                <text x="328" y="244">0</text>
                <text x="384" y="244">(register),</text>
                <text x="288" y="260">Uri-Path:</text>
                <text x="348" y="260">"r",</text>
                <text x="276" y="276">&lt;Other</text>
                <text x="328" y="276">class</text>
                <text x="360" y="276">E</text>
                <text x="404" y="276">options&gt;</text>
                <text x="240" y="292">}</text>
                <text x="260" y="324">Token:</text>
                <text x="308" y="324">0x5e</text>
                <text x="168" y="340">FETCH</text>
                <text x="268" y="340">Observe:</text>
                <text x="312" y="340">0</text>
                <text x="364" y="340">(register)</text>
                <text x="264" y="356">OSCORE:</text>
                <text x="320" y="356">{kid:</text>
                <text x="368" y="356">0x01;</text>
                <text x="412" y="356">piv:</text>
                <text x="452" y="356">101;</text>
                <text x="492" y="356">...}</text>
                <text x="272" y="372">Uri-Host:</text>
                <text x="380" y="372">"sensor.example"</text>
                <text x="260" y="388">&lt;Other</text>
                <text x="312" y="388">class</text>
                <text x="352" y="388">U/I</text>
                <text x="404" y="388">options&gt;</text>
                <text x="252" y="404">0xff</text>
                <text x="304" y="420">Encrypted_payload</text>
                <text x="384" y="420">{</text>
                <text x="268" y="436">0x01</text>
                <text x="316" y="436">(GET),</text>
                <text x="284" y="452">Observe:</text>
                <text x="328" y="452">0</text>
                <text x="384" y="452">(register),</text>
                <text x="288" y="468">Uri-Path:</text>
                <text x="348" y="468">"r",</text>
                <text x="276" y="484">&lt;Other</text>
                <text x="328" y="484">class</text>
                <text x="360" y="484">E</text>
                <text x="404" y="484">options&gt;</text>
                <text x="240" y="500">}</text>
                <text x="244" y="548">(S</text>
                <text x="296" y="548">allocates</text>
                <text x="352" y="548">the</text>
                <text x="408" y="548">available</text>
                <text x="264" y="564">Token</text>
                <text x="312" y="564">value</text>
                <text x="356" y="564">0x7b</text>
                <text x="388" y="564">.)</text>
                <text x="244" y="596">(S</text>
                <text x="280" y="596">sends</text>
                <text x="316" y="596">to</text>
                <text x="356" y="596">itself</text>
                <text x="392" y="596">a</text>
                <text x="432" y="596">phantom</text>
                <text x="512" y="596">observation</text>
                <text x="264" y="612">request</text>
                <text x="324" y="612">PH_REQ</text>
                <text x="364" y="612">as</text>
                <text x="404" y="612">coming</text>
                <text x="452" y="612">from</text>
                <text x="488" y="612">the</text>
                <text x="244" y="628">IP</text>
                <text x="296" y="628">multicast</text>
                <text x="368" y="628">address</text>
                <text x="440" y="628">GRP_ADDR)</text>
                <text x="184" y="644">(#)</text>
                <text x="260" y="708">Token:</text>
                <text x="308" y="708">0x7b</text>
                <text x="184" y="724">FETCH</text>
                <text x="268" y="724">Observe:</text>
                <text x="312" y="724">0</text>
                <text x="364" y="724">(register)</text>
                <text x="264" y="740">OSCORE:</text>
                <text x="320" y="740">{kid:</text>
                <text x="368" y="740">0x05;</text>
                <text x="412" y="740">piv:</text>
                <text x="452" y="740">501;</text>
                <text x="320" y="756">kid</text>
                <text x="372" y="756">context:</text>
                <text x="448" y="756">0x57ab2e;</text>
                <text x="508" y="756">...}</text>
                <text x="272" y="772">Uri-Host:</text>
                <text x="380" y="772">"sensor.example"</text>
                <text x="260" y="788">&lt;Other</text>
                <text x="312" y="788">class</text>
                <text x="352" y="788">U/I</text>
                <text x="404" y="788">options&gt;</text>
                <text x="252" y="804">0xff</text>
                <text x="304" y="820">Encrypted_payload</text>
                <text x="384" y="820">{</text>
                <text x="268" y="836">0x01</text>
                <text x="316" y="836">(GET),</text>
                <text x="284" y="852">Observe:</text>
                <text x="328" y="852">0</text>
                <text x="384" y="852">(register),</text>
                <text x="288" y="868">Uri-Path:</text>
                <text x="348" y="868">"r",</text>
                <text x="276" y="884">&lt;Other</text>
                <text x="328" y="884">class</text>
                <text x="360" y="884">E</text>
                <text x="404" y="884">options&gt;</text>
                <text x="240" y="900">}</text>
                <text x="280" y="916">&lt;Signature&gt;</text>
                <text x="244" y="948">(S</text>
                <text x="280" y="948">steps</text>
                <text x="324" y="948">SN_5</text>
                <text x="356" y="948">in</text>
                <text x="384" y="948">the</text>
                <text x="424" y="948">Group</text>
                <text x="476" y="948">OSCORE</text>
                <text x="276" y="964">Security</text>
                <text x="344" y="964">Context</text>
                <text x="384" y="964">:</text>
                <text x="412" y="964">SN_5</text>
                <text x="484" y="964">502)</text>
                <text x="244" y="996">(S</text>
                <text x="288" y="996">creates</text>
                <text x="328" y="996">a</text>
                <text x="360" y="996">group</text>
                <text x="432" y="996">observation</text>
                <text x="492" y="996">of</text>
                <text x="520" y="996">/r)</text>
                <text x="244" y="1044">(S</text>
                <text x="300" y="1044">increments</text>
                <text x="360" y="1044">the</text>
                <text x="412" y="1044">observer</text>
                <text x="480" y="1044">counter</text>
                <text x="248" y="1060">for</text>
                <text x="280" y="1060">the</text>
                <text x="320" y="1060">group</text>
                <text x="392" y="1060">observation</text>
                <text x="452" y="1060">of</text>
                <text x="480" y="1060">/r)</text>
                <text x="260" y="1092">Token:</text>
                <text x="308" y="1092">0x5e</text>
                <text x="164" y="1108">2.05</text>
                <text x="264" y="1108">OSCORE:</text>
                <text x="320" y="1108">{piv:</text>
                <text x="364" y="1108">301;</text>
                <text x="404" y="1108">...}</text>
                <text x="268" y="1124">Max-Age:</text>
                <text x="312" y="1124">0</text>
                <text x="260" y="1140">&lt;Other</text>
                <text x="312" y="1140">class</text>
                <text x="352" y="1140">U/I</text>
                <text x="404" y="1140">options&gt;</text>
                <text x="252" y="1156">0xff</text>
                <text x="304" y="1172">Encrypted_payload</text>
                <text x="384" y="1172">{</text>
                <text x="268" y="1188">5.03</text>
                <text x="324" y="1188">(Service</text>
                <text x="416" y="1188">Unavailable),</text>
                <text x="312" y="1204">Content-Format:</text>
                <text x="428" y="1204">application/</text>
                <text x="380" y="1220">informative-response+cbor,</text>
                <text x="276" y="1236">&lt;Other</text>
                <text x="328" y="1236">class</text>
                <text x="360" y="1236">E</text>
                <text x="408" y="1236">options&gt;,</text>
                <text x="272" y="1252">0xff,</text>
                <text x="280" y="1268">Payload</text>
                <text x="320" y="1268">{</text>
                <text x="272" y="1284">/</text>
                <text x="312" y="1284">tp_info</text>
                <text x="352" y="1284">/</text>
                <text x="392" y="1284">0</text>
                <text x="408" y="1284">:</text>
                <text x="424" y="1284">[</text>
                <text x="432" y="1300">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="448" y="1316">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="364" y="1332">0x7b],</text>
                <text x="272" y="1348">/</text>
                <text x="308" y="1348">ph_req</text>
                <text x="344" y="1348">/</text>
                <text x="392" y="1348">1</text>
                <text x="408" y="1348">:</text>
                <text x="456" y="1348">bstr(0x05</text>
                <text x="504" y="1348">|</text>
                <text x="440" y="1364">OPT</text>
                <text x="464" y="1364">|</text>
                <text x="492" y="1364">0xff</text>
                <text x="520" y="1364">|</text>
                <text x="456" y="1380">PAYLOAD</text>
                <text x="496" y="1380">|</text>
                <text x="532" y="1380">SIGN),</text>
                <text x="272" y="1396">/</text>
                <text x="324" y="1396">last_notif</text>
                <text x="376" y="1396">/</text>
                <text x="392" y="1396">2</text>
                <text x="408" y="1396">:</text>
                <text x="456" y="1396">bstr(0x45</text>
                <text x="504" y="1396">|</text>
                <text x="440" y="1412">OPT</text>
                <text x="464" y="1412">|</text>
                <text x="492" y="1412">0xff</text>
                <text x="520" y="1412">|</text>
                <text x="456" y="1428">PAYLOAD</text>
                <text x="496" y="1428">|</text>
                <text x="532" y="1428">SIGN),</text>
                <text x="272" y="1444">/</text>
                <text x="316" y="1444">join_uri</text>
                <text x="360" y="1444">/</text>
                <text x="392" y="1444">4</text>
                <text x="408" y="1444">:</text>
                <text x="472" y="1444">"coap://myGM/</text>
                <text x="496" y="1460">ace-group/myGroup",</text>
                <text x="272" y="1476">/</text>
                <text x="308" y="1476">sec_gp</text>
                <text x="344" y="1476">/</text>
                <text x="392" y="1476">5</text>
                <text x="408" y="1476">:</text>
                <text x="456" y="1476">"myGroup"</text>
                <text x="256" y="1492">}</text>
                <text x="240" y="1508">}</text>
                <text x="260" y="1540">Token:</text>
                <text x="308" y="1540">0x4a</text>
                <text x="36" y="1556">2.05</text>
                <text x="264" y="1556">OSCORE:</text>
                <text x="320" y="1556">{piv:</text>
                <text x="364" y="1556">301;</text>
                <text x="404" y="1556">...}</text>
                <text x="260" y="1572">&lt;Other</text>
                <text x="312" y="1572">class</text>
                <text x="352" y="1572">U/I</text>
                <text x="404" y="1572">options&gt;</text>
                <text x="252" y="1588">0xff</text>
                <text x="256" y="1604">(Same</text>
                <text x="356" y="1604">Encrypted_payload)</text>
                <text x="40" y="1636">(#)</text>
                <text x="260" y="1652">Token:</text>
                <text x="308" y="1652">0x4b</text>
                <text x="40" y="1668">FETCH</text>
                <text x="268" y="1668">Observe:</text>
                <text x="312" y="1668">0</text>
                <text x="364" y="1668">(register)</text>
                <text x="264" y="1684">OSCORE:</text>
                <text x="320" y="1684">{kid:</text>
                <text x="364" y="1684">0x05</text>
                <text x="392" y="1684">;</text>
                <text x="420" y="1684">piv:</text>
                <text x="460" y="1684">501;</text>
                <text x="320" y="1700">kid</text>
                <text x="372" y="1700">context:</text>
                <text x="448" y="1700">0x57ab2e;</text>
                <text x="508" y="1700">...}</text>
                <text x="272" y="1716">Uri-Host:</text>
                <text x="380" y="1716">"sensor.example"</text>
                <text x="288" y="1732">Proxy-Scheme:</text>
                <text x="372" y="1732">"coap"</text>
                <text x="356" y="1748">Listen-To-Multicast-Responses:</text>
                <text x="488" y="1748">{</text>
                <text x="380" y="1764">[cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="400" y="1780">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="312" y="1796">0x7b]</text>
                <text x="240" y="1812">}</text>
                <text x="260" y="1828">&lt;Other</text>
                <text x="312" y="1828">class</text>
                <text x="352" y="1828">U/I</text>
                <text x="404" y="1828">options&gt;</text>
                <text x="252" y="1844">0xff</text>
                <text x="304" y="1860">Encrypted_payload</text>
                <text x="384" y="1860">{</text>
                <text x="268" y="1876">0x01</text>
                <text x="316" y="1876">(GET),</text>
                <text x="284" y="1892">Observe:</text>
                <text x="328" y="1892">0</text>
                <text x="384" y="1892">(register),</text>
                <text x="288" y="1908">Uri-Path:</text>
                <text x="348" y="1908">"r",</text>
                <text x="276" y="1924">&lt;Other</text>
                <text x="328" y="1924">class</text>
                <text x="360" y="1924">E</text>
                <text x="404" y="1924">options&gt;</text>
                <text x="240" y="1940">}</text>
                <text x="280" y="1956">&lt;Signature&gt;</text>
                <text x="252" y="1988">(The</text>
                <text x="296" y="1988">proxy</text>
                <text x="348" y="1988">starts</text>
                <text x="416" y="1988">listening</text>
                <text x="468" y="1988">to</text>
                <text x="496" y="1988">the</text>
                <text x="276" y="2004">GRP_ADDR</text>
                <text x="344" y="2004">address</text>
                <text x="392" y="2004">and</text>
                <text x="424" y="2004">the</text>
                <text x="476" y="2004">GRP_PORT</text>
                <text x="540" y="2004">port.)</text>
                <text x="252" y="2036">(The</text>
                <text x="296" y="2036">proxy</text>
                <text x="340" y="2036">adds</text>
                <text x="372" y="2036">C1</text>
                <text x="396" y="2036">to</text>
                <text x="256" y="2052">its</text>
                <text x="292" y="2052">list</text>
                <text x="324" y="2052">of</text>
                <text x="384" y="2052">observers.)</text>
                <text x="72" y="2100">|</text>
                <text x="104" y="2100">ACK</text>
                <text x="16" y="2132">...</text>
                <text x="72" y="2132">...</text>
                <text x="136" y="2132">...</text>
                <text x="208" y="2132">...</text>
                <text x="260" y="2180">Token:</text>
                <text x="308" y="2180">0x01</text>
                <text x="104" y="2196">FETCH</text>
                <text x="268" y="2196">Observe:</text>
                <text x="312" y="2196">0</text>
                <text x="364" y="2196">(register)</text>
                <text x="264" y="2212">OSCORE:</text>
                <text x="320" y="2212">{kid:</text>
                <text x="368" y="2212">0x02;</text>
                <text x="412" y="2212">piv:</text>
                <text x="452" y="2212">201;</text>
                <text x="492" y="2212">...}</text>
                <text x="272" y="2228">Uri-Host:</text>
                <text x="380" y="2228">"sensor.example"</text>
                <text x="288" y="2244">Proxy-Scheme:</text>
                <text x="372" y="2244">"coap"</text>
                <text x="260" y="2260">&lt;Other</text>
                <text x="312" y="2260">class</text>
                <text x="352" y="2260">U/I</text>
                <text x="404" y="2260">options&gt;</text>
                <text x="252" y="2276">0xff</text>
                <text x="304" y="2292">Encrypted_payload</text>
                <text x="384" y="2292">{</text>
                <text x="268" y="2308">0x01</text>
                <text x="316" y="2308">(GET),</text>
                <text x="284" y="2324">Observe:</text>
                <text x="328" y="2324">0</text>
                <text x="384" y="2324">(register),</text>
                <text x="288" y="2340">Uri-Path:</text>
                <text x="348" y="2340">"r",</text>
                <text x="276" y="2356">&lt;Other</text>
                <text x="328" y="2356">class</text>
                <text x="360" y="2356">E</text>
                <text x="404" y="2356">options&gt;</text>
                <text x="240" y="2372">}</text>
                <text x="260" y="2404">Token:</text>
                <text x="308" y="2404">0x5f</text>
                <text x="168" y="2420">FETCH</text>
                <text x="268" y="2420">Observe:</text>
                <text x="312" y="2420">0</text>
                <text x="364" y="2420">(register)</text>
                <text x="264" y="2436">OSCORE:</text>
                <text x="320" y="2436">{kid:</text>
                <text x="368" y="2436">0x02;</text>
                <text x="412" y="2436">piv:</text>
                <text x="452" y="2436">201;</text>
                <text x="492" y="2436">...}</text>
                <text x="272" y="2452">Uri-Host:</text>
                <text x="380" y="2452">"sensor.example"</text>
                <text x="260" y="2468">&lt;Other</text>
                <text x="312" y="2468">class</text>
                <text x="352" y="2468">U/I</text>
                <text x="404" y="2468">options&gt;</text>
                <text x="252" y="2484">0xff</text>
                <text x="304" y="2500">Encrypted_payload</text>
                <text x="384" y="2500">{</text>
                <text x="268" y="2516">0x01</text>
                <text x="316" y="2516">(GET),</text>
                <text x="284" y="2532">Observe:</text>
                <text x="328" y="2532">0</text>
                <text x="384" y="2532">(register),</text>
                <text x="288" y="2548">Uri-Path:</text>
                <text x="348" y="2548">"r",</text>
                <text x="276" y="2564">&lt;Other</text>
                <text x="328" y="2564">class</text>
                <text x="360" y="2564">E</text>
                <text x="404" y="2564">options&gt;</text>
                <text x="240" y="2580">}</text>
                <text x="244" y="2612">(S</text>
                <text x="300" y="2612">increments</text>
                <text x="360" y="2612">the</text>
                <text x="412" y="2612">observer</text>
                <text x="480" y="2612">counter</text>
                <text x="248" y="2628">for</text>
                <text x="280" y="2628">the</text>
                <text x="320" y="2628">group</text>
                <text x="392" y="2628">observation</text>
                <text x="452" y="2628">of</text>
                <text x="480" y="2628">/r)</text>
                <text x="260" y="2660">Token:</text>
                <text x="308" y="2660">0x5f</text>
                <text x="164" y="2676">2.05</text>
                <text x="264" y="2676">OSCORE:</text>
                <text x="320" y="2676">{piv:</text>
                <text x="364" y="2676">401;</text>
                <text x="404" y="2676">...}</text>
                <text x="268" y="2692">Max-Age:</text>
                <text x="312" y="2692">0</text>
                <text x="260" y="2708">&lt;Other</text>
                <text x="312" y="2708">class</text>
                <text x="352" y="2708">U/I</text>
                <text x="404" y="2708">options&gt;</text>
                <text x="252" y="2724">0xff</text>
                <text x="304" y="2740">Encrypted_payload</text>
                <text x="384" y="2740">{</text>
                <text x="268" y="2756">5.03</text>
                <text x="324" y="2756">(Service</text>
                <text x="416" y="2756">Unavailable),</text>
                <text x="312" y="2772">Content-Format:</text>
                <text x="428" y="2772">application/</text>
                <text x="380" y="2788">informative-response+cbor,</text>
                <text x="276" y="2804">&lt;Other</text>
                <text x="328" y="2804">class</text>
                <text x="360" y="2804">E</text>
                <text x="408" y="2804">options&gt;,</text>
                <text x="272" y="2820">0xff,</text>
                <text x="280" y="2836">Payload</text>
                <text x="320" y="2836">{</text>
                <text x="272" y="2852">/</text>
                <text x="312" y="2852">tp_info</text>
                <text x="352" y="2852">/</text>
                <text x="392" y="2852">0</text>
                <text x="408" y="2852">:</text>
                <text x="424" y="2852">[</text>
                <text x="432" y="2868">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="448" y="2884">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="364" y="2900">0x7b],</text>
                <text x="272" y="2916">/</text>
                <text x="308" y="2916">ph_req</text>
                <text x="344" y="2916">/</text>
                <text x="392" y="2916">1</text>
                <text x="408" y="2916">:</text>
                <text x="456" y="2916">bstr(0x05</text>
                <text x="504" y="2916">|</text>
                <text x="440" y="2932">OPT</text>
                <text x="464" y="2932">|</text>
                <text x="492" y="2932">0xff</text>
                <text x="520" y="2932">|</text>
                <text x="456" y="2948">PAYLOAD</text>
                <text x="496" y="2948">|</text>
                <text x="532" y="2948">SIGN),</text>
                <text x="272" y="2964">/</text>
                <text x="324" y="2964">last_notif</text>
                <text x="376" y="2964">/</text>
                <text x="392" y="2964">2</text>
                <text x="408" y="2964">:</text>
                <text x="456" y="2964">bstr(0x45</text>
                <text x="504" y="2964">|</text>
                <text x="440" y="2980">OPT</text>
                <text x="464" y="2980">|</text>
                <text x="492" y="2980">0xff</text>
                <text x="520" y="2980">|</text>
                <text x="456" y="2996">PAYLOAD</text>
                <text x="496" y="2996">|</text>
                <text x="532" y="2996">SIGN),</text>
                <text x="272" y="3012">/</text>
                <text x="316" y="3012">join_uri</text>
                <text x="360" y="3012">/</text>
                <text x="392" y="3012">4</text>
                <text x="408" y="3012">:</text>
                <text x="472" y="3012">"coap://myGM/</text>
                <text x="496" y="3028">ace-group/myGroup",</text>
                <text x="272" y="3044">/</text>
                <text x="308" y="3044">sec_gp</text>
                <text x="344" y="3044">/</text>
                <text x="392" y="3044">5</text>
                <text x="408" y="3044">:</text>
                <text x="456" y="3044">"myGroup"</text>
                <text x="256" y="3060">}</text>
                <text x="240" y="3076">}</text>
                <text x="260" y="3108">Token:</text>
                <text x="308" y="3108">0x01</text>
                <text x="100" y="3124">2.05</text>
                <text x="264" y="3124">OSCORE:</text>
                <text x="320" y="3124">{piv:</text>
                <text x="364" y="3124">401;</text>
                <text x="404" y="3124">...}</text>
                <text x="260" y="3140">&lt;Other</text>
                <text x="312" y="3140">class</text>
                <text x="352" y="3140">U/I</text>
                <text x="404" y="3140">options&gt;</text>
                <text x="252" y="3156">0xff</text>
                <text x="256" y="3172">(Same</text>
                <text x="356" y="3172">Encrypted_payload)</text>
                <text x="104" y="3188">(#)</text>
                <text x="260" y="3204">Token:</text>
                <text x="308" y="3204">0x02</text>
                <text x="104" y="3220">FETCH</text>
                <text x="268" y="3220">Observe:</text>
                <text x="312" y="3220">0</text>
                <text x="364" y="3220">(register)</text>
                <text x="264" y="3236">OSCORE:</text>
                <text x="320" y="3236">{kid:</text>
                <text x="368" y="3236">0x05;</text>
                <text x="412" y="3236">piv:</text>
                <text x="452" y="3236">501;</text>
                <text x="320" y="3252">kid</text>
                <text x="372" y="3252">context:</text>
                <text x="440" y="3252">57ab2e;</text>
                <text x="492" y="3252">...}</text>
                <text x="272" y="3268">Uri-Host:</text>
                <text x="380" y="3268">"sensor.example"</text>
                <text x="288" y="3284">Proxy-Scheme:</text>
                <text x="372" y="3284">"coap"</text>
                <text x="356" y="3300">Listen-To-Multicast-Responses:</text>
                <text x="488" y="3300">{</text>
                <text x="380" y="3316">[cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="400" y="3332">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="312" y="3348">0x7b]</text>
                <text x="240" y="3364">}</text>
                <text x="260" y="3380">&lt;Other</text>
                <text x="312" y="3380">class</text>
                <text x="352" y="3380">U/I</text>
                <text x="404" y="3380">options&gt;</text>
                <text x="252" y="3396">0xff</text>
                <text x="304" y="3412">Encrypted_payload</text>
                <text x="384" y="3412">{</text>
                <text x="268" y="3428">0x01</text>
                <text x="316" y="3428">(GET),</text>
                <text x="284" y="3444">Observe:</text>
                <text x="328" y="3444">0</text>
                <text x="384" y="3444">(register),</text>
                <text x="288" y="3460">Uri-Path:</text>
                <text x="348" y="3460">"r",</text>
                <text x="276" y="3476">&lt;Other</text>
                <text x="328" y="3476">class</text>
                <text x="360" y="3476">E</text>
                <text x="404" y="3476">options&gt;</text>
                <text x="240" y="3492">}</text>
                <text x="280" y="3508">&lt;Signature&gt;</text>
                <text x="252" y="3540">(The</text>
                <text x="296" y="3540">proxy</text>
                <text x="340" y="3540">adds</text>
                <text x="372" y="3540">C2</text>
                <text x="396" y="3540">to</text>
                <text x="256" y="3556">its</text>
                <text x="292" y="3556">list</text>
                <text x="324" y="3556">of</text>
                <text x="384" y="3556">observers.)</text>
                <text x="104" y="3588">ACK</text>
                <text x="16" y="3636">...</text>
                <text x="72" y="3636">...</text>
                <text x="136" y="3636">...</text>
                <text x="208" y="3636">...</text>
                <text x="252" y="3684">(The</text>
                <text x="296" y="3684">value</text>
                <text x="332" y="3684">of</text>
                <text x="360" y="3684">the</text>
                <text x="412" y="3684">resource</text>
                <text x="252" y="3700">/r</text>
                <text x="296" y="3700">changes</text>
                <text x="340" y="3700">to</text>
                <text x="388" y="3700">"5678".)</text>
                <text x="180" y="3732">(##)</text>
                <text x="260" y="3748">Token:</text>
                <text x="308" y="3748">0x7b</text>
                <text x="164" y="3764">2.05</text>
                <text x="268" y="3764">Observe:</text>
                <text x="316" y="3764">11</text>
                <text x="264" y="3780">OSCORE:</text>
                <text x="320" y="3780">{kid:</text>
                <text x="368" y="3780">0x05;</text>
                <text x="412" y="3780">piv:</text>
                <text x="452" y="3780">502;</text>
                <text x="492" y="3780">...}</text>
                <text x="260" y="3796">&lt;Other</text>
                <text x="312" y="3796">class</text>
                <text x="352" y="3796">U/I</text>
                <text x="404" y="3796">options&gt;</text>
                <text x="252" y="3812">0xff</text>
                <text x="304" y="3828">Encrypted_payload</text>
                <text x="384" y="3828">{</text>
                <text x="268" y="3844">2.05</text>
                <text x="332" y="3844">(Content),</text>
                <text x="284" y="3860">Observe:</text>
                <text x="356" y="3860">[empty],</text>
                <text x="276" y="3876">&lt;Other</text>
                <text x="328" y="3876">class</text>
                <text x="360" y="3876">E</text>
                <text x="408" y="3876">options&gt;,</text>
                <text x="272" y="3892">0xff,</text>
                <text x="284" y="3908">Payload:</text>
                <text x="348" y="3908">"5678"</text>
                <text x="240" y="3924">}</text>
                <text x="280" y="3940">&lt;Signature&gt;</text>
                <text x="40" y="3956">(#)</text>
                <text x="260" y="3972">Token:</text>
                <text x="308" y="3972">0x4b</text>
                <text x="36" y="3988">2.05</text>
                <text x="268" y="3988">Observe:</text>
                <text x="328" y="3988">54123</text>
                <text x="264" y="4004">OSCORE:</text>
                <text x="320" y="4004">{kid:</text>
                <text x="368" y="4004">0x05;</text>
                <text x="412" y="4004">piv:</text>
                <text x="452" y="4004">502;</text>
                <text x="492" y="4004">...}</text>
                <text x="260" y="4020">&lt;Other</text>
                <text x="312" y="4020">class</text>
                <text x="352" y="4020">U/I</text>
                <text x="404" y="4020">options&gt;</text>
                <text x="252" y="4036">0xff</text>
                <text x="256" y="4052">(Same</text>
                <text x="352" y="4052">Encrypted_payload</text>
                <text x="440" y="4052">and</text>
                <text x="500" y="4052">Signature)</text>
                <text x="104" y="4068">(#)</text>
                <text x="260" y="4084">Token:</text>
                <text x="308" y="4084">0x02</text>
                <text x="100" y="4100">2.05</text>
                <text x="268" y="4100">Observe:</text>
                <text x="328" y="4100">54123</text>
                <text x="264" y="4116">OSCORE:</text>
                <text x="320" y="4116">{kid:</text>
                <text x="368" y="4116">0x05;</text>
                <text x="412" y="4116">piv:</text>
                <text x="452" y="4116">502;</text>
                <text x="492" y="4116">...}</text>
                <text x="260" y="4132">&lt;Other</text>
                <text x="312" y="4132">class</text>
                <text x="352" y="4132">U/I</text>
                <text x="404" y="4132">options&gt;</text>
                <text x="252" y="4148">0xff</text>
                <text x="256" y="4164">(Same</text>
                <text x="352" y="4164">Encrypted_payload</text>
                <text x="440" y="4164">and</text>
                <text x="500" y="4164">signature)</text>
                <text x="16" y="4228">(#)</text>
                <text x="60" y="4228">Sent</text>
                <text x="100" y="4228">over</text>
                <text x="156" y="4228">unicast,</text>
                <text x="208" y="4228">and</text>
                <text x="264" y="4228">protected</text>
                <text x="324" y="4228">with</text>
                <text x="368" y="4228">Group</text>
                <text x="420" y="4228">OSCORE</text>
                <text x="492" y="4228">end-to-end</text>
                <text x="72" y="4244">between</text>
                <text x="120" y="4244">the</text>
                <text x="164" y="4244">server</text>
                <text x="208" y="4244">and</text>
                <text x="240" y="4244">the</text>
                <text x="292" y="4244">clients.</text>
                <text x="20" y="4276">(##)</text>
                <text x="60" y="4276">Sent</text>
                <text x="100" y="4276">over</text>
                <text x="132" y="4276">IP</text>
                <text x="184" y="4276">multicast</text>
                <text x="236" y="4276">to</text>
                <text x="340" y="4276">GROUP_ADDR:GROUP_PORT,</text>
                <text x="448" y="4276">and</text>
                <text x="504" y="4276">protected</text>
                <text x="60" y="4292">with</text>
                <text x="104" y="4292">Group</text>
                <text x="156" y="4292">OSCORE</text>
                <text x="228" y="4292">end-to-end</text>
                <text x="304" y="4292">between</text>
                <text x="352" y="4292">the</text>
                <text x="396" y="4292">server</text>
                <text x="440" y="4292">and</text>
                <text x="472" y="4292">the</text>
                <text x="524" y="4292">clients.</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
C1      C2      P         S
|       |       |         |
|       |       |         |  (The value of the resource /r is "1234")
|       |       |         |
+-------------->|         |  Token: 0x4a
| FETCH |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x01; piv: 101; ...}
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  Proxy-Scheme: "coap"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       +-------->|  Token: 0x5e
|       |       | FETCH   |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x01; piv: 101; ...}
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       |         |
|       |       |         |  (S allocates the available
|       |       |         |   Token value 0x7b .)
|       |       |         |
|       |       |         |  (S sends to itself a phantom observation
|       |       |         |  request PH_REQ as coming from the
|       |       |         |  IP multicast address GRP_ADDR)
|       |       |    (#)  |
|       |       |  .------+
|       |       | /       |
|       |       | \       |
|       |       |  `----->|  Token: 0x7b
|       |       |   FETCH |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x05; piv: 501;
|       |       |         |           kid context: 0x57ab2e; ...}
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|       |       |         |  (S steps SN_5 in the Group OSCORE
|       |       |         |   Security Context : SN_5 <-- 502)
|       |       |         |
|       |       |         |  (S creates a group observation of /r)
|       |       |         |
|       |       |         |
|       |       |         |  (S increments the observer counter
|       |       |         |  for the group observation of /r)
|       |       |         |
|       |       |<--------+  Token: 0x5e
|       |       | 2.05    |  OSCORE: {piv: 301; ...}
|       |       |         |  Max-Age: 0
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    5.03 (Service Unavailable),
|       |       |         |    Content-Format: application/
|       |       |         |       informative-response+cbor,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    Payload {
|       |       |         |      / tp_info /    0 : [
|       |       |         |           cri'coap://SRV_ADDR:SRV_PORT/',
|       |       |         |             cri'coap://GRP_ADDR:GRP_PORT/',
|       |       |         |               0x7b],
|       |       |         |      / ph_req /     1 : bstr(0x05 |
|       |       |         |                          OPT | 0xff |
|       |       |         |                          PAYLOAD | SIGN),
|       |       |         |      / last_notif / 2 : bstr(0x45 |
|       |       |         |                          OPT | 0xff |
|       |       |         |                          PAYLOAD | SIGN),
|       |       |         |      / join_uri /   4 : "coap://myGM/
|       |       |         |                         ace-group/myGroup",
|       |       |         |      / sec_gp /     5 : "myGroup"
|       |       |         |    }
|       |       |         |  }
|       |       |         |
|<--------------+         |  Token: 0x4a
| 2.05  |       |         |  OSCORE: {piv: 301; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload)
|       |       |         |
|  (#)  |       |         |
+-------------->|         |  Token: 0x4b
| FETCH |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x05 ; piv: 501;
|       |       |         |           kid context: 0x57ab2e; ...}
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  Proxy-Scheme: "coap"
|       |       |         |  Listen-To-Multicast-Responses: {
|       |       |         |    [cri'coap://SRV_ADDR:SRV_PORT/',
|       |       |         |       cri'coap://GRP_ADDR:GRP_PORT/',
|       |       |         |         0x7b]
|       |       |         |  }
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|       |       |         |  (The proxy starts listening to the
|       |       |         |   GRP_ADDR address and the GRP_PORT port.)
|       |       |         |
|       |       |         |  (The proxy adds C1 to
|       |       |         |   its list of observers.)
|       |       |         |
|<--------------+         |
|       |  ACK  |         |

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

|       |       |         |
|       +------>|         |  Token: 0x01
|       | FETCH |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x02; piv: 201; ...}
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  Proxy-Scheme: "coap"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       +-------->|  Token: 0x5f
|       |       | FETCH   |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x02; piv: 201; ...}
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       |         |  (S increments the observer counter
|       |       |         |  for the group observation of /r)
|       |       |         |
|       |       |<--------+  Token: 0x5f
|       |       | 2.05    |  OSCORE: {piv: 401; ...}
|       |       |         |  Max-Age: 0
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    5.03 (Service Unavailable),
|       |       |         |    Content-Format: application/
|       |       |         |       informative-response+cbor,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    Payload {
|       |       |         |      / tp_info /    0 : [
|       |       |         |           cri'coap://SRV_ADDR:SRV_PORT/',
|       |       |         |             cri'coap://GRP_ADDR:GRP_PORT/',
|       |       |         |               0x7b],
|       |       |         |      / ph_req /     1 : bstr(0x05 |
|       |       |         |                          OPT | 0xff |
|       |       |         |                          PAYLOAD | SIGN),
|       |       |         |      / last_notif / 2 : bstr(0x45 |
|       |       |         |                          OPT | 0xff |
|       |       |         |                          PAYLOAD | SIGN),
|       |       |         |      / join_uri /   4 : "coap://myGM/
|       |       |         |                         ace-group/myGroup",
|       |       |         |      / sec_gp /     5 : "myGroup"
|       |       |         |    }
|       |       |         |  }
|       |       |         |
|       |<------+         |  Token: 0x01
|       | 2.05  |         |  OSCORE: {piv: 401; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload)
|       |  (#)  |         |
|       +------>|         |  Token: 0x02
|       | FETCH |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x05; piv: 501;
|       |       |         |           kid context: 57ab2e; ...}
|       |       |         |  Uri-Host: "sensor.example"
|       |       |         |  Proxy-Scheme: "coap"
|       |       |         |  Listen-To-Multicast-Responses: {
|       |       |         |    [cri'coap://SRV_ADDR:SRV_PORT/',
|       |       |         |       cri'coap://GRP_ADDR:GRP_PORT/',
|       |       |         |         0x7b]
|       |       |         |  }
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|       |       |         |  (The proxy adds C2 to
|       |       |         |   its list of observers.)
|       |<------+         |
|       |  ACK  |         |
|       |       |         |

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

|       |       |         |
|       |       |         |  (The value of the resource
|       |       |         |   /r changes to "5678".)
|       |       |         |
|       |       |   (##)  |
|       |       |<--------+  Token: 0x7b
|       |       | 2.05    |  Observe: 11
|       |       |         |  OSCORE: {kid: 0x05; piv: 502; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    2.05 (Content),
|       |       |         |    Observe: [empty],
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    Payload: "5678"
|       |       |         |  }
|       |       |         |  <Signature>
|  (#)  |       |         |
|<--------------+         |  Token: 0x4b
| 2.05  |       |         |  Observe: 54123
|       |       |         |  OSCORE: {kid: 0x05; piv: 502; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload and Signature)
|       |  (#)  |         |
|       |<------+         |  Token: 0x02
|       | 2.05  |         |  Observe: 54123
|       |       |         |  OSCORE: {kid: 0x05; piv: 502; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload and signature)
|       |       |         |


(#)  Sent over unicast, and protected with Group OSCORE end-to-end
     between the server and the clients.

(##) Sent over IP multicast to GROUP_ADDR:GROUP_PORT, and protected
     with Group OSCORE end-to-end between the server and the clients.
]]></artwork>
        </artset>
      </figure>
      <t>Unlike in the unprotected example in <xref target="intermediaries-example"/>, the proxy does <em>not</em> have all the information to perform request deduplication and can only recognize the identical request once the client sends the ticket request.</t>
    </section>
    <section anchor="intermediaries-example-e2e-security-det">
      <name>Example with a Proxy and with Deterministic Requests</name>
      <t>This section provides an example when a proxy P is used between the clients and the server, and Group OSCORE is used to protect multicast notifications end-to-end between the server and the clients.</t>
      <t>In addition, the phantom request is especially a deterministic request (see <xref 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 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 computing the same deterministic request to be used as phantom observation request.</t>
          </li>
          <li>
            <t>If the client does not rely on a proxy between itself and the server, it simply sets the group observation and starts listening to multicast notifications. Building on Step 2 above, the same would happen if the phantom request was not specifically a deterministic request.</t>
          </li>
          <li>
            <t>If the client relies on a proxy between itself and the server, it uses the phantom request as a ticket request (see <xref target="intermediaries-e2e-security"/>). However, unlike the case considered in <xref target="intermediaries-e2e-security"/> where the ticket request is not a deterministic request, the client does not include a Listen-to-Multicast-Responses Option in the phantom request sent to the proxy.</t>
          </li>
          <li>
            <t>Unlike for the case considered in <xref target="intermediaries-e2e-security"/>, here the proxy does not know that the request is exactly a ticket request for subscribing to multicast notifications. Thus, the proxy simply forwards the ticket request to the server like it normally would.</t>
          </li>
          <li>
            <t>The server receives the ticket request, which is a deviation from the case where the ticket request is not a deterministic request and stops at the proxy (see <xref target="intermediaries-e2e-security"/>). Then, the server recognizes the phantom request among the stored ones, through a byte-by-byte comparison of the incoming message minus the transport-related fields (see <xref 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>From the received informative response, the proxy retrieves everything needed to set itself as an observer in the group observation and it starts listening to multicast notifications. If the informative response includes a latest notification, the proxy caches it and forwards it back to the client. Otherwise, the proxy replies with an empty ACK (if it has not done it already and the request from the client was Confirmable).</t>
          </li>
          <li>
            <t>Like in the case with a non-deterministic phantom request considered in <xref target="intermediaries-e2e-security"/>, the proxy fans out the multicast notifications to the origin clients as they come. Also, as new clients following the first one contact the proxy, 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>S is a member of the OSCORE group with 'kid context' = 0x57ab2e as Group ID. In the OSCORE group, S has 'kid' = 0x05 as Sender ID and SN_5 = 501 as Sender Sequence Number.</t>
          </li>
        </ul>
        <t>In addition:</t>
        <ul spacing="normal">
          <li>
            <t>The proxy has address PRX_ADDR and listens to the port number PRX_PORT.</t>
          </li>
          <li>
            <t>The deterministic client in the OSCORE group has 'kid' = 0x09.</t>
          </li>
        </ul>
        <t>Unless explicitly indicated, all messages transmitted on the wire are sent over unicast and protected with Group OSCORE end-to-end between a client and the server.</t>
        <figure anchor="example-proxy-oscore-det-request">
          <name>Example of Group Observation with a Proxy and Group OSCORE, where the Phantom Request is a Deterministic Request</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="3424" width="576" viewBox="0 0 576 3424" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,48 L 8,2112" fill="none" stroke="black"/>
                <path d="M 8,2176 L 8,2688" fill="none" stroke="black"/>
                <path d="M 8,2752 L 8,3312" fill="none" stroke="black"/>
                <path d="M 72,48 L 72,664" fill="none" stroke="black"/>
                <path d="M 72,680 L 72,1912" fill="none" stroke="black"/>
                <path d="M 72,1928 L 72,2112" fill="none" stroke="black"/>
                <path d="M 72,2176 L 72,2688" fill="none" stroke="black"/>
                <path d="M 72,2752 L 72,3096" fill="none" stroke="black"/>
                <path d="M 72,3112 L 72,3312" fill="none" stroke="black"/>
                <path d="M 136,48 L 136,2112" fill="none" stroke="black"/>
                <path d="M 136,2176 L 136,2688" fill="none" stroke="black"/>
                <path d="M 136,2752 L 136,3312" fill="none" stroke="black"/>
                <path d="M 216,48 L 216,2112" fill="none" stroke="black"/>
                <path d="M 216,2176 L 216,2688" fill="none" stroke="black"/>
                <path d="M 216,2752 L 216,3312" fill="none" stroke="black"/>
                <path d="M 512,1152 L 512,1160" fill="none" stroke="black"/>
                <path d="M 160,240 L 216,240" fill="none" stroke="black"/>
                <path d="M 160,288 L 208,288" fill="none" stroke="black"/>
                <path d="M 8,672 L 128,672" fill="none" stroke="black"/>
                <path d="M 136,912 L 208,912" fill="none" stroke="black"/>
                <path d="M 144,1552 L 216,1552" fill="none" stroke="black"/>
                <path d="M 16,1920 L 136,1920" fill="none" stroke="black"/>
                <path d="M 72,2224 L 128,2224" fill="none" stroke="black"/>
                <path d="M 80,2496 L 136,2496" fill="none" stroke="black"/>
                <path d="M 144,2832 L 216,2832" fill="none" stroke="black"/>
                <path d="M 16,3104 L 136,3104" fill="none" stroke="black"/>
                <path d="M 80,3216 L 136,3216" fill="none" stroke="black"/>
                <path d="M 148,264 L 160,288" fill="none" stroke="black"/>
                <path d="M 148,264 L 160,240" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="216,912 204,906.4 204,917.6" fill="black" transform="rotate(0,208,912)"/>
                <polygon class="arrowhead" points="216,288 204,282.4 204,293.6" fill="black" transform="rotate(0,208,288)"/>
                <polygon class="arrowhead" points="152,2832 140,2826.4 140,2837.6" fill="black" transform="rotate(180,144,2832)"/>
                <polygon class="arrowhead" points="152,1552 140,1546.4 140,1557.6" fill="black" transform="rotate(180,144,1552)"/>
                <polygon class="arrowhead" points="136,2224 124,2218.4 124,2229.6" fill="black" transform="rotate(0,128,2224)"/>
                <polygon class="arrowhead" points="136,672 124,666.4 124,677.6" fill="black" transform="rotate(0,128,672)"/>
                <polygon class="arrowhead" points="88,3216 76,3210.4 76,3221.6" fill="black" transform="rotate(180,80,3216)"/>
                <polygon class="arrowhead" points="88,2496 76,2490.4 76,2501.6" fill="black" transform="rotate(180,80,2496)"/>
                <polygon class="arrowhead" points="24,3104 12,3098.4 12,3109.6" fill="black" transform="rotate(180,16,3104)"/>
                <polygon class="arrowhead" points="24,1920 12,1914.4 12,1925.6" fill="black" transform="rotate(180,16,1920)"/>
                <g class="text">
                  <text x="12" y="36">C1</text>
                  <text x="76" y="36">C2</text>
                  <text x="136" y="36">P</text>
                  <text x="216" y="36">S</text>
                  <text x="252" y="68">(The</text>
                  <text x="296" y="68">value</text>
                  <text x="332" y="68">of</text>
                  <text x="360" y="68">the</text>
                  <text x="412" y="68">resource</text>
                  <text x="460" y="68">/r</text>
                  <text x="484" y="68">is</text>
                  <text x="528" y="68">"1234")</text>
                  <text x="244" y="100">(S</text>
                  <text x="296" y="100">allocates</text>
                  <text x="352" y="100">the</text>
                  <text x="408" y="100">available</text>
                  <text x="264" y="116">Token</text>
                  <text x="312" y="116">value</text>
                  <text x="356" y="116">0x7b</text>
                  <text x="388" y="116">.)</text>
                  <text x="244" y="148">(S</text>
                  <text x="280" y="148">sends</text>
                  <text x="316" y="148">to</text>
                  <text x="356" y="148">itself</text>
                  <text x="392" y="148">a</text>
                  <text x="432" y="148">phantom</text>
                  <text x="512" y="148">observation</text>
                  <text x="272" y="164">request</text>
                  <text x="332" y="164">PH_REQ</text>
                  <text x="372" y="164">as</text>
                  <text x="412" y="164">coming</text>
                  <text x="460" y="164">from</text>
                  <text x="496" y="164">the</text>
                  <text x="252" y="180">IP</text>
                  <text x="304" y="180">multicast</text>
                  <text x="376" y="180">address</text>
                  <text x="448" y="180">GRP_ADDR.</text>
                  <text x="256" y="196">The</text>
                  <text x="296" y="196">Group</text>
                  <text x="348" y="196">OSCORE</text>
                  <text x="420" y="196">processing</text>
                  <text x="492" y="196">occurs</text>
                  <text x="532" y="196">as</text>
                  <text x="280" y="212">specified</text>
                  <text x="336" y="212">for</text>
                  <text x="360" y="212">a</text>
                  <text x="424" y="212">deterministic</text>
                  <text x="516" y="212">request)</text>
                  <text x="260" y="292">Token:</text>
                  <text x="308" y="292">0x7b</text>
                  <text x="184" y="308">FETCH</text>
                  <text x="272" y="308">Uri-Host:</text>
                  <text x="380" y="308">"sensor.example"</text>
                  <text x="268" y="324">Observe:</text>
                  <text x="312" y="324">0</text>
                  <text x="364" y="324">(register)</text>
                  <text x="264" y="340">OSCORE:</text>
                  <text x="320" y="340">{kid:</text>
                  <text x="364" y="340">0x09</text>
                  <text x="392" y="340">;</text>
                  <text x="420" y="340">piv:</text>
                  <text x="448" y="340">0</text>
                  <text x="464" y="340">;</text>
                  <text x="320" y="356">kid</text>
                  <text x="372" y="356">context:</text>
                  <text x="444" y="356">0x57ab2e</text>
                  <text x="488" y="356">;</text>
                  <text x="512" y="356">...</text>
                  <text x="536" y="356">}</text>
                  <text x="260" y="372">&lt;Other</text>
                  <text x="312" y="372">class</text>
                  <text x="352" y="372">U/I</text>
                  <text x="404" y="372">options&gt;</text>
                  <text x="252" y="388">0xff</text>
                  <text x="304" y="404">Encrypted_payload</text>
                  <text x="384" y="404">{</text>
                  <text x="268" y="420">0x01</text>
                  <text x="316" y="420">(GET),</text>
                  <text x="284" y="436">Observe:</text>
                  <text x="328" y="436">0</text>
                  <text x="384" y="436">(register),</text>
                  <text x="288" y="452">Uri-Path:</text>
                  <text x="348" y="452">"r",</text>
                  <text x="276" y="468">&lt;Other</text>
                  <text x="328" y="468">class</text>
                  <text x="360" y="468">E</text>
                  <text x="404" y="468">options&gt;</text>
                  <text x="240" y="484">}</text>
                  <text x="244" y="516">(S</text>
                  <text x="288" y="516">creates</text>
                  <text x="328" y="516">a</text>
                  <text x="360" y="516">group</text>
                  <text x="432" y="516">observation</text>
                  <text x="492" y="516">of</text>
                  <text x="520" y="516">/r)</text>
                  <text x="252" y="548">(The</text>
                  <text x="300" y="548">server</text>
                  <text x="348" y="548">does</text>
                  <text x="384" y="548">not</text>
                  <text x="432" y="548">respond</text>
                  <text x="476" y="548">to</text>
                  <text x="520" y="548">PH_REQ.</text>
                  <text x="256" y="564">The</text>
                  <text x="300" y="564">server</text>
                  <text x="356" y="564">stores</text>
                  <text x="412" y="564">PH_REQ</text>
                  <text x="472" y="564">locally</text>
                  <text x="520" y="564">and</text>
                  <text x="264" y="580">makes</text>
                  <text x="300" y="580">it</text>
                  <text x="352" y="580">available</text>
                  <text x="404" y="580">at</text>
                  <text x="428" y="580">an</text>
                  <text x="476" y="580">external</text>
                  <text x="544" y="580">source)</text>
                  <text x="248" y="628">(C1</text>
                  <text x="296" y="628">obtains</text>
                  <text x="356" y="628">PH_REQ</text>
                  <text x="400" y="628">and</text>
                  <text x="440" y="628">sends</text>
                  <text x="476" y="628">it</text>
                  <text x="500" y="628">to</text>
                  <text x="524" y="628">P)</text>
                  <text x="260" y="676">Token:</text>
                  <text x="308" y="676">0x4a</text>
                  <text x="40" y="692">FETCH</text>
                  <text x="272" y="692">Uri-Host:</text>
                  <text x="380" y="692">"sensor.example"</text>
                  <text x="268" y="708">Observe:</text>
                  <text x="312" y="708">0</text>
                  <text x="364" y="708">(register)</text>
                  <text x="264" y="724">OSCORE:</text>
                  <text x="320" y="724">{kid:</text>
                  <text x="364" y="724">0x09</text>
                  <text x="392" y="724">;</text>
                  <text x="420" y="724">piv:</text>
                  <text x="448" y="724">0</text>
                  <text x="464" y="724">;</text>
                  <text x="320" y="740">kid</text>
                  <text x="372" y="740">context:</text>
                  <text x="444" y="740">0x57ab2e</text>
                  <text x="488" y="740">;</text>
                  <text x="512" y="740">...</text>
                  <text x="536" y="740">}</text>
                  <text x="288" y="756">Proxy-Scheme:</text>
                  <text x="372" y="756">"coap"</text>
                  <text x="260" y="772">&lt;Other</text>
                  <text x="312" y="772">class</text>
                  <text x="352" y="772">U/I</text>
                  <text x="404" y="772">options&gt;</text>
                  <text x="252" y="788">0xff</text>
                  <text x="304" y="804">Encrypted_payload</text>
                  <text x="384" y="804">{</text>
                  <text x="268" y="820">0x01</text>
                  <text x="316" y="820">(GET),</text>
                  <text x="284" y="836">Observe:</text>
                  <text x="328" y="836">0</text>
                  <text x="384" y="836">(register),</text>
                  <text x="288" y="852">Uri-Path:</text>
                  <text x="348" y="852">"r",</text>
                  <text x="276" y="868">&lt;Other</text>
                  <text x="328" y="868">class</text>
                  <text x="360" y="868">E</text>
                  <text x="404" y="868">options&gt;</text>
                  <text x="240" y="884">}</text>
                  <text x="260" y="916">Token:</text>
                  <text x="308" y="916">0x5e</text>
                  <text x="168" y="932">FETCH</text>
                  <text x="272" y="932">Uri-Host:</text>
                  <text x="380" y="932">"sensor.example"</text>
                  <text x="268" y="948">Observe:</text>
                  <text x="312" y="948">0</text>
                  <text x="364" y="948">(register)</text>
                  <text x="264" y="964">OSCORE:</text>
                  <text x="320" y="964">{kid:</text>
                  <text x="364" y="964">0x09</text>
                  <text x="392" y="964">;</text>
                  <text x="420" y="964">piv:</text>
                  <text x="448" y="964">0</text>
                  <text x="464" y="964">;</text>
                  <text x="320" y="980">kid</text>
                  <text x="372" y="980">context:</text>
                  <text x="444" y="980">0x57ab2e</text>
                  <text x="488" y="980">;</text>
                  <text x="512" y="980">...</text>
                  <text x="536" y="980">}</text>
                  <text x="260" y="996">&lt;Other</text>
                  <text x="312" y="996">class</text>
                  <text x="352" y="996">U/I</text>
                  <text x="404" y="996">options&gt;</text>
                  <text x="252" y="1012">0xff</text>
                  <text x="304" y="1028">Encrypted_payload</text>
                  <text x="384" y="1028">{</text>
                  <text x="268" y="1044">0x01</text>
                  <text x="316" y="1044">(GET),</text>
                  <text x="284" y="1060">Observe:</text>
                  <text x="328" y="1060">0</text>
                  <text x="384" y="1060">(register),</text>
                  <text x="288" y="1076">Uri-Path:</text>
                  <text x="348" y="1076">"r",</text>
                  <text x="276" y="1092">&lt;Other</text>
                  <text x="328" y="1092">class</text>
                  <text x="360" y="1092">E</text>
                  <text x="404" y="1092">options&gt;</text>
                  <text x="240" y="1108">}</text>
                  <text x="244" y="1140">(S</text>
                  <text x="300" y="1140">recognizes</text>
                  <text x="372" y="1140">PH_REQ</text>
                  <text x="432" y="1140">through</text>
                  <text x="516" y="1140">byte-by-byte</text>
                  <text x="284" y="1156">comparison</text>
                  <text x="360" y="1156">against</text>
                  <text x="408" y="1156">the</text>
                  <text x="452" y="1156">stored</text>
                  <text x="496" y="1156">one</text>
                  <text x="536" y="1156">and</text>
                  <text x="264" y="1172">skips</text>
                  <text x="304" y="1172">any</text>
                  <text x="344" y="1172">Group</text>
                  <text x="396" y="1172">OSCORE</text>
                  <text x="472" y="1172">processing)</text>
                  <text x="244" y="1204">(S</text>
                  <text x="292" y="1204">prepares</text>
                  <text x="344" y="1204">the</text>
                  <text x="384" y="1204">"last</text>
                  <text x="464" y="1204">notification"</text>
                  <text x="276" y="1220">response</text>
                  <text x="344" y="1220">defined</text>
                  <text x="404" y="1220">below)</text>
                  <text x="252" y="1252">0x45</text>
                  <text x="296" y="1252">(2.05</text>
                  <text x="356" y="1252">Content)</text>
                  <text x="268" y="1268">Observe:</text>
                  <text x="316" y="1268">10</text>
                  <text x="264" y="1284">OSCORE:</text>
                  <text x="320" y="1284">{kid:</text>
                  <text x="364" y="1284">0x05</text>
                  <text x="392" y="1284">;</text>
                  <text x="420" y="1284">piv:</text>
                  <text x="456" y="1284">501</text>
                  <text x="480" y="1284">;</text>
                  <text x="508" y="1284">...}</text>
                  <text x="268" y="1300">Max-Age:</text>
                  <text x="324" y="1300">3000</text>
                  <text x="260" y="1316">&lt;Other</text>
                  <text x="312" y="1316">class</text>
                  <text x="352" y="1316">U/I</text>
                  <text x="404" y="1316">options&gt;</text>
                  <text x="252" y="1332">0xff</text>
                  <text x="304" y="1348">Encrypted_payload</text>
                  <text x="384" y="1348">{</text>
                  <text x="268" y="1364">0x45</text>
                  <text x="312" y="1364">(2.05</text>
                  <text x="376" y="1364">Content),</text>
                  <text x="284" y="1380">Observe:</text>
                  <text x="356" y="1380">[empty],</text>
                  <text x="284" y="1396">Payload:</text>
                  <text x="348" y="1396">"1234"</text>
                  <text x="240" y="1412">}</text>
                  <text x="280" y="1428">&lt;Signature&gt;</text>
                  <text x="244" y="1460">(S</text>
                  <text x="300" y="1460">increments</text>
                  <text x="360" y="1460">the</text>
                  <text x="412" y="1460">observer</text>
                  <text x="480" y="1460">counter</text>
                  <text x="248" y="1476">for</text>
                  <text x="280" y="1476">the</text>
                  <text x="320" y="1476">group</text>
                  <text x="392" y="1476">observation</text>
                  <text x="452" y="1476">of</text>
                  <text x="480" y="1476">/r)</text>
                  <text x="244" y="1508">(S</text>
                  <text x="292" y="1508">responds</text>
                  <text x="340" y="1508">to</text>
                  <text x="368" y="1508">the</text>
                  <text x="408" y="1508">proxy</text>
                  <text x="452" y="1508">with</text>
                  <text x="484" y="1508">an</text>
                  <text x="288" y="1524">unprotected</text>
                  <text x="384" y="1524">informative</text>
                  <text x="472" y="1524">response)</text>
                  <text x="176" y="1540">(#)</text>
                  <text x="260" y="1556">Token:</text>
                  <text x="308" y="1556">0x5e</text>
                  <text x="164" y="1572">5.03</text>
                  <text x="296" y="1572">Content-Format:</text>
                  <text x="412" y="1572">application/</text>
                  <text x="352" y="1588">informative-response+cbor</text>
                  <text x="268" y="1604">Max-Age:</text>
                  <text x="312" y="1604">0</text>
                  <text x="252" y="1620">0xff</text>
                  <text x="264" y="1636">Payload</text>
                  <text x="304" y="1636">{</text>
                  <text x="256" y="1652">/</text>
                  <text x="296" y="1652">tp_info</text>
                  <text x="336" y="1652">/</text>
                  <text x="376" y="1652">0</text>
                  <text x="392" y="1652">:</text>
                  <text x="408" y="1652">[</text>
                  <text x="432" y="1668">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                  <text x="448" y="1684">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                  <text x="364" y="1700">0x7b],</text>
                  <text x="256" y="1716">/</text>
                  <text x="308" y="1716">last_notif</text>
                  <text x="360" y="1716">/</text>
                  <text x="376" y="1716">2</text>
                  <text x="392" y="1716">:</text>
                  <text x="424" y="1716">&lt;this</text>
                  <text x="480" y="1716">conveys</text>
                  <text x="384" y="1732">the</text>
                  <text x="424" y="1732">"last</text>
                  <text x="504" y="1732">notification"</text>
                  <text x="404" y="1748">response</text>
                  <text x="476" y="1748">prepared</text>
                  <text x="540" y="1748">above&gt;</text>
                  <text x="240" y="1764">}</text>
                  <text x="244" y="1796">(P</text>
                  <text x="292" y="1796">extracts</text>
                  <text x="356" y="1796">PH_REQ</text>
                  <text x="400" y="1796">and</text>
                  <text x="444" y="1796">starts</text>
                  <text x="512" y="1796">listening</text>
                  <text x="252" y="1812">to</text>
                  <text x="304" y="1812">multicast</text>
                  <text x="400" y="1812">notifications</text>
                  <text x="476" y="1812">with</text>
                  <text x="520" y="1812">Token</text>
                  <text x="260" y="1828">0x7b</text>
                  <text x="292" y="1828">at</text>
                  <text x="380" y="1828">GRP_ADDR:GRP_PORT)</text>
                  <text x="244" y="1860">(P</text>
                  <text x="292" y="1860">extracts</text>
                  <text x="344" y="1860">the</text>
                  <text x="384" y="1860">"last</text>
                  <text x="464" y="1860">notification"</text>
                  <text x="280" y="1876">response,</text>
                  <text x="348" y="1876">caches</text>
                  <text x="388" y="1876">it</text>
                  <text x="416" y="1876">and</text>
                  <text x="468" y="1876">forwards</text>
                  <text x="252" y="1892">it</text>
                  <text x="284" y="1892">back</text>
                  <text x="316" y="1892">to</text>
                  <text x="344" y="1892">C1)</text>
                  <text x="260" y="1924">Token:</text>
                  <text x="308" y="1924">0x4a</text>
                  <text x="36" y="1940">2.05</text>
                  <text x="268" y="1940">Observe:</text>
                  <text x="328" y="1940">54120</text>
                  <text x="264" y="1956">OSCORE:</text>
                  <text x="320" y="1956">{kid:</text>
                  <text x="364" y="1956">0x05</text>
                  <text x="392" y="1956">;</text>
                  <text x="420" y="1956">piv:</text>
                  <text x="456" y="1956">501</text>
                  <text x="480" y="1956">;</text>
                  <text x="508" y="1956">...}</text>
                  <text x="268" y="1972">Max-Age:</text>
                  <text x="324" y="1972">2995</text>
                  <text x="260" y="1988">&lt;Other</text>
                  <text x="312" y="1988">class</text>
                  <text x="352" y="1988">U/I</text>
                  <text x="404" y="1988">options&gt;</text>
                  <text x="252" y="2004">0xff</text>
                  <text x="304" y="2020">Encrypted_payload</text>
                  <text x="384" y="2020">{</text>
                  <text x="268" y="2036">0x45</text>
                  <text x="312" y="2036">(2.05</text>
                  <text x="376" y="2036">Content),</text>
                  <text x="284" y="2052">Observe:</text>
                  <text x="356" y="2052">[empty],</text>
                  <text x="284" y="2068">Payload:</text>
                  <text x="348" y="2068">"1234"</text>
                  <text x="240" y="2084">}</text>
                  <text x="280" y="2100">&lt;Signature&gt;</text>
                  <text x="16" y="2148">...</text>
                  <text x="72" y="2148">...</text>
                  <text x="136" y="2148">...</text>
                  <text x="208" y="2148">...</text>
                  <text x="248" y="2196">(C2</text>
                  <text x="296" y="2196">obtains</text>
                  <text x="356" y="2196">PH_REQ</text>
                  <text x="400" y="2196">and</text>
                  <text x="440" y="2196">sends</text>
                  <text x="476" y="2196">it</text>
                  <text x="500" y="2196">to</text>
                  <text x="524" y="2196">P)</text>
                  <text x="260" y="2228">Token:</text>
                  <text x="308" y="2228">0x01</text>
                  <text x="104" y="2244">FETCH</text>
                  <text x="272" y="2244">Uri-Host:</text>
                  <text x="380" y="2244">"sensor.example"</text>
                  <text x="268" y="2260">Observe:</text>
                  <text x="312" y="2260">0</text>
                  <text x="364" y="2260">(register)</text>
                  <text x="264" y="2276">OSCORE:</text>
                  <text x="320" y="2276">{kid:</text>
                  <text x="364" y="2276">0x09</text>
                  <text x="392" y="2276">;</text>
                  <text x="420" y="2276">piv:</text>
                  <text x="448" y="2276">0</text>
                  <text x="464" y="2276">;</text>
                  <text x="320" y="2292">kid</text>
                  <text x="372" y="2292">context:</text>
                  <text x="448" y="2292">0x57ab2e;</text>
                  <text x="508" y="2292">...}</text>
                  <text x="288" y="2308">Proxy-Scheme:</text>
                  <text x="372" y="2308">"coap"</text>
                  <text x="260" y="2324">&lt;Other</text>
                  <text x="312" y="2324">class</text>
                  <text x="352" y="2324">U/I</text>
                  <text x="404" y="2324">options&gt;</text>
                  <text x="252" y="2340">0xff</text>
                  <text x="304" y="2356">Encrypted_payload</text>
                  <text x="384" y="2356">{</text>
                  <text x="268" y="2372">0x01</text>
                  <text x="316" y="2372">(GET),</text>
                  <text x="284" y="2388">Observe:</text>
                  <text x="328" y="2388">0</text>
                  <text x="384" y="2388">(register),</text>
                  <text x="288" y="2404">Uri-Path:</text>
                  <text x="348" y="2404">"r",</text>
                  <text x="276" y="2420">&lt;Other</text>
                  <text x="328" y="2420">class</text>
                  <text x="360" y="2420">E</text>
                  <text x="404" y="2420">options&gt;</text>
                  <text x="240" y="2436">}</text>
                  <text x="244" y="2468">(P</text>
                  <text x="284" y="2468">serves</text>
                  <text x="324" y="2468">C2</text>
                  <text x="356" y="2468">from</text>
                  <text x="388" y="2468">it</text>
                  <text x="428" y="2468">cache)</text>
                  <text x="260" y="2500">Token:</text>
                  <text x="308" y="2500">0x01</text>
                  <text x="100" y="2516">2.05</text>
                  <text x="268" y="2516">Observe:</text>
                  <text x="328" y="2516">54120</text>
                  <text x="264" y="2532">OSCORE:</text>
                  <text x="320" y="2532">{kid:</text>
                  <text x="364" y="2532">0x05</text>
                  <text x="392" y="2532">;</text>
                  <text x="420" y="2532">piv:</text>
                  <text x="456" y="2532">501</text>
                  <text x="480" y="2532">;</text>
                  <text x="508" y="2532">...}</text>
                  <text x="268" y="2548">Max-Age:</text>
                  <text x="324" y="2548">1800</text>
                  <text x="260" y="2564">&lt;Other</text>
                  <text x="312" y="2564">class</text>
                  <text x="352" y="2564">U/I</text>
                  <text x="404" y="2564">options&gt;</text>
                  <text x="252" y="2580">0xff</text>
                  <text x="304" y="2596">Encrypted_payload</text>
                  <text x="384" y="2596">{</text>
                  <text x="268" y="2612">0x45</text>
                  <text x="312" y="2612">(2.05</text>
                  <text x="376" y="2612">Content),</text>
                  <text x="284" y="2628">Observe:</text>
                  <text x="356" y="2628">[empty],</text>
                  <text x="284" y="2644">Payload:</text>
                  <text x="348" y="2644">"1234"</text>
                  <text x="240" y="2660">}</text>
                  <text x="280" y="2676">&lt;Signature&gt;</text>
                  <text x="16" y="2724">...</text>
                  <text x="72" y="2724">...</text>
                  <text x="136" y="2724">...</text>
                  <text x="208" y="2724">...</text>
                  <text x="252" y="2772">(The</text>
                  <text x="296" y="2772">value</text>
                  <text x="332" y="2772">of</text>
                  <text x="360" y="2772">the</text>
                  <text x="412" y="2772">resource</text>
                  <text x="252" y="2788">/r</text>
                  <text x="296" y="2788">changes</text>
                  <text x="340" y="2788">to</text>
                  <text x="388" y="2788">"5678".)</text>
                  <text x="180" y="2820">(##)</text>
                  <text x="260" y="2836">Token:</text>
                  <text x="308" y="2836">0x7b</text>
                  <text x="164" y="2852">2.05</text>
                  <text x="268" y="2852">Observe:</text>
                  <text x="316" y="2852">11</text>
                  <text x="264" y="2868">OSCORE:</text>
                  <text x="320" y="2868">{kid:</text>
                  <text x="368" y="2868">0x05;</text>
                  <text x="412" y="2868">piv:</text>
                  <text x="448" y="2868">502</text>
                  <text x="472" y="2868">;</text>
                  <text x="500" y="2868">...}</text>
                  <text x="260" y="2884">&lt;Other</text>
                  <text x="312" y="2884">class</text>
                  <text x="352" y="2884">U/I</text>
                  <text x="404" y="2884">options&gt;</text>
                  <text x="252" y="2900">0xff</text>
                  <text x="304" y="2916">Encrypted_payload</text>
                  <text x="384" y="2916">{</text>
                  <text x="268" y="2932">0x45</text>
                  <text x="312" y="2932">(2.05</text>
                  <text x="376" y="2932">Content),</text>
                  <text x="284" y="2948">Observe:</text>
                  <text x="356" y="2948">[empty],</text>
                  <text x="276" y="2964">&lt;Other</text>
                  <text x="328" y="2964">class</text>
                  <text x="360" y="2964">E</text>
                  <text x="408" y="2964">options&gt;,</text>
                  <text x="272" y="2980">0xff,</text>
                  <text x="284" y="2996">Payload:</text>
                  <text x="348" y="2996">"5678"</text>
                  <text x="240" y="3012">}</text>
                  <text x="280" y="3028">&lt;Signature&gt;</text>
                  <text x="244" y="3060">(P</text>
                  <text x="288" y="3060">updates</text>
                  <text x="336" y="3060">its</text>
                  <text x="376" y="3060">cache</text>
                  <text x="424" y="3060">entry</text>
                  <text x="260" y="3076">with</text>
                  <text x="300" y="3076">this</text>
                  <text x="376" y="3076">notification)</text>
                  <text x="260" y="3108">Token:</text>
                  <text x="308" y="3108">0x4a</text>
                  <text x="36" y="3124">2.05</text>
                  <text x="268" y="3124">Observe:</text>
                  <text x="328" y="3124">54123</text>
                  <text x="264" y="3140">OSCORE:</text>
                  <text x="320" y="3140">{kid:</text>
                  <text x="368" y="3140">0x05;</text>
                  <text x="412" y="3140">piv:</text>
                  <text x="448" y="3140">502</text>
                  <text x="472" y="3140">;</text>
                  <text x="500" y="3140">...}</text>
                  <text x="260" y="3156">&lt;Other</text>
                  <text x="312" y="3156">class</text>
                  <text x="352" y="3156">U/I</text>
                  <text x="404" y="3156">options&gt;</text>
                  <text x="252" y="3172">0xff</text>
                  <text x="256" y="3188">(Same</text>
                  <text x="352" y="3188">Encrypted_payload</text>
                  <text x="440" y="3188">and</text>
                  <text x="500" y="3188">signature)</text>
                  <text x="260" y="3220">Token:</text>
                  <text x="308" y="3220">0x01</text>
                  <text x="100" y="3236">2.05</text>
                  <text x="268" y="3236">Observe:</text>
                  <text x="328" y="3236">54123</text>
                  <text x="264" y="3252">OSCORE:</text>
                  <text x="320" y="3252">{kid:</text>
                  <text x="368" y="3252">0x05;</text>
                  <text x="412" y="3252">piv:</text>
                  <text x="448" y="3252">502</text>
                  <text x="472" y="3252">;</text>
                  <text x="500" y="3252">...}</text>
                  <text x="260" y="3268">&lt;Other</text>
                  <text x="312" y="3268">class</text>
                  <text x="352" y="3268">U/I</text>
                  <text x="404" y="3268">options&gt;</text>
                  <text x="252" y="3284">0xff</text>
                  <text x="256" y="3300">(Same</text>
                  <text x="352" y="3300">Encrypted_payload</text>
                  <text x="440" y="3300">and</text>
                  <text x="500" y="3300">signature)</text>
                  <text x="16" y="3364">(#)</text>
                  <text x="60" y="3364">Sent</text>
                  <text x="100" y="3364">over</text>
                  <text x="152" y="3364">unicast</text>
                  <text x="200" y="3364">and</text>
                  <text x="268" y="3364">unprotected.</text>
                  <text x="20" y="3396">(##)</text>
                  <text x="60" y="3396">Sent</text>
                  <text x="100" y="3396">over</text>
                  <text x="132" y="3396">IP</text>
                  <text x="184" y="3396">multicast</text>
                  <text x="236" y="3396">to</text>
                  <text x="336" y="3396">GROUP_ADDR:GROUP_PORT</text>
                  <text x="440" y="3396">and</text>
                  <text x="496" y="3396">protected</text>
                  <text x="60" y="3412">with</text>
                  <text x="104" y="3412">Group</text>
                  <text x="156" y="3412">OSCORE</text>
                  <text x="228" y="3412">end-to-end</text>
                  <text x="304" y="3412">between</text>
                  <text x="352" y="3412">the</text>
                  <text x="396" y="3412">server</text>
                  <text x="440" y="3412">and</text>
                  <text x="472" y="3412">the</text>
                  <text x="524" y="3412">clients.</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
C1      C2      P         S
|       |       |         |
|       |       |         |  (The value of the resource /r is "1234")
|       |       |         |
|       |       |         |  (S allocates the available
|       |       |         |   Token value 0x7b .)
|       |       |         |
|       |       |         |  (S sends to itself a phantom observation
|       |       |         |   request PH_REQ as coming from the
|       |       |         |   IP multicast address GRP_ADDR.
|       |       |         |   The Group OSCORE processing occurs as
|       |       |         |   specified for a deterministic request)
|       |       |         |
|       |       |  .------+
|       |       | /       |
|       |       | \       |
|       |       |  `----->|  Token: 0x7b
|       |       |   FETCH |  Uri-Host: "sensor.example"
|       |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x09 ; piv: 0 ;
|       |       |         |           kid context: 0x57ab2e ; ... }
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       |         |  (S creates a group observation of /r)
|       |       |         |
|       |       |         |  (The server does not respond to PH_REQ.
|       |       |         |   The server stores PH_REQ locally and
|       |       |         |   makes it available at an external source)
|       |       |         |
|       |       |         |
|       |       |         |  (C1 obtains PH_REQ and sends it to P)
|       |       |         |
|       |       |         |
+-------------->|         |  Token: 0x4a
| FETCH |       |         |  Uri-Host: "sensor.example"
|       |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x09 ; piv: 0 ;
|       |       |         |           kid context: 0x57ab2e ; ... }
|       |       |         |  Proxy-Scheme: "coap"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       +-------->|  Token: 0x5e
|       |       | FETCH   |  Uri-Host: "sensor.example"
|       |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x09 ; piv: 0 ;
|       |       |         |           kid context: 0x57ab2e ; ... }
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       |         |  (S recognizes PH_REQ through byte-by-byte
|       |       |         |   comparison against the stored one, and
|       |       |         |   skips any Group OSCORE processing)
|       |       |         |
|       |       |         |  (S prepares the "last notification"
|       |       |         |   response defined below)
|       |       |         |
|       |       |         |  0x45 (2.05 Content)
|       |       |         |  Observe: 10
|       |       |         |  OSCORE: {kid: 0x05 ; piv: 501 ; ...}
|       |       |         |  Max-Age: 3000
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x45 (2.05 Content),
|       |       |         |    Observe: [empty],
|       |       |         |    Payload: "1234"
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|       |       |         |  (S increments the observer counter
|       |       |         |  for the group observation of /r)
|       |       |         |
|       |       |         |  (S responds to the proxy with an
|       |       |         |   unprotected informative response)
|       |       |   (#)   |
|       |       |<--------+  Token: 0x5e
|       |       | 5.03    |  Content-Format: application/
|       |       |         |    informative-response+cbor
|       |       |         |  Max-Age: 0
|       |       |         |  0xff
|       |       |         |  Payload {
|       |       |         |    / tp_info /    0 : [
|       |       |         |           cri'coap://SRV_ADDR:SRV_PORT/',
|       |       |         |             cri'coap://GRP_ADDR:GRP_PORT/',
|       |       |         |               0x7b],
|       |       |         |    / last_notif / 2 : <this conveys
|       |       |         |                   the "last notification"
|       |       |         |                   response prepared above>
|       |       |         |  }
|       |       |         |
|       |       |         |  (P extracts PH_REQ and starts listening
|       |       |         |   to multicast notifications with Token
|       |       |         |   0x7b at GRP_ADDR:GRP_PORT)
|       |       |         |
|       |       |         |  (P extracts the "last notification"
|       |       |         |   response, caches it and forwards
|       |       |         |   it back to C1)
|       |       |         |
|<--------------+         |  Token: 0x4a
| 2.05  |       |         |  Observe: 54120
|       |       |         |  OSCORE: {kid: 0x05 ; piv: 501 ; ...}
|       |       |         |  Max-Age: 2995
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x45 (2.05 Content),
|       |       |         |    Observe: [empty],
|       |       |         |    Payload: "1234"
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |

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

|       |       |         |
|       |       |         |  (C2 obtains PH_REQ and sends it to P)
|       |       |         |
|       +------>|         |  Token: 0x01
|       | FETCH |         |  Uri-Host: "sensor.example"
|       |       |         |  Observe: 0 (register)
|       |       |         |  OSCORE: {kid: 0x09 ; piv: 0 ;
|       |       |         |           kid context: 0x57ab2e; ...}
|       |       |         |  Proxy-Scheme: "coap"
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x01 (GET),
|       |       |         |    Observe: 0 (register),
|       |       |         |    Uri-Path: "r",
|       |       |         |    <Other class E options>
|       |       |         |  }
|       |       |         |
|       |       |         |  (P serves C2 from it cache)
|       |       |         |
|       |<------+         |  Token: 0x01
|       | 2.05  |         |  Observe: 54120
|       |       |         |  OSCORE: {kid: 0x05 ; piv: 501 ; ...}
|       |       |         |  Max-Age: 1800
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x45 (2.05 Content),
|       |       |         |    Observe: [empty],
|       |       |         |    Payload: "1234"
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |

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

|       |       |         |
|       |       |         |  (The value of the resource
|       |       |         |   /r changes to "5678".)
|       |       |         |
|       |       |   (##)  |
|       |       |<--------+  Token: 0x7b
|       |       | 2.05    |  Observe: 11
|       |       |         |  OSCORE: {kid: 0x05; piv: 502 ; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  Encrypted_payload {
|       |       |         |    0x45 (2.05 Content),
|       |       |         |    Observe: [empty],
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    Payload: "5678"
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|       |       |         |  (P updates its cache entry
|       |       |         |   with this notification)
|       |       |         |
|<--------------+         |  Token: 0x4a
| 2.05  |       |         |  Observe: 54123
|       |       |         |  OSCORE: {kid: 0x05; piv: 502 ; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload and signature)
|       |       |         |
|       |<------+         |  Token: 0x01
|       | 2.05  |         |  Observe: 54123
|       |       |         |  OSCORE: {kid: 0x05; piv: 502 ; ...}
|       |       |         |  <Other class U/I options>
|       |       |         |  0xff
|       |       |         |  (Same Encrypted_payload and signature)
|       |       |         |


(#)  Sent over unicast and unprotected.

(##) Sent over IP multicast to GROUP_ADDR:GROUP_PORT and protected
     with Group OSCORE end-to-end between the server and the clients.
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="intermediaries-example-e2e-security-det-rev-proxy">
      <name>Example with a Reverse-Proxy and 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 server knows the address PRX_ADDR and port number PRX_PORT that PRX exposes to the clients when acting as stand-in for the server.  </t>
          <t>
That is, a request sent with destination address PRX_ADDR and port number PRX_PORT will reach PRX, which forwards the request to the server.</t>
        </li>
        <li>
          <t>When the server makes the phantom request available through other means (see <xref 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 further client-side, transport-specific information.</t>
            </li>
          </ul>
          <t>
Assuming that the group information data has a format consistent with the 'tp_info' array of the informative response (see <xref 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 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, but no other client-side, transport-specific information.  </t>
            <t>
In such a particular situation, the client sends PH_REQ with destination address PRX_ADDR and port number PRX_PORT, i.e., to PRX.</t>
          </li>
          <li>
            <t>Upon receiving PH_REQ, PRX performs the same actions performed by the proxy in the scenario of <xref target="intermediaries-example-e2e-security-det"/>.  </t>
            <t>
That is, if PH_REQ results in a cache hit at PRX, then PRX replies to the client with the latest multicast notification for the target resource from its cache and takes no further actions.  </t>
            <t>
Otherwise, PRX forwards PH_REQ to the server. After recognizing PH_REQ byte-by-byte, the server replies to PRX with an unprotected informative response, where 'tp_info' specifies the information to receive multicast notifications for the target resource. Based on such information, PRX starts listening to multicast notifications. If the informative response includes a latest notification, then PRX caches that notification and forwards it to the client.</t>
          </li>
        </ol>
        <t>Editor's note: add a figure showing an example of message exchange.</t>
        <section anchor="rev-proxy-client-pre-steps">
          <name>Client Initialization Procedure</name>
          <t>The following early initialization procedure is performed by a client that does not have the group observation data and/or is not a member of the correct OSCORE group, before starting the main process described in <xref target="rev-proxy-main-process"/>.</t>
          <t>The client is minimally provided with the pair (PRX_ADDR, PRX_PORT) associated with PRX, which the client believes to be targeting the origin server.</t>
          <t>a. The client sends a traditional Observe registration request with destination address PRX_ADDR and port number PRX_PORT, i.e., to PRX. The request is protected with (Group) OSCORE, i.e., end-to-end between the client and the server.</t>
          <t>b. PRX receives the request and forwards it to the server, as usual.</t>
          <t>c. The server replies with a 5.03 (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 per the transport used.</t>
            </li>
            <li>
              <t>The 'ph_req' parameter, conveying the deterministic phantom request PH_REQ.</t>
            </li>
            <li>
              <t>Optionally, parameters conveying information that the client can use for joining the OSCORE group if that has not happened yet, or the keying material used in the OSCORE group if the server is managing it (see <xref target="rev-proxy-main-process"/>).</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, in case 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 to incorrectly configure a group observation (e.g., as based on a wrong multicast IP address) hence preventing the correct reception of multicast notifications and their forwarding to the clients; or to configure bogus group observations that are currently not active on the origin server.</t>
        <t>In order to prevent what is described above, the ticket requests conveying the Listen-To-Multicast-Responses Option can be additionally protected hop-by-hop, e.g., by using OSCORE (see <xref target="I-D.ietf-core-oscore-capable-proxies"/>) and/or DTLS <xref target="RFC9147"/>.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="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 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="25" month="September" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) is a web transfer
   protocol for constrained devices and constrained networks.  In a
   number of use cases, constrained devices often naturally operate in
   groups (e.g., in a building automation scenario, all lights in a
   given room may need to be switched on/off as a group).  This document
   specifies the use of CoAP for group communication, including the use
   of UDP/IP multicast as the default underlying data transport.  Both
   unsecured and secured CoAP group communication are specified.
   Security is achieved by use of the Group Object Security for
   Constrained RESTful Environments (Group OSCORE) protocol.  The target
   application area of this specification is any group communication use
   cases that involve resource-constrained devices or networks that
   support CoAP.  This document replaces and obsoletes RFC 7390, while
   it updates RFC 7252 and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-15"/>
        </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="12" month="September" 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-27"/>
        </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="16" month="October" 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 as well as a note on how that registry cooperates with the
   "CRI Scheme Numbers for Certain Unregistered Scheme Names" registry
   created by the present RFC.


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision -26 is taking on the results from the 2025-10-09
   // IESG telechat (issue #140), by integrating the CRI scheme number
   // column into the URI scheme registry created by RFC 7595 and
   // keeping the URI-Scheme registration process essentially unchanged
   // from the point of view of a registrant that does not have any
   // special requirements on the CRI scheme number assigned.  Also, the
   // cri'' application-extension syntax has been moved to draft-ietf-
   // cbor-edn-literals, which is currently lagging behind in the
   // approval process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-26"/>
        </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="7" month="July" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server, and receive notifications as unicast
   responses upon changes of the resource state.  In some use cases,
   such as based on publish-subscribe, it would be convenient for the
   server to send a single notification addressed to all the clients
   observing a same target resource.  This document updates RFC7252 and
   RFC7641, and defines how a server sends observe notifications as
   response messages over multicast, synchronizing all the observers of
   a same resource on a same shared Token value.  Besides, this document
   defines how Group OSCORE can be used to protect multicast
   notifications end-to-end between the server and the observer clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-12"/>
        </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="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>Cacheable OSCORE</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="22" month="September" year="2025"/>
            <abstract>
              <t>   Group communication with the Constrained Application Protocol (CoAP)
   can be secured end-to-end using Group Object Security for Constrained
   RESTful Environments (Group OSCORE), also across untrusted
   intermediary proxies.  However, this sidesteps the proxies' abilities
   to cache responses from the origin server(s).  This specification
   restores cacheability of protected responses at proxies, by
   introducing consensus requests which any client in a group can send
   to one server or multiple servers in the same group.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-cacheable-oscore-00"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-capable-proxies">
          <front>
            <title>OSCORE-capable Proxies</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="3" month="September" year="2025"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) can be
   used to protect CoAP messages end-to-end between two endpoints at the
   application layer, also in the presence of intermediaries such as
   proxies.  This document defines how to use OSCORE for protecting CoAP
   messages also between an origin application endpoint and an
   intermediary, or between two intermediaries.  Also, it defines rules
   to escalate the protection of a CoAP option, in order to encrypt and
   integrity-protect it whenever possible.  Finally, it defines how to
   secure a CoAP message by applying multiple, nested OSCORE
   protections, e.g., both end-to-end between origin application
   endpoints; and between an application endpoint and an intermediary or
   between two intermediaries.  Therefore, this document updates RFC
   8613.  Furthermore, this document updates RFC 8768, by explicitly
   defining the processing with OSCORE for the CoAP option Hop-Limit.
   The approach defined in this document can be seamlessly used with
   Group OSCORE, for protecting CoAP messages when group communication
   is used in the presence of intermediaries.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-capable-proxies-05"/>
        </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 1059?>

<section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <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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
IYWWCcpMqkB2PGGYBrwUFyQ9TRgrk2yUIIC52caJ1bag2mwxElQbVf763XWB
KAc0ul6Yw9i1edfwcTUURjp2Z39nD/TxGXIdyQcb80jUF7re36GxZylIMFTp
oMJ1TYb6yholOIKVldiNLpooWAtRQYGSzJm6kvVl0qWYaUPs+YTVKlfecKlC
3oreTbGmEg41qUqI9p1E4VcXjbxwXAdV3BtRBjCR27pY1bbLmrIWKBFjns8p
nIoehTS5NZVADW/GOyteirRsOwuuDKNDahXzMosxHst/gBFn82T+IBQC3bfA
cYQ3ek9TjCXhb4dgw6xh6OWMM8xtUm/1W8fAkVNpP8d/957zJoKtIsEJ5NJ8
EddHzd34d7xYC0sJGhMvjw4q+76hSJjn6JkdAo09Co0w6M0mgLeavJ3mzJtF
hk0tkUayhE1GvOPYSZWYxBXNHZqQsCGGLrrrmDxMrNEcDePyApYsLHWQWLW9
crDHszJ7YeX+DOFCkvCWsFjVKY4DXSJjHi4R+pqqdMfn7EO+THZnTVkWPHWO
9PDehLZ4q+nmIQGfF/hNaw9Vdot0ullcykXwAkLdqkhliWhEm5cs5KWuBuBS
UwjtJpbV1n7d5pqXiXrd8btiDnidWBsg8CHyYFAf61iJfbDbrHS71qbytCsb
CfwpXf5osgecQEfNtHwM+cNxD4XcjRAYUdktC6+uJzwrt7VsM9tnFVKt+3Ir
z6NmWE6af0OdYvI2oW+TZ0i2R5xU4HKytKp7BH5aSlDllvJZy+DmNpGUA/h2
Z0LXkpgJxGC8zdCCI+1m5lBucuDaN7dn9SwxTkp4+1TyboVX92/N3Xmu99Zl
zf6PQsvSnZNKSnK7sBGhyoQM2E3CXYCx2jvlDguxrqLz3IphKYfJTutmicQK
i20mEEozvlHCazhcYrhTPaVtiy+Jxe8Xz+1o+BNMOb6NYrU74mA6A8nDLK2T
ZeDDR7QlsYv7dLRBf6oqz3KNNt2Dw0o7Sqah0Xpp0huqVy87nWrQ6mPULJW2
FkuRLGMjuE6jeTjc7canYd39SYCKSErpd9ZOtgZQIGLr7px2bSZX0RD8rSTs
OltAuQrgVlJFfuYiaTLlh+a+6j4SDJ5+G0x3AjSr+iNed83BvJ+lKUCY9AwV
E7S58ak4lxKr/wSIhniKzUgwFYcs8Yjq8ziMbffTTL+yQBg6VB32lbMRVOXv
3hOwOTHK2NuLkXsybXKFkRAKqzVtKzExJmTXcvJcepZgwgpOao57zXlh6FDv
OFjv1zpXZo1KmFVxYq/q1EnckZygoGxiImzXcLoCPgbzYBZOixkRJhLn5XGk
Ks7A3XC2krUdqA0SFTgGCbi+KVYfg43GoKzZMH94X7MsQrf6D9W68Vaijrtw
4oaRZzp6TLvotm4rwJ/aoSGrxOYjaFcO5qXTWyl7unU6Sf0S1qQzfxYrqkJo
NVNwV3rLrPQPQPFgJfpLzQUGp6Elr+Q5tFhzHWevDOVSQMGpHW1pYME4uPri
Uw8WKpYDa9+VHdNooco0EQUwADoS3FAw9vt4pElLxUKUdqKMbtrXRs89n1P+
idciJw/pT5uWUrd9pO3lQVqMzZxNRko5xdSk+izNHgUdL1EvWEQuVYr+XpT5
hJeSWyKdamKvKkxubB1g+nnoziJrTqg/1nE2yj3vXpVT2bir7tIphHT1Ti91
URjHI/CZLQZ0+iwuuWmSEnslxNY/DCqXtgYBSZQS/bRu5VEmLiVjuBXgDCMc
KqZnQwV+YqiRW3lJcF1VMKoCa96Qp6qVsbTrlqhAqHwDS+/6+DW4I2fIbTaA
u5gmB1aRPi2WFRo6vtVSeDiRObct4xlG5GrNVRPCsDYTpqIpM/oqSsj26rwi
njkMr1Re3eB5A/k0cXPZ4VhzlNbVWA8bpKoUcp+fBOetqE4jXu2njmVO4vOa
ZIRvA8kI3B8jKSdrKmGKjWXyC+4M4LUOQKObLJWLxHR9Ar6ZxcNzMv+AB4C8
VADkQAD/RBPaigp2MtbJtNyCknM6S2XX7NGo9pPOnorwiz3saBS55aina+oO
SBq5lZl4s9wXepXHqe79r1EpmbcJ5Lg4CI4N0V1QX81x9FqyHU7VM6aAUVXs
I/ppb32BsOheSiHXEXeqyEdxHBMdtXEZk9suUseSM9XMzJmtz9++k+Z036Y2
cqdxNqX0qHK7Tz1XWsokdSEqQZ1h73ivMA9LT2zWhbUsuOUtBRvr+rDUtpUo
+bDEAWWaVssxSqtmWyAnuq2guLqQuG2Vf20Zc1P1rvuQBRsueNs/t8FdXWOK
s+HLcikvSSWsOW8lhTAIta/iWKosj/ZWAilSqqiv1P9m5rRO0wExLxp0eKUe
Nig1VMJFPp/qzWlOM2W86d6rloIeBigok26CAvXmI9gqDZJcN0oHrg+P/vJq
Z2/viD5cinS7AW187vDF0QlWqCQTfFO+mVEn6snCRru75O2YXnCmMsTGXC9i
lXORV8q2O53/ZX9EFOWvzzq7G5THurtJ/xzqvNbjzjud4Or+IyipNXxDiFVE
uFfJbYTJPariWtnYvP9gZa1+7K97zs8f3bEpArst1t88iOD1H/ZPghCo1I1t
LzujAWKzT7iNrWGi2fa9e4C2PM36aonvZSttMfG1A7aBdktWXifYrwWtTuQA
YH0o62Hklw6jYgwvtZ+Lt6rHlJzPmdQU3zWF125YfP3Nw0HDyjaOrzbNU9Mo
KVQk0TCEjjYdPn11tP8vKG/BeyEDXEnXhneDu00/HB0S015lQn1a/a8rN+7V
vfGvtUP9W4WOHg5CkCApfU50NMykysevmiEgMe41QN08sKm0crs72Eqmhpdr
nbFrA9T6xndKYHzdLC+2+uv3+W9VxNjjkoNtXcaA0N5rmKIQbrJRT9udX9Np
OvWv/Ri96e2cIVU1PPTdCzKt1b78H5tELe/Pb4u3jaDeEyplivlmXWyLX5rn
pn6GWXxXifDjo5+Ie7fxF9Sp9+52W43hjaJlwDb+crVRBHHs35ofvydsdi38
sQkzxcOCVkHFbcETLw6Rt9ffnJ42En/9z+HOX5+92NlrEgSX12I3NTDaTV6C
8PZy/X6dz1nfj/qm5JVyiibs6EX08gho01MtKtlg/evJHQsZ9QUCU4pVmGn/
YyI2jR/4zjV6vnY+4Ns8VMgcAMNI/60HG5u3zKu8oPWwd/p9rJzi/+t/8N/O
UoR+3WDjrW/Y111Tz5/vR7Dxapaf7H0wNmQ+5h40WO3kdIZvQV7f1a++iw2X
CD7n1a/DZ9B7aHgJ/ArdIhZPSdv65uG3K1fi5tU7a6EbId0csMFoOfx12Ni4
5UWgOX0g8XH/A8PuYfuGxP+BYe90kHSOjZPt+RFAiz8cvXhpDAj8lZ17xwOn
Ik6dz0OCpJekqvhFV3TqcApwRDVNx42x2IpMfzeFRJPaIPUKFdPKlnBd44Hd
TT7wgZJDKIZDneK40Sz1DDcnJVEoleUgp5vro3IGEpsepBQFmMJoun9hQ5dg
jpa7Gxg6D0d5iaYlm03sNNnPlDtDByzNqz3qqCLN5uTYswOdYlQbf66JaYXb
ENVFusrNiN5f2IujjB5Q+uVbOxDJLzu/aohtY/23G2PTbRXcygO1CgHUmvTg
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

-->

</rfc>
