<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version  (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-observe-multicast-notifications-06" category="std" consensus="true" submissionType="IETF" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <front>
    <title abbrev="Observe Multicast Notifications">Observe Notifications as CoAP Multicast Responses</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-06"/>
    <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="2023" month="April" day="26"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>The Constrained Application Protocol (CoAP) allows clients to "observe" resources at a server, and receive notifications as unicast responses upon changes of the resource state. In some use cases, such as based on publish-subscribe, it would be convenient for the server to send a single notification addressed to all the clients observing a same target resource. This document updates RFC7252 and RFC7641, and defines how a server sends observe notifications as response messages over multicast, synchronizing  all the observers of a same resource on a same shared Token value. Besides, this document defines how Group OSCORE can be used to protect multicast notifications end-to-end between the server and the observer clients.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  Constrained RESTful Environments Working Group mailing list (core@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/core-wg/observe-multicast-notifications"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> has been extended with a number of mechanisms, including resource Observation <xref target="RFC7641"/>. This enables CoAP clients to register at a CoAP server as "observers" of a resource, and hence being automatically notified with an unsolicited response upon changes of the resource state.</t>
      <t>CoAP supports group communication over IP multicast <xref target="I-D.ietf-core-groupcomm-bis"/>. This includes support for Observe registration requests over multicast, in order for clients to efficiently register as observers of a resource hosted at multiple servers.</t>
      <t>However, in a number of use cases, using multicast messages for responses would also be desirable. That is, it would be useful that a server sends observe notifications for a same target resource to multiple observers as responses over IP multicast.</t>
      <t>For instance, in CoAP publish-subscribe <xref target="I-D.ietf-core-coap-pubsub"/>, multiple clients can subscribe to a topic, by observing the related resource hosted at the responsible broker. When a new value is published on that topic, it would be convenient for the broker to send a single multicast notification at once, to all the subscriber clients observing that topic.</t>
      <t>A different use case concerns clients observing a same registration resource at the CoRE Resource Directory <xref target="RFC9176"/>. For example, multiple clients can benefit of observation for discovering (to-be-created) OSCORE groups <xref target="I-D.ietf-core-oscore-groupcomm"/>, by retrieving from the Resource Directory updated links and descriptions to join them through the respective Group Manager <xref target="I-D.tiloca-core-oscore-discovery"/>.</t>
      <t>More in general, multicast notifications would be beneficial whenever several CoAP clients observe a same target resource at a CoAP server, and can be all notified at once by means of a single response message. However, CoAP does not currently define response messages over IP multicast. This document fills this gap and provides the following twofold contribution.</t>
      <t>First, it updates <xref target="RFC7252"/> and <xref target="RFC7641"/>, by defining a method to deliver Observe notifications as CoAP responses addressed to multiple clients, e.g., over IP multicast. In the proposed method, the group of potential observers entrusts the server to manage the Token space for multicast notifications. By doing so, the server provides all the observers of a target resource with the same Token value to bind to their own observation. That Token value is then used in every multicast notification for the target resource. This is achieved by means of an unicast informative response sent by the server to each observer client.</t>
      <t>Second, this document defines how to use Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> to protect multicast notifications end-to-end between the server and the observer clients. This is also achieved by means of the unicast informative response mentioned above, which additionally includes parameter values used by the server to protect every multicast notification for the target resource by using Group OSCORE. This provides a secure binding between each of such notifications and the observation of each of the clients.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
        <t>Readers are expected to be familiar with terms and concepts described in CoAP <xref target="RFC7252"/>, group communication for CoAP <xref target="I-D.ietf-core-groupcomm-bis"/>, Observe <xref target="RFC7641"/>, CBOR <xref target="RFC8949"/>, OSCORE <xref target="RFC8613"/>, and Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
        <t>This document additionally defines the following terminology.</t>
        <ul spacing="normal">
          <li>Traditional observation. A resource observation associated with a single observer client, as defined in <xref target="RFC7641"/>.</li>
          <li>Group observation. A resource observation associated with a group of clients. The server sends notifications for the group-observed resource over IP multicast to all the observer clients.</li>
          <li>Phantom request. The CoAP request message that the server would have received to start a group observation on one of its resources. A phantom request is generated inside the server and does not hit the wire.</li>
          <li>Informative response. A CoAP response message that the server sends to a given client via unicast, providing the client with information on a group observation.</li>
        </ul>
      </section>
    </section>
    <section anchor="sec-prereq">
      <name>Prerequisites</name>
      <t>In order to use multicast notifications as defined in this document, the following prerequisites have to be fulfilled.</t>
      <ul spacing="normal">
        <li>The server and the clients need to be on a network on which multicast notifications can reach a sufficiently large portion of the clients. These may leverage intermediaries such as proxies, if not directly able to listen to multicast traffic.</li>
        <li>The server needs to be provisioned with multicast addresses whose token space is placed under its control. On general purpose networks, unmanaged multicast addresses such as "All CoAP Nodes" (see <xref section="12.8" sectionFormat="of" target="RFC7252"/>) are not suitable for this purpose.</li>
        <li>
          <t>The server and the clients need to agree out of band that multicast notifications may be used.  </t>
          <t>
This document does not describe a way for a client to influence the server's decision to start group observations and thus to use multicast notifications. This is done on purpose.  </t>
          <t>
That is, the mechanism specified in this document is expected to be used in situations where sending individual notifications is not feasible, or is not preferred beyond a certain number of clients observing a target resource.  </t>
          <t>
If applications arise where a negotiation between the clients and the server does make sense, those applications are welcome to specify additional means to opt in to multicast notifications.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-variants">
      <name>High-Level Overview of Available Variants</name>
      <t>The method defined in this document fundamentally enables a server to setup a group observation. This is associated with a phantom observation request started by the server, and to which the multicast notifications of the group observation are bound.</t>
      <t>While the server can provide the phantom request in question to the interested clients as they reach out for registering to the group observation, the server may alternatively distribute the phantom request in advance by alternative means (e.g., see <xref target="appendix-different-sources"/>). Clients that have already retrieved the phantom request can immediately starts listening to multicast notifications if able to directly do so, or rather instruct an assisting intermediary such as a proxy to do that on their behalf.</t>
      <t>The following provides an overview of the available variants to enforce a group observation, depending on whether a proxy is deployed or not, and on whether exchanged messages are protected end-to-end between the observer clients and the server.</t>
      <ul spacing="normal">
        <li>
          <t>No proxy -  This is simplest network configuration, where the clients participating to the group observation are capable to listen to multicast traffic. In such a setup, the clients directly receive multicast notifications from the server.  </t>
          <ul spacing="normal">
            <li>Without end-to-end security - Messages pertaining to the group observation are not protected. This basic case is defined in <xref target="sec-server-side"/> and <xref target="sec-client-side"/> from the server and the client side, respectively. An example is provided in <xref target="sec-example-no-security"/>.</li>
            <li>
              <t>With end-to-end security - Messages pertaining to the group observation are protected end-to-end between the clients and the server, by using the Group OSCORE security protocol <xref target="I-D.ietf-core-oscore-groupcomm"/>. This case is defined in <xref target="sec-secured-notifications"/>. An example is provided in <xref target="sec-example-with-security"/>.      </t>
              <t>
If the participating endpoints using Group OSCORE also support the concept of Deterministic Client <xref target="I-D.amsuess-core-cachable-oscore"/>, then the possible early distribution of the phantom request can specifically make available its smaller, plain version. Then, all the clients are able to compute the same protected phantom request to use (see <xref target="deterministic-phantom-Request"/>).</t>
            </li>
          </ul>
        </li>
        <li>
          <t>With proxy - This network configuration is expected in case the clients participating to the group observation are not capable to listen to multicast traffic. In such a setup, the proxy directly receives multicast notifications from the server, and relays them back to the clients.  </t>
          <ul spacing="normal">
            <li>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"/>.</li>
            <li>
              <t>With end-to-end security - Messages pertaining to the group observation are protected end-to-end between the clients and the server, by using the Group OSCORE security protocol <xref target="I-D.ietf-core-oscore-groupcomm"/>. In particular, the clients are required to separately provide the proxy with the obtained phantom request, thus enabling the proxy to receive the multicast notifications from the server. This case is defined in <xref target="intermediaries-e2e-security"/>. An example is provided in <xref target="intermediaries-example-e2e-security"/>.      </t>
              <t>
If the participating endpoints using Group OSCORE also support the concept of Deterministic Client <xref target="I-D.amsuess-core-cachable-oscore"/>, the same advantages mentioned above for the case without a proxy applies (see <xref target="deterministic-phantom-Request"/>). In addition, this allows for a more efficient setup and enforcement of the group observation, by reducing the amount of message exchanges and allowing the proxy to effectively serve protected multicast notifications from its cache. An example is provided in <xref target="intermediaries-example-e2e-security-det-exchange"/>.</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="sec-server-side">
      <name>Server-Side</name>
      <t>The server can, at any time, start a group observation on one of its resources. Practically, the server may want to do that under the following circumstances.</t>
      <ul spacing="normal">
        <li>In the absence of observations for the target resource, the server receives a registration request from a first client wishing to start a traditional observation on that resource.</li>
        <li>When a certain amount of traditional observations has been established on the target resource, the server decides to make those clients part of a group observation on that resource.</li>
      </ul>
      <t>The server maintains an observer counter for each group observation to a target resource, as a rough estimation of the observers actively taking part in the group observation.</t>
      <t>The server initializes the counter to 0 when starting the group observation, and increments it after a new client starts taking part in that group observation. Also, the server should keep the counter up-to-date over time, for instance by using the method described in <xref target="sec-rough-counting"/>. This allows the server to possibly terminate a group observation in case, at some point in time, not enough clients are estimated to be still active and interested.</t>
      <section anchor="ssec-server-side-request">
        <name>Request</name>
        <t>Assuming it is reachable at the address SRV_ADDR and port number SRV_PORT, the server starts a group observation on one of its resources as defined below. The server intends to send multicast notifications for the target resource to the multicast IP address GRP_ADDR and port number GRP_PORT.</t>
        <ol spacing="normal" type="1"><li>The server builds a phantom observation request, i.e., a GET request with an Observe Option set to 0 (register).</li>
          <li>
            <t>The server selects an available value T, from the Token space of a CoAP endpoint used for messages having:  </t>
            <ul spacing="normal">
              <li>As source address and port number, the IP multicast address GRP_ADDR and port number GRP_PORT.</li>
              <li>As destination address and port number, the server address SRV_ADDR and port number SRV_PORT, intended for accessing the target resource.</li>
            </ul>
            <t>
This Token space is under exclusive control of the server.</t>
          </li>
          <li>The server processes the phantom observation request above, without transmitting it on the wire. The request is addressed to the resource for which the server wants to start the group observation, as if sent by the group of observers, i.e., with GRP_ADDR as source address and GRP_PORT as source port.</li>
          <li>Upon processing the self-generated phantom registration request, the server interprets it as an observe registration received from the group of potential observer clients. In particular, from then on, the server MUST use T as its own local Token value associated with that observation, with respect to the (previous hop towards the) clients.</li>
          <li>The server does not immediately respond to the phantom observation request with a multicast notification sent on the wire. The server stores the phantom observation request as is, throughout the lifetime of the group observation.</li>
          <li>The server builds a CoAP response message INIT_NOTIF as initial multicast notification for the target resource, in response to the phantom observation request. This message is formatted as other multicast notifications (see <xref target="ssec-server-side-notifications"/>) and MUST include the current representation of the target resource as payload. The server stores the message INIT_NOTIF and does not transmit it. The server considers this message as the latest multicast notification for the target resource, until it transmits a new multicast notification for that resource as a CoAP message on the wire. After that, the server deletes the message INIT_NOTIF.</li>
        </ol>
      </section>
      <section anchor="ssec-server-side-informative">
        <name>Informative Response</name>
        <t>After having started a group observation on a target resource, the server proceeds as follows.</t>
        <t>For each traditional observation ongoing on the target resource, the server MAY cancel that observation. Then, the server considers the corresponding clients as now taking part in the group observation, for which it increases the corresponding observer counter accordingly.</t>
        <t>The server sends to each of such clients an informative response message, encoded as a unicast response with response code 5.03 (Service Unavailable). As per <xref target="RFC7641"/>, such a response does not include an Observe Option. The response MUST be Confirmable and MUST NOT encode link-local addresses.</t>
        <t>The Content-Format of the informative response is set to application/informative-response+cbor, defined in <xref target="content-format"/>. The payload of the informative response is a CBOR map including the following parameters, whose CBOR labels are defined in <xref target="informative-response-params"/>.</t>
        <ul spacing="normal">
          <li>'tp_info', with value a CBOR array. This includes the transport-specific information required to correctly receive multicast notifications bound to the phantom observation request. Typically, this comprises the Token value associated with the group observation, as well as the source and destination addressing information of the related multicast notifications. The CBOR array is formatted as defined in <xref target="sssec-transport-specific-encoding"/>. This parameter MUST be included.</li>
          <li>
            <t>'ph_req', with value the byte serialization of the transport-independent information of the phantom observation request (see <xref target="ssec-server-side-request"/>), encoded as a CBOR byte string. The value of the CBOR byte string is formatted as defined in <xref target="sssec-transport-independent-encoding"/>.  </t>
            <t>
This parameter MAY be omitted, in case the phantom request is, in terms of transport-independent information, identical to the registration request from the client. Otherwise, this parameter MUST be included.  </t>
            <t>
Note that the registration request from the client may indeed differ from the phantom observation request in terms of transport-independent information, but still be acceptable for the server to register the client as taking part in the group observation.</t>
          </li>
          <li>'last_notif', with value the byte serialization of the transport-independent information of the latest multicast notification for the target resource, encoded as a CBOR byte string. The value of the CBOR byte string is formatted as defined in <xref target="sssec-transport-independent-encoding"/>. This parameter MAY be included.</li>
          <li>
            <t>'next_not_before', with value the amount of seconds that will minimally elapse before the server sends the next multicast notification for the group observation of the target resource, encoded as a CBOR unsigned integer. This parameter MAY be included.  </t>
            <t>
This information can help a new client to align itself with the server's timeline, especially in scenarios where multicast notifications are regularly sent. Also, it can help synchronizing different clients when orchestrating a content distribution through multicast notifications.</t>
          </li>
        </ul>
        <t>The CDDL notation <xref target="RFC8610"/> provided below describes the payload of the informative response.</t>
        <figure anchor="informative-response-payload">
          <name>Format of the informative response payload</name>
          <artwork><![CDATA[
informative_response_payload = {
   0 => array, ; 'tp_info', i.e., transport-specific information
 ? 1 => bstr,  ; 'ph_req' (transport-independent information)
 ? 2 => bstr   ; 'last_notif' (transport-independent information)
 ? 3 => uint   ; 'next_not_before'
}
]]></artwork>
        </figure>
        <t>Upon receiving a registration request to observe the target resource, the server does not create a corresponding individual observation for the requesting client. Instead, the server considers that client as now taking part in the group observation of the target resource, of which it increments the observer counter by 1. Then, the server replies to the client with the same informative response message defined above, which MUST be Confirmable.</t>
        <t>Note that this also applies when, with no ongoing traditional observations on the target resource, the server receives a registration request from a first client and decides to start a group observation on the target resource.</t>
        <section anchor="sssec-transport-specific-encoding">
          <name>Transport-Specific Message Information</name>
          <t>[ This encoding might be replaced by CRIs <xref target="I-D.ietf-core-href"/> in a later version of this document. ]</t>
          <t>The CBOR array specified in the 'tp_info' parameter is formatted according to the following CDDL notation.</t>
          <figure anchor="tp-info-general">
            <name>General format of 'tp_info'</name>
            <artwork><![CDATA[
tp_info = [
    srv_addr  ; Addressing information of the server
  ? req_info  ; Request data extension
]

srv_addr = (
    tp_id : int,  ; Identifier of the used transport protocol
  + elements      ; Number, format and encoding
                  ; based on the value of 'tp_id'
)

req_info = (
  + elements  ; Number, format and encoding based on
              ; the value of 'tp_id' in 'srv_addr'
)
]]></artwork>
          </figure>
          <t>The 'srv_addr' element of 'tp_info' specifies the addressing information of the server, and includes at least one element 'tp_id' which is formatted as follows.</t>
          <ul spacing="normal">
            <li>
              <t>'tp_id' : this element is a CBOR integer, which specifies the transport protocol used to transport the CoAP response from the server, i.e., a multicast notification in this document.  </t>
              <t>
This element takes value from the "Value" column of the "CoAP Transport Information" registry defined in <xref target="iana-transport-protocol-identifiers"/> of this document. This element MUST be present. The value of this element determines:  </t>
              <ul spacing="normal">
                <li>How many elements are required to follow in 'srv_addr', as well as what information they convey, their encoding and their semantics.</li>
                <li>How many elements are required in the 'req_info' element of the 'tp_info' array, as well as what information they convey, their encoding and their semantics.</li>
              </ul>
              <t>
This document registers the integer value 1 ("UDP") to be used as value for the 'tp_id' element, when CoAP responses are transported over UDP. In such a case, the full encoding of the 'tp_info' CBOR array is as defined in <xref target="ssssec-udp-transport-specific"/>.  </t>
              <t>
Future specifications that consider CoAP multicast notifications transported over different transport protocols MUST:  </t>
              <ul spacing="normal">
                <li>Register an entry with an integer value to be used for 'tp_id', in the "CoAP Transport Information" registry defined in <xref target="iana-transport-protocol-identifiers"/> of this document.</li>
                <li>Accordingly, define the elements of the 'tp_info' CBOR array, i.e., the elements following 'tp_id' in 'srv_addr' as well as the elements in 'req_info', as to what information they convey, their encoding and their semantics.</li>
              </ul>
            </li>
          </ul>
          <t>The 'req_info' element of 'tp_info' specifies transport-specific information related to a pertinent request message, i.e., the phantom observation request in this document. The exact format of 'req_info' depends on the value of 'tp_id'.</t>
          <t>Given a specific value of 'tp_id', the complete set of elements composing 'srv_addr' and 'req_info' in the 'tp_info' CBOR array is indicated by the two columns "Srv Addr" and "Req Info" of the "CoAP Transport Information" registry defined in <xref target="iana-transport-protocol-identifiers"/>, respectively.</t>
          <section anchor="ssssec-udp-transport-specific">
            <name>UDP Transport-Specific Information</name>
            <t>When CoAP multicast notifications are transported over UDP as per <xref target="RFC7252"/> and <xref target="I-D.ietf-core-groupcomm-bis"/>, the server specifies the integer value 1 ("UDP") as value of 'tp_id' in the 'srv_addr' element of the 'tp_info' CBOR array in the informative response. Then, the rest of the 'tp_info' CBOR array is defined as follows.</t>
            <ul spacing="normal">
              <li>
                <t>'srv_addr' includes two more elements following 'tp_id':  </t>
                <ul spacing="normal">
                  <li>'srv_host': this element is a CBOR byte string, with value the destination IP address of the phantom observation request. This parameter is tagged and identified by the CBOR tag 260 "Network Address (IPv4 or IPv6 or MAC Address)".  That is, the value of the CBOR byte string is the IP address SRV_ADDR of the server hosting the target resource, from where the server will send multicast notifications for the target resource. This element MUST be present.</li>
                  <li>'srv_port': this element is a CBOR unsigned integer, with value the destination port number of the phantom observation request. That is, the specified value is the port number SRV_PORT, from where the server will send multicast notifications for the target resource. This element MUST be present.</li>
                </ul>
              </li>
              <li>
                <t>'req_info' includes the following elements:  </t>
                <ul spacing="normal">
                  <li>'token': this element is a CBOR byte string, with value the Token value of the phantom observation request generated by the server (see <xref target="ssec-server-side-request"/>). Note that the same Token value is used for the multicast notifications bound to that phantom observation request (see <xref target="ssec-server-side-notifications"/>). This element MUST be present.</li>
                  <li>'cli_host': this element is a CBOR byte string, with value the source IP address of the phantom observation request. This parameter is tagged and identified by the CBOR tag 260 "Network Address (IPv4 or IPv6 or MAC Address)". That is, the value of the CBOR byte string is the IP multicast address GRP_ADDR, where the server will send multicast notifications for the target resource. This element MUST be present.</li>
                  <li>'cli_port': this element is a CBOR unsigned integer, with value the source port number of the phantom observation request. That is, the specified value is the port number GRP_PORT, where the server will send multicast notifications for the target resource. This element is OPTIONAL. If not included, the default port number 5683 is assumed.</li>
                </ul>
              </li>
            </ul>
            <t>The CDDL notation provided below describes the full 'tp_info' CBOR array using the format above.</t>
            <figure anchor="tp-info-udp">
              <name>Format of 'tp_info' with UDP as transport protocol</name>
              <artwork><![CDATA[
tp_info = [
    tp_id    : 1,             ; UDP as transport protocol
    srv_host : #6.260(bstr),  ; Src. address of multicast notifications
    srv_port : uint,          ; Src. port of multicast notifications
    token    : bstr,          ; Token of the phantom request and
                              ; associated multicast notifications
    cli_host : #6.260(bstr),  ; Dst. address of multicast notifications
  ? cli_port : uint           ; Dst. port of multicast notifications
]
]]></artwork>
            </figure>
          </section>
        </section>
        <section anchor="sssec-transport-independent-encoding">
          <name>Transport-Independent Message Information</name>
          <t>For both the parameters 'ph_req' and 'last_notif' in the informative response, the value of the byte string is the concatenation of the following components, in the order specified below.</t>
          <t>When defining the value of each component, "CoAP message" refers to the phantom observation request for the 'ph_req' parameter, and to the corresponding latest multicast notification for the 'last_notif' parameter.</t>
          <ul spacing="normal">
            <li>A single byte, with value the content of the Code field in the CoAP message.</li>
            <li>The byte serialization of the complete sequence of CoAP options in the CoAP message.</li>
            <li>If the CoAP message includes a non-zero length payload, the one-byte Payload Marker (0xff) followed by the payload.</li>
          </ul>
        </section>
      </section>
      <section anchor="ssec-server-side-notifications">
        <name>Notifications</name>
        <t>Upon a change in the status of the target resource under group observation, the server sends a multicast notification, intended to all the clients taking part in the group observation of that resource. In particular, each of such multicast notifications is formatted as follows.</t>
        <ul spacing="normal">
          <li>It MUST be Non-confirmable.</li>
          <li>It MUST include an Observe Option, as per <xref target="RFC7641"/>.</li>
          <li>
            <t>It MUST have the same Token value T of the phantom registration request that started the group observation. This Token value is specified in the 'token' element of 'req_info' under the 'tp_info' parameter, in the informative response sent to all the observer clients.  </t>
            <t>
That is, every multicast notification for a target resource is not bound to the observation requests from the different clients, but rather to the phantom registration request associated with the whole set of clients taking part in the group observation of that resource.</t>
          </li>
          <li>It MUST be sent from the same IP address SRV_ADDR and port number SRV_PORT where: i) the original Observe registration requests are sent to by the clients; and ii) the corresponding informative responses are sent from by the server (see <xref target="ssec-server-side-informative"/>). These are indicated to the observer clients as value of the 'srv_host' and 'srv_port' elements of 'srv_addr' under the 'tp_info' parameter, in the informative response (see <xref target="ssssec-udp-transport-specific"/>). That is, redirection MUST NOT be used.</li>
          <li>It MUST be sent to the IP multicast address GRP_ADDR and port number GRP_PORT. These are indicated to the observer clients as value of the 'cli_host' and 'cli_port' elements of 'req_info' under the 'tp_info' parameter, in the informative response (see <xref target="ssssec-udp-transport-specific"/>).</li>
        </ul>
        <t>For each target resource with an active group observation, the server MUST store the latest multicast notification.</t>
      </section>
      <section anchor="ssec-server-side-congestion">
        <name>Congestion Control</name>
        <t>In order to not cause congestion, the server should conservatively control the sending of multicast notifications. In particular:</t>
        <ul spacing="normal">
          <li>The multicast notifications MUST be Non-confirmable.</li>
          <li>In constrained environments such as low-power, lossy networks (LLNs), the server should only support multicast notifications for resources that are small. Following related guidelines from <xref section="3.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/>, this can consist, for example, in having the payload of multicast notifications as limited to approximately 5% of the IP Maximum Transmit Unit (MTU) size, so that it fits into a single link-layer frame in case IPv6 over Low-Power Wireless Personal Area Networks (6LoWPAN) (see <xref section="4" sectionFormat="of" target="RFC4944"/>) is
