<?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.5.6 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-observe-multicast-notifications-03" category="std" updates="7252, 7641" obsoletes="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.9.1 -->
  <front>
    <title abbrev="Observe Multicast Notifications">Observe Notifications as CoAP Multicast Responses</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-03"/>
    <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="March" day="07"/>
    <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" numbered="true" toc="default">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252" format="default"/> has been extended with a number of mechanisms, including resource Observation <xref target="RFC7641" format="default"/>. 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" format="default"/>. 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" format="default"/>, 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="I-D.ietf-core-resource-directory" format="default"/>. For example, multiple clients can benefit of observation for discovering (to-be-created) OSCORE groups <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, 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" format="default"/>.</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" format="default"/> and <xref target="RFC7641" format="default"/>, 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" format="default"/> 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" numbered="true" toc="default">
        <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" format="default"/> <xref target="RFC8174" format="default"/> 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" format="default"/>, group communication for CoAP <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>, Observe <xref target="RFC7641" format="default"/>, CBOR <xref target="RFC8949" format="default"/>, OSCORE <xref target="RFC8613" format="default"/>, and Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>.</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" format="default"/>.</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 or cancel 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-server-side" numbered="true" toc="default">
      <name>Server-Side Requirements</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" format="default"/>. 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>
      <t>This document does not describe a way for the client to influence the server's decision to start group observations.
