<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.14 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-observe-multicast-notifications-05" category="std" consensus="true" submissionType="IETF" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.2 -->
  <front>
    <title abbrev="Observe Multicast Notifications">Observe Notifications as CoAP Multicast Responses</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-05"/>
    <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="2022" month="October" day="24"/>
    <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 "grp_obs" attribute in a web link <xref target="RFC8288"/> to a resource, e.g., using a link-format document <xref target="RFC6690"/>.</t>
      <t>The "grp_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 "grp_obs" attribute; any present value MUST be ignored by parsers.  The "grp_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 "grp_obs" attribute: the client does resource discovery on a server and gets back a list of resources, one of which includes the "grp_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>;grp_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>As the Multicast-Response-Feedback-Divider Option is unsafe to forward, a proxy needs to answer it on its own, and is later counted as a single client.</t>
        <t><xref target="appendix-psuedo-code-counting-client"/> and <xref target="appendix-psuedo-code-counting-client-constrained"/> provide a description in pseudo-code of the operations above performed by the client.</t>
      </section>
      <section anchor="processing-on-the-server-side">
        <name>Processing on the Server Side</name>
        <t>In order to avoid needless use of network resources, a server 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-psuedo-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>
      <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-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" target="https://www.ietf.org/archive/id/draft-ietf-core-groupcomm-bis-07.txt">
          <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="July" year="2022"/>
            <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-07"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm" target="https://www.ietf.org/archive/id/draft-ietf-core-oscore-groupcomm-15.txt">
          <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="5" month="September" 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-15"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore" target="https://www.ietf.org/archive/id/draft-ietf-ace-key-groupcomm-oscore-15.txt">
          <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="5" month="September" year="2022"/>
            <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-15"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.ietf.org/archive/id/draft-ietf-core-coap-pubsub-10.txt">
          <front>
            <title>Publish-Subscribe Broker for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>SmartThings</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="4" month="May" year="2022"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP), and related extensions
   are intended to support machine-to-machine communication in systems
   where one or more nodes are resource constrained, in particular for
   low power wireless sensor networks.  This document defines a publish-
   subscribe Broker for CoAP that extends the capabilities of CoAP for
   supporting nodes with long breaks in connectivity and/or up-time.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-10"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-discovery" target="https://www.ietf.org/archive/id/draft-tiloca-core-oscore-discovery-12.txt">
          <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="5" month="September" year="2022"/>
            <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-12"/>
        </reference>
        <reference anchor="I-D.ietf-core-coral" target="https://www.ietf.org/archive/id/draft-ietf-core-coral-05.txt">
          <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" target="https://www.ietf.org/archive/id/draft-amsuess-core-cachable-oscore-05.txt">
          <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="July" year="2022"/>
            <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-05"/>
        </reference>
        <reference anchor="I-D.ietf-cose-cbor-encoded-cert" target="https://www.ietf.org/archive/id/draft-ietf-cose-cbor-encoded-cert-04.txt">
          <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="July" year="2022"/>
            <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-04"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-capable-proxies" target="https://www.ietf.org/archive/id/draft-tiloca-core-oscore-capable-proxies-04.txt">
          <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="23" month="September" year="2022"/>
            <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-04"/>
        </reference>
        <reference anchor="RFC6690" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.ietf.org/archive/id/draft-ietf-core-href-11.txt">
          <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="7" month="September" year="2022"/>
            <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 -10 of this draft contains an experimental
   addition that allows representing user information
   (https://alice@chains.example) in the URI authority component.  This
   feature lacks test vectors and implementation experience at the time
   of writing and requires discussion.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-11"/>
        </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-psuedo-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-psuedo-code-counting-client"/> describes the algorithm for the client side, while <xref target="appendix-psuedo-code-counting-client-constrained"/> describes an optimized version for constrained clients. Finally, <xref target="appendix-psuedo-code-counting-server"/> describes the algorithm for the server side.</t>
      <section anchor="appendix-psuedo-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-psuedo-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-psuedo-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-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+y9aXvbVpYg/F2/AiM/b1tySGrxEluOU61IcqIuW1ZJcqUy
qYwekARFlEmCDYCWVXH6Z82n+TZ/bM56F+ACpGSnO+k3eipliQTucu65Z1+6
3e7a+73o4dpamZaTZC960y+S/H0SnWRlOkoHcZlmsyKKi+gg2z+NXi8mJXxY
lNFZUszhm6RYi/v9PHlv37TPeGOsDbPBLJ7CFMM8HpXdNClH3UGWJ92MX+xO
9cXuzH2xO4nLpCjX1tbuRUUZz4aX8SSbwThlvkjW1tJ5Tr8W5e729rPt3bU4
T+K96HhWJvksKdeur/Zg7WdH0fdZ/i6dXUXf5tlivvbu2j7TPcQVrcF8ezDD
cK1Y9KdpUcDk5c0cJjo+uni5tpgPcR170Ze7j3c70ZdPHu2srQ2yIQy5Fy1g
L0/X5uleBD/3okE8ixZFEsV5Ht9EG+koiieT6CYpNqMsj8ZxMY7GSQ6Lj6Iy
G+zhN/BrkeVlnoyKPRpjmIxiAEgBT+j3N1P+Gv9cixflOMv31iL66cq/UZTO
4InXveginWSD2HzMoH8d54Os+lWWww7Ojs+Pov1vzIcFLCUBeBwX8egfWT4s
rmKAfbS7a54YpOXNXvTnFM7EfpYNYZbzo+7Ok0ePtqNz2N27cTaZOg8sZmUO
751fJ8NkZj5PpnE62YumuL5eSev71zztFUl4f2e96Lv/+7+vJovZsLLDs/Rd
nA/r3/6GNpnTEnvjjFbYts2DXrQ/Lf7v/ymKyi4PxjksKYW1Vr/Hfdb29102
mcDFgT970c7u1qPK9v6aJrNZdX8727vb9R3twz3L07i6pYGu51/jabFIiqI3
yKbhPb3sRadwgaf9dJZWdvUyj2eDpBjEgSfo/I7ydFAU2Sx0hhdZXozj6UzP
8OGveoYjXWpvrkv910RWR3tfm2X5FAjY+wSP47h72LME7wopEDw07fbTov51
VvhPeU/Eg6T7LrlxxuDH8aGzlwe7OzvP5NdHzx49kl+fPH34VH5F6qW/AgnT
X589+VJ+fbr99LH+urP7xPz6pQ72dPepDvb0yc5D/fXZI5342e42fXrw5vyo
tz+5yvK0HE8LRkufbNGpHu+f7NPfSGABtPFE7oOwJBwnsuPwV3F+hac+Lst5
sbe1dX193QP0i3sw4lYMtPtqNk1mZbE1yIqE/q/3YVxOJ/didxxa4Z+Tm94F
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
o7Oyeuf/Ab29IHpnkAIA

-->

</rfc>