used.</li>
          <li>The server SHOULD provide multicast notifications with the smallest possible IP multicast scope that fulfills the application needs. For example, following related guidelines from <xref section="3.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/>, site-local scope is always preferred over global scope IP multicast, if this fulfills the application needs. Similarly, realm-local scope is always preferred over site-local scope, if this fulfills the application needs. Ultimately, it is up to the server administrator to explicitly configure the most appropriate IP multicast scope.</li>
          <li>Following related guidelines from <xref section="4.5.1" sectionFormat="of" target="RFC7641"/>, the server SHOULD NOT send more than one multicast notification every 3 seconds, and SHOULD use an even less aggressive rate when possible (see also <xref section="3.1.2" sectionFormat="of" target="RFC8085"/>). The transmission rate of multicast notifications should also take into account the avoidance of a possible "broadcast storm" problem <xref target="MOBICOM99"/>. This prevents a following, considerable increase of the channel load, whose origin would be likely attributed to a router rather than the server.</li>
        </ul>
      </section>
      <section anchor="ssec-server-side-cancellation">
        <name>Cancellation</name>
        <t>At any point in time, the server may want to cancel a group observation of a target resource. For instance, the server may realize that no clients or not enough clients are interested in taking part in the group observation anymore. A possible approach that the server can use to assess this is defined in <xref target="sec-rough-counting"/>.</t>
        <t>In order to cancel the group observation, the server sends a multicast response with response code 5.03 (Service Unavailable), signaling that the group observation has been terminated. The response has the same Token value T of the phantom registration request, it has no payload, and it does not include an Observe Option.</t>
        <t>The server sends the response to the same multicast IP address GRP_ADDR and port number GRP_PORT used to send the multicast notifications related to the target resource. Finally, the server releases the resources allocated for the group observation, and especially frees up the Token value T used at its CoAP endpoint.</t>
      </section>
    </section>
    <section anchor="sec-client-side">
      <name>Client-Side</name>
      <section anchor="ssec-client-side-request">
        <name>Request</name>
        <t>A client sends an observation request to the server as described in <xref target="RFC7641"/>, i.e., a GET request with an Observe Option set to 0 (register). The request MUST NOT encode link-local addresses. If the server is not configured to accept registrations on that target resource specifically for a group observation, this would still result in a positive notification response to the client as described in <xref target="RFC7641"/>, in case the server is able and willing to add the client to the list of observers.</t>
        <t>In a particular setup, the information typically specified in the 'tp_info' parameter of the informative response (see <xref target="ssec-server-side-informative"/>) can be pre-configured on the server and the clients. For example, the destination multicast address and port number where to send multicast notifications for a group observation, as well as the associated Token value to use, can be set aside for particular tasks (e.g., enforcing observations of a specific resource). Alternative mechanisms can rely on using some bytes from the hash of the observation request as the last bytes of the multicast address or as part of the Token value.</t>
        <t>In such a particular setup, the client may also have an early knowledge of the phantom request, i.e., it will be possible for the server to safely omit the parameter 'ph_req' from the informative response to the observation request (see <xref target="ssec-server-side-informative"/>). In this case, the client can include a No-Response Option <xref target="RFC7967"/> with value 16 in its Observe registration request, which results in the server suppressing the informative response. As a consequence, the observation request only informs the server that there is one additional client interested to take part in the group observation.</t>
        <t>While the considered client is able to simply set up its multicast address and start receiving multicast notifications for the group observation, sending an observation request as above allows the server to increment the observer counter. This helps the server to assess the current number of clients interested in the group observation over time (e.g., by using the method in <xref target="sec-rough-counting"/>), which in turn can play a role in deciding to cancel the group observation.</t>
      </section>
      <section anchor="ssec-client-side-informative">
        <name>Informative Response</name>
        <t>Upon receiving the informative response defined in <xref target="ssec-server-side-informative"/>, the client proceeds as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>The client configures an observation of the target resource. To this end, it relies on a CoAP endpoint used for messages having:  </t>
            <ul spacing="normal">
              <li>As source address and port number, the server address SRV_ADDR and port number SRV_PORT intended for accessing the target resource. These are specified as value of the 'srv_host' and 'srv_port' elements of 'srv_addr' under the 'tp_info' parameter, in the informative response (see <xref target="ssssec-udp-transport-specific"/>).</li>
              <li>As destination address and port number, the IP multicast address GRP_ADDR and port number GRP_PORT. These are specified as value of the 'cli_host' and 'cli_port' elements of 'req_info' under the 'tp_info' parameter, in the informative response (see <xref target="ssssec-udp-transport-specific"/>). If the 'cli_port' element is omitted in 'req_info', the client MUST assume the default port number 5683 as GRP_PORT.</li>
            </ul>
          </li>
          <li>
            <t>The client rebuilds the phantom registration request as follows.  </t>
            <ul spacing="normal">
              <li>The client uses the Token value T, specified in the 'token' element of 'req_info' under the 'tp_info' parameter of the informative response.</li>
              <li>If the 'ph_req' parameter is not present in the informative response, the client uses the transport-independent information from its original Observe registration request.</li>
              <li>If the 'ph_req' parameter is present in the informative response, the client uses the transport-independent information specified in the parameter.</li>
            </ul>
          </li>
          <li>If the informative response includes the parameter 'ph_req', and the transport-independent information specified therein differs from the one in the original Observe registration request, then the client checks whether a response to the rebuilt phantom request can, if available in a cache entry, be used to satisfy the original observation request. If this is not the case, the client SHOULD explicitly withdraw from the group observation.</li>
          <li>The client stores the phantom registration request, as associated with the observation of the target resource. In particular, the client MUST use the Token value T of this phantom registration request as its own local Token value associated with that group observation, with respect to the server. The particular way to achieve this is implementation specific.</li>
          <li>
            <t>If the informative response includes the parameter 'last_notif', the client rebuilds the latest multicast notification, by using:  </t>
            <ul spacing="normal">
              <li>The transport-independent information, specified in the 'last_notif' parameter of the informative response.</li>
              <li>The Token value T, specified in the 'token' element of 'req_info' under the 'tp_info' parameter of the informative response.</li>
            </ul>
          </li>
          <li>If the informative response includes the parameter 'last_notif', the client processes the multicast notification rebuilt at step 5 as defined in <xref section="3.2" sectionFormat="of" target="RFC7641"/>. In particular, the value of the Observe Option is used as initial baseline for notification reordering in this group observation.</li>
          <li>If a traditional observation to the target resource is ongoing, the client MAY silently cancel it without notifying the server.</li>
        </ol>
        <t>If any of the expected fields in the informative response are not present or malformed, the client MAY try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). Otherwise, the client SHOULD explicitly withdraw from the group observation.</t>
        <t><xref target="appendix-different-sources"/> describes possible alternative ways for clients to retrieve the phantom registration request and other information related to a group observation.</t>
      </section>
      <section anchor="ssec-client-side-notifications">
        <name>Notifications</name>
        <t>After having successfully processed the informative response as defined in <xref target="ssec-client-side-informative"/>, the client will receive, accept and process multicast notifications about the state of the target resource from the server, as responses to the phantom registration request and with Token value T.</t>
        <t>The client relies on the value of the Observe Option for notification reordering, as defined in <xref section="3.4" sectionFormat="of" target="RFC7641"/>.</t>
      </section>
      <section anchor="ssec-client-side-cancellation">
        <name>Cancellation</name>
        <t>At a certain point in time, a client may become not interested in receiving further multicast notifications about a target resource. When this happens, the client can simply "forget" about being part of the group observation for that target resource, as per <xref section="3.6" sectionFormat="of" target="RFC7641"/>.</t>
        <t>When, later on, the server sends the next multicast notification, the client will not recognize the Token value T in the message. Since the multicast notification is Non-confirmable, it is OPTIONAL for the client to reject the multicast notification with a Reset message, as defined in <xref section="3.5" sectionFormat="of" target="RFC7641"/>.</t>
        <t>In case the server has canceled a group observation as defined in <xref target="ssec-server-side-cancellation"/>, the client simply forgets about the group observation and frees up the used Token value T for that endpoint, upon receiving the multicast error response defined in <xref target="ssec-server-side-cancellation"/>.</t>
      </section>
    </section>
    <section anchor="sec-web-linking">
      <name>Web Linking</name>
      <t>The possible use of multicast notifications in a group observation may be indicated by a target attribute "gp-obs" in a web link <xref target="RFC8288"/> to a resource, e.g., using a link-format document <xref target="RFC6690"/>.</t>
      <t>The "gp-obs" attribute is a hint, indicating that the server might send multicast notifications for observations of the resource targeted by the link. Note that this is simply a hint, i.e., it does not include any information required to participate in a group observation, and to receive and process multicast notifications.</t>
      <t>A value MUST NOT be given for the "gp-obs" attribute; any present value MUST be ignored by parsers.  The "gp-obs" attribute MUST NOT appear more than once in a given link-value; occurrences after the first MUST be ignored by parsers.</t>
      <t>The example in <xref target="example-web-link"/> shows a use of the "gp-obs" attribute: the client does resource discovery on a server and gets back a list of resources, one of which includes the "gp-obs" attribute indicating that the server might send multicast notifications for observations of that resource. The link-format notation (see <xref section="5" sectionFormat="of" target="RFC6690"/>) is used.</t>
      <figure anchor="example-web-link">
        <name>The Web Link</name>
        <artwork><![CDATA[
REQ: GET /.well-known/core

RES: 2.05 Content
    </sensors/temp>;gp-obs,
    </sensors/light>;if="sensor"
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-example-no-security">
      <name>Example</name>
      <t>The following example refers to two clients C_1 and C_2 that register to observe a resource /r at a Server S, which has address SRV_ADDR and listens to the port number SRV_PORT. Before the following exchanges occur, no clients are observing the resource /r , which has value "1234".</t>
      <t>The server S sends multicast notifications to the IP multicast address GRP_ADDR and port number GRP_PORT, and starts the group observation upon receiving a registration request from a first client that wishes to start a traditional observation on the resource /r.</t>
      <t>The following notation is used for the payload of the informative responses:</t>
      <ul spacing="normal">
        <li>'bstr(X)' denotes a CBOR byte string with value the byte serialization of X, with '|' denoting byte concatenation.</li>
        <li>'OPT' denotes a sequence of CoAP options. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</li>
        <li>'PAYLOAD' denotes a CoAP payload. This refers to the latest multicast notification encoded by the 'last_notif' parameter.</li>
      </ul>
      <figure anchor="example-no-oscore">
        <name>Example of group observation</name>
        <artwork><![CDATA[
C_1     ----------------- [ Unicast ] ------------------------> S  /r
 |  GET                                                         |
 |  Token: 0x4a                                                 |
 |  Observe: 0 (Register)                                       |
 |  <Other options>                                             |
 |                                                              |
 |               (S allocates the available Token value 0x7b .) |
 |                                                              |
 |      (S sends to itself a phantom observation request PH_REQ |
 |       as coming from the IP multicast address GRP_ADDR .)    |
 |         ------------------------------------------------     |
 |       /                                                      |
 |       \----------------------------------------------------> |  /r
 |                                       GET                    |
 |                                       Token: 0x7b            |
 |                                       Observe: 0 (Register)  |
 |                                       <Other options>        |
 |                                                              |
 |                      (S creates a group observation of /r .) |
 |                                                              |
 |                          (S increments the observer counter  |
 |                           for the group observation of /r .) |
 |                                                              |
C_1 <-------------------- [ Unicast ] ---------------------     S
 |  5.03                                                        |
 |  Token: 0x4a                                                 |
 |  Content-Format: application/informative-response+cbor       |
 |  Max-Age: 0                                                  |
 |  <Other options>                                             |
 |  Payload: {                                                  |
 |    tp_info    : [1, bstr(SRV_ADDR), SRV_PORT,                |
 |                  0x7b, bstr(GRP_ADDR), GRP_PORT],            |
 |    last_notif : bstr(0x45 | OPT | 0xff | PAYLOAD)            |
 |  }                                                           |
 |                                                              |
C_2     ----------------- [ Unicast ] ------------------------> S  /r
 |  GET                                                         |
 |  Token: 0x01                                                 |
 |  Observe: 0 (Register)                                       |
 |  <Other options>                                             |
 |                                                              |
 |                          (S increments the observer counter  |
 |                           for the group observation of /r .) |
 |                                                              |
C_2 <-------------------- [ Unicast ] ---------------------     S
 |  5.03                                                        |
 |  Token: 0x01                                                 |
 |  Content-Format: application/informative-response+cbor       |
 |  Max-Age: 0                                                  |
 |  <Other options>                                             |
 |  Payload: {                                                  |
 |    tp_info    : [1, bstr(SRV_ADDR), SRV_PORT,                |
 |                  0x7b, bstr(GRP_ADDR), GRP_PORT],            |
 |    last_notif : bstr(0x45 | OPT | 0xff | PAYLOAD)            |
 |  }                                                           |
 |                                                              |
 |          (The value of the resource /r changes to "5678".)   |
 |                                                              |
C_1                                                             |
 +  <------------------- [ Multicast ] --------------------     S
C_2        (Destination address/port: GRP_ADDR/GRP_PORT)        |
 |  2.05                                                        |
 |  Token: 0x7b                                                 |
 |  Observe: 11                                                 |
 |  Content-Format: application/cbor                            |
 |  <Other options>                                             |
 |  Payload: : "5678"                                           |
 |                                                              |
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-rough-counting">
      <name>Rough Counting of Clients in the Group Observation</name>
      <t>This section specifies a method that the server can use to keep an estimate of still active and interested clients, without creating undue traffic on the network.</t>
      <section anchor="multicast-response-feedback-divider-option">
        <name>Multicast-Response-Feedback-Divider Option</name>
        <t>In order to enable the rough counting of still active and interested clients, a new CoAP option is introduced, which SHOULD be supported by clients that listen to multicast responses.</t>
        <t>The option is called Multicast-Response-Feedback-Divider. As summarized in <xref target="mrfd-table"/>, the option is not Critical, not Safe-to-Forward, and integer valued. Since the option is not Safe-to-Forward, the column "N" indicates a dash for "not applicable".</t>
        <figure anchor="mrfd-table">
          <name>Multicast-Response-Feedback-Divider</name>
          <artwork align="center"><![CDATA[
+-----+---+---+---+---+---------------------+--------+------+---------+
| No. | C | U | N | R | Name                | Format | Len. | Default |
+-----+---+---+---+---+---------------------+--------+------+---------+
| TBD |   | x | - |   | Multicast-Response- | uint   | 0-1  | (none)  |
|     |   |   |   |   | Feedback-Divider    |        |      |         |
+-----+---+---+---+---+---------------------+--------+------+---------+

      C = Critical, U = Unsafe, N = NoCacheKey, R = Repeatable
]]></artwork>
        </figure>
        <t>The Multicast-Response-Feedback-Divider Option is of class E for OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      </section>
      <section anchor="processing-on-the-client-side">
        <name>Processing on the Client Side</name>
        <t>Upon receiving a response with a Multicast-Response-Feedback-Divider Option, a client SHOULD acknowledge its interest in continuing receiving multicast notifications for the target resource, as described below.</t>
        <t>The client picks an integer random number I, from 0 inclusive to the number Z = (2^Q) exclusive, where Q is the value specified in the option and "^" is the exponentiation operator. If I is different than 0, the client takes no further action. Otherwise, the client should wait a random fraction of the Leisure time (see <xref section="8.2" sectionFormat="of" target="RFC7252"/>), and then registers a regular unicast observation on the same target resource.</t>
        <t>To this end, the client essentially follows the steps that got it originally subscribed to group notifications for the target resource. In particular, the client sends an observation request to the server, i.e., a GET request with an Observe Option set to 0 (register). The request MUST be addressed to the same target resource, and MUST have the same destination IP address and port number used for the original registration request, regardless the source IP address and port number of the received multicast notification.</t>
        <t>Since the Observe registration is only done for its side effect of showing as an attempted observation at the server, the client MUST send the unicast request in a non confirmable way, and with the maximum No-Response setting <xref target="RFC7967"/>. In the request, the client MUST include a Multicast-Response-Feedback-Divider Option, whose value MUST be empty (Option Length = 0). The client does not need to wait for responses, and can keep processing further notifications on the same Token.</t>
        <t>The client MUST ignore the Multicast-Response-Feedback-Divider Option, if the multicast notification is retrieved from the 'last_notif' parameter of an informative response (see <xref target="ssec-server-side-informative"/>). A client includes the Multicast-Response-Feedback-Divider Option only in a re-registration request triggered by the server as described above, and MUST NOT include it in any other request.</t>
        <t><xref target="appendix-pseudo-code-counting-client"/> and <xref target="appendix-pseudo-code-counting-client-constrained"/> provide a description in pseudo-code of the operations above performed by the client.</t>
        <t><xref target="intermediaries"/> specifies how the approach presented in <xref target="sec-server-side"/> and <xref target="sec-client-side"/> works when a proxy is used between the clients and the server. In such a case, the following applies.</t>
        <ul spacing="normal">
          <li>Since the Multicast-Response-Feedback-Divider Option is unsafe to forward, the proxy needs to recognize and understand the option in order to participate to the rough counting process.</li>
          <li>Upon receiving a multicast notification including the Multicast-Response-Feedback-Divider Option, the proxy proceeds like defined above 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.</li>
          <li>
            <t>Upon receiving a multicast notification including the Multicast-Response-Feedback-Divider Option, the proxy MUST remove the option before forwarding the notification to (the previous hop towards) any of the origin clients.  </t>
            <t>
The proxy would have to rely on separate means for asserting whether the origin clients are still interested in the observation, e.g., by regularly forwarding notifications to the clients as unicast, Confirmable response messages.  </t>
            <t>
When no interested origin clients remain, the proxy can simply forget about being part of the group observation for the target resource at the server, like an origin client would do (see <xref target="ssec-client-side-cancellation"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="processing-on-the-server-side">
        <name>Processing on the Server Side</name>
        <t>In order to avoid needless use of network resources, a server SHOULD keep a rough, updated count of the number of clients taking part in the group observation of a target resource. To this end, the server updates the value COUNT of the associated observer counter (see <xref target="sec-server-side"/>), for instance by using the method described below.</t>
        <section anchor="request-for-feedback">
          <name>Request for Feedback</name>
          <t>When it wants to obtain a new estimated count, the server considers a number M of confirmations it would like to receive from the clients. It is up to applications to define policies about how the server determines and possibly adjusts the value of M.</t>
          <t>Then, the server computes the value Q = max(L, 0), where:</t>
          <ul spacing="normal">
            <li>L is computed as L = ceil(log2(N / M)).</li>
            <li>N is the current value of the observer counter, possibly rounded up to 1, i.e., N = max(COUNT, 1).</li>
          </ul>
          <t>Finally, the server sets Q as the value of the Multicast-Response-Feedback-Divider Option, which is sent within a successful multicast notification.</t>
          <t>If several multicast notifications are sent in a burst fashion, it is RECOMMENDED for the server to include the Multicast-Response-Feedback-Divider Option only in the first one of those notifications.</t>
        </section>
        <section anchor="collection-of-feedback">
          <name>Collection of Feedback</name>
          <t>The server collects unicast observation requests from the clients, for an amount of time of MAX_CONFIRMATION_WAIT seconds. During this time, the server regularly increments the observer counter when adding a new client to the group observation (see <xref target="ssec-server-side-informative"/>).</t>
          <t>It is up to applications to define the value of MAX_CONFIRMATION_WAIT, which has to take into account the transmission time of the multicast notification and of unicast observation requests, as well as the leisure time of the clients, which may be hard to know or estimate for the server.</t>
          <t>If this information is not known to the server, it is recommended to define MAX_CONFIRMATION_WAIT as follows.</t>
          <t>MAX_CONFIRMATION_WAIT = MAX_RTT + MAX_CLIENT_REQUEST_DELAY</t>
          <t>where MAX_RTT is as defined in <xref section="4.8.2" sectionFormat="of" target="RFC7252"/> and has default value 202 seconds, while MAX_CLIENT_REQUEST_DELAY is equivalent to MAX_SERVER_RESPONSE_DELAY defined in <xref section="3.1.5" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/> and has default value 250 seconds. In the absence of more specific information, the server can thus consider a conservative MAX_CONFIRMATION_WAIT of 452 seconds.</t>
          <t>If more information is available in deployments, a much shorter MAX_CONFIRMATION_WAIT can be set. This can be based on a realistic round trip time (replacing MAX_RTT) and on the largest leisure time configured on the clients (replacing MAX_CLIENT_REQUEST_DELAY), e.g., DEFAULT_LEISURE = 5 seconds, thus shortening MAX_CONFIRMATION_WAIT to a few seconds.</t>
        </section>
        <section anchor="processing-of-feedback">
          <name>Processing of Feedback</name>
          <t>Once MAX_CONFIRMATION_WAIT seconds have passed, the server counts the R confirmations arrived as unicast observation requests to the target resource, since the multicast notification with the Multicast-Response-Feedback-Divider Option has been sent. In particular, the server considers a unicast observation request as a confirmation from a client only if it includes a Multicast-Response-Feedback-Divider Option with an empty value (Option Length = 0).</t>
          <t>Then, the server computes a feedback indicator as E = R * (2^Q), where "^" is the exponentiation operator. According to what defined by application policies, the server determines the next time when to ask clients for their confirmation, e.g., after a certain number of multicast notifications has been sent. For example, the decision can be influenced by the reception of no confirmations from the clients, i.e., R = 0, or by the value of the ratios (E/N) and (N/E).</t>
          <t>Finally, the server computes a new estimated count of the observers. To this end, the server first consider COUNT' as the current value of the observer counter at this point in time. Note that COUNT' may be greater than the value COUNT used at the beginning of this process, if the server has incremented the observer counter upon adding new clients to the group observation (see <xref target="ssec-server-side-informative"/>).</t>
          <t>In particular, the server computes the new estimated count value as COUNT' + ((E - N) / D), where D &gt; 0 is an integer value used as dampener. This step has to be performed atomically. That is, until this step is completed, the server MUST hold the processing of an observation request for the same target resource from a new client. Finally, the server considers the result as the current observer counter, and assesses it for possibly canceling the group observation (see <xref target="ssec-server-side-cancellation"/>).</t>
          <t>This estimate is skewed by packet loss, but it gives the server a sufficiently good estimation for further counts and for deciding when to cancel the group observation. It is up to applications to define policies about how the server takes the newly updated estimate into account and determines whether to cancel the group observation.</t>
          <t>As an example, if the server currently estimates that N = COUNT = 32 observers are active and considers a constant M = 8, it sends out a notification with Multicast-Response-Feedback-Divider: 2. Then, out of 18 actually active clients, 5 send a re-registration request based on their random draw, of which one request gets lost, thus leaving 4 re-registration requests received by the server. Also, no new clients have been added to the group observation during this time, i.e., COUNT' is equal to COUNT. As a consequence, assuming that a dampener value D = 1 is used, the server computes the new estimated count value as 32 + (16 - 32) = 16, and keeps the group observation active.</t>
          <t>To produce a most accurate updated counter, a server can include a Multicast-Response-Feedback-Divider Option with value Q = 0 in its multicast notifications, as if M is equal to N. This will trigger all the active clients to state their interest in continuing receiving notifications for the target resource. Thus, the amount R of arrived confirmations is affected only by possible packet loss.</t>
          <t><xref target="appendix-pseudo-code-counting-server"/> provides a description in pseudo-code of the operations above performed by the server, including example behaviors for scheduling the next count update and deciding whether to cancel the group observation.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-secured-notifications">
      <name>Protection of Multicast Notifications with Group OSCORE</name>
      <t>A server can protect multicast notifications by using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>, thus ensuring they are protected end-to-end with the observer clients. This requires that both the server and the clients interested in receiving multicast notifications from that server are members of the same OSCORE group.</t>
      <t>In some settings, the OSCORE group to refer to can be pre-configured on the clients and the server. In such a case, a server which is aware of such pre-configuration can simply assume a client to be already member of the correct OSCORE group.</t>
      <t>In any other case, the server MAY communicate to clients what OSCORE group they are required to join, by providing additional guidance in the informative response as described in <xref target="sec-inf-response"/>. Note that clients can already be members of the right OSCORE group, in case they have previously joined it to securely communicate with the same server and/or with other servers to access their resources.</t>
      <t>Both the clients and the server MAY join the OSCORE group by using the approach described in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> and based on the ACE framework for Authentication and Authorization in constrained environments <xref target="RFC9200"/>. Further details on how to discover the OSCORE group and join it are out of the scope of this document.</t>
      <t>If multicast notifications are protected using Group OSCORE, the original registration requests and related unicast (notification) responses MUST also be secured, including and especially the informative responses from the server.</t>
      <t>To this end, alternative security protocols than Group OSCORE, such as OSCORE <xref target="RFC8613"/> and/or DTLS <xref target="RFC9147"/>, can be used to protect other exchanges via unicast between the server and each client, including the original client registration (see <xref target="sec-client-side"/>).</t>
      <section anchor="sec-inf-response">
        <name>Signaling the OSCORE Group in the Informative Response</name>
        <t>This section describes a mechanism for the server to communicate to the client what OSCORE group to join in order to decrypt and verify the multicast notifications protected with Group OSCORE. The client MAY use the information provided by the server to start the ACE joining procedure described in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>. This mechanism is OPTIONAL to support for the client and server.</t>
        <t>Additionally to what defined in <xref target="sec-server-side"/>, the CBOR map in the informative response payload contains the following fields, whose CBOR labels are defined in <xref target="informative-response-params"/>.</t>
        <ul spacing="normal">
          <li>'join_uri', with value the URI for joining the OSCORE group at the respective Group Manager, encoded as a CBOR text string. If the procedure described in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> is used for joining, this field specifically indicates the URI of the group-membership resource at the Group Manager.</li>
          <li>'sec_gp', with value the name of the OSCORE group, encoded as a CBOR text string.</li>
          <li>Optionally, 'as_uri', with value the URI of the Authorization Server associated with the Group Manager for the OSCORE group, encoded as a CBOR text string.</li>
          <li>Optionally, 'hkdf', with value the HKDF Algorithm used in the OSCORE group, encoded as a CBOR text string or integer. The value is taken from the 'Value' column of the "COSE Algorithms" registry <xref target="COSE.Algorithms"/>.</li>
          <li>
            <t>Optionally, 'cred_fmt', with value the format of the authentication credentials used in the OSCORE group, encoded as a CBOR integer. The value is taken from the 'Label' column of the "COSE Header Parameters" Registry <xref target="COSE.Header.Parameters"/>. Consistently with <xref section="2.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, acceptable values denote a format that MUST explicitly provide the comprehensive set of information related to the public key algorithm, including, e.g., the used elliptic curve (when applicable).  </t>
            <t>
At the time of writing this specification, acceptable formats of authentication credentials are CBOR Web Tokens (CWTs) and CWT Claim Sets (CCSs) <xref target="RFC8392"/>, X.509 certificates <xref target="RFC7925"/> and C509 certificates <xref target="I-D.ietf-cose-cbor-encoded-cert"/>. Further formats may be available in the future, and would be acceptable to use as long as they comply with the criteria defined above.  </t>
            <t>
[ As to CWTs and unprotected CWT claim sets, there is a pending registration requested by draft-ietf-lake-edhoc. ]  </t>
            <t>
[ As to C509 certificates, there is a pending registration requested by draft-ietf-cose-cbor-encoded-cert. ]</t>
          </li>
          <li>Optionally, 'sign_enc_alg', with value the Signature Encryption Algorithm used in the OSCORE group to encrypt messages protected with the group mode, encoded as a CBOR text string or integer. The value is taken from the 'Value' column of the "COSE Algorithms" registry <xref target="COSE.Algorithms"/>.</li>
          <li>Optionally, 'sign_alg', with value the Signature Algorithm used to sign messages in the OSCORE group, encoded as a CBOR text string or integer. The value is taken from the 'Value' column of the "COSE Algorithms" registry <xref target="COSE.Algorithms"/>.</li>
          <li>
            <t>Optionally, 'sign_params', encoded as a CBOR array and including the following two elements:  </t>
            <ul spacing="normal">
              <li>'sign_alg_capab': a CBOR array, with the same format and value of the COSE capabilities array for the algorithm indicated in 'sign_alg', as specified for that algorithm in the 'Capabilities' column of the "COSE Algorithms" Registry <xref target="COSE.Algorithms"/>.</li>
              <li>'sign_key_type_capab': a CBOR array, with the same format and value of the COSE capabilities array for the COSE key type of the keys used with the algorithm indicated in 'sign_alg', as specified for that key type in the 'Capabilities' column of the "COSE Key Types" Registry <xref target="COSE.Key.Types"/>.</li>
            </ul>
          </li>
        </ul>
        <t>The values of 'sign_alg', 'sign_params' and 'cred_fmt' provide an early knowledge of the format of authentication credentials as well as of the type of public keys used in the OSCORE group. Thus, the client does not need to ask the Group Manager for this information as a preliminary step before the (ACE) join process, or to perform a trial-and-error exchange with the Group Manager upon joining the group. Hence, the client is able to provide the Group Manager with its own authentication credential in the correct expected format and including a public key of the correct expected type, at the very first step of the (ACE) join process.</t>
        <t>The values of 'hkdf', 'sign_enc_alg' and 'sign_alg' provide an early knowledge of the algorithms used in the OSCORE group. Thus, the client is able to decide whether to actually proceed with the (ACE) join process, depending on its support for the indicated algorithms.</t>
        <t>As mentioned above, since this mechanism is OPTIONAL, all the fields are OPTIONAL in the informative response. However, the 'join_uri' and 'sec_gp' fields MUST be present if the mechanism is implemented and used. If any of the fields are present without the 'join_uri' and 'sec_gp' fields present, the client MUST ignore these fields, since they would not be sufficient to start the (ACE) join procedure. When this happens, the client MAY try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). Otherwise, the client SHOULD explicitly withdraw from the group observation.</t>
        <t><xref target="self-managed-oscore-group"/> describes a possible alternative approach, where the server self-manages the OSCORE group, and provides the observer clients with the necessary keying material in the informative response. The approach in <xref target="self-managed-oscore-group"/> MUST NOT be used together with the mechanism defined in this section for indicating what OSCORE group to join.</t>
      </section>
      <section anchor="sec-server-side-with-security">
        <name>Server-Side Requirements</name>
        <t>When using Group OSCORE to protect multicast notifications, the server performs the operations described in <xref target="sec-server-side"/>, with the following differences.</t>
        <section anchor="ssec-server-side-request-oscore">
          <name>Registration</name>
          <t>The phantom registration request MUST be secured, by using Group OSCORE. In particular, the group mode of Group OSCORE defined in <xref section="8" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> MUST be used.</t>
          <t>The server protects the phantom registration request as defined in <xref section="8.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, as if it was the actual sender, i.e., by using its Sender Context. As a consequence, the server consumes the current value of its Sender Sequence Number SN in the OSCORE group, and hence updates it to SN* = (SN + 1). Consistently, the OSCORE Option in the phantom registration request includes:</t>
          <ul spacing="normal">
            <li>As 'kid', the Sender ID of the server in the OSCORE group.</li>
            <li>As 'piv', the previously consumed Sender Sequence Number value SN of the server in the OSCORE group, i.e., (SN* - 1).</li>
          </ul>
        </section>
        <section anchor="ssec-server-side-informative-oscore">
          <name>Informative Response</name>
          <t>The value of the CBOR byte string in the 'ph_req' parameter encodes the phantom observation request as a message protected with Group OSCORE (see <xref target="ssec-server-side-request-oscore"/>). As a consequence: the specified Code is always 0.05 (FETCH); the sequence of CoAP options will be limited to the outer, non encrypted options; a payload is always present, as the authenticated ciphertext followed by the signature. Note that, in terms of transport-independent information, the registration request from the client typically differs from the phantom request. Thus, the server has to include the 'ph_req' parameter in the informative response. An exception is the case discussed in <xref target="deterministic-phantom-Request"/>.</t>
          <t>Similarly, the value of the CBOR byte string in the 'last_notif' parameter encodes the latest multicast notification as a message protected with Group OSCORE (see <xref target="ssec-server-side-notifications-oscore"/>). This applies also to the initial multicast notification INIT_NOTIF built in step 6 of <xref target="ssec-server-side-request"/>.</t>
          <t>Optionally, the informative response includes information on the OSCORE group to join, as additional parameters (see <xref target="sec-inf-response"/>).</t>
        </section>
        <section anchor="ssec-server-side-notifications-oscore">
          <name>Notifications</name>
          <t>The server MUST protect every multicast notification for the target resource with Group OSCORE. In particular, the group mode of Group OSCORE defined in <xref section="8" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> MUST be used.</t>
          <t>The process described in <xref section="8.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> applies, with the following additions when building the two OSCORE 'external_aad' to encrypt and sign the multicast notification (see <xref section="4.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</t>
          <ul spacing="normal">
            <li>The 'request_kid' is the 'kid' value in the OSCORE Option of the phantom registration request, i.e., the Sender ID of the server.</li>
            <li>The 'request_piv' is the 'piv' value in the OSCORE Option of the phantom registration request, i.e., the consumed Sender Sequence Number SN of the server.</li>
            <li>The 'request_kid_context' is the 'kid context' value in the OSCORE Option of the phantom registration request, i.e., the Group Identifier value (Gid) of the OSCORE group used as ID Context.</li>
          </ul>
          <t>Note that these same values are used to protect each and every multicast notification sent for the target resource under this group observation.</t>
        </section>
        <section anchor="ssec-server-side-cancellation-oscore">
          <name>Cancellation</name>
          <t>When canceling a group observation (see <xref target="ssec-server-side-cancellation"/>), the multicast response with error code 5.03 (Service Unavailable) is also protected with Group OSCORE, as per <xref section="8.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. The server MUST use its own Sender Sequence Number as Partial IV to protect the error response, and include it as Partial IV in the OSCORE Option of the response.</t>
        </section>
      </section>
      <section anchor="sec-client-side-with-security">
        <name>Client-Side Requirements</name>
        <t>When using Group OSCORE to protect multicast notifications, the client performs as described in <xref target="sec-client-side"/>, with the following differences.</t>
        <section anchor="ssec-client-side-informative-oscore">
          <name>Informative Response</name>
          <t>Upon receiving the informative response from the server, the client performs as described in <xref target="ssec-client-side-informative"/>, with the following additions.</t>
          <t>When performing step 2, the client expects the 'ph_req' parameter to be included in the informative response, which is otherwise considered malformed. An exception is the case discussed in <xref target="deterministic-phantom-Request"/>.</t>
          <t>Once completed step 2, the client decrypts and verifies the rebuilt phantom registration request as defined in <xref section="8.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, with the following differences.</t>
          <ul spacing="normal">
            <li>The client MUST NOT perform any replay check. That is, the client skips step 3 in <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</li>
            <li>
              <t>If decryption and verification of the phantom registration request succeed:  </t>
              <ul spacing="normal">
                <li>The client MUST NOT update the Replay Window in the Recipient Context associated with the server. That is, the client skips the second bullet of step 6 in <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</li>
                <li>The client MUST NOT take any further process as normally expected according to <xref target="RFC7252"/>. That is, the client skips step 8 in <xref section="8.2" sectionFormat="of" target="RFC8613"/>. In particular, the client MUST NOT deliver the phantom registration request to the application, and MUST NOT take any action in the Token space of its unicast endpoint, where the informative response has been received.</li>
                <li>The client stores the values of the 'kid', 'piv' and 'kid context' fields from the OSCORE Option of the phantom registration request.</li>
              </ul>
            </li>
            <li>If decryption and verification of the phantom registration request fail, the client MAY try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). Otherwise, the client SHOULD explicitly withdraw from the group observation.</li>
          </ul>
          <t>After successful decryption and verification, the client performs step 3 in <xref target="ssec-client-side-informative"/>, considering the decrypted phantom registration request.</t>
          <t>If the informative response includes the parameter 'last_notif', the client also decrypts and verifies the latest multicast notification rebuilt at step 5 in <xref target="ssec-client-side-informative"/>, just like it would for the multicast notifications transmitted as CoAP messages on the wire (see <xref target="ssec-client-side-notifications-oscore"/>). If decryption and verification succeed, the client proceeds with step 6, considering the decrypted latest multicast notification. Otherwise, the client proceeds to step 7.</t>
        </section>
        <section anchor="ssec-client-side-notifications-oscore">
          <name>Notifications</name>
          <t>After having successfully processed the informative response as defined in <xref target="ssec-client-side-informative-oscore"/>, the client will decrypt and verify every multicast notification for the target resource as defined in <xref section="8.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, with the following difference.</t>
          <t>For both decryption and signature verification, the client MUST set the 'external_aad' defined in <xref section="4.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> as follows. The particular way to achieve this is implementation specific.</t>
          <ul spacing="normal">
            <li>'request_kid' takes the value of the 'kid' field from the OSCORE Option of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</li>
            <li>'request_piv' takes the value of the 'piv' field from the OSCORE Option of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</li>
            <li>'request_kid_context' takes the value of the 'kid context' field from the OSCORE Option of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</li>
          </ul>
          <t>Note that these same values are used to decrypt and verify each and every multicast notification received for the target resource.</t>
          <t>The replay protection and checking of multicast notifications is performed as specified in <xref section="4.1.3.5.2" sectionFormat="of" target="RFC8613"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-example-with-security">
      <name>Example with Group OSCORE</name>
      <t>The following example refers to two clients C_1 and C_2 that register to observe a resource /r at a Server S, which has address SRV_ADDR and listens to the port number SRV_PORT. Before the following exchanges occur, no clients are observing the resource /r , which has value "1234".</t>
      <t>The server S sends multicast notifications to the IP multicast address GRP_ADDR and port number GRP_PORT, and starts the group observation upon receiving a registration request from a first client that wishes to start a traditional observation on the resource /r.</t>
      <t>Pairwise communication over unicast is protected with OSCORE, while S protects multicast notifications with Group OSCORE. Specifically:</t>
      <ul spacing="normal">
        <li>C_1 and S have a pairwise OSCORE Security Context. In particular, C_1 has 'kid' = 0x01 as Sender ID, and SN_1 = 101 as Sender Sequence Number. Also, S has 'kid' = 0x03 as Sender ID, and SN_3 = 301 as Sender Sequence Number.</li>
        <li>C_2 and S have a pairwise OSCORE Security Context. In particular, C_2 has 'kid' = 0x02 as Sender ID, and SN_2 = 201 as Sender Sequence Number. Also, S has 'kid' = 0x04 as Sender ID, and SN_4 = 401 as Sender Sequence Number.</li>
        <li>S is a member of the OSCORE group with name "myGroup", and 'kid context' = 0x57ab2e as Group ID. In the OSCORE group, S has 'kid' = 0x05 as Sender ID, and SN_5 = 501 as Sender Sequence Number.</li>
      </ul>
      <t>The following notation is used for the payload of the informative responses:</t>
      <ul spacing="normal">
        <li>'bstr(X)' denotes a CBOR byte string with value the byte serialization of X, with '|' denoting byte concatenation.</li>
        <li>'OPT' denotes a sequence of CoAP options. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</li>
        <li>'PAYLOAD' denotes an encrypted CoAP payload. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</li>
        <li>'SIGN' denotes the signature appended to an encrypted CoAP payload. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</li>
      </ul>
      <figure anchor="example-oscore">
        <name>Example of group observation with Group OSCORE</name>
        <artwork><![CDATA[
C_1     ------------ [ Unicast w/ OSCORE ]  ------------------> S  /r
 |  0.05 (FETCH)                                                |
 |  Token: 0x4a                                                 |
 |  OSCORE: {kid: 0x01; piv: 101; ...}                          |
 |  <Other class U/I options>                                   |
 |  0xff                                                        |
 |  Encrypted_payload {                                         |
 |    0x01 (GET),                                               |
 |    Observe: 0 (Register),                                    |
 |    <Other class E options>                                   |
 |  }                                                           |
 |                                                              |
 |              (S allocates the available Token value 0x7b .)  |
 |                                                              |
 |      (S sends to itself a phantom observation request PH_REQ |
 |       as coming from the IP multicast address GRP_ADDR .)    |
 |     ------------------------------------------------------   |
 |    /                                                         |
 |    \-------------------------------------------------------> |  /r
 |                         0.05 (FETCH)                         |
 |                         Token: 0x7b                          |
 |                         OSCORE: {kid: 0x05 ; piv: 501;       |
 |                                  kid context: 0x57ab2e; ...} |
 |                         <Other class U/I options>            |
 |                         0xff                                 |
 |                         Encrypted_payload {                  |
 |                           0x01 (GET),                        |
 |                           Observe: 0 (Register),             |
 |                           <Other class E options>            |
 |                         }                                    |
 |                         <Signature>                          |
 |                                                              |
 |   (S steps SN_5 in the Group OSCORE Sec. Ctx : SN_5 <== 502) |
 |                                                              |
 |                     (S creates a group observation of /r .)  |
 |                                                              |
 |                          (S increments the observer counter  |
 |                           for the group observation of /r .) |
 |                                                              |
C_1 <--------------- [ Unicast w/ OSCORE ] ----------------     S
 |  2.05 (Content)                                              |
 |  Token: 0x4a                                                 |
 |  OSCORE: {piv: 301; ...}                                     |
 |  Max-Age: 0                                                  |
 |  <Other class U/I options>                                   |
 |  0xff                                                        |
 |  Encrypted_payload {                                         |
 |    5.03 (Service Unavailable),                               |
 |    Content-Format: application/informative-response+cbor,    |
 |    <Other class E options>,                                  |
 |    0xff,                                                     |
 |    CBOR_payload {                                            |
 |      tp_info    : [1, bstr(SRV_ADDR), SRV_PORT,              |
 |                    0x7b, bstr(GRP_ADDR), GRP_PORT],          |
 |      ph_req     : bstr(0x05 | OPT | 0xff | PAYLOAD | SIGN),  |
 |      last_notif : bstr(0x45 | OPT | 0xff | PAYLOAD | SIGN),  |
 |      join_uri   : "coap://myGM/ace-group/myGroup",           |
 |      sec_gp     : "myGroup"                                  |
 |    }                                                         |
 |  }                                                           |
 |                                                              |
C_2     ------------ [ Unicast w/ OSCORE ]  ------------------> S  /r
 |  0.05 (FETCH)                                                |
 |  Token: 0x01                                                 |
 |  OSCORE: {kid: 0x02; piv: 201; ...}                          |
 |  <Other class U/I options>                                   |
 |  0xff                                                        |
 |  Encrypted_payload {                                         |
 |    0x01 (GET),                                               |
 |    Observe: 0 (Register),                                    |
 |    <Other class E options>                                   |
 |  }                                                           |
 |                                                              |
 |                          (S increments the observer counter  |
 |                           for the group observation of /r .) |
 |                                                              |
C_2 <--------------- [ Unicast w/ OSCORE ] ----------------     S
 |  2.05 (Content)                                              |
 |  Token: 0x01                                                 |
 |  OSCORE: {piv: 401; ...}                                     |
 |  Max-Age: 0                                                  |
 |  <Other class U/I options>                                   |
 |  0xff,                                                       |
 |  Encrypted_payload {                                         |
 |    5.03 (Service Unavailable),                               |
 |    Content-Format: application/informative-response+cbor,    |
 |    <Other class E options>,                                  |
 |    0xff,                                                     |
 |    CBOR_payload {                                            |
 |      tp_info    : [1, bstr(SRV_ADDR), SRV_PORT,              |
 |                    0x7b, bstr(GRP_ADDR), GRP_PORT],          |
 |      ph_req     : bstr(0x05 | OPT | 0xff | PAYLOAD | SIGN),  |
 |      last_notif : bstr(0x45 | OPT | 0xff | PAYLOAD | SIGN),  |
 |      join_uri   : "coap://myGM/ace-group/myGroup",           |
 |      sec_gp     : "myGroup"                                  |
 |    }                                                         |
 |  }                                                           |
 |                                                              |
 |            (The value of the resource /r changes to "5678".) |
 |                                                              |
C_1                                                             |
 +  <----------- [ Multicast w/ Group OSCORE ] ------------     S
C_2       (Destination address/port: GRP_ADDR/GRP_PORT)         |
 |  2.05 (Content)                                              |
 |  Token: 0x7b                                                 |
 |  OSCORE: {kid: 0x05; piv: 502; ...}                          |
 |  <Other class U/I options>                                   |
 |  0xff                                                        |
 |  Encrypted_payload {                                         |
 |    2.05 (Content),                                           |
 |    Observe: [empty],                                         |
 |    Content-Format: application/cbor,                         |
 |    <Other class E options>,                                  |
 |    0xff,                                                     |
 |    CBOR_Payload: "5678"                                      |
 |  }                                                           |
 |  <Signature>                                                 |
 |                                                              |
]]></artwork>
      </figure>
      <t>The two external_aad used to encrypt and sign the multicast notification above have 'request_kid' = 5, 'request_piv' = 501 and 'request_kid_context' = 0x57ab2e. These values are specified in the 'kid', 'piv' and 'kid context' field of the OSCORE Option of the phantom observation request, which is encoded in the 'ph_req' parameter of the unicast informative response to the two clients. Thus, the two clients can build the two same external_aad for decrypting and verifying this multicast notification and the following ones.</t>
    </section>
    <section anchor="intermediaries">
      <name>Intermediaries</name>
      <t>This section specifies how the approach presented in <xref target="sec-server-side"/> and <xref target="sec-client-side"/> works when a proxy is used between the clients and the server. In addition to what specified in <xref section="5.7" sectionFormat="of" target="RFC7252"/> and <xref section="5" sectionFormat="of" target="RFC7641"/>, the following applies.</t>
      <t>A client sends its original observation request to the proxy. If the proxy is not already registered at the server for that target resource, the proxy forwards the observation request to the server, hence registering itself as an observer. If the server has an ongoing group observation for the target resource or decides to start one, the server considers the proxy as taking part in the group observation, and replies to the proxy with an informative response.</t>
      <t>Upon receiving an informative response, the proxy performs as specified for the client in <xref target="sec-client-side"/>, with the peculiarity that "consuming" the last notification (if present) means populating its cache.</t>
      <t>In particular, by using the information retrieved from the informative response, the proxy configures an observation of the target resource at the origin server, acting as a client directly taking part in the group observation.</t>
      <t>As a consequence, the proxy will listen to the IP multicast address and port number indicated by the server in the informative response, as 'cli_host' and 'cli_port' element of 'req_info' under the 'tp_info' parameter, respectively (see <xref target="ssssec-udp-transport-specific"/>). Furthermore, multicast notifications will match the phantom request stored at the proxy, based on the Token value specified in the 'token' element of 'req_info' under the 'tp_info' parameter in the informative response.</t>
      <t>Then, the proxy performs the following actions.</t>
      <ul spacing="normal">
        <li>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 it has not already done so).</li>
        <li>If the 'last_notif' field is present, the proxy rebuilds the latest multicast notification, as defined in <xref target="sec-client-side"/>. Then, the proxy responds to the client, by forwarding back the latest multicast notification.</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>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 listens to an IP multicast address to receive notifications for the group observation. Furthermore, every proxy in the chain takes the role of server with the (previous hop towards the) origin client.</t>
    </section>
    <section anchor="intermediaries-e2e-security">
      <name>Intermediaries Together with End-to-End Security</name>
      <t>As defined in <xref target="sec-secured-notifications"/>, Group OSCORE can be used to protect multicast notifications end-to-end between the origin server and the clients. In such a case, additional actions are required when also the informative responses from the origin server are protected specifically end-to-end, by using OSCORE or Group OSCORE.</t>
      <t>In fact, the proxy adjacent to the origin server is not able to access the encrypted payload of such informative responses. Hence, the proxy cannot retrieve the 'ph_req' and 'tp_info' parameters necessary to correctly receive multicast notifications and forward them back to the clients.</t>
      <t>Then, differently from what defined in <xref target="intermediaries"/>, each proxy receiving an informative response simply forwards it back to the client that has sent the corresponding observation request. Note that the proxy does not even realize the message to be an actual informative response, since the outer Code field is set to 2.05 (Content).</t>
      <t>Upon receiving the informative response, the client does not configure an observation of the target resource. Instead, the client performs a new observe registration request, by transmitting the re-built phantom request as intended to reach the proxy adjacent to the origin server. In particular, the client includes the new Listen-To-Multicast-Responses CoAP option defined in <xref target="ltmr-option"/>, to provide that proxy with the transport-specific information required for receiving multicast notifications for the group observation.</t>
      <t>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 MUST 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-Responses and is intended only for requests. As summarized in <xref target="ltmr-table"/>, the option is critical and not Safe-to-Forward. Since the option is not Safe-to-Forward, the column "N" indicates a dash for "not applicable".</t>
        <figure anchor="ltmr-table">
          <name>Listen-To-Multicast-Responses</name>
          <artwork align="center"><![CDATA[
+-----+---+---+---+---+-------------------+--------+--------+---------+
| No. | C | U | N | R | Name              | Format | Len.   | Default |
+-----+---+---+---+---+-------------------+--------+--------+---------+
| TBD | x | x | - |   | Listen-To-        |  (*)   | 3-1024 | (none)  |
|     |   |   |   |   | Multicast-        |        |        |         |
|     |   |   |   |   | Responses         |        |        |         |
+-----+---+---+---+---+-------------------+--------+--------+---------+

      C = Critical, U = Unsafe, N = NoCacheKey, R = Repeatable
      (*) See below.
]]></artwork>
        </figure>
        <t>The Listen-To-Multicast-Responses Option includes the serialization of a CBOR array. This specifies transport-specific message information required for listening to the multicast notifications of a group observation, and intended to the proxy adjacent to the origin server sending those notifications. In particular, the serialized CBOR array has the same format specified in <xref target="sssec-transport-specific-encoding"/> for the 'tp_info' parameter of the informative response (see <xref target="ssec-server-side-informative"/>).</t>
        <t>The Listen-To-Multicast-Responses Option is of class U for OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      </section>
      <section anchor="intermediaries-e2e-security-processing">
        <name>Message Processing</name>
        <t>Compared to <xref target="intermediaries"/>, the following additions apply when informative responses are protected end-to-end between the origin server and the clients.</t>
        <t>After the origin server sends an informative response, each proxy simply forwards it back to the (previous hop towards the) origin client that has sent the observation request.</t>
        <t>Once received the informative response, the origin client proceeds in a different way than in <xref target="ssec-client-side-informative-oscore"/>:</t>
        <ul spacing="normal">
          <li>The client performs all the additional decryption and verification steps of <xref target="ssec-client-side-informative-oscore"/> on the phantom request specified in the 'ph_req' parameter and on the last notification specified in the 'last_notif' parameter (if present).</li>
          <li>
            <t>The client builds a ticket request (see Appendix B of <xref target="I-D.amsuess-core-cachable-oscore"/>), as intended to reach the proxy adjacent to the origin server. The ticket request is formatted as follows.  </t>
            <ul spacing="normal">
              <li>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.</li>
              <li>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.</li>
              <li>An outer Observe Option is included and set to 0 (Register). This will usually be set in the phantom request already.</li>
              <li>The outer options Proxy-Scheme, Uri-Host and Uri-Port are included, and set to the same values they had in the original registration request sent by the client.</li>
              <li>
                <t>The new option Listen-To-Multicast-Responses is included as an outer option. The value is set to the 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 to 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>The proxy MUST NOT further forward the ticket request to the origin server.</li>
          <li>The proxy removes the Proxy-Scheme, Uri-Host and Uri-Port Options from the ticket request.</li>
          <li>The proxy removes the Listen-To-Multicast-Responses Option from the ticket request, and extracts the conveyed transport-specific information.</li>
          <li>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.</li>
          <li>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.</li>
        </ul>
        <t>After that, the proxy will listen to the IP multicast address and port number indicated in the Listen-To-Multicast-Responses Option, as 'cli_host' and 'cli_port' element of the serialized CBOR array, respectively. Furthermore, multicast notifications will match the phantom request stored at the proxy, based on the Token value specified in the 'token' element of the serialized CBOR array in the Listen-To-Multicast-Responses Option.</t>
        <t>An example is provided in <xref target="intermediaries-example-e2e-security"/>.</t>
      </section>
    </section>
    <section anchor="informative-response-params">
      <name>Informative Response Parameters</name>
      <t>This document defines a number of fields used in the informative response defined in <xref target="ssec-server-side-informative"/>.</t>
      <t>The table below summarizes them and specifies the CBOR key to use instead of the full descriptive name. Note that the media type application/informative-response+cbor MUST be used when these fields are transported.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">CBOR Key</th>
            <th align="left">CBOR Type</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">tp_info</td>
            <td align="left">0</td>
            <td align="left">array</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/></td>
          </tr>
          <tr>
            <td align="left">ph_req</td>
            <td align="left">1</td>
            <td align="left">bstr</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/></td>
          </tr>
          <tr>
            <td align="left">last_notif</td>
            <td align="left">2</td>
            <td align="left">bstr</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/></td>
          </tr>
          <tr>
            <td align="left">next_not_before</td>
            <td align="left">3</td>
            <td align="left">uint</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/></td>
          </tr>
          <tr>
            <td align="left">join_uri</td>
            <td align="left">4</td>
            <td align="left">tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">sec_gp</td>
            <td align="left">5</td>
            <td align="left">tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">as_uri</td>
            <td align="left">6</td>
            <td align="left">tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">hkdf</td>
            <td align="left">7</td>
            <td align="left">int / tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">cred_fmt</td>
            <td align="left">8</td>
            <td align="left">int</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">sign_enc_alg</td>
            <td align="left">9</td>
            <td align="left">int / tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">sign_alg</td>
            <td align="left">10</td>
            <td align="left">int / tstr</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">sign_params</td>
            <td align="left">11</td>
            <td align="left">array</td>
            <td align="left">
              <xref target="sec-inf-response"/></td>
          </tr>
          <tr>
            <td align="left">gp_material</td>
            <td align="left">12</td>
            <td align="left">map</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">srv_cred</td>
            <td align="left">13</td>
            <td align="left">bstr</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">srv_identifier</td>
            <td align="left">14</td>
            <td align="left">bstr</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
          <tr>
            <td align="left">exp</td>
            <td align="left">15</td>
            <td align="left">uint</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="transport-protocol-identifiers">
      <name>Transport Protocol Information</name>
      <t>This document defines some values of transport protocol identifiers to use within the 'tp_info' parameter of the informative response defined in <xref target="ssec-server-side-informative"/>.</t>
      <t>According to the encoding specified in <xref target="sssec-transport-specific-encoding"/>, these values are used for the 'tp_id' element of 'srv_addr', under the 'tp_info' parameter.</t>
      <t>The table below summarizes them, specifies the integer value to use instead of the full descriptive name, and provides the corresponding comprehensive set of information elements to include in the 'tp_info' parameter.</t>
      <t>Note to RFC Editor: Please replace in the table below all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <figure anchor="values_tp_id">
        <name>Transport protocol information</name>
        <artwork><![CDATA[
+-----------+-------------+-------+----------+-----------+------------+
| Transport | Description | Value | Srv Addr | Req Info  | Reference  |
| Protocol  |             |       |          |           |            |
+-----------+-------------+-------+----------+-----------+------------+
| Reserved  | This value  | 0     |          |           | [RFC-XXXX] |
|           | is reserved |       |          |           |            |
|           |             |       |          |           |            |
| UDP       | UDP is used | 1     | tp_id    |  token    | [RFC-XXXX] |
|           | as per      |       | srv_host |  cli_host |            |
|           | RFC7252     |       | srv_port | ?cli_port |            |
+-----------+-------------+-------+----------+-----------+------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>In addition to the security considerations from <xref target="RFC7252"/><xref target="RFC7641"/><xref target="I-D.ietf-core-groupcomm-bis"/><xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>, the following considerations hold for this document.</t>
      <section anchor="unsecured-multicast-notifications">
        <name>Unsecured Multicast Notifications</name>
        <t>In case communications are not protected, the server might not be able to effectively authenticate a new client when it registers as an observer. <xref section="7" sectionFormat="of" target="RFC7641"/> specifies how, in such a case, the server must strictly limit the number of notifications sent between receiving acknowledgements from the client, as confirming to be still interested in the observation; i.e., any notifications sent in Non-confirmable messages must be interspersed with confirmable messages.</t>
        <t>This is not possible to achieve by the same means when using the communication model defined in this document, since multicast notifications are sent as Non-confirmable messages. Nonetheless, the server might obtain such acknowledgements by other means.</t>
        <t>For instance, the method defined in <xref target="sec-rough-counting"/> to perform the rough counting of still interested clients triggers (some of) them to explicitly send a new observation request to acknowledge their interest. Then, the server can decide to terminate the group observation altogether, in case not enough clients are estimated to be still active. If the method defined in <xref target="sec-rough-counting"/> is used, the server SHOULD NOT send more than a strict number of multicast notifications for a given group observation, without having first performed a new rough counting of active clients.</t>
      </section>
      <section anchor="secured-multicast-notifications">
        <name>Secured Multicast Notifications</name>
        <t>If multicast notifications are protected using Group OSCORE as per <xref target="sec-secured-notifications"/>, the following applies.</t>
        <ul spacing="normal">
          <li>The original registration requests and related unicast (notification) responses MUST also be secured, including and especially the informative responses from the server. This prevents on-path active adversaries from altering the conveyed IP multicast address and serialized phantom registration request. Thus, it ensures secure binding between every multicast notification for a same observed resource and the phantom registration request that started the group observation of that resource.</li>
          <li>A re-registration request, possibly including the Multicast-Response-Feedback-Divider Option to support the rough counting of clients (see <xref target="sec-rough-counting"/>), MUST also be secured.</li>
        </ul>
        <t>To this end, clients and servers SHOULD use OSCORE or Group OSCORE, so ensuring that the secure binding above is enforced end-to-end between the server and each observing client.</t>
      </section>
      <section anchor="sec-security-considerations-ltmr">
        <name>Listen-To-Multicast-Responses Option</name>
        <t>The CoAP option Listen-To-Multicast-Responses defined in <xref target="ltmr-option"/> is of class U for OSCORE and Group OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
        <t>This allows the proxy adjacent to the origin server to access the option value conveyed in a ticket request (see <xref target="intermediaries-e2e-security-processing"/>), and to retrieve from it the transport-specific information about a phantom request. By doing so, the proxy becomes able to configure an observation of the target resource and to receive multicast notifications matching to the phantom request.</t>
        <t>Any proxy in the chain, as well as further possible intermediaries or on-path active adversaries, are thus able to remove the option or alter its content, before the ticket request reaches the proxy adjacent to the origin server.</t>
        <t>Removing the option would result in the proxy adjacent to the origin server to not configure the group observation, if that has not happened yet. In such a case, the proxy would not receive the corresponding multicast notifications to be forwarded back to the clients.</t>
        <t>Altering the option content would result in the proxy adjacent to the origin server to incorrectly configure a group observation (e.g., by indicating a wrong multicast IP address) hence preventing the correct reception of multicast notifications and their forwarding to the clients; or to configure bogus group observations that are currently not active on the origin server.</t>
        <t>In order to prevent what is described above, the ticket requests conveying the Listen-To-Multicast-Responses Option can be additionally protected hop-by-hop. This can be achieved by the client protecting the ticket request sent to the proxy using OSCORE (see <xref target="I-D.tiloca-core-oscore-capable-proxies"/>) and/or DTLS <xref target="RFC9147"/>.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="media-type">
        <name>Media Type Registrations</name>
        <t>This document registers the media type 'application/informative-response+cbor' for error messages as informative response defined in <xref target="ssec-server-side-informative"/>, when carrying parameters encoded in CBOR. This registration follows the procedures specified in <xref target="RFC6838"/>.</t>
        <ul spacing="normal">
          <li>Type name: application</li>
          <li>Subtype name: informative-response+cbor</li>
          <li>Required parameters: N/A</li>
          <li>Optional parameters: N/A</li>
          <li>Encoding considerations: Must be encoded as a CBOR map containing the parameters defined in <xref target="ssec-server-side-informative"/> of [RFC-XXXX].</li>
          <li>Security considerations: See <xref target="sec-security-considerations"/> of [RFC-XXXX].</li>
          <li>Interoperability considerations: N/A</li>
          <li>Published specification: [RFC-XXXX]</li>
          <li>Applications that use this media type: The type is used by CoAP servers and clients that support error messages as informative response defined in <xref target="ssec-server-side-informative"/> of [RFC-XXXX].</li>
          <li>Fragment identifier considerations: N/A</li>
          <li>Additional information: N/A</li>
          <li>Person &amp; email address to contact for further information: <eref target="mailto:iesg@ietf.org">iesg@ietf.org</eref></li>
          <li>Intended usage: COMMON</li>
          <li>Restrictions on usage: None</li>
          <li>Author: Marco Tiloca <eref target="mailto:marco.tiloca@ri.se">marco.tiloca@ri.se</eref></li>
          <li>Change controller: IESG</li>
          <li>Provisional registration?  No</li>
        </ul>
      </section>
      <section anchor="content-format">
        <name>CoAP Content-Formats Registry</name>
        <t>IANA is asked to add the following entry to the "CoAP Content-Formats" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <t>Media Type: application/informative-response+cbor</t>
        <t>Encoding: -</t>
        <t>ID: TBD</t>
        <t>Reference: [RFC-XXXX]</t>
      </section>
      <section anchor="iana-coap-options">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to enter the following option numbers to the "CoAP Option Numbers" registry within the "CoRE Parameters" registry group.</t>
        <artwork align="center"><![CDATA[
+--------+--------------------------------------+------------+
| Number |                 Name                 | Reference  |
+--------+--------------------------------------+------------+
|  TBD   |  Multicast-Response-Feedback-Divider | [RFC-XXXX] |
+--------+--------------------------------------+------------+
|  TBD   |  Listen-To-Multicast-Responses       | [RFC-XXXX] |
+--------+--------------------------------------+------------+
]]></artwork>
      </section>
      <section anchor="iana-informative-response-params">
        <name>Informative Response Parameters Registry</name>
        <t>This document establishes the "Informative Response Parameters" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group. The registry has been created to use the "Expert Review" registration procedure <xref target="RFC8126"/>. Expert review guidelines are provided in <xref target="iana-review"/>.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>Name: This is a descriptive name that enables easier reference to the item. The name MUST be unique. It is not used in the encoding.</li>
          <li>CBOR Key: This is the value used as CBOR key of the item. These values MUST be unique. The value can be a positive integer, a negative integer, or a string.</li>
          <li>CBOR Type: This contains the CBOR type of the item, or a pointer to the registry that defines its type, when that depends on another item.</li>
          <li>Reference: This contains a pointer to the public specification for the item.</li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="informative-response-params"/>. The "Reference" column for all of these entries refers to sections of this document.</t>
      </section>
      <section anchor="iana-transport-protocol-identifiers">
        <name>CoAP Transport Information Registry</name>
        <t>This document establishes the "CoAP Transport Information" registry within the "CoRE Parameters" registry group. The registry has been created to use the "Expert Review" registration procedure <xref target="RFC8126"/>. Expert review guidelines are provided in <xref target="iana-review"/>. It should be noted that, in addition to the expert review, some portions of the Registry require a specification, potentially a Standards Track RFC, to be supplied as well.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>Transport Protocol: This is a descriptive name that enables easier reference to the item. The name MUST be unique. It is not used in the encoding.</li>
          <li>Description: Text giving an overview of the transport protocol referred by this item.</li>
          <li>Value: CBOR abbreviation for the transport protocol referred by this item. Different ranges of values use different registration policies <xref target="RFC8126"/>. Integer values from -256 to 255 are designated as "Standards Action With Expert Review". Integer values from -65536 to -257 and from 256 to 65535 are designated as "Specification Required". Integer values greater than 65535 are designated as "Expert Review". Integer values less than -65536 are marked as Private Use.</li>
          <li>Server Addr: List of elements providing addressing information of the server.</li>
          <li>Req Info: List of elements providing transport-specific information related to a pertinent CoAP request. Optional elements are prepended by '?'.</li>
          <li>Reference: This contains a pointer to the public specification for the item.</li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="transport-protocol-identifiers"/>. The "Reference" column for all of these entries refers to sections of this document.</t>
      </section>
      <section anchor="iana-target-attributes">
        <name>Target Attributes Registry</name>
        <t>IANA is asked to register the following entry in the "Target Attributes" registry within the "CoRE Parameters" registry group.</t>
        <artwork><![CDATA[
Attribute Name: gp-obs
Brief Description: Observable resource supporting group observation
Change Controller: IESG
Reference: Section 6 of [RFC-XXXX]
]]></artwork>
      </section>
      <section anchor="iana-review">
        <name>Expert Review Instructions</name>
        <t>The IANA registries established in this document are defined as Expert Review.
This section gives some general guidelines for what the experts should be looking for, but they are being designated as experts for a reason so they should be given substantial latitude.</t>
        <t>Expert reviewers should take into consideration the following points:</t>
        <ul spacing="normal">
          <li>Point squatting should be discouraged. Reviewers are encouraged to get sufficient information for registration requests to ensure that the usage is not going to duplicate one that is already registered and that the point is likely to be used in deployments. The zones tagged as private use are intended for testing purposes and closed environments, code points in other ranges should not be assigned for testing.</li>
          <li>Specifications are required for the standards track range of point assignment. Specifications should exist for specification required ranges, but early assignment before a specification is available is considered to be permissible. Specifications are needed for the first-come, first-serve range if they are expected to be used outside of closed environments in an interoperable way. When specifications are not provided, the description provided needs to have sufficient information to identify what the point is being used for.</li>
          <li>Experts should take into account the expected usage of fields when approving point assignment. The fact that there is a range for standards track documents does not mean that a standards track document cannot have points assigned outside of that range. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size.</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.ietf-core-groupcomm-bis">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Chonggang Wang" initials="C." surname="Wang">
              <organization>InterDigital</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="11" month="January" year="2023"/>
            <abstract>
              <t>   This document specifies the use of the Constrained Application
   Protocol (CoAP) for group communication, including the use of UDP/IP
   multicast as the default underlying data transport.  Both unsecured
   and secured CoAP group communication are specified.  Security is
   achieved by use of the Group Object Security for Constrained RESTful
   Environments (Group OSCORE) protocol.  The target application area of
   this specification is any group communication use cases that involve
   resource-constrained devices or networks that support CoAP.  This
   document replaces RFC 7390, while it updates RFC 7252 and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-08"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm">
          <front>
            <title>Group OSCORE - Secure Group Communication for CoAP</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="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <date day="20" month="December" year="2022"/>
            <abstract>
              <t>   This document defines Group Object Security for Constrained RESTful
   Environments (Group OSCORE), providing end-to-end security of CoAP
   messages exchanged between members of a group, e.g., sent over IP
   multicast.  In particular, the described approach defines how OSCORE
   is used in a group communication setting to provide source
   authentication for CoAP group requests, sent by a client to multiple
   servers, and for protection of the corresponding CoAP responses.
   Group OSCORE also defines a pairwise mode where each member of the
   group can efficiently derive a symmetric pairwise key with any other
   member of the group for pairwise OSCORE communication.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-16"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC4944">
          <front>
            <title>Transmission of IPv6 Packets over IEEE 802.15.4 Networks</title>
            <author fullname="G. Montenegro" initials="G." surname="Montenegro">
              <organization/>
            </author>
            <author fullname="N. Kushalnagar" initials="N." surname="Kushalnagar">
              <organization/>
            </author>
            <author fullname="J. Hui" initials="J." surname="Hui">
              <organization/>
            </author>
            <author fullname="D. Culler" initials="D." surname="Culler">
              <organization/>
            </author>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document describes the frame format for transmission of IPv6 packets and the method of forming IPv6 link-local addresses and statelessly autoconfigured addresses on IEEE 802.15.4 networks. Additional specifications include a simple header compression scheme using shared context and provisions for packet delivery in IEEE 802.15.4 meshes.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4944"/>
          <seriesInfo name="DOI" value="10.17487/RFC4944"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed">
              <organization/>
            </author>
            <author fullname="J. Klensin" initials="J." surname="Klensin">
              <organization/>
            </author>
            <author fullname="T. Hansen" initials="T." surname="Hansen">
              <organization/>
            </author>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols.  This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC7967">
          <front>
            <title>Constrained Application Protocol (CoAP) Option for No Server Response</title>
            <author fullname="A. Bhattacharyya" initials="A." surname="Bhattacharyya">
              <organization/>
            </author>
            <author fullname="S. Bandyopadhyay" initials="S." surname="Bandyopadhyay">
              <organization/>
            </author>
            <author fullname="A. Pal" initials="A." surname="Pal">
              <organization/>
            </author>
            <author fullname="T. Bose" initials="T." surname="Bose">
              <organization/>
            </author>
            <date month="August" year="2016"/>
            <abstract>
              <t>There can be machine-to-machine (M2M) scenarios where server responses to client requests are redundant.  This kind of open-loop exchange (with no response path from the server to the client) may be desired to minimize resource consumption in constrained systems while updating many resources simultaneously or performing high-frequency updates. CoAP already provides Non-confirmable (NON) messages that are not acknowledged by the recipient.  However, the request/response semantics still require the server to respond with a status code indicating "the result of the attempt to       understand and satisfy the request", per RFC 7252.</t>
              <t>This specification introduces a CoAP option called 'No-Response'. Using this option, the client can explicitly express to the server its disinterest in all responses against the particular request. This option also provides granular control to enable expression of disinterest to a particular response class or a combination of response classes.  The server MAY decide to suppress the response by not transmitting it back to the client according to the value of the No-Response option in the request.  This option may be effective for both unicast and multicast requests.  This document also discusses a few examples of applications that benefit from this option.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7967"/>
          <seriesInfo name="DOI" value="10.17487/RFC7967"/>
        </reference>
        <reference anchor="RFC8085">
          <front>
            <title>UDP Usage Guidelines</title>
            <author fullname="L. Eggert" initials="L." surname="Eggert">
              <organization/>
            </author>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst">
              <organization/>
            </author>
            <author fullname="G. Shepherd" initials="G." surname="Shepherd">
              <organization/>
            </author>
            <date month="March" year="2017"/>
            <abstract>
              <t>The User Datagram Protocol (UDP) provides a minimal message-passing transport that has no inherent congestion control mechanisms.  This document provides guidelines on the use of UDP for the designers of applications, tunnels, and other protocols that use UDP.  Congestion control guidelines are a primary focus, but the document also provides guidance on other topics, including message sizes, reliability, checksums, middlebox traversal, the use of Explicit Congestion Notification (ECN), Differentiated Services Code Points (DSCPs), and ports.</t>
              <t>Because congestion control is critical to the stable operation of the Internet, applications and other protocols that choose to use UDP as an Internet transport must employ mechanisms to prevent congestion collapse and to establish some degree of fairness with concurrent traffic.  They may also need to implement additional mechanisms, depending on how they use UDP.</t>
              <t>Some guidance is also applicable to the design of other protocols (e.g., protocols layered directly on IP or via IP-based tunnels), especially when these protocols do not themselves provide congestion control.</t>
              <t>This document obsoletes RFC 5405 and adds guidelines for multicast UDP usage.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="145"/>
          <seriesInfo name="RFC" value="8085"/>
          <seriesInfo name="DOI" value="10.17487/RFC8085"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton">
              <organization/>
            </author>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <author fullname="T. Narten" initials="T." surname="Narten">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson">
              <organization/>
            </author>
            <author fullname="F. Palombini" initials="F." surname="Palombini">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049.  It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9203">
          <front>
            <title>The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework.  It utilizes Object Security for Constrained RESTful Environments (OSCORE) to provide communication security and proof-of-possession for a key owned by the client and bound to an OAuth 2.0 access token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9203"/>
          <seriesInfo name="DOI" value="10.17487/RFC9203"/>
        </reference>
        <reference anchor="COSE.Algorithms" target="https://www.iana.org/assignments/cose/cose.xhtml#algorithms">
          <front>
            <title>COSE Algorithms</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="COSE.Key.Types" target="https://www.iana.org/assignments/cose/cose.xhtml#key-type">
          <front>
            <title>COSE Key Types</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="COSE.Header.Parameters" target="https://www.iana.org/assignments/cose/cose.xhtml#header-parameters">
          <front>
            <title>COSE Header Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-core-coap-pubsub">
          <front>
            <title>A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>Unaffiliated</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Jaime Jimenez" initials="J." surname="Jimenez">
              <organization>Ericsson</organization>
            </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   This document describes a publish-subscribe architecture for CoAP
   that extends the capabilities of CoAP for supporting nodes with long
   breaks in connectivity and/or up-time.  The Constrained Application
   Protocol (CoAP) is used by CoAP clients both to publish and to
   subscribe via a known topic resource.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-oscore-discovery-13"/>
        </reference>
        <reference anchor="I-D.ietf-core-coral">
          <front>
            <title>The Constrained RESTful Application Language (CoRAL)</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>ARM</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   The Constrained RESTful Application Language (CoRAL) defines a data
   model and interaction model as well as a compact serialization
   formats for the description of typed connections between resources on
   the Web ("links"), possible operations on such resources ("forms"),
   and simple resource metadata.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-core-cachable-oscore-06"/>
        </reference>
        <reference anchor="I-D.ietf-cose-cbor-encoded-cert">
          <front>
            <title>CBOR Encoded X.509 Certificates (C509 Certificates)</title>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Shahid Raza" initials="S." surname="Raza">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Joel Höglund" initials="J." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Martin Furuhed" initials="M." surname="Furuhed">
              <organization>Nexus Group</organization>
            </author>
            <date day="10" month="January" year="2023"/>
            <abstract>
              <t>   This document specifies a CBOR encoding of X.509 certificates.  The
   resulting certificates are called C509 Certificates.  The CBOR
   encoding supports a large subset of RFC 5280 and all certificates
   compatible with the RFC 7925, IEEE 802.1AR (DevID), CNSA, RPKI, GSMA
   eUICC, and CA/Browser Forum Baseline Requirements profiles.  When
   used to re-encode DER encoded X.509 certificates, the CBOR encoding
   can in many cases reduce the size of RFC 7925 profiled certificates
   with over 50%.  The CBOR encoded structure can alternatively be
   signed directly ("natively signed"), which does not require re-
   encoding for the signature to be verified.  The document also
   specifies C509 COSE headers, a C509 TLS certificate type, and a C509
   file format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cbor-encoded-cert-05"/>
        </reference>
        <reference anchor="I-D.tiloca-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="5" month="April" year="2023"/>
            <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 how to
   secure a CoAP message by applying multiple, nested OSCORE
   protections, e.g., both end-to-end between origin application
   endpoints, as well as between an application endpoint and an
   intermediary or between two intermediaries.  Thus, this document
   updates RFC 8613.  The same approach can be seamlessly used with
   Group OSCORE, for protecting CoAP messages when group communication
   with intermediaries is used.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-oscore-capable-proxies-06"/>
        </reference>
        <reference anchor="RFC6690">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links.  Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type.  "RESTful" refers to the Representational State Transfer (REST) architecture.  A well-known URI is defined as a default entry point for requesting the links hosted by a server.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <author fullname="J. Bradley" initials="J." surname="Bradley">
              <organization/>
            </author>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties.  The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC7925">
          <front>
            <title>Transport Layer Security (TLS) / Datagram Transport Layer Security (DTLS) Profiles for the Internet of Things</title>
            <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="T. Fossati" initials="T." surname="Fossati">
              <organization/>
            </author>
            <date month="July" year="2016"/>
            <abstract>
              <t>A common design pattern in Internet of Things (IoT) deployments is the use of a constrained device that collects data via sensors or controls actuators for use in home automation, industrial control systems, smart cities, and other IoT deployments.</t>
              <t>This document defines a Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) 1.2 profile that offers communications security for this data exchange thereby preventing eavesdropping, tampering, and message forgery.  The lack of communication security is a common vulnerability in IoT products that can easily be solved by using these well-researched and widely deployed Internet security protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7925"/>
          <seriesInfo name="DOI" value="10.17487/RFC7925"/>
        </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">
              <organization/>
            </author>
            <author fullname="C. Vigano" initials="C." surname="Vigano">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <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="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem">
              <organization/>
            </author>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties.  The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection.  A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value.  CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu">
              <organization/>
            </author>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC9176">
          <front>
            <title>Constrained RESTful Environments (CoRE) Resource Directory</title>
            <author fullname="C. Amsüss" initials="C." role="editor" surname="Amsüss">
              <organization/>
            </author>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="M. Koster" initials="M." surname="Koster">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok">
              <organization/>
            </author>
            <date month="April" year="2022"/>
            <abstract>
              <t>In many Internet of Things (IoT) applications, direct discovery of resources is not practical due to sleeping nodes or networks where multicast traffic is inefficient. These problems can be solved by employing an entity called a Resource Directory (RD), which contains information about resources held on other servers, allowing lookups to be performed for those resources. The input to an RD is composed of links, and the output is composed of links constructed from the information stored in the RD. This document specifies the web interfaces that an RD supports for web servers to discover the RD and to register, maintain, look up, and remove information on resources. Furthermore, new target attributes useful in conjunction with an RD are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9176"/>
          <seriesInfo name="DOI" value="10.17487/RFC9176"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem">
              <organization/>
            </author>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices.  Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="MOBICOM99" target="https://people.eecs.berkeley.edu/~culler/cs294-f03/papers/bcast-storm.pdf">
          <front>
            <title>The Broadcast Storm Problem in a Mobile Ad Hoc Network</title>
            <author initials="S." surname="Ni" fullname="Sze-Yao Ni">
              <organization/>
            </author>
            <author initials="Y." surname="Tseng" fullname="Yu-Chee Tseng">
              <organization/>
            </author>
            <author initials="Y." surname="Chen" fullname="Yuh-Shyan Chen">
              <organization/>
            </author>
            <author initials="J." surname="Sheu" fullname="Jang-Ping Sheu">
              <organization/>
            </author>
            <date year="1999" month="August"/>
          </front>
          <seriesInfo name="Proceedings of the 5th annual ACM/IEEE international conference on Mobile computing and networking" value=""/>
        </reference>
        <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="6" month="March" year="2023"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that serializes the URI components
   in Concise Binary Object Representation (CBOR) instead of a sequence
   of characters.  This simplifies parsing, comparison and reference
   resolution in environments with severe limitations on processing
   power, code size, and memory size.


   // The present revision -12 of this draft adds a registry that is
   // intended to provide full coverage for representing a URI scheme
   // (and certain text strings used in their place) as negative
   // integers.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-12"/>
        </reference>
      </references>
    </references>
    <section anchor="appendix-different-sources">
      <name>Different Sources for Group Observation Data</name>
      <t>While the clients usually receive the phantom registration request and other information related to the group observation through an informative response (see <xref target="ssec-server-side-informative"/>), the server can make the same data available through different means, such as the following ones.</t>
      <t>In such a case, the server has to first start the group observation (see <xref target="ssec-server-side-request"/>), before making the corresponding data available.</t>
      <section anchor="topic-discovery-in-publish-subscribe-settings">
        <name>Topic Discovery in Publish-Subscribe Settings</name>
        <t>In a Publish-Subscribe scenario <xref target="I-D.ietf-core-coap-pubsub"/>, a group observation can be discovered along with topic metadata.</t>
        <t>To this end, together with topic metadata, the server has to publish the same information associated with the group observation that would be conveyed in the informative response returned to observer clients (see <xref target="ssec-server-side-informative"/>).</t>
        <t>This information especially includes the phantom observation request associated with the group observation, as well as the addressing information of the server and the addressing information where multicast notifications are sent to.</t>
        <t><xref target="discovery-pub-sub"/> provides an example where a group observation is discovered. The example assumes a CoRAL namespace <xref target="I-D.ietf-core-coral"/>, that contains properties analogous to those in the content-format application/informative-response+cbor.</t>
        <t>Note that the information about the transport protocol used for the group observation is not expressed through a dedicated element equivalent to 'tp_id' of the informative response (see <xref target="sssec-transport-specific-encoding"/>). Rather, it is expressed through the scheme component of the two URIs specified as 'tp_info_srv' and 'tp_info_cli', where the former specifies the addressing information of the server (like 'srv_host' and 'srv_port' in <xref target="ssssec-udp-transport-specific"/>), while the latter specifies the addressing information where multicast notifications are sent to (like 'cli_host' and 'cli_port' in <xref target="ssssec-udp-transport-specific"/>).</t>
        <figure anchor="discovery-pub-sub">
          <name>Group observation discovery in a Pub-Sub scenario</name>
          <artwork><![CDATA[
Request:

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

Response:

    2.05 Content
    Content-Format: application/coral+cbor

    rdf:type [ = <http://example.org/pubsub/topic-list>,
           topic [ = </ps/topics/1234>,
               tp_info_srv <coap://[2001:db8::1]>,
               tp_info_token "7b"^^xsd::hexBinary,
               tp_info_cli <coap://[ff35:30:2001:db8::123]>,
               ph_req "0160.."^^xsd::hexBinary,
               last_notif "256105.."^^xsd::hexBinary,
           ]
    ]
]]></artwork>
        </figure>
        <t>With this information from the topic discovery step, the client can already set up its multicast address and start receiving multicast notifications for the group observation in question. Clients that are not directly able to listen to multicast notifications can instead rely on a proxy to do so on their behalf (see <xref target="intermediaries"/> and <xref target="intermediaries-e2e-security"/>).</t>
        <t>In heavily asymmetric networks like municipal notification services, discovery and notifications do not necessarily need to use the same network link. For example, a departure monitor could use its (costly and usually-off) cellular uplink to discover the topics it needs to update its display to, and then listen on a LoRA-WAN interface for receiving the actual multicast notifications.</t>
      </section>
      <section anchor="introspection-at-the-multicast-notification-sender">
        <name>Introspection at the Multicast Notification Sender</name>
        <t>For network debugging purposes, it can be useful to query a server that sends multicast responses as matching a phantom registration request.</t>
        <t>Such an interface is left for other documents to specify on demand. As an example, a possible interface can be as follows, and rely on the already known Token value of intercepted multicast notifications, associated with a phantom registration request.</t>
        <figure anchor="discovery-introspection">
          <name>Group observation discovery with server introspection</name>
          <artwork><![CDATA[
Request:

    GET </.well-known/core/mc-sender?token=6464>

Response:

    2.05 Content
    Content-Format: application/informative-response+cbor

    {
        'tp_info': [1, h"7b", h"20010db80100..0001", 5683,
                    h"ff35003020010db8..1234", 5683],
        'ph_req': h"0160..",
        'last_notif' : h"256105.."
    }
]]></artwork>
        </figure>
        <t>For example, a network sniffer could offer sending such a request when unknown multicast notifications are seen in a network. Consequently, it can associate those notifications with a URI, or decrypt them, if member of the correct OSCORE group.</t>
      </section>
    </section>
    <section anchor="appendix-pseudo-code-counting">
      <name>Pseudo-Code for Rough Counting of Clients</name>
      <t>This appendix provides a description in pseudo-code of the two algorithms used for the rough counting of active observers, as defined in <xref target="sec-rough-counting"/>.</t>
      <t>In particular, <xref target="appendix-pseudo-code-counting-client"/> describes the algorithm for the client side, while <xref target="appendix-pseudo-code-counting-client-constrained"/> describes an optimized version for constrained clients. Finally, <xref target="appendix-pseudo-code-counting-server"/> describes the algorithm for the server side.</t>
      <section anchor="appendix-pseudo-code-counting-client">
        <name>Client Side</name>
        <artwork><![CDATA[
input:  int Q, // Value of the MRFD option
        int LEISURE_TIME, // DEFAULT_LEISURE from RFC 7252,
                          // unless overridden

output: None


int RAND_MIN = 0;
int RAND_MAX = (2^Q) - 1;
int I = randomInteger(RAND_MIN, RAND_MAX);

if (I == 0) {
    float fraction = randomFloat(0, 1);

    Timer t = new Timer();
    t.setAndStart(fraction * LEISURE_TIME);
    while(!t.isExpired());

    Request req = new Request();
    // Initialize as NON and with maximum
    // No-Response settings, set options ...

    Option opt = new Option(OBSERVE);
    opt.set(0);
    req.setOption(opt);

    opt = new Option(MRFD);
    req.setOption(opt);

    req.send(SRV_ADDR, SRV_PORT);
}
]]></artwork>
      </section>
      <section anchor="appendix-pseudo-code-counting-client-constrained">
        <name>Client Side - Optimized Version</name>
        <artwork><![CDATA[
input:  int Q, // Value of the MRFD option
        int LEISURE_TIME, // DEFAULT_LEISURE from RFC 7252,
                          // unless overridden

output: None


const unsigned int UINT_BIT = CHAR_BIT * sizeof(unsigned int);

if (respond_to(Q) == true) {
    float fraction = randomFloat(0, 1);

    Timer t = new Timer();
    t.setAndStart(fraction * LEISURE_TIME);
    while(!t.isExpired());

    Request req = new Request();
    // Initialize as NON and with maximum
    // No-Response settings, set options ...

    Option opt = new Option(OBSERVE);
    opt.set(0);
    req.setOption(opt);

    opt = new Option(MRFD);
    req.setOption(opt);

    req.send(SRV_ADDR, SRV_PORT);
}

bool respond_to(int Q) {
    while (Q >= UINT_BIT) {
        if (rand() != 0) return false;
        Q -= UINT_BIT;
    }
    unsigned int mask = ~((~0u) << Q);
    unsigned int masked = mask & rand();
    return masked == 0;
}
]]></artwork>
      </section>
      <section anchor="appendix-pseudo-code-counting-server">
        <name>Server Side</name>
        <artwork><![CDATA[
input:  int COUNT, // Current observer counter
        int M, // Desired number of confirmations
        int MAX_CONFIRMATION_WAIT,
        Response notification, // Multicast notification to send

output: int NEW_COUNT // Updated observer counter


int D = 4; // Dampener value
int RETRY_NEXT_THRESHOLD = 4;
float CANCEL_THRESHOLD = 0.2;

int N = max(COUNT, 1);
int Q = max(ceil(log2(N / M)), 0);
Option opt = new Option(MRFD);
opt.set(Q);

notification.setOption(opt);
<Finalize the notification message>
notification.send(GRP_ADDR, GRP_PORT);

Timer t = new Timer();
t.setAndStart(MAX_CONFIRMATION_WAIT); // Time t1
while(!t.isExpired());

// Time t2

int R = <number of requests to the target resource
         between t1 and t2, with the MRFD option>;

int E = R * (2^Q);

// Determine after how many multicast notifications
// the next count update will be performed
if ((R == 0) || (max(E/N, N/E) > RETRY_NEXT_THRESHOLD)) {
    <Next count update with the next multicast notification>
}
else {
    <Next count update after 10 multicast notifications>
}

// Compute the new count estimate
int COUNT_PRIME = <current value of the observer counter>;
int NEW_COUNT = COUNT_PRIME + ((E - N) / D);

// Determine whether to cancel the group observation
if (NEW_COUNT < CANCEL_THRESHOLD) {
    <Cancel the group observation>;
    return 0;
}

return NEW_COUNT;
]]></artwork>
      </section>
    </section>
    <section anchor="self-managed-oscore-group">
      <name>OSCORE Group Self-Managed by the Server</name>
      <t>For simple settings, where no pre-arranged group with suitable memberships is available, the server can be responsible to setup and manage the OSCORE group used to protect the group observation.</t>
      <t>In such a case, a client would implicitly request to join the OSCORE group when sending the observe registration request to the server. When replying, the server includes the group keying material and related information in the informative response (see <xref target="ssec-server-side-informative"/>).</t>
      <t>Additionally to what is defined in <xref target="sec-server-side"/>, the CBOR map in the informative response payload contains the following fields, whose CBOR labels are defined in <xref target="informative-response-params"/>.</t>
      <ul spacing="normal">
        <li>
          <t>'gp_material': this element is a CBOR map, which includes what the client needs in order to set up the Group OSCORE Security Context.  </t>
          <t>
This parameter has as value a subset of the Group_OSCORE_Input_Material object, which is defined in <xref section="6.4" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/> and extends the OSCORE_Input_Material object encoded in CBOR as defined in <xref section="3.2.1" sectionFormat="of" target="RFC9203"/>.  </t>
          <t>
In particular, the following elements of the Group_OSCORE_Input_Material object are included, using the same CBOR labels from the OSCORE Security Context Parameters Registry, as in <xref section="6.4" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>.  </t>
          <ul spacing="normal">
            <li>'ms', 'contexId', 'cred_fmt', 'sign_enc_alg', 'sign_alg' and 'sign_params'. These elements MUST be included.</li>
            <li>'hkdf' and 'salt'. These elements MAY be included.</li>
          </ul>
          <t>
The 'group_senderId' element of the Group_OSCORE_Input_Material object MUST NOT be included.</t>
        </li>
        <li>'srv_cred': this element is a CBOR byte string, with value the original binary representation of the server's authentication credential used in the OSCORE group. In particular, the original binary representation complies with the format specified by the 'cred_fmt' element of 'gp_material'.</li>
        <li>'srv_identifier': this element MUST be included and is encoded as a CBOR byte string, with value the Sender ID that the server has in the OSCORE group.</li>
        <li>'exp': with value the expiration time of the keying material of the OSCORE group specified in the 'gp_material' parameter, encoded as a CBOR unsigned integer. This field contains a numeric value representing the number of seconds from 1970-01-01T00:00:00Z UTC until the specified UTC date/time, ignoring leap seconds, analogous to what specified for NumericDate in <xref section="2" sectionFormat="of" target="RFC7519"/>.</li>
      </ul>
      <t>Note that the informative response does not require to include an explicit proof-of-possession (PoP) of the server's private key. Although the server is also acting as Group Manager and a PoP evidence of the Group Manager's private key is included in a full-fledged Join Response (see <xref section="6.4" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>), such proof-of-possession will be achieved through every multicast notification, that the server sends as protected with the group mode of Group OSCORE and including a signature computed with its private key.</t>
      <t>A client receiving an informative response uses the information above to set up the Group OSCORE Security Context, as described in <xref section="2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. Note that the client does not obtain a Sender ID of its own, hence it installs a Security Context that a "silent server" would, i.e., without Sender Context. From then on, the client uses the received keying material to process the incoming multicast notifications from the server.</t>
      <t>Since the server is also acting as Group Manager, the authentication credential of the server provided in the 'srv_cred' element of the informative response is also used in the 'gm_cred' element of the external_aad for encrypting and signing the phantom request and multicast notifications (see <xref section="4.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>)</t>
      <t>Furthermore, the server complies with the following points.</t>
      <ul spacing="normal">
        <li>
          <t>The server MUST NOT self-manage OSCORE groups and provide the related keying material in the informative response for any other purpose than the protection of group observations, as defined in this document.  </t>
          <t>
The server MAY use the same self-managed OSCORE group to protect the phantom request and the multicast notifications of multiple group observations it hosts.</t>
        </li>
        <li>The server MUST NOT provide in the informative response the keying material of other OSCORE groups it is or has been a member of.</li>
      </ul>
      <t>After the time indicated in the 'exp' field:</t>
      <ul spacing="normal">
        <li>
          <t>The server MUST stop using the keying material and MUST cancel the group observations for which that keying material is used (see <xref target="ssec-server-side-cancellation"/> and <xref target="ssec-server-side-cancellation-oscore"/>). If the server creates a new group observation as a replacement or follow-up using the same OSCORE group:  </t>
          <ul spacing="normal">
            <li>The server MUST update the Master Secret.</li>
            <li>The server MUST update the ID Context used as Group Identifier (Gid), consistently with <xref section="3.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>.</li>
            <li>The server MAY update the Master Salt.</li>
          </ul>
        </li>
        <li>The client MUST stop using the keying material and MAY re-register the observation at the server.</li>
      </ul>
      <t>Before the keying material has expired, the server can send a multicast response with response code 5.03 (Service Unavailable) to the observing clients, protected with the current keying material. In particular, this is an informative response (see <xref target="ssec-server-side-informative"/>), which: i) additionally contains the abovementioned parameters for the next group keying material to be used; and ii) MAY omit the 'tp_info' and 'ph_req' parameters, since the associated information is immutable throughout the observation lifetime. The response has the same Token value T of the phantom registration request and it does not include an Observe Option. The server MUST use its own Sender Sequence Number as Partial IV to protect the error response, and include it as Partial IV in the OSCORE Option of the response.</t>
      <t>When some clients leave the OSCORE group and forget about the group observation, the server does not have to provide the remaining clients with any stale Sender IDs, as normally required for Group OSCORE (see <xref section="3.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>). In fact, only two entities in the group have a Sender ID, i.e., the server and possibly the Deterministic Client, if the optimization defined in this appendix is combined with the use of phantom requests as deterministic requests (see <xref target="deterministic-phantom-Request"/>). In particular, both of them never change their Sender ID during the group lifetime, while they both remain part of the group until the group ceases to exist.</t>
      <t>As an alternative to renewing the keying material before it expires, the server can simply cancel the group observation (see <xref target="ssec-server-side-cancellation"/> and <xref target="ssec-server-side-cancellation-oscore"/>), which results in the eventual re-registration of the clients that are still interested in the group observation.</t>
      <t>Applications requiring backward security and forward security are REQUIRED to use an actual group joining process (usually through a dedicated Group Manager), e.g., the ACE joining procedure defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>. The server can facilitate the clients by providing them information about the OSCORE group to join, as described in <xref target="sec-inf-response"/>.</t>
    </section>
    <section anchor="deterministic-phantom-Request">
      <name>Phantom Request as Deterministic Request</name>
      <t>In some settings, the server can assume that all the approaching clients already have the exact phantom observation request to use, together with the transport-specific information required to listen to corresponding multicast notifications.</t>
      <t>For instance, the clients can be pre-configured with the phantom observation request, or they may be expected to retrieve it through dedicated means (see <xref target="appendix-different-sources"/>). In either case, the server would already have started the group observation, before the associated phantom observation request was disseminated.</t>
      <t>Then, the clients either set up their multicast address and group observation for listening to multicast notifications if directly able to, or rely on a proxy to do so on their behalf (see <xref target="intermediaries"/> and <xref target="intermediaries-e2e-security"/>).</t>
      <t>If Group OSCORE is used to protect the group observation (see <xref target="sec-secured-notifications"/>), and the OSCORE group supports the concept of Deterministic Client <xref target="I-D.amsuess-core-cachable-oscore"/>, then the server and each client in the OSCORE group can also independently compute the protected phantom observation request.</t>
      <t>In such a case, the unprotected version of the phantom observation request can be made available to the clients as a smaller, plain CoAP message. As above, this can be pre-configured on the clients, or they can obtain it through dedicated means (see <xref target="appendix-different-sources"/>). In either case, the clients and the server can independently protect the plain CoAP message by using the approach defined in <xref section="3" sectionFormat="of" target="I-D.amsuess-core-cachable-oscore"/>, thus all computing the same protected deterministic request. The latter is used as the actual phantom observation request, against which the protected multicast notifications will match for the group observation in question.</t>
      <t>If relying on a proxy, each client sends the deterministic request to the proxy as a ticket request (see <xref target="intermediaries-e2e-security"/>). However, differently from what is defined in <xref target="intermediaries-e2e-security"/> when the ticket request is not a deterministic request, the clients do not include a Listen-to-Multicast-Responses Option. This results in the proxy forwarding the ticket request (i.e., the phantom observation request) to the server and obtaining the information required to listen to multicast notifications, unless the proxy has already set itself to do so. Also, the proxy will be able to serve multicast notifications from its cache as per <xref target="I-D.amsuess-core-cachable-oscore"/>. An example considering such a setup is shown in <xref target="intermediaries-example-e2e-security-det"/>.</t>
      <t>Note that the phantom registration request is, in terms of transport-independent information, identical to the same deterministic request possibly sent by each client (e.g., if a proxy is deployed). Thus, if the server receives such a phantom registration request, the informative response may omit the 'ph_req' parameter (see <xref target="ssec-server-side-informative"/>). If a client receives an informative response that includes the 'ph_req' parameter, and this specifies transport-independent information different from the one of the sent deterministic request, then the client considers the informative response malformed.</t>
      <t>If the optimization defined in <xref target="self-managed-oscore-group"/> is also used, the 'gp_material' element in the informative response from the server MUST also include the following elements from the Group_OSCORE_Input_Material object.</t>
      <ul spacing="normal">
        <li>'alg', 'ecdh_alg' and 'ecdh_params', as per <xref section="6.4" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>.</li>
        <li>'det_senderId' and 'det_hash_alg', defined in <xref section="4" sectionFormat="of" target="I-D.amsuess-core-cachable-oscore"/>. These specify the Sender ID of the Deterministic Client in the OSCORE group, and the hash algorithm used to compute the deterministic request (see <xref section="3.4.1" sectionFormat="of" target="I-D.amsuess-core-cachable-oscore"/>).</li>
      </ul>
      <t>If a deterministic request is used as phantom observation request for a group observation, the server does not assist clients that are interested to take part to the group observation but do not support deterministic requests. This is consistent with the fact that the setup in question already relies on a lot of agreed pre-configuration.</t>
      <t>Therefore, the following holds when a group observation relies on a deterministic request as phantom observation request.</t>
      <ul spacing="normal">
        <li>Every client interested to take part to such a group observation: has to support deterministic requests; and has to know the phantom observation request, as a result of pre-configuration or following its retrieval through dedicated means (see <xref target="appendix-different-sources"/>).</li>
        <li>
          <t>When running such an observation request, the server does not simultaneously run a parallel group observation for the same target resource, as associated with a different phantom observation request and intended to clients that do not support deterministic requests.  </t>
          <t>
Upon receiving an individual observation request for the same target resource, the server MUST reply with a generic 5.03 (Service Unavailable) response (i.e., not the informative response defined in <xref target="ssec-server-side-informative"/>), if the request differs from the specific deterministic request associated with the group observation.</t>
        </li>
      </ul>
    </section>
    <section anchor="intermediaries-example">
      <name>Example with a Proxy</name>
      <t>This section provides an example when a proxy P is used between the clients and the server. The same assumptions and notation used in <xref target="sec-example-no-security"/> are used for this example. In addition, the proxy has address PRX_ADDR and listens to the port number PRX_PORT.</t>
      <t>Unless explicitly indicated, all messages transmitted on the wire are sent over unicast.</t>
      <figure anchor="example-proxy-no-oscore">
        <name>Example of group observation with a proxy</name>
        <artwork><![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    : [1, bstr(SRV_ADDR), SRV_PORT,
|      |      |        |                  0x7b, bstr(GRP_ADDR),
|      |      |        |                  GRP_PORT],
|      |      |        |    last_notif : 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
|      |      |        |  Content-Format: application/cbor
|      |      |        |  <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
|      |      |        |  Content-Format: application/cbor
|      |      |        |  <Other options>
|      |      |        |  Payload: "1234"
|      |      |        |
:      :      :        :
:      :      :        :  (The value of the resource
:      :      :        :  /r changes to "5678".)
:      :      :        :
|      |      |        |
|      |      |  (*)   |
|      |      |<-------+  Token: 0x7b
|      |      | 2.05   |  Observe: 11
|      |      |        |  Content-Format: application/cbor
|      |      |        |  <Other options>
|      |      |        |  Payload: "5678"
|      |      |        |
|<------------+        |  Token: 0x4a
| 2.05 |      |        |  Observe: 54123
|      |      |        |  Content-Format: application/cbor
|      |      |        |  <Other options>
|      |      |        |  Payload: "5678"
|      |      |        |
|      |<-----+        |  Token: 0x01
|      | 2.05 |        |  Observe: 54123
|      |      |        |  Content-Format: application/cbor
|      |      |        |  <Other options>
|      |      |        |  Payload: "5678"
|      |      |        |


(*) Sent over IP multicast to GROUP_ADDR:GROUP_PORT

]]></artwork>
      </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 registered clients.</t>
    </section>
    <section anchor="intermediaries-example-e2e-security">
      <name>Example with a Proxy and Group OSCORE</name>
      <t>This section provides an example when a proxy P is used between the clients and the server, and Group OSCORE is used to protect multicast notifications end-to-end between the server and the clients.</t>
      <t>The same assumptions and notation used in <xref target="sec-example-with-security"/> are used for this example. In addition, the proxy has address PRX_ADDR and listens to the port number PRX_PORT.</t>
      <t>Unless explicitly indicated, all messages transmitted on the wire are sent over unicast and protected with OSCORE end-to-end between a client and the server.</t>
      <figure anchor="example-proxy-oscore">
        <name>Example of group observation with a proxy and Group OSCORE</name>
        <artwork><![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,
|       |       |         |    CBOR_payload {
|       |       |         |       tp_info : [1, bstr(SRV_ADDR),
|       |       |         |                  SRV_PORT, 0x7b,
|       |       |         |                  bstr(GRP_ADDR), GRP_PORT],
|       |       |         |       ph_req : bstr(0x05 | OPT | 0xff |
|       |       |         |                     PAYLOAD | SIGN),
|       |       |         |       last_notif : bstr(0x45 | OPT | 0xff |
|       |       |         |                         PAYLOAD | SIGN),
|       |       |         |       join_uri : "coap://myGM/
|       |       |         |                   ace-group/myGroup",
|       |       |         |       sec_gp : "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: {[1, bstr(SRV_ADDR),
|       |       |         |                         SRV_PORT, 0x7b,
|       |       |         |                         bstr(GRP_ADDR),
|       |       |         |                         GRP_PORT]
|       |       |         |                       }
|       |       |         |  <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,
|       |       |         |    CBOR_payload {
|       |       |         |       tp_info : [1, bstr(SRV_ADDR),
|       |       |         |                  SRV_PORT, 0x7b,
|       |       |         |                  bstr(GRP_ADDR), GRP_PORT],
|       |       |         |       ph_req : bstr(0x05 | OPT | 0xff |
|       |       |         |                     PAYLOAD | SIGN),
|       |       |         |       last_notif : bstr(0x45 | OPT | 0xff |
|       |       |         |                         PAYLOAD | SIGN),
|       |       |         |       join_uri : "coap://myGM/
|       |       |         |                   ace-group/myGroup",
|       |       |         |       sec_gp : "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: {[1, bstr(SRV_ADDR),
|       |       |         |                         SRV_PORT, 0x7b,
|       |       |         |                         bstr(GRP_ADDR),
|       |       |         |                         GRP_PORT]
|       |       |         |                       }
|       |       |         |  <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],
|       |       |         |    Content-Format: application/cbor,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    CBOR_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 IP multicast to GROUP_ADDR:GROUP_PORT and protected
    with Group OSCORE end-to-end between the server and the clients.

]]></artwork>
      </figure>
      <t>Unlike in the unprotected example in <xref target="intermediaries-example"/>, the proxy does <em>not</em> have all the information to perform request deduplication, and can only recognize the identical request once the client sends the ticket request.</t>
    </section>
    <section anchor="intermediaries-example-e2e-security-det">
      <name>Example with a Proxy and Deterministic Requests</name>
      <t>This section provides an example when a proxy P is used between the clients and the server, and Group OSCORE is used to protect multicast notifications end-to-end between the server and the clients.</t>
      <t>In addition, the phantom request is especially a deterministic request (see <xref target="deterministic-phantom-Request"/>), which is protected with the pairwise mode of Group OSCORE as defined in <xref target="I-D.amsuess-core-cachable-oscore"/>.</t>
      <section anchor="intermediaries-example-e2e-security-det-intro">
        <name>Assumptions and Walkthrough</name>
        <t>The example provided in this appendix as reflected by the message exchange shown in <xref target="intermediaries-example-e2e-security-det-exchange"/> assumes the following.</t>
        <ol spacing="normal" type="1"><li>The OSCORE group supports deterministic requests. Thus, the server creates the phantom request as a deterministic request <xref target="I-D.amsuess-core-cachable-oscore"/>, stores it locally as one of its issued phantom requests, and starts the group observation.</li>
          <li>The server makes the phantom request available through other means, e.g., a pub-sub broker, together with the transport-specific information for listening to multicast notifications bound to the phantom request (see <xref target="appendix-different-sources"/>).</li>
          <li>Since the phantom request is a deterministic request, the server can more efficiently make it available in its smaller, plain version. The clients can obtain it from the particular alternative source and protect it as per <xref section="3" sectionFormat="of" target="I-D.amsuess-core-cachable-oscore"/>, thus all computing the same deterministic request to be used as phantom observation request.</li>
          <li>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 point (2) above, the same would happen if the phantom request would not be specifically a deterministic request.</li>
          <li>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"/> when the ticket request is not deterministic, the client does not include a Listen-to-Multicast-Responses Option in the phantom request sent to the proxy.</li>
          <li>Unlike for the case considered in <xref target="intermediaries-e2e-security"/>, here the proxy does not know that the request is exactly a ticket request for subscribing to multicast notifications. Thus, the proxy simply forwards the ticket request to the server as it normally does for any request.</li>
          <li>The server receives the ticket request, which is a deviation from the case where the ticket request is not deterministic and stops at the proxy (see <xref target="intermediaries-e2e-security"/>). Then, the server can clearly understand what is happening. In fact, as the result of an early check, the server recognizes the phantom request among the stored ones. This happens through a byte-by-byte comparison of the incoming message minus the transport-related fields, i.e., by considering only: i) the outer REST code; ii) the outer options; and iii) the ciphertext from the message payload.</li>
          <li>Having recognized the incoming request as one of the self-generated deterministic phantom requests made available at external sources, the server does not perform any OSCORE processing on it. This opens for replying to the proxy with an unprotected response, although not signaling any OSCORE-related error.</li>
          <li>The server starts the group observation and replies with an error response, i.e., the usual 5.03 informative response, including: the transport information, the phantom request, and (optionally) the latest notification.</li>
          <li>From the received 5.03 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 5.03 response included a latest notification, the proxy caches it and forwards it back to the client, otherwise it replies with an empty ACK (if it has not done it already and the request from the client was Confirmable).</li>
          <li>Like in the case with a non-deterministic phantom request considered in <xref target="intermediaries-e2e-security"/>, the proxy fans out the multicast notifications to the origin clients as they come. Also, as new clients following the first one contact the proxy, this does not have to contact the server again as in <xref target="intermediaries-e2e-security"/>, since the deterministic phantom request would produce a cache hit as per <xref target="I-D.amsuess-core-cachable-oscore"/>. Thus, the proxy can serve such clients with the latest fresh multicast notification from its cache.</li>
        </ol>
      </section>
      <section anchor="intermediaries-example-e2e-security-det-exchange">
        <name>Message Exchange</name>
        <t>The same assumptions and notation used in <xref target="sec-example-with-security"/> are used for this example. As a recap of some specific value:</t>
        <ul spacing="normal">
          <li>Two clients C_1 and C_2 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".</li>
          <li>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.</li>
          <li>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.</li>
        </ul>
        <t>In addition:</t>
        <ul spacing="normal">
          <li>The proxy has address PRX_ADDR and listens to the port number PRX_PORT.</li>
          <li>The deterministic client in the OSCORE group has 'kid' = 0x09.</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>
        <artwork><![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 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 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],