That is done on purpose:
the specified mechanism is expected to be used in situations where sending individual notifications is not feasible, or not preferred beyond a certain number of clients observing a target resource.
If applications arise where negotiation does make sense,
they are welcome to specify additional means to opt in to multicast notifications.</t>
      <section anchor="ssec-server-side-request" numbered="true" toc="default">
        <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" format="default"/>) 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" numbered="true" toc="default">
        <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" format="default"/>, 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" format="default"/>. 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" format="default"/>.</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" format="default"/>. 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" format="default"/>), encoded as a CBOR byte string. The value of the CBOR byte string is formatted as defined in <xref target="sssec-transport-independent-encoding" format="default"/>.  </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" format="default"/>. 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" format="default"/> provided below describes the payload of the informative response.</t>
        <figure anchor="informative-response-payload">
          <name>Format of the informative response payload</name>
          <artwork name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
          <name>Encoding of Transport-Specific Message Information</name>
          <t>[ This encoding might be replaced by CRIs <xref target="I-D.ietf-core-href" format="default"/> 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 name="" type="" align="left" alt=""><![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" format="default"/> 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" format="default"/>.  </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" format="default"/> 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" format="default"/>, respectively.</t>
          <section anchor="ssssec-udp-transport-specific" numbered="true" toc="default">
            <name>UDP Transport-Specific Information</name>
            <t>When CoAP multicast notifications are transported over UDP as per <xref target="RFC7252" format="default"/> and <xref target="I-D.ietf-core-groupcomm-bis" format="default"/>, 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" format="default"/>). 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" format="default"/>). This element MUST be present.</li>
                  <li>'cli_addr': 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 name="" type="" align="left" alt=""><![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_addr : #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" numbered="true" toc="default">
          <name>Encoding of 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" numbered="true" toc="default">
        <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" format="default"/>.</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" format="default"/>). 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" format="default"/>). 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_addr' and 'cli_port' elements of 'req_info' under the 'tp_info' parameter, in the informative response message (see <xref target="ssssec-udp-transport-specific" format="default"/>).</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" numbered="true" toc="default">
        <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" format="default"/>, 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" format="default"/>) 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" format="default"/>, 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" format="default"/>, 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" format="default"/>). The transmission rate of multicast notifications should also take into account the avoidance of a possible "broadcast storm" problem <xref target="MOBICOM99" format="default"/>. 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" numbered="true" toc="default">
        <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" format="default"/>.</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" numbered="true" toc="default">
      <name>Client-Side Requirements</name>
      <section anchor="ssec-client-side-request" numbered="true" toc="default">
        <name>Request</name>
        <t>A client sends an observation request to the server as described in <xref target="RFC7641" format="default"/>, 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" format="default"/>.</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" format="default"/>) 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" format="default"/>). In this case, the client can include a No-Response option <xref target="RFC7967" format="default"/> 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" format="default"/>), which in turn can play a role in deciding to cancel the group observation.</t>
      </section>
      <section anchor="ssec-client-side-informative" numbered="true" toc="default">
        <name>Informative Response</name>
        <t>Upon receiving the informative response defined in <xref target="ssec-server-side-informative" format="default"/>, 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" format="default"/>).</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_addr' and 'cli_port' elements of 'req_info' under the 'tp_info' parameter, in the informative response (see <xref target="ssssec-udp-transport-specific" format="default"/>). 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" format="default"/>. 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" format="default"/>). Otherwise, the client SHOULD explicitly withdraw from the group observation.</t>
        <t><xref target="appendix-different-sources" format="default"/> 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" numbered="true" toc="default">
        <name>Notifications</name>
        <t>After having successfully processed the informative response as defined in <xref target="ssec-client-side-informative" format="default"/>, 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" format="default"/>.</t>
      </section>
      <section anchor="ssec-client-side-cancellation" numbered="true" toc="default">
        <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" format="default"/>.</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" format="default"/>.</t>
        <t>In case the server has canceled a group observation as defined in <xref target="ssec-server-side-cancellation" format="default"/>, 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" format="default"/>.</t>
      </section>
    </section>
    <section anchor="sec-web-linking" numbered="true" toc="default">
      <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" format="default"/> to a resource, e.g., using a link-format document <xref target="RFC6690" format="default"/>.</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" format="default"/> 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" format="default"/>) is used.</t>
      <figure anchor="example-web-link">
        <name>The Web Link</name>
        <artwork name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
      <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 name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
      <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" numbered="true" toc="default">
        <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" format="default"/>, 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" name="" type="" alt=""><![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" format="default"/><xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>.</t>
      </section>
      <section anchor="processing-on-the-client-side" numbered="true" toc="default">
        <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" format="default"/>), 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" format="default"/>. 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" format="default"/>). 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" format="default"/> and <xref target="appendix-psuedo-code-counting-client-constrained" format="default"/> provide a description in pseudo-code of the operations above performed by the client.</t>
      </section>
      <section anchor="processing-on-the-server-side" numbered="true" toc="default">
        <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" format="default"/>), for instance by using the method described below.</t>
        <section anchor="request-for-feedback" numbered="true" toc="default">
          <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" numbered="true" toc="default">
          <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" format="default"/>).</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" format="default"/> 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" format="default"/> 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" numbered="true" toc="default">
          <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" format="default"/>).</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" format="default"/>).</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" format="default"/> 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" numbered="true" toc="default">
      <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" format="default"/>, 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" format="default"/>. 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" format="default"/> and based on the ACE framework for Authentication and Authorization in constrained environments <xref target="I-D.ietf-ace-oauth-authz" format="default"/>. 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" format="default"/> and/or DTLS <xref target="RFC6347" format="default"/><xref target="I-D.ietf-tls-dtls13" format="default"/>, 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" format="default"/>).</t>
      <section anchor="sec-inf-response" numbered="true" toc="default">
        <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" format="default"/>. This mechanism is OPTIONAL to support for the client and server.</t>
        <t>Additionally to what defined in <xref target="sec-server-side" format="default"/>, the CBOR map in the informative response payload contains the following fields, whose CBOR labels are defined in <xref target="informative-response-params" format="default"/>.</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" format="default"/> 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" format="default"/>.</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" format="default"/>. Consistently with <xref section="2.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm" format="default"/>, 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" format="default"/>, X.509 certificates <xref target="RFC7925" format="default"/> and C509 certificates <xref target="I-D.ietf-cose-cbor-encoded-cert" format="default"/>. 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" format="default"/>.</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" format="default"/>.</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" format="default"/>.</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" format="default"/>.</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" format="default"/>). Otherwise, the client SHOULD explicitly withdraw from the group observation.</t>
        <t><xref target="self-managed-oscore-group" format="default"/> 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" format="default"/> 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" numbered="true" toc="default">
        <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" format="default"/>, with the following differences.</t>
        <section anchor="ssec-server-side-request-oscore" numbered="true" toc="default">
          <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" format="default"/> 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" format="default"/>, 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" numbered="true" toc="default">
          <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" format="default"/>). 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" format="default"/>.</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" format="default"/>). This applies also to the initial multicast notification INIT_NOTIF built in step 6 of <xref target="ssec-server-side-request" format="default"/>.</t>
          <t>Optionally, the informative response includes information on the OSCORE group to join, as additional parameters (see <xref target="sec-inf-response" format="default"/>).</t>
        </section>
        <section anchor="ssec-server-side-notifications-oscore" numbered="true" toc="default">
          <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" format="default"/> MUST be used.</t>
          <t>The process described in <xref section="8.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm" format="default"/> 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" format="default"/>).</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" numbered="true" toc="default">
          <name>Cancellation</name>
          <t>When canceling a group observation (see <xref target="ssec-server-side-cancellation" format="default"/>), 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" format="default"/>. 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" numbered="true" toc="default">
        <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" format="default"/>, with the following differences.</t>
        <section anchor="ssec-client-side-informative-oscore" numbered="true" toc="default">
          <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" format="default"/>, 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" format="default"/>.</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" format="default"/>, 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" format="default"/>.</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" format="default"/>.</li>
                <li>The client MUST NOT take any further process as normally expected according to <xref target="RFC7252" format="default"/>. That is, the client skips step 8 in <xref section="8.2" sectionFormat="of" target="RFC8613" format="default"/>. 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" format="default"/>). 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" format="default"/>, 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" format="default"/>, just like it would for the multicast notifications transmitted as CoAP messages on the wire (see <xref target="ssec-client-side-notifications-oscore" format="default"/>). 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" numbered="true" toc="default">
          <name>Notifications</name>
          <t>After having successfully processed the informative response as defined in <xref target="ssec-client-side-informative-oscore" format="default"/>, 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" format="default"/>, 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" format="default"/> 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" format="default"/>).</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" format="default"/>).</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" format="default"/>).</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" format="default"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-example-with-security" numbered="true" toc="default">
      <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 name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
      <name>Intermediaries</name>
      <t>This section specifies how the approach presented in <xref target="sec-server-side" format="default"/> and <xref target="sec-client-side" format="default"/> 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" format="default"/> and <xref section="5" sectionFormat="of" target="RFC7641" format="default"/>, 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" format="default"/>, 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_addr' and 'cli_port' element of 'req_info' under the 'tp_info' parameter, respectively (see <xref target="ssssec-udp-transport-specific" format="default"/>). 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" format="default"/>. 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" format="default"/>.</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" numbered="true" toc="default">
      <name>Intermediaries Together with End-to-End Security</name>
      <t>As defined in <xref target="sec-secured-notifications" format="default"/>, 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" format="default"/>, 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" format="default"/>, 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" format="default"/>.</t>
      <section anchor="ltmr-option" numbered="true" toc="default">
        <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" format="default"/>, 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" name="" type="" alt=""><![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" format="default"/> for the 'tp_info' parameter of the informative response (see <xref target="ssec-server-side-informative" format="default"/>).</t>
        <t>The Listen-To-Multicast-Responses option is of class U for OSCORE <xref target="RFC8613" format="default"/><xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>.</t>
      </section>
      <section anchor="intermediaries-e2e-security-processing" numbered="true" toc="default">
        <name>Message Processing</name>
        <t>Compared to <xref target="intermediaries" format="default"/>, 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" format="default"/>:</t>
        <ul spacing="normal">
          <li>The client performs all the additional decryption and verification steps of <xref target="ssec-client-side-informative-oscore" format="default"/> 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" format="default"/>), 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_addr' 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" format="default"/>.</t>
      </section>
    </section>
    <section anchor="informative-response-params" numbered="true" toc="default">
      <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" format="default"/>.</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 align="center">
        <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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></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" format="default"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="transport-protocol-identifiers" numbered="true" toc="default">
      <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" format="default"/>.</t>
      <t>According to the encoding specified in <xref target="sssec-transport-specific-encoding" format="default"/>, 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 name="" type="" align="left" alt=""><![CDATA[
+-----------+-------------+-------+----------+-----------+-----------+
| Transport | Description | Value | Srv Addr | Req Info  | Reference |
| Protocol  |             |       |          |           |           |
+-----------+-------------+-------+----------+-----------+-----------+
| Reserved  | This value  | 0     |          |           | [This     |
|           | is reserved |       |          |           | document] |
|           |             |       |          |           |           |
| UDP       | UDP is used | 1     | tp_id    |  token    | [This     |
|           | as per      |       | srv_host |  cli_host | document] |
|           | RFC7252     |       | srv_port | ?cli_port |           |
+-----------+-------------+-------+----------+-----------+-----------+
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>In addition to the security considerations from <xref target="RFC7252" format="default"/><xref target="RFC7641" format="default"/><xref target="I-D.ietf-core-groupcomm-bis" format="default"/><xref target="RFC8613" format="default"/><xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, the following considerations hold for this document.</t>
      <section anchor="unsecured-multicast-notifications" numbered="true" toc="default">
        <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" format="default"/> 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" format="default"/> 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" format="default"/> 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" numbered="true" toc="default">
        <name>Secured Multicast Notifications</name>
        <t>If multicast notifications are protected using Group OSCORE as per <xref target="sec-secured-notifications" format="default"/>, 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" format="default"/>), 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" numbered="true" toc="default">
        <name>Listen-To-Multicast-Responses Option</name>
        <t>The CoAP option Listen-To-Multicast-Responses defined in <xref target="ltmr-option" format="default"/> is of class U for OSCORE and Group OSCORE <xref target="RFC8613" format="default"/><xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>.</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" format="default"/>), 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" format="default"/>) and/or DTLS <xref target="RFC6347" format="default"/><xref target="I-D.ietf-tls-dtls13" format="default"/>.</t>
      </section>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <section anchor="media-type" numbered="true" toc="default">
        <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" format="default"/>, when carrying parameters encoded in CBOR. This registration follows the procedures specified in <xref target="RFC6838" format="default"/>.</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" format="default"/> of [this document].</li>
          <li>Security considerations: See <xref target="sec-security-considerations" format="default"/> of [this document].</li>
          <li>Interoperability considerations: N/A</li>
          <li>Published specification: [this document]</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" format="default"/> of [this document].</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" numbered="true" toc="default">
        <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: [this document]</t>
      </section>
      <section anchor="iana-coap-options" numbered="true" toc="default">
        <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" name="" type="" alt=""><![CDATA[
+--------+--------------------------------------+-----------------+
| Number |                 Name                 |    Reference    |
+--------+--------------------------------------+-----------------+
|  TBD   |  Multicast-Response-Feedback-Divider | [This document] |
+--------+--------------------------------------+-----------------+
|  TBD   |  Listen-To-Multicast-Responses       | [This document] |
+--------+--------------------------------------+-----------------+
]]></artwork>
      </section>
      <section anchor="iana-informative-response-params" numbered="true" toc="default">
        <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" format="default"/>. Expert review guidelines are provided in <xref target="iana-review" format="default"/>.</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" format="default"/>. The "Reference" column for all of these entries refers to sections of this document.</t>
      </section>
      <section anchor="iana-transport-protocol-identifiers" numbered="true" toc="default">
        <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" format="default"/>. Expert review guidelines are provided in <xref target="iana-review" format="default"/>. 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" format="default"/>. 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" format="default"/>. The "Reference" column for all of these entries refers to sections of this document.</t>
      </section>
      <section anchor="iana-review" numbered="true" toc="default">
        <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-groupcomm-bis.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-groupcomm-bis-06.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 month="March" day="7" 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-06"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-oscore-groupcomm.xml" 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 month="March" day="7" 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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ace-key-groupcomm-oscore.xml" target="https://www.ietf.org/archive/id/draft-ietf-ace-key-groupcomm-oscore-13.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 month="March" day="7" 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
   secured with Group Object Security for Constrained RESTful
   Environments (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-13"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oscore-profile" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ace-oscore-profile.xml" 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 month="May" day="6" 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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4944.xml">
          <front>
            <title>Transmission of IPv6 Packets over IEEE 802.15.4 Networks</title>
            <author initials="G." surname="Montenegro" fullname="G. Montenegro">
              <organization/>
            </author>
            <author initials="N." surname="Kushalnagar" fullname="N. Kushalnagar">
              <organization/>
            </author>
            <author initials="J." surname="Hui" fullname="J. Hui">
              <organization/>
            </author>
            <author initials="D." surname="Culler" fullname="D. Culler">
              <organization/>
            </author>
            <date year="2007" month="September"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6838.xml">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author initials="N." surname="Freed" fullname="N. Freed">
              <organization/>
            </author>
            <author initials="J." surname="Klensin" fullname="J. Klensin">
              <organization/>
            </author>
            <author initials="T." surname="Hansen" fullname="T. Hansen">
              <organization/>
            </author>
            <date year="2013" month="January"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7252.xml">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author initials="Z." surname="Shelby" fullname="Z. Shelby">
              <organization/>
            </author>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <date year="2014" month="June"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7641.xml">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </author>
            <date year="2015" month="September"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7967.xml">
          <front>
            <title>Constrained Application Protocol (CoAP) Option for No Server Response</title>
            <author initials="A." surname="Bhattacharyya" fullname="A. Bhattacharyya">
              <organization/>
            </author>
            <author initials="S." surname="Bandyopadhyay" fullname="S. Bandyopadhyay">
              <organization/>
            </author>
            <author initials="A." surname="Pal" fullname="A. Pal">
              <organization/>
            </author>
            <author initials="T." surname="Bose" fullname="T. Bose">
              <organization/>
            </author>
            <date year="2016" month="August"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8085.xml">
          <front>
            <title>UDP Usage Guidelines</title>
            <author initials="L." surname="Eggert" fullname="L. Eggert">
              <organization/>
            </author>
            <author initials="G." surname="Fairhurst" fullname="G. Fairhurst">
              <organization/>
            </author>
            <author initials="G." surname="Shepherd" fullname="G. Shepherd">
              <organization/>
            </author>
            <date year="2017" month="March"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author initials="M." surname="Cotton" fullname="M. Cotton">
              <organization/>
            </author>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <author initials="T." surname="Narten" fullname="T. Narten">
              <organization/>
            </author>
            <date year="2017" month="June"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8288.xml">
          <front>
            <title>Web Linking</title>
            <author initials="M." surname="Nottingham" fullname="M. Nottingham">
              <organization/>
            </author>
            <date year="2017" month="October"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8613.xml">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author initials="G." surname="Selander" fullname="G. Selander">
              <organization/>
            </author>
            <author initials="J." surname="Mattsson" fullname="J. Mattsson">
              <organization/>
            </author>
            <author initials="F." surname="Palombini" fullname="F. Palombini">
              <organization/>
            </author>
            <author initials="L." surname="Seitz" fullname="L. Seitz">
              <organization/>
            </author>
            <date year="2019" month="July"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization/>
            </author>
            <date year="2020" month="December"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ace-oauth-authz.xml" 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 month="November" day="8" 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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-coap-pubsub.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-coap-pubsub-09.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 month="September" day="30" year="2019"/>
            <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.

   There is work in progress to resolve some of the transfer layer
   issues by using a more RESTful approach.

   Please see https://github.com/core-wg/pubsub/blob/master/proposal.txt

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-09"/>
        </reference>
        <reference anchor="I-D.ietf-core-resource-directory" target="https://www.ietf.org/archive/id/draft-ietf-core-resource-directory-28.txt">
          <front>
            <title>CoRE Resource Directory</title>
            <author fullname="Christian Amsüss">
	 </author>
            <author fullname="Zach Shelby">
              <organization>ARM</organization>
            </author>
            <author fullname="Michael Koster">
              <organization>SmartThings</organization>
            </author>
            <author fullname="Carsten Bormann">
              <organization>Universitaet Bremen TZI</organization>
            </author>
            <author fullname="Peter van der Stok">
              <organization>consultant</organization>
            </author>
            <date month="March" day="7" year="2021"/>
            <abstract>
              <t>   In many 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, lookup and remove information on resources.  Furthermore,
   new target attributes useful in conjunction with an RD are defined.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-resource-directory-28"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-discovery" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.tiloca-core-oscore-discovery.xml" 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 month="March" day="7" 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-tls-dtls13" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-tls-dtls13.xml" target="https://www.ietf.org/internet-drafts/draft-ietf-tls-dtls13-43.txt">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author initials="E" surname="Rescorla" fullname="Eric Rescorla">
              <organization/>
            </author>
            <author initials="H" surname="Tschofenig" fullname="Hannes Tschofenig">
              <organization/>
            </author>
            <author initials="N" surname="Modadugu" fullname="Nagendra Modadugu">
              <organization/>
            </author>
            <date year="2021" month="April" day="30"/>
            <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 intentionally 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="Internet-Draft" value="draft-ietf-tls-dtls13-43"/>
        </reference>
        <reference anchor="I-D.ietf-core-coral" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-coral.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-coral-04.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 month="October" day="25" year="2021"/>
            <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-04"/>
        </reference>
        <reference anchor="I-D.amsuess-core-cachable-oscore" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.amsuess-core-cachable-oscore.xml" target="https://www.ietf.org/archive/id/draft-amsuess-core-cachable-oscore-04.txt">
          <front>
            <title>Cacheable OSCORE</title>
            <author fullname="Christian Amsüss">
	 </author>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date month="March" day="6" 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-04"/>
        </reference>
        <reference anchor="I-D.ietf-cose-cbor-encoded-cert" target="https://www.ietf.org/archive/id/draft-ietf-cose-cbor-encoded-cert-03.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 month="January" day="10" 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-03"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-capable-proxies" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.tiloca-core-oscore-capable-proxies.xml" target="https://www.ietf.org/archive/id/draft-tiloca-core-oscore-capable-proxies-02.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 month="March" day="7" 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 OSCORE is used to protect CoAP
   messages also between an origin application endpoint and an
   intermediary, or between two intermediaries.  Besides, it defines how
   a CoAP message can be double-protected through "OSCORE-in-OSCORE",
   i.e., 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 applies to 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-02"/>
        </reference>
        <reference anchor="RFC6347" target="https://www.rfc-editor.org/info/rfc6347" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6347.xml">
          <front>
            <title>Datagram Transport Layer Security Version 1.2</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization/>
            </author>
            <author initials="N." surname="Modadugu" fullname="N. Modadugu">
              <organization/>
            </author>
            <date year="2012" month="January"/>
            <abstract>
              <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.  This document updates DTLS 1.0 to work with TLS version 1.2.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6347"/>
          <seriesInfo name="DOI" value="10.17487/RFC6347"/>
        </reference>
        <reference anchor="RFC6690" target="https://www.rfc-editor.org/info/rfc6690" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6690.xml">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author initials="Z." surname="Shelby" fullname="Z. Shelby">
              <organization/>
            </author>
            <date year="2012" month="August"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author initials="M." surname="Jones" fullname="M. Jones">
              <organization/>
            </author>
            <author initials="J." surname="Bradley" fullname="J. Bradley">
              <organization/>
            </author>
            <author initials="N." surname="Sakimura" fullname="N. Sakimura">
              <organization/>
            </author>
            <date year="2015" month="May"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7925.xml">
          <front>
            <title>Transport Layer Security (TLS) / Datagram Transport Layer Security (DTLS) Profiles for the Internet of Things</title>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig" role="editor">
              <organization/>
            </author>
            <author initials="T." surname="Fossati" fullname="T. Fossati">
              <organization/>
            </author>
            <date year="2016" month="July"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8610.xml">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author initials="H." surname="Birkholz" fullname="H. Birkholz">
              <organization/>
            </author>
            <author initials="C." surname="Vigano" fullname="C. Vigano">
              <organization/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <date year="2019" month="June"/>
            <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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8392.xml">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author initials="M." surname="Jones" fullname="M. Jones">
              <organization/>
            </author>
            <author initials="E." surname="Wahlstroem" fullname="E. Wahlstroem">
              <organization/>
            </author>
            <author initials="S." surname="Erdtman" fullname="S. Erdtman">
              <organization/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig">
              <organization/>
            </author>
            <date year="2018" month="May"/>
            <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="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.-Y." surname="Ni" fullname="Sze-Yao Ni">
              <organization/>
            </author>
            <author initials="Y.-C." surname="Tseng" fullname="Yu-Chee Tseng">
              <organization/>
            </author>
            <author initials="Y.-S." surname="Chen" fullname="Yuh-Shyan Chen">
              <organization/>
            </author>
            <author initials="J.-P." 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" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-href.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-href-09.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 month="January" day="15" 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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-09"/>
        </reference>
      </references>
    </references>
    <section anchor="appendix-different-sources" numbered="true" toc="default">
      <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" numbered="true" toc="default">
        <name>Topic Discovery in Publish-Subscribe Settings</name>
        <t>In a Publish-Subscribe scenario <xref target="I-D.ietf-core-coap-pubsub" format="default"/>, a group observation can be discovered along with topic metadata. For instance, a discovery step can make the following metadata available.</t>
        <t>This example assumes a CoRAL namespace <xref target="I-D.ietf-core-coral" format="default"/>, that contains properties analogous to those in the content-format application/informative-response+cbor.</t>
        <t>[ The reported CoRAL example is based on the textual representation used until  version -03 of <xref target="I-D.ietf-core-coral" format="default"/>. This will be revised to use the CBOR diagnostic notation instead. ]</t>
        <figure anchor="discovery-pub-sub">
          <name>Group observation discovery in a Pub-Sub scenario</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
Request:

    GET </ps/topics?rt=oic.r.temperature>
    Accept: CoRAL

Response:

    2.05 Content
    Content-Format: CoRAL

    rdf:type <http://example.org/pubsub/topic-list>
    topic </ps/topics/1234> {
        tp_info [1, h"7b", h"20010db80100..0001", 5683,
                 h"ff35003020010db8..1234", 5683],
        ph_req h"0160..",
        last_notif h"256105.."
    }
]]></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.</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" numbered="true" toc="default">
        <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 name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
      <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" format="default"/>.</t>
      <t>In particular, <xref target="appendix-psuedo-code-counting-client" format="default"/> describes the algorithm for the client side, while <xref target="appendix-psuedo-code-counting-client-constrained" format="default"/> describes an optimized version for constrained clients. Finally, <xref target="appendix-psuedo-code-counting-server" format="default"/> describes the algorithm for the server side.</t>
      <section anchor="appendix-psuedo-code-counting-client" numbered="true" toc="default">
        <name>Client Side</name>
        <artwork name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
        <name>Client Side - Optimized Version</name>
        <artwork name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
        <name>Server Side</name>
        <artwork name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
      <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" format="default"/>).</t>
      <t>Additionally to what defined in <xref target="sec-server-side" format="default"/>, the CBOR map in the informative response payload contains the following fields, whose CBOR labels are defined in <xref target="informative-response-params" format="default"/>.</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" format="default"/> 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" format="default"/>.  </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" format="default"/>.  </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" format="default"/>.</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" format="default"/>), 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" format="default"/>. 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" format="default"/>)</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" format="default"/> and <xref target="ssec-server-side-cancellation-oscore" format="default"/>). 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" format="default"/>.</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" format="default"/>), 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" format="default"/>). 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" format="default"/>). 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" format="default"/> and <xref target="ssec-server-side-cancellation-oscore" format="default"/>), 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" format="default"/>. The server can facilitate the clients by providing them information about the OSCORE group to join, as described in <xref target="sec-inf-response" format="default"/>.</t>
    </section>
    <section anchor="deterministic-phantom-Request" numbered="true" toc="default">
      <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.</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" format="default"/>), before sending an observe registration request to the server.</t>
      <t>If Group OSCORE is used to protect the group observation (see <xref target="sec-secured-notifications" format="default"/>), and the OSCORE group supports the concept of Deterministic Client <xref target="I-D.amsuess-core-cachable-oscore" format="default"/>, then the server and each client in the OSCORE group can independently protect the phantom observation request possibly available as plain CoAP message. To this end, they use the approach defined in <xref section="3" sectionFormat="of" target="I-D.amsuess-core-cachable-oscore" format="default"/> to compute a protected deterministic request, against which the protected multicast notifications will match for the group observation in question.</t>
      <t>Note that the same deterministic request sent by each client as registration request is, in terms of transport-independent information, identical to the phantom registration request. Thus, the informative response sent by the server may omit the 'ph_req' parameter (see <xref target="ssec-server-side-informative" format="default"/>). 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" format="default"/> 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" format="default"/>.</li>
        <li>'det_senderId' and 'det_hash_alg', defined in <xref section="4" sectionFormat="of" target="I-D.amsuess-core-cachable-oscore" format="default"/>. 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" format="default"/>).</li>
      </ul>
    </section>
    <section anchor="intermediaries-example" numbered="true" toc="default">
      <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" format="default"/> 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 name="" type="" align="left" alt=""><![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" format="default"/>, 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" numbered="true" toc="default">
      <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" format="default"/> 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 name="" type="" align="left" alt=""><![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" format="default"/>, 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" numbered="true" toc="default">
      <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" format="default"/>), which is protected with the pairwise mode of Group OSCORE as defined in <xref target="I-D.amsuess-core-cachable-oscore" format="default"/>.</t>
      <section anchor="intermediaries-example-e2e-security-det-intro" numbered="true" toc="default">
        <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" format="default"/> 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" format="default"/>, and stores it locally as one of its issued phantom requests, without starting the group observation yet.</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" format="default"/>).</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 compute the protected version to use from the retrieved plain version.</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. However, unlike the case considered in <xref target="intermediaries-e2e-security" format="default"/> 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" format="default"/>, 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" format="default"/>). 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 and signature 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" format="default"/>, 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" format="default"/>, since the deterministic phantom request would produce a cache hit as per <xref target="I-D.amsuess-core-cachable-oscore" format="default"/>. 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" numbered="true" toc="default">
        <name>Message Exchange</name>
        <t>The same assumptions and notation used in <xref target="sec-example-with-security" format="default"/> 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 upon receiving a registration request from a first client that wishes to start a traditional observation on the resource /r.</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 name="" type="" align="left" alt=""><![CDATA[
C1      C2      P         S
|       |       |         |
|       |       |         |  (The value of the resource /r is "1234")
|       |       |         |
|       |       |         |  (The server prepares a deterministic
|       |       |         |   phantom request 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 allocates the available
|       |       |         |   Token value 0x7b .)
|       |       |         |
|       |       |         |  (S sends to itself PH_REQ, with Token 0x7b
|       |       |         |   and as coming from the IP multicast
|       |       |         |   address GRP_ADDR; now the OSCORE
|       |       |         |   processing does happen, 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 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" numbered="true" toc="default">
      <name>Document Updates</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION.</t>
      <section anchor="sec-02-03" numbered="true" toc="default">
        <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" numbered="true" toc="default">
        <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" numbered="true" toc="default">
        <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" toc="default">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank Carsten Bormann, Klaus Hartke, Jaime Jimenez, John Mattsson, Ludwig Seitz, Jim Schaad and Goeran 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:
H4sIAGdJJmIAA+y9WXfbVrYg/K5fgZbX15YckhpsObYcp64iyYlu2bJLkiuV
rtTSAklQRJkkeAHQssrO/Vn91G/9x3qPZwAOQEp26qbuF60MEgmcYZ999jx0
u921Mi0nyX70ul8k+fskOs3KdJQO4jLNZkUUF9FhdvAmerWYlPBhUUZnSTGH
b5JiLe738+S9fdM+442xNswGs3gKUwzzeFR206QcdQdZnnQzfrE71Re7M/fF
7iQuk6JcW1u7FxVlPBtexpNsBuOU+SJZW0vnOf1alLvb20+3d9fiPIn3o5NZ
meSzpFy7vtqHtZ8dRz9m+bt0dhV9n2eL+dq7a/tM9whXtAbz7cMMw7XFfIhT
7kdf7+7tdqKvHz/aWVsbZEN4ez9awLKfrM3T/Qh+7kWDeBYtiiSK8zy+iTbS
URRPJtFNUmxGWR6N42IcjZMc1hlFZTbYx2/g1yLLyzwZFfs0xjAZxbD3Ap7Q
72+m/DX+uRYvynGW769F9NOV/0dROoMnXvWii3SSDWLzMUP5VZwPsupXWQ47
ODs5P44OvjMfFrCUBLZ+UsSjv2f5sLiKAczR7q55YpCWN/vRH1MAv/0sG8Is
58fdncePHm1H57C7d+NsMnUeWMzKHN47v06Gycx8nkzjdLIfTXF9vZLW9295
2iuS8P7OetEP//d/X00Ws2Flh2fpuzgf1r/9DW0ypyX2xhmtsG2bh73oYFr8
3/9TFJVdHo5zWFIKa61+j/us7e+HbDKBOwJ/9qKd3a1Hle39OU1ms+r+drZ3
t+s7OoArladxdUsDXc+/xdNikRRFb5BNw3t60YvewF2d9tNZWtnVizyeDZJi
EAeeoPM7ztNBUWSz0BleZHkxjqczPcOHv+oZjnSpvbku9d8SWR3tfW2W5VOg
Ve8TPI6T7lHP0rYrJDbw0LTbT4v611nhP+U9EQ+S7rvkxhmDH689JKPM82yU
TujrsxeHuzs7T+XXR08fPZJfHz95+ER+ReKmvwKF01+fPv5afn2y/WRPf93Z
fWx+/VoHe7L7RAd78njnof769BFNfPj6/Lh3MLnK8rQcTwtGVZ+U0UmfHJwe
0N9IdAHc8UTuiHAkHCey4/BXcX6FmDAuy3mxv7V1fX3dA5SMezDiVlwU6dVs
mszKYmuQFQn9p/dhXE4n92J3HFrhH5Ob3sXNPPnMBcIwEQ3zeevD8y5hGF3d
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
J9PsvShUq5AnJWXGn1DDx6bRV5LwG4ZlQgink8fahgBY1PvkBkWI1rtdW5AT
OVG3uNYryweUOi+uqgJx9GhqQBObQ62dVxTLpT3HBGs8XfeLSw5LOHwFbL+V
8C+gziyCkVfKyoyLorFdg5yLgGWpGboWGbeKVffzSw278QV2W58fzyaQXOXu
rR7R1mhx8EPYfquhac0Gk1tA606hCr4f+hdxbgeay7yxXkk0StSTD7vcLV5j
tYfZYDHlRiboviBv1ELrYkrnA7c7d9Beo+aweg3zRuuNGG/YCEhWQmsqL9hk
T0zfWuFU7MMO54DS1MmI3WqmafWCaqBjh5s5LRAreFadjwRabmG/Up6m1/mN
7S+l076aFRqlDdx3omra/sQL/yMsXH69wOnJyCs10ddqVtpPwV8rf8DPmpt0
KdNt218ZPeWPZYey5iZPyjs79ldMhYxWH8tJo5R3du88FspXONZln+svf4oe
2rEWcGduMZaTnCnvPLK/lpV11boirrmpmfLc3q3ejwt3dnzu8a3eH78bekls
n6Kv7a8Iii0epen9AVDFy9G0tC898d9ftn9g9ZeAtJfx5Iqfe3qr+el9eZdf
2tm+9ftMxfT9HfN+Fd8D71/NL027cnl/17w/jed2Xa39yWEh+ftLBKazkYfm
1yqCLxsotW36cKBHdxoo+eDgJa9oz/xavSYtAwF3uVCahsJ9mQ2yiWU45I22
AtFcHujaPTTzlyKbev13zDQ6SuSMooQexUzDlm/nS7gbbzpwOy6JVExejTu4
QTrCMKpdATzvyNCPgUeMIGGq0x4Ev5yNdio8FOWLK9ML8haMtKNBD+9T1S38
yB/sk5YnwCALfKXgRlmujCwb9PoVN59qpcKu68n0vZpf1T9tepjcvwbj0L0s
e4TVfYr+TCD5FJ3n76MDAD4x6P8gtPeYNXltza2o5HB+qvzf/9X//cttCuQ/
xOYhTkD3jo/XyAKNq/krPc2r8b8hY4SMunRTes3/VhvmzrD5FL09emO+wd81
0U+Fkk8k+gzlVRLXl21KOmlWVoO3bYwGC/gI9Rb5vXlTkhQYGEYQ6w+q/vw6
B17N+mXScsngEJf6RYCy2su4TkTereVPqXSiWWnfDuPCHHjfc/SRm0jJmpEM
5j/MCrHTtY5/pbTJqsvV+Fq7/bSQJ1d1zlZdp5VVjDPTC8thS+zRfTuTGF6n
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
8Xht6f8iznhAMGYCAA==

-->

</rfc>
