<?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.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-observe-multicast-notifications-13" category="std" consensus="true" submissionType="IETF" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.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-13"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <street>Hollandstr. 12/4</street>
          <city>Vienna</city>
          <code>1020</code>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <author initials="F." surname="Palombini" fullname="Francesca Palombini">
      <organization>Ericsson AB</organization>
      <address>
        <postal>
          <street>Torshamnsgatan 23</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>francesca.palombini@ericsson.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>WIT</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 132?>

<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 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 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 136?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> has been extended with a number of mechanisms, including resource Observation <xref target="RFC7641"/>. This enables CoAP clients to register at a CoAP server as "observers" of a resource, and hence being automatically notified with an unsolicited response upon changes of the resource state.</t>
      <t>CoAP supports group communication <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 CoAP publish-subscribe <xref target="I-D.ietf-core-coap-pubsub"/>, multiple clients can subscribe to a topic, by observing the related resource hosted at the responsible broker. When a new value is published on that topic, it would be convenient for the broker to send a single multicast notification at once, to all the subscriber clients observing that topic.</t>
      <t>A different use case concerns clients observing the same registration resource at the CoRE Resource Directory <xref target="RFC9176"/>. For example, multiple clients can benefit of 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 on which 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 to listen 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 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 to listen 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. Then, 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 amount 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. Also, the server should keep the counter up-to-date over time, for instance by using the method described in <xref target="sec-rough-counting"/>. This allows the server to possibly terminate a group observation in case, at some point in time, not enough clients are estimated to be still active and interested.</t>
      <section anchor="ssec-server-side-request">
        <name>Request</name>
        <t>Assuming 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 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 received 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 initial multicast notification for the target resource, in response to the phantom observation request. This message is formatted as other multicast notifications (see <xref target="ssec-server-side-notifications"/>) and <bcp14>MUST</bcp14> include the current representation of the target resource as 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 Confirmable, <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 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, in case 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 amount of seconds that will minimally elapse before the server sends the next multicast notification for the group observation of the target resource, encoded as a CBOR unsigned integer. This parameter <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 a 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>
          <artwork><![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'
}
]]></artwork>
        </figure>
        <t>Upon receiving a registration request to observe the target resource, the server does not create a corresponding individual observation for the requesting client. Instead, the server considers that client as now taking part in the group observation of the target resource, of which it increments the observer counter by 1. Then, the server replies to the client with the same informative response message defined above, which <bcp14>MUST</bcp14> be Confirmable.</t>
        <t>Note that this also applies when, with no ongoing traditional observations on the target resource, the server receives a registration request from a first client and decides to start a group observation on the target resource.</t>
        <section anchor="sssec-transport-specific-encoding">
          <name>Transport-Specific Message Information</name>
          <t>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>
            <artwork><![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
]]></artwork>
          </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 from which the informative response is 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="I-D.ietf-core-dns-over-coap"/>).</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"/> registers an entry 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 <bcp14>MUST</bcp14> 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 resulting from a name resolution) 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 resulting from a name resolution) 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>
              <artwork><![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
]
]]></artwork>
            </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>
              <artwork><![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 /
]
]]></artwork>
            </figure>
          </section>
        </section>
        <section anchor="sssec-transport-independent-encoding">
          <name>Transport-Independent Message Information</name>
          <t>For both the parameters 'ph_req' and 'last_notif' in the informative response, the value of the 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 of such multicast notifications is formatted as follows.</t>
        <ul spacing="normal">
          <li>
            <t>It <bcp14>MUST</bcp14> be Non-confirmable.</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 should conservatively control the sending of multicast notifications. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>The multicast notifications <bcp14>MUST</bcp14> be Non-confirmable.</t>
          </li>
          <li>
            <t>In constrained environments such as low-power, lossy networks (LLNs), the server should only support multicast notifications for resources that are small. Following related guidelines from <xref section="3.6" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/>, this can consist, for example, in having the payload of multicast notifications as limited to approximately 5% of the IP Maximum Transmit Unit (MTU) size, so that it fits into a single link-layer frame in case IPv6 over Low-Power Wireless Personal Area Networks (6LoWPAN) (see <xref section="4" sectionFormat="of" target="RFC4944"/>) is used.</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"/>). The transmission rate of multicast notifications should also take into account the avoidance of a possible "broadcast storm" problem <xref target="MOBICOM99"/>. This prevents a following considerable increase of the channel load, whose origin would be likely attributed to a router rather than 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 resources allocated for the group observation and especially frees up the Token value T used at its CoAP endpoint.</t>
      </section>
    </section>
    <section anchor="sec-client-side">
      <name>Client-Side 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 case the server is able and willing to add the client to the list of observers.</t>
        <t>In a particular setup, the information typically specified in the 'tp_info' parameter of the informative response (see <xref target="ssec-server-side-informative"/>) can be pre-configured on the server and the clients. For example, the destination multicast address and port number where to send multicast notifications for a group observation, as well as the associated Token value to use, can be set aside for particular tasks (e.g., enforcing observations of a specific resource). Alternative mechanisms can rely on using some bytes from the hash of the observation request as the last bytes of the multicast address or as part of the Token value.</t>
        <t>In such a particular setup, the client may also have an early knowledge of the phantom request, i.e., it will be possible for the server to safely omit the parameter 'ph_req' from the informative response to the observation request (see <xref target="ssec-server-side-informative"/>). In this case, the client can include a No-Response Option <xref target="RFC7967"/> with value 16 in its Observe registration request, which results in the server suppressing the informative response. As a consequence, the observation request only informs the server that there is one additional client interested to take part in the group observation.</t>
        <t>While the considered client is able to simply set up its multicast address and start receiving multicast notifications for the group observation, sending an observation request as above allows the server to increment the observer counter. This helps the server to assess the current number of clients interested in the group observation over time (e.g., by using the method 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 that, when resolved, indicates multiple transports. 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="I-D.ietf-core-dns-over-coap"/>).</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 become not interested in receiving further multicast notifications about a target resource. When this happens, the client can simply "forget" about being part of the group observation for that target resource, as per <xref section="3.6" sectionFormat="of" target="RFC7641"/>.</t>
        <t>When, later on, the server sends the next multicast notification, the client will not recognize the Token value T in the message. Since the multicast notification is Non-confirmable, it is <bcp14>OPTIONAL</bcp14> for the client to reject it with a Reset message, as defined in <xref section="3.5" sectionFormat="of" target="RFC7641"/>.</t>
        <t>In case the server has canceled a group observation as defined in <xref target="ssec-server-side-cancellation"/>, the client simply forgets about the group observation and frees up the used Token value T for that endpoint, upon receiving the multicast error response defined in <xref target="ssec-server-side-cancellation"/>.</t>
      </section>
    </section>
    <section anchor="sec-web-linking">
      <name>Web Linking</name>
      <t>The possible use of multicast notifications in a group observation may be indicated by a target attribute "gp-obs" in a web link <xref target="RFC8288"/> to a resource, e.g., using a link-format document <xref target="RFC6690"/>.</t>
      <t>The "gp-obs" attribute is a hint, indicating that the server might send multicast notifications for observations of the resource targeted by the link. Note that this is simply a hint, i.e., it does not include any information required to participate in a group observation and to receive and process multicast notifications.</t>
      <t>A value <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="multicast-response-feedback-divider-option">
        <name>Multicast-Response-Feedback-Divider Option</name>
        <t>In order to enable the rough counting of still active and interested clients, a new CoAP option is introduced, which <bcp14>SHOULD</bcp14> be supported by clients that listen to multicast responses.</t>
        <t>The option is called Multicast-Response-Feedback-Divider and has the properties summarized in <xref target="mrfd-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="mrfd-table">
          <name>The Multicast-Response-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">Multicast-Response-<br/>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 Multicast-Response-Feedback-Divider Option is of class E for OSCORE <xref target="RFC8613"/><xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      </section>
      <section anchor="ssec-rough-counting-client-side">
        <name>Processing on the Client Side</name>
        <t>Upon receiving a response with a Multicast-Response-Feedback-Divider Option, a client that 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 the number 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 unicast observation on the same target resource.</t>
        <t>To this end, the client essentially follows the steps that got it originally subscribed to group notifications for the target resource. In particular, the client sends an observation request to the server, i.e., a GET request with an Observe Option set to 0 (register). The request <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 the 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 in a non confirmable way and with the maximum No-Response setting <xref target="RFC7967"/>. In the request, the client <bcp14>MUST</bcp14> include a Multicast-Response-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 Multicast-Response-Feedback-Divider Option, if the multicast notification is retrieved from the 'last_notif' parameter of an informative response (see <xref target="ssec-server-side-informative"/>). A client includes the Multicast-Response-Feedback-Divider Option only in a re-registration request triggered by the server as described above and <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 Multicast-Response-Feedback-Divider Option, which is sent within a successful multicast notification.</t>
          <t>If several multicast notifications are sent in a burst fashion, it is <bcp14>RECOMMENDED</bcp14> for the server to include the Multicast-Response-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 unicast observation requests from the clients, for an amount of time of MAX_CONFIRMATION_WAIT seconds. During this time, the server regularly increments the observer counter when adding a new client to the group observation (see <xref target="ssec-server-side-informative"/>).</t>
          <t>It is up to applications to define the value of MAX_CONFIRMATION_WAIT, which has to take into account the transmission time of the multicast notification and of unicast observation requests, as well as the leisure time of the clients, which may be hard to know or estimate for the server.</t>
          <t>If this information is not known to the server, it is <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 unicast observation requests to the target resource, since the time when the multicast notification with the Multicast-Response-Feedback-Divider Option has been sent. In particular, the server considers a unicast observation request as a confirmation from a client only if it includes a Multicast-Response-Feedback-Divider Option with 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 out a notification with Multicast-Response-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 Multicast-Response-Feedback-Divider Option with value Q = 0 in its multicast notifications, as if M is equal to N. This will trigger all the active clients to state their interest in continuing receiving notifications for the target resource. Thus, the amount R of arrived confirmations is affected only by possible packet loss.</t>
          <t><xref target="appendix-pseudo-code-counting-server"/> provides a description in pseudo-code of the operations above performed by the server, including example behaviors for scheduling the next count update and deciding whether to cancel the group observation.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-secured-notifications">
      <name>Protection of Multicast Notifications with Group OSCORE</name>
      <t>A server can protect multicast notifications by using 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 be already 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 can already be members of the right OSCORE group, in case they have 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 described in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> and based on the ACE framework for Authentication and Authorization in constrained environments <xref target="RFC9200"/>. Further details on how to discover the OSCORE group and join it are out of the scope of this document.</t>
      <t>If multicast notifications are protected using Group OSCORE, 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.</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>Additionally to what is defined in <xref target="sec-server-side"/>, the CBOR map in the informative response payload contains the following fields, whose CBOR 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 value is taken from the 'Value' column of the "COSE Algorithms" registry <xref target="COSE.Algorithms"/>.</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"/>. Consistently with <xref section="2.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, acceptable values denote a format that <bcp14>MUST</bcp14> explicitly provide the comprehensive set of information related to the public key algorithm, including, e.g., the used elliptic curve (when applicable).  </t>
            <t>
