<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-observe-multicast-notifications-14" category="std" consensus="true" submissionType="IETF" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Observe Multicast Notifications">Observe Notifications as CoAP Multicast Responses</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-14"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>164 40</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>164 40</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>164 40</code>
          <country>Sweden</country>
        </postal>
        <email>francesca.palombini@ericsson.com</email>
      </address>
    </author>
    <date year="2026" month="April" day="22"/>
    <area>WIT</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 151?>

<t>The Constrained Application Protocol (CoAP) allows clients to "observe" resources at a server and to receive notifications as unicast responses upon changes of the resource state. In some use cases, such as those based on publish-subscribe, it would be convenient for the server to send a single notification addressed to all the clients observing the same target resource. This document updates RFC7252 and RFC7641, and it defines how a server sends observe notifications as response messages over multicast, synchronizing  all the observers of the same resource on the same shared Token value. Besides, this document defines how the security protocol Group Object Security for Constrained RESTful Environments (Group OSCORE) can be used to protect multicast notifications end-to-end between the server and the observer clients.</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>
    <?line 155?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> has been extended with a number of mechanisms, including resource Observation <xref target="RFC7641"/>. This enables CoAP clients to register at a CoAP server as "observers" of a resource, and hence to be automatically notified with an unsolicited response upon changes of the resource state.</t>
      <t>CoAP supports group communication <xref target="I-D.ietf-core-groupcomm-bis"/>, e.g., over IP multicast. This includes support for Observe registration requests over multicast, in order for clients to efficiently register as observers of a resource hosted at multiple servers.</t>
      <t>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 the same target resource to multiple observers as responses over IP multicast.</t>
      <t>For instance, in the publish-subscribe architecture for CoAP <xref target="I-D.ietf-core-coap-pubsub"/>, multiple clients can subscribe to a topic, by observing the related resource hosted at the responsible broker. When new data is published on that topic, it would be convenient for the broker to send a single multicast notification at once, addressed to all the subscriber clients observing the resource related to that topic.</t>
      <t>A different use case concerns clients observing the same registration resource at the CoRE Resource Directory <xref target="RFC9176"/>. For example, multiple clients can benefit from observation for discovering (to-be-created) groups that use the security protocol Group Object Security for Constrained RESTful Environments (Group OSCORE) <xref target="I-D.ietf-core-oscore-groupcomm"/>, by retrieving from the Resource Directory updated links and descriptions to join those groups through the respective Group Manager <xref target="I-D.tiloca-core-oscore-discovery"/>.</t>
      <t>More in general, multicast notifications would be beneficial whenever several CoAP clients observe the same target resource at a CoAP server, and thus they could all be notified at once by means of a single response message. However, CoAP does not originally define response messages addressed to multiple clients, e.g., over IP multicast. This document fills this gap and provides the following twofold contribution.</t>
      <t>First, it updates <xref target="RFC7252"/> and <xref target="RFC7641"/>, by defining a method to deliver observe notifications as CoAP responses addressed to multiple clients, e.g., over IP multicast. In particular, the group of potential observers entrusts the server to manage the Token space for multicast notifications. Building on that, the server provides all the observers of a target resource with the same Token value to bind to their own observation, by sending a unicast informative response to each observer client. That Token value is then used in every multicast notification for the target resource under that observation.</t>
      <t>Second, this document defines how to use Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> to protect multicast notifications end-to-end between the server and the observer clients. This is also achieved by means of the unicast informative response mentioned above, which additionally includes parameter values used by the server to protect every multicast notification for the target resource by using Group OSCORE. This provides a secure binding between each of such notifications and the observation of each of the clients.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>Readers are expected to be familiar with terms and concepts described in CoAP <xref target="RFC7252"/>, group communication for CoAP <xref target="I-D.ietf-core-groupcomm-bis"/>, Observe <xref target="RFC7641"/>, Concise Data Definition Language (CDDL) <xref target="RFC8610"/>, Concise Binary Object Representation (CBOR) <xref target="RFC8949"/>, Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/>, Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>, and Constrained Resource Identifiers (CRIs) <xref target="I-D.ietf-core-href"/>.</t>
        <t>This document additionally defines the following terminology.</t>
        <ul spacing="normal">
          <li>
            <t>Traditional observation: a resource observation associated with a single observer client, as defined in <xref target="RFC7641"/>.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>Phantom request: the CoAP request message that the server would have received to start a group observation on one of its resources. A phantom request is generated inside the server and does not hit the wire.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-prereq">
      <name>Prerequisites</name>
      <t>In order to use multicast notifications as defined in this document, the following prerequisites have to be fulfilled.</t>
      <ul spacing="normal">
        <li>
          <t>The server and the clients need to be on a network where multicast notifications can reach a sufficiently large portion of the clients.  </t>
          <t>
This document focuses on a network setup where the clients are capable of listening to multicast traffic and can directly receive multicast notifications.  </t>
          <t>
Alternative network setups may leverage intermediaries such as proxies, e.g., in order to accommodate clients that are not able to directly listen to multicast traffic. How the method specified in this document can be used in such setups is discussed in <xref target="I-D.ietf-core-multicast-notifications-proxy"/>.</t>
        </li>
        <li>
          <t>The server needs to be provisioned with multicast addresses whose Token space is placed under its control. On general purpose networks, unmanaged multicast addresses such as "All CoAP Nodes" (see <xref section="12.8" sectionFormat="of" target="RFC7252"/>) are not suitable for this purpose.</t>
        </li>
        <li>
          <t>The server and the clients need to agree out-of-band that multicast notifications may be used.  </t>
          <t>
This document does not describe a way for a client to influence the server's decision to start group observations and thus to use multicast notifications. This is done on purpose.  </t>
          <t>
That is, the method specified in this document is expected to be used in situations where sending individual notifications is not feasible, or is not preferred beyond a certain number of clients observing a target resource.  </t>
          <t>
If applications arise where a negotiation between the clients and the server does make sense, those applications are welcome to specify additional means for clients to opt in for receiving multicast notifications.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-variants">
      <name>High-Level Overview of Available Variants</name>
      <t>The method defined in this document fundamentally enables a server to set up a group observation. This is associated with a phantom observation request that is generated by the server and to which the multicast notifications of the group observation are bound.</t>
      <t>Consistent with the scope of this document, the following assumes a network setup where the clients participating in the group observation are capable of listening to multicast traffic. In such a setup, the clients directly receive multicast notifications from the server. Alternative network setups that rely on intermediaries such as proxies are discussed in <xref target="I-D.ietf-core-multicast-notifications-proxy"/>.</t>
      <t>While the server can provide the phantom request in question to the interested clients as they reach out for registering to the group observation, the server may alternatively distribute the phantom request in advance by alternative means (e.g., see <xref target="appendix-different-sources"/>). Clients that have already retrieved the phantom request can immediately start listening to multicast notifications.</t>
      <t>The rest of this section provides an overview of the available variants to enforce a group observation, which differ as to whether exchanged messages are protected end-to-end between the observer clients and the server.</t>
      <ul spacing="normal">
        <li>
          <t>Variant without end-to-end security - Messages pertaining to the group observation are not protected. This basic case is defined in <xref target="sec-server-side"/> and <xref target="sec-client-side"/> from the server and the client side, respectively. An example is provided in <xref target="sec-example-no-security"/>.</t>
        </li>
        <li>
          <t>Variant with end-to-end security - Messages pertaining to the group observation are protected end-to-end between the clients and the server, by using the security protocol Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>. This case is defined in <xref target="sec-secured-notifications"/>. An example is provided in <xref target="sec-example-with-security"/>.  </t>
          <t>
If the participating endpoints using Group OSCORE also support the concept of Deterministic Client <xref target="I-D.ietf-core-cacheable-oscore"/>, then the possible early distribution of the phantom request can specifically make available its smaller, plain version. Consequently, all the clients are able to compute the same protected phantom request to use (see <xref target="deterministic-phantom-Request"/>).</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-server-side">
      <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>
          <t>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.</t>
        </li>
        <li>
          <t>When a certain number of traditional observations has been established on the target resource, the server decides to make the corresponding observer clients part of a group observation on that resource.</t>
        </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. The server is expected to keep the counter up-to-date over time, for instance by using the method described in <xref target="sec-rough-counting"/>. This allows the server to possibly terminate a group observation if, at some point in time, not enough clients are estimated to be still active and interested.</t>
      <section anchor="ssec-server-side-request">
        <name>Request</name>
        <t>Assuming that the server 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>
            <t>The server builds a phantom observation request, i.e., a GET request with an Observe Option set to 0 (register).</t>
          </li>
          <li>
            <t>The server selects an available value T, from the Token space of a CoAP endpoint used for messages that have:  </t>
            <ul spacing="normal">
              <li>
                <t>As source address and port number, the IP multicast address GRP_ADDR and port number GRP_PORT.</t>
              </li>
              <li>
                <t>As destination address and port number, the server address SRV_ADDR and port number SRV_PORT, intended for accessing the target resource.</t>
              </li>
            </ul>
            <t>
This Token space is under exclusive control of the server.</t>
          </li>
          <li>
            <t>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 it was sent by the group of observers, i.e., with GRP_ADDR as source address and GRP_PORT as source port.</t>
          </li>
          <li>
            <t>Upon processing the self-generated phantom registration request, the server interprets it as an Observe registration request from the group of potential observer clients. In particular, from then on, the server <bcp14>MUST</bcp14> use T as its own local Token value associated with that observation, with respect to the (previous hop towards the) clients.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>The server builds a CoAP response message INIT_NOTIF as the initial multicast notification for the target resource, in response to the phantom observation request. This message is formatted like other multicast notifications (see <xref target="ssec-server-side-notifications"/>) and <bcp14>MUST</bcp14> include the current representation of the target resource as its payload.  </t>
            <t>
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 which the server deletes the message INIT_NOTIF.</t>
          </li>
        </ol>
      </section>
      <section anchor="ssec-server-side-informative">
        <name>Informative Response</name>
        <t>After having started a group observation on a target resource, the server proceeds as follows.</t>
        <t>For each traditional observation ongoing on the target resource, the server <bcp14>MAY</bcp14> cancel that observation. Then, the server considers the corresponding clients as now taking part in the group observation, for which it increases the corresponding observer counter accordingly.</t>
        <t>The server sends to each of such clients an informative response message, encoded as a unicast response with response code 5.03 (Service Unavailable). As per <xref target="RFC7641"/>, such a response does not include an Observe Option. The response <bcp14>MUST</bcp14> be a Confirmable message sent as a separate response (see <xref section="5.2.2" sectionFormat="of" target="RFC7252"/>), <bcp14>MUST NOT</bcp14> have link-local source or destination addresses, and <bcp14>MUST NOT</bcp14> provide link-local or site-local addresses in the transport-specific information specified in its payload (see below).</t>
        <t>The Content-Format of the informative response is set to "application/informative-response+cbor", which is registered in <xref target="content-format"/>. The payload of the informative response is a CBOR map, whose fields use the CBOR abbreviations that are defined in <xref target="informative-response-params"/>.</t>
        <t>When using the method specified in this document, the CBOR map conveyed as the payload of the informative response includes the following parameters with the semantics defined below. Other specifications may define different uses of the informative response for providing alternative information that is relevant to other protocols and applications.</t>
        <ul spacing="normal">
          <li>
            <t>'tp_info', with value a CBOR array. This includes the transport-specific information required to correctly receive multicast notifications that are bound to the phantom observation request. Typically, this comprises the Token value associated with the group observation, as well as the source and destination addressing information of the related multicast notifications. The CBOR array is formatted as defined in <xref target="sssec-transport-specific-encoding"/>. This parameter <bcp14>MUST</bcp14> be included.</t>
          </li>
          <li>
            <t>'ph_req', with value the byte serialization of the transport-independent information of the phantom observation request (see <xref target="ssec-server-side-request"/>), encoded as a CBOR byte string. The value of the CBOR byte string is formatted as defined in <xref target="sssec-transport-independent-encoding"/>.  </t>
            <t>
This parameter <bcp14>MAY</bcp14> be omitted if the phantom request is, in terms of transport-independent information, identical to the registration request from the client. Otherwise, this parameter <bcp14>MUST</bcp14> 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>
            <t>'last_notif', with value the byte serialization of the transport-independent information of the latest multicast notification for the target resource, encoded as a CBOR byte string. The value of the CBOR byte string is formatted as defined in <xref target="sssec-transport-independent-encoding"/>. This parameter <bcp14>MAY</bcp14> be included.</t>
          </li>
          <li>
            <t>'next_not_before', with value the number 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 <bcp14>MAY</bcp14> 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 content distribution through multicast notifications.</t>
          </li>
          <li>
            <t>'ending', with value the time when the group observation of the target resource is planned to be canceled, encoded as a CBOR integer or as a CBOR floating-point number. The value is the number of seconds from 1970-01-01T00:00:00Z UTC until the specified UTC date/time, ignoring leap seconds, analogous to what is specified for NumericDate in <xref section="2" sectionFormat="of" target="RFC7519"/>. This parameter <bcp14>MAY</bcp14> be included.</t>
          </li>
        </ul>
        <t>The CDDL notation <xref target="RFC8610"/> provided below describes the payload of the informative response.</t>
        <figure anchor="informative-response-payload">
          <name>Format of the Informative Response Payload</name>
          <sourcecode type="cddl"><![CDATA[
informative_response_payload = {
   0 => array, ; 'tp_info' (transport-specific information)
 ? 1 => bstr,  ; 'ph_req' (transport-independent information)
 ? 2 => bstr,  ; 'last_notif' (transport-independent information)
 ? 3 => uint,  ; 'next_not_before'
 ? 4 => ~time  ; 'ending'
}
]]></sourcecode>
        </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 <bcp14>MUST</bcp14> be a Confirmable message sent as a separate response (see <xref section="5.2.2" sectionFormat="of" target="RFC7252"/>).</t>
        <t>Note that this also applies when, with no ongoing traditional observations on the target resource, the server receives a registration request from a first client and decides to start a group observation on the target resource.</t>
        <section anchor="sssec-transport-specific-encoding">
          <name>Transport-Specific Message Information</name>
          <t>The CBOR array specified in the 'tp_info' parameter of an informative response is formatted according to the following CDDL notation.</t>
          <figure anchor="tp-info-general">
            <name>General Format of 'tp_info'</name>
            <sourcecode type="cddl"><![CDATA[
tp_info = [
    tpi_server: CRI-no-local, ; Addressing information of the server
  ? tpi_details               ; Further information about the request
]

tpi_details = (
  + elements ; The number, format, and encoding of the elements
             ; depend on the scheme-id and authority of the CRI
             ; specified as tpi_server
)

CRI-no-local = [
  scheme-id,
  authority
]

scheme-id = nint  ; -1 - scheme-number

authority = [?userinfo, host, ?port]
userinfo  = (false, text .feature "userinfo")
host      = (host-ip // host-name)
host-name = (*text) ; lowercase, NFC labels
host-ip   = (bytes .size 4 //
               (bytes .size 16, ?zone-id))
zone-id   = text
port      = 0..65535
]]></sourcecode>
          </figure>
          <t>The following holds for the two elements 'tpi_server' and 'tpi_details'.</t>
          <ul spacing="normal">
            <li>
              <t>The 'tpi_server' element <bcp14>MUST</bcp14> be present and specifies:  </t>
              <ul spacing="normal">
                <li>
                  <t>The transport protocol used to transport a CoAP response from the server, i.e., a multicast notification in this document; and</t>
                </li>
                <li>
                  <t>The addressing information of the server, i.e., the source addressing information of the multicast notifications that are sent for the group observation.      </t>
                  <t>
Such addressing information <bcp14>MUST</bcp14> be equal to the source addressing information of the informative response sent by the server (see <xref target="ssec-server-side-notifications"/>).</t>
                </li>
              </ul>
              <t>
This element specifies a CRI <xref target="I-D.ietf-core-href"/>, of which both 'scheme' and 'authority' are given, while 'path', 'query', and 'fragment' are not given.  </t>
              <t>
Consistent with <xref section="5.1.1" sectionFormat="of" target="I-D.ietf-core-href"/>, the CRI scheme is given as a negative integer 'scheme-id'. In particular, a 'scheme-id' with value ID denotes the CRI scheme that has CRI scheme number equal to (-1 - ID). The latter identifies the corresponding registered URI scheme, per the associated entry in the "Uniform Resource Identifier (URI) Schemes" registry defined in <xref target="RFC7595"/> and updated in <xref section="11.1" sectionFormat="of" target="I-D.ietf-core-href"/>.  </t>
              <t>
The combination of URI scheme and 'authority' component determines the CoAP transport used to distribute multicast notifications for the group observation. Note that:  </t>
              <ul spacing="normal">
                <li>
                  <t>If the 'authority' component specifies a host-ip, then the 'scheme-id' (hence the URI scheme) is sufficient to identify the transport.</t>
                </li>
                <li>
                  <t>If the 'authority' component specifies a host-name, then the consumer of the CRI has to resolve the host-name and consider the result together with the 'scheme-id' (hence the URI scheme) in order to identify the transport. For instance, DNS resolution can be used (e.g., as defined in <xref target="RFC9953"/>).</t>
                </li>
              </ul>
              <t>
The identified transport determines what elements are required in the 'tpi_details' element of the 'tp_info' array, as well as what information they convey, their encoding, and their semantics. Those elements are specified in the 'Transport Information Details' column of the "CoAP Transport Information" registry for the entry associated with the identified CoAP transport (see <xref target="iana-coap-transport-information"/>)</t>
            </li>
            <li>
              <t>The 'tpi_details' element <bcp14>MAY</bcp14> be present and specifies transport-specific information related to a pertinent request message, i.e., the phantom observation request in this document.  </t>
              <t>
The exact format of 'tpi_details' depends on the CoAP transport, which is identified according to the CRI conveyed by the 'tpi_server' element, as described above.  </t>
              <t>
In the "CoAP Transport Information" registry defined in <xref target="iana-coap-transport-information"/> of this document, the entry corresponding to the identified CoAP transport specifies the list of elements composing 'tpi_details' for that transport, as indicated in the 'Transport Information Details' column. Within 'tpi_details', its elements <bcp14>MUST</bcp14> be ordered according to what is specified in the 'Transport Information Details' column of the "CoAP Transport Information" registry.</t>
            </li>
          </ul>
          <t><xref target="transport-protocol-identifiers"/> defines an entry to be registered in the "CoAP Transport Information" registry, for the transport "CoAP over UDP". When such a transport is used, i.e., CoAP responses are transported over UDP as per <xref target="RFC7252"/> and <xref target="I-D.ietf-core-groupcomm-bis"/>, the full encoding of the 'tp_info' CBOR array is as defined in <xref target="ssssec-udp-transport-specific"/>.</t>
          <t>If a future specification defines the use of CoAP multicast notifications transported over different transport protocols, then that specification must perform the following actions, unless those have been already performed for different reasons:</t>
          <ul spacing="normal">
            <li>
              <t>Define the elements in 'tpi_details', as to what information they convey, their encoding, and their semantics.</t>
            </li>
            <li>
              <t>Register an entry in the "CoAP Transport Information" registry defined in <xref target="iana-coap-transport-information"/> of this document.</t>
            </li>
            <li>
              <t>Register an entry in the "Uniform Resource Identifier (URI) Schemes" registry defined in <xref target="RFC7595"/> and updated in <xref section="11.1" sectionFormat="of" target="I-D.ietf-core-href"/>, where the value in the 'CRI Scheme Number' column is (-1 - ID). In particular, ID is the negative integer to be used as 'scheme-id' for CRIs conveyed by the 'tpi_server' element and by elements in 'tpi_details'.</t>
            </li>
          </ul>
          <section anchor="ssssec-udp-transport-specific">
            <name>UDP Transport-Specific Information</name>
            <t>When CoAP multicast notifications are transported over UDP as per <xref target="RFC7252"/> and <xref target="I-D.ietf-core-groupcomm-bis"/>, the server specifies the 'tp_info' CBOR array as follows.</t>
            <ul spacing="normal">
              <li>
                <t>In the 'tpi_server' element, the CRI has 'scheme-id' with value -1 ("coap"), while 'authority' conveys addressing information of the server, i.e., the source addressing information of the multicast notifications that are sent for the group observation.  </t>
                <t>
This information consists of the IP address SRV_ADDR (expressed as a literal or as a host-name to be resolved) and the port number SRV_PORT of the server hosting the target resource, from where the server will send multicast notifications for the target resource.</t>
              </li>
              <li>
                <t>The 'tpi_details' element <bcp14>MUST</bcp14> be present and in turn includes the following two elements:  </t>
                <ul spacing="normal">
                  <li>
                    <t>'tpi_client' is a CRI, with the same format of 'tpi_server' (see <xref target="sssec-transport-specific-encoding"/>). In particular, the CRI has 'scheme-id' with value -1 ("coap"), while 'authority' conveys the destination addressing information of the multicast notifications that the server sends for the group observation.      </t>
                    <t>
This information consists of the IP multicast address GRP_ADDR (expressed as a literal or as a host-name to be resolved) and the port number GRP_PORT, where the server will send multicast notifications for the target resource.</t>
                  </li>
                  <li>
                    <t>'tpi_token' is a CBOR byte string, whose value is the Token value of the phantom observation request generated by the server (see <xref target="ssec-server-side-request"/>). Note that the same Token value is used for the multicast notifications bound to that phantom observation request (see <xref target="ssec-server-side-notifications"/>).</t>
                  </li>
                </ul>
              </li>
            </ul>
            <t>The CDDL notation in <xref target="tp-info-udp"/> describes the format of the 'tp_info' CBOR array when CoAP is transported over UDP.</t>
            <figure anchor="tp-info-udp">
              <name>Format of 'tp_info' with UDP as Transport Protocol</name>
              <sourcecode type="cddl"><![CDATA[
tp_info_coap_udp = [
  tpi_server: CRI-no-local, ; Source addressing information
                            ; of the multicast notifications
  tpi_client: CRI-no-local, ; Destination addressing information
                            ; of the multicast notifications
  tpi_token: bstr           ; Token value of the phantom request and
                            ; associated multicast notifications
]
]]></sourcecode>
            </figure>
            <t>The CBOR diagnostic notation in <xref target="tp-info-udp-example"/> provides an example of the 'tp_info' CBOR array when CoAP is transported over UDP.</t>
            <t>In the example, SRV_ADDR is 2001:db8::ab, SRV_PORT is 5683 (omitted in the CRI of 'tpi_server' as it is the default port number when CoAP is transported over UDP), GRP_ADDR is ff35:30:2001:db8::23, and GRP_PORT is 61616.</t>
            <figure anchor="tp-info-udp-example">
              <name>Example of 'tp_info' with UDP as Transport Protocol</name>
              <sourcecode type="cbor-diag"><![CDATA[
[ / tp_info /
  [ / tpi_server /
    -1,        / scheme-id -- equivalent to "coap" /
    h'20010db80000000000000000000000ab'  / host-ip /
  ],
  [ / tpi_client /
    -1,        / scheme-id -- equivalent to "coap" /
    h'ff35003020010db80000000000000023', / host-ip /
    61616                                   / port /
  ],
  h'7b'                                / tpi_token /
]
]]></sourcecode>
            </figure>
          </section>
        </section>
        <section anchor="sssec-transport-independent-encoding">
          <name>Transport-Independent Message Information</name>
          <t>For both the parameters 'ph_req' and 'last_notif' in the informative response, the value of the CBOR 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>
              <t>A single byte, with value the content of the Code field in the CoAP message.</t>
            </li>
            <li>
              <t>The byte serialization of the complete sequence of CoAP options in the CoAP message.</t>
            </li>
            <li>
              <t>If the CoAP message includes a non-zero length payload, the one-byte Payload Marker (0xff) followed by the payload.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="ssec-server-side-notifications">
        <name>Notifications</name>
        <t>Upon a change in the status of the target resource under group observation, the server sends a multicast notification intended to all the clients taking part in the group observation of that resource. In particular, each such multicast notification is formatted as follows.</t>
        <ul spacing="normal">
          <li>
            <t>It <bcp14>MUST</bcp14> be a Non-confirmable message.</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> include an Observe Option, as per <xref target="RFC7641"/>.</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> have the same Token value T of the phantom registration request that started the group observation.  </t>
            <t>
That is, every multicast notification for a target resource is not bound to the observation requests from the different clients, but instead to the phantom registration request associated with the whole set of clients taking part in the group observation of that resource.  </t>
            <t>
The Token value T is specified by an element of 'tpi_details' within the 'tp_info' parameter, in the informative response sent to the observer clients. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref target="ssssec-udp-transport-specific"/>).</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> be sent from the same IP address SRV_ADDR and port number SRV_PORT where the corresponding informative responses are sent from by the server (see <xref target="ssec-server-side-informative"/>). That is, redirection <bcp14>MUST NOT</bcp14> be used.  </t>
            <t>
