<?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-rfc2629 version 1.6.6 (Ruby 2.7.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-observe-multicast-notifications-04" category="std" consensus="true" submissionType="IETF" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.4 -->
  <front>
    <title abbrev="Observe Multicast Notifications">Observe Notifications as CoAP Multicast Responses</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-04"/>
    <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="July" day="11"/>
    <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 informative unicast 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 informative unicast 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 error 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 message 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 message (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 message (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 with a group observation, this would still result in a positive notification response to the client as described in <xref target="RFC7641"/>.</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 preconfigured 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. This still helps the server to assess the current number of clients interested in a group observation (e.g., by using the method defined 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. In case no such response is available, 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="I-D.ietf-ace-oauth-authz"/>. 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 message 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 message 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. The registry has been created to use the "Expert Review Required" 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 Required" 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. 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">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Chonggang Wang">
              <organization>InterDigital</organization>
            </author>
            <author fullname="Marco 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-14.txt">
          <front>
            <title>Group OSCORE - Secure Group Communication for CoAP</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuss Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Jiye Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <date day="7" month="March" 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-14"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore" target="https://www.ietf.org/archive/id/draft-ietf-ace-key-groupcomm-oscore-14.txt">
          <front>
            <title>Key Management for OSCORE Groups in ACE</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Jiye Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="28" month="April" 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-14"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oscore-profile" target="https://www.ietf.org/archive/id/draft-ietf-ace-oscore-profile-19.txt">
          <front>
            <title>OSCORE Profile of the Authentication and Authorization for Constrained Environments Framework</title>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Martin Gunnarsson">
              <organization>RISE</organization>
            </author>
            <date day="6" month="May" year="2021"/>
            <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="Internet-Draft" value="draft-ietf-ace-oscore-profile-19"/>
        </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="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-ace-oauth-authz" target="https://www.ietf.org/archive/id/draft-ietf-ace-oauth-authz-46.txt">
          <front>
            <title>Authentication and Authorization for Constrained Environments (ACE) using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <author fullname="Goeran Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Erik Wahlstroem">
	 </author>
            <author fullname="Samuel Erdtman">
              <organization>Spotify AB</organization>
            </author>
            <author fullname="Hannes Tschofenig">
              <organization>Arm Ltd.</organization>
            </author>
            <date day="8" month="November" year="2021"/>
            <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="Internet-Draft" value="draft-ietf-ace-oauth-authz-46"/>
        </reference>
        <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">
              <organization>SmartThings</organization>
            </author>
            <author fullname="Ari Keranen">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Jaime 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-11.txt">
          <front>
            <title>Discovery of OSCORE Groups with the CoRE Resource Directory</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsuess">
	 </author>
            <author fullname="Peter van der Stok">
              <organization>Consultant</organization>
            </author>
            <date day="7" month="March" 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-11"/>
        </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">
	 </author>
            <author fullname="Thomas 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">
	 </author>
            <author fullname="Marco 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">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Shahid Raza">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Joel Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Martin 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-03.txt">
          <front>
            <title>OSCORE-capable Proxies</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="11" month="July" 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-03"/>
        </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="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-10.txt">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="7" month="March" 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-10"/>
        </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, the same data can be made available through different services, such as the following ones.</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>As a pre-requirement, the server has to first perform the following actions.</t>
        <ul spacing="normal">
          <li>The server has to start the group observation (see <xref target="ssec-server-side-request"/>).</li>
          <li>
            <t>Together with topic metadata, the server has to publish the same information associated with the group observation that would be conveyed in the informative error 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>
          </li>
        </ul>
        <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 error 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 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="I-D.ietf-ace-oscore-profile"/>.  </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 Joining 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 error 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 error 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>
    </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>
|       |       |         |  }
|       |       |         |
|       |       |<--------+  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-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:
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

-->

</rfc>