|       |       |         |    CBOR_Payload: "1234"
|       |       |         |  }
|       |       |         |  <Signature>
|       |       |         |
|       |       |         |  (S responds to the proxy with an
|       |       |         |   unprotected informative response)
|       |       |         |
|       |       |<--------|  Token: 0x5e
|       |       | 5.03    |  Content-Format: application/
|       |       |         |    informative-response+cbor
|       |       |         |  Max-Age: 0
|       |       |         |  0xff,
|       |       |         |  CBOR_payload {
|       |       |         |     tp_info : [1, bstr(SRV_ADDR), SRV_PORT,
|       |       |         |                0x7b, bstr(GRP_ADDR),
|       |       |         |                GRP_PORT],
|       |       |         |     last_notif : <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],
|       |       |         |    CBOR_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],
|       |       |         |    CBOR_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],
|       |       |         |    Content-Format: application/cbor,
|       |       |         |    <Other class E options>,
|       |       |         |    0xff,
|       |       |         |    CBOR_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 IP multicast to GROUP_ADDR:GROUP_PORT and protected
    with Group OSCORE end-to-end between the server and the clients.
]]></artwork>
      </section>
    </section>
    <section anchor="sec-document-updates">
      <name>Document Updates</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION.</t>
      <section anchor="sec-05-06">
        <name>Version -05 to -06</name>
        <ul spacing="normal">
          <li>Clarified rough counting of clients when a proxy is used</li>
          <li>IANA considerations: registration of target attribute "gp-obs"</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>If the phantom request is an OSCORE deterministic request, there is no parallel group observation for clients that lack support.</li>
          <li>Clarification on pre-configured clients.</li>
          <li>Clarified early publication of phantom request.</li>
          <li>Fixes in IANA considerations.</li>
          <li>Fixed example with proxy and Group OSCORE.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>Added a new section on prerequisites.</li>
          <li>Added a new section overviewing alternative variants.</li>
          <li>Consistent renaming of 'cli_addr' to 'cli_host' in 'tp_info'.</li>
          <li>Added pre-requirements for early retrieval of phantom request.</li>
          <li>Revised example with early retrieval of phantom request.</li>
          <li>Clarified use, rationale and example of phantom request as deterministic request.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>Distinction between authentication credential and public key.</li>
          <li>Fixed processing of informative response at the client, when Group OSCORE is used.</li>
          <li>Discussed scenarios with pre-configured address/port and Token value.</li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>Clarifications on client rough counting and IP multicast scope.</li>
          <li>The 'ph_req' parameter is optional in the informative response.</li>
          <li>New parameter 'next_not_before' for the informative response.</li>
          <li>Optimization when rekeying the self-managed OSCORE group.</li>
          <li>Security considerations on unsecured multicast notifications.</li>
          <li>Protection of the ticket request sent to a proxy.</li>
          <li>RFC8126 terminology in IANA considerations.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>Simplified cancellation of the group observation, without using a phantom cancellation request.</li>
          <li>Aligned parameter semantics with core-oscore-groupcomm and ace-key-groupcomm-oscore.</li>
          <li>Clarifications about self-managed OSCORE group and use of deterministic requests for cacheable OSCORE.</li>
          <li>New example with a proxy, Group OSCORE and a deterministic phantom request.</li>
          <li>Fixes in the examples and editorial improvements.</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowldegment">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Carsten Bormann"/>, <contact fullname="Klaus Hartke"/>, <contact fullname="Jaime Jiménez"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Jim Schaad"/>, <contact fullname="Ludwig Seitz"/> and <contact fullname="Göran Selander"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y9WXvbVpYo+q5fgSN/ty0lJDV4iC3HqVYkOdEpS1ZJcqVy