Note that, in most cases, such SRV_ADDR and SRV_PORT are those to which original observation requests are sent to by clients (see <xref target="ssec-client-side-request"/>), unless those requests are sent to a multicast address (see <xref target="I-D.ietf-core-groupcomm-bis"/>).  </t>
            <t>
The addressing information above is provided to the observer clients through the CRI specified by the element 'tpi_server' within the 'tp_info' parameter, in the informative response (see <xref target="sssec-transport-specific-encoding"/>).</t>
          </li>
          <li>
            <t>It <bcp14>MUST</bcp14> be sent to the IP multicast address GRP_ADDR and port number GRP_PORT.  </t>
            <t>
The addressing information above is provided to the observer clients through the CRI specified by an element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref target="ssssec-udp-transport-specific"/>).</t>
          </li>
        </ul>
        <t>For each target resource with an active group observation, the server <bcp14>MUST</bcp14> store the latest multicast notification.</t>
      </section>
      <section anchor="ssec-server-side-congestion">
        <name>Congestion Control</name>
        <t>In order to not cause congestion, the server ought to conservatively control the sending of multicast notifications. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>The multicast notifications <bcp14>MUST</bcp14> be Non-confirmable messages.</t>
          </li>
          <li>
            <t>In constrained environments such as low-power, lossy networks (LLNs), the server <bcp14>SHOULD</bcp14> only support multicast notifications for resources whose representation is small in size. Following related guidelines from <xref section="3.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/>, this can consist, for example, in having the payload of multicast notifications as limited to approximately 5% of the IP Maximum Transmit Unit (MTU) size, so that it fits into a single link-layer frame when using IPv6 over Low-Power Wireless Personal Area Networks (6LoWPAN) (see <xref section="4" sectionFormat="of" target="RFC4944"/>).</t>
          </li>
          <li>
            <t>The server <bcp14>SHOULD</bcp14> provide multicast notifications with the smallest possible IP multicast scope that fulfills the application needs. For example, following related guidelines from <xref section="3.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/>, site-local scope is always preferred over global scope IP multicast, if this fulfills the application needs. Similarly, realm-local scope is always preferred over site-local scope, if this fulfills the application needs. Ultimately, it is up to the server administrator to explicitly configure the most appropriate IP multicast scope.</t>
          </li>
          <li>
            <t>Following related guidelines from <xref section="4.5.1" sectionFormat="of" target="RFC7641"/>, the server <bcp14>SHOULD NOT</bcp14> send more than one multicast notification every 3 seconds and <bcp14>SHOULD</bcp14> use an even less aggressive rate when possible (see also <xref section="3.1.2" sectionFormat="of" target="RFC8085"/>). Furthermore, a goal for an appropriate transmission rate of multicast notifications is the avoidance of a possible "broadcast storm" problem <xref target="MOBICOM99"/>. This prevents a following considerable increase of the channel load, whose origin would be likely attributed to a router rather than to the server.</t>
          </li>
        </ul>
      </section>
      <section anchor="ssec-server-side-cancellation">
        <name>Cancellation</name>
        <t>At a certain point in time, the server might want to cancel a group observation of a target resource. For instance, the server realizes that no clients or not enough clients are interested in taking part in the group observation anymore. <xref target="sec-rough-counting"/> defines a possible approach that the server can use to make an assessment in this respect. Another reason is that the group observation has reached its ending time, as originally scheduled by the server.</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 memory and network resources allocated for the group observation, and it especially frees up the Token value T used at its CoAP endpoint.</t>
      </section>
    </section>
    <section anchor="sec-client-side">
      <name>Client-Side Requirements</name>
      <section anchor="ssec-client-side-request">
        <name>Request</name>
        <t>A client sends an observation request to the server as described in <xref target="RFC7641"/>, i.e., a GET request with an Observe Option set to 0 (register). The request <bcp14>MUST NOT</bcp14> have link-local source or destination addresses. If the server is not configured to accept registrations on that target resource specifically for a group observation, this would still result in a positive notification response to the client as described in <xref target="RFC7641"/>, in the case that the server is able and willing to add the client to the list of observers.</t>
        <t>In a particular setup, the information typically specified in the 'tp_info' parameter of the informative response (see <xref target="ssec-server-side-informative"/>) can be pre-configured on the server and the clients. For example, the destination multicast address and port number where to send multicast notifications for a group observation, as well as the associated Token value to use, can be set aside for particular tasks (e.g., enforcing observations of a specific resource). Alternative mechanisms can rely on using some bytes from the hash of the observation request as the last bytes of the multicast address or as part of the Token value.</t>
        <t>In such a particular setup, the client may also have an early knowledge of the phantom request, i.e., it will be possible for the server to safely omit the parameter 'ph_req' from the informative response to the observation request (see <xref target="ssec-server-side-informative"/>). In this case, the client can include a No-Response Option <xref target="RFC7967"/> with value 16 in its Observe registration request, which results in the server suppressing the informative response. As a consequence, the observation request only informs the server that there is one additional client interested to take part in the group observation.</t>
        <t>While the considered client is able to simply set up its multicast address and start receiving multicast notifications for the group observation, sending an observation request as above allows the server to increment the observer counter. This helps the server to assess the current number of clients interested in the group observation over time (e.g., by using the method defined in <xref target="sec-rough-counting"/>), which in turn can play a role in deciding to cancel the group observation (see <xref target="ssec-server-side-cancellation"/>).</t>
      </section>
      <section anchor="ssec-client-side-informative">
        <name>Informative Response</name>
        <t>Upon receiving the informative response defined in <xref target="ssec-server-side-informative"/>, the client has to identify the CoAP transport used to distribute multicast notifications for the group observation.</t>
        <t>To this end, the client relies on the element 'tpi_server' within the 'tp_info' parameter of the informative response (see <xref target="sssec-transport-specific-encoding"/>).</t>
        <t>In particular, the client considers the CRI conveyed by 'tpi_server' and identifies the CoAP transport, by assessing together the 'authority' component and the URI scheme determined from 'scheme-id' (see <xref target="sssec-transport-specific-encoding"/>).</t>
        <t>After that, the client parses the remainder of the 'tp_info' array, i.e., the information conveyed by 'tpi_details', according to what is specified in the 'Transport Information Details' column of the "CoAP Transport Information" registry for the entry associated with the identified CoAP transport (see <xref target="iana-coap-transport-information"/>).</t>
        <t>Then, the client performs the following steps.</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>
                <t>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 by the CRI conveyed by the element 'tpi_server' within the 'tp_info' parameter, in the informative response (see <xref target="sssec-transport-specific-encoding"/>).      </t>
                <t>
If the port number is not present in the CRI, the client <bcp14>MUST</bcp14> use as SRV_PORT the default port number defined for the identified CoAP transport (e.g., the default port number is 5683 when the transport is CoAP over UDP).</t>
              </li>
              <li>
                <t>As destination address and port number, the IP multicast address GRP_ADDR and port number GRP_PORT. These are specified by the CRI conveyed by a dedicated element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the CRI is conveyed by the element 'tpi_client' (see <xref target="ssssec-udp-transport-specific"/>).      </t>
                <t>