At the time of writing this specification, acceptable formats of authentication credentials are CBOR Web Tokens (CWTs) and CWT Claim Sets (CCSs) <xref target="RFC8392"/>, X.509 certificates <xref target="RFC5280"/>, and C509 certificates <xref target="I-D.ietf-cose-cbor-encoded-cert"/>. Further formats may be available in the future, and would be acceptable to use as long as they comply with the criteria defined above.  </t>
            <t>
[ As to 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 fields are <bcp14>OPTIONAL</bcp14> in the informative response. However, the 'join_uri' and 'sec_gp' fields <bcp14>MUST</bcp14> be present if the mechanism is implemented and used. If any of the fields are present without the 'join_uri' and 'sec_gp' fields present, the client <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"/>, as if it was the actual sender, i.e., by using its Sender Context. As a consequence, the server consumes the current value of its Sender Sequence Number SN in the OSCORE group, and hence updates it to SN* = (SN + 1). Consistently, the OSCORE Option in the phantom registration request includes:</t>
          <ul spacing="normal">
            <li>
              <t>As 'kid', the Sender ID of the server in the OSCORE group.</t>
            </li>
            <li>
              <t>As 'piv', 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 always 0.05 (FETCH).</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 authenticated ciphertext followed by the signature.</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 information on the OSCORE group to join, as additional parameters (see <xref target="sec-inf-response"/>).</t>
        </section>
        <section anchor="ssec-server-side-notifications-oscore">
          <name>Notifications</name>
          <t>The server <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' 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' is the 'kid' value in the OSCORE Option of the phantom registration request, i.e., the Sender ID of the server.</t>
            </li>
            <li>
              <t>The 'request_piv' is the 'piv' value in the OSCORE Option 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' is the 'kid context' value in the OSCORE Option of the phantom registration request, i.e., the Group Identifier value (Gid) of the OSCORE group used as ID Context.</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 also 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 include its encoding as the Partial IV in the OSCORE Option of the response.</t>
        </section>
      </section>
      <section anchor="sec-client-side-with-security">
        <name>Client-Side Requirements</name>
        <t>When using Group OSCORE to protect multicast notifications, the client performs as described in <xref target="sec-client-side"/>, with the following differences.</t>
        <section anchor="ssec-client-side-informative-oscore">
          <name>Informative Response</name>
          <t>Upon receiving the informative response from the server, the client performs as described in <xref target="ssec-client-side-informative"/>, with the following additions.</t>
          <t>When performing Step 2, the client expects the 'ph_req' parameter to be included in the informative response, which is otherwise considered malformed. An exception is the case discussed in <xref target="deterministic-phantom-Request"/>.</t>
          <t>Once completed Step 2, the client decrypts and verifies the rebuilt phantom registration request as defined in <xref section="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', 'piv', and 'kid context' fields from the OSCORE Option 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' 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>'request_kid' takes the value of the 'kid' field from the OSCORE Option of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</t>
            </li>
            <li>
              <t>'request_piv' takes the value of the 'piv' field from the OSCORE Option of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</t>
            </li>
            <li>
              <t>'request_kid_context' takes the value of the 'kid context' field from the OSCORE Option of the phantom registration request (see <xref target="ssec-client-side-informative-oscore"/>).</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 as Sender Sequence Number. Also, S has 'kid' = 0x03 as Sender ID and SN_3 = 301 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 as Sender Sequence Number. Also, S has 'kid' = 0x04 as Sender ID and SN_4 = 401 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 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 signature appended to an encrypted CoAP payload. This refers to the phantom registration request encoded by the 'ph_req' parameter, or to the corresponding latest multicast notification encoded by the 'last_notif' parameter.</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="2192" width="552" viewBox="0 0 552 2192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,720" fill="none" stroke="black"/>
              <path d="M 8,752 L 8,1152" fill="none" stroke="black"/>
              <path d="M 8,1184 L 8,1408" fill="none" stroke="black"/>
              <path d="M 8,1440 L 8,1888" fill="none" stroke="black"/>
              <path d="M 8,1952 L 8,2176" fill="none" stroke="black"/>
              <path d="M 32,1888 L 32,1952" fill="none" stroke="black"/>
              <path d="M 512,48 L 512,720" fill="none" stroke="black"/>
              <path d="M 512,752 L 512,1152" fill="none" stroke="black"/>
              <path d="M 512,1184 L 512,1408" fill="none" stroke="black"/>
              <path d="M 512,1440 L 512,1904" fill="none" stroke="black"/>
              <path d="M 512,1936 L 512,2176" 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,304 L 496,304" fill="none" stroke="black"/>
              <path d="M 56,352 L 496,352" fill="none" stroke="black"/>
              <path d="M 432,608 L 448,608" fill="none" stroke="black"/>
              <path d="M 32,736 L 152,736" fill="none" stroke="black"/>
              <path d="M 344,736 L 496,736" fill="none" stroke="black"/>
              <path d="M 32,1168 L 152,1168" fill="none" stroke="black"/>
              <path d="M 352,1168 L 496,1168" fill="none" stroke="black"/>
              <path d="M 32,1424 L 152,1424" fill="none" stroke="black"/>
              <path d="M 344,1424 L 496,1424" fill="none" stroke="black"/>
              <path d="M 8,1888 L 32,1888" fill="none" stroke="black"/>
              <path d="M 48,1920 L 136,1920" fill="none" stroke="black"/>
              <path d="M 392,1920 L 496,1920" fill="none" stroke="black"/>
              <path d="M 8,1952 L 32,1952" fill="none" stroke="black"/>
              <path d="M 44,328 L 56,352" fill="none" stroke="black"/>
              <path d="M 44,328 L 56,304" fill="none" stroke="black"/>
              <path d="M 248,1936 L 256,1920" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="504,1168 492,1162.4 492,1173.6" fill="black" transform="rotate(0,496,1168)"/>
              <polygon class="arrowhead" points="504,352 492,346.4 492,357.6" fill="black" transform="rotate(0,496,352)"/>
              <polygon class="arrowhead" points="504,32 492,26.4 492,37.6" fill="black" transform="rotate(0,496,32)"/>
              <polygon class="arrowhead" points="440,608 428,602.4 428,613.6" fill="black" transform="rotate(180,432,608)"/>
              <polygon class="arrowhead" points="56,1920 44,1914.4 44,1925.6" fill="black" transform="rotate(180,48,1920)"/>
              <polygon class="arrowhead" points="40,1424 28,1418.4 28,1429.6" fill="black" transform="rotate(180,32,1424)"/>
              <polygon class="arrowhead" points="40,736 28,730.4 28,741.6" fill="black" transform="rotate(180,32,736)"/>
              <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="56" y="84">OSCORE:</text>
                <text x="112" y="84">{kid:</text>
                <text x="160" y="84">0x01;</text>
                <text x="204" y="84">piv:</text>
                <text x="244" y="84">101;</text>
                <text x="284" y="84">...}</text>
                <text x="52" y="100">&lt;Other</text>
                <text x="104" y="100">class</text>
                <text x="144" y="100">U/I</text>
                <text x="196" y="100">options&gt;</text>
                <text x="44" y="116">0xff</text>
                <text x="96" y="132">Encrypted_payload</text>
                <text x="176" y="132">{</text>
                <text x="60" y="148">0x01</text>
                <text x="108" y="148">(GET),</text>
                <text x="76" y="164">Observe:</text>
                <text x="120" y="164">0</text>
                <text x="176" y="164">(register),</text>
                <text x="80" y="180">Uri-Path:</text>
                <text x="140" y="180">"r",</text>
                <text x="68" y="196">&lt;Other</text>
                <text x="120" y="196">class</text>
                <text x="152" y="196">E</text>
                <text x="196" y="196">options&gt;</text>
                <text x="32" y="212">}</text>
                <text x="136" y="244">(</text>
                <text x="152" y="244">S</text>
                <text x="200" y="244">allocates</text>
                <text x="256" y="244">the</text>
                <text x="312" y="244">available</text>
                <text x="376" y="244">Token</text>
                <text x="424" y="244">value</text>
                <text x="468" y="244">0x7b</text>
                <text x="496" y="244">)</text>
                <text x="56" y="276">(</text>
                <text x="72" y="276">S</text>
                <text x="104" y="276">sends</text>
                <text x="140" y="276">to</text>
                <text x="180" y="276">itself</text>
                <text x="216" y="276">a</text>
                <text x="256" y="276">phantom</text>
                <text x="336" y="276">observation</text>
                <text x="416" y="276">request</text>
                <text x="476" y="276">PH_REQ</text>
                <text x="76" y="292">as</text>
                <text x="116" y="292">coming</text>
                <text x="164" y="292">from</text>
                <text x="200" y="292">the</text>
                <text x="228" y="292">IP</text>
                <text x="280" y="292">multicast</text>
                <text x="352" y="292">address</text>
                <text x="420" y="292">GRP_ADDR</text>
                <text x="472" y="292">)</text>
                <text x="540" y="356">/r</text>
                <text x="228" y="372">0.05</text>
                <text x="280" y="372">(FETCH)</text>
                <text x="236" y="388">Token:</text>
                <text x="284" y="388">0x7b</text>
                <text x="240" y="404">OSCORE:</text>
                <text x="296" y="404">{kid:</text>
                <text x="340" y="404">0x05</text>
                <text x="368" y="404">;</text>
                <text x="396" y="404">piv:</text>
                <text x="436" y="404">501;</text>
                <text x="296" y="420">kid</text>
                <text x="348" y="420">context:</text>
                <text x="424" y="420">0x57ab2e;</text>
                <text x="484" y="420">...}</text>
                <text x="236" y="436">&lt;Other</text>
                <text x="288" y="436">class</text>
                <text x="328" y="436">U/I</text>
                <text x="380" y="436">options&gt;</text>
                <text x="228" y="452">0xff</text>
                <text x="280" y="468">Encrypted_payload</text>
                <text x="360" y="468">{</text>
                <text x="244" y="484">0x01</text>
                <text x="292" y="484">(GET),</text>
                <text x="260" y="500">Observe:</text>
                <text x="304" y="500">0</text>
                <text x="360" y="500">(register),</text>
                <text x="264" y="516">Uri-Path:</text>
                <text x="324" y="516">"r",</text>
                <text x="252" y="532">&lt;Other</text>
                <text x="304" y="532">class</text>
                <text x="336" y="532">E</text>
                <text x="380" y="532">options&gt;</text>
                <text x="216" y="548">}</text>
                <text x="256" y="564">&lt;Signature&gt;</text>
                <text x="232" y="596">(</text>
                <text x="248" y="596">S</text>
                <text x="280" y="596">steps</text>
                <text x="324" y="596">SN_5</text>
                <text x="356" y="596">in</text>
                <text x="384" y="596">the</text>
                <text x="424" y="596">Group</text>
                <text x="476" y="596">OSCORE</text>
                <text x="276" y="612">Security</text>
                <text x="348" y="612">Context:</text>
                <text x="404" y="612">SN_5</text>
                <text x="472" y="612">502</text>
                <text x="496" y="612">)</text>
                <text x="192" y="660">(</text>
                <text x="208" y="660">S</text>
                <text x="248" y="660">creates</text>
                <text x="288" y="660">a</text>
                <text x="320" y="660">group</text>
                <text x="392" y="660">observation</text>
                <text x="452" y="660">of</text>
                <text x="476" y="660">/r</text>
                <text x="496" y="660">)</text>
                <text x="224" y="692">(</text>
                <text x="240" y="692">S</text>
                <text x="292" y="692">increments</text>
                <text x="352" y="692">the</text>
                <text x="404" y="692">observer</text>
                <text x="472" y="692">counter</text>
                <text x="248" y="708">for</text>
                <text x="280" y="708">the</text>
                <text x="320" y="708">group</text>
                <text x="392" y="708">observation</text>
                <text x="452" y="708">of</text>
                <text x="476" y="708">/r</text>
                <text x="496" y="708">)</text>
                <text x="12" y="740">C1</text>
                <text x="168" y="740">[</text>
                <text x="208" y="740">Unicast</text>
                <text x="252" y="740">w/</text>
                <text x="292" y="740">OSCORE</text>
                <text x="328" y="740">]</text>
                <text x="512" y="740">S</text>
                <text x="44" y="756">2.05</text>
                <text x="104" y="756">(Content)</text>
                <text x="52" y="772">Token:</text>
                <text x="100" y="772">0x4a</text>
                <text x="56" y="788">OSCORE:</text>
                <text x="112" y="788">{piv:</text>
                <text x="156" y="788">301;</text>
                <text x="196" y="788">...}</text>
                <text x="60" y="804">Max-Age:</text>
                <text x="104" y="804">0</text>
                <text x="52" y="820">&lt;Other</text>
                <text x="104" y="820">class</text>
                <text x="144" y="820">U/I</text>
                <text x="196" y="820">options&gt;</text>
                <text x="44" y="836">0xff</text>
                <text x="96" y="852">Encrypted_payload</text>
                <text x="176" y="852">{</text>
                <text x="60" y="868">5.03</text>
                <text x="116" y="868">(Service</text>
                <text x="208" y="868">Unavailable),</text>
                <text x="104" y="884">Content-Format:</text>
                <text x="324" y="884">application/informative-response+cbor,</text>
                <text x="68" y="900">&lt;Other</text>
                <text x="120" y="900">class</text>
                <text x="152" y="900">E</text>
                <text x="200" y="900">options&gt;,</text>
                <text x="64" y="916">0xff,</text>
                <text x="72" y="932">Payload</text>
                <text x="112" y="932">{</text>
                <text x="64" y="948">/</text>
                <text x="104" y="948">tp_info</text>
                <text x="144" y="948">/</text>
                <text x="184" y="948">0</text>
                <text x="200" y="948">:</text>
                <text x="216" y="948">[</text>
                <text x="344" y="964">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="360" y="980">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="268" y="996">0x7b</text>
                <text x="220" y="1012">],</text>
                <text x="64" y="1028">/</text>
                <text x="100" y="1028">ph_req</text>
                <text x="136" y="1028">/</text>
                <text x="184" y="1028">1</text>
                <text x="200" y="1028">:</text>
                <text x="248" y="1028">bstr(0x05</text>
                <text x="296" y="1028">|</text>
                <text x="320" y="1028">OPT</text>
                <text x="344" y="1028">|</text>
                <text x="372" y="1028">0xff</text>
                <text x="400" y="1028">|</text>
                <text x="280" y="1044">PAYLOAD</text>
                <text x="320" y="1044">|</text>
                <text x="356" y="1044">SIGN),</text>
                <text x="64" y="1060">/</text>
                <text x="116" y="1060">last_notif</text>
                <text x="168" y="1060">/</text>
                <text x="184" y="1060">2</text>
                <text x="200" y="1060">:</text>
                <text x="248" y="1060">bstr(0x45</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="108" y="1092">join_uri</text>
                <text x="152" y="1092">/</text>
                <text x="184" y="1092">4</text>
                <text x="200" y="1092">:</text>
                <text x="340" y="1092">"coap://myGM/ace-group/myGroup",</text>
                <text x="64" y="1108">/</text>
                <text x="100" y="1108">sec_gp</text>
                <text x="136" y="1108">/</text>
                <text x="184" y="1108">5</text>
                <text x="200" y="1108">:</text>
                <text x="248" y="1108">"myGroup"</text>
                <text x="48" y="1124">}</text>
                <text x="32" y="1140">}</text>
                <text x="12" y="1172">C2</text>
                <text x="168" y="1172">[</text>
                <text x="208" y="1172">Unicast</text>
                <text x="252" y="1172">w/</text>
                <text x="292" y="1172">OSCORE</text>
                <text x="328" y="1172">]</text>
                <text x="512" y="1172">S</text>
                <text x="540" y="1172">/r</text>
                <text x="44" y="1188">0.05</text>
                <text x="96" y="1188">(FETCH)</text>
                <text x="52" y="1204">Token:</text>
                <text x="100" y="1204">0x01</text>
                <text x="56" y="1220">OSCORE:</text>
                <text x="112" y="1220">{kid:</text>
                <text x="160" y="1220">0x02;</text>
                <text x="204" y="1220">piv:</text>
                <text x="244" y="1220">201;</text>
                <text x="284" y="1220">...}</text>
                <text x="52" y="1236">&lt;Other</text>
                <text x="104" y="1236">class</text>
                <text x="144" y="1236">U/I</text>
                <text x="196" y="1236">options&gt;</text>
                <text x="44" y="1252">0xff</text>
                <text x="96" y="1268">Encrypted_payload</text>
                <text x="176" y="1268">{</text>
                <text x="60" y="1284">0x01</text>
                <text x="108" y="1284">(GET),</text>
                <text x="76" y="1300">Observe:</text>
                <text x="120" y="1300">0</text>
                <text x="176" y="1300">(register),</text>
                <text x="80" y="1316">Uri-Path:</text>
                <text x="140" y="1316">"r",</text>
                <text x="68" y="1332">&lt;Other</text>
                <text x="120" y="1332">class</text>
                <text x="152" y="1332">E</text>
                <text x="196" y="1332">options&gt;</text>
                <text x="32" y="1348">}</text>
                <text x="224" y="1380">(</text>
                <text x="240" y="1380">S</text>
                <text x="292" y="1380">increments</text>
                <text x="352" y="1380">the</text>
                <text x="404" y="1380">observer</text>
                <text x="472" y="1380">counter</text>
                <text x="248" y="1396">for</text>
                <text x="280" y="1396">the</text>
                <text x="320" y="1396">group</text>
                <text x="392" y="1396">observation</text>
                <text x="452" y="1396">of</text>
                <text x="476" y="1396">/r</text>
                <text x="496" y="1396">)</text>
                <text x="12" y="1428">C2</text>
                <text x="168" y="1428">[</text>
                <text x="208" y="1428">Unicast</text>
                <text x="252" y="1428">w/</text>
                <text x="292" y="1428">OSCORE</text>
                <text x="328" y="1428">]</text>
                <text x="512" y="1428">S</text>
                <text x="44" y="1444">2.05</text>
                <text x="104" y="1444">(Content)</text>
                <text x="52" y="1460">Token:</text>
                <text x="100" y="1460">0x01</text>
                <text x="56" y="1476">OSCORE:</text>
                <text x="112" y="1476">{piv:</text>
                <text x="156" y="1476">401;</text>
                <text x="196" y="1476">...}</text>
                <text x="60" y="1492">Max-Age:</text>
                <text x="104" y="1492">0</text>
                <text x="52" y="1508">&lt;Other</text>
                <text x="104" y="1508">class</text>
                <text x="144" y="1508">U/I</text>
                <text x="196" y="1508">options&gt;</text>
                <text x="48" y="1524">0xff,</text>
                <text x="96" y="1540">Encrypted_payload</text>
                <text x="176" y="1540">{</text>
                <text x="60" y="1556">5.03</text>
                <text x="116" y="1556">(Service</text>
                <text x="208" y="1556">Unavailable),</text>
                <text x="104" y="1572">Content-Format:</text>
                <text x="324" y="1572">application/informative-response+cbor,</text>
                <text x="68" y="1588">&lt;Other</text>
                <text x="120" y="1588">class</text>
                <text x="152" y="1588">E</text>
                <text x="200" y="1588">options&gt;,</text>
                <text x="64" y="1604">0xff,</text>
                <text x="72" y="1620">Payload</text>
                <text x="112" y="1620">{</text>
                <text x="64" y="1636">/</text>
                <text x="104" y="1636">tp_info</text>
                <text x="144" y="1636">/</text>
                <text x="184" y="1636">0</text>
                <text x="200" y="1636">:</text>
                <text x="216" y="1636">[</text>
                <text x="344" y="1652">cri'coap://SRV_ADDR:SRV_PORT/',</text>
                <text x="360" y="1668">cri'coap://GRP_ADDR:GRP_PORT/',</text>
                <text x="268" y="1684">0x7b</text>
                <text x="220" y="1700">],</text>
                <text x="64" y="1716">/</text>
                <text x="100" y="1716">ph_req</text>
                <text x="136" y="1716">/</text>
                <text x="184" y="1716">1</text>
                <text x="200" y="1716">:</text>
                <text x="248" y="1716">bstr(0x05</text>
                <text x="296" y="1716">|</text>
                <text x="320" y="1716">OPT</text>
                <text x="344" y="1716">|</text>
                <text x="372" y="1716">0xff</text>
                <text x="400" y="1716">|</text>
                <text x="280" y="1732">PAYLOAD</text>
                <text x="320" y="1732">|</text>
                <text x="356" y="1732">SIGN),</text>
                <text x="64" y="1748">/</text>
                <text x="116" y="1748">last_notif</text>
                <text x="168" y="1748">/</text>
                <text x="184" y="1748">2</text>
                <text x="200" y="1748">:</text>
                <text x="248" y="1748">bstr(0x45</text>
                <text x="296" y="1748">|</text>
                <text x="320" y="1748">OPT</text>
                <text x="344" y="1748">|</text>
                <text x="372" y="1748">0xff</text>
                <text x="400" y="1748">|</text>
                <text x="280" y="1764">PAYLOAD</text>
                <text x="320" y="1764">|</text>
                <text x="356" y="1764">SIGN),</text>
                <text x="64" y="1780">/</text>
                <text x="108" y="1780">join_uri</text>
                <text x="152" y="1780">/</text>
                <text x="184" y="1780">4</text>
                <text x="200" y="1780">:</text>
                <text x="340" y="1780">"coap://myGM/ace-group/myGroup",</text>
                <text x="64" y="1796">/</text>
                <text x="100" y="1796">sec_gp</text>
                <text x="136" y="1796">/</text>
                <text x="184" y="1796">5</text>
                <text x="200" y="1796">:</text>
                <text x="248" y="1796">"myGroup"</text>
                <text x="48" y="1812">}</text>
                <text x="32" y="1828">}</text>
                <text x="104" y="1860">(</text>
                <text x="128" y="1860">The</text>
                <text x="168" y="1860">value</text>
                <text x="204" y="1860">of</text>
                <text x="232" y="1860">the</text>
                <text x="284" y="1860">resource</text>
                <text x="332" y="1860">/r</text>
                <text x="376" y="1860">changes</text>
                <text x="420" y="1860">to</text>
                <text x="460" y="1860">"5678"</text>
                <text x="496" y="1860">)</text>
                <text x="12" y="1908">C1</text>
                <text x="152" y="1924">[</text>
                <text x="200" y="1924">Multicast</text>
                <text x="248" y="1924">w</text>
                <text x="288" y="1924">Group</text>
                <text x="340" y="1924">OSCORE</text>
                <text x="376" y="1924">]</text>
                <text x="512" y="1924">S</text>
                <text x="12" y="1940">C2</text>
                <text x="132" y="1940">(Destination</text>
                <text x="216" y="1940">address</text>
                <text x="272" y="1940">port:</text>
                <text x="372" y="1940">GRP_ADDR/GRP_PORT)</text>
                <text x="60" y="1972">2.05</text>
                <text x="120" y="1972">(Content)</text>
                <text x="68" y="1988">Token:</text>
                <text x="116" y="1988">0x7b</text>
                <text x="72" y="2004">OSCORE:</text>
                <text x="128" y="2004">{kid:</text>
                <text x="176" y="2004">0x05;</text>
                <text x="220" y="2004">piv:</text>
                <text x="260" y="2004">502;</text>
                <text x="300" y="2004">...}</text>
                <text x="68" y="2020">&lt;Other</text>
                <text x="120" y="2020">class</text>
                <text x="160" y="2020">U/I</text>
                <text x="212" y="2020">options&gt;</text>
                <text x="60" y="2036">0xff</text>
                <text x="112" y="2052">Encrypted_payload</text>
                <text x="192" y="2052">{</text>
                <text x="76" y="2068">2.05</text>
                <text x="140" y="2068">(Content),</text>
                <text x="92" y="2084">Observe:</text>
                <text x="164" y="2084">[empty],</text>
                <text x="84" y="2100">&lt;Other</text>
                <text x="136" y="2100">class</text>
                <text x="168" y="2100">E</text>
                <text x="216" y="2100">options&gt;,</text>
                <text x="80" y="2116">0xff,</text>
                <text x="92" y="2132">Payload:</text>
                <text x="156" y="2132">"5678"</text>
                <text x="48" y="2148">}</text>
                <text x="88" y="2164">&lt;Signature&gt;</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
C1 ---------------- [ Unicast w/ OSCORE ]  ------------------> S  /r
|  0.05 (FETCH)                                                |
|  Token: 0x4a                                                 |
|  OSCORE: {kid: 0x01; piv: 101; ...}                          |
|  <Other class U/I options>                                   |
|  0xff                                                        |
|  Encrypted_payload {                                         |
|    0x01 (GET),                                               |
|    Observe: 0 (register),                                    |
|    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                          |
|                         OSCORE: {kid: 0x05 ; piv: 501;       |
|                                  kid context: 0x57ab2e; ...} |
|                         <Other class U/I options>            |
|                         0xff                                 |
|                         Encrypted_payload {                  |
|                           0x01 (GET),                        |
|                           Observe: 0 (register),             |
|                           Uri-Path: "r",                     |
|                           <Other class E options>            |
|                         }                                    |
|                         <Signature>                          |
|                                                              |
|                           ( S steps SN_5 in the Group OSCORE |
|                             Security Context: SN_5 <-- 502 ) |
|                                                              |
|                                                              |
|                      ( S creates a group observation of /r ) |
|                                                              |
|                          ( S increments the observer counter |
|                            for the group observation of /r ) |
|                                                              |
C1 <--------------- [ Unicast w/ OSCORE ] -------------------- S
|  2.05 (Content)                                              |
|  Token: 0x4a                                                 |
|  OSCORE: {piv: 301; ...}                                     |
|  Max-Age: 0                                                  |
|  <Other class U/I options>                                   |
|  0xff                                                        |
|  Encrypted_payload {                                         |
|    5.03 (Service Unavailable),                               |
|    Content-Format: application/informative-response+cbor,    |
|    <Other class E options>,                                  |
|    0xff,                                                     |
|    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                                                 |
|  OSCORE: {kid: 0x02; piv: 201; ...}                          |
|  <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: {piv: 401; ...}                                     |
|  Max-Age: 0                                                  |
|  <Other class U/I options>                                   |
|  0xff,                                                       |
|  Encrypted_payload {                                         |
|    5.03 (Service Unavailable),                               |
|    Content-Format: application/informative-response+cbor,    |
|    <Other class E options>,                                  |
|    0xff,                                                     |
|    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                                               |
|    OSCORE: {kid: 0x05; piv: 502; ...}                        |
|    <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 used to encrypt and sign the multicast notification above have 'request_kid' = 5, 'request_piv' = 501, and 'request_kid_context' = 0x57ab2e. These values are specified in the 'kid', 'piv', and 'kid context' field of the OSCORE Option of the phantom observation request, which is encoded in the 'ph_req' parameter of the unicast informative response to the two clients. Thus, the two clients can build the two same external_aad for decrypting and verifying this multicast notification and the following ones 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"/></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"/></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"/></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"/></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"/></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"/></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"/></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"/></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"/></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"/></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"/></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"/></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"/></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"/></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"/></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"/></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"/></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"/></td>
          </tr>
        </tbody>
      </table>
    </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>In case communications are not protected, the server might not be able to effectively authenticate a new client when it registers as an observer. <xref section="7" sectionFormat="of" target="RFC7641"/> specifies how, in such a case, the server must strictly limit the number of notifications sent between receiving acknowledgements from the client, as confirming to be still interested in the observation; i.e., any notifications sent in Non-confirmable messages must be interspersed with confirmable messages.</t>
        <t>This is not possible to achieve by the same means when using the communication model defined in this document, since multicast notifications are sent as Non-confirmable messages. Nonetheless, the server might obtain such acknowledgements by other means.</t>
        <t>For instance, the method defined in <xref target="sec-rough-counting"/> to perform the rough counting of still interested clients triggers (some of) them to explicitly send a new observation request to acknowledge their interest. Then, the server can decide to terminate the group observation altogether, in case not enough clients are estimated to be still active.</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 Multicast-Response-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 Multicast-Response-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 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 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">Multicast-Response-Feedback-Divider</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
          </tbody>
        </table>
        <t>For the Multicast-Response-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-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.</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.</t>
          </li>
        </ul>
        <t>This registry has been initially populated by the entries in <xref target="_table-informative-response-params"/>. The 'Reference' column for all of those entries refers to sections of this document.</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.</t>
          </li>
        </ul>
        <t>This registry has been initially populated by the entry in <xref target="_table-transport-information"/>.</t>
      </section>
      <section anchor="iana-target-attributes">
        <name>Target Attributes Registry</name>
        <t>IANA is asked to register the following entry in the "Target Attributes" registry within the "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-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="25" month="September" year="2025"/>
            <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-15"/>
        </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="12" month="September" 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-27"/>
        </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="28" month="August" year="2025"/>
            <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 for a key owned by the Client
   and bound to an OAuth 2.0 access token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-18"/>
        </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="16" month="October" 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 as well as a note on how that registry cooperates with the
   "CRI Scheme Numbers for Certain Unregistered Scheme Names" registry
   created by the present RFC.


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision -26 is taking on the results from the 2025-10-09
   // IESG telechat (issue #140), by integrating the CRI scheme number
   // column into the URI scheme registry created by RFC 7595 and
   // keeping the URI-Scheme registration process essentially unchanged
   // from the point of view of a registrant that does not have any
   // special requirements on the CRI scheme number assigned.  Also, the
   // cri'' application-extension syntax has been moved to draft-ietf-
   // cbor-edn-literals, which is currently lagging behind in the
   // approval process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-26"/>
        </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="16" month="October" year="2025"/>
            <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 and uses registry-based extension points, using one
   to support text representations of epoch-based dates/times and of IP
   addresses and prefixes.


   // (This cref will be removed by the RFC editor:) The present -19
   // includes the definition of the cri'' application- extension. cri''
   // was previously defined in draft-ietf-core-href; however the latter
   // document overtook the present document in the approval process.
   // As the definition of cri'' is dependent on the present document
   // (and conversely has essentially no dependency on the technical
   // content of draft-ietf-core-href beyond its mere existence), the
   // text (including IANA considerations) has been moved here. -19 is
   // intended for use at the CBOR WG meeting at IETF 124.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-19"/>
        </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="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="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="28" month="February" year="2025"/>
            <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-18"/>
        </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="3" month="September" year="2025"/>
            <abstract>
              <t>   Group communication over the Constrained Application Protocol (CoAP)
   can be secured by means of Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  At deployment time, devices may
   not know the exact security groups to join, the respective Group
   Manager, or other information required to perform the joining
   process.  This document describes how a CoAP endpoint can use
   descriptions and links of resources registered at the CoRE Resource
   Directory to discover security groups and to acquire information for
   joining them through the respective Group Manager.  A given security
   group may protect multiple application groups, which are separately
   announced in the Resource Directory as sets of endpoints sharing a
   pool of resources.  This approach is consistent with, but not limited
   to, the joining of security groups based on the ACE framework for
   Authentication and Authorization in constrained environments.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-cacheable-oscore-00"/>
        </reference>
        <reference anchor="I-D.ietf-cose-cbor-encoded-cert">
          <front>
            <title>CBOR Encoded X.509 Certificates (C509 Certificates)</title>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Shahid Raza" initials="S." surname="Raza">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Joel Höglund" initials="J." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Martin Furuhed" initials="M." surname="Furuhed">
              <organization>IN Groupe</organization>
            </author>
            <date day="18" month="August" year="2025"/>
            <abstract>
              <t>   This document specifies a CBOR encoding of X.509 certificates.  The
   resulting certificates are called C509 Certificates.  The CBOR
   encoding supports a large subset of RFC 5280 and all certificates
   compatible with the RFC 7925, IEEE 802.1AR (DevID), CNSA 1.0, RPKI,
   GSMA eUICC, and CA/Browser Forum Baseline Requirements profiles.
   C509 is deployed in different settings including, in-vehicle and
   vehicle-to-cloud communication, Unmanned Aircraft Systems (UAS), and
   Global Navigation Satellite System (GNSS).  When used to re-encode
   DER encoded X.509 certificates, the CBOR encoding can in many cases
   reduce the size of RFC 7925 profiled certificates by over 50% while
   also significantly reducing memory and code size compared to ASN.1.
   The CBOR encoded structure can alternatively be signed directly
   ("natively signed"), which does not require re-encoding for the
   signature to be verified.  The TLSA selectors registry defined in RFC
   6698 is extended to include C509 certificates.  The document also
   specifies C509 Certificate Requests, C509 COSE headers, a C509 TLS
   certificate type, and a C509 file format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cbor-encoded-cert-15"/>
        </reference>
        <reference anchor="I-D.ietf-core-dns-over-coap">
          <front>
            <title>DNS over CoAP (DoC)</title>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Cenk Gündoğan" initials="C." surname="Gündoğan">
              <organization>NeuralAgent GmbH</organization>
            </author>
            <author fullname="Thomas C. Schmidt" initials="T. C." surname="Schmidt">
              <organization>HAW Hamburg</organization>
            </author>
            <author fullname="Matthias Wählisch" initials="M." surname="Wählisch">
              <organization>TUD Dresden University of Technology &amp; Barkhausen Institut</organization>
            </author>
            <date day="16" month="September" year="2025"/>
            <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 (CoAPS) 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="Internet-Draft" value="draft-ietf-core-dns-over-coap-20"/>
        </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="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 1259?>

<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 due to 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 <xref target="I-D.ietf-core-coap-pubsub"/>, a group observation can be discovered along with topic metadata.</t>
        <t>To this end, together with topic metadata, the server has to publish the same information associated with the group observation that would be conveyed in the informative response returned to observer clients (see <xref target="ssec-server-side-informative"/>).</t>
        <t>This information especially includes the phantom observation request associated with the group observation, as well as the addressing information of the server and the addressing information where multicast notifications are sent to.</t>
        <t><xref target="discovery-pub-sub"/> provides an example where a group observation is discovered. The example assumes a CoRAL namespace <xref target="I-D.ietf-core-coral"/> that contains properties analogous to those in the Content-Format "application/informative-response+cbor".</t>
        <t>Note that the information about the transport protocol used for the group observation is not expressed through a dedicated element equivalent to 'tp_id' of the informative response (see <xref target="sssec-transport-specific-encoding"/>). 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"/>), while 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-off) cellular uplink to discover the topics it needs to update its display to, and then listen on a LoRA-WAN interface for receiving the actual multicast notifications.</t>
      </section>
      <section anchor="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 MRFD option
        int LEISURE_TIME, // DEFAULT_LEISURE from RFC 7252,
                          // unless overridden

output: None


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

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

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

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

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

    opt = new Option(MRFD);
    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 MRFD option
        int LEISURE_TIME, // DEFAULT_LEISURE from RFC 7252,
                          // unless overridden

output: None


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

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

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

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

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

    opt = new Option(MRFD);
    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(MRFD);
opt.set(Q);

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

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

// Time t2

int R = <number of requests to the target resource
         received between t1 and t2, and including
         the MRFD 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>Additionally to what is defined in <xref target="sec-server-side"/>, the CBOR map in the informative response payload contains the following fields, whose CBOR 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>Consistently, when building the two OSCORE 'external_aad' 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 Sender Context. From then on, the client uses the received keying material to process the incoming multicast notifications from the server.</t>
      <t>Since the server is also acting as Group Manager, the authentication credential of the server provided in the 'srv_cred' element of the informative response is also used in the 'gm_cred' element of the external_aad for encrypting and signing the phantom request and multicast notifications (see <xref section="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, as 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), consistently 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 its encoding as the Partial IV in the OSCORE Option of the response.</t>
      <t>When some clients leave the OSCORE group and forget about the group observation, the server does not have to provide the remaining clients with any stale Sender IDs, as normally required for Group OSCORE (see <xref section="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 each client in the OSCORE group can also independently compute the protected phantom observation request.</t>
      <t>In such a case, the unprotected version of the phantom observation request can be made available to the clients as a smaller, plain CoAP message. As above, this can be pre-configured on the clients, or they can obtain it through dedicated means (see <xref target="appendix-different-sources"/>). In either case, the clients and the server can independently protect the plain CoAP message by using the approach defined in <xref section="3" sectionFormat="of" target="I-D.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 possibly sent by each client. 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 all the clients in the group rely on to produce deterministic 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 the deterministic request (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>Consistently, when building the two OSCORE 'external_aad' 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 phantom observation request for a group observation, the server does not assist clients that are interested to take 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 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-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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
lrNXI943R0wjmDC3EL79z4WWcGGrmzQPaRr3ZFz53CoFIEqmSe9vUZYGcL+v
YQsSNMe4gtENtCYJjMNuxdi/ZmP7/Xi8KQhh5TObJgo47veJrk9w9IUjCboL
pZuU7gh7SC2MEF3f46C9FBsL8C1hBlINoKY13Oohc26xl7KG4+UMNsma5Zhz
zxJglbwzOLChF+pmv27M9ev6BgxbIFvf5JLDdaLyZVXcqQuEJEukJKW2afRS
Q3Rpu4Rqiw4p+OllMdVQA6dkYSU+m1MjYo6bLFOW2n3V+blAs6GeXoVbWvR+
iKJuIx/gnrsAawEmro/RtwHcsH/Cl8UMpeq28QM2wXiQbClrwOHmyrAoYs81
+ncrGl55F46t2NMfremgzdi+Wb4HbD8yEUWItnXmoKYiIG4NzlIcbhVSuWOx
whlX00fd9O1fNp3GbFnE5TeNvR5zZN0awUZ7pfObpVRNzfbL9DZnNkS2S6nE
LK5E7XtUf0/MntCie2sw2d2OU1HQyyzzPAi1A4Y1tg4ZudVkat30DcYbcmR6
BfUaMDhwO2dR8E0rNqrm8DEX6i5WsDp0lp18RO2czw+4z0SM7kdvcHVx1d/g
HaxaNFenM7YSQl2XKCyxxGW22qUOOlmqkEGftgqcLDIdpthEkw7rUIoJ1ctN
Q/NgqR0B5ReEC+7zJ4/UlUhD0yQvmgrCaekifjBRX2ljpq13VPsqvTYJNq2S
C5tJtTtJ5HZA0ZLBIAX15hjH24Vf8/zWVIsPNl6+PMs36zZIvXu0GmabkdOW
GLOeCcypw2gkVXc0duR6EY8oyUxkDOube9h/XHXN1TiDYu63IJZhdqUbEwjc
Dqnu4QjTLedAsIlnsYa1zKm28ozL+Oz9P47Z+TSEzxczVlOxCMubBP5v4/Ty
zWaAYc3AV8TEGWMLO3LGEQ0XFYfrNoS3lK/KWRqcsHvy+t1jvpIv4ZBe4yEF
P8SYJA8U6zWob5RNcZBFoTbwhkN7/DL94fXB2Wa5aP8jScd69OzRI6xdI0ba
cl1+aXOkNSUaWxgatwXVGM0LW8PUo69cyZs2L802WAV2Mvm5I0Kpq+X4k6OH
Uw+DF0V5Kzfhbe5UuSdgX0/TgXnK3U0XS3QRmi3bywUgDuU6ojgSTmerTVxe
4urzvZkWgppdscwt5ib4WQu4cVlWEMFTombR+zm1G2YKNY6vF0JLSSIifJ9n
KJzXnChhzV2u8KP+HvvXnaIqRQXrUFJjxwnT9ZDrFTYoMqzlPDRJkCSv8UBI
o0N6IgnotoTX18S1kSfiloj/GZSlq0JJTC5W7fQ1hfHp9tM9ETIjrXqUU2MI
GqyFiAjBpLELrHzKV39IuVx8mu/SeBQmWjLQrGltkAGBYpBjE/s1vJPwBUL1
9NW3J4evTp85eZUZ7pUqMbmGJA4v5YLAUqjH2DwmmKs6Ddgewf4klmhtf9Jp
/BapHSjNHPErAX5wtdD6A3ufUOxqmPi4JvyW0l+nfFYNnNZ5BGswFU412lKh
TgdZZvH1pDCVeqUQUm1qV00vynIcrDMu3lSpwRriOdrGFllTnVCnwD2udBUt
NUxuEbv7DTVPTWiTgwp0F0liKvlOkdstWCXh8s/UaQvwnHuESBillLLDktlc
VIVDjdgaGTZUJCR/MVUkxb0V1FmSmCedBpZQs11f0Z49WkzLrsS+Lz2ZilXL
RLuqQel+pZyQ5l/DCr1yq/UbpQgtU0l2VCreNNHCKvey3hBFnlCSqLX/URBB
sUodqbo6We7i9Obh2u5XY9WE9hPpbXPYOmG+de7r4AUjROlWTW19MKfk7BQZ
XeF4ieuuysitNzDOoogZW8Wmw/FSBSGqV3SV6o1zSfaWeuNuaf+Gcr51ujo2
AdfayoyzSa0FvcSISy0ZvUJjH1m41itVet/yYn21asuCxTRohISRdOrC8vcu
wue2XXtJs/MK1bP9sZYExNobm+urSEYEliZHYhhzVxRXBCjfApuR3QJipxyO
3SHXXU5GFL0h0cUAEXdUmUODpU1ZVqZzoaO0uT1hvNBMrfy0ct7vcmNIq1lM
8zrmWdRzzk+zXaO6VlwlSZxdvBZNqraTMl0R298K5aJr0aBUzcqxEZcaRy/Q
6SYbxMsQUq9EqjhmT6II87emuws3PrGlCRVtqeu5hj4q1m763XhmEUpMcT7T
pn7ciIeru1Fpcc5kNUZTIPmmHXBD9VW2XOSFvFqJoVAIc5UQrYhfIn+MfhIO
Xo+DTn0kkkS5Z00i7SbeJukNMO/rptALpUqxFMYZOA0rqkWP8nBMoJlJb0qL
zsaBaEDU1Ma7CWSr2oJPErUGqF9WIEAdeJTVBmdpzxSnEKLKlOLZ4yfYq9g6
HXceB1IKUYlwPadnwzDTLeM0VN69mM/VcthspzvIuaaNeiK7jcAgIwwP4hfH
F1EnI00T9Sen35nAwZFbC1FMlpWjsv2gVK0wXZ0M/cTjj4Fs3AbSjgwhVk8w
uCDD0vZqzdJB19jSGrguxvmRUba2f4ApslEy0nKNDdGqsCpR+UUWsBkQUum3
2gqvpBfUu6u0WYJSp/ouCaV+OGV9YdMkNklIKrXpmuJNBz2N9D6ugyE8rU0K
b7xfnp7GTVyWltp1BSa/1G6p+EsjIShli7Tdee+SS9qllwf5OZJZQTJPmc4A
InorAOYQRyYR7R6OkNVY/0p+kJpwYCWGXmHgcuZbpc5BKWG6nF43uJWrwYgm
Say0v9qEWpU6nNRkkyUqNeK9xNc7bZqrObOPz9kxAMJqItgmZmRBXUkstSH5
pbBjH0ROPs7fKzPtvyd7lDXRxAcoJzOV49+B8M1z27rD4hsLoBVFqT76BF52
71fs3qvlvTXY2H/XxhrGWLqqo/sOzS4QFmiX9HKKxWJSl3f6d3agcsSftkpz
9m57w+bGzBRxNoODGqYfQ5hbaLEyUY0XVVKviNyCrswrmwbSKFZTvs/Lj/R8
nLrHu7VDuaf3+C5nH8JqNJ/2H90Z/AmRzJizfm1ItutRwSySdhnL7IZ+lFqA
iSHOMIu6etGXQVFhO79ahPq80UyBW9GjGrlaj17Ncb1lqC+vsUsSDLWh0TCh
NtVxpRV/xtVWxBQ3HPehsQguLzlfVfdN0vGdlkEKLOouFGXomFVQoTVR0StA
1q3RInLIJBq+zU1X27BieuArWtT13CSXrNNlkwJq0UnCslfXJO+SJaSIc9E/
2mLFBLqx6cROay2bLsSz6Xht8caOsvCm0lDJ01EeedSnpjNQPdDCarvwsiGi
SWpr1jgMua4SLk0JX0YR79jYqa7BcU17J3FYSRcJY0K7ATWabN0TbOpszghN
HESbPKQdcgeo+9wUr863p0c6vKI1xMlaD/YdXlHjsFJPyQWI6MGuqfkmL9yD
UNQH8S+pxPv408LJb/vWEC6gt1o3v1epSGFd/7teqEItSnuZHiXXjCZAOu2u
BnCfMTKCpI/SushFajrTYwG1mnv8hEDW3OG13ifHJkAqwerfxIMfgzzGrCMM
/2CbUGy7b9MCb21rOOvOVVsizucqJt1gLDU9TcmBesVaQ7RAiuQcaI8+EYUo
sIYv9fhFobNWMDEZ/XECBxGPOFKmydYQe1W7xC5AQorU5qIuCSwiicGSMpf0
NuRilzVmbyEMsHE0MMVjI3fVkm7XX1Cqu3XfWluICompSwpMgZszSyObNiWQ
2zznlBM0C6dci6QbUFAEgbKCJ2hTMLZWqhvfVK3Z0aCXxzkbEmDYcprm2s8s
rbLt+zLAn38O50jJ4vc9k7LQEze0lwps4y0ctw/FaeGdNeG7WNCtyIQhLBPh
sbRsUa5061XLqltyS4KPC8tygo/fw2xBxggs0XNrCOSoBS8q5XlajLi+wfWG
nbVUpLkrnmGW+mTe5hhLU/MX85CiBpGiWto0zJ3sgZUyTRKRCjxuKMEVtVbb
NvreQsOrd9lylUc+V2mLknIBf4coqdB19Q2iIbolObzE9UdY27vS7PbzqQmi
+oEvJ/pI6HblFYInjqA1gBW8uiZDDSITIdXUXtIpMlbTipvTrEqhny5MfyAb
JV6wrNwidKV2HVXMRgACyNLrBGsUV0VXobaaFhhcxFqisSklLi9Ha2vU5qvX
lyevzg5eGhuFDT3Ior+iwBqbxqDnETrZTGm9ZrTbK4PopBoBgT4T7VdRG0tX
Sx6afUQeFAUVGBPcS18f8uPF+ZAc5cPb4Idaf7vwcMWlZGEfZRmHoq/iVvK3
QeFDP0SD4GWcUGyfRgzdRIPelD+T1H/DPaQeWWMiYlILX76wga2kR3YbuQEm
ADNYu5734LU1HgZWQXE90ihj9+lTYGgcoml7yZCAwY7FkKOApN6FVt/itx8/
frZNG8bNmGnszCxDEbRlkXVtzDk2c2ngRzn8grVubRhOm7aGIFyzX3OE1TBB
K7MqDVKoCaq7LfFf2+CNxfp4Lu1LalGfMyK1AdwKfA09UIKubgYa10XWq10D
Yyo6n9waQ48zBOIG9mixYIH1xHPuVRE0nJmZHGk06LNuWPVQ90uLIryg6b4K
0iE7tilMb6z9q7i7wtK1MP5o7j/dMfnD3BnA0XyCHvlQ70o9OPZdGkKHalBk
FOfDlMK/yRfkBDIRhRmEw7eE7BypZaIOu2Q9sr02XDWzDuU/A56HJYdQcJie
HxN50R6apmZIKYReyThfVCd/wy3CcH78h30KHtzqYxBVD2N7ki3UIjrw3cV+
sNvf3tOunWR9/3oLdpGnWb5VRLP5N18xGLql76a432++isfP1/ijtUrth/Ix
a+EH3KSSUKroEGgpCCWm+maSAikG3APtrVKRXzHKqVtwYyO0D3fo8A93FcLa
eM12kLE0MdjK0Ahg0OZCQyiQCdZ6/qZUGN1KmjWOwH7wrW0P5i6b0+1zvlVd
N6wcNTFenfIsd4XuopgOrO3sPny05gcEX4hQ01ht66NyHv1u1EAp8wa2XeK/
d+jTIv3W8onfp6W5S3IZUP0yptiaO6UyVCs0icpNup2TZAP4iadPQ9rCk2ug
Na61SvpWiR+kWS8aJT2pOpbb6ytphdyyiOqFHL8Xh/KRLSN0plvaOD462zTF
yziEEk0o1M8Myypt/Glz3dTKrxYOW62J4J/ESLr+lw8yGL5Kz3qlS3hakFnd
KZtKaEhIVX3dkVp00a5pWuay4hMhq8U96o+UB24uQ7L++uDHl68OjjyY4qa0
GEfdpj7N5A55DcIwf3fdASLXq/sJ/owZhzTTT/VPwM83QCrgtnQ+BMQe7vvz
AQe45DJe2+8fhfcbQNTpfS94/S4DvMni3uuwmOwHa9nafVbwNfc4Ftz85u4D
fMxPdYANOB3NiJCwZ+NjcpWf7fdPBsHmp1vBhmEgGDDH3R/D1mpAr7+/AhnD
WUFI1cJN+cTl3GazDIN+E862/TgDbH0cDILgLx87QPAf99jBN8EHvZEr/TRc
29VxwVxbwKF7DdBwbVcfoOHarj5Aw7X9DDdSfvCCcEvBvCnFEGS1T3gjG1ex
rCvgkhU0Z1l9wi0Ah/q69rKuwqF6wQWugPL57r2CT8GdRDsSfWzfFQW36lph
fonynTvAafi+d3BN9+R+K/ho7iQVxfaDn++5gsAtq4h/bgf7cIp3GaDuB2Tm
dXRi7W9tqYK1rxrU1np3+QDeEMpS9lVh0SGWoHKZAt5lCz91G76oHWArsOId
/LEbcPHTDUDOPSD/IDrD/2O5N/iPiJqbzgC/rDTXXbew8gCgTtdf1L+bwLm9
c78BfhM4G79bhbcsWcFy3vKJsPFXxFzui4m/MRf8z2/Mpfbn/ybm4g6w4fS4
L3uDgH6oCRXrI+89fvJ07dNIq1/2el9+1AAg7n7MIj6gjf1DHVGDy3BqFOhG
ogYkDWiirGCjrob7Flp1943qvWVC5A0efDQMaHpyKnzMAA2q6eoDGAa/c1e6
LAPcnyrKAIYqCoreeYD7/3xo9MUkaS/Nh+SWqFTh/o649SvLrdk5c05Fbg4l
wZSsuCaplW5m5T3x4pQyU9EsT11zh17cKBV24dzWlmo2b6NoTgnqOde1ovK+
VBNCigNyExYT1GIq0GoAI+nsuP5FMlpQJB+2AVX3gZS44wgcc9NMMnjvRRSN
0IfYO4rfUX9Ojvvx69lECec8I7HiwkAOzFZaLAfTOUZyCi7GYoGjxTAaqQdI
At+wygGX3GPrsa0nCWBkDxUVAqpUzcnFRWLnwBoUMMgqO8e1a/0brAiGvR0j
rB44m4VZ/Dd1fcyy8ahXIEC4XRaum9wmozy4JDiRS8Tp8MTOJbsmdNgfZjEu
aNqlvy7CcdQrUhSVbsJMi+ZInyxiFiM32MYfqvIyGdvPbH8uE+4ZBiOs1IBC
7Bq+KRIZrBl9bR+Cs7SPdyw4hH/fwL9n8O85/hdDSVe5ndpy/EPwkquAf8AG
b5RVhFf/8tujnadExj8E7+HfnvxeczpfD7JvKif0IVhQu3hk9r0dnnEjSZOI
xG6kBvZwXJ/s6njfDw6f26N58/xNgkUeusHZ87P0EJMffo+t5s6fn0dzuHUE
uSCcxtfJ87VhhHiPlIXjN1L0YAfHo7hIs31twcVLo2T9bjCnckGAvPNpCCfL
0DH5B05jZjlv9lkSNiXm7VFE5dw5oyDMwussnE/kGqy+bwqexqT+MM+DY8KQ
VxeHr86PJd7m8c7DX34pB+syvbX1BzXQ7zWHjBB9kGQ2iWvFqiUm8M+noqXK
RG+qbla3MFZ4h705sYIau+wHCWLV0jhZcHm/Vas0lAM3hXTB9KbGSOyURyh1
UdWuBk5M5jzGVJ0wMfc+AyKQztRTfSLNwLY5loPq+4kXTp74t+B5sLH7NVDO
b/7w9Rb+ZxOd8vysNm/6g4ZuswhayXFI5RqcjANKgrSlz3l2L9oNq2lQsS8N
ruTOkP2AJIybuBQcLhUCb8IY/d6yvXHGL6k0/DKKcyrPSOUi/MKeT222AhFW
068qCZxmpPg75bQsRFeu8apTuki1J1VTlQMMKE4Kqc2VOkU2MPtb0m9Silh0
a8UtBnrccFBsMVitOVZLXtHq1bc+Q4WtgUkpt5XR6iBJx1LTDsBNPXbKtpWD
MrxQBpNOVp+8BZ8Cz6PCl9pWTxpnNo9v9C6KcmsKawJ0sBy3Nu2OEk7goEep
JLvghafKTBFcmiEFZE3TlKIpQzo07Mkwm1N3IDfqrvCOzc1JoNLPWqtO8dlp
Hk19NwInvJbyNUwIOEWHSs1etwQQHDeJb04NoL6yKDeZ0FuHrSZ0F9rrtm+z
NcoZ2yjXpBzm7F/xromBBDbJsYKa9YZCMwDzVtkjz7ERBtiGpCdtSNwYDSo9
tekl4ZgASqwuS8UskDiNnSBaRh8U2ElSn1vepkTPv9MugSFdz6fyDEkKKaTn
7gLKuK3xGIOIszVG1kHdnLNGnObe5dbg6GyFJSe28A4ih1R1IoLdq8+zgbt/
HTnBl3V1BaXykVIcjAFVTI35jmD2UMHVQDUD2cmUmefRYpT2MFSlLIyY5qyr
PNxz6o/bXmeUkY5LFTELCLsdwtRMm0daV5B3Yzsny8Z5iibx6kIi5GA+X3Gj
iruE20QhJQZVdEI3WNRGCLIYw1opa3td00aYS/nKoquloFZtXVKTZFFhvLIc
ntmVWA5fvTkzxUidRNiKJV/x2EdjKiM1duriNtSiKgtqD5xSmfi6IrU0poq5
Sm/OYZiUr8Iqr6r1Ajxvc7YqUajQPCV4CjmXuEYpp87lIrFOsRuibS66bbfi
FMV2TO60NI7hA2aIeWWR5idM0ht3WaY2kXJOivYHrjL66yIv3LOAtZ56tXLM
xmbzhX9sfwDhFDjRxstusL0pwihFIL7kUhv0AqWRvoQnYW/TjWl6vbtxFmwF
p5vc5eLMpB1KNTLPjFpGgK5deYatfqKRAGVHJaMzWROhVDfYoZYNNXVdcwy0
/oNWMfQmvRsnpEjsnFt0SK5n6GSvNQsiII3nWAM8bHrG6ZlCgw4WGHg6Bm2f
OQfhxPnx4avT0+Ozo+OjmmqGSjTvScVt4LzHlbRZlSxJbtIhyNCREfvtXbp0
cYgeyWul+GqLJmNpokhRAMHM0CpUJBBTD/50dfjq7MXJ+ekBph5d/XBwcqkV
1fvB0SJjIoA4Vq7DLRoF7bTdf0iptpg5bDJI/ZKqq1eiK/FbQILlF9u/mnUb
dmOti6ZC7V7dd4Vfi+hBuZ/j1pOqFDudunpeOvYPkdcoiUITEPDJUgqKNYbB
Gkupj8N8TYpy82QxklF2QEVBqlwLC8p6dPEK1dQ/8pxePb+8DL7kQV6eHJ9d
Yijhm+OLy6uj45cHP3Y6rI3rk3HemNT2qF/Weo2hUgv28Invbu8qNmtr66bp
cT6/GSc+eXF8/sfjc3jy4vWrs4tjebQh7HuHc+1aO1E0LXRv2147UTooTZul
dMrcMSVqnaP0WQxW4p8scsNEtZaoNKNpOD8Y/9GegROjDE1YQhmv7skomk/T
25lasmdIz/IJWqezhmlsqV4Jm5YPsDTCiBN5qAQ/hbxn3IgOREQxerBBECmI
4AfbOUTYm6LsBLfMu0DVisemC5c/Wh06bGrq3NHxi4M3Ly+vXh6fXLw5PwZU
3rMoRdDmbSdmtMrOKSVvDGTPgvhBSWZ1Cf4rPPRWyswmhDkWXByVhIyFUuHz
OpGJK/9mGan44RI+Ul9SAsvqqwWAwGzKYDUQQqN034GBmqL8OSW41Zh+asTF
ls1w13cXIJqNIpyIOfaYtSPTv/MOK3YyK7ZbxT/EBB5CnRBc3hkx6zz4omyt
BJ2yrq6kUiBME3X6wagQ603tyK7s/XpfuCeHNW3fmqsh/CPOPGjpZeB8QJt/
bvWdJhGsdJI1tcWHMbFUoQZAc6ZknHCTC6O5ikWYP+WhdVXYYTn2HMC5TRki
MowfXoBvAx043jpjOrJxtnXcJOo6R1ejvZRF7bxZcZPMJ4OyJGOvK/NfSYAP
NAHWy/x302NlUJETril4Wbu0lBRGLQaEnw+i6zhJhBbxDEyejInFSRU3Ap9U
lKiskhLCROKz8l7+KQS+FlLgKFh1B6V1ohREXwYbG8dBLwAU2AqOVAELjoJv
0KHguR34VS3qMwL8jRJTJhoN3io7Dlw7BVztGRf8d/pTon1kyhCmF0XTQ4eV
jy1sK06nI3W+OsyiwdZthL86+7MQPHsc9Q07/LLA0oOhhKJVtZKFU7nDKEAn
vgRNZflV9eQkezUvfEwdaoK/kX0RpG8j6Zk8BwoL28emdtKZtqBkZ6+gN2qa
GBkQcyWk6zQd6XBaikItmsJaqUIBtc6QotpKRNsqa38CAwS7lQS1YalqfrKb
d8GNq3TIvta6W7bMTueA0N52zfOuvhw/zK6ziliBRgMmKc+Dh7uWFHK1IRsF
4XJrsgxiE6dTeOkp6R3sx+GSI1URYhVm7HBhNK7sql8Yx4Rrs/MUV7MgT5Qs
y7CNPfYpNBtejZzK7FFcdViAqGtzytHroS9QLjrgXyFy4jTi0jyPmqbIrfvF
76QUHEzzlJKHXWJKwhzxVqC01vlUvU+jihrPPFLoICs+4RQHoI/q2hCArLmY
mVT40NBAgfYRQHtHs1rvSZYBc4Ak7zwGkvxwdxMHfExYg3bXpsxjPkX2Us45
cAa1EWphhxnXeDM8Sy2VD3IVpvt4cMp4tq3tIRqkIFL04S6derA+E/5BVWbE
rG96pPvoKbnRxOMR+dSD3uipX9Gnegl4yacltqFz4i6iIPiSFnJEcuFF0gEU
iaxWPXGo7QqeBAa/dQjkn8gjYGwYdKZu3YBBhHWx0oxhIR3LlAORRMzIyLgi
9NNS+BWpJ+l0hTXi2ShOv54XoY8E0nFEidZCoAII0aha28tF2TlP0ihze9Z7
LalAb6XDdOpPvDx+RahXlORKRlhkvCXqLmtBTpSMMOIqShw/daXvueRLUwEW
YR6DVHuJ2jIerrLeVLyqMRiFNYKwMANm6MNARcX6w1FAEgjQVqWLDhbMEj+w
3Av3IfYxjA0qNLdWMjUeZC9Kx22nHq4SaCiRsYOHN1QXQizE7uhM8JzaWkSS
IyeQh8TPcAoi/+hWdmysiJgfDyhT3bP1BNrChSqBHvyI5HtGijWHb+nGSA/1
YaMY4ZbX+StoKVSblC86GYBtNxrsFxpKJRqctrkwndfMC+8JPGpyJNBPb/Uf
XSECSmExqCBARgVc3A14ncFuxcKSRUA0FjkAG3dCrRC5sxXeUuqcaqFje+KG
MwPCVGQShrCKRdJAjfvIxE6fZDiSb/U61OMQHQoupoqd3rU3TSNLwDO3PRxG
vbfRrWOf5KsvJkpX2gkODo+5NzG5SPF2Hyzg86Rwjd0HXHpT6kjELb2nKcLi
2e42FpwKXoh8LZXIcUoSfVNT5ae6U5yOYBBzU2kR7whK1GNXdVitcSVGzRY3
kaVjDEOXSDrFKFsjb/istLyjmqM23Mk2nRgKUvCoIdfAmd/lXqUOiE13JC9X
SMRenxjmFpk4RkIoCo0EoC4oVonQQZUEsrr2JPO/d65VOlUnbrydpYltYXXZ
TakJqHIuhY1p16GFctC5XNxEUaVDHbWM5yvhQsg7E1PI0Tkax+PtBlOix9ut
81nhkjmbTDxeKSSfRVxtoF4NCcX1bsEdObp8eSG4vvOIoom+T2+iZicLRiLI
aPC2OzPHOFw47UzNk/yYkIOWnkxlmlmKz7dlUEPb6q7GIVpiB5ZO1XEEpf+x
gwEgVWW3c9ZQpX5us+04d65lRWbyCwcDVdTK4q7bQgTMcrCMKTWk1A0XSnEa
aGYZoQvh7nSTF2Sh53iJChfWbqFHXAhH9ZdrPlKXNHXiHRimOb2tMwMbvuhF
dUjnDiwCNAvnrVxWiyOhMgEUu9zRhwsLa+AajRgOBsgdHRLqLaYumbFHsVY5
hUQHWHN8HcF+BRdvvVsuTYR9oRAiejBVHlCogQqLH+NmGDlOwwQoStY1lXZC
UwmpQDmfKyGZ6sMfc+BeiSlZqMTmEcD8xqc25UD355ZA7YmAMonnTsgo79Hb
mIEdHPfV9bwKOapxrYVrPQGnHSIyLmu4bBZcD/Pm05EpfLZ/ocFo1d4B3i4M
tn/sCidvR+Pq+r7//dGL4GB6jaXAJzM+pBqRacmEXBWbLMB9J0UxzsXCaQMK
/4hfVJt3vbo4tqvInY5dP/+M3/Xtd/ZOeLsbghx9NZ4V1R1KEU+N+fLFMXyN
Y7PzO+19tc2+DAfRtH6z34O4DYf7WmMqYc/npT3zI337CBLOQzQMYgqT1vV2
/Oq75XJqTWoqV54mBzWtPZeqXehyY2iRgkBil1NGXIMSWU2agcw/wXJv7zgk
F2ZuqN1N1GMxgGGCt6j66Fk64om6zfBROodoOkUTxxBNqTDBBkfGmIwj2xLp
QIJOJBDkBtNv1IRnqIokctht8zq5o20zRiCtpuPGsowUjpsHG4c/XObsCoPf
gsNpGM/gMqOv/PDwAr5h+ebhMwo//lN/b/sZOQF5HZHI9Hu7T7fpJHCYmkec
MwRuwHXxGAl7+KSrDuhWxI/lxR4Q/i8KINo8FUcB4lMWFCJPhWiB5VBzUuvI
1XJriRJQ/ALr3xnmRZYlcwxB8Jc/ozEULaPl/dCxZlIZdy4F8uvUApY+Rlk4
Lnotu+8Hf/mpjgZcz6/gsSvAryoVYJp6nJBMhVMup3mcu8hCmBG/S2KWtW/N
YHm/eiqZg2BcDx8SmRFRyoChVrXXiYXA/0TuQPtmmWq9brHSJYPSJl2Fycp1
WERVG3bsW6TvWZheDcN5OFjf98bslowdQl5Jpne917RFGiCexpQ4yktS5m9o
plP4Gg7CPdDQbQ1mSn+7LzKMD51ZloO6zJSqoPbgAPT9qridR58VGPQ9chKc
SV+Cv4WFm0nuDTQz9uow+z28cgmv1IAMvurTV6ZquDBdbC3nrKWEpQgWK9bY
jIDGbuRW0GljaTaOUntICBAth24WhVw/SFMODMbINEmxpehKuoBzbCcxi5MQ
u6egn39g6wNvgMa5yQYsE2TBpUzFo0EVcGFjPYBWj+vXq4GkSZ6miAtXWZKd
fW+7iFe7dbuijz8czaLNthoBr8BU67JtRGPvgGPNcsWlkl3avInn1lXFh0p8
c9QMwVBeqsKvioGiF/jck5DP4OYKyGfu2p2Qx4EwOZEi14VkHNC0dPdi16EF
d+GStBZKpStZCywNsGtlPz4SdTgulWls3F6cO0YKxxjRNc5H6SOEgqKxVLQ2
gDSGLaIrRqsXgLOiqqNqwptpZyhh1O6STIs1XH0y4lLngd/1yFmkDqXlH1ZY
hbxSk9Fn8tDyyNg9TMjjrQibSBqoIoNGj/gmpfJRooFhWdeUf4heS1hCtjcj
IjLylDSv1VJY32xJfRau1dmkm5hx8xpBTZoysC+ZbMIlz6O9ZUmENwvJMpAh
8iOGpAFM2zH80vWpiLmteatu2weRN6Ujuk1BXWon5Iws04Og0cAq1mG2/FE5
gXN2wbG35YH1LdtQKlyGW22fULPq+XBt9o2xDc4xeQ3BHX99jQevZKk0cLHC
qabZs1+Mk82cy/DAtktydyZYr0Y66c7SVmjcEiTjgjGuNN/gXBN8aNUkp6gO
w642S+DJKrYMsyRp8XDpQJgXuVr/4PoV9HdWtKfkEhF9I+F/zLqIQNlUegMq
5E4X9BVXuXtf1MUROciCny9mUUP0qzPcheYrn0nThbN6dY1SK+hBTZFkd+3F
2RdYBgJe+xIT2jxrk+flf2XCT5ZCV6PEKV8Ptrn+Nh5JV0pZ9cmR8UmKb6xG
eNC35/E7efs1IhhA+eSPgTZkF0O18UUL4EZN8GEYwnaXzq+HuIEg6nG2H96r
BkdS7YVzLf3epfO1n3IrAlVCqq2OWZH1Mbwxpl8U+DZHUWM8aYlU/CKoQdA0
qGHpEdnpnB4RVsU6xOuPUt+U+gVuYz20jRfHl4ffc5Im39/6xggc/jXAPkez
2DEtghwTUcOQRM01puhNzmhjnDZ2ZiPV6I21kjvGc8VzYEFkwuBdOX4xNZT0
tVQPNcnEQ4qQnuMpLmsO2xWHTFPrD0fAAClfvCKVBs+lrsuueO1EoJdyM+sa
Zrdx80/kHqdyGLOYsiBr2sI24nx9/QEX79ubSHw05nsc3MV/cgoLonNsgqCj
NrJtWNHJ2cnlFQg8Jy8Cv83uY6771XT3CIauUavpzGxajqtqp/X2TXY7czsf
DTYycM7dmAA/jkjJX7n7Zi3dq4Whx6uJi6v4FJEy2wC+pgJKNU7vv6cMon3P
SuKclSwerjSy4Fet0KcnlnNgPTXAVhaI1krZ1zpWlwO9YXoVhqN116ZNfnM0
7ZKQXQ/uUgmlSsOe+nUzLSdivi7oe4VcXwkIiQBqBfYQ85XJX1omVyhDbpEj
DEcxi0DhwSyC/vh0i2gSR5bJIGXpo7pqgNbVkAVFD4SB+fDT7YLvxIlt3yR1
cb6LR5t1vnKT6gPAV2HWYYxiHSBzr9ic0AyhngVz5VFXpOCltrtPlosmArAg
4DZ2BX9QbSFbS6vczBlLqkjps8k4n6zvZ7UGJd90tmRSSDdV4t5AnTWGXb5J
jH9vk6WZPG3jazWtYFekPV5PM6Jw6CVUQ2cDLsNkzjVwDhg367cX7To2Tx7X
3BoRyZyR2jDbyCrcJpjNOi3KvWv4+dTKvRbjU+W+PiTXC69bUaFfpmc0NKC2
KFwqidgoPVRaSK+4ryVdsNsYmDQj1uHxO5KIdv0qemT4VtpdkWI5plvwadQm
1Dq1VCjYGCsNmoQrLOimzd4/pfRLqeomfbFufxLvl9uAvzjS1EKWFO9pxNhd
zYixFA2/8MII1W5nHDHJLdciBa17Eg3fOomczibzt/E8590/9Ndp61RwbChN
eDJWsGjsNAPGlodZan6gAjnRiH22vdotSCoLDnXOO/gBFLf0RpHoXJu2Koer
jdrSgOLmbfNTWJcApLXplGNmRPZfBovGxVMNFgS+pl+q6Bmi1RpwH3VH4zQK
3RT5UpHh1tN6umSFLUUnzVJHwD01Sr31zESTcvP1vQptZs9S/FPOiRvA5fNw
aOxiGj6tHbCXRWmbJHzNL6wBfV6kmVudynhSxbIlJirypXhSmjhUDIW9s6D2
qe7EGESIfzSPygEVXHDKYbUAqZ6puVRpGTtTdqGsVCaDG7bk/E6ae6oGXilE
y9lcI4i3chL+mtlGu2VEmYqaH/ZW2zgWceMycqaonErkja11uR5UIRXayKRn
oonELnEDclojMjXaYJZcBSH9/mmzL1ncXEx8246zFYhNpYrNJGhSxymeLDOX
LN2uIviEM6Mtnqt/nKvqNqFWrXayRGb8xdsTGV9rchLuZa1pFlZWjGBtFVaw
OgmWM8H8sBJ+GOttMz2QqrniG/etJ6t1MW4y5tjqX8ROLLuksrsU8TDBAqyB
Fq01zn3BZwln5Y67nmHFFj3w7KpsaOEQ+/uzncaLWYc0m/7qyMjStDr68u+5
Os+y0gLDEg//71ztqqaUuqu5klXFVFK4r2XFtKlvTtY2Le9L+vbl5LfW9b+1
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
vZ/+B0phYleeHAIA

-->

</rfc>