U2l9IAmKKJMEGwAtq+L0z7pP9+38sbvGPQAbICU71am+pa9SlkhgD2uvveah
2+2uvd+LHq2tlWk5SfaiN/0iyd8n0WlWpqN0EJdpNiuiuIgOsv2z6GQxKeHD
oozOk2IO3yTFWtzv58l7+6Z9xhtjbZgNZvEUphjm8ajspkk56g6yPOlm/GJ3
qi92Z+6L3UlcJkW5trb2ICrKeDa8iifZDMYp80WytpbOc/q1KHe3t59v767F
eRLvRcezMslnSbl2c70Haz8/in7I8nfp7Dr6Ls8W87V3N/aZ7iGuaA3m24MZ
hmvFoj9NiwImL2/nMNHx0eWrtcV8iOvYi77afbLbib56+nhnbW2QDWHIvWgB
e3m2Nk/3Ivh5EA3iWbQokijO8/g22khHUTyZRLdJsRlleTSOi3E0TnJYfBSV
2WAPv4Ffiywv82RU7NEYw2QUA0AKeEK/v53y1/jnWrwox1m+txbRT1f+jaJ0
Bk+c9KLLdJINYvMxg/4kzgdZ9asshx2cH18cRfvfmg8LWEoC8Dgu4tHfsnxY
XMcA+2h31zwxSMvbveiPKZyJ/SwbwiwXR92dp48fb0cXsLt342wydR5YzMoc
3ru4SYbJzHyeTON0shdNcX29ktb373naK5Lw/s570ff/5/+5nixmw8oOz9N3
cT6sf/s72mROS+yNM1ph2zYPetH+tPg//29RVHZ5MM5hSSmstfo97rO2v++z
yQQuDvzZi3Z2tx5XtvfnNJnNqvvb2d7dru9oH+5ZnsbVLQ10Pf8eT4tFUhS9
QTYN7+lVLzqDCzztp7O0sqtXeTwbJMUgDjxB53eUp4OiyGahM7zM8mIcT2d6
ho9+0zMc6VJ7c13qvyeyOtr72izLp0DA3id4HMfdw54leNdIgeChabefFvWv
s8J/ynsiHiTdd8mtMwY/jg+dvzrY3dl5Lr8+fv74sfz69NmjZ/IrUi/9FUiY
/vr86Vfy67PtZ0/0153dp+bXr3SwZ7vPdLBnT3ce6a/PH+vEz3e36dODNxdH
vf3JdZan5XhaMFr6ZItO9Xj/dJ/+RgILoI0nch+EJeE4kR2Hv4rzazz1cVnO
i72trZubmx6gX9yDEbdioN3Xs2kyK4utQVYk9H+9D+NyOnkQu+PQCv+Y3PYu
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
PF33s0sOSzh8BWy/l/AvoM4sgpFXysqMi6KxXYOci4BlqRm6Fhm3Ctp+eqlh
N77AbuvT49kEkqtsYvWItkaLgx/C9nsNTWs2mNwBWvcKVfD90L+KczvQXObM
eiXRKFFPPuxyt3iN1R5mg8WUG5mg+4K8UQutiymdD9zu3EF7Tb12eaPVRow2
bPwj66A1kRdsqidmb61vKu5hZ3NAZepgxO4006x6QbXPsbPNnBaGlTurTkcC
KbeuXyk/0+v4xnaX0mlbzYqM0gTuN1E1aX/khf8RFi6/XuL0ZNyVWuhrNevs
x+CvlT/gZ81NtpTptu2vjJbyx7JDWXOTJuWdHfsrpkBGq4/lpE/KO7v3Hgvl
Khzrqs91lz9Gj+xYC7grdxjLScqUdx7bX8vKumrdENfclEx57smd3o8Ld3Z8
7umd3h+/G3rJax+jr+yvCIotHqXp/QFQw6vRtLQvPfPfX7Z/YPFXgLRX8eSa
n3t+p/npfXmXX9rZvvP7TL30/R3zfhXfA+9fz69Mm3J5f9e8P43ndl2tfclh
Ifn7KwSms5FH5tcqgi8bKLXt+XCgx/caKPng4CWv6In5tXpNWgYCrnKpNA2F
+jIbZBPLaMgLbQWhuTzQtXto5itFNvX67phpdJTIGUUJPYqXhh3fzYdwN560
73ZYEimYvBj3cHt0hFFUuwB43pChH/OOmIAy2cNOe9D7cvbZqfBOlCeuTe/H
OzDQjgY5vE9Vl/AjfbAvWp4AYyzwlYIbY7kysWzQ60/cfJomAjjDtKroaJiC
/LYXnU0SDMmk/gYD874LALSxU9197nmGq1j/5Zd/uzh6/erXX9etioKjWtmm
dJx8TubbMMFWb/wtLu06j+fjSrFf16nqO1i/rH/a+DC5os0tQFe3wB9W8jH6
Mx3Xx+gifx/tA2KQ0PCfdBU9AYJdyOaqVhJKP1b+9X/1H/74GfcF4ihetiFO
QeSAsc+IKI3r+QkOqfsX+PnZuMb1KzKOyLB321fjV3ce5+3hmfkKf9fUQxWX
PpJQNpR3SYFYui9p7llZDxIE1KbwI9Ws2vcliYqBcQTB/qAq2W917tVcZCaA
VwwScfRfBui+JRnrxILcDgOU4Cf6nnYTMY7Vgfc9x0S56Z2sr8lg/sOspju9
9PhXSuasOoKNB7jbTwt5clWXcdWhW1nFODMduhymyX7mtzOJLHZqRngdqmi/
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
TyYJzlf0bLP7ZLO7uvbg/wGM2+reBJgCAA==

-->

</rfc>