If the port number is not present in the CRI, the client <bcp14>MUST</bcp14> use as GRP_PORT the default port number defined for the identified CoAP transport (e.g., the default port number is 5683 when the transport is CoAP over UDP).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The client rebuilds the phantom registration request as follows.  </t>
            <ul spacing="normal">
              <li>
                <t>The client uses the Token value T that is specified by a dedicated element of 'tpi_details' within the 'tp_info' parameter, in the informative response. In particular, when transporting CoAP over UDP, the Token value is specified by the element 'tpi_token' (see <xref target="ssssec-udp-transport-specific"/>).</t>
              </li>
              <li>
                <t>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.</t>
              </li>
              <li>
                <t>If the 'ph_req' parameter is present in the informative response, the client uses the transport-independent information specified in the parameter.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the informative response includes the parameter 'ph_req' and the transport-independent information specified therein differs from the one in the original Observe registration request, then the client checks whether a response to the rebuilt phantom request can, if available in a cache entry, be used to satisfy the original observation request. If this is not the case, the client <bcp14>SHOULD</bcp14> explicitly withdraw from the group observation.</t>
          </li>
          <li>
            <t>The client stores the phantom registration request, as associated with the observation of the target resource. In particular, the client <bcp14>MUST</bcp14> 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.</t>
          </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>
                <t>The same Token value T used at Step 2; and</t>
              </li>
              <li>
                <t>The transport-independent information specified in the 'last_notif' parameter of the informative response.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the informative response includes the parameter 'last_notif', the client processes the multicast notification rebuilt at Step 5 as defined in <xref section="3.2" sectionFormat="of" target="RFC7641"/>. In particular, the value of the Observe Option is used as initial baseline for notification reordering in this group observation.</t>
          </li>
          <li>
            <t>If a traditional observation to the target resource is ongoing, the client <bcp14>MAY</bcp14> silently cancel it without notifying the server.</t>
          </li>
        </ol>
        <t>In addition to 'tpi_server', further elements of the 'tp_info' array can convey a CRI. The client <bcp14>MUST</bcp14> treat any CRI within the 'tp_info' array as invalid, if the 'authority' component is a host-name such that, when resolved, its combination with the URI scheme indicates multiple transports (see <xref target="sssec-transport-specific-encoding"/>). As a possible way to verify if that is the case, the client can rely on DNS resolution (e.g., as defined in <xref target="RFC9953"/>).</t>
        <t>If any of the expected fields in the informative response are absent, malformed, or invalid, the client <bcp14>MAY</bcp14> try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). If the client chooses not to, then the client <bcp14>SHOULD</bcp14> explicitly withdraw from the group observation.</t>
        <t><xref target="appendix-different-sources"/> describes possible alternative ways for clients to retrieve the phantom registration request and other information related to a group observation.</t>
      </section>
      <section anchor="ssec-client-side-notifications">
        <name>Notifications</name>
        <t>After having successfully processed the informative response as defined in <xref target="ssec-client-side-informative"/>, the client will receive, accept, and process multicast notifications about the state of the target resource from the server, as responses to the phantom registration request and with Token value T.</t>
        <t>The client relies on the value of the Observe Option for notification reordering, as defined in <xref section="3.4" sectionFormat="of" target="RFC7641"/>.</t>
      </section>
      <section anchor="ssec-client-side-cancellation">
        <name>Cancellation</name>
        <t>At a certain point in time, a client may no longer be interested in receiving further multicast notifications about a target resource. When this happens, the client can simply "forget" about being part of the group observation for that target resource, as per <xref section="3.6" sectionFormat="of" target="RFC7641"/>.</t>
        <t>When, later on, the server sends the next multicast notification, the client will not recognize the Token value T in the message. Since the multicast notification is a Non-confirmable message, it is optional for the client to reject it with a Reset message (see <xref section="3.5" sectionFormat="of" target="RFC7641"/>).</t>
        <t>If the server has canceled a group observation as defined in <xref target="ssec-server-side-cancellation"/>, the client simply forgets about the group observation and frees up the used Token value T for that endpoint, upon receiving the multicast error response defined in <xref target="ssec-server-side-cancellation"/>.</t>
      </section>
    </section>
    <section anchor="sec-web-linking">
      <name>Web Linking</name>
      <t>The possible use of multicast notifications in a group observation <bcp14>MAY</bcp14> be indicated by a target attribute "gp-obs" in a web link <xref target="RFC8288"/> to a resource, e.g., using a link-format document <xref target="RFC6690"/>.</t>
      <t>The "gp-obs" attribute is a hint, indicating that the server might send multicast notifications for observations of the resource targeted by the link. Note that this is simply a hint, i.e., it does not include any information required to participate in a group observation and to receive and process multicast notifications.</t>
      <t>A value <bcp14>MUST NOT</bcp14> be given for the "gp-obs" attribute and any present value <bcp14>MUST</bcp14> be ignored by the recipient.  The "gp-obs" attribute <bcp14>MUST NOT</bcp14> appear more than once in a given link-value; occurrences after the first <bcp14>MUST</bcp14> be ignored by the recipient.</t>
      <t>The example in <xref target="example-web-link"/> shows a use of the "gp-obs" attribute: the client does resource discovery on a server and gets back a list of resources, one of which includes the "gp-obs" attribute indicating that the server might send multicast notifications for observations of that resource. The CoRE Link-Format notation from <xref section="5" sectionFormat="of" target="RFC6690"/> is used.</t>
      <figure anchor="example-web-link">
        <name>The Web Link</name>
        <artwork><![CDATA[
REQ: GET /.well-known/core

RES: 2.05 Content
    </sensors/temp>;gp-obs,
    </sensors/light>;if="sensor"
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-example-no-security">
      <name>Example</name>
      <t>The following example refers to two clients C1 and C2 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. The server 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>
          <t>The application-extension identifier "cri" defined in <xref section="3.4" sectionFormat="of" target="I-D.ietf-cbor-edn-literals"/> is used to notate a CBOR Extended Diagnostic Notation (EDN) literal for a CRI.</t>
        </li>
        <li>
          <t>'bstr(X)' denotes a CBOR byte string with value the byte serialization of X, with '|' denoting byte concatenation.</t>
        </li>
        <li>
          <t>'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.</t>
        </li>
        <li>
          <t>'PAYLOAD' denotes a CoAP payload. This refers to the latest multicast notification encoded by the 'last_notif' parameter.</t>
        </li>
      </ul>
      <figure anchor="example-no-oscore">
        <name>Example of Group Observation</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1296" width="552" viewBox="0 0 552 1296" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,432" fill="none" stroke="black"/>
              <path d="M 8,464 L 8,672" fill="none" stroke="black"/>
              <path d="M 8,704 L 8,832" fill="none" stroke="black"/>
              <path d="M 8,864 L 8,1120" fill="none" stroke="black"/>
              <path d="M 8,1184 L 8,1280" fill="none" stroke="black"/>
              <path d="M 32,1120 L 32,1184" fill="none" stroke="black"/>
              <path d="M 512,48 L 512,432" fill="none" stroke="black"/>
              <path d="M 512,464 L 512,672" fill="none" stroke="black"/>
              <path d="M 512,704 L 512,832" fill="none" stroke="black"/>
              <path d="M 512,864 L 512,1136" fill="none" stroke="black"/>
              <path d="M 512,1168 L 512,1280" fill="none" stroke="black"/>
              <path d="M 32,32 L 192,32" fill="none" stroke="black"/>
              <path d="M 304,32 L 496,32" fill="none" stroke="black"/>
              <path d="M 80,208 L 496,208" fill="none" stroke="black"/>
              <path d="M 80,256 L 496,256" fill="none" stroke="black"/>
              <path d="M 32,448 L 192,448" fill="none" stroke="black"/>
              <path d="M 304,448 L 496,448" fill="none" stroke="black"/>
              <path d="M 32,688 L 192,688" fill="none" stroke="black"/>
              <path d="M 304,688 L 496,688" fill="none" stroke="black"/>
              <path d="M 32,848 L 192,848" fill="none" stroke="black"/>
              <path d="M 304,848 L 496,848" fill="none" stroke="black"/>
              <path d="M 8,1120 L 32,1120" fill="none" stroke="black"/>
              <path d="M 48,1152 L 192,1152" fill="none" stroke="black"/>
              <path d="M 320,1152 L 496,1152" fill="none" stroke="black"/>
              <path d="M 8,1184 L 32,1184" fill="none" stroke="black"/>
              <path d="M 68,232 L 80,256" fill="none" stroke="black"/>
              <path d="M 68,232 L 80,208" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="504,688 492,682.4 492,693.6" fill="black" transform="rotate(0,496,688)"/>
              <polygon class="arrowhead" points="504,256 492,250.4 492,261.6" fill="black" transform="rotate(0,496,256)"/>
              <polygon class="arrowhead" points="504,32 492,26.4 492,37.6" fill="black" transform="rotate(0,496,32)"/>
              <polygon class="arrowhead" points="56,1152 44,1146.4 44,1157.6" fill="black" transform="rotate(180,48,1152)"/>
              <polygon class="arrowhead" points="40,848 28,842.4 28,853.6" fill="black" transform="rotate(180,32,848)"/>
              <polygon class="arrowhead" points="40,448 28,442.4 28,453.6" fill="black" transform="rotate(180,32,448)"/>
              <g class="text">
                <text x="12" y="36">C1</text>
                <text x="208" y="36">[</text>
                <text x="248" y="36">Unicast</text>
                <text x="288" y="36">]</text>
                <text x="512" y="36">S</text>
                <text x="540" y="36">/r</text>
                <text x="40" y="52">GET</text>
                <text x="52" y="68">Token:</text>
                <text x="100" y="68">0x4a</text>
                <text x="60" y="84">Observe:</text>
                <text x="104" y="84">0</text>
                <text x="156" y="84">(register)</text>
                <text x="64" y="100">Uri-Path:</text>
                <text x="120" y="100">"r"</text>
                <text x="52" y="116">&lt;Other</text>
                <text x="116" y="116">options&gt;</text>
                <text x="136" y="148">(</text>
                <text x="152" y="148">S</text>
                <text x="200" y="148">allocates</text>
                <text x="256" y="148">the</text>
                <text x="312" y="148">available</text>
                <text x="376" y="148">Token</text>
                <text x="424" y="148">value</text>
                <text x="468" y="148">0x7b</text>
                <text x="496" y="148">)</text>
                <text x="56" y="180">(</text>
                <text x="72" y="180">S</text>
                <text x="104" y="180">sends</text>
                <text x="140" y="180">to</text>
                <text x="180" y="180">itself</text>
                <text x="216" y="180">a</text>
                <text x="256" y="180">phantom</text>
                <text x="336" y="180">observation</text>
                <text x="416" y="180">request</text>
                <text x="476" y="180">PH_REQ</text>
                <text x="76" y="196">as</text>
                <text x="116" y="196">coming</text>
                <text x="164" y="196">from</text>
                <text x="200" y="196">the</text>
                <text x="228" y="196">IP</text>
                <text x="280" y="196">multicast</text>
                <text x="352" y="196">address</text>
                <text x="420" y="196">GRP_ADDR</text>
                <text x="464" y="196">)</text>
                <text x="540" y="260">/r</text>
                <text x="336" y="276">GET</text>
                <text x="348" y="292">Token:</text>
                <text x="396" y="292">0x7b</text>
                <text x="356" y="308">Observe:</text>
                <text x="400" y="308">0</text>
                <text x="452" y="308">(register)</text>
                <text x="360" y="324">Uri-Path:</text>
                <text x="416" y="324">"r"</text>
                <text x="348" y="340">&lt;Other</text>
                <text x="412" y="340">options&gt;</text>
                <text x="192" y="372">(</text>
                <text x="208" y="372">S</text>
                <text x="248" y="372">creates</text>
                <text x="288" y="372">a</text>
                <text x="320" y="372">group</text>
                <text x="392" y="372">observation</text>
                <text x="452" y="372">of</text>
                <text x="476" y="372">/r</text>
                <text x="496" y="372">)</text>
                <text x="224" y="404">(</text>
                <text x="240" y="404">S</text>
                <text x="292" y="404">increments</text>
                <text x="352" y="404">the</text>
                <text x="404" y="404">observer</text>
                <text x="472" y="404">counter</text>
                <text x="248" y="420">for</text>
                <text x="280" y="420">the</text>
                <text x="320" y="420">group</text>
                <text x="392" y="420">observation</text>
                <text x="452" y="420">of</text>
                <text x="476" y="420">/r</text>
                <text x="496" y="420">)</text>
                <text x="12" y="452">C1</text>
                <text x="208" y="452">[</text>
                <text x="248" y="452">Unicast</text>
                <text x="288" y="452">]</text>
                <text x="512" y="452">S</text>
                <text x="44" y="468">5.03</text>
                <text x="52" y="484">Token:</text>
                <text x="100" y="484">0x4a</text>
                <text x="88" y="500">Content-Format:</text>
                <text x="304" y="500">application/informative-response+cbor</text>
                <text x="60" y="516">Max-Age:</text>
                <text x="104" y="516">0</text>
                <text x="52" y="532">&lt;Other</text>
                <text x="116" y="532">options&gt;</text>
                <text x="60" y="548">Payload:</text>
                <text x="104" y="548">{</text>
                <text x="48" y="564">/</text>
                <text x="88" y="564">tp_info</text>
                <text x="128" y="564">/</text>
                <text x="168" y="564">0</text>
                <text x="184" y="564">:</text>
                <text x="200" y="564">[</text>
                <text x="328" y="580">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="344" y="596">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="252" y="612">0x7b</text>
                <text x="204" y="628">],</text>
                <text x="48" y="644">/</text>
                <text x="100" y="644">last_notif</text>
                <text x="152" y="644">/</text>
                <text x="168" y="644">2</text>
                <text x="184" y="644">:</text>
                <text x="232" y="644">bstr(0x45</text>
                <text x="280" y="644">|</text>
                <text x="304" y="644">OPT</text>
                <text x="328" y="644">|</text>
                <text x="356" y="644">0xff</text>
                <text x="384" y="644">|</text>
                <text x="428" y="644">PAYLOAD)</text>
                <text x="32" y="660">}</text>
                <text x="12" y="692">C2</text>
                <text x="208" y="692">[</text>
                <text x="248" y="692">Unicast</text>
                <text x="288" y="692">]</text>
                <text x="512" y="692">S</text>
                <text x="540" y="692">/r</text>
                <text x="40" y="708">GET</text>
                <text x="52" y="724">Token:</text>
                <text x="100" y="724">0x01</text>
                <text x="60" y="740">Observe:</text>
                <text x="104" y="740">0</text>
                <text x="156" y="740">(register)</text>
                <text x="64" y="756">Uri-Path:</text>
                <text x="120" y="756">"r"</text>
                <text x="52" y="772">&lt;Other</text>
                <text x="116" y="772">options&gt;</text>
                <text x="216" y="804">(</text>
                <text x="232" y="804">S</text>
                <text x="284" y="804">increments</text>
                <text x="344" y="804">the</text>
                <text x="396" y="804">observer</text>
                <text x="464" y="804">counter</text>
                <text x="240" y="820">for</text>
                <text x="272" y="820">the</text>
                <text x="312" y="820">group</text>
                <text x="384" y="820">observation</text>
                <text x="444" y="820">of</text>
                <text x="468" y="820">/r</text>
                <text x="488" y="820">)</text>
                <text x="12" y="852">C2</text>
                <text x="208" y="852">[</text>
                <text x="248" y="852">Unicast</text>
                <text x="288" y="852">]</text>
                <text x="512" y="852">S</text>
                <text x="44" y="868">5.03</text>
                <text x="52" y="884">Token:</text>
                <text x="100" y="884">0x01</text>
                <text x="88" y="900">Content-Format:</text>
                <text x="304" y="900">application/informative-response+cbor</text>
                <text x="60" y="916">Max-Age:</text>
                <text x="104" y="916">0</text>
                <text x="52" y="932">&lt;Other</text>
                <text x="116" y="932">options&gt;</text>
                <text x="60" y="948">Payload:</text>
                <text x="104" y="948">{</text>
                <text x="48" y="964">/</text>
                <text x="88" y="964">tp_info</text>
                <text x="128" y="964">/</text>
                <text x="168" y="964">0</text>
                <text x="184" y="964">:</text>
                <text x="200" y="964">[</text>
                <text x="328" y="980">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="344" y="996">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="252" y="1012">0x7b</text>
                <text x="204" y="1028">],</text>
                <text x="48" y="1044">/</text>
                <text x="100" y="1044">last_notif</text>
                <text x="152" y="1044">/</text>
                <text x="168" y="1044">2</text>
                <text x="184" y="1044">:</text>
                <text x="232" y="1044">bstr(0x45</text>
                <text x="280" y="1044">|</text>
                <text x="304" y="1044">OPT</text>
                <text x="328" y="1044">|</text>
                <text x="356" y="1044">0xff</text>
                <text x="384" y="1044">|</text>
                <text x="428" y="1044">PAYLOAD)</text>
                <text x="32" y="1060">}</text>
                <text x="104" y="1092">(</text>
                <text x="128" y="1092">The</text>
                <text x="168" y="1092">value</text>
                <text x="204" y="1092">of</text>
                <text x="232" y="1092">the</text>
                <text x="284" y="1092">resource</text>
                <text x="332" y="1092">/r</text>
                <text x="376" y="1092">changes</text>
                <text x="420" y="1092">to</text>
                <text x="460" y="1092">"5678"</text>
                <text x="496" y="1092">)</text>
                <text x="12" y="1140">C1</text>
                <text x="208" y="1156">[</text>
                <text x="256" y="1156">Multicast</text>
                <text x="304" y="1156">]</text>
                <text x="512" y="1156">S</text>
                <text x="12" y="1172">C2</text>
                <text x="88" y="1172">(</text>
                <text x="144" y="1172">Destination</text>
                <text x="248" y="1172">address/port:</text>
                <text x="376" y="1172">GRP_ADDR/GRP_PORT</text>
                <text x="456" y="1172">)</text>
                <text x="60" y="1204">2.05</text>
                <text x="68" y="1220">Token:</text>
                <text x="116" y="1220">0x7b</text>
                <text x="76" y="1236">Observe:</text>
                <text x="124" y="1236">11</text>
                <text x="68" y="1252">&lt;Other</text>
                <text x="132" y="1252">options&gt;</text>
                <text x="76" y="1268">Payload:</text>
                <text x="140" y="1268">"5678"</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
C1 --------------------- [ Unicast ] ------------------------> S  /r
|  GET                                                         |
|  Token: 0x4a                                                 |
|  Observe: 0 (register)                                       |
|  Uri-Path: "r"                                               |
|  <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)  |
|                                       Uri-Path: "r"          |
|                                       <Other options>        |
|                                                              |
|                      ( S creates a group observation of /r ) |
|                                                              |
|                          ( S increments the observer counter |
|                            for the group observation of /r ) |
|                                                              |
C1 <-------------------- [ Unicast ] ------------------------- S
|  5.03                                                        |
|  Token: 0x4a                                                 |
|  Content-Format: application/informative-response+cbor       |
|  Max-Age: 0                                                  |
|  <Other options>                                             |
|  Payload: {                                                  |
|    / tp_info /    0 : [                                      |
|                        cri'coap://SRV_ADDR:SRV_PORT/',       |
|                          cri'coap://GRP_ADDR:GRP_PORT/',     |
|                            0x7b                              |
|                       ],                                     |
|    / last_notif / 2 : bstr(0x45 | OPT | 0xff | PAYLOAD)      |
|  }                                                           |
|                                                              |
C2 --------------------- [ Unicast ] ------------------------> S  /r
|  GET                                                         |
|  Token: 0x01                                                 |
|  Observe: 0 (register)                                       |
|  Uri-Path: "r"                                               |
|  <Other options>                                             |
|                                                              |
|                         ( S increments the observer counter  |
|                           for the group observation of /r )  |
|                                                              |
C2 <-------------------- [ Unicast ] ------------------------- S
|  5.03                                                        |
|  Token: 0x01                                                 |
|  Content-Format: application/informative-response+cbor       |
|  Max-Age: 0                                                  |
|  <Other options>                                             |
|  Payload: {                                                  |
|    / tp_info /    0 : [                                      |
|                        cri'coap://SRV_ADDR:SRV_PORT/',       |
|                          cri'coap://GRP_ADDR:GRP_PORT/',     |
|                            0x7b                              |
|                       ],                                     |
|    / last_notif / 2 : bstr(0x45 | OPT | 0xff | PAYLOAD)      |
|  }                                                           |
|                                                              |
|           ( The value of the resource /r changes to "5678" ) |
|                                                              |
+--+                                                           |
C1 |                                                           |
   | <------------------ [ Multicast ] ----------------------- S
C2 |      ( Destination address/port: GRP_ADDR/GRP_PORT )      |
+--+                                                           |
|    2.05                                                      |
|    Token: 0x7b                                               |
|    Observe: 11                                               |
|    <Other options>                                           |
|    Payload: "5678"                                           |
|                                                              |
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="sec-rough-counting">
      <name>Rough Counting of Clients in the Group Observation</name>
      <t>This section specifies a method that the server can use to keep an estimate of still active and interested clients, without creating undue traffic on the network.</t>
      <section anchor="feedback-divider-option">
        <name>Feedback-Divider Option</name>
        <t>This section defines the new CoAP option Feedback-Divider. By including the option in an outgoing message, a sender endpoint elicits a stochastic reaction and thereby a feedback from the message recipient(s) that would otherwise not react.</t>
        <t>If the sender endpoint triggering a feedback is a client sending a request, the Feedback-Divider Option included in the request triggers the recipient server(s) to send a response with some probability. In particular, the Feedback-Divider Option stochastically overrides the possible response suppression performed by the server(s). Such an influence affects response suppression that can otherwise be performed, e.g., according to: default processing; the No-Response Option <xref target="RFC7967"/>, if present in the request; an unmatching filter from the URI query component, when the request is sent over multicast and targets the /.well-known/core resource (see <xref section="4.1" sectionFormat="of" target="RFC6690"/>).</t>
        <t>If the sender endpoint triggering a feedback is a server sending a response, the feedback elicitation is currently limited to using observe notifications. In particular, the Feedback-Divider Option included in an observe notification triggers the recipient client(s) to send with some probability a new request to the server. Such a request includes the Observe Option set to 0 (register) and is addressed to the same target resource for which the observe notification was sent. That is, a reacting client (re-)registers a regular unicast observation on the same target resource.</t>
        <t>This document specifically defines how the Feedback-Divider Option is used when the sender endpoint triggering a feedback is a server sending multicast notifications. Note that it is not so useful to include the Feedback-Divider Option in an observe notification sent over unicast to a single client. That is, the server can more efficiently query a single client by means of an observe notification sent as a Confirmable message, thereby eliciting an Acknowledgement message in return.</t>
        <t>The Feedback-Divider Option has the properties summarized in <xref target="fd-table"/>, which extends Table 4 of <xref target="RFC7252"/>. The option is not Critical, not Safe-to-Forward, and integer valued. Since the option is not Safe-to-Forward, the 'N' column indicates a dash for "not applicable".</t>
        <table align="center" anchor="fd-table">
          <name>The Feedback-Divider Option. C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD18</td>
              <td align="left"> </td>
              <td align="left">x</td>
              <td align="left">-</td>
              <td align="left"> </td>
              <td align="left">Feedback-Divider</td>
              <td align="left">uint</td>
              <td align="left">0-1</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
        <t>Note to RFC Editor: In the table above, please replace TBD18 with the registered option number. Then, please delete this paragraph.</t>
        <t>The Feedback-Divider Option is of class E for OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      </section>
      <section anchor="ssec-rough-counting-client-side">
        <name>Processing on the Client Side</name>
        <t>Upon receiving a response with a Feedback-Divider Option, a client that supports the option and is interested in continuing receiving multicast notifications for the target resource <bcp14>SHOULD</bcp14> acknowledge its interest, as described below.</t>
        <t>The client picks an integer random number I, from 0 inclusive to Z = (2<sup>Q</sup>) exclusive, where Q is the value specified in the option. If I is different from 0, the client takes no further action. Otherwise, the client should wait a random fraction of the Leisure time (see <xref section="8.2" sectionFormat="of" target="RFC7252"/>) and then registers a regular 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 <bcp14>MUST</bcp14> be addressed to the same target resource and <bcp14>MUST</bcp14> have the same destination IP address and port number used for the original registration request, regardless of the source IP address and port number of the received multicast notification.</t>
        <t>Since this Observe registration is only done for its side effect of looking as an attempted observation at the server, the client <bcp14>MUST</bcp14> send the unicast request as a Non-confirmable message and with the maximum No-Response setting <xref target="RFC7967"/>. In the request, the client <bcp14>MUST</bcp14> include a Feedback-Divider Option, whose value <bcp14>MUST</bcp14> be set to 0. As per <xref section="3.2" sectionFormat="of" target="RFC7252"/>, this is represented with an empty option value (a zero-length sequence of bytes). The client does not need to wait for responses and can keep processing further notifications on the same Token.</t>
        <t>The client <bcp14>MUST</bcp14> ignore the Feedback-Divider Option, if the multicast notification is retrieved from the 'last_notif' parameter of an informative response (see <xref target="ssec-server-side-informative"/>). A client includes the Feedback-Divider Option only in a re-registration request triggered by the server as described above and <bcp14>MUST NOT</bcp14> include it in any other request.</t>
        <t><xref target="appendix-pseudo-code-counting-client"/> and <xref target="appendix-pseudo-code-counting-client-constrained"/> provide a description in pseudo-code of the operations above performed by the client.</t>
      </section>
      <section anchor="processing-on-the-server-side">
        <name>Processing on the Server Side</name>
        <t>In order to avoid needless use of network resources, a server <bcp14>SHOULD</bcp14> keep a rough, updated count of the number of clients taking part in the group observation of a target resource. To this end, the server updates the value COUNT of the associated observer counter (see <xref target="sec-server-side"/>), for instance by using the method described below.</t>
        <section anchor="request-for-feedback">
          <name>Request for Feedback</name>
          <t>When it wants to obtain a new estimated count, the server considers a number M of confirmations that 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>
              <t>L is computed as L = ceil(log2(N / M)).</t>
            </li>
            <li>
              <t>N is the current value of the observer counter, possibly rounded up to 1, i.e., N = max(COUNT, 1).</t>
            </li>
          </ul>
          <t>Finally, the server sets Q as the value of the 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 <bcp14>RECOMMENDED</bcp14> for the server to include the Feedback-Divider Option only in the first notification of such a burst.</t>
        </section>
        <section anchor="collection-of-feedback">
          <name>Collection of Feedback</name>
          <t>The server collects observation requests from the clients, for an amount of time of MAX_CONFIRMATION_WAIT seconds. During this time, the server regularly increments the observer counter when adding a new client to the group observation (see <xref target="ssec-server-side-informative"/>).</t>
          <t>It is up to applications to define the value of MAX_CONFIRMATION_WAIT, which has to take into account the transmission time of the multicast notification and of 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 <bcp14>RECOMMENDED</bcp14> to define MAX_CONFIRMATION_WAIT as follows.</t>
          <t>MAX_CONFIRMATION_WAIT = MAX_RTT + MAX_CLIENT_REQUEST_DELAY</t>
          <t>where MAX_RTT is as defined in <xref section="4.8.2" sectionFormat="of" target="RFC7252"/> and has default value 202 seconds, while MAX_CLIENT_REQUEST_DELAY is equivalent to MAX_SERVER_RESPONSE_DELAY defined in <xref section="3.1.5" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/> and has default value 250 seconds. In the absence of more specific information, the server can thus consider a conservative MAX_CONFIRMATION_WAIT of 452 seconds.</t>
          <t>If more information is available in deployments, a much shorter MAX_CONFIRMATION_WAIT can be set. This can be based on a realistic round trip time (replacing MAX_RTT) and on the largest leisure time configured on the clients (replacing MAX_CLIENT_REQUEST_DELAY), e.g., DEFAULT_LEISURE = 5 seconds, thus shortening MAX_CONFIRMATION_WAIT to a few seconds.</t>
        </section>
        <section anchor="processing-of-feedback">
          <name>Processing of Feedback</name>
          <t>Once MAX_CONFIRMATION_WAIT seconds have passed, the server counts the R confirmations that have arrived as observation requests to the target resource, since the time when the latest multicast notification with the Feedback-Divider Option has been sent. In particular, the server considers an observation request as a confirmation from a client only if the request includes a Feedback-Divider Option with value 0.</t>
          <t>Then, the server computes a feedback indicator as E = R * (2<sup>Q</sup>). According to what is 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 considers COUNT' as the current value of the observer counter at this point in time. Note that COUNT' may be greater than the value COUNT used at the beginning of this process, if the server has incremented the observer counter upon adding new clients to the group observation (see <xref target="ssec-server-side-informative"/>).</t>
          <t>In particular, the server computes the new estimated count value as COUNT' + ((E - N) / D), where D &gt; 0 is an integer value used as dampener. This step has to be performed atomically. That is, until this step is completed, the server <bcp14>MUST</bcp14> 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, which can be taken into account for possibly canceling the group observation (see <xref target="ssec-server-side-cancellation"/>).</t>
          <t>This estimate is skewed by packet loss, but it gives the server a sufficiently good estimation for further counts and for deciding when to cancel the group observation. It is up to applications to define policies about how the server takes the newly updated estimate into account and determines whether to cancel the group observation.</t>
          <t>As an example, if the server currently estimates that N = COUNT = 32 observers are active and considers a constant M = 8, it sends a notification with Feedback-Divider with value Q = 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 Feedback-Divider Option with value Q = 0 in its multicast notifications, as if M is equal to N. This will trigger all the active clients to state their interest in continuing receiving notifications for the target resource. Thus, the amount R of arrived confirmations is affected only by possible packet loss.</t>
          <t><xref target="appendix-pseudo-code-counting-server"/> provides a description in pseudo-code of the operations above performed by the server, including example behaviors for scheduling the next count update and deciding whether to cancel the group observation.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-secured-notifications">
      <name>Protection of Multicast Notifications with Group OSCORE</name>
      <t>A server can protect multicast notifications by using the security protocol Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>, thus ensuring that they are protected end-to-end for 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 already be a member of the correct OSCORE group.</t>
      <t>In any other case, the server <bcp14>MAY</bcp14> communicate to clients what OSCORE group they are required to join, by providing additional guidance in the informative response as described in <xref target="sec-inf-response"/>. Note that clients could already be members of the right OSCORE group, if they previously joined it to securely communicate with the same server or with other servers to access their resources.</t>
      <t>Both the clients and the server <bcp14>MAY</bcp14> join the OSCORE group by using the approach defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> and based on the ACE framework for Authentication and Authorization in constrained environments <xref target="RFC9200"/>. When doing so, the server has to join the group (also) with the roles of Requester and Responder. Instead, a client can join the group with any permitted role or combination of roles, unless it intends to send its original observation requests (see <xref target="ssec-client-side-request"/>) protected with Group OSCORE. In such a case, the client has to join the group (also) as a Requester. 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, then the original registration requests and related unicast (notification) responses <bcp14>MUST</bcp14> also be protected, including and especially the informative responses from the server. An exception is the case discussed in <xref target="deterministic-phantom-Request"/>, where the informative response from the server is not protected.</t>
      <t>In order to protect unicast messages exchanged between the server and each client, including the original client registration (see <xref target="sec-client-side"/>), alternative security protocols than Group OSCORE can be used, such as OSCORE <xref target="RFC8613"/> and/or DTLS <xref target="RFC9147"/>. However, it is <bcp14>RECOMMENDED</bcp14> to use OSCORE or Group OSCORE, in order to reduce the number of libraries that the clients and the server have to support.</t>
      <section anchor="sec-inf-response">
        <name>Signaling the OSCORE Group in the Informative Response</name>
        <t>This section describes a mechanism for the server to communicate to the client what OSCORE group to join, in order to decrypt and verify the multicast notifications protected with Group OSCORE. The client <bcp14>MAY</bcp14> use the information provided by the server to start the ACE joining procedure described in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>. The mechanism defined in this section is <bcp14>OPTIONAL</bcp14> to support for the client and server.</t>
        <t>In addition to what is defined in <xref target="sec-server-side"/>, the CBOR map in the informative response payload contains the following fields, whose CBOR abbreviations are defined in <xref target="informative-response-params"/>.</t>
        <ul spacing="normal">
          <li>
            <t>'join_uri', with value the URI for joining the OSCORE group at the respective Group Manager, encoded as a CBOR text string. If the procedure described in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> is used for joining, this field specifically indicates the URI of the group-membership resource at the Group Manager.</t>
          </li>
          <li>
            <t>'sec_gp', with value the name of the OSCORE group, encoded as a CBOR text string.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>Optionally, 'hkdf', with value the HKDF Algorithm used in the OSCORE group, encoded as a CBOR text string or integer. The HKDF Algorithm is specified by the HMAC Algorithm value, which is taken from the 'Value' column of the "COSE Algorithms" registry <xref target="COSE.Algorithms"/>. For example, the HKDF Algorithm HKDF SHA-256 is specified as the HMAC Algorithm HMAC 256/256.</t>
          </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"/>. Consistent with <xref section="2.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, acceptable values denote a format that provides the public key and a comprehensive set of information related to the public key algorithm, including, e.g., the used elliptic curve (when applicable).  </t>
            <t>
At the time of writing this specification, acceptable formats of authentication credentials are CBOR Web Tokens (CWTs) and CWT Claim Sets (CCSs) <xref target="RFC8392"/>, X.509 certificates <xref target="RFC5280"/>, and C509 certificates <xref target="I-D.ietf-cose-cbor-encoded-cert"/>. Further formats may be available in the future, and they would be acceptable to use as long as they comply with the criteria above.  </t>
            <t>
[ As to C509 certificates, there is a pending registration requested by draft-ietf-cose-cbor-encoded-cert. ]</t>
          </li>
          <li>
            <t>Optionally, 'gp_enc_alg', with value the Group 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"/>.</t>
          </li>
          <li>
            <t>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"/>.</t>
          </li>
          <li>
            <t>Optionally, 'sign_params', encoded as a CBOR array and including the following two elements:  </t>
            <ul spacing="normal">
              <li>
                <t>'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"/>.</t>
              </li>
              <li>
                <t>'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"/>.</t>
              </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', 'gp_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 <bcp14>OPTIONAL</bcp14>, all the corresponding fields are <bcp14>OPTIONAL</bcp14> in the informative response. However, the 'join_uri' and 'sec_gp' fields <bcp14>MUST</bcp14> be present if this mechanism is used. If any of the fields are present without the 'join_uri' and 'sec_gp' fields present, the client <bcp14>MUST</bcp14> ignore these fields, since they would not be sufficient to start the (ACE) join procedure. When this happens, the client <bcp14>MAY</bcp14> try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). If the client chooses not to, then the client <bcp14>SHOULD</bcp14> explicitly withdraw from the group observation.</t>
        <t><xref target="self-managed-oscore-group"/> describes a possible alternative approach, where the server self-manages the OSCORE group, and provides the observer clients with the necessary keying material in the informative response. The approach in <xref target="self-managed-oscore-group"/> <bcp14>MUST NOT</bcp14> be used together with the mechanism defined in this section for indicating what OSCORE group to join.</t>
      </section>
      <section anchor="sec-server-side-with-security">
        <name>Server-Side Requirements</name>
        <t>When using Group OSCORE to protect multicast notifications, the server performs the operations described in <xref target="sec-server-side"/>, with the following differences.</t>
        <section anchor="ssec-server-side-request-oscore">
          <name>Registration</name>
          <t>The phantom registration request <bcp14>MUST</bcp14> be protected, by using Group OSCORE. In particular, the group mode of Group OSCORE defined in <xref section="7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> <bcp14>MUST</bcp14> be used.</t>
          <t>The server protects the phantom registration request as defined in <xref section="7.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> by using its Sender Context, i.e., like if it was the actual sender. 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). Consistent with that, the OSCORE Option value in the phantom registration request specifies:</t>
          <ul spacing="normal">
            <li>
              <t>In the 'kid' field, the Sender ID of the server in the OSCORE group.</t>
            </li>
            <li>
              <t>In the 'Partial IV' field, the Partial IV encoding the previously consumed Sender Sequence Number value SN of the server in the OSCORE group, i.e., (SN* - 1).</t>
            </li>
          </ul>
        </section>
        <section anchor="ssec-server-side-informative-oscore">
          <name>Informative Response</name>
          <t>The value of the CBOR byte string in the 'ph_req' parameter encodes the phantom observation request as a message protected with Group OSCORE (see <xref target="ssec-server-side-request-oscore"/>). Consequently, the following applies:</t>
          <ul spacing="normal">
            <li>
              <t>The specified Code is 0.05 (FETCH) <xref target="RFC8132"/>.</t>
            </li>
            <li>
              <t>The sequence of CoAP options will be limited to the outer, non encrypted options.</t>
            </li>
            <li>
              <t>A payload is always present, as the ciphertext followed by the countersignature.</t>
            </li>
          </ul>
          <t>Note that, in terms of transport-independent information, the registration request from the client typically differs from the phantom request. Thus, the server has to include the 'ph_req' parameter in the informative response. An exception is the case discussed in <xref target="deterministic-phantom-Request"/>.</t>
          <t>Similarly, the value of the CBOR byte string in the 'last_notif' parameter encodes the latest multicast notification as a message protected with Group OSCORE (see <xref target="ssec-server-side-notifications-oscore"/>). This applies also to the initial multicast notification INIT_NOTIF built at Step 6 of <xref target="ssec-server-side-request"/>.</t>
          <t>Optionally, the informative response includes additional parameters that provide information about the OSCORE group to join (see <xref target="sec-inf-response"/>).</t>
        </section>
        <section anchor="ssec-server-side-notifications-oscore">
          <name>Notifications</name>
          <t>The server <bcp14>MUST</bcp14> protect every multicast notification for the target resource with Group OSCORE. In particular, the group mode of Group OSCORE defined in <xref section="7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> <bcp14>MUST</bcp14> be used.</t>
          <t>The process described in <xref section="7.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> applies, with the following additions when building the two OSCORE external_aad structures to encrypt and sign the multicast notification (see <xref section="3.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</t>
          <ul spacing="normal">
            <li>
              <t>The 'request_kid' element contains the value of the 'kid' field in the OSCORE Option value of the phantom registration request, i.e., the Sender ID of the server.</t>
            </li>
            <li>
              <t>The 'request_piv' element contains the value of the 'Partial IV' field in the OSCORE Option value of the phantom registration request, i.e., the Partial IV encoding the consumed Sender Sequence Number SN of the server.</t>
            </li>
            <li>
              <t>The 'request_kid_context' element contains the value of the 'kid context' field in the OSCORE Option value of the phantom registration request, i.e., the Group Identifier value (Gid) of the OSCORE group used as ID Context.</t>
            </li>
          </ul>
          <t>Note that these same values are used to protect each and every multicast notification sent for the target resource under this group observation.</t>
        </section>
        <section anchor="ssec-server-side-cancellation-oscore">
          <name>Cancellation</name>
          <t>When canceling a group observation as defined in <xref target="ssec-server-side-cancellation"/>, the multicast response with error code 5.03 (Service Unavailable) is protected with Group OSCORE, as per <xref section="7.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. The server <bcp14>MUST</bcp14> use its own Sender Sequence Number as Partial IV to protect the error response and <bcp14>MUST</bcp14> include the Partial IV in the OSCORE Option value of the response.</t>
        </section>
      </section>
      <section anchor="sec-client-side-with-security">
        <name>Client-Side Requirements</name>
        <t>When using Group OSCORE to protect multicast notifications, the client performs as described in <xref target="sec-client-side"/>, with the following differences.</t>
        <section anchor="ssec-client-side-informative-oscore">
          <name>Informative Response</name>
          <t>Upon receiving the informative response from the server, the client performs the same steps defined in <xref target="ssec-client-side-informative"/>, with the following additions.</t>
          <t>When performing Step 2, the client expects the 'ph_req' parameter to be included in the informative response, which is otherwise considered malformed. An exception is the case discussed in <xref target="deterministic-phantom-Request"/>.</t>
          <t>Once completed Step 2, the client decrypts and verifies the rebuilt phantom registration request as defined in <xref section="7.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, with the following differences.</t>
          <ul spacing="normal">
            <li>
              <t>The client <bcp14>MUST NOT</bcp14> perform any replay check. That is, the client skips Step 3 in <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</t>
            </li>
            <li>
              <t>If decryption and verification of the phantom registration request succeed:  </t>
              <ul spacing="normal">
                <li>
                  <t>The client <bcp14>MUST NOT</bcp14> 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"/>.</t>
                </li>
                <li>
                  <t>The client <bcp14>MUST NOT</bcp14> take any further process as normally expected according to <xref target="RFC7252"/>. That is, the client skips Step 8 in <xref section="8.2" sectionFormat="of" target="RFC8613"/>. In particular, the client <bcp14>MUST NOT</bcp14> deliver the phantom registration request to the application and <bcp14>MUST NOT</bcp14> take any action in the Token space of its unicast endpoint where the informative response has been received.</t>
                </li>
                <li>
                  <t>The client stores the values of the 'kid', 'Partial IV', and 'kid context' fields from the OSCORE Option value of the phantom registration request.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If decryption and verification of the phantom registration request fail, the client <bcp14>MAY</bcp14> try sending a new registration request to the server (see <xref target="ssec-client-side-request"/>). If the client chooses not to, then the client <bcp14>SHOULD</bcp14> explicitly withdraw from the group observation.</t>
            </li>
          </ul>
          <t>After successful decryption and verification, the client performs Step 3 in <xref target="ssec-client-side-informative"/>, considering the decrypted phantom registration request.</t>
          <t>If the informative response includes the parameter 'last_notif', the client also decrypts and verifies the latest multicast notification rebuilt at Step 5 in <xref target="ssec-client-side-informative"/>, just like it would for the multicast notifications transmitted as CoAP messages on the wire (see <xref target="ssec-client-side-notifications-oscore"/>). If decryption and verification succeed, the client proceeds with Step 6, considering the decrypted latest multicast notification. Otherwise, the client proceeds to Step 7.</t>
        </section>
        <section anchor="ssec-client-side-notifications-oscore">
          <name>Notifications</name>
          <t>After having successfully processed the informative response as defined in <xref target="ssec-client-side-informative-oscore"/>, the client will decrypt and verify every multicast notification for the target resource as defined in <xref section="7.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, with the following difference.</t>
          <t>For both decryption and signature verification, the client <bcp14>MUST</bcp14> set the external_aad structure defined in <xref section="3.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> as follows. The particular way to achieve this is implementation specific.</t>
          <ul spacing="normal">
            <li>
              <t>The 'request_kid' element takes the value of the 'kid' field from the OSCORE Option value of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</t>
            </li>
            <li>
              <t>The 'request_piv' element takes the value of the 'Partial IV' field from the OSCORE Option value of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</t>
            </li>
            <li>
              <t>The 'request_kid_context' element takes the value of the 'kid context' field from the OSCORE Option value of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</t>
            </li>
          </ul>
          <t>Note that these same values are used to decrypt and verify each and every multicast notification received for the target resource under this group observation.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-example-with-security">
      <name>Example with Group OSCORE</name>
      <t>The following example refers to two clients C1 and C2 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. The server 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>
          <t>C1 and S have a pairwise OSCORE Security Context. In particular, C1 has 'kid' = 0x01 as Sender ID and SN_1 = 101 (i.e., 0x65) as Sender Sequence Number.</t>
        </li>
        <li>
          <t>C2 and S have a pairwise OSCORE Security Context. In particular, C2 has 'kid' = 0x02 as Sender ID and SN_2 = 201 (i.e., 0xc9) as Sender Sequence Number.</t>
        </li>
        <li>
          <t>S is a member of the OSCORE group with name "myGroup" and with 'kid context' = 0x57ab2e as Group ID. In the OSCORE group, S has 'kid' = 0x05 as Sender ID and SN_5 = 501 (i.e., 0x01f5) as Sender Sequence Number.</t>
        </li>
      </ul>
      <t>The following notation is used for the payload of the informative responses:</t>
      <ul spacing="normal">
        <li>
          <t>The application-extension identifier "cri" defined in <xref section="3.4" sectionFormat="of" target="I-D.ietf-cbor-edn-literals"/> is used to notate a CBOR Extended Diagnostic Notation (EDN) literal for a CRI.</t>
        </li>
        <li>
          <t>'bstr(X)' denotes a CBOR byte string with value the byte serialization of X, with '|' denoting byte concatenation.</t>
        </li>
        <li>
          <t>'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.</t>
        </li>
        <li>
          <t>'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.</t>
        </li>
        <li>
          <t>'SIGN' denotes the countersignature 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.</t>
        </li>
      </ul>
      <figure anchor="example-oscore">
        <name>Example of Group Observation with Group OSCORE</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="2272" width="552" viewBox="0 0 552 2272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,752" fill="none" stroke="black"/>
              <path d="M 8,784 L 8,1184" fill="none" stroke="black"/>
              <path d="M 8,1216 L 8,1456" fill="none" stroke="black"/>
              <path d="M 8,1488 L 8,1936" fill="none" stroke="black"/>
              <path d="M 8,2000 L 8,2256" fill="none" stroke="black"/>
              <path d="M 32,1936 L 32,2000" fill="none" stroke="black"/>
              <path d="M 512,48 L 512,752" fill="none" stroke="black"/>
              <path d="M 512,784 L 512,1184" fill="none" stroke="black"/>
              <path d="M 512,1216 L 512,1456" fill="none" stroke="black"/>
              <path d="M 512,1488 L 512,1952" fill="none" stroke="black"/>
              <path d="M 512,1984 L 512,2256" fill="none" stroke="black"/>
              <path d="M 32,32 L 152,32" fill="none" stroke="black"/>
              <path d="M 352,32 L 496,32" fill="none" stroke="black"/>
              <path d="M 56,320 L 496,320" fill="none" stroke="black"/>
              <path d="M 56,368 L 496,368" fill="none" stroke="black"/>
              <path d="M 432,640 L 448,640" fill="none" stroke="black"/>
              <path d="M 32,768 L 152,768" fill="none" stroke="black"/>
              <path d="M 344,768 L 496,768" fill="none" stroke="black"/>
              <path d="M 32,1200 L 152,1200" fill="none" stroke="black"/>
              <path d="M 352,1200 L 496,1200" fill="none" stroke="black"/>
              <path d="M 32,1472 L 152,1472" fill="none" stroke="black"/>
              <path d="M 344,1472 L 496,1472" fill="none" stroke="black"/>
              <path d="M 8,1936 L 32,1936" fill="none" stroke="black"/>
              <path d="M 48,1968 L 136,1968" fill="none" stroke="black"/>
              <path d="M 392,1968 L 496,1968" fill="none" stroke="black"/>
              <path d="M 8,2000 L 32,2000" fill="none" stroke="black"/>
              <path d="M 44,344 L 56,368" fill="none" stroke="black"/>
              <path d="M 44,344 L 56,320" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="504,1200 492,1194.4 492,1205.6" fill="black" transform="rotate(0,496,1200)"/>
              <polygon class="arrowhead" points="504,368 492,362.4 492,373.6" fill="black" transform="rotate(0,496,368)"/>
              <polygon class="arrowhead" points="504,32 492,26.4 492,37.6" fill="black" transform="rotate(0,496,32)"/>
              <polygon class="arrowhead" points="440,640 428,634.4 428,645.6" fill="black" transform="rotate(180,432,640)"/>
              <polygon class="arrowhead" points="56,1968 44,1962.4 44,1973.6" fill="black" transform="rotate(180,48,1968)"/>
              <polygon class="arrowhead" points="40,1472 28,1466.4 28,1477.6" fill="black" transform="rotate(180,32,1472)"/>
              <polygon class="arrowhead" points="40,768 28,762.4 28,773.6" fill="black" transform="rotate(180,32,768)"/>
              <g class="text">
                <text x="12" y="36">C1</text>
                <text x="168" y="36">[</text>
                <text x="208" y="36">Unicast</text>
                <text x="252" y="36">w/</text>
                <text x="292" y="36">OSCORE</text>
                <text x="328" y="36">]</text>
                <text x="512" y="36">S</text>
                <text x="540" y="36">/r</text>
                <text x="44" y="52">0.05</text>
                <text x="96" y="52">(FETCH)</text>
                <text x="52" y="68">Token:</text>
                <text x="100" y="68">0x4a</text>
                <text x="60" y="84">Observe:</text>
                <text x="104" y="84">0</text>
                <text x="156" y="84">(register)</text>
                <text x="56" y="100">OSCORE:</text>
                <text x="132" y="100">[kid:0x01,</text>
                <text x="208" y="100">Partial</text>
                <text x="276" y="100">IV:0x65]</text>
                <text x="52" y="116">&lt;Other</text>
                <text x="104" y="116">class</text>
                <text x="144" y="116">U/I</text>
                <text x="196" y="116">options&gt;</text>
                <text x="44" y="132">0xff</text>
                <text x="96" y="148">Encrypted_payload</text>
                <text x="176" y="148">{</text>
                <text x="60" y="164">0x01</text>
                <text x="108" y="164">(GET),</text>
                <text x="76" y="180">Observe:</text>
                <text x="120" y="180">0</text>
                <text x="176" y="180">(register),</text>
                <text x="80" y="196">Uri-Path:</text>
                <text x="140" y="196">"r",</text>
                <text x="68" y="212">&lt;Other</text>
                <text x="120" y="212">class</text>
                <text x="152" y="212">E</text>
                <text x="196" y="212">options&gt;</text>
                <text x="32" y="228">}</text>
                <text x="136" y="260">(</text>
                <text x="152" y="260">S</text>
                <text x="200" y="260">allocates</text>
                <text x="256" y="260">the</text>
                <text x="312" y="260">available</text>
                <text x="376" y="260">Token</text>
                <text x="424" y="260">value</text>
                <text x="468" y="260">0x7b</text>
                <text x="496" y="260">)</text>
                <text x="56" y="292">(</text>
                <text x="72" y="292">S</text>
                <text x="104" y="292">sends</text>
                <text x="140" y="292">to</text>
                <text x="180" y="292">itself</text>
                <text x="216" y="292">a</text>
                <text x="256" y="292">phantom</text>
                <text x="336" y="292">observation</text>
                <text x="416" y="292">request</text>
                <text x="476" y="292">PH_REQ</text>
                <text x="76" y="308">as</text>
                <text x="116" y="308">coming</text>
                <text x="164" y="308">from</text>
                <text x="200" y="308">the</text>
                <text x="228" y="308">IP</text>
                <text x="280" y="308">multicast</text>
                <text x="352" y="308">address</text>
                <text x="420" y="308">GRP_ADDR</text>
                <text x="472" y="308">)</text>
                <text x="540" y="372">/r</text>
                <text x="220" y="388">0.05</text>
                <text x="272" y="388">(FETCH)</text>
                <text x="228" y="404">Token:</text>
                <text x="276" y="404">0x7b</text>
                <text x="236" y="420">Observe:</text>
                <text x="280" y="420">0</text>
                <text x="332" y="420">(register)</text>
                <text x="232" y="436">OSCORE:</text>
                <text x="308" y="436">[kid:0x05,</text>
                <text x="384" y="436">Partial</text>
                <text x="460" y="436">IV:0x01f5,</text>
                <text x="288" y="452">kid</text>
                <text x="376" y="452">context:0x57ab2e]</text>
                <text x="228" y="468">&lt;Other</text>
                <text x="280" y="468">class</text>
                <text x="320" y="468">U/I</text>
                <text x="372" y="468">options&gt;</text>
                <text x="220" y="484">0xff</text>
                <text x="272" y="500">Encrypted_payload</text>
                <text x="352" y="500">{</text>
                <text x="236" y="516">0x01</text>
                <text x="284" y="516">(GET),</text>
                <text x="252" y="532">Observe:</text>
                <text x="296" y="532">0</text>
                <text x="352" y="532">(register),</text>
                <text x="256" y="548">Uri-Path:</text>
                <text x="316" y="548">"r",</text>
                <text x="244" y="564">&lt;Other</text>
                <text x="296" y="564">class</text>
                <text x="328" y="564">E</text>
                <text x="372" y="564">options&gt;</text>
                <text x="208" y="580">}</text>
                <text x="276" y="596">&lt;Countersignature&gt;</text>
                <text x="232" y="628">(</text>
                <text x="248" y="628">S</text>
                <text x="280" y="628">steps</text>
                <text x="324" y="628">SN_5</text>
                <text x="356" y="628">in</text>
                <text x="384" y="628">the</text>
                <text x="424" y="628">Group</text>
                <text x="476" y="628">OSCORE</text>
                <text x="276" y="644">Security</text>
                <text x="348" y="644">Context:</text>
                <text x="404" y="644">SN_5</text>
                <text x="472" y="644">502</text>
                <text x="496" y="644">)</text>
                <text x="192" y="692">(</text>
                <text x="208" y="692">S</text>
                <text x="248" y="692">creates</text>
                <text x="288" y="692">a</text>
                <text x="320" y="692">group</text>
                <text x="392" y="692">observation</text>
                <text x="452" y="692">of</text>
                <text x="476" y="692">/r</text>
                <text x="496" y="692">)</text>
                <text x="224" y="724">(</text>
                <text x="240" y="724">S</text>
                <text x="292" y="724">increments</text>
                <text x="352" y="724">the</text>
                <text x="404" y="724">observer</text>
                <text x="472" y="724">counter</text>
                <text x="248" y="740">for</text>
                <text x="280" y="740">the</text>
                <text x="320" y="740">group</text>
                <text x="392" y="740">observation</text>
                <text x="452" y="740">of</text>
                <text x="476" y="740">/r</text>
                <text x="496" y="740">)</text>
                <text x="12" y="772">C1</text>
                <text x="168" y="772">[</text>
                <text x="208" y="772">Unicast</text>
                <text x="252" y="772">w/</text>
                <text x="292" y="772">OSCORE</text>
                <text x="328" y="772">]</text>
                <text x="512" y="772">S</text>
                <text x="44" y="788">2.05</text>
                <text x="104" y="788">(Content)</text>
                <text x="52" y="804">Token:</text>
                <text x="100" y="804">0x4a</text>
                <text x="56" y="820">OSCORE:</text>
                <text x="96" y="820">-</text>
                <text x="136" y="820">(empty)</text>
                <text x="60" y="836">Max-Age:</text>
                <text x="104" y="836">0</text>
                <text x="52" y="852">&lt;Other</text>
                <text x="104" y="852">class</text>
                <text x="144" y="852">U/I</text>
                <text x="196" y="852">options&gt;</text>
                <text x="44" y="868">0xff</text>
                <text x="96" y="884">Encrypted_payload</text>
                <text x="176" y="884">{</text>
                <text x="60" y="900">5.03</text>
                <text x="116" y="900">(Service</text>
                <text x="208" y="900">Unavailable),</text>
                <text x="104" y="916">Content-Format:</text>
                <text x="324" y="916">application/informative-response+cbor,</text>
                <text x="68" y="932">&lt;Other</text>
                <text x="120" y="932">class</text>
                <text x="152" y="932">E</text>
                <text x="200" y="932">options&gt;,</text>
                <text x="64" y="948">0xff,</text>
                <text x="72" y="964">Payload</text>
                <text x="112" y="964">{</text>
                <text x="64" y="980">/</text>
                <text x="104" y="980">tp_info</text>
                <text x="144" y="980">/</text>
                <text x="184" y="980">0</text>
                <text x="200" y="980">:</text>
                <text x="216" y="980">[</text>
                <text x="344" y="996">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="360" y="1012">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="268" y="1028">0x7b</text>
                <text x="220" y="1044">],</text>
                <text x="64" y="1060">/</text>
                <text x="100" y="1060">ph_req</text>
                <text x="136" y="1060">/</text>
                <text x="184" y="1060">1</text>
                <text x="200" y="1060">:</text>
                <text x="248" y="1060">bstr(0x05</text>
                <text x="296" y="1060">|</text>
                <text x="320" y="1060">OPT</text>
                <text x="344" y="1060">|</text>
                <text x="372" y="1060">0xff</text>
                <text x="400" y="1060">|</text>
                <text x="280" y="1076">PAYLOAD</text>
                <text x="320" y="1076">|</text>
                <text x="356" y="1076">SIGN),</text>
                <text x="64" y="1092">/</text>
                <text x="116" y="1092">last_notif</text>
                <text x="168" y="1092">/</text>
                <text x="184" y="1092">2</text>
                <text x="200" y="1092">:</text>
                <text x="248" y="1092">bstr(0x45</text>
                <text x="296" y="1092">|</text>
                <text x="320" y="1092">OPT</text>
                <text x="344" y="1092">|</text>
                <text x="372" y="1092">0xff</text>
                <text x="400" y="1092">|</text>
                <text x="280" y="1108">PAYLOAD</text>
                <text x="320" y="1108">|</text>
                <text x="356" y="1108">SIGN),</text>
                <text x="64" y="1124">/</text>
                <text x="108" y="1124">join_uri</text>
                <text x="152" y="1124">/</text>
                <text x="184" y="1124">4</text>
                <text x="200" y="1124">:</text>
                <text x="340" y="1124">"coap://myGM/ace-group/myGroup",</text>
                <text x="64" y="1140">/</text>
                <text x="100" y="1140">sec_gp</text>
                <text x="136" y="1140">/</text>
                <text x="184" y="1140">5</text>
                <text x="200" y="1140">:</text>
                <text x="248" y="1140">"myGroup"</text>
                <text x="48" y="1156">}</text>
                <text x="32" y="1172">}</text>
                <text x="12" y="1204">C2</text>
                <text x="168" y="1204">[</text>
                <text x="208" y="1204">Unicast</text>
                <text x="252" y="1204">w/</text>
                <text x="292" y="1204">OSCORE</text>
                <text x="328" y="1204">]</text>
                <text x="512" y="1204">S</text>
                <text x="540" y="1204">/r</text>
                <text x="44" y="1220">0.05</text>
                <text x="96" y="1220">(FETCH)</text>
                <text x="52" y="1236">Token:</text>
                <text x="100" y="1236">0x01</text>
                <text x="60" y="1252">Observe:</text>
                <text x="104" y="1252">0</text>
                <text x="156" y="1252">(register)</text>
                <text x="56" y="1268">OSCORE:</text>
                <text x="132" y="1268">[kid:0x02,</text>
                <text x="208" y="1268">Partial</text>
                <text x="276" y="1268">IV:0xc9]</text>
                <text x="52" y="1284">&lt;Other</text>
                <text x="104" y="1284">class</text>
                <text x="144" y="1284">U/I</text>
                <text x="196" y="1284">options&gt;</text>
                <text x="44" y="1300">0xff</text>
                <text x="96" y="1316">Encrypted_payload</text>
                <text x="176" y="1316">{</text>
                <text x="60" y="1332">0x01</text>
                <text x="108" y="1332">(GET),</text>
                <text x="76" y="1348">Observe:</text>
                <text x="120" y="1348">0</text>
                <text x="176" y="1348">(register),</text>
                <text x="80" y="1364">Uri-Path:</text>
                <text x="140" y="1364">"r",</text>
                <text x="68" y="1380">&lt;Other</text>
                <text x="120" y="1380">class</text>
                <text x="152" y="1380">E</text>
                <text x="196" y="1380">options&gt;</text>
                <text x="32" y="1396">}</text>
                <text x="224" y="1428">(</text>
                <text x="240" y="1428">S</text>
                <text x="292" y="1428">increments</text>
                <text x="352" y="1428">the</text>
                <text x="404" y="1428">observer</text>
                <text x="472" y="1428">counter</text>
                <text x="248" y="1444">for</text>
                <text x="280" y="1444">the</text>
                <text x="320" y="1444">group</text>
                <text x="392" y="1444">observation</text>
                <text x="452" y="1444">of</text>
                <text x="476" y="1444">/r</text>
                <text x="496" y="1444">)</text>
                <text x="12" y="1476">C2</text>
                <text x="168" y="1476">[</text>
                <text x="208" y="1476">Unicast</text>
                <text x="252" y="1476">w/</text>
                <text x="292" y="1476">OSCORE</text>
                <text x="328" y="1476">]</text>
                <text x="512" y="1476">S</text>
                <text x="44" y="1492">2.05</text>
                <text x="104" y="1492">(Content)</text>
                <text x="52" y="1508">Token:</text>
                <text x="100" y="1508">0x01</text>
                <text x="56" y="1524">OSCORE:</text>
                <text x="96" y="1524">-</text>
                <text x="136" y="1524">(empty)</text>
                <text x="60" y="1540">Max-Age:</text>
                <text x="104" y="1540">0</text>
                <text x="52" y="1556">&lt;Other</text>
                <text x="104" y="1556">class</text>
                <text x="144" y="1556">U/I</text>
                <text x="196" y="1556">options&gt;</text>
                <text x="48" y="1572">0xff,</text>
                <text x="96" y="1588">Encrypted_payload</text>
                <text x="176" y="1588">{</text>
                <text x="60" y="1604">5.03</text>
                <text x="116" y="1604">(Service</text>
                <text x="208" y="1604">Unavailable),</text>
                <text x="104" y="1620">Content-Format:</text>
                <text x="324" y="1620">application/informative-response+cbor,</text>
                <text x="68" y="1636">&lt;Other</text>
                <text x="120" y="1636">class</text>
                <text x="152" y="1636">E</text>
                <text x="200" y="1636">options&gt;,</text>
                <text x="64" y="1652">0xff,</text>
                <text x="72" y="1668">Payload</text>
                <text x="112" y="1668">{</text>
                <text x="64" y="1684">/</text>
                <text x="104" y="1684">tp_info</text>
                <text x="144" y="1684">/</text>
                <text x="184" y="1684">0</text>
                <text x="200" y="1684">:</text>
                <text x="216" y="1684">[</text>
                <text x="344" y="1700">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="360" y="1716">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="268" y="1732">0x7b</text>
                <text x="220" y="1748">],</text>
                <text x="64" y="1764">/</text>
                <text x="100" y="1764">ph_req</text>
                <text x="136" y="1764">/</text>
                <text x="184" y="1764">1</text>
                <text x="200" y="1764">:</text>
                <text x="248" y="1764">bstr(0x05</text>
                <text x="296" y="1764">|</text>
                <text x="320" y="1764">OPT</text>
                <text x="344" y="1764">|</text>
                <text x="372" y="1764">0xff</text>
                <text x="400" y="1764">|</text>
                <text x="280" y="1780">PAYLOAD</text>
                <text x="320" y="1780">|</text>
                <text x="356" y="1780">SIGN),</text>
                <text x="64" y="1796">/</text>
                <text x="116" y="1796">last_notif</text>
                <text x="168" y="1796">/</text>
                <text x="184" y="1796">2</text>
                <text x="200" y="1796">:</text>
                <text x="248" y="1796">bstr(0x45</text>
                <text x="296" y="1796">|</text>
                <text x="320" y="1796">OPT</text>
                <text x="344" y="1796">|</text>
                <text x="372" y="1796">0xff</text>
                <text x="400" y="1796">|</text>
                <text x="280" y="1812">PAYLOAD</text>
                <text x="320" y="1812">|</text>
                <text x="356" y="1812">SIGN),</text>
                <text x="64" y="1828">/</text>
                <text x="108" y="1828">join_uri</text>
                <text x="152" y="1828">/</text>
                <text x="184" y="1828">4</text>
                <text x="200" y="1828">:</text>
                <text x="340" y="1828">"coap://myGM/ace-group/myGroup",</text>
                <text x="64" y="1844">/</text>
                <text x="100" y="1844">sec_gp</text>
                <text x="136" y="1844">/</text>
                <text x="184" y="1844">5</text>
                <text x="200" y="1844">:</text>
                <text x="248" y="1844">"myGroup"</text>
                <text x="48" y="1860">}</text>
                <text x="32" y="1876">}</text>
                <text x="104" y="1908">(</text>
                <text x="128" y="1908">The</text>
                <text x="168" y="1908">value</text>
                <text x="204" y="1908">of</text>
                <text x="232" y="1908">the</text>
                <text x="284" y="1908">resource</text>
                <text x="332" y="1908">/r</text>
                <text x="376" y="1908">changes</text>
                <text x="420" y="1908">to</text>
                <text x="460" y="1908">"5678"</text>
                <text x="496" y="1908">)</text>
                <text x="12" y="1956">C1</text>
                <text x="152" y="1972">[</text>
                <text x="200" y="1972">Multicast</text>
                <text x="252" y="1972">w/</text>
                <text x="288" y="1972">Group</text>
                <text x="340" y="1972">OSCORE</text>
                <text x="376" y="1972">]</text>
                <text x="512" y="1972">S</text>
                <text x="12" y="1988">C2</text>
                <text x="140" y="1988">(Destination</text>
                <text x="248" y="1988">address/port:</text>
                <text x="380" y="1988">GRP_ADDR/GRP_PORT)</text>
                <text x="60" y="2020">2.05</text>
                <text x="120" y="2020">(Content)</text>
                <text x="68" y="2036">Token:</text>
                <text x="116" y="2036">0x7b</text>
                <text x="76" y="2052">Observe:</text>
                <text x="120" y="2052">2</text>
                <text x="72" y="2068">OSCORE:</text>
                <text x="148" y="2068">[kid:0x05,</text>
                <text x="224" y="2068">Partial</text>
                <text x="300" y="2068">IV:0x01f6]</text>
                <text x="76" y="2084">Max-Age:</text>
                <text x="120" y="2084">0</text>
                <text x="68" y="2100">&lt;Other</text>
                <text x="120" y="2100">class</text>
                <text x="160" y="2100">U/I</text>
                <text x="212" y="2100">options&gt;</text>
                <text x="60" y="2116">0xff</text>
                <text x="112" y="2132">Encrypted_payload</text>
                <text x="192" y="2132">{</text>
                <text x="76" y="2148">2.05</text>
                <text x="140" y="2148">(Content),</text>
                <text x="92" y="2164">Observe:</text>
                <text x="136" y="2164">-</text>
                <text x="180" y="2164">(empty),</text>
                <text x="84" y="2180">&lt;Other</text>
                <text x="136" y="2180">class</text>
                <text x="168" y="2180">E</text>
                <text x="216" y="2180">options&gt;,</text>
                <text x="80" y="2196">0xff,</text>
                <text x="92" y="2212">Payload:</text>
                <text x="156" y="2212">"5678"</text>
                <text x="48" y="2228">}</text>
                <text x="88" y="2244">&lt;Signature&gt;</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
C1 ---------------- [ Unicast w/ OSCORE ]  ------------------> S  /r
|  0.05 (FETCH)                                                |
|  Token: 0x4a                                                 |
|  Observe: 0 (register)                                       |
|  OSCORE: [kid:0x01, Partial IV:0x65]                         |
|  <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  )    |
|     .------------------------------------------------------- |
|    /                                                         |
|    \                                                         |
|     `------------------------------------------------------> |  /r
|                        0.05 (FETCH)                          |
|                        Token: 0x7b                           |
|                        Observe: 0 (register)                 |
|                        OSCORE: [kid:0x05, Partial IV:0x01f5, |
|                                 kid context:0x57ab2e]        |
|                        <Other class U/I options>             |
|                        0xff                                  |
|                        Encrypted_payload {                   |
|                          0x01 (GET),                         |
|                          Observe: 0 (register),              |
|                          Uri-Path: "r",                      |
|                          <Other class E options>             |
|                        }                                     |
|                        <Countersignature>                    |
|                                                              |
|                           ( 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 ) |
|                                                              |
C1 <--------------- [ Unicast w/ OSCORE ] -------------------- S
|  2.05 (Content)                                              |
|  Token: 0x4a                                                 |
|  OSCORE: - (empty)                                           |
|  Max-Age: 0                                                  |
|  <Other class U/I options>                                   |
|  0xff                                                        |
|  Encrypted_payload {                                         |
|    5.03 (Service Unavailable),                               |
|    Content-Format: application/informative-response+cbor,    |
|    <Other class E options>,                                  |
|    0xff,                                                     |
|    Payload {                                                 |
|      / tp_info /    0 : [                                    |
|                          cri'coap://SRV_ADDR:SRV_PORT/',     |
|                            cri'coap://GRP_ADDR:GRP_PORT/',   |
|                              0x7b                            |
|                         ],                                   |
|      / ph_req /     1 : bstr(0x05 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / last_notif / 2 : bstr(0x45 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / join_uri /   4 : "coap://myGM/ace-group/myGroup",     |
|      / sec_gp /     5 : "myGroup"                            |
|    }                                                         |
|  }                                                           |
|                                                              |
C2 ---------------- [ Unicast w/ OSCORE ]  ------------------> S  /r
|  0.05 (FETCH)                                                |
|  Token: 0x01                                                 |
|  Observe: 0 (register)                                       |
|  OSCORE: [kid:0x02, Partial IV:0xc9]                         |
|  <Other class U/I options>                                   |
|  0xff                                                        |
|  Encrypted_payload {                                         |
|    0x01 (GET),                                               |
|    Observe: 0 (register),                                    |
|    Uri-Path: "r",                                            |
|    <Other class E options>                                   |
|  }                                                           |
|                                                              |
|                          ( S increments the observer counter |
|                            for the group observation of /r ) |
|                                                              |
C2 <--------------- [ Unicast w/ OSCORE ] -------------------- S
|  2.05 (Content)                                              |
|  Token: 0x01                                                 |
|  OSCORE: - (empty)                                           |
|  Max-Age: 0                                                  |
|  <Other class U/I options>                                   |
|  0xff,                                                       |
|  Encrypted_payload {                                         |
|    5.03 (Service Unavailable),                               |
|    Content-Format: application/informative-response+cbor,    |
|    <Other class E options>,                                  |
|    0xff,                                                     |
|    Payload {                                                 |
|      / tp_info /    0 : [                                    |
|                          cri'coap://SRV_ADDR:SRV_PORT/',     |
|                            cri'coap://GRP_ADDR:GRP_PORT/',   |
|                              0x7b                            |
|                         ],                                   |
|      / ph_req /     1 : bstr(0x05 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / last_notif / 2 : bstr(0x45 | OPT | 0xff |             |
|                              PAYLOAD | SIGN),                |
|      / join_uri /   4 : "coap://myGM/ace-group/myGroup",     |
|      / sec_gp /     5 : "myGroup"                            |
|    }                                                         |
|  }                                                           |
|                                                              |
|           ( The value of the resource /r changes to "5678" ) |
|                                                              |
+--+                                                           |
C1 |                                                           |
   | <----------- [ Multicast w/ Group OSCORE ] -------------- S
C2 |       (Destination address/port: GRP_ADDR/GRP_PORT)       |
+--+                                                           |
|    2.05 (Content)                                            |
|    Token: 0x7b                                               |
|    Observe: 2                                                |
|    OSCORE: [kid:0x05, Partial IV:0x01f6]                     |
|    Max-Age: 0                                                |
|    <Other class U/I options>                                 |
|    0xff                                                      |
|    Encrypted_payload {                                       |
|      2.05 (Content),                                         |
|      Observe: - (empty),                                     |
|      <Other class E options>,                                |
|      0xff,                                                   |
|      Payload: "5678"                                         |
|    }                                                         |
|    <Signature>                                               |
|                                                              |
]]></artwork>
        </artset>
      </figure>
      <t>The two external_aad structures used to encrypt and sign the multicast notification above include 'request_kid' = 0x05, 'request_piv' = 0x01f5, and 'request_kid_context' = 0x57ab2e. These values are specified in the 'kid', 'Partial IV', and 'kid context' fields of the OSCORE Option value 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 structures for decrypting and verifying this multicast notification and the following ones in the group observation.</t>
    </section>
    <section anchor="informative-response-params">
      <name>Informative Response Parameters</name>
      <t>This document defines a number of fields used in the informative response defined in <xref target="ssec-server-side-informative"/>.</t>
      <t>The table below summarizes them and specifies the CBOR key to use as abbreviation, instead of the full descriptive name. Note that the media type "application/informative-response+cbor" <bcp14>MUST</bcp14> be used when these fields are transported.</t>
      <table align="center" anchor="_table-informative-response-params">
        <name>Informative Response Parameters.</name>
        <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"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">ph_req</td>
            <td align="left">1</td>
            <td align="left">byte string</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">last_notif</td>
            <td align="left">2</td>
            <td align="left">byte string</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">next_not_before</td>
            <td align="left">3</td>
            <td align="left">unsigned integer</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">ending</td>
            <td align="left">4</td>
            <td align="left">integer or float</td>
            <td align="left">
              <xref target="ssec-server-side-informative"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">join_uri</td>
            <td align="left">5</td>
            <td align="left">text string</td>
            <td align="left">
              <xref target="sec-inf-response"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">sec_gp</td>
            <td align="left">6</td>
            <td align="left">text string</td>
            <td align="left">
              <xref target="sec-inf-response"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">as_uri</td>
            <td align="left">7</td>
            <td align="left">text string</td>
            <td align="left">
              <xref target="sec-inf-response"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">hkdf</td>
            <td align="left">8</td>
            <td align="left">integer or text string</td>
            <td align="left">
              <xref target="sec-inf-response"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">cred_fmt</td>
            <td align="left">9</td>
            <td align="left">integer</td>
            <td align="left">
              <xref target="sec-inf-response"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">gp_enc_alg</td>
            <td align="left">10</td>
            <td align="left">integer or text string</td>
            <td align="left">
              <xref target="sec-inf-response"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">sign_alg</td>
            <td align="left">11</td>
            <td align="left">integer or text string</td>
            <td align="left">
              <xref target="sec-inf-response"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">sign_params</td>
            <td align="left">12</td>
            <td align="left">array</td>
            <td align="left">
              <xref target="sec-inf-response"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">gp_material</td>
            <td align="left">13</td>
            <td align="left">map</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">srv_cred</td>
            <td align="left">14</td>
            <td align="left">byte string</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">srv_identifier</td>
            <td align="left">15</td>
            <td align="left">byte string</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">exi</td>
            <td align="left">16</td>
            <td align="left">unsigned integer</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/> of [RFC-XXXX]</td>
          </tr>
          <tr>
            <td align="left">exp</td>
            <td align="left">17</td>
            <td align="left">integer or float</td>
            <td align="left">
              <xref target="self-managed-oscore-group"/> of [RFC-XXXX]</td>
          </tr>
        </tbody>
      </table>
      <t>Note to RFC Editor: In the table above, please replace "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
    </section>
    <section anchor="transport-protocol-identifiers">
      <name>Transport Protocol Information</name>
      <t><xref target="ssssec-udp-transport-specific"/> defines the transport-specific information that the server has to specify as elements of 'tpi_details' within the 'tp_info' parameter of the informative response defined in <xref target="ssec-server-side-informative"/>, when CoAP responses are transported over UDP.</t>
      <t><xref target="_table-transport-information"/> defines the corresponding entry that <xref target="iana-coap-transport-information"/> registers in the "CoAP Transport Information" registry defined in this document.</t>
      <table align="center" anchor="_table-transport-information">
        <name>CoAP Transport Information for CoAP over UDP.</name>
        <thead>
          <tr>
            <th align="left">CoAP Transport</th>
            <th align="left">Transport Information Details</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">CoAP over UDP</td>
            <td align="left">tpi_client,tpi_token</td>
            <td align="left">
              <xref target="ssssec-udp-transport-specific"/> of [RFC-XXXX]</td>
          </tr>
        </tbody>
      </table>
      <t>Note to RFC Editor: In the table above, please replace "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>In addition to the security considerations from <xref target="RFC7252"/>, <xref target="RFC7641"/>, <xref target="I-D.ietf-core-groupcomm-bis"/>, <xref target="RFC8613"/>, and <xref target="I-D.ietf-core-oscore-groupcomm"/>, the following considerations hold for this document.</t>
      <section anchor="unprotected-communications">
        <name>Unprotected Communications</name>
        <t>If communications are not protected, the server might not be able to effectively authenticate a new client when it registers as an observer. <xref section="7" sectionFormat="of" target="RFC7641"/> specifies how, in such a case, the server must strictly limit the number of notifications sent between receiving acknowledgements from the client, as confirming to be still interested in the observation; i.e., any notifications sent in Non-confirmable messages must be interspersed with confirmable messages.</t>
        <t>This is not possible to achieve by the same means when using the communication model defined in this document, since multicast notifications are sent as Non-confirmable messages. Nonetheless, the server might obtain such acknowledgements by other means.</t>
        <t>For instance, the method defined in <xref target="sec-rough-counting"/> to perform the rough counting of still interested clients triggers (some of) them to explicitly send a new observation request to acknowledge their interest. Then, the server can decide to terminate the group observation altogether, in the case that not enough clients are estimated to be still active.</t>
        <t>If the method defined in <xref target="sec-rough-counting"/> is used, the server <bcp14>SHOULD NOT</bcp14> 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. Note that, when using the method defined in <xref target="sec-rough-counting"/> with unprotected communications, an adversary can craft and inject multiple new observation requests including the Feedback-Divider Option, hence inducing the server to overestimate the number of still interested clients and thus to inappropriately continue the group observation.</t>
      </section>
      <section anchor="protected-communications">
        <name>Protected Communications</name>
        <t>If multicast notifications for an observed resource are protected using Group OSCORE as per <xref target="sec-secured-notifications"/>, it is ensured that those are securely bound to the phantom registration request that started the group observation of that resource. Furthermore, the following applies.</t>
        <ul spacing="normal">
          <li>
            <t>The original registration requests and related unicast (notification) responses <bcp14>MUST</bcp14> also be protected, including and especially the informative responses from the server. An exception is the case discussed in <xref target="deterministic-phantom-Request"/>, where the informative response from the server is not protected.  </t>
            <t>
Protecting informative responses from the server prevents on-path active adversaries from altering the conveyed IP multicast address and serialized phantom registration request.</t>
          </li>
          <li>
            <t>A re-registration request, possibly including the Feedback-Divider Option to support the rough counting of clients (see <xref target="sec-rough-counting"/>), <bcp14>MUST</bcp14> also be protected.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="media-type">
        <name>Media Type Registrations</name>
        <t>This document registers the media type "application/informative-response+cbor" for error messages as informative response defined in <xref target="ssec-server-side-informative"/>, when carrying parameters encoded in CBOR. This registration follows the procedures specified in <xref target="RFC6838"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Type name: application</t>
          </li>
          <li>
            <t>Subtype name: informative-response+cbor</t>
          </li>
          <li>
            <t>Required parameters: N/A</t>
          </li>
          <li>
            <t>Optional parameters: N/A</t>
          </li>
          <li>
            <t>Encoding considerations: Must be encoded as a CBOR map containing the parameters defined in <xref target="ssec-server-side-informative"/> of [RFC-XXXX].</t>
          </li>
          <li>
            <t>Security considerations: See <xref target="sec-security-considerations"/> of [RFC-XXXX].</t>
          </li>
          <li>
            <t>Interoperability considerations: N/A</t>
          </li>
          <li>
            <t>Published specification: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Applications that use this media type: The type is used by CoAP servers and clients that support error messages as informative response defined in <xref target="ssec-server-side-informative"/> of [RFC-XXXX].</t>
          </li>
          <li>
            <t>Fragment identifier considerations: N/A</t>
          </li>
          <li>
            <t>Additional information: N/A</t>
          </li>
          <li>
            <t>Person &amp; email address to contact for further information: CoRE WG mailing list (core@ietf.org) or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </li>
          <li>
            <t>Intended usage: COMMON</t>
          </li>
          <li>
            <t>Restrictions on usage: None</t>
          </li>
          <li>
            <t>Author/Change controller: IETF</t>
          </li>
          <li>
            <t>Provisional registration:  No</t>
          </li>
        </ul>
      </section>
      <section anchor="content-format">
        <name>CoAP Content-Formats Registry</name>
        <t>IANA is asked to add the following entry to the "CoAP Content-Formats" registry <xref target="CoAP.Content.Formats"/> within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <t>Content Type: application/informative-response+cbor</t>
        <t>Content Coding: -</t>
        <t>ID: TBD (value between 0 and 255)</t>
        <t>Reference: [RFC-XXXX]</t>
      </section>
      <section anchor="iana-coap-options">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to enter the following option number to the "CoAP Option Numbers" registry <xref target="CoAP.Option.Numbers"/> within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <table align="center">
          <name>Registrations in the CoAP Option Numbers Registry</name>
          <thead>
            <tr>
              <th align="left">Number</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD18</td>
              <td align="left">Feedback-Divider</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
          </tbody>
        </table>
        <t>For the Feedback-Divider Option, the preferred value range is 0-255. In particular, 18 is the preferred option number.</t>
        <t>Note to RFC Editor: In the table above, please replace TBD18 with the registered option number. Then, please delete this paragraph and the previous paragraph.</t>
      </section>
      <section anchor="iana-target-attributes">
        <name>Target Attributes Registry</name>
        <t>IANA is asked to register the following entry in the "Target Attributes" registry <xref target="Target.Attributes"/> within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <ul spacing="normal">
          <li>
            <t>Attribute Name: gp-obs</t>
          </li>
          <li>
            <t>Brief Description: Observable resource supporting group observation</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="sec-web-linking"/> of [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-informative-response-params">
        <name>Informative Response Parameters Registry</name>
        <t>This document establishes the "Informative Response Parameters" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <t>The registration policy is either "Private Use", "Standards Action with Expert Review", or "Specification Required" or "Expert Review" per <xref target="RFC8126"/>. "Expert Review" guidelines are provided in <xref target="iana-review"/>.</t>
        <t>All assignments according to "Standards Action with Expert Review" are made on a "Standards Action" basis per <xref section="4.9" sectionFormat="of" target="RFC8126"/> with "Expert Review" additionally required per <xref section="4.5" sectionFormat="of" target="RFC8126"/>. The procedure for early IANA allocation of "standards track code points" defined in <xref target="RFC7120"/> also applies. When such a procedure is used, IANA will ask the designated expert(s) to approve the early allocation before registration. In addition, working group chairs are encouraged to consult the expert(s) early during the process outlined in <xref section="3.1" sectionFormat="of" target="RFC7120"/>.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>
            <t>Name: This is a descriptive name that enables easier reference to the item. The name <bcp14>MUST</bcp14> be unique. It is not used in the encoding of the item.</t>
          </li>
          <li>
            <t>CBOR Key: This is the value used as the CBOR map key of the item. These values <bcp14>MUST</bcp14> be unique. The value can be a positive integer, a negative integer, or a text string. Different ranges of values use different registration policies <xref target="RFC8126"/>. Integer values from -256 to 255 as well as text strings of length 1 are designated as "Standards Action With Expert Review". Integer values from -65536 to -257 and from 256 to 65535 as well as text strings of length 2 are designated as "Specification Required". Integer values greater than 65535 as well as text strings of length greater than 2 are designated as "Expert Review". Integer values less than -65536 are marked as "Private Use".</t>
          </li>
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>Reference: This contains a pointer to the public specification for the item, if one exists.</t>
          </li>
        </ul>
        <t>This registry has been initially populated by the entries in <xref target="_table-informative-response-params"/>.</t>
      </section>
      <section anchor="iana-coap-transport-information">
        <name>CoAP Transport Information Registry</name>
        <t>This document establishes the "CoAP Transport Information" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <t>The registration policy is "Expert Review" <xref target="RFC8126"/>. "Expert Review" guidelines are provided in <xref target="iana-review"/>.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>
            <t>CoAP Transport: This field contains a text string. The value <bcp14>MUST</bcp14> be unique and it uniquely identifies the transport used for CoAP messages.</t>
          </li>
          <li>
            <t>Transport Information Details: This field contains a list of text strings, where two adjacent strings are separated by a single comma character. Each text string is the name of an element that provides transport-specific information related to a pertinent CoAP request. Optional elements are prepended by '?' and <bcp14>MUST</bcp14> be specified next to each other as last ones.</t>
          </li>
          <li>
            <t>Reference: This contains a pointer to the public specification for the item, if one exists.</t>
          </li>
        </ul>
        <t>This registry has been initially populated by the entry in <xref target="_table-transport-information"/>.</t>
      </section>
      <section anchor="iana-review">
        <name>Expert Review Instructions</name>
        <t>"Standards Action with Expert Review", "Specification Required", and "Expert Review" are three of the registration policies defined for the IANA registries established in this document. 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>
            <t>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.</t>
          </li>
          <li>
            <t>Specifications are required for the "Standards Action With Expert Review" range of point assignment. Specifications should exist for "Specification Required" ranges, but early assignment before a specification is available is considered to be permissible. When specifications are not provided, the description provided needs to have sufficient information to identify what the point is being used for.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-core-groupcomm-bis">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="10" month="February" year="2026"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) is a web transfer
   protocol for constrained devices and constrained networks.  In a
   number of use cases, constrained devices often naturally operate in
   groups (e.g., in a building automation scenario, all lights in a
   given room may need to be switched on/off as a group).  This document
   specifies the use of CoAP for group communication, including the use
   of UDP/IP multicast as the default underlying data transport.  Both
   unsecured and secured CoAP group communication are specified.
   Security is achieved by use of the Group Object Security for
   Constrained RESTful Environments (Group OSCORE) protocol.  The target
   application area of this specification is any group communication use
   cases that involve resource-constrained devices or networks that
   support CoAP.  This document replaces and obsoletes RFC 7390, while
   it updates RFC 7252 and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-18"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm">
          <front>
            <title>Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="23" month="December" year="2025"/>
            <abstract>
              <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of messages exchanged with the Constrained Application
   Protocol (CoAP) between members of a group, e.g., sent over IP
   multicast.  In particular, the described protocol defines how OSCORE
   is used in a group communication setting to provide source
   authentication for CoAP group requests, sent by a client to multiple
   servers, and for protection of the corresponding CoAP responses.
   Group OSCORE also defines a pairwise mode where each member of the
   group can efficiently derive a symmetric pairwise key with each other
   member of the group for pairwise OSCORE communication.  Group OSCORE
   can be used between endpoints communicating with CoAP or CoAP-
   mappable HTTP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-28"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for Group Object Security for Constrained RESTful Environments (Group OSCORE) Using Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="14" month="March" year="2026"/>
            <abstract>
              <t>   This document defines an application profile of the Authentication
   and Authorization for Constrained Environments (ACE) framework, to
   request and provision keying material in group communication
   scenarios that are based on the Constrained Application Protocol
   (CoAP) and are secured with Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  This application profile
   delegates the authentication and authorization of Clients, which 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 of 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-21"/>
        </reference>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="21" month="November" year="2025"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) rather than as a
   sequence of characters.  This approach simplifies parsing,
   comparison, and reference resolution in environments with severe
   limitations on processing power, code size, and memory size.

   This RFC updates RFC 7595 by adding a column on the "URI Schemes"
   registry.


   // (This "cref" paragraph will be removed by the RFC editor:) After
   // approval of -28 and nit fixes in -29, the present revision -30
   // contains two more small fixes for nits that were uncovered in the
   // RPC intake process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-30"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-literals">
          <front>
            <title>CBOR Extended Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="6" month="April" year="2026"/>
            <abstract>
              <t>   This document formalizes and consolidates the definition of the
   Extended Diagnostic Notation (EDN) of the Concise Binary Object
   Representation (CBOR), addressing implementer experience.

   Replacing EDN's previous informal descriptions, it updates RFC 8949,
   obsoleting its Section 8, and RFC 8610, obsoleting its Appendix G.

   It also specifies registry-based extension points and uses them to
   support text representations such as of epoch-based dates/times and
   of IP addresses and prefixes.


   // (This cref will be removed by the RFC editor:) The present -22 is
   // intended to present a complete specification that can be used to
   // confirm the results of the 2026-04-01 CBOR interim.  This includes
   // extending inline comments to encompass C-style comments, and end-
   // of-line comments to encompass C++-style comments.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-22"/>
        </reference>
        <reference anchor="RFC4944">
          <front>
            <title>Transmission of IPv6 Packets over IEEE 802.15.4 Networks</title>
            <author fullname="G. Montenegro" initials="G." surname="Montenegro"/>
            <author fullname="N. Kushalnagar" initials="N." surname="Kushalnagar"/>
            <author fullname="J. Hui" initials="J." surname="Hui"/>
            <author fullname="D. Culler" initials="D." surname="Culler"/>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document describes the frame format for transmission of IPv6 packets and the method of forming IPv6 link-local addresses and statelessly autoconfigured addresses on IEEE 802.15.4 networks. Additional specifications include a simple header compression scheme using shared context and provisions for packet delivery in IEEE 802.15.4 meshes. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4944"/>
          <seriesInfo name="DOI" value="10.17487/RFC4944"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC7120">
          <front>
            <title>Early IANA Allocation of Standards Track Code Points</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <date month="January" year="2014"/>
            <abstract>
              <t>This memo describes the process for early allocation of code points by IANA from registries for which "Specification Required", "RFC Required", "IETF Review", or "Standards Action" policies apply. This process can be used to alleviate the problem where code point allocation is needed to facilitate desired or required implementation and deployment experience prior to publication of an RFC, which would normally trigger code point allocation. The procedures in this document are intended to apply only to IETF Stream documents.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="100"/>
          <seriesInfo name="RFC" value="7120"/>
          <seriesInfo name="DOI" value="10.17487/RFC7120"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7595">
          <front>
            <title>Guidelines and Registration Procedures for URI Schemes</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <date month="June" year="2015"/>
            <abstract>
              <t>This document updates the guidelines and recommendations, as well as the IANA registration processes, for the definition of Uniform Resource Identifier (URI) schemes. It obsoletes RFC 4395.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="35"/>
          <seriesInfo name="RFC" value="7595"/>
          <seriesInfo name="DOI" value="10.17487/RFC7595"/>
        </reference>
        <reference anchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC7967">
          <front>
            <title>Constrained Application Protocol (CoAP) Option for No Server Response</title>
            <author fullname="A. Bhattacharyya" initials="A." surname="Bhattacharyya"/>
            <author fullname="S. Bandyopadhyay" initials="S." surname="Bandyopadhyay"/>
            <author fullname="A. Pal" initials="A." surname="Pal"/>
            <author fullname="T. Bose" initials="T." surname="Bose"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>There can be machine-to-machine (M2M) scenarios where server responses to client requests are redundant. This kind of open-loop exchange (with no response path from the server to the client) may be desired to minimize resource consumption in constrained systems while updating many resources simultaneously or performing high-frequency updates. CoAP already provides Non-confirmable (NON) messages that are not acknowledged by the recipient. However, the request/response semantics still require the server to respond with a status code indicating "the result of the attempt to understand and satisfy the request", per RFC 7252.</t>
              <t>This specification introduces a CoAP option called 'No-Response'. Using this option, the client can explicitly express to the server its disinterest in all responses against the particular request. This option also provides granular control to enable expression of disinterest to a particular response class or a combination of response classes. The server MAY decide to suppress the response by not transmitting it back to the client according to the value of the No-Response option in the request. This option may be effective for both unicast and multicast requests. This document also discusses a few examples of applications that benefit from this option.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7967"/>
          <seriesInfo name="DOI" value="10.17487/RFC7967"/>
        </reference>
        <reference anchor="RFC8085">
          <front>
            <title>UDP Usage Guidelines</title>
            <author fullname="L. Eggert" initials="L." surname="Eggert"/>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="G. Shepherd" initials="G." surname="Shepherd"/>
            <date month="March" year="2017"/>
            <abstract>
              <t>The User Datagram Protocol (UDP) provides a minimal message-passing transport that has no inherent congestion control mechanisms. This document provides guidelines on the use of UDP for the designers of applications, tunnels, and other protocols that use UDP. Congestion control guidelines are a primary focus, but the document also provides guidance on other topics, including message sizes, reliability, checksums, middlebox traversal, the use of Explicit Congestion Notification (ECN), Differentiated Services Code Points (DSCPs), and ports.</t>
              <t>Because congestion control is critical to the stable operation of the Internet, applications and other protocols that choose to use UDP as an Internet transport must employ mechanisms to prevent congestion collapse and to establish some degree of fairness with concurrent traffic. They may also need to implement additional mechanisms, depending on how they use UDP.</t>
              <t>Some guidance is also applicable to the design of other protocols (e.g., protocols layered directly on IP or via IP-based tunnels), especially when these protocols do not themselves provide congestion control.</t>
              <t>This document obsoletes RFC 5405 and adds guidelines for multicast UDP usage.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="145"/>
          <seriesInfo name="RFC" value="8085"/>
          <seriesInfo name="DOI" value="10.17487/RFC8085"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8132">
          <front>
            <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="A. Sehgal" initials="A." surname="Sehgal"/>
            <date month="April" year="2017"/>
            <abstract>
              <t>The methods defined in RFC 7252 for the Constrained Application Protocol (CoAP) only allow access to a complete resource, not to parts of a resource. In case of resources with larger or complex data, or in situations where resource continuity is required, replacing or requesting the whole resource is undesirable. Several applications using CoAP need to access parts of the resources.</t>
              <t>This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH, which are used to access and update parts of a resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8132"/>
          <seriesInfo name="DOI" value="10.17487/RFC8132"/>
        </reference>
        <reference anchor="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9203">
          <front>
            <title>The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework. It utilizes Object Security for Constrained RESTful Environments (OSCORE) to provide communication security and proof-of-possession for a key owned by the client and bound to an OAuth 2.0 access token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9203"/>
          <seriesInfo name="DOI" value="10.17487/RFC9203"/>
        </reference>
        <reference anchor="COSE.Algorithms" target="https://www.iana.org/assignments/cose/cose.xhtml#algorithms">
          <front>
            <title>COSE Algorithms</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="COSE.Key.Types" target="https://www.iana.org/assignments/cose/cose.xhtml#key-type">
          <front>
            <title>COSE Key Types</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="COSE.Header.Parameters" target="https://www.iana.org/assignments/cose/cose.xhtml#header-parameters">
          <front>
            <title>COSE Header Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="CoAP.Content.Formats" target="https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#content-formats">
          <front>
            <title>CoAP Content-Formats</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="CoAP.Option.Numbers" target="https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#option-numbers">
          <front>
            <title>CoAP Option Numbers</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="Target.Attributes" target="https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#target-attributes">
          <front>
            <title>Target Attributes</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-core-coap-pubsub">
          <front>
            <title>A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Jaime Jimenez" initials="J." surname="Jimenez">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>Dogtiger Labs</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   This document describes a publish-subscribe architecture for the
   Constrained Application Protocol (CoAP), extending the capabilities
   of CoAP communications for supporting endpoints with long breaks in
   connectivity and/or up-time.  CoAP clients publish on and subscribe
   to a topic via a corresponding topic resource at a CoAP server acting
   as broker.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-19"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-discovery">
          <front>
            <title>Discovery of OSCORE Groups with the CoRE Resource Directory</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
         </author>
            <date day="2" month="March" year="2026"/>
            <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 defines 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 can be used to protect communications in 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-19"/>
        </reference>
        <reference anchor="I-D.ietf-core-coral">
          <front>
            <title>The Constrained RESTful Application Language (CoRAL)</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>ARM</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <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-06"/>
        </reference>
        <reference anchor="I-D.ietf-core-cacheable-oscore">
          <front>
            <title>End-to-End Protected and Cacheable Responses for the Constrained Application Protocol (CoAP) using Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   When using the Constrained Application Protocol (CoAP), exchanged
   messages can be protected end-to-end also across untrusted
   intermediary proxies.  This can be achieved with Object Security for
   Constrained RESTful Environments (OSCORE) or, in the case of group
   communication, with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  However, this sidesteps the proxies'
   abilities to cache responses from the origin server(s).  This
   document restores cacheability of end-end protected responses at
   proxies, by using Group OSCORE and introducing consensus requests,
   which any client in an OSCORE group can send to one server or
   multiple servers in the same group.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-cacheable-oscore-01"/>
        </reference>
        <reference anchor="I-D.ietf-cose-cbor-encoded-cert">
          <front>
            <title>CBOR Encoded X.509 Certificates (C509 Certificates)</title>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Shahid Raza" initials="S." surname="Raza">
              <organization>University of Glasgow</organization>
            </author>
            <author fullname="Joel Höglund" initials="J." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Martin Furuhed" initials="M." surname="Furuhed">
              <organization>IN Groupe</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <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, common certificate
   profiles and is extensible.

   Two types of C509 certificates are defined.  One type is an
   invertible CBOR re-encoding of DER-encoded X.509 certificates with
   the signature field copied from the DER encoding.  The other type is
   identical except that the signature is over the CBOR encoding instead
   of the DER encoding, avoiding the use of ASN.1.  Both types of
   certificates have the same semantics as X.509 and the same reduced
   size compared to X.509.

   The document also specifies CBOR encoded data structures for
   certificate (signing) requests and certificate request templates, new
   COSE headers, as well as a TLS certificate type and a file format for
   C509.  This document updates RFC 6698; the TLSA selectors registry is
   extended to include C509 certificates.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cbor-encoded-cert-17"/>
        </reference>
        <reference anchor="I-D.ietf-core-multicast-notifications-proxy">
          <front>
            <title>Using Proxies for Observe Notifications as CoAP Multicast Responses</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server and to receive notifications as
   unicast responses upon changes of the resource state.  Instead of
   sending a distinct unicast notification to each different client, a
   server can alternatively send a single notification as a response
   message over multicast, to all the clients observing the same target
   resource.  When doing so, the security protocol Group Object Security
   for Constrained RESTful Environments (Group OSCORE) can be used to
   protect multicast notifications end-to-end between the server and the
   observer clients.  This document describes how multicast
   notifications can be used in network setups that leverage a proxy,
   e.g., in order to accommodate clients that are not able to directly
   listen to multicast traffic.



   The present version -00 refers to version -12 of draft-ietf-core-
   observe-multicast-notifications, which includes content about proxies
   that is also included in the present document.  Such content will be
   removed from draft-ietf-core-observe-multicast-notifications in its
   next revision.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-multicast-notifications-proxy-00"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC6690">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links. Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type. "RESTful" refers to the Representational State Transfer (REST) architecture. A well-known URI is defined as a default entry point for requesting the links hosted by a server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC9176">
          <front>
            <title>Constrained RESTful Environments (CoRE) Resource Directory</title>
            <author fullname="C. Amsüss" initials="C." role="editor" surname="Amsüss"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="M. Koster" initials="M." surname="Koster"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>In many Internet of Things (IoT) applications, direct discovery of resources is not practical due to sleeping nodes or networks where multicast traffic is inefficient. These problems can be solved by employing an entity called a Resource Directory (RD), which contains information about resources held on other servers, allowing lookups to be performed for those resources. The input to an RD is composed of links, and the output is composed of links constructed from the information stored in the RD. This document specifies the web interfaces that an RD supports for web servers to discover the RD and to register, maintain, look up, and remove information on resources. Furthermore, new target attributes useful in conjunction with an RD are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9176"/>
          <seriesInfo name="DOI" value="10.17487/RFC9176"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="RFC9953">
          <front>
            <title>DNS over CoAP (DoC)</title>
            <author fullname="M. S. Lenders" initials="M. S." surname="Lenders"/>
            <author fullname="C. Amsüss" initials="C." surname="Amsüss"/>
            <author fullname="C. Gündoğan" initials="C." surname="Gündoğan"/>
            <author fullname="T. C. Schmidt" initials="T. C." surname="Schmidt"/>
            <author fullname="M. Wählisch" initials="M." surname="Wählisch"/>
            <date month="March" year="2026"/>
            <abstract>
              <t>This document defines a protocol for exchanging DNS queries (OPCODE 0) over the Constrained Application Protocol (CoAP). These CoAP messages can be protected by (D)TLS-Secured CoAP or Object Security for Constrained RESTful Environments (OSCORE) to provide encrypted DNS message exchange for constrained devices in the Internet of Things (IoT).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9953"/>
          <seriesInfo name="DOI" value="10.17487/RFC9953"/>
        </reference>
        <reference anchor="MOBICOM99" target="https://people.eecs.berkeley.edu/~culler/cs294-f03/papers/bcast-storm.pdf">
          <front>
            <title>The Broadcast Storm Problem in a Mobile Ad Hoc Network</title>
            <author initials="S." surname="Ni" fullname="Sze-Yao Ni">
              <organization/>
            </author>
            <author initials="Y." surname="Tseng" fullname="Yu-Chee Tseng">
              <organization/>
            </author>
            <author initials="Y." surname="Chen" fullname="Yuh-Shyan Chen">
              <organization/>
            </author>
            <author initials="J." surname="Sheu" fullname="Jang-Ping Sheu">
              <organization/>
            </author>
            <date year="1999" month="August"/>
          </front>
          <seriesInfo name="Proceedings of the 5th annual ACM/IEEE international conference on Mobile computing and networking" value=""/>
        </reference>
      </references>
    </references>
    <?line 1291?>

<section anchor="appendix-different-sources">
      <name>Different Sources for Group Observation Data</name>
      <t>While the clients usually receive the phantom registration request and other information related to the group observation through an informative response (see <xref target="ssec-server-side-informative"/>), the server can also make the same group observation data available through different means, such as those described in <xref target="appendix-different-sources-pubsub"/> and <xref target="appendix-different-sources-introspection"/>.</t>
      <t>In such a case, the server has to first start the group observation (see <xref target="ssec-server-side-request"/>), before making the corresponding data available.</t>
      <t>When distributed through different means than informative responses, the group observation data has to specify the time when the group observation is planned to be canceled by the server. In particular, the server commits to keeping the group observation ongoing until the scheduled cancellation time is reached. Before that time, the server might however retract the advertised group observation data and thus make it not available to new clients.</t>
      <t>After a client has obtained the group observation data from different sources than an informative response, the client can simply set up the right multicast address and start receiving multicast notifications for the group observation. Consequently, the server will not receive an observation request from that client, will not follow-up with a corresponding informative response, and thus its observer counter (see <xref target="sec-server-side"/>) is not incremented to reflect the presence of the new client.</t>
      <section anchor="appendix-different-sources-pubsub">
        <name>Topic Discovery in Publish-Subscribe Settings</name>
        <t>In a Publish-Subscribe scenario (e.g., see <xref target="I-D.ietf-core-coap-pubsub"/>), a group observation can be discovered along with topic metadata.</t>
        <t>To this end, together with the topic metadata, the server has to publish the same information associated with the group observation that would be conveyed in the informative response returned to observer clients (see <xref target="ssec-server-side-informative"/>).</t>
        <t>This information especially includes the phantom observation request associated with the group observation, as well as the addressing information of the server and the addressing information where multicast notifications are sent to.</t>
        <t><xref target="discovery-pub-sub"/> provides an example where a group observation is discovered. The example assumes a CoRAL namespace <xref target="I-D.ietf-core-coral"/> that contains properties analogous to those in the Content-Format "application/informative-response+cbor".</t>
        <t>Note that the information about the transport protocol used for the group observation is not expressed through a dedicated element equivalent to 'tp_id' of the informative response (see <xref target="sssec-transport-specific-encoding"/>). Instead, it is expressed through the scheme and authority components of the two URIs specified as 'tp_info_server' and 'tp_info_client', where the former specifies the addressing information of the server (like 'tpi_server' in <xref target="ssssec-udp-transport-specific"/>), and the latter specifies the addressing information where multicast notifications are sent to (like 'tpi_client' in <xref target="ssssec-udp-transport-specific"/>).</t>
        <figure anchor="discovery-pub-sub">
          <name>Group Observation Discovery in a Pub-Sub Scenario</name>
          <artwork><![CDATA[
Request:

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

Response:

    2.05 Content
    Content-Format: 65087 (application/coral+cbor)

    rdf:type [ = <http://example.org/pubsub/topic-list>,
           topic [ = </ps/topics/1234>,
               tp_info_server <coap://[2001:db8::1]>,
               tp_info_client <coap://[ff35:30:2001:db8::123]>,
               tp_info_token "7b"^^xsd::hexBinary,
               ph_req "0160.."^^xsd::hexBinary,
               last_notif "256105.."^^xsd::hexBinary,
               ending "2051251201"^^xsd::unsignedLong,
           ]
    ]
]]></artwork>
        </figure>
        <t>With this information from the topic discovery step, the client can already set up its multicast address and start receiving multicast notifications for the group observation in question.</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 switched off) cellular uplink to discover the topics it needs to update its display to, and then listen on a LoRaWAN interface for receiving the actual multicast notifications.</t>
      </section>
      <section anchor="appendix-different-sources-introspection">
        <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. <xref target="discovery-introspection"/> shows an example of a possible interface, as relying on the already known Token value of intercepted multicast notifications associated with a phantom registration request.</t>
        <figure anchor="discovery-introspection">
          <name>Group Observation Discovery with Server Introspection</name>
          <artwork><![CDATA[
Request:

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

Response:

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

{
  / tp_info /    0 : [
                      [ / tpi_server /
                       -1, / scheme-id -- equivalent to "coap" /
                        h'20010db80000000000000000000000ab' / host-ip /
                      ],
                      [ / tpi_client /
                       -1, / scheme-id -- equivalent to "coap" /
                       h'ff35003020010db80000000000000023', / host-ip /
                       61616 / port /
                      ],
                      h'7b' / tpi_token /
                     ],
  / ph_req /     1 : h'0160...528c', / elided for brevity /
  / last_notif / 2 : h'256105...4fa1', / elided for brevity /
  / ending /     4 : 2051251201

}
]]></artwork>
        </figure>
        <t>For example, a network sniffer could offer sending such a request when unknown multicast notifications are seen in the network. Consequently, it can associate those notifications with a URI, or decrypt them if it is a member of the correct OSCORE group.</t>
      </section>
    </section>
    <section anchor="appendix-pseudo-code-counting">
      <name>Pseudo-Code for Rough Counting of Clients</name>
      <t>This appendix provides a description in pseudo-code of the two algorithms used for the rough counting of active observers, as defined in <xref target="sec-rough-counting"/>.</t>
      <t>In particular, <xref target="appendix-pseudo-code-counting-client"/> describes the algorithm for the client side and <xref target="appendix-pseudo-code-counting-client-constrained"/> describes an optimized version for constrained clients. Finally, <xref target="appendix-pseudo-code-counting-server"/> describes the algorithm for the server side.</t>
      <section anchor="appendix-pseudo-code-counting-client">
        <name>Client Side</name>
        <artwork><![CDATA[
input:  int Q, // Value of the FEEDBACK-DIVIDER 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(FEEDBACK-DIVIDER);
    opt.set(0);
    req.setOption(opt);

    req.send(SRV_ADDR, SRV_PORT);
}
]]></artwork>
      </section>
      <section anchor="appendix-pseudo-code-counting-client-constrained">
        <name>Client Side (Optimized Version)</name>
        <artwork><![CDATA[
input:  int Q, // Value of the FEEDBACK-DIVIDER 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(FEEDBACK-DIVIDER);
    opt.set(0);
    req.setOption(opt);

    req.send(SRV_ADDR, SRV_PORT);
}

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

output: int NEW_COUNT // Updated observer counter


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

int N = max(COUNT, 1);
int Q = max(ceil(log2(N / M)), 0);
Option opt = new Option(FEEDBACK-DIVIDER);
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
         received between t1 and t2, and including
         the FEEDBACK-DIVIDER Option with value 0>;

int E = R * (2^Q);

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

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

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

return NEW_COUNT;
]]></artwork>
      </section>
    </section>
    <section anchor="self-managed-oscore-group">
      <name>OSCORE Group Self-Managed by the Server</name>
      <t>For simple settings, where no pre-arranged group with suitable memberships is available, the server can be responsible to set up and manage the OSCORE group used to protect the group observation.</t>
      <t>In such a case, a client would implicitly request to join the OSCORE group when sending the observe registration request to the server. When replying, the server includes the group keying material and related information in the informative response (see <xref target="ssec-server-side-informative"/>).</t>
      <t>In addition to what is defined in <xref target="sec-server-side"/>, the CBOR map in the informative response payload contains the following fields, whose CBOR abbreviations are defined in <xref target="informative-response-params"/>.</t>
      <ul spacing="normal">
        <li>
          <t>'gp_material': this element is a CBOR map, which includes what the client needs in order to set up the Group OSCORE Security Context.  </t>
          <t>
This parameter has as value a subset of the Group_OSCORE_Input_Material object, which is defined in <xref section="6.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/> and extends the OSCORE_Input_Material object encoded in CBOR as defined in <xref section="3.2.1" sectionFormat="of" target="RFC9203"/>.  </t>
          <t>
In particular, the following elements of the Group_OSCORE_Input_Material object are included, using the same CBOR abbreviations from the OSCORE Security Context Parameters Registry, as in <xref section="6.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>.  </t>
          <ul spacing="normal">
            <li>
              <t>'ms', 'contexId', 'cred_fmt', 'gp_enc_alg', 'sign_alg', and 'sign_params'. These elements <bcp14>MUST</bcp14> be included.</t>
            </li>
            <li>
              <t>'hkdf' and 'salt'. These elements <bcp14>MAY</bcp14> be included.</t>
            </li>
          </ul>
          <t>
The 'group_senderId' element of the Group_OSCORE_Input_Material object <bcp14>MUST NOT</bcp14> be included.  </t>
          <t>
Note that no information is provided as related to the AEAD Algorithm, or to the Pairwise Key Agreement Algorithm and its parameters. In fact, the clients and the server will never use the pairwise mode of Group OSCORE as per <xref section="8" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> and will not need to compute a cofactor Diffie-Hellman shared secret in this OSCORE group.  </t>
          <t>
It follows that:  </t>
          <ul spacing="normal">
            <li>
              <t>In the Common Context of the Group OSCORE Security Context, the parameter AEAD Algorithm and the parameter Pairwise Key Agreement Algorithm are not set (see <xref section="2.1.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> and <xref section="2.1.10" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</t>
            </li>
            <li>
              <t>Aligned with the previous point, when building the two OSCORE external_aad structures to process messages protected with Group OSCORE in this OSCORE group, (see <xref section="3.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), the elements 'alg_aead' and 'alg_pairwise_key_agreement' within the 'algorithms' arrays are set to the CBOR simple value <tt>null</tt> (0xf6).</t>
            </li>
          </ul>
        </li>
        <li>
          <t>'srv_cred': this element is a CBOR byte string, with value the original byte serialization of the server's authentication credential used in the OSCORE group. In particular, the original byte serialization complies with the format specified by the 'cred_fmt' element of 'gp_material'.</t>
        </li>
        <li>
          <t>'srv_identifier': this element is encoded as a CBOR byte string, with value the Sender ID that the server has in the OSCORE group.</t>
        </li>
        <li>
          <t>'exi': this element has as value the residual lifetime of the keying material of the OSCORE group specified in the 'gp_material' parameter, encoded as a CBOR unsigned integer.  </t>
          <t>
The value represents the residual lifetime of the keying material in seconds, i.e., the number of seconds between the current time at the server and the time when the keying material expires. Upon receiving the informative response containing the 'exi' parameter, a client determines the expiration time of the keying material by adding the number of seconds specified in the 'exi' parameter to its current time.</t>
        </li>
      </ul>
      <t>If the server has a reliable way to synchronize its internal clock with UTC, then the server includes also the following field:</t>
      <ul spacing="normal">
        <li>
          <t>'exp': this element has as value the expiration time of the keying material of the OSCORE group specified in the 'gp_material' parameter, encoded as a CBOR integer or as a CBOR floating-point number.  </t>
          <t>
The value is the number of seconds from 1970-01-01T00:00:00Z UTC until the specified UTC date/time, ignoring leap seconds, analogous to what is specified for NumericDate in <xref section="2" sectionFormat="of" target="RFC7519"/>.</t>
        </li>
      </ul>
      <t>If a client has a reliable way to synchronize its internal clock with UTC and the 'exp' parameter is present in the informative response, then the client <bcp14>MUST</bcp14> use the 'exp' parameter value as expiration time for the group keying material.</t>
      <t>Note that the informative response does not require to include an explicit proof of possession of the server's private key. Although the server is also acting as Group Manager and a proof-of-possession evidence of the Group Manager's private key is included in a full-fledged Join Response (see <xref section="6.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>), such proof of possession will be achieved through every multicast notification that the server sends, as protected with the group mode of Group OSCORE and including a signature computed with its private key.</t>
      <t>A client receiving an informative response uses the information above to set up the Group OSCORE Security Context, as described in <xref section="2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. Note that the client does not obtain a Sender ID of its own, hence it installs the Security Context like a "silent server" would, i.e., without a 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 the 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 structure for encrypting and signing the phantom request and multicast notifications (see <xref section="3.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</t>
      <t>Furthermore, the server complies with the following points.</t>
      <ul spacing="normal">
        <li>
          <t>The server <bcp14>MUST NOT</bcp14> self-manage OSCORE groups and provide the related keying material in the informative response for any other purpose than the protection of the phantom requests and the multicast notifications in group observations that it hosts, according to the method defined in this document.  </t>
          <t>
The server <bcp14>MAY</bcp14> use the same self-managed OSCORE group to protect the phantom request and the multicast notifications of multiple group observations that it hosts.</t>
        </li>
        <li>
          <t>The server <bcp14>MUST NOT</bcp14> provide in the informative response the keying material of other OSCORE groups it is or has been a member of.</t>
        </li>
      </ul>
      <t>Upon expiration of the group keying material as indicated in the informative response by the 'exp' parameter (if present) and the 'exi' parameter:</t>
      <ul spacing="normal">
        <li>
          <t>The server <bcp14>MUST</bcp14> stop using the keying material and <bcp14>MUST</bcp14> cancel the group observations for which that keying material is used (see <xref target="ssec-server-side-cancellation"/> and <xref target="ssec-server-side-cancellation-oscore"/>). If the server creates a new group observation as a replacement or follow-up using the same OSCORE group, then the following applies:  </t>
          <ul spacing="normal">
            <li>
              <t>The server <bcp14>MUST</bcp14> update the OSCORE Master Secret.</t>
            </li>
            <li>
              <t>The server <bcp14>MUST</bcp14> update the ID Context used as Group Identifier (Gid), consistent with <xref section="12.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>.</t>
            </li>
            <li>
              <t>The server <bcp14>MAY</bcp14> update the OSCORE Master Salt.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>The client <bcp14>MUST</bcp14> stop using the keying material and <bcp14>MAY</bcp14> re-register the observation at the server.</t>
        </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, while it is analogous to the informative response defined in <xref target="ssec-server-side-informative"/>, this response has the following differences:</t>
      <ul spacing="normal">
        <li>
          <t>it additionally contains the parameters mentioned above, for the next group keying material to be used; and</t>
        </li>
        <li>
          <t>it <bcp14>MAY</bcp14> omit the 'tp_info' and 'ph_req' parameters, since the associated information is immutable throughout the observation lifetime.</t>
        </li>
      </ul>
      <t>The response has the same Token value T of the phantom registration request and it does not include an Observe Option. The server <bcp14>MUST</bcp14> use its own Sender Sequence Number as Partial IV to protect the error response and <bcp14>MUST</bcp14> include the Partial IV in the OSCORE Option value 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="12.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>). In fact, only two entities in the group have a Sender ID, i.e., the server and possibly the Deterministic Client, if the optimization defined in this appendix is combined with the use of phantom requests as Deterministic Requests (see <xref target="deterministic-phantom-Request"/>). In particular, both of them never change their Sender ID during the group lifetime and they both remain part of the group until the group ceases to exist.</t>
      <t>As an alternative to renewing the keying material before it expires, the server can simply cancel the group observation (see <xref target="ssec-server-side-cancellation"/> and <xref target="ssec-server-side-cancellation-oscore"/>), which results in the eventual re-registration of the clients that are still interested in the group observation.</t>
      <t>Applications requiring backward security or forward security are <bcp14>REQUIRED</bcp14> to use an actual group joining process (usually through a dedicated Group Manager), e.g., the ACE joining procedure defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>. The server can facilitate the clients by providing them with information about the OSCORE group to join, as described in <xref target="sec-inf-response"/>.</t>
    </section>
    <section anchor="deterministic-phantom-Request">
      <name>Phantom Request as Deterministic Request</name>
      <t>In some settings, the server can assume that all the approaching clients already have the exact phantom observation request to use, together with the transport-specific information required to listen to corresponding multicast notifications.</t>
      <t>For instance, the clients can be pre-configured with the phantom observation request, or they may be expected to retrieve it through dedicated means (see <xref target="appendix-different-sources"/>). In either case, the server would already have started the group observation, before the associated phantom observation request was disseminated.</t>
      <t>Then, the clients can set up the multicast address and group observation for listening to multicast notifications.</t>
      <t>If Group OSCORE is used to protect the group observation (see <xref target="sec-secured-notifications"/>) and the OSCORE group supports the concept of Deterministic Client <xref target="I-D.ietf-core-cacheable-oscore"/>, then the server and clients in the OSCORE group can also independently compute the protected phantom observation request.</t>
      <t>In such a case, the unprotected version of the phantom observation request can be made available to the clients as a smaller, plain CoAP message. As above, this can be pre-configured on the clients, or they can obtain it through dedicated means (see <xref target="appendix-different-sources"/>). In either case, the clients and the server can independently protect the plain CoAP message by using the approach defined in <xref section="3" sectionFormat="of" target="I-D.ietf-core-cacheable-oscore"/>, thus all computing the same protected Deterministic Request. The latter is used as the actual phantom observation request that the protected multicast notifications will match under the group observation in question.</t>
      <t>When receiving the Deterministic Request, 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 relies on a byte-by-byte comparison of the incoming message minus the transport-related fields, i.e., by considering only: i) the outer REST code; ii) the outer options; and iii) the ciphertext from the message payload.</t>
      <t>If the server recognizes the received Deterministic Request as one of its self-generated deterministic phantom requests, then the server does not perform any Group OSCORE processing on it. This opens for replying with an unprotected response, although not indicating any OSCORE-related error. In particular, the server <bcp14>MUST</bcp14> reply with an informative response that <bcp14>MUST NOT</bcp14> be protected.</t>
      <t>Note that the phantom registration request is, in terms of transport-independent information, identical to the same Deterministic Request sent by any client that wishes to take part in the group observation. Thus, if the server receives such a phantom registration request, the informative response may omit the 'ph_req' parameter (see <xref target="ssec-server-side-informative"/>). If a client receives an informative response that includes the 'ph_req' parameter and this specifies transport-independent information different from the one of the sent Deterministic Request, then the client considers the informative response malformed.</t>
      <t>When using a Deterministic Request as a phantom observation request, the observer counter at the server (see <xref target="sec-server-side"/>) is not reliably incremented when new clients start participating in the group observation.</t>
      <t>That is, the clients can simply set up the right multicast address and port number, and then start listening to multicast notifications bound to the Deterministic Request. Hence, the observer counter at the server is not incremented as new clients start listening to multicast notifications.</t>
      <t>Furthermore, the security identity associated with the sender of any Deterministic Request in the OSCORE group is exactly the same one, i.e., the pair (SID, OSCORE ID Context), where SID is the OSCORE Sender ID of the Deterministic Client in the OSCORE group, which clients in the group rely on to produce Deterministic Requests.</t>
      <t>The setting described above requires the server and all the clients interested in taking part in the group observation to support the approach defined in <xref target="I-D.ietf-core-cacheable-oscore"/>. On the other hand, its use allows clients to start from a smaller, unprotected version of the phantom observation request, which does not need to be verified as a request generated by the server. Therefore, in applications where the OSCORE group is configured for the use of Deterministic Requests and observer clients are expected to support the approach defined in <xref target="I-D.ietf-core-cacheable-oscore"/>, servers that start group observations are encouraged to do so by using Deterministic Requests as corresponding phantom observation requests.</t>
      <t>If the optimization defined in <xref target="self-managed-oscore-group"/> is also used, the 'gp_material' element in the informative response from the server <bcp14>MUST</bcp14> also include the following elements from the Group_OSCORE_Input_Material object.</t>
      <ul spacing="normal">
        <li>
          <t>'alg', as per <xref section="6.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>.</t>
        </li>
        <li>
          <t>'det_senderId' and 'det_hash_alg', defined in <xref section="4" sectionFormat="of" target="I-D.ietf-core-cacheable-oscore"/>. These specify the Sender ID of the Deterministic Client in the OSCORE group and the hash algorithm used to compute Deterministic Requests (see <xref section="3.4.1" sectionFormat="of" target="I-D.ietf-core-cacheable-oscore"/>).</t>
        </li>
      </ul>
      <t>Note that, like in <xref target="self-managed-oscore-group"/>, no information is provided as related to the Pairwise Key Agreement Algorithm and its parameters. In fact, the clients and the server will not need to compute a cofactor Diffie-Hellman shared secret in this OSCORE group. It follows that:</t>
      <ul spacing="normal">
        <li>
          <t>In the Common Context of the Group OSCORE Security Context, the parameter Pairwise Key Agreement Algorithm is not set (see <xref section="2.1.10" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</t>
        </li>
        <li>
          <t>Aligned with the previous point, when building the two OSCORE external_aad structures to process messages protected with Group OSCORE in this OSCORE group, (see <xref section="3.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), the element 'alg_pairwise_key_agreement' within the 'algorithms' arrays is set to the CBOR simple value <tt>null</tt> (0xf6).</t>
        </li>
      </ul>
      <t>If a Deterministic Request is used as a phantom observation request for a group observation, the server does not assist clients that are interested in taking part in the group observation but do not support Deterministic Requests. This is consistent with the fact that the setup in question already relies on a lot of agreed pre-configuration.</t>
      <t>Therefore, the following holds when a group observation for a target resource relies on a Deterministic Request as a phantom observation request.</t>
      <ul spacing="normal">
        <li>
          <t>Every client that is interested to take part in such a group observation: has to support Deterministic Requests; and has to know the phantom observation request, as a result of pre-configuration or following its retrieval through dedicated means (see <xref target="appendix-different-sources"/>).</t>
        </li>
        <li>
          <t>The server does not simultaneously run a parallel group observation for the same target resource, as associated with a different phantom observation request and intended to clients that do not support Deterministic Requests.</t>
        </li>
        <li>
          <t>If the server receives an observation request for the target resource that differs from the specific Deterministic Request associated with the group observation for that target resource, then the server replies as usual with an informative response, including: the transport-specific information, the phantom request (i.e., the expected Deterministic Request), and (optionally) the latest notification.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-13-14">
        <name>Version -13 to -14</name>
        <ul spacing="normal">
          <li>
            <t>Clarified expected roles in the OSCORE group for clients and server.</t>
          </li>
          <li>
            <t>The HKDF Algorithm of Group OSCORE is specified as the corresponding HMAC Algorithm.</t>
          </li>
          <li>
            <t>Generalized semantics of the Multicast-Response-Feedback-Divider Option and renamed it as Feedback-Divider.</t>
          </li>
          <li>
            <t>Clarified pre-conditions and advantages of using deterministic phantom requests.</t>
          </li>
          <li>
            <t>Removed unnecessary normative language.</t>
          </li>
          <li>
            <t>Fixes and simplifications in the example with Group OSCORE.</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-12-13">
        <name>Version -12 to -13</name>
        <ul spacing="normal">
          <li>
            <t>Content on proxies moved out to the new document draft-ietf-core-multicast-notifications-proxy.</t>
          </li>
          <li>
            <t>Clarified avoidance of link-local addresses.</t>
          </li>
          <li>
            <t>Alignment with the update to the "Uniform Resource Identifier (URI) Schemes" IANA registry made by draft-ietf-core-href-26.</t>
          </li>
          <li>
            <t>Revised value syntax for the 'Transport Information Details' column of the new IANA registry "CoAP Transport Information".</t>
          </li>
          <li>
            <t>Suggested range and value for the registration in the IANA registry "CoAP Option Numbers".</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-11-12">
        <name>Version -11 to -12</name>
        <ul spacing="normal">
          <li>
            <t>Changed CBOR type of 'ending' and 'exp' to be integer or float.</t>
          </li>
          <li>
            <t>Avoid limiting the informative response to this protocol.</t>
          </li>
          <li>
            <t>Transport identified by (scheme-id, authority) in the CRI of 'tpi_server'.</t>
          </li>
          <li>
            <t>Renamed 'sign_enc_alg' to 'gp_enc_alg', now aligned with draft-ietf-ace-key-groupcomm-oscore.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-10-11">
        <name>Version -10 to -11</name>
        <ul spacing="normal">
          <li>
            <t>Do not rule out original observation requests sent over multicast.</t>
          </li>
          <li>
            <t>Defined 'ending' parameter for the informative response payload.</t>
          </li>
          <li>
            <t>Group observation data available on different sources can be removed.</t>
          </li>
          <li>
            <t>Initial description of a scenario with a reverse-proxy.</t>
          </li>
          <li>
            <t>Minor fixes in examples.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-09-10">
        <name>Version -09 to -10</name>
        <ul spacing="normal">
          <li>
            <t>Fixed section numbers of referred documents.</t>
          </li>
          <li>
            <t>Revised registration policies in the IANA considerations.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-08-09">
        <name>Version -08 to -09</name>
        <ul spacing="normal">
          <li>
            <t>Revised 'tp_info' also to use CRIs for transport information.</t>
          </li>
          <li>
            <t>Section restructuring: impact from proxies on rough counting of clients.</t>
          </li>
          <li>
            <t>Revised and repositioned text on deterministic phantom requests.</t>
          </li>
          <li>
            <t>Fixes in the examples with message exchanges.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-07-08">
        <name>Version -07 to -08</name>
        <ul spacing="normal">
          <li>
            <t>Fixed the CDDL definition 'srv_addr' in 'tp_info'.</t>
          </li>
          <li>
            <t>Early mentioning that 'srv_addr' cannot instruct redirection.</t>
          </li>
          <li>
            <t>The replay protection of multicast notifications is as per Group OSCORE.</t>
          </li>
          <li>
            <t>Consistently use the format uint for the Multicast-Response-Feedback-Divider Option.</t>
          </li>
          <li>
            <t>Fixed consumption of proxy-related options in a ticket request sent to the proxy.</t>
          </li>
          <li>
            <t>Possible use of the option Proxy-Cri or Proxy-Scheme-Number in a ticket request.</t>
          </li>
          <li>
            <t>Explained non-provisioning of some parameters in self-managed OSCORE groups.</t>
          </li>
          <li>
            <t>Use of 'exi' for relative expiration time in self-managed OSCORE groups.</t>
          </li>
          <li>
            <t>Improved notation in the examples of message exchanges with proxy.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-06-07">
        <name>Version -06 to -07</name>
        <ul spacing="normal">
          <li>
            <t>Added more details on proxies that do not support the Multicast-Response-Feedback-Divider Option.</t>
          </li>
          <li>
            <t>Added more details on the reliability of the client rough counting.</t>
          </li>
          <li>
            <t>Added more details on the unreliability of counting new clients, when the phantom request is obtained from other sources or is an OSCORE Deterministic Request.</t>
          </li>
          <li>
            <t>Revised parameter naming.</t>
          </li>
          <li>
            <t>Fixes in IANA considerations.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-05-06">
        <name>Version -05 to -06</name>
        <ul spacing="normal">
          <li>
            <t>Clarified rough counting of clients when a proxy is used</t>
          </li>
          <li>
            <t>IANA considerations: registration of target attribute "gp-obs"</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>
            <t>If the phantom request is an OSCORE Deterministic Request, there is no parallel group observation for clients that lack support.</t>
          </li>
          <li>
            <t>Clarification on pre-configured clients.</t>
          </li>
          <li>
            <t>Clarified early publication of phantom request.</t>
          </li>
          <li>
            <t>Fixes in IANA considerations.</t>
          </li>
          <li>
            <t>Fixed example with proxy and Group OSCORE.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>
            <t>Added a new section on prerequisites.</t>
          </li>
          <li>
            <t>Added a new section overviewing alternative variants.</t>
          </li>
          <li>
            <t>Consistent renaming of 'cli_addr' to 'cli_host' in 'tp_info'.</t>
          </li>
          <li>
            <t>Added pre-requirements for early retrieval of phantom request.</t>
          </li>
          <li>
            <t>Revised example with early retrieval of phantom request.</t>
          </li>
          <li>
            <t>Clarified use, rationale and example of phantom request as Deterministic Request.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Distinction between authentication credential and public key.</t>
          </li>
          <li>
            <t>Fixed processing of informative response at the client, when Group OSCORE is used.</t>
          </li>
          <li>
            <t>Discussed scenarios with pre-configured address/port and Token value.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Clarifications on client rough counting and IP multicast scope.</t>
          </li>
          <li>
            <t>The 'ph_req' parameter is optional in the informative response.</t>
          </li>
          <li>
            <t>New parameter 'next_not_before' for the informative response.</t>
          </li>
          <li>
            <t>Optimization when rekeying the self-managed OSCORE group.</t>
          </li>
          <li>
            <t>Security considerations on unsecured multicast notifications.</t>
          </li>
          <li>
            <t>Protection of the ticket request sent to a proxy.</t>
          </li>
          <li>
            <t>RFC8126 terminology in IANA considerations.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Simplified cancellation of the group observation, without using a phantom cancellation request.</t>
          </li>
          <li>
            <t>Aligned parameter semantics with core-oscore-groupcomm and ace-key-groupcomm-oscore.</t>
          </li>
          <li>
            <t>Clarifications about self-managed OSCORE group and use of Deterministic Requests for cacheable OSCORE.</t>
          </li>
          <li>
            <t>New example with a proxy, Group OSCORE and a deterministic phantom request.</t>
          </li>
          <li>
            <t>Fixes in the examples and editorial improvements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowldegment">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Carsten Bormann"/>, <contact fullname="Klaus Hartke"/>, <contact fullname="Jaime Jiménez"/>, <contact fullname="Matthias Kovatsch⁩"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Jim Schaad"/>, <contact fullname="Ludwig Seitz"/>, and <contact fullname="Göran Selander"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by the Sweden's Innovation Agency VINNOVA and the Celtic-Next projects CRITISEC and CYPRESS; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
cuZataKxC6PxblB9VHSca/1Vj/hyIXLat/QLYS3ZqRXATR1KrTnHnx0znIob
vChKZbkN73KnVD8B+XqSDsxT7m66nKSNGseCvVwAzlAqJcoq4WS63MTlJS4/
35tJIVjZFTPefGbiobX0HJeSBfk8JVIXvZ9Rn2UmXuP4ei6ElsQlQvVZhpJ7
zYkS1tzn9j7p77AL3qn/UqU0KMaxj4WJfsh1Fhu0HFaBHpssSxLmeCAk4CE9
kQR0S8Lra2LpyDBxS3S7DMrSFaG8Jhertkwu1LPNZzskgUoeCy4Pg5mvUzgq
UrYSD2BSwymn/hc0XwuJEbtR+C6NR2GiJQ/N2lYGGdAoBj2c3HQF7yZ8gdA9
Ofv++ODs5LmTwJnhnql4lGtz4iBULmostYWMeeQGk2InAZsumHCz2GtbrWKJ
L0AT0LE5LlhCA+GKoaEINnhDEa5h4uOcMGXKs53wmTWwY+cRLBtVOJV0S4VG
HaSZxsiKtcqw1G6qzfqqaatZjpZ1xsUbK/VjQzws26Uja6pz6hTpx5Uuo8qG
yR2iUb+hXKsNPbOoQChGYlXJ1YoMb856C5ewpqZhgO/c8EQCMKUOH5b95vIt
HJXECBg2FFUk9zJVVMW9FdQkk/gnnQZ2KLcNbNH0PZpPyu7Hvi9imSJbi+S/
qu3pYdWnkPZfwwq9crH1G6VgLlMEd1SqN3WjlVseZOIhynxDiajWVEghB8Uy
pa/qSnu5i9Obh2t7WI1YkwBAJLjNyes19q56vIOXjBClWzWxJc2m0RSbTuNK
tEOHU0V3gjywcJzNdcV0GHBOtYNxFkXM9yr2II64Kgh/vVqyVEKdq823lFB3
uxY0VCmu0/Ox0bnWi2ZUTmpt8CU+XWo66ZVM+8R6vF4R1ofWN+urXVwWLGZF
I0OMpBcZVvZ370Fum9aXtEKvBj/bLmspQ6zdv7m6i6RTYFcSpJExN3xxJYTy
5bDJ4C0glmyPMK/2+EPJjQhxMqKAEIlbBtC4w8tkGoZtSs4yHQwdvc/te+NF
eWrpqaVThhdbVFpta5odMsuinnOQmicb1XUdK0ns7De2+FI1wJTpjhgQlyiH
XYsPpXJajqG51CN7jv472SDeipDaQlLtM3sSRZi/NR1suLmLrbao+EsN3jWK
UtF33e84NI1QoorzqbYw5GZDrMlR6XROgjWWV2AJpvNxQ2lZNn/khbxaCctQ
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
7nRx39KlkTBsb4UgizAqVJRjMJ9oLOvYuiE/fMdN/qJQP2bFWiZAXCEs1lqm
Nc3wRGqVnXzSGIvrJJ4nlZLTbXvdITopExihGN21zUExVEJO1m0ADepXs80T
iKrxT32GZEu6lNw/S72U1j+YKoSugFtqTBJ9iSx3Gi8AQWXUPeN09WQ57tjB
hsPM7IGbEAAVbrCz28Tugjjj/uVB8IYQtXsVbUzgnrZKVxmi29lrej7lQd15
R+hMoiPLqdhc4001ixiR3Hu34MscEFl/vfqlYt7dj+4pirfp8XK8eRFhc78F
2ThFUS4ri2vVGBjOWB6NeyJZDo6pdsRPEaU+hthFnhATLvj6LRkoazbBrOGS
JzKzbYaSSQ38KuqrdE2jiYItPXvUeBuxK1QN6r2r4fAmKEWhYx5WVGpNdF9R
RViBQ4YU+9M+A5LoPtIfru5zoYppbtWJuz9u1SXkHuOMX9Nzgykv+NN53pxz
N1DSc0yUxaQO7Fts/rEY91+sAtUvhqEZKB8JyEiEoj+hYAp7Uh0e7TlsWat3
QKVgqyRpcLsuoz+5l+hb9/ckenu+ZWPPytVg46KrbWft9pv//96br+q1QSau
W7TaoJ/SYWT5uE+vnc78W2tmaoESp1m0M0xfYJ4AUxJDv8qd2GFBKWtrXOaC
at3SA8HqLS9svMkwZPkwzbSmeBDsyyQIRXoXQQ2G8O44rz1xUUecO4/BJoJ3
f5k3RWRLWMlsHe8yMAxj/5t96dYo95QHpXfdKWDEXwUMwtUGG1tjEnBrrayv
uEIXbdFI9gTCD18T3I3q21Re3elxY8mrwikYqA1YwhaA3nOG6bRj/9T/iLaR
ptcCbPVOei/3QUWdTMidBreCPUHrHQNU+emoSRe/CM8mlkd6KY7b1i9LMq5L
RNdhqKBXwmmMFy+O6EFYrCQwYMwA90bIBr66fi+Kl6ZyiINkFHfT+5JqkSfn
yvj4m/WFFERRzBQsiMhVxoztoZCIEYgQ4VlCUEPqZ4dUR9fc3Pm857xz5/iV
1fx0fIPYTIzZlg137iE38s797Dt5wM499/EGeVSnObs8OvZ5PS3SCSVEczT2
iZbS0Sl58dPhM3O5x80MZURoQGkx6xG8eLl/4B+Az31OdJGIQtcA7PIC0LLZ
GFFUJgUZGz5zqheKCoaHJdhocylEItwLYMXAeir3+vib2+FysJKh4jWabj65
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

-->

</rfc>
