<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.6 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-groupcomm-bis-06" category="std" obsoletes="7390" updates="7252, 7641" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.9.1 -->
  <front>
    <title abbrev="Group Communication for CoAP">Group Communication for the Constrained Application Protocol (CoAP)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-06"/>
    <author initials="E." surname="Dijk" fullname="Esko Dijk">
      <organization>IoTconsultancy.nl</organization>
      <address>
        <postal>
          <street>\________________\</street>
          <city>Utrecht</city>
          <country>Netherlands</country>
        </postal>
        <email>esko.dijk@iotconsultancy.nl</email>
      </address>
    </author>
    <author initials="C." surname="Wang" fullname="Chonggang Wang">
      <organization>InterDigital</organization>
      <address>
        <postal>
          <street>1001 E Hector St, Suite 300</street>
          <city>Conshohocken</city>
          <code>PA 19428</code>
          <country>United States</country>
        </postal>
        <email>Chonggang.Wang@InterDigital.com</email>
      </address>
    </author>
    <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>
    <date year="2022" month="March" day="07"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies the use of the Constrained Application Protocol (CoAP) for group communication, including the use of UDP/IP multicast as the default underlying data transport. Both unsecured and secured CoAP group communication are specified. Security is achieved by use of the Group Object Security for Constrained RESTful Environments (Group OSCORE) protocol. The target application area of this specification is any group communication use cases that involve resource-constrained devices or networks that support CoAP. This document replaces RFC 7390, while it updates RFC 7252 and RFC 7641.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  CORE Working Group mailing list (core@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/">https://mailarchive.ietf.org/arch/browse/core/</eref>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/core-wg/groupcomm-bis">https://github.com/core-wg/groupcomm-bis</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="chap-intro" numbered="true" toc="default">
      <name>Introduction</name>
      <t>This document specifies group communication using the Constrained Application Protocol (CoAP) <xref target="RFC7252" format="default"/>, together with UDP/IP multicast as the default transport for CoAP group communication messages. CoAP is a RESTful communication protocol that is used in resource-constrained nodes, and in resource-constrained networks where packet sizes should be small. This area of use is summarized as Constrained RESTful Environments (CoRE).</t>
      <t>One-to-many group communication can be achieved in CoAP, by a client using UDP/IP multicast data transport to send multicast CoAP request messages. In response, each server in the addressed group sends a response message back to the client over UDP/IP unicast. Notable CoAP implementations supporting group communication include the framework "Eclipse Californium" 2.0.x <xref target="Californium" format="default"/> from the Eclipse Foundation and the "Implementation of CoAP Server &amp; Client in Go" <xref target="Go-OCF" format="default"/> from the Open Connectivity Foundation (OCF).</t>
      <t>Both unsecured and secured CoAP group communication are specified in this document. Security is achieved by using Group Object Security for Constrained RESTful Environments (Group OSCORE) <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, which in turn builds on Object Security for Constrained Restful Environments (OSCORE) <xref target="RFC8613" format="default"/>. This method provides end-to-end application-layer security protection of CoAP messages, by using CBOR Object Signing and Encryption (COSE) <xref target="I-D.ietf-cose-rfc8152bis-struct" format="default"/><xref target="I-D.ietf-cose-rfc8152bis-algs" format="default"/>.</t>
      <t>This documents replaces and obsoletes <xref target="RFC7390" format="default"/>, while it updates both <xref target="RFC7252" format="default"/> and <xref target="RFC7641" format="default"/>. A summary of the changes and additions to these documents is provided in <xref target="changes" format="default"/>.</t>
      <t>All sections in the body of this document are normative, while appendices are informative. For additional background about use cases for CoAP group communication in resource-constrained devices and networks, see <xref target="appendix-usecases" format="default"/>.</t>
      <section anchor="scope" numbered="true" toc="default">
        <name>Scope</name>
        <t>For group communication, only those solutions that use CoAP messages over a "one-to-many" (i.e., non-unicast) transport protocol are in the scope of this document. There are alternative methods to achieve group communication using CoAP, using unicast only. One example is Publish-Subscribe <xref target="I-D.ietf-core-coap-pubsub" format="default"/> which uses a central broker server that CoAP clients access via unicast communication. These alternative methods may be usable for the same or similar use cases as the ones targeted in this document.</t>
        <t>This document defines UDP/IP multicast as the default transport protocol for CoAP group requests, as in <xref target="RFC7252" format="default"/>. Other transport protocols (which may include broadcast, non-IP multicast, geocast, etc.) are not described in detail and are left for future work. Although UDP/IP multicast transport is assumed in most of the text in this document, we expect many of the considerations for UDP/IP multicast can be re-used for alternative transport protocols.</t>
        <t>Furthermore, this document defines Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> as the default group communication security solution for CoAP. Security solutions for group communication and configuration other than Group OSCORE are left for future work. General principles for secure group configuration are in scope.</t>
      </section>
      <section anchor="terminology" numbered="true" toc="default">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL"
in this document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they appear in all capitals, as shown here.</t>
        <t>This specification requires readers to be familiar with CoAP terminology <xref target="RFC7252" format="default"/>. Terminology related to group communication is defined in <xref target="sec-groupdef" format="default"/>.</t>
        <t>In addition, the following terms are extensively used.</t>
        <ul spacing="normal">
          <li>Group URI - This is defined as a CoAP URI that has the "coap" scheme and includes in the authority component either an IP multicast address or a group hostname (e.g., a Group Fully Qualified Domain Name (FQDN)) that can be resolved to an IP multicast address. A group URI also contains an optional UDP port number in the authority component. Group URIs follow the regular CoAP URI syntax (see <xref section="6" sectionFormat="of" target="RFC7252" format="default"/>).</li>
          <li>Security material - This refers to any security keys, counters or parameters stored in a device that are required to participate in secure group communication with other devices.</li>
        </ul>
      </section>
      <section anchor="changes" numbered="true" toc="default">
        <name>Changes to Other Documents</name>
        <t>This document obsoletes and replaces <xref target="RFC7390" format="default"/> as follows.</t>
        <ul spacing="normal">
          <li>It defines separate definitions for CoAP groups, application groups and security groups, together with high-level guidelines on their configuration (see <xref target="chap-general-groupcomm" format="default"/>).</li>
          <li>It defines the use of Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> as the security protocol to protect group communication for CoAP, together with high-level guidelines on secure group maintenance (see <xref target="chap-oscore" format="default"/>).</li>
          <li>It updates all the guidelines about using group communication for CoAP (see <xref target="sec-coap-usage" format="default"/>).</li>
          <li>It strongly discourages unsecured group communication for CoAP based on the "NoSec" mode (see <xref target="chap-unsecured-groupcomm" format="default"/> and <xref target="chap-security-considerations-nosec-mode" format="default"/>) and highlights the risk of amplification attacks (see <xref target="ssec-amplification" format="default"/>).</li>
        </ul>
        <t>This document updates <xref target="RFC7252" format="default"/> as follows.</t>
        <ul spacing="normal">
          <li>It updates the request/response model for group communication, as to response suppression (see <xref target="sec-request-response-suppress" format="default"/>) and token reuse time (see <xref target="sec-token-reuse" format="default"/>).</li>
          <li>It updates the freshness model and validation model to use for cached responses (see <xref target="sec-caching-freshness" format="default"/> and <xref target="sec-caching-validation" format="default"/>).</li>
        </ul>
        <t>This document updates <xref target="RFC7641" format="default"/> as follows.</t>
        <ul spacing="normal">
          <li>It defines the use of the CoAP Observe Option in group requests, for both the GET method and the FETCH method <xref target="RFC8132" format="default"/>, together with normative behavior for both CoAP clients and CoAP servers (see <xref target="sec-observe" format="default"/>).</li>
        </ul>
      </section>
    </section>
    <section anchor="chap-general-groupcomm" numbered="true" toc="default">
      <name>Group Definition and Group Configuration</name>
      <t>In the following, different group types are first defined in <xref target="sec-groupdef" format="default"/>. Then, Group configuration, including group creation and maintenance by an application, user or commissioning entity is considered in <xref target="sec-groupconf" format="default"/>.</t>
      <section anchor="sec-groupdef" numbered="true" toc="default">
        <name>Group Definition</name>
        <t>Three types of groups and their mutual relations are defined in this section: CoAP group, application group, and security group.</t>
        <section anchor="sec-groupdef-coapgroup" numbered="true" toc="default">
          <name>CoAP Group</name>
          <t>A CoAP group is defined as a set of CoAP endpoints, where each endpoint is configured to receive CoAP group messages that are sent to the group's associated IP multicast address and UDP port. That is, CoAP groups have relevance at the level of IP networks and CoAP endpoints.</t>
          <t>An endpoint may be a member of multiple CoAP groups, by subscribing to multiple IP multicast addresses. A node may be a member of multiple CoAP groups, by hosting multiple CoAP server endpoints on different UDP ports. Group membership(s) of an endpoint or node may dynamically change over time. A node or endpoint sending a CoAP group message to a CoAP group is not necessarily itself a member of this CoAP group: it is a member only if it also has a CoAP endpoint listening on the group's associated IP multicast address and UDP port.</t>
          <t>A CoAP group is identified by information encoded within a group URI. Further details on identifying a CoAP group are provided in <xref target="sec-groupnaming-coap" format="default"/>.</t>
        </section>
        <section anchor="sec-groupdef-applicationgroup" numbered="true" toc="default">
          <name>Application Group</name>
          <t>An application group is a set of CoAP server endpoints (hosted on different nodes) that share a common set of CoAP resources. That is, an application group has relevance at the application level. For example, an application group could denote all lights in an office room or all sensors in a hallway.</t>
          <t>An endpoint may be a member of multiple application groups. A client endpoint that sends a group communication message to an application group is not necessarily itself a member of this application group.</t>
          <t>There can be a one-to-one or a one-to-many relation between a CoAP group and application group(s). Such relations are discussed in more detail in <xref target="sec-groupdef-grouprelations" format="default"/>.</t>
          <t>An application group name may be explicitly encoded in the group URI of a CoAP request, for example in the URI path component. If this is not the case, the application group is implicitly derived by the receiver, e.g., based on information in the CoAP request or other contextual information. Further details on identifying an application group are provided in <xref target="sec-groupnaming-app" format="default"/>.</t>
        </section>
        <section anchor="sec-groupdef-securitygroup" numbered="true" toc="default">
          <name>Security Group</name>
          <t>For secure group communication, a security group is required. A security group comprises endpoints storing shared group security material, such that they can use it to protect and verify mutually exchanged messages.</t>
          <t>That is, a client endpoint needs to be a member of a security group in order to send a valid secured group communication message to that group. A server endpoint needs to be a member of a security group in order to receive and correctly verify a secured group communication message sent to that group. An endpoint may be a member of multiple security groups.</t>
          <t>There can be a many-to-many relation between security groups and CoAP groups, but often it is one-to-one. Also, there can be a many-to-many relation between security groups and application groups, but often it is one-to-one. Such relations are discussed in more detail in <xref target="sec-groupdef-grouprelations" format="default"/>.</t>
          <t>A special security group named "NoSec" identifies group communication without any security at the transport layer nor at the CoAP layer. Further details on identifying a security group are provided in <xref target="sec-groupnaming-sec" format="default"/>.</t>
        </section>
        <section anchor="sec-groupdef-grouprelations" numbered="true" toc="default">
          <name>Relations Between Group Types</name>
          <t>Using the above group type definitions, a CoAP group communication message sent by an endpoint can be represented as a tuple that contains one instance of each group type:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
(application group, CoAP group, security group)
]]></artwork>
          <t>A special note is appropriate about the possible relation between security groups and application groups.</t>
          <t>On one hand, multiple application groups may use the same security group. Thus, the same group security material is used to protect the messages targeting any of those application groups. This has the benefit that typically less storage, configuration and updating are required for security material. In this case, a CoAP endpoint is supposed to know the exact application group to refer to for each message that is sent or received, based on, e.g., the used server port number, the targeted resource, or the content and structure of the message payload.</t>
          <t>On the other hand, a single application group may use multiple security groups. Thus, different messages targeting the resources of the application group can be protected with different security material. This can be convenient, for example, if the security groups differ with respect to the cryptographic algorithms and related parameters they use. In this case, a CoAP client can join just one of the security groups, based on what it supports and prefers, while a CoAP server in the application group would rather have to join all of them.</t>
          <t>Beyond this particular case, applications should be careful in associating a same application group to multiple security groups. In particular, it is NOT RECOMMENDED to use different security groups to reflect different access policies for resources in a same application group. That is, being a member of a security group actually grants access only to exchange secured messages and enables authentication of group members, while access control (authorization) to use resources in the application group belongs to a separate security domain. It has to be separately enforced by leveraging the resource properties or through dedicated access control credentials assessed by separate means.</t>
          <t><xref target="fig-group-relation" format="default"/> summarizes the relations between the different types of groups described above in UML class diagram notation. The class attributes in square brackets are optionally defined.</t>
          <figure anchor="fig-group-relation">
            <name>Relations Among Different Group Types</name>
            <artwork align="center" name="" type="" alt=""><![CDATA[
+------------------------+                 +--------------------+
|   Application group    |                 |    CoAP group      |
|........................|                 |....................|
|                        |                 |                    |
| [ - group name ]       +-----------------+ - IP mcast address |
|                        |  1...N       1  | - UDP port number  |
|                        |                 |                    |
|                        |                 |                    |
+-------------+----------+                 +---------+----------+
              |  1...N                               |  1...N
              |                                      |
              |                                      |  
              |                                      |  1...N
              |                           +----------+------------+
              |                           |   Security group      |
              |                           |.......................|
              |                           |                       |
              \---------------------------+ - Security group name |
                                   1...N  | - Security material   |
                                          |                       |
                                          +-----------------------+
]]></artwork>
          </figure>
          <t><xref target="fig-group-relation-example" format="default"/> provides a deployment example of the relations between the different types of groups. It shows six CoAP servers (Srv1-Srv6) and their respective resources hosted (/resX). There are three application groups (1, 2, 3) and two security groups (1, 2). Security Group 1 is used by both Application Group 1 and 2. Three clients (Cli1, Cli2, Cli3) are configured with security material for Security Group 1. Two clients (Cli2, Cli4) are  configured with security material for Security Group 2. All the shown application groups use the same CoAP group (not shown in the figure), i.e., one specific multicast IP address and UDP port number on which all the shown resources are hosted for each server.</t>
          <figure anchor="fig-group-relation-example">
            <name>Deployment Example of Different Group Types</name>
            <artwork align="center" name="" type="" alt=""><![CDATA[
 ________________________________    _________________________________
/                                \  /                                 \
|       +---------------------+  |  |  +---------------------+        |
|       | Application Group 1 |  |  |  | Application Group 3 |  Cli2  |
|       |                     |  |  |  |                     |        |
| Cli1  | Srv1   Srv2   Srv3  |  |  |  | Srv5   Srv6         |  Cli4  |
|       | /resA  /resA  /resA |  |  |  | /resC  /resC        |        |
| Cli2  +---------------------+  |  |  | /resD  /resD        |        |
|                                |  |  +---------------------+        |
| Cli3     Security Group 1      |  |                                 |
|                                |  |        Security Group 2         |
|       +---------------------+  |  \_________________________________/
|       | Application Group 2 |  |
|       |                     |  |
|       | Srv1   Srv4         |  |
|       | /resB  /resB        |  |
|       +---------------------+  |
\________________________________/
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="sec-groupconf" numbered="true" toc="default">
        <name>Group Configuration</name>
        <t>The following defines how groups of different types are named, created, discovered and maintained.</t>
        <section anchor="sec-groupnaming" numbered="true" toc="default">
          <name>Group Naming</name>
          <t>Different types of group are named as specified below, separately for CoAP groups, application groups and security groups.</t>
          <section anchor="sec-groupnaming-coap" numbered="true" toc="default">
            <name>CoAP Groups</name>
            <t>A CoAP group is identified and named by the authority component in the group URI (see <xref target="sec-groupdef-coapgroup" format="default"/>), which includes the host subcomponent (possibly an IP multicast address literal) and an optional UDP port number. Note that the two authority components &lt;HOST&gt; and &lt;HOST&gt;:5683 both identify the same CoAP group, whose members listen to the CoAP default port number 5683.</t>
            <t>When configuring a CoAP group membership, it is recommended to configure an endpoint with an IP multicast address literal, instead of a group hostname. This is because DNS infrastructure may not be deployed in many constrained networks. In case a group hostname is configured, it can be uniquely mapped to an IP multicast address via DNS resolution, if DNS client functionality is available in the endpoint being configured and the DNS service is supported in the network.</t>
            <t>Examples of hierarchical CoAP group FQDN naming (and scoping) for a building control application were shown in <xref section="2.2" sectionFormat="of" target="RFC7390" format="default"/>.</t>
          </section>
          <section anchor="sec-groupnaming-app" numbered="true" toc="default">
            <name>Application Groups</name>
            <t>An application group can be named in many ways through different types of identifiers, such as name string, (integer) number, URI or other types of string. The decision of whether and how exactly an application group name is encoded and transported is application specific.</t>
            <t>The following defines a number of possible methods to use. The shown examples consider a CoAP group identified by the group hostname grp.example.org. Its members are CoAP servers listening to the associated IP multicast address ff35:30:2001:db8:f1::8000:1 and port number 5685. 
Note that a group hostname is used here to have better-readable examples: in practice, an implementation would likely use an IP address literal as the host component of the Group URI in order to reduce the size of the CoAP request. In particular, the Uri-Host Option can be 
fully elided in this case. Also note that the Uri-Port Option does not appear in the examples, since the port number 5685 is already included in the CoAP request's UDP header (which is not shown in the examples).</t>
            <t>An application group name can be explicitly encoded in a group URI. In such a case, it can be encoded within one of the following URI components.</t>
            <ul spacing="normal">
              <li>
                <t>URI path component - This is the most common and RECOMMENDED method to encode the application group name. When using this method in constrained networks, an application group name GROUPNAME should be as short as possible.  </t>
                <t>
A best practice for doing so is to use a URI path component such that: i) it includes a path segment as delimiter with a designated value, e.g., "gp", followed by ii) a path segment with value the name of the application group, followed by iii) the path segment(s) that identify the targeted resource within the application group. For example, both /gp/GROUPNAME/res1 and /base/gp/GROUPNAME/res1/res2 conform to this practice. Just like application group names, the path segment used as delimiter should be as short as possible in constrained networks.  </t>
                <t>
A full-fledged example is provided in <xref target="fig-gname-path-example" format="default"/>. Another example of a compact CoAP request is provided in <xref target="fig-gname-path-example-2" format="default"/>, in which an IPv6 literal address and the default CoAP port number 5683 are used in the authority component. Also the resource structure is different in this example.</t>
              </li>
            </ul>
            <figure anchor="fig-gname-path-example">
              <name>Example of application group name in URI path 1/2</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
 
   Application group name: gp1

   Group URI: coap://grp.example.org:5685/gp/gp1/light?foo=bar

   CoAP group request
      Header: GET (T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: grp.example.org
      Uri-Path: gp
      Uri-Path: gp1
      Uri-Path: light
      Uri-Query: foo=bar
]]></artwork>
            </figure>
            <figure anchor="fig-gname-path-example-2">
              <name>Example of application group name in URI path 2/2</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
 
   Application group name: gp1

   Group URI: coap://[ff35:30:2001:db8:f1::8000:1]/g/gp1/li

   CoAP group request
      Header: POST (T=NON, Code=0.02, MID=0x7d41)
      Uri-Path: g
      Uri-Path: gp1
      Uri-Path: li
]]></artwork>
            </figure>
            <ul spacing="normal">
              <li>
                <t>URI query component - This method can use the following formats. In either case,    when using this method in constrained networks, an application group name GROUPNAME should be as short as possible.  </t>
                <ul spacing="normal">
                  <li>
                    <t>As a first alternative, the URI query component consists of only one parameter, which has no value and has the name of the application group as its own idenfier. That is, the query component ?GROUPNAME conforms to this format.      </t>
                    <t>
A full-fledged example is provided in <xref target="fig-gname-query1-example" format="default"/>.</t>
                  </li>
                  <li>
                    <t>As a second alternative, the URI query component includes a query parameter as designated indicator, e.g., "gp", with value the name of the application group. That is, assuming "gp" to be used as designated indicator, both the query components ?gp=GROUPNAME and ?par1=v1&amp;gp=GROUPNAME conform to this format.      </t>
                    <t>
A full-fledged example is provided in <xref target="fig-gname-query2-example" format="default"/>.</t>
                  </li>
                </ul>
              </li>
            </ul>
            <figure anchor="fig-gname-query1-example">
              <name>Example of application group name in URI query (1/2)</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
 
   Application group name: gp1

   Group URI: coap://grp.example.org:5685/light?gp1

   CoAP group request
      Header: GET (T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: grp.example.org
      Uri-Path: light
      Uri-Query: gp1
]]></artwork>
            </figure>
            <figure anchor="fig-gname-query2-example">
              <name>Example of application group name in URI query (2/2)</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
 
   Application group name: gp1

   Group URI: coap://grp.example.org:5685/light?foo=bar&gp=gp1

   CoAP group request
      Header: GET (T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: grp.example.org
      Uri-Path: light
      Uri-Query: foo=bar
      Uri-Query: gp=gp1
]]></artwork>
            </figure>
            <ul spacing="normal">
              <li>
                <t>URI authority component - If this method is used, the application group is identified by the authority component as a whole.  </t>
                <t>
In particular, the application group has the same name of the CoAP group expressed by the group URI (see <xref target="sec-groupnaming-coap" format="default"/>). Thus, this method can only be used if there is a one-to-one mapping between CoAP groups and application groups (see <xref target="sec-groupdef-grouprelations" format="default"/>).  </t>
                <t>
A full-fledged example is provided in <xref target="fig-gname-auth-example" format="default"/>.</t>
              </li>
            </ul>
            <figure anchor="fig-gname-auth-example">
              <name>Example of application group name in URI authority</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
 
   Application group name: grp.example.org:5685

   Group URI: coap://grp.example.org:5685/light?foo=bar

   CoAP group request
      Header: GET (T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: grp.example.org
      Uri-Path: light
      Uri-Query: foo=bar
]]></artwork>
            </figure>
            <ul spacing="normal">
              <li>
                <t>URI host subcomponent - If this method is used, the application group is identified solely by the host subcomponent of the authority component.  </t>
                <t>
Since an application group can be associated with only one CoAP group (see <xref target="sec-groupdef-grouprelations" format="default"/>), using this method implies that any two CoAP groups cannot differ only by the port subcomponent of the URI authority component.  </t>
                <t>
A full-fledged example is provided in <xref target="fig-gname-host-example" format="default"/>.</t>
              </li>
            </ul>
            <figure anchor="fig-gname-host-example">
              <name>Example of application group name in URI host</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
 
   Application group name: grp.example.org

   Group URI: coap://grp.example.org:5685/light?foo=bar

   CoAP group request
      Header: GET (T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: grp.example.org
      Uri-Path: light
      Uri-Query: foo=bar
]]></artwork>
            </figure>
            <ul spacing="normal">
              <li>
                <t>URI port subcomponent - By using this method, the application group is uniquely identified by the destination port number encoded in the port subcomponent of the authority component.  </t>
                <t>
Since an application group can be associated with only one CoAP group (see <xref target="sec-groupdef-grouprelations" format="default"/>), using this method implies that any two CoAP groups cannot differ only by their host subcomponent of the URI authority component.  </t>
                <t>
A full-fledged example is provided in <xref target="fig-gname-post-example" format="default"/>.</t>
              </li>
            </ul>
            <figure anchor="fig-gname-post-example">
              <name>Example of application group name in URI port</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
 
   Application group name: grp1, as inferable from port number 5685

   Group URI: coap://grp.example.org:5685/light?foo=bar

   CoAP group request
      Header: GET(T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: grp.example.org
      Uri-Path: light
      Uri-Query: foo=bar
]]></artwork>
            </figure>
            <t>Alternatively, there are also methods to encode the application group name within the CoAP request, even though it is not encoded within the group URI. An example of such method is summarized below.</t>
            <ul spacing="normal">
              <li>
                <t>The application group name can be encoded in a new (e.g., custom, application-specific) CoAP Option, which the client adds to the CoAP request before sending it out.  </t>
                <t>
Upon receiving the request as a member of the targeted CoAP group, each CoAP server would, by design, understand this Option, decode it and treat the result as an application group name.  </t>
                <t>
A full-fledged example is provided in <xref target="fig-gname-custom-option-example" format="default"/>.</t>
              </li>
            </ul>
            <figure anchor="fig-gname-custom-option-example">
              <name>Example of application group name in a new CoAP Option</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
 
   Application group name: grp1

   Group URI: coap://grp.example.org:5685/light?foo=bar

   CoAP group request
      Header: GET (T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: grp.example.org
      Uri-Path: light
      Uri-Query: foo=bar
      App-Group-Name: grp1  // new (e.g., custom) CoAP option
]]></artwork>
            </figure>
            <t>Furthermore, it is possible to encode the application group name neither in the group URI nor within a CoAP request, thus yielding the most compact representation on the wire. In this case, each CoAP server needs to determine the right application group based on contextual information, such as the client identity and/or the target resource. For example, each application group on a server could support a unique set of resources, such that it does not overlap with the set of resources of any other application group.</t>
            <t>Finally, Appendix A of <xref target="I-D.ietf-core-resource-directory" format="default"/> provides an example of application group registered to a Resource Directory (RD), along with the CoAP group it uses and the resources it supports. In that example, an application group name "lights" is encoded in the "ep" (endpoint) attribute of the RD registration entry. At the same time, the CoAP group is ff35:30:2001:db8:f1::8000:1 and the "NoSec" security group is used.</t>
          </section>
          <section anchor="sec-groupnaming-sec" numbered="true" toc="default">
            <name>Security Groups</name>
            <t>A security group is identified by a stable and invariant string used as group name. This is generally not related with other kinds of group identifiers that may be specific of the used security solution.</t>
            <t>The "NoSec" security group name MUST be only used to represent the case of group communication without any security. This typically results in CoAP messages that do not include any security group name, identifier, or security-related data structures.</t>
          </section>
        </section>
        <section anchor="sssec-group-creation" numbered="true" toc="default">
          <name>Group Creation and Membership</name>
          <t>To create a CoAP group, a configuring entity defines an IP multicast address (or hostname) for the group and optionally a UDP port number in case it differs from the default CoAP port number 5683. Then, it configures one or more devices as listeners to that IP multicast address, with a CoAP endpoint listening on the group's associated UDP port. These endpoints/devices are the group members. The configuring entity can be, for example, a local application with pre-configuration, a user, a software developer, a cloud service, or a local commissioning tool. Also, the devices sending CoAP requests to the group in the role of CoAP client need to be configured with the same information, even though they are not necessarily group members. One way to configure a client is to supply it with a group URI. The IETF does not define a mandatory protocol to accomplish CoAP group creation. <xref target="RFC7390" format="default"/> defined an experimental protocol for configuration of group membership for unsecured group communication, based on JSON-formatted configuration resources. For IPv6 CoAP groups, common multicast address ranges that are used to configure group addresses from are ff1x::/16 and ff3x::/16.</t>
          <t>To create an application group, a configuring entity may configure a resource (name) or a set of resources on CoAP endpoints, such that a CoAP request sent to a group URI by a configured CoAP client will be processed by one or more CoAP servers that have the matching URI path configured. These servers are the members of the application group.</t>
          <t>To create a security group, a configuring entity defines an initial subset of the related security material. This comprises a set of group properties including the cryptographic algorithms and parameters used in the group, as well as additional information relevant throughout the group life-cycle, such as the security group name and description. This task MAY be entrusted to a dedicated administrator, that interacts with a Group Manager as defined in <xref target="chap-oscore" format="default"/>. After that, further security materials to protect group communications have to be generated, compatible with the specified group configuration.</t>
          <t>To participate in a security group, CoAP endpoints have to be configured with the group security material used to protect communications in the associated application/CoAP groups. The part of the process that involves secure distribution of group security material MAY use standardized communication with a Group Manager as defined in <xref target="chap-oscore" format="default"/>. For unsecure group communication using the "NoSec" security group, any CoAP endpoint may become a group member at any time: there is no configuring entity that needs to provide security material for this group, as there is no security material for it. This means that group creation and membership cannot be tightly controlled for the "NoSec" group.</t>
          <t>The configuration of groups and membership may be performed at different moments in the life-cycle of a device; for example during product (software) creation, in the factory, at a reseller, on-site during first deployment, or on-site during a system reconfiguration operation.</t>
        </section>
        <section anchor="group-discovery" numbered="true" toc="default">
          <name>Group Discovery</name>
          <t>The following describes how a CoAP endpoint can discover groups by different means, i.e., by using a Resource Directory or directly from the CoAP servers that are members of such groups.</t>
          <section anchor="sssec-discovery-from-rd" numbered="true" toc="default">
            <name>Discovery through a Resource Directory</name>
            <t>It is possible for CoAP endpoints to discover application groups as well as CoAP groups, by using the RD-Groups usage pattern of the CoRE Resource Directory (RD), as defined in Appendix A of <xref target="I-D.ietf-core-resource-directory" format="default"/>.</t>
            <t>In particular, an application group can be registered to the RD, specifying the reference IP multicast address of its associated CoAP group. The registration of groups to the RD is typically performed by a Commissioning Tool. Later on, CoAP endpoints can discover the registered application groups and related CoAP group(s), by using the lookup interface of the RD.</t>
            <t>When secure communication is provided with Group OSCORE (see <xref target="chap-oscore" format="default"/>), the approach described in <xref target="I-D.tiloca-core-oscore-discovery" format="default"/> also based on the RD can be used, in order to discover the security group to join.</t>
            <t>In particular, the responsible OSCORE Group Manager registers its security groups to the RD, as links to its own corresponding resources for joining the security groups <xref target="I-D.ietf-ace-key-groupcomm-oscore" format="default"/>. Later on, CoAP endpoints can discover the registered security groups and related application groups, by using the lookup interface of the RD, and then join the security group through the respective Group Manager.</t>
          </section>
          <section anchor="sssec-discovery-from-servers" numbered="true" toc="default">
            <name>Discovery from the CoAP Servers</name>
            <t>It is possible for CoAP endpoints to discover application groups and CoAP groups from the CoAP servers that are members of such groups, by using a GET request targeting the /.well-known/core resource.</t>
            <t>As shown below, such a GET request may be sent to the IP multicast address of an already known CoAP group associated with one or more application groups; or to the "All CoAP Nodes" multicast address, thus targeting all reachable CoAP servers in any CoAP group. Also, the GET request may specify a query component, in order to filter the application groups of interest.</t>
            <t>These particular details concerning the GET request depend on the specific discovery action intended by the client and on application-specific means used to encode names of application groups and CoAP groups, e.g., in group URIs and/or CoRE target attributes used with resource links.</t>
            <t>The following provides examples of methods to discover application groups and CoAP groups, building on the following assumptions. First, application group names are encoded in the path component of Group URIs (see <xref target="sec-groupnaming-app" format="default"/>), using the path segment "gp" as designated delimiter. Second, the type of an application group is encoded in the CoRE Link Format attribute "rt" of a group resource with a value "g.&lt;GROUPTYPE&gt;". Third, a CoAP group is used and is identified by the URI authority grp.example.org:5685.</t>
            <ul spacing="normal">
              <li>
                <t>A CoAP client can discover all the application groups associated with a specific CoAP group.  </t>
                <t>
This is achieved by sending the GET request above to the IP multicast address of the CoAP group, and specifying a wildcarded group type "g.<em>" as resource type in the URI query parameter "rt". For example, the request can use a Group URI with path and query components "/.well-known/core?rt=g.</em>", so that the query matches any application group resource type. Alternatively, the request can use a Group URI with path and query components "/.well-known/core?href=/gp/*", so that the query matches any application group resources and also matches any sub-resources of those.  </t>
                <t>
Through the corresponding responses, the query result is a list of resources at CoAP servers that are members of the specified CoAP group and have at least one application group associated with the CoAP group. That is, the client gains knowledge of: i) the set of servers that are members of the specified CoAP group and member of any of the associated application groups; ii) for each of those servers, the name of the application groups where the server is a member and that are associated with the CoAP group.  </t>
                <t>
A full-fledged example is provided in <xref target="fig-app-gp-discovery-example1" format="default"/>.  </t>
                <t>
Each of the servers S1 and S2 is identified by the IP source address of the CoAP response. If the client wishes to discover resources that a particular server hosts within a particular application group, it may use unicast discovery request(s) to this server i.e., to its respective unicast IP address. Alternatively the client may use the discovered group resource type (e.g., rt=g.light) to infer which resources are present below the group resource.</t>
              </li>
            </ul>
            <figure anchor="fig-app-gp-discovery-example1">
              <name>Discovery of application groups associated with a CoAP group</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
   // Request to all members of the CoAP group
   Req: GET coap://grp.example.org:5685/.well-known/core?rt=g.*

   // Response from server S1, as member of:
   //   - The CoAP group "grp.example.org:5685"
   //   - The application group "gp1"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   </gp/gp1>;rt=g.light

   // Response from server S2, as member of:
   // - The CoAP group "grp.example.org:5685"
   // - The application groups "gp1" and "gp2"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   </gp/gp1>;rt=g.light,
   </gp/gp2>;rt=g.temp
]]></artwork>
            </figure>
            <ul spacing="normal">
              <li>
                <t>A CoAP client can discover the CoAP servers that are members of a specific application group, the CoAP group associated with the application group, and optionally the resources that those servers host for each application group.  </t>
                <t>
This is achieved by sending the GET request above to the "All CoAP Nodes" IP multicast address (see <xref section="12.8" sectionFormat="of" target="RFC7252" format="default"/>), with a particular chosen scope (e.g., site-local or realm-local) if IPv6 is used. Also, the request specifies the application group name of interest in the URI query component, as defined in <xref target="sec-groupnaming-app" format="default"/>. For example, the request can use a Group URI with path and query components "/.well-known/core?href=/gp/gp1" to specify the application group with name "gp1".  </t>
                <t>
Through the corresponding responses, the query result is a list of resources at CoAP servers that are members of the specified application group and for each application group the associated CoAP group. That is, the client gains knowledge of: i) the set of servers that are members of the specified application group and of the associated CoAP group; ii) for each of those servers, optionally the resources it hosts within the application group.  </t>
                <t>
A full-fledged example is provided in <xref target="fig-app-gp-discovery-example2" format="default"/>. Note that the servers need to respond now with an absolute URI and not a relative URI like in the previous example, because the group resource "gp1" is hosted at the authority indicated by the CoAP group (grp.example.org:5685) and not by the authority that is serving the Link Format document (which is [ff03::fd]:5683).  </t>
                <t>
If the client wishes to discover resources that a particular server hosts within a particular application group, it may use unicast discovery request(s) to this server.</t>
              </li>
            </ul>
            <figure anchor="fig-app-gp-discovery-example2">
              <name>Discovery of members of an application group, together with the associated CoAP group</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
 
   // Request to realm-local members of the application group "gp1"
   Req: GET coap://[ff03::fd]/.well-known/core?href=/gp/gp1

   // CoAP response from server S1, as member of:
   //   - The CoAP group "grp.example.org:5685"
   //   - The application group "gp1"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   <coap://grp.example.org:5685/gp/gp1>;rt=g.light

   // CoAP response from server S2, as member of:
   // - The CoAP group "grp.example.org:5685"
   // - The application groups "gp1"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   <coap://grp.example.org:5685/gp/gp1>;rt=g.light
]]></artwork>
            </figure>
            <ul spacing="normal">
              <li>
                <t>A CoAP client can discover the CoAP servers that are members of any application group of a specific type, the CoAP group associated with those application groups, and optionally the resources that those servers host as members of those application groups.  </t>
                <t>
This is achieved by sending the GET request above to the "All CoAP Nodes" IP multicast address (see <xref section="12.8" sectionFormat="of" target="RFC7252" format="default"/>), with a particular chosen scope (e.g., site-local or realm-local) if IPv6 is used. Also, the request can specify the application group type of interest in the URI query component as value of a query parameter "rt". For example, the request can use a Group URI with path and query components "/.well-known/core?rt=TypeA" to specify the application group type "TypeA".  </t>
                <t>
Through the corresponding responses, the query result is a list of resources at CoAP servers that are members of any application group of the specified type and of the CoAP group associated with each of those application groups. That is, the client gains knowledge of: i) the set of servers that are members of the application groups of the specified type and of the associated CoAP group; ii) optionally for each of those servers, the resources it hosts within each of those application groups.  </t>
                <t>
A full-fledged example is provided in <xref target="fig-app-gp-discovery-example3" format="default"/>.  </t>
                <t>
If the client wishes to discover resources that a particular server hosts within a particular application group, it may use unicast discovery request(s) to this server.</t>
              </li>
            </ul>
            <figure anchor="fig-app-gp-discovery-example3">
              <name>Discovery of members of application groups of a specified type, and of the associated CoAP group</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
   // Request to realm-local members of application groups
   // with group type "g.temp"
   Req: GET coap://[ff03::fd]/.well-known/core?rt=g.temp

   // Response from server S1, as member of:
   //   - The CoAP group "grp.example.org:5685"
   //   - The application group "gp1" of type "g.temp"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   <coap://grp.example.org:5685/gp/gp1>;rt=g.temp

   // Response from server S2, as member of:
   //   - The CoAP group "grp.example.org:5685"
   //   - The application groups "gp1" and "gp2" of type "g.temp"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   <coap://grp.example.org:5685/gp/gp1>;rt=g.temp,
   <coap://grp.example.org:5685/gp/gp2>;rt=g.temp
]]></artwork>
            </figure>
            <ul spacing="normal">
              <li>
                <t>A CoAP client can discover the CoAP servers that are members of any application group configured in the 6LoWPAN wireless mesh network of the client, the CoAP group associated with each application group, and optionally the resources that those servers host as members of the application group.  </t>
                <t>
This is achieved by sending the GET request above with a query specifying a wildcarded group type in the URI query parameter for "rt". For example, a Group URI with path and query components "/.well-known/core?rt=g.*", so that the query matches any application group type.
 The request is sent to the "All CoAP Nodes" IP multicast address (see <xref section="12.8" sectionFormat="of" target="RFC7252" format="default"/>), with a particular chosen scope if IPv6 is used. In this example the scope is realm-local to address all servers in the current 6LoWPAN wireless mesh network of the client.  </t>
                <t>
Through the corresponding responses, the query result is a list of group resources hosted by any server in the mesh network. Each group resource denotes one application group membership of a server. The CoAP group per application group is obtained as the authority of each returned link.  </t>
                <t>
A full-fledged example is provided in <xref target="fig-app-gp-discovery-example4" format="default"/>.  </t>
                <t>
If the client wishes to discover resources that a particular server hosts within a particular application group, it may use unicast discovery request(s) to this server.</t>
              </li>
            </ul>
            <figure anchor="fig-app-gp-discovery-example4">
              <name>Discovery of the resources and members of any application group, and of the associated CoAP group</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
   // Request to realm-local members of any application group
   Req: GET coap://[ff03::fd]/.well-known/core?rt=g.*

   // Response from server S1, as member of:
   //   - The CoAP groups "grp.example.org:5685" and "grp2.example.org"
   //   - The application groups "gp1" and "gp5"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   <coap://grp.example.org:5685/gp/gp1>;rt=g.light,
   <coap://grp2.example.org/gp/gp5>;rt=g.lock

   // Response from server S2, as member of:
   //   - The CoAP group "grp.example.org:5685"
   //   - The application groups "gp1" and "gp2"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   <coap://grp.example.org:5685/gp/gp1>;rt=g.light,
   <coap://grp.example.org:5685/gp/gp2>;rt=g.light

   // Response from server S3, as member of:
   //   - The CoAP group "grp2.example.org"
   //   - The application group "gp5"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   <coap://grp2.example.org/gp/gp5>;rt=g.lock
]]></artwork>
            </figure>
            <t>Note that all the above examples are application-specific. That is, there is currently no standard way of encoding names of application groups and CoAP groups in group URIs and/or CoRE target attributes used with resource links. In particular, the discovery of groups through the RD mentioned in <xref target="sssec-discovery-from-rd" format="default"/> is only defined for use with an RD, i.e., not directly with CoAP servers as group members.</t>
            <t>For example, some applications may use the "rt" attribute on a parent resource to denote support for a particular REST API to access child resources, as detailed in the example in <xref target="fig-app-gp-discovery-example5" format="default"/>. In this example a custom Link Format attribute "gpt" is used to denote the group type within the scope of the application/system. An alternative, shorter encoding (not shown in the figure) is to use only the value "1" for each "gpt" attribute, to denote that the resource is of type application group. In that case information about the semantics/API of the group resource is disclosed only via the "rt" attribute as shown in the figure.</t>
            <figure anchor="fig-app-gp-discovery-example5">
              <name>Example of using a custom 'gpt' link attribute to denote group type</name>
              <artwork name="" type="" align="left" alt=""><![CDATA[
   // Request to realm-local members of any application group
   Req: GET coap://[ff03::fd]/.well-known/core?gpt=*

   // Response from server S1, as member of:
   //   - The CoAP groups "grp.example.org:5685" and "grp2.example.org"
   //   - The application groups "gp1" and "gp5"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   <coap://grp.example.org:5685/gp/gp1>;rt=oic.d.light;gpt=light,
   <coap://grp2.example.org/gp/gp5>;rt=oic.d.smartlock;gpt=lock

   // Response from server S2, as member of:
   //   - The CoAP group "grp.example.org:5685"
   //   - The application groups "gp1" and "gp2"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   <coap://grp.example.org:5685/gp/gp1>;rt=oic.d.light;gpt=light,
   <coap://grp.example.org:5685/gp/gp2>;rt=oic.d.light;gpt=light

   // Response from server S3, as member of:
   //   - The CoAP group "grp2.example.org"
   //   - The application group "gp5"
   Res: 2.05 Content
   Content-Format: 40
   Payload:
   <coap://grp2.example.org/gp/gp5>;rt=oic.d.smartlock;gpt=lock
]]></artwork>
            </figure>
          </section>
        </section>
        <section anchor="sec-group-maintenance" numbered="true" toc="default">
          <name>Group Maintenance</name>
          <t>Maintenance of a group includes any necessary operations to cope with changes in a system, such as: adding group members, removing group members, changing group security material, reconfiguration of UDP port number and/or IP multicast address, reconfiguration of the group URI, renaming of application groups, splitting of groups, or merging of groups.</t>
          <t>For unsecured group communication (see <xref target="chap-unsecured-groupcomm" format="default"/>) i.e., the "NoSec" security group, addition/removal of CoAP group members is simply done by configuring these devices to start/stop listening to the group IP multicast address on the group's UDP port.</t>
          <t>For secured group communication (see <xref target="chap-oscore" format="default"/>), the maintenance operations of the protocol Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> MUST be implemented. When using Group OSCORE, CoAP endpoints participating in group communication are also members of a corresponding OSCORE security group, and thus share common security material. Additional related maintenance operations are discussed in <xref target="chap-sec-group-maintenance" format="default"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-coap-usage" numbered="true" toc="default">
      <name>CoAP Usage in Group Communication</name>
      <t>This section specifies the usage of CoAP in group communication, both unsecured and secured. This includes additional support for protocol extensions, such as Observe (see <xref target="sec-observe" format="default"/>) and block-wise transfer (see <xref target="sec-block-wise" format="default"/>).</t>
      <t>How CoAP group messages are carried over various transport layers is the subject of <xref target="sec-transport" format="default"/>. Finally, <xref target="sec-other-protocols" format="default"/> covers the interworking of CoAP group communication with other protocols that may operate in the same network.</t>
      <section anchor="sec-request-response" numbered="true" toc="default">
        <name>Request/Response Model</name>
        <section anchor="general" numbered="true" toc="default">
          <name>General</name>
          <t>A CoAP client is an endpoint able to transmit CoAP requests and receive CoAP responses. Since the underlying UDP transport supports multiplexing by means of UDP port number, there can be multiple independent CoAP clients operational on a single host. On each UDP port, an independent CoAP client can be hosted. Each independent CoAP client sends requests that use the associated endpoint's UDP port number as the UDP source port number of the request.</t>
          <t>All CoAP requests that are sent via IP multicast MUST be Non-confirmable, see <xref section="8.1" sectionFormat="of" target="RFC7252" format="default"/>.  The Message ID in an IP multicast CoAP message is used for optional message deduplication by both clients and servers, as detailed in <xref section="4.5" sectionFormat="of" target="RFC7252" format="default"/>. A server sends back a unicast response to a CoAP group request. The unicast responses received by the CoAP client may be a mixture of success (e.g., 2.05 Content) and failure (e.g., 4.04 Not Found) codes, depending on the individual server processing results.</t>
        </section>
        <section anchor="sec-request-response-suppress" numbered="true" toc="default">
          <name>Response Suppression</name>
          <t>A server MAY suppress its response for various reasons given in <xref section="8.2" sectionFormat="of" target="RFC7252" format="default"/>. This document adds the requirement that a server SHOULD suppress the response in case of error or in case there is nothing useful to respond, unless the application related to a particular resource requires such a response to be made for that resource.</t>
          <t>The CoAP No-Response Option <xref target="RFC7967" format="default"/> can be used by a client to influence the default response suppression on the server side. It is RECOMMENDED for a server to support this option only on selected resources where it is useful in the application context. If the option is supported on a resource, it MUST override the default response suppression of that resource.</t>
          <t>Any default response suppression by a server SHOULD be performed consistently, as follows: if a request on a resource produces a particular Response Code and this response is not suppressed, then another request on the same resource that produces a response of the same Response Code class is also not suppressed. For example, if a 4.05 Method Not Allowed error response code is suppressed by default on a resource, then a 4.15 Unsupported Content-Format error response code is also suppressed by default for that resource.</t>
        </section>
        <section anchor="repeating-a-request" numbered="true" toc="default">
          <name>Repeating a Request</name>
          <t>A CoAP client MAY repeat a group request using the same Token value and same Message ID value, in order to ensure that enough (or all) group members have been reached with the request. This is useful in case a number of group members did not respond to the initial request and the client suspects that the request did not reach these group members. However, in case one or more servers did receive the initial request but the response to that request was lost, this repeat does not help to retrieve the lost response(s) if the server(s) implement the optional Message ID based deduplication (<xref section="4.5" sectionFormat="of" target="RFC7252" format="default"/>).</t>
          <t>A CoAP client MAY repeat a group request using the same Token value and a different Message ID, in which case all servers that received the initial request will again process the repeated request since it appears within a new CoAP message. This is useful in case a client suspects that one or more response(s) to its original request were lost and the client needs to collect more, or even all, responses from group members, even if this comes at the cost of the overhead of certain group members responding twice (once to the original request, and once to the repeated request with different Message ID).</t>
        </section>
        <section anchor="requestresponse-matching-and-distinguishing-responses" numbered="true" toc="default">
          <name>Request/Response Matching and Distinguishing Responses</name>
          <t>A CoAP client can distinguish the origin of multiple server responses by the source IP address of the message containing the CoAP response and/or any other available application-specific source identifiers contained in the CoAP response payload or CoAP response options, such as an application-level unique ID associated with the server. If secure communication is provided with Group OSCORE (see <xref target="chap-oscore" format="default"/>), additional security-related identifiers in the CoAP response enable the client to retrieve the right security material for decrypting each response and authenticating its source.</t>
          <t>While processing a response on the client, the source endpoint of the response is not matched to the destination endpoint of the request, since for a group request these will never match. This is specified in <xref section="8.2" sectionFormat="of" target="RFC7252" format="default"/>, with reference to IP multicast.</t>
          <t>Also, when UDP transport is used, this implies that a server MAY respond from a UDP port number that differs from the destination UDP port number of the request, although a CoAP server normally SHOULD respond from the UDP port number that equals the destination port number of the request -- following the convention for UDP-based protocols.</t>
          <t>In case a single client has sent multiple group requests and concurrent CoAP transactions are ongoing, the responses received by that client are matched to an active request using only the Token value. Due to UDP level multiplexing, the UDP destination port number of the response MUST match to the client endpoint's UDP port number, i.e., to the UDP source port number of the client's request.</t>
        </section>
        <section anchor="sec-token-reuse" numbered="true" toc="default">
          <name>Token Reuse</name>
          <t>For CoAP group requests, there are additional constraints on the reuse of Token values at the client, compared to the unicast case defined in <xref target="RFC7252" format="default"/> and updated by <xref target="RFC9175" format="default"/>. Since for CoAP group requests the number of responses is not bound a priori, the client cannot use the reception of a response as a trigger to "free up" a Token value for reuse.</t>
          <t>Reusing a Token value too early could lead to incorrect response/request matching on the client, and would be a protocol error.  Therefore, the time between reuse of Token values for different group requests MUST be greater than:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
MIN_TOKEN_REUSE_TIME = (NON_LIFETIME + MAX_LATENCY +
                        MAX_SERVER_RESPONSE_DELAY)
]]></artwork>
          <t>where NON_LIFETIME and MAX_LATENCY are defined in <xref section="4.8" sectionFormat="of" target="RFC7252" format="default"/>.  This specification defines MAX_SERVER_RESPONSE_DELAY as was done in <xref target="RFC7390" format="default"/>, that is: the expected maximum response delay over all servers that the client can send a CoAP group request to.  This delay includes the maximum Leisure time period as defined in <xref section="8.2" sectionFormat="of" target="RFC7252" format="default"/>. However, CoAP does not define a time limit for the server response delay. Using the default CoAP parameters, the Token reuse time MUST be greater than 250 seconds plus MAX_SERVER_RESPONSE_DELAY.</t>
          <t>A preferred solution to meet this requirement is to generate a new unique Token for every new group request, such that a Token value is never reused.  If a client has to reuse Token values for some reason, and also MAX_SERVER_RESPONSE_DELAY is unknown, then using MAX_SERVER_RESPONSE_DELAY = 250 seconds is a reasonable guideline. The time between Token reuses is in that case set to a value greater than MIN_TOKEN_REUSE_TIME = 500 seconds.</t>
          <t>When securing CoAP group communication with Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, secure binding between requests and responses is ensured (see <xref target="chap-oscore" format="default"/>). Thus, a client may reuse a Token value after it has been freed up, as discussed above and considering a reuse time greater than MIN_TOKEN_REUSE_TIME. If an alternative security protocol for CoAP group communication is used which does not ensure secure binding between requests and responses, a client MUST follow the Token processing requirements as defined in <xref target="RFC9175" format="default"/>.</t>
          <t>Another method to more easily meet the above constraint is to instantiate multiple CoAP clients at multiple UDP ports on the same host. The Token values only have to be unique within the context of a single CoAP client, so using multiple clients can make it easier to meet the constraint.</t>
        </section>
        <section anchor="sec-request-response-multi" numbered="true" toc="default">
          <name>Client Handling of Multiple Responses With Same Token</name>
          <t>Since a client sending a group request with a Token T will accept multiple responses with the same Token T, it is possible in particular that the same server sends multiple responses with the same Token T back to the client. For example, this server might not implement the optional CoAP message deduplication based on Message ID; or it might be acting out of specification as a malicious, compromised or faulty server.</t>
          <t>When this happens, the client normally processes at the CoAP layer each of those responses to the same request coming from the same server. If the processing of a response is successful, the client delivers this response to the application as usual.</t>
          <t>Then, the application is in a better position to decide what to do, depending on the available context information. For instance, it might accept and process all the responses from the same server, even if they are not Observe notifications (i.e., they do not include an Observe option). Alternatively, the application might accept and process only one of those responses, such as the most recent one from that server, e.g., when this can trigger a change of state within the application.</t>
        </section>
      </section>
      <section anchor="sec-caching" numbered="true" toc="default">
        <name>Caching</name>
        <t>CoAP endpoints that are members of a CoAP group MAY cache responses to a group request as defined in <xref section="5.6" sectionFormat="of" target="RFC7252" format="default"/>. In particular, these same rules apply to determine the set of request options used as "Cache-Key".</t>
        <t>Furthermore, building on what is defined in <xref section="8.2.1" sectionFormat="of" target="RFC7252" format="default"/>:</t>
        <ul spacing="normal">
          <li>A client sending a GET or FETCH group request MAY update a cache with the responses from the servers in the CoAP group. Then, the client uses both cached-still-fresh and new responses as the result of the group request.</li>
          <li>A client sending a GET or FETCH group request MAY use a response received from a server, to satisfy a subsequent sent request intended to that server on the related unicast request URI. In particular, the unicast request URI is obtained by replacing the authority component of the request URI with the transport-layer source address of the cached response message.</li>
          <li>A client MAY revalidate a cached response by making a GET or FETCH request on the related unicast request URI.</li>
        </ul>
        <t>Note that, in the presence of proxies, doing any of the above (optional) unicast requests requires the client to distinguish the different responses to a group request, as well as to distinguish the different origin servers that responded. This in turn requires additional means to provide the client with information about the origin server of each response, e.g., using the forward-proxying method defines in <xref target="I-D.tiloca-core-groupcomm-proxy" format="default"/>.</t>
        <t>The following subsections define the freshness model and validation model to use for cached responses, which update the models defined in Sections <xref target="RFC7252" section="5.6.1" sectionFormat="bare" format="default"/> and <xref target="RFC7252" section="5.6.2" sectionFormat="bare" format="default"/> of <xref target="RFC7252" format="default"/>, respectively.</t>
        <section anchor="sec-caching-freshness" numbered="true" toc="default">
          <name>Freshness Model</name>
          <t>For caching of group communication responses at client endpoints, the same freshness model relying on the Max-Age Option as defined in <xref section="5.6.1" sectionFormat="of" target="RFC7252" format="default"/> applies, and 
the multicast caching rules of <xref section="8.2.1" sectionFormat="of" target="RFC7252" format="default"/> apply except for the one discussed below.</t>
          <t>In <xref section="8.2.1" sectionFormat="of" target="RFC7252" format="default"/> it is stated that, regardless of the presence of cached responses to the group request, the client endpoint will always send out a new group request onto the network because new group members may have joined the group since the last group request to the same group/resource.
That is, a request is never served from cached responses only. This document updates <xref target="RFC7252" format="default"/> by adding the following exception case, where a client endpoint MAY serve a request by using cached responses only, and not send out a new group request onto the network:</t>
          <ul spacing="normal">
            <li>The client knows all current CoAP server group members; and, for each group member, the client's cache currently stores a fresh response.</li>
          </ul>
          <t>How the client in the case above determines the current CoAP server group members is out of scope for this document. It may be, for example, via a group manager server, or by observing group join requests, or observing IGMP/MLD multicast group join messages, etc.</t>
          <t>For caching at proxies, the freshness model defined in <xref target="I-D.tiloca-core-groupcomm-proxy" format="default"/>  can be used.</t>
        </section>
        <section anchor="sec-caching-validation" numbered="true" toc="default">
          <name>Validation Model</name>
          <t>For validation of cached group communication responses at client endpoints, the multicast validation rules in <xref section="8.2.1" sectionFormat="of" target="RFC7252" format="default"/> apply, except for the last paragraph which states "A GET request to a multicast group MUST NOT contain an ETag option". 
This document updates <xref target="RFC7252" format="default"/> by allowing a group request to contain ETag Options as specified below.</t>
          <t>For validation at proxies, the validation model defined in <xref target="I-D.tiloca-core-groupcomm-proxy" format="default"/> can be used.</t>
          <section anchor="etag-option-in-a-group-requestresponse" numbered="true" toc="default">
            <name>ETag Option in a Group Request/Response</name>
            <t>A client endpoint MAY include one or more ETag Options in a GET or FETCH group request to validate one or more stored responses it has cached. 
In case two or more servers in the group have responded to a previous request to the same resource with an identical ETag value, it is the responsibility of the client to handle this case. In particular, if the client 
wishes to validate, using a group request, a response from server 1 with an ETag value N, while it does not wish to validate a response from server 2 with the same ETag value N, there is no way to achieve this.
In such cases of identical ETag values returned by two or more servers, the client, by default, SHOULD NOT include an ETag Option in a group request containing that ETag value.</t>
            <t>A server endpoint MUST process an ETag Option in a GET or FETCH group request in the same way it processes an ETag Option for a unicast request.
A server endpoint that includes an ETag Option in a response to a group request SHOULD construct the ETag Option value in such a way that the value
will be unique to this particular server with a high probability. This can be done, for example, by embedding a compact ID of the server within the ETag value, where the ID is unique (or unique with a high probability) in the scope of the group.</t>
            <t>Note: a legacy CoAP server might treat an ETag Option in a group request as an unrecognized option per Sections <xref target="RFC7252" section="5.4" sectionFormat="bare" format="default"/> and <xref target="RFC7252" section="8.2.1" sectionFormat="bare" format="default"/> of <xref target="RFC7252" format="default"/>, causing it to ignore this (elective) ETag Option regardless of its value, and process the request normally as if that ETag Option was not included.</t>
          </section>
        </section>
      </section>
      <section anchor="uri-path-selection" numbered="true" toc="default">
        <name>URI Path Selection</name>
        <t>The URI Path used in a group request is preferably a path that is known to be supported across all group members. However there are valid use cases where a group request is known to be successful only for a subset of the CoAP group, for example only members of a specific application group, while those group members for which the request is unsuccessful (for example because they are outside the application group) either ignore the group request or respond with an error status code.</t>
      </section>
      <section anchor="port-selection-for-udp-transport" numbered="true" toc="default">
        <name>Port Selection for UDP Transport</name>
        <t>A server that is a member of a CoAP group listens for CoAP request messages on the group's IP multicast address, usually on the CoAP default UDP port number 5683, or another non-default UDP port number if configured. Regardless of the method for selecting the port number, the same port number MUST be used across all CoAP servers that are members of a CoAP group and across all CoAP clients sending group requests to that group.</t>
        <t>One way to create multiple CoAP groups is using different UDP ports with the same IP multicast address, in case the devices' network stack only supports a limited number of multicast address subscriptions. However, it must be taken into account that this incurs additional processing overhead on each CoAP server participating in at least one of these groups: messages to groups that are not of interest to the node are only discarded at the higher transport (UDP) layer instead of directly at the network (IP) layer. Also, a constrained network may be additionally burdened in this case with multicast traffic that is eventually discarded at the UDP layer by most nodes.</t>
        <t>The port number 5684 is reserved for DTLS-secured unicast CoAP and MUST NOT be used for any CoAP group communication.</t>
        <t>For a CoAP server node that supports resource discovery as defined in <xref section="2.4" sectionFormat="of" target="RFC7252" format="default"/>, the default port number 5683 MUST be supported (see <xref section="7.1" sectionFormat="of" target="RFC7252" format="default"/>) for the "All CoAP Nodes" multicast group as detailed in <xref target="sec-transport" format="default"/>.</t>
      </section>
      <section anchor="sec-proxy" numbered="true" toc="default">
        <name>Proxy Operation</name>
        <t>This section defines how proxies operate in a group communication scenario. In particular, <xref target="sec-proxy-forward" format="default"/> defines operations of forward-proxies, while <xref target="sec-proxy-reverse" format="default"/> defines operations of reverse-proxies.
Security operations for a proxy are discussed later in <xref target="chap-proxy-security" format="default"/>.</t>
        <section anchor="sec-proxy-forward" numbered="true" toc="default">
          <name>Forward-Proxies</name>
          <t>CoAP enables a client to request a forward-proxy to process a CoAP request on its behalf, as described in Sections <xref target="RFC7252" section="5.7.2" sectionFormat="bare" format="default"/> and <xref target="RFC7252" section="8.2.2" sectionFormat="bare" format="default"/> of <xref target="RFC7252" format="default"/>.</t>
          <t>When intending to reach a CoAP group through a proxy, the client sends a unicast CoAP group request to the proxy. This request specifies the group URI where the request has to be forwarded to, either as a string in the Proxy-URI Option, or through the Proxy-Scheme Option with the group URI constructed from the usual Uri-* Options. Then, the forward-proxy resolves the group URI to a destination CoAP group, i.e., it sends (e.g., multicasts) the CoAP group request to the group URI, receives the responses and forwards all the individual (unicast) responses back to the client.</t>
          <t>However, there are certain issues and limitations with this approach:</t>
          <ul spacing="normal">
            <li>The CoAP client component that has sent the unicast CoAP group request to the proxy may be expecting only one (unicast) response, as usual for a CoAP unicast request. Instead, it receives multiple (unicast) responses, potentially leading to fault conditions in the component or to discarding any received responses following the first one. This issue may occur even if the application calling the CoAP client component is aware that the forward-proxy is going to forward the CoAP group request to the group URI.</li>
            <li>Each individual CoAP response received by the client will appear to originate (based on its IP source address) from the CoAP Proxy, and not from the server that produced the response.  This makes it impossible for the client to identify the server that produced each response, unless the server identity is contained as a part of the response payload or inside a CoAP option in the response.</li>
            <li>The proxy does not necessarily know how many members there are in the CoAP group or how many group members will actually respond. Also, the proxy does not know for how long to collect responses before it stops forwarding them to the client. A CoAP client that is not using a Proxy might face the same problems in collecting responses to a group request. However, the client itself would typically have application-specific rules or knowledge on how to handle this situation, while an application-agnostic CoAP Proxy would typically not have this knowledge. For example, a CoAP client could monitor incoming responses and use this information to decide how long to continue collecting responses - which is something a proxy cannot do.</li>
          </ul>
          <t>A forward-proxying method using this approach and addressing the issues raised above is defined in <xref target="I-D.tiloca-core-groupcomm-proxy" format="default"/>.</t>
          <t>An alternative solution is for the proxy to collect all the individual (unicast) responses to a CoAP group request and then send back only a single (aggregated) response to the client. However, this solution brings up new issues:</t>
          <ul spacing="normal">
            <li>Like for the approach discussed above, the proxy does not know for how long to collect responses before sending back the aggregated response to the client. Analogous considerations apply to this approach too, both on the client and proxy side.</li>
            <li>There is no default format defined in CoAP for aggregation of multiple responses into a single response. Such a format could be standardized based on, for example, the multipart content-format <xref target="RFC8710" format="default"/>.</li>
          </ul>
          <t>Due to the above issues, it is RECOMMENDED that a CoAP Proxy processes a request to be forwarded to a group URI only if it is explicitly enabled to do so. If such functionality is not explicitly enabled, the default response returned to the client is 5.01 Not Implemented. Furthermore, a proxy SHOULD be explicitly configured (e.g., by allow-listing and/or client authentication) to allow proxied CoAP group requests only from specific client(s).</t>
          <t>The operation of HTTP-to-CoAP proxies for multicast CoAP requests is specified in Sections <xref target="RFC8075" section="8.4" sectionFormat="bare" format="default"/> and <xref target="RFC8075" section="10.1" sectionFormat="bare" format="default"/> of <xref target="RFC8075" format="default"/>. In this case, the "application/http" media type is used to let the proxy return multiple CoAP responses -- each translated to a HTTP response -- back to the HTTP client. Of course, in this case the HTTP client sending a group URI to the proxy needs to be aware that it is going to receive this format, and needs to be able to decode it into the responses of multiple CoAP servers. Also, the IP source address of each CoAP response cannot be determined anymore from the "application/http" response. The HTTP client still identify the CoAP servers by other means such as application-specific information in the response payload.</t>
        </section>
        <section anchor="sec-proxy-reverse" numbered="true" toc="default">
          <name>Reverse-Proxies</name>
          <t>CoAP enables the use of a reverse-proxy, as an endpoint that stands in for one or more other server(s), and satisfies requests on behalf of these, doing any necessary translations (see <xref section="5.7.3" sectionFormat="of" target="RFC7252" format="default"/>).</t>
          <t>In a group communication scenario, a reverse-proxy can rely on its configuration and/or on information in a request from a client, in order to determine that a group request has to be sent to a group of servers over a one-to-many transport such as IP/UDP multicast.</t>
          <t>For example, specific resources on the reverse-proxy could be allocated, each to a specific application group and/or CoAP group. Or alternatively, the application group and/or CoAP group in question could be encoded as URI path segments. The URI path encodings for a reverse-proxy may also use a URI mapping template as described in <xref section="5.4" sectionFormat="of" target="RFC8075" format="default"/>.</t>
          <t>Furthermore, the reverse-proxy can actually stand in for (and thus prevent to directly reach) only the whole set of servers in the group, or also for each of those individual servers (e.g., if acting as firewall).</t>
          <t>For a reverse-proxy that sends a request to a group of servers, the considerations as defined in <xref section="5.7.3" sectionFormat="of" target="RFC7252" format="default"/> hold, with the following additions:</t>
          <ul spacing="normal">
            <li>The three issues and limitations defined in <xref target="sec-proxy-forward" format="default"/> for a forward proxy apply to a reverse-proxy as well, and have to be addressed, e.g., using the signaling method defined in <xref target="I-D.tiloca-core-groupcomm-proxy" format="default"/> or other means.</li>
            <li>A reverse-proxy MAY have preconfigured time duration(s) that are used for the collecting of server responses and forwarding these back to the client. These duration(s) may be set as global configuration or resource-specific configurations. If there is such preconfiguration, then an explicit signaling of the time period in the client's request as defined in <xref target="I-D.tiloca-core-groupcomm-proxy" format="default"/> is not necessarily needed.</li>
            <li>
              <t>A client that is configured to access a reverse-proxy resource (i.e., one that triggers a CoAP group communication request) SHOULD be configured also to handle potentially multiple responses with the same Token value caused by a single request.  </t>
              <t>
That is, the client needs to preserve the Token value used for the request also after the reception of the first response forwarded back by the proxy (see <xref target="sec-request-response-multi" format="default"/>) and keep the request open to potential further responses with this Token. This requirement can be met by a combination of client implementation and proper proxied group communication configuration on the client.</t>
            </li>
            <li>
              <t>A client might re-use a Token value in a valid new request to the reverse-proxy, while the reverse-proxy still has an ongoing group communication request for this client with the same Token value (i.e., its time period for response collection has not ended yet).  </t>
              <t>
If this happens, the reverse-proxy MUST stop the ongoing request and associated response forwarding, it MUST NOT forward the new request to the group of servers, and it MUST send a 4.00 Bad Request error response to the client. The diagnostic payload of the error response SHOULD indicate to the client that the resource is a reverse-proxy resource, and that for this reason immediate Token re-use is not possible.  </t>
              <t>
If the reverse-proxy supports the signalling protocol of <xref target="I-D.tiloca-core-groupcomm-proxy" format="default"/> it can include a Multicast-Signaling Option in the error response to convey the reason for the error in a machine-readable way.</t>
            </li>
          </ul>
          <t>For the operation of HTTP-to-CoAP reverse proxies, see the last paragraph of <xref target="sec-proxy-forward" format="default"/> which applies also to the case of reverse-proxies.</t>
        </section>
      </section>
      <section anchor="sec-congestion" numbered="true" toc="default">
        <name>Congestion Control</name>
        <t>CoAP group requests may result in a multitude of responses from different nodes, potentially causing congestion. Therefore, both the sending of CoAP group requests and the sending of the unicast CoAP responses to these group requests should be conservatively controlled.</t>
        <t>CoAP <xref target="RFC7252" format="default"/> reduces IP multicast-specific congestion risks through the following measures:</t>
        <ul spacing="normal">
          <li>A server may choose not to respond to an IP multicast request if there is nothing useful to respond to, e.g., error or empty response (see <xref section="8.2" sectionFormat="of" target="RFC7252" format="default"/>).</li>
          <li>A server should limit the support for IP multicast requests to specific resources where multicast operation is required (<xref section="11.3" sectionFormat="of" target="RFC7252" format="default"/>).</li>
          <li>An IP multicast request MUST be Non-confirmable (<xref section="8.1" sectionFormat="of" target="RFC7252" format="default"/>).</li>
          <li>A response to an IP multicast request SHOULD be Non-confirmable (<xref section="5.2.3" sectionFormat="of" target="RFC7252" format="default"/>).</li>
          <li>A server does not respond immediately to an IP multicast request and should first wait for a time that is randomly picked within a predetermined time interval called the Leisure (<xref section="8.2" sectionFormat="of" target="RFC7252" format="default"/>).</li>
        </ul>
        <t>This document also defines these measures to be applicable to alternative transports (other than IP multicast), if not defined otherwise.
Additional guidelines to reduce congestion risks defined in this document are as follows:</t>
        <ul spacing="normal">
          <li>A server in a constrained network SHOULD only support group requests for resources that have a small representation (where the representation may be retrieved via a GET, FETCH or POST method in the request). For example, "small" can be defined as a response payload 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 target="sec-6lowpan" format="default"/>) is used on the constrained network.</li>
          <li>A server SHOULD minimize the payload size of a response to a group GET or FETCH request on "/.well-known/core" by using hierarchy in arranging link descriptions for the response. An example of this is given in <xref section="5" sectionFormat="of" target="RFC6690" format="default"/>.</li>
          <li>A server MAY minimize the payload size of a response to a group GET or FETCH request (e.g., on "/.well-known/core") by using CoAP block-wise transfers <xref target="RFC7959" format="default"/> in case the payload is long, returning only a first block of the CoRE Link Format description.  For this reason, a CoAP client sending a CoAP group request to "/.well-known/core" SHOULD support block-wise transfers. See also <xref target="sec-block-wise" format="default"/>.</li>
          <li>A client SHOULD be configured to use CoAP groups with the smallest possible IP multicast scope that fulfills the application needs. As an example, 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.</li>
        </ul>
      </section>
      <section anchor="sec-observe" numbered="true" toc="default">
        <name>Observing Resources</name>
        <t>The CoAP Observe Option <xref target="RFC7641" format="default"/> is a protocol extension of CoAP, that allows a CoAP client to retrieve a representation of a resource and automatically keep this representation up-to-date over a longer period of time. The client gets notified when the representation has changed. <xref target="RFC7641" format="default"/> does not mention whether the Observe Option can be combined with CoAP (multicast) group communication.</t>
        <t>This section updates <xref target="RFC7641" format="default"/> with the use of the Observe Option in a CoAP GET group request, and defines normative behavior for both client and server. Consistent with <xref section="2.4" sectionFormat="of" target="RFC8132" format="default"/>, it is also possible to use the Observe Option in a CoAP FETCH group request.</t>
        <t>Multicast Observe is a useful way to start observing a particular resource on all members of a CoAP group at the same time. Group members that do not have this particular resource or do not allow the GET or FETCH method on it will either respond with an error status -- 4.04 Not Found or 4.05 Method Not Allowed, respectively -- or will silently suppress the response following the rules of <xref target="sec-request-response-suppress" format="default"/>, depending on server-specific configuration.</t>
        <t>A client that sends a group GET or FETCH request with the Observe Option MAY repeat this request using the same Token value and the same Observe Option value, in order to ensure that enough (or all) members of the CoAP group have been reached with the request. This is useful in case a number of group members did not respond to the initial request. The client MAY additionally use the same Message ID in the repeated request to avoid that group members that had already received the initial request would respond again. Note that using the same Message ID in a repeated request will not be helpful in case of loss of a response message, since the server that responded already will consider the repeated request as a duplicate message. On the other hand, if the client uses a different, fresh Message ID in the repeated request, then all the group members that receive this new message will typically respond again, which increases the network load.</t>
        <t>A client that has sent a group GET or FETCH request with the Observe Option MAY follow up by sending a new unicast CON request with the same Token value and same Observe Option value to a particular server, in order to ensure that the particular server receives the request. This is useful in case a specific group member, that was expected to respond to the initial group request, did not respond to the initial request. In this case, the client MUST use a Message ID that differs from the initial group request message.</t>
        <t>Furthermore, consistent with <xref section="3.3.1" sectionFormat="of" target="RFC7641" format="default"/> and following its guidelines, a client MAY at any time send a new group/multicast GET or FETCH request with the same Token value and same Observe Option value as the original request.  This allows the client to verify that it has an up-to-date representation of an observed resource and/or to re-register its interest to observe a resource.</t>
        <t>In the above client behaviors, the Token value is kept identical to the initial request to avoid that a client is included in more than one entry in the list of observers (<xref section="4.1" sectionFormat="of" target="RFC7641" format="default"/>).</t>
        <t>Before repeating a request as specified above, the client SHOULD wait for at least the expected round-trip time plus the Leisure time period defined in <xref section="8.2" sectionFormat="of" target="RFC7252" format="default"/>, to give the server time to respond.</t>
        <t>A server that receives a GET or FETCH request with the Observe Option, for which request processing is successful, SHOULD respond to this request and not suppress the response. If a server adds a client (as a new entry) to the list of observers for a resource due to an Observe request, the server SHOULD respond to this request and SHOULD NOT suppress the response. An exception to the above is the overriding of response suppression according to a CoAP No-Response Option <xref target="RFC7967" format="default"/> specified by the client in the GET or FETCH request (see <xref target="sec-request-response-suppress" format="default"/>).</t>
        <t>A server SHOULD have a mechanism to verify liveness of its observing clients and the continued interest of these clients in receiving the observe notifications. This can be implemented by sending notifications occasionally using a Confirmable message (see <xref section="4.5" sectionFormat="of" target="RFC7641" format="default"/> for details). This requirement overrides the regular behavior of sending Non-confirmable notifications in response to a Non-confirmable request.</t>
        <t>A client can use the unicast cancellation methods of <xref section="3.6" sectionFormat="of" target="RFC7641" format="default"/> and stop the ongoing observation of a particular resource on members of a CoAP group. This can be used to remove specific observed servers, or even all servers in the group (using serial unicast to each known group member). In addition, a client MAY explicitly deregister from all those servers at once, by sending a group/multicast GET or FETCH request that includes the Token value of the observation to be cancelled and includes an Observe Option with the value set to 1 (deregister). In case not all the servers in the CoAP group received this deregistration request, either the unicast cancellation methods can be used at a later point in time or the group/multicast deregistration request MAY be repeated upon receiving another observe response from a server.</t>
        <t>For observing a group of servers through a CoAP-to-CoAP proxy, the limitations stated in <xref target="sec-proxy" format="default"/> apply. The method defined in <xref target="I-D.tiloca-core-groupcomm-proxy" format="default"/> enables group communication including resource observation through proxies and addresses those limitations.</t>
      </section>
      <section anchor="sec-block-wise" numbered="true" toc="default">
        <name>Block-Wise Transfer</name>
        <t><xref section="2.8" sectionFormat="of" target="RFC7959" format="default"/> specifies how a client can use block-wise transfer (Block2 Option) in a multicast GET request to limit the size of the initial response of each server. Consistent with <xref section="2.5" sectionFormat="of" target="RFC8132" format="default"/>, the same can be done with a multicast FETCH request.</t>
        <t>The client has to use unicast for any further request, separately addressing each different server, in order to retrieve more blocks of the resource from that server, if any. Also, a server (member of a targeted CoAP group) that needs to respond to a group request with a particularly large resource can use block-wise transfer (Block2 Option) at its own initiative, to limit the size of the initial response. Again, a client would have to use unicast for any further requests to retrieve more blocks of the resource.</t>
        <t>A solution for group/multicast block-wise transfer using the Block1 Option is not specified in <xref target="RFC7959" format="default"/> nor in the present document. Such a solution would be useful for group FETCH/PUT/POST/PATCH/iPATCH requests, to efficiently distribute a large request payload as multiple blocks to all members of a CoAP group. Multicast usage of Block1 is non-trivial due to potential message loss (leading to missing blocks or missing confirmations), and potential diverging block size preferences of different members of the CoAP group.</t>
        <t><xref target="I-D.ietf-core-new-block" format="default"/> specifies an alternative method for CoAP block-wise transfer. It specifies that "servers MUST ignore multicast requests that contain the Q-Block2 Option".</t>
      </section>
      <section anchor="sec-transport" numbered="true" toc="default">
        <name>Transport Protocols</name>
        <t>In this document UDP, both over IPv4 and IPv6, is considered as the default transport protocol for CoAP group communication.</t>
        <section anchor="sec-udptransport" numbered="true" toc="default">
          <name>UDP/IPv6 Multicast Transport</name>
          <t>CoAP group communication can use UDP over IPv6 as a transport protocol, provided that IPv6 multicast is enabled. IPv6 multicast MAY be supported in a network only for a limited scope. For example, <xref target="sec-rpl" format="default"/> describes the potential limited support of RPL for multicast, depending on how the protocol is configured.</t>
          <t>For a CoAP server node that supports resource discovery as defined in <xref section="2.4" sectionFormat="of" target="RFC7252" format="default"/>, the default port number 5683 MUST be supported as per Sections <xref target="RFC7252" section="7.1" sectionFormat="bare" format="default"/> and <xref target="RFC7252" section="12.8" sectionFormat="bare" format="default"/> of <xref target="RFC7252" format="default"/> for the "All CoAP Nodes" multicast group. An IPv6 CoAP server SHOULD support the "All CoAP Nodes" groups with at least link-local (2), admin-local (4) and site-local (5) scopes. An IPv6 CoAP server on a 6LoWPAN node (see <xref target="sec-6lowpan" format="default"/>) SHOULD also support the realm-local (3) scope.</t>
          <t>Note that a client sending an IPv6 multicast CoAP message to a port number that is not supported by the server will not receive an ICMPv6 Port Unreachable error message from that server, because the server does not send it in this case, per <xref section="2.4" sectionFormat="of" target="RFC4443" format="default"/>.</t>
        </section>
        <section anchor="udpipv4-multicast-transport" numbered="true" toc="default">
          <name>UDP/IPv4 Multicast Transport</name>
          <t>CoAP group communication can use UDP over IPv4 as a transport protocol, provided that IPv4 multicast is enabled. For a CoAP server node that supports resource discovery as defined in <xref section="2.4" sectionFormat="of" target="RFC7252" format="default"/>, the default port number 5683 MUST be supported as per Sections <xref target="RFC7252" section="7.1" sectionFormat="bare" format="default"/> and <xref target="RFC7252" section="12.8" sectionFormat="bare" format="default"/> of <xref target="RFC7252" format="default"/>, for the "All CoAP Nodes" IPv4 multicast group.</t>
          <t>Note that a client sending an IPv4 multicast CoAP message to a port number that is not supported by the server will not receive an ICMP Port Unreachable error message from that server, because the server does not send it in this case, per <xref section="3.2.2" sectionFormat="of" target="RFC1122" format="default"/>.</t>
        </section>
        <section anchor="sec-6lowpan" numbered="true" toc="default">
          <name>6LoWPAN</name>
          <t>In 6LoWPAN <xref target="RFC4944" format="default"/> <xref target="RFC6282" format="default"/> networks, IPv6 packets (up to 1280 bytes) may be fragmented into smaller IEEE 802.15.4 MAC frames (up to 127 bytes), if the packet size requires this. Every 6LoWPAN IPv6 router that receives a multi-fragment packet reassembles the packet and refragments it upon transmission. Since the loss of a single fragment implies the loss of the entire IPv6 packet, the performance in terms of packet loss and throughput of multi-fragment multicast IPv6 packets is typically far worse than the performance of single-fragment IPv6 multicast packets. For this reason, a CoAP request sent over multicast in 6LoWPAN networks SHOULD be sized in such a way that it fits in a single IEEE 802.15.4 MAC frame, if possible.</t>
          <t>On 6LoWPAN networks, multicast groups can be defined with realm-local scope <xref target="RFC7346" format="default"/>. Such a realm-local group is restricted to the local 6LoWPAN network/subnet. In other words, a multicast request to that group does not propagate beyond the 6LoWPAN network segment where the request originated. For example, a multicast discovery request can be sent to the realm-local "All CoAP Nodes" IPv6 multicast group (see <xref target="sec-udptransport" format="default"/>) in order to discover only CoAP servers on the local 6LoWPAN network.</t>
        </section>
        <section anchor="other-transports" numbered="true" toc="default">
          <name>Other Transports</name>
          <t>CoAP group communication may be used over transports other than UDP/IP multicast. For example broadcast, non-UDP multicast, geocast, serial unicast, etc. In such cases the particular considerations for UDP/IP multicast in this document may need to be applied to that particular transport.</t>
          <t>Because it supports unicast only, <xref target="RFC8323" format="default"/> (CoAP over TCP, TLS, and WebSockets) is not in scope as a transport for CoAP group communication.</t>
        </section>
      </section>
      <section anchor="sec-other-protocols" numbered="true" toc="default">
        <name>Interworking with Other Protocols</name>
        <section anchor="mldmldv2igmpigmpv3" numbered="true" toc="default">
          <name>MLD/MLDv2/IGMP/IGMPv3</name>
          <!-- Section 4.2 of {{RFC7390}} has the original content -->

<t>CoAP nodes that are IP hosts (i.e., not IP routers) are generally unaware of the specific IP multicast routing/forwarding protocol
being used in their network.  When such a host needs to join a specific (CoAP) multicast group, it requires a way to signal to IP multicast routers
which IP multicast address(es) it needs to listen to.</t>
          <t>The MLDv2 protocol <xref target="RFC3810" format="default"/> is the standard IPv6 method to achieve this; therefore, this method SHOULD be used by members of a CoAP group to subscribe to its multicast IPv6 address, on IPv6 networks that support it. CoAP server nodes then act in the role of MLD Multicast Address Listener. MLDv2 uses link-local communication between Listeners and IP multicast routers. Constrained IPv6 networks that implement either RPL (see <xref target="sec-rpl" format="default"/>) or MPL (see <xref target="sec-mpl" format="default"/>) typically
do not support MLDv2 as they have their own mechanisms defined for subscribing to multicast groups.</t>
          <t>The IGMPv3 protocol <xref target="RFC3376" format="default"/> is the standard IPv4 method to signal multicast group subscriptions. This SHOULD be used by members of a CoAP group to subscribe to its multicast IPv4 address on IPv4 networks.</t>
          <t>The guidelines from <xref target="RFC6636" format="default"/> on the tuning of MLD for mobile and wireless networks may be useful when implementing MLD in constrained networks.</t>
        </section>
        <section anchor="sec-rpl" numbered="true" toc="default">
          <name>RPL</name>
          <!-- see Section 4.3 of {{RFC7390}} for original content -->

<t>RPL <xref target="RFC6550" format="default"/> is an IPv6 based routing protocol suitable for low-power, lossy networks (LLNs). In such a context, CoAP is often used as an application protocol.</t>
          <t>If only RPL is used in a network for routing and its optional multicast support is disabled, there will be no IP multicast routing available.  Any IPv6 multicast packets in this case will not propagate beyond a single hop (to direct neighbors in the LLN). This implies that any CoAP group request will be delivered to link-local nodes only, for any scope value &gt;= 2 used in the IPv6 destination address.</t>
          <t>RPL supports (see <xref section="12" sectionFormat="of" target="RFC6550" format="default"/>) advertisement of IP multicast destinations using Destination Advertisement Object (DAO) messages and subsequent routing of multicast IPv6 packets based on this.  It requires the RPL mode of operation to be 3 (Storing mode with multicast support).</t>
          <t>In this mode, RPL DAO can be used by a CoAP node that is either an RPL router or RPL Leaf Node, to advertise its CoAP group membership to parent RPL routers. Then, RPL will route any IP multicast CoAP requests over multiple hops to those CoAP servers that are group members.</t>
          <t>The same DAO mechanism can be used to convey CoAP group membership information to an edge router (e.g., 6LBR), in case the edge router is also the root of the RPL Destination-Oriented Directed Acyclic Graph (DODAG). This is useful because the edge router then learns which IP multicast traffic it needs to pass through from the backbone network into the LLN subnet, and which traffic not.  In LLNs, such ingress filtering helps to avoid congestion of the resource-constrained network segment, due to IP multicast traffic from the high-speed backbone IP network.</t>
        </section>
        <section anchor="sec-mpl" numbered="true" toc="default">
          <name>MPL</name>
          <t>The Multicast Protocol for Low-Power and Lossy Networks (MPL) <xref target="RFC7731" format="default"/> can be used for propagation of IPv6 multicast packets throughout a defined network domain, over multiple hops.  MPL is designed to work in LLNs and can operate alone or in combination with RPL. The protocol involves a predefined group of MPL Forwarders to collectively distribute IPv6 multicast packets throughout their MPL Domain. An MPL Forwarder may be associated with multiple MPL Domains at the same time. Non-Forwarders will receive IPv6 multicast packets from one or more of their neighboring Forwarders. Therefore, MPL can be used to propagate a CoAP multicast group request to all group members.</t>
          <t>However, a CoAP multicast request to a group that originated outside of the MPL Domain will not be propagated by MPL - unless an MPL Forwarder is explicitly configured as an ingress point that introduces external multicast packets into the MPL Domain. Such an ingress point could be located on an edge router (e.g., 6LBR). Methods to configure which multicast groups are to be propagated into the MPL Domain could be:</t>
          <ul spacing="normal">
            <li>Manual configuration on each ingress MPL Forwarder.</li>
            <li>MLDv2 protocol, which works only in case all CoAP servers joining a group are in link-local communication range of an ingress MPL Forwarder. This is typically not the case on mesh networks.</li>
            <li>A new/custom protocol to register multicast groups at an ingress MPL Forwarder. This could be for example a CoAP-based protocol offering multicast group subscription features similar to MLDv2.</li>
          </ul>
          <t>For security and performance reasons also other filtering criteria may be defined at an ingress MPL Forwarder. See <xref target="sec-security-considerations-6lowpan-mpl" format="default"/> for more details.</t>
        </section>
      </section>
    </section>
    <section anchor="chap-unsecured-groupcomm" numbered="true" toc="default">
      <name>Unsecured Group Communication</name>
      <t>CoAP group communication can operate in CoAP NoSec (No Security) mode, without using application-layer and transport-layer security mechanisms. The NoSec mode uses the "coap" scheme, and is defined in <xref section="9" sectionFormat="of" target="RFC7252" format="default"/>. The conceptual "NoSec" security group as defined in <xref target="sec-groupdef" format="default"/> is used for unsecured group communication.</t>
      <t>It is NOT RECOMMENDED to use CoAP group communication in NoSec mode, even in case of non-sensitive and non-critical applications.</t>
      <t>Before possibly and exceptionally using the NoSec mode, the security implications in <xref target="chap-security-considerations-nosec-mode" format="default"/> must be very well considered and understood, especially as to the risk and impact of amplification attacks (see <xref target="ssec-amplification" format="default"/>).</t>
    </section>
    <section anchor="chap-oscore" numbered="true" toc="default">
      <name>Secured Group Communication using Group OSCORE</name>
      <t>This section defines how CoAP group communication can be secured. In particular, <xref target="chap-group-oscore" format="default"/> describes how the Group OSCORE security protocol <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> can be used to protect messages exchanged in a CoAP group, while <xref target="chap-sec-group-maintenance" format="default"/> provides guidance on required maintenance operations for OSCORE groups used as security groups.</t>
      <section anchor="chap-group-oscore" numbered="true" toc="default">
        <name>Group OSCORE</name>
        <t>The application-layer protocol Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613" format="default"/> provides end-to-end encryption, integrity and replay protection of CoAP messages exchanged between two CoAP endpoints. These can act both as CoAP Client as well as CoAP Server, and share an OSCORE Security Context used to protect and verify exchanged messages. The use of OSCORE does not affect the URI scheme and OSCORE can therefore be used with any URI scheme defined for CoAP.</t>
        <t>OSCORE uses COSE <xref target="I-D.ietf-cose-rfc8152bis-struct" format="default"/> <xref target="I-D.ietf-cose-rfc8152bis-algs" format="default"/> to perform encryption operations and protect a CoAP message carried in a COSE object, by using an Authenticated Encryption with Associated Data (AEAD) algorithm. In particular, OSCORE takes as input an unprotected CoAP message and transforms it into a protected CoAP message transporting the COSE object.</t>
        <t>OSCORE makes it possible to selectively protect different parts of a CoAP message in different ways, while still allowing intermediaries (e.g., CoAP proxies) to perform their intended functionalities. That is, some message parts are encrypted and integrity protected; other parts are only integrity protected to be accessible to, but not modifiable by, proxies; and some parts are kept as plain content to be both accessible to and modifiable by proxies. Such differences especially concern the CoAP options included in the unprotected message.</t>
        <t>Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> builds on OSCORE, and provides end-to-end security of CoAP messages exchanged between members of an OSCORE group, while fulfilling the same security requirements.</t>
        <t>In particular, Group OSCORE protects CoAP group requests sent by a CoAP client, e.g., over UDP/IP multicast, as well as multiple corresponding CoAP responses sent as (IP) unicast by different CoAP servers. However, the same security material can also be used to protect CoAP requests sent over (IP) unicast to a single CoAP server in the OSCORE group, as well as the corresponding responses.</t>
        <t>Group OSCORE ensures source authentication of all messages exchanged within the OSCORE group, by means of two possible methods.</t>
        <t>The first method, called group mode, relies on digital signatures. That is, sender devices sign their outgoing messages using their own private key, and embed the signature in the protected CoAP message.</t>
        <t>The second method, called pairwise mode, relies on a symmetric key, which is derived from a pairwise shared secret computed from the asymmetric keys of the message sender and recipient. This method is intended for one-to-one messages sent in the group, such as all responses individually sent by servers, as well as requests addressed to an individual server.</t>
        <t>A Group Manager is responsible for managing one or multiple OSCORE groups. In particular, the Group Manager acts as repository of the group members' authentication credentials including the corresponding public keys; manages, renews and provides security material in the group; and handles the join process of new group members.</t>
        <t>As defined in <xref target="I-D.ietf-ace-oscore-gm-admin" format="default"/>, an administrator entity can interact with the Group Manager to create OSCORE groups and specify their configuration (see <xref target="sssec-group-creation" format="default"/>). During the lifetime of the OSCORE group, the administrator can further interact with the Group Manager, in order to possibly update the group configuration and eventually delete the group.</t>
        <t>As recommended in <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, a CoAP endpoint can join an OSCORE group by using the method described in <xref target="I-D.ietf-ace-key-groupcomm-oscore" format="default"/> and based on the ACE framework for Authentication and Authorization in constrained environments <xref target="I-D.ietf-ace-oauth-authz" format="default"/>.</t>
        <t>A CoAP endpoint can discover OSCORE groups and retrieve information to join them through their respective Group Managers by using the method described in <xref target="I-D.tiloca-core-oscore-discovery" format="default"/> and based on the CoRE Resource Directory <xref target="I-D.ietf-core-resource-directory" format="default"/>.</t>
        <t>If security is required, CoAP group communication as described in this specification MUST use Group OSCORE. In particular, a CoAP group as defined in <xref target="sec-groupdef" format="default"/> and using secure group communication is associated with an OSCORE security group, which includes:</t>
        <ul spacing="normal">
          <li>All members of the CoAP group, i.e., the CoAP endpoints configured to receive CoAP group messages sent to the particular group and -- in case of IP multicast transport -- are listening to the group's multicast IP address on the group's UDP port.</li>
          <li>All further CoAP endpoints configured only as CoAP clients, that may send CoAP group requests to the CoAP group.</li>
        </ul>
      </section>
      <section anchor="chap-sec-group-maintenance" numbered="true" toc="default">
        <name>Secure Group Maintenance</name>
        <t>As part of group maintenance operations (see <xref target="sec-group-maintenance" format="default"/>), additional key management operations are required for an OSCORE group, also depending on the security requirements of the application (see <xref target="chap-security-considerations-sec-mode-key-mgmt" format="default"/>). Specifically:</t>
        <ul spacing="normal">
          <li>
            <t>Adding new members to a CoAP group or enabling new client-only endpoints to interact with that group require also that each of such members/endpoints join the corresponding OSCORE group. When this happens, they are securely provided with the security material to use in that OSCORE group.  </t>
            <t>
Applications may need backward security. That is, they may require that, after having joined an OSCORE group, a new group member cannot access messages exchanged in the group prior to its joining, even if it has recorded them.  </t>
            <t>
In such a case, new security material to use in the OSCORE group has first to be generated and distributed to the current members of that group, before new endpoints are also provided with that new security material upon their joining.</t>
          </li>
          <li>
            <t>Removing members from a CoAP group or stopping client-only endpoints from interacting with that group requires removing such members/endpoints from the corresponding OSCORE group. To this end, new security material is generated and securely distributed only to the remaining members of the OSCORE group, together with the list of former members removed from that group.  </t>
            <t>
This ensures forward security in the OSCORE group. That is, it ensures that only the members intended to remain in the OSCORE group are able to continue participating in the secure communications within that group, while the evicted ones are not able to after the distribution and installation of the new security material.  </t>
            <t>
Also, this ensures that the members intended to remain in the OSCORE group are able to confidently assert the group membership of other sender nodes, when receiving protected messages in the OSCORE group after the distribution and installation of the new security material (see <xref section="3.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm" format="default"/>).</t>
          </li>
        </ul>
        <t>The key management operations mentioned above are entrusted to the Group Manager responsible for the OSCORE group <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, and it is RECOMMENDED to perform them as defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore" format="default"/>.</t>
      </section>
      <section anchor="chap-proxy-security" numbered="true" toc="default">
        <name>Proxy Security</name>
        <t>Different solutions may be selected for secure group communication via a proxy depending on proxy type, use case and deployment requirements. In this section the options based on Group OSCORE are listed.</t>
        <t>For a client performing a group communication request via a forward-proxy, end-to-end security should be implemented. The client then creates a group request protected with Group OSCORE and unicasts this to the proxy. The proxy adapts the request from a forward-proxy request to a regular request and multicasts this adapted request to the indicated CoAP group. During the adaptation, the security provided by Group OSCORE persists, in either case of using the group mode or using the pairwise mode. The first leg of communication from client to proxy can optionally be further protected, e.g., by using (D)TLS and/or OSCORE.</t>
        <t>For a client performing a group communication request via a reverse-proxy, either end-to-end-security or hop-by-hop security can be implemented.
The case of end-to-end security is the same as for the forward-proxy case.</t>
        <t>The case of hop-by-hop security is only possible if the proxy can be completely trusted and it is configured as a member of the OSCORE security group(s) that it needs to access, on behalf of clients. The first leg of communication between client and proxy is then protected with a security method for CoAP unicast, such as (D)TLS, OSCORE or a combination of such methods. The second leg between proxy and servers is protected using Group OSCORE. This can be useful in applications where for example the origin client does not implement Group OSCORE, or the group management operations are confined to a particular network domain and the client is outside this domain.</t>
        <t>For all the above cases, more details on using Group OSCORE are defined in <xref target="I-D.tiloca-core-groupcomm-proxy" format="default"/>.</t>
      </section>
    </section>
    <section anchor="chap-security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>This section provides security considerations for CoAP group communication, in general and for the particular transport of IP multicast.</t>
      <section anchor="chap-security-considerations-nosec-mode" numbered="true" toc="default">
        <name>CoAP NoSec Mode</name>
        <t>CoAP group communication, if not protected, is vulnerable to all the attacks mentioned in <xref section="11" sectionFormat="of" target="RFC7252" format="default"/> for IP multicast. Moreover, as also discussed in <xref target="I-D.mattsson-t2trg-amplification-attacks" format="default"/>, the NoSec mode is susceptible to source IP address spoofing, hence amplification attacks are especially feasible to perform and greatly effective in their impact, since a single request can result in multiple responses from multiple servers (see <xref target="ssec-amplification" format="default"/>).</t>
        <t>Therefore, even in case of non-sensitive and non-critical applications, it is generally NOT RECOMMENDED to use CoAP group communication in NoSec mode, also in order to prevent an easy proliferation of high-volume amplification attacks as further discussed in <xref target="ssec-amplification" format="default"/>.</t>
        <t>Exceptionally, early discovery of devices and resources is a typical use case where NoSec mode is applied. In such a situation, the querying devices do not have yet configured any mutual security relations at the time they perform the discovery. Also, high-volume and harmful amplifications can be prevented through appropriate and conservative configurations, since only a few CoAP servers are expected to be configured for responding to the group requests sent for discovery (see <xref target="ssec-amplification" format="default"/>).</t>
        <t>CoAP group communication in NoSec mode SHOULD NOT be deployed for sensitive and mission-critical applications (e.g., health monitoring systems and alarm monitoring systems).</t>
        <t>CoAP group communication without application-layer security SHOULD be deployed only in applications that are non-critical and that do not involve or may have an impact on sensitive data and personal sphere. These include, e.g., read-only temperature sensors deployed in non-sensitive environments, where the client reads out the values but does not use the data to control actuators or to base an important decision on.</t>
      </section>
      <section anchor="chap-security-considerations-sec-mode" numbered="true" toc="default">
        <name>Group OSCORE</name>
        <t>Group OSCORE provides end-to-end application-level security. This has many desirable properties, including maintaining security assurances while forwarding traffic through intermediaries (proxies). Application-level security also tends to more cleanly separate security from the dynamics of group membership (e.g., the problem of distributing security keys across large groups with many members that come and go).</t>
        <t>For sensitive and mission-critical applications, CoAP group communication MUST be protected by using Group OSCORE as specified in <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>. The same security considerations from <xref section="11" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm" format="default"/> hold for this specification.</t>
        <section anchor="chap-security-considerations-sec-mode-key-mgmt" numbered="true" toc="default">
          <name>Group Key Management</name>
          <t>A key management scheme for secure revocation and renewal of group security material, namely group rekeying, is required to be adopted in OSCORE groups. The key management scheme has to preserve forward security in the OSCORE group, as well as backward security if this is required by the application (see <xref target="chap-sec-group-maintenance" format="default"/>). In particular, the key management scheme MUST comply with the functional steps defined in <xref section="3.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm" format="default"/>.</t>
          <t>Group policies should also take into account the time that the key management scheme requires to rekey the group, on one hand, and the expected frequency of group membership changes, i.e., nodes' joining and leaving, on the other hand.</t>
          <t>That is, it may be desirable to not rekey the group upon every single membership change, in case members' joining and leaving are frequent, and at the same time a single group rekeying instance takes a non-negligible time to complete.</t>
          <t>In such a case, the Group Manager may cautiously consider to rekey the group, e.g., after a minimum number of nodes has joined or left the group within a pre-defined time interval, or according to communication patterns with predictable time intervals of network inactivity. This would prevent paralyzing communications in the group, when a slow rekeying scheme is used and frequently invoked.</t>
          <t>At the same, the security implications of delaying the rekeying process have to be carefully considered and understood, before enforcing such group policies.</t>
          <t>In fact, this comes at the cost of not continuously preserving backward and forward security, since group rekeying might not occur upon every single group membership change. That is, most recently joined nodes would have access to the security material used prior to their joining, and thus be able to access past group communications protected with that security material. Similarly, until the group is rekeyed, most recently left nodes would preserve access to group communications protected with the retained security material.</t>
        </section>
        <section anchor="chap-security-considerations-sec-mode-sauth" numbered="true" toc="default">
          <name>Source Authentication</name>
          <t>Both the group mode and the pairwise mode of Group OSCORE ensure source authentication of messages exchanged by CoAP endpoints through CoAP group communication.</t>
          <t>To this end, outgoing messages are either countersigned by the message sender endpoint with its own private key (group mode), or protected with a symmetric key, which is in turn derived using the asymmetric keys of the message sender and recipient (pairwise mode).</t>
          <t>Thus, both modes allow a recipient CoAP endpoint to verify that a message has actually been originated by a specific and identified member of the OSCORE group.</t>
        </section>
        <section anchor="chap-security-considerations-sec-mode-attacks" numbered="true" toc="default">
          <name>Countering Attacks</name>
          <t>As discussed below, Group OSCORE addresses a number of security attacks mentioned in <xref section="11" sectionFormat="of" target="RFC7252" format="default"/>, with particular reference to their execution over IP multicast.</t>
          <ul spacing="normal">
            <li>Since Group OSCORE provides end-to-end confidentiality and integrity of request/response messages, proxies capable of group communication cannot break message protection, and thus cannot act as man-in-the-middle beyond their legitimate duties (see <xref section="11.2" sectionFormat="of" target="RFC7252" format="default"/>). In fact, intermediaries such as proxies are not assumed to have access to the OSCORE Security Context used by group members. Also, with the notable addition of signatures for the group mode, Group OSCORE protects messages using the same procedure as OSCORE (see Sections <xref target="I-D.ietf-core-oscore-groupcomm" section="8" sectionFormat="bare" format="default"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="9" sectionFormat="bare" format="default"/> of <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>), and especially processes CoAP options according to the same classification in U/I/E classes.</li>
            <li>
              <t>Group OSCORE limits the feasibility and impact of amplification attacks, see <xref target="ssec-amplification" format="default"/> of this document and <xref section="11.3" sectionFormat="of" target="RFC7252" format="default"/>.  </t>
              <t>
In fact, upon receiving a group request protected with Group OSCORE in group mode, a server is able to verify whether the request is not a replay and originates from the alleged sender in the OSCORE group, by verifying the signature included in the request using the public key of that sender (see <xref section="8.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm" format="default"/>). Furthermore, as also discussed in <xref section="8" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm" format="default"/>, it is recommended that servers failing to decrypt and verify an incoming message do not send back any error message.  </t>
              <t>
This limits an adversary to leveraging an intercepted group request protected with Group OSCORE, and then altering the source address to be the one of the intended amplification victim.  </t>
              <t>
Furthermore, the adversary needs to consider a group request that specifically targets a resource for which the CoAP servers are configured to respond. While this can be often correctly assumed or inferable from the application context, it is not explicit from the group request itself, since Group OSCORE protects the Uri-Path and Uri-Query CoAP Options conveying the respective components of the target URI.  </t>
              <t>
As a further mitigation against amplification attacks, a server can also rely on the Echo Option for CoAP defined in <xref target="RFC9175" format="default"/> and include it in a response to a group request. By doing so, the server can assert that the alleged sender of the group request (i.e., the CoAP client associated with a certain authentication credential including the corresponding public key) is indeed reachable at the claimed source address, especially if this differs from the one used in previous group requests from the same CoAP client. Although responses including the Echo Option do still result in amplification, this is limited in volume compared to when all servers reply with a full-fledged response.</t>
            </li>
            <li>
              <t>Group OSCORE limits the impact of attacks based on IP spoofing also over IP multicast (see <xref section="11.4" sectionFormat="of" target="RFC7252" format="default"/>). In fact, requests and corresponding responses sent in the OSCORE group can be correctly generated only by legitimate group members.  </t>
              <t>
Within an OSCORE group, the shared symmetric-key security material strictly provides only group-level authentication. However, source authentication of messages is also ensured, both in the group mode by means of signatures (see Sections <xref target="I-D.ietf-core-oscore-groupcomm" section="8.1" sectionFormat="bare" format="default"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="8.3" sectionFormat="bare" format="default"/> of <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>), and in the pairwise mode by using additionally derived pairwise keys (see Sections <xref target="I-D.ietf-core-oscore-groupcomm" section="9.3" sectionFormat="bare" format="default"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="9.5" sectionFormat="bare" format="default"/> of <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>). Thus, recipient endpoints can verify a message to be originated by the alleged, identifiable sender in the OSCORE group.  </t>
              <t>
As noted above, the server may additionally rely on the Echo Option for CoAP defined in <xref target="RFC9175" format="default"/>, in order to verify the aliveness and reachability of the client sending a request from a particular IP address.</t>
            </li>
            <li>Group OSCORE does not require group members to be equipped with a good source of entropy for generating security material (see <xref section="11.6" sectionFormat="of" target="RFC7252" format="default"/>), and thus does not contribute to create an entropy-related attack vector against such (constrained) CoAP endpoints. In particular, the symmetric keys used for message encryption and decryption are derived through the same HMAC-based HKDF scheme used for OSCORE (see <xref section="3.2" sectionFormat="of" target="RFC8613" format="default"/>). Besides, the OSCORE Master Secret used in such derivation is securely generated by the Group Manager responsible for the OSCORE group, and securely provided to the CoAP endpoints when they join the group.</li>
            <li>Group OSCORE prevents to make any single group member a target for subverting security in the whole OSCORE group (see <xref section="11.6" sectionFormat="of" target="RFC7252" format="default"/>), even though all group members share (and can derive) the same symmetric-key security material used in the OSCORE group. In fact, source authentication is always ensured for exchanged CoAP messages, as verifiable to be originated by the alleged, identifiable sender in the OSCORE group. This relies on including a signature computed with a node's individual private key (in the group mode), or on protecting messages with a pairwise symmetric key, which is in turn derived from the asymmetric keys of the sender and recipient CoAP endpoints (in the pairwise mode).</li>
          </ul>
        </section>
      </section>
      <section anchor="ssec-amplification" numbered="true" toc="default">
        <name>Risk of Amplification</name>
        <t><xref section="11.3" sectionFormat="of" target="RFC7252" format="default"/> highlights that CoAP group requests may be used for accidentally or deliberately performing Denial of Service attacks, especially in the form of a high-volume amplification attack, by using all the servers in the CoAP group as attack vectors.</t>
        <t>That is, following a group request sent to a CoAP group, each of the servers in the group may reply with a response which is likely larger in size than the group request. Thus, an attacker sending a single group request may achieve a high amplification factor, i.e., a high ratio between the size of the group request and the total size of the corresponding responses intended to the attack victim.</t>
        <t>Thus, consistently with <xref section="11.3" sectionFormat="of" target="RFC7252" format="default"/>, a server in a CoAP group:</t>
        <ul spacing="normal">
          <li>SHOULD limit the support for CoAP group requests only to the group resources of the application group(s) using that CoAP group;</li>
          <li>SHOULD NOT accept group requests that can not be authenticated in some way;</li>
          <li>SHOULD NOT provide large amplification factors through its responses to a non-authenticated group request, and can possibly rely on CoAP block-wise transfers <xref target="RFC7959" format="default"/> to reduce the amount of amplification.</li>
        </ul>
        <t>Amplifications attacks using CoAP are further discussed in <xref target="I-D.mattsson-t2trg-amplification-attacks" format="default"/>, which also highlights how the amplification factor would become even higher when CoAP group communication is combined with resource observation <xref target="RFC7641" format="default"/>. That is, a single group request may result in multiple notification responses from each of the responding servers, throughout the observation lifetime.</t>
        <t>Thus, consistently with <xref section="7" sectionFormat="of" target="RFC7641" format="default"/>, a server in a CoAP group MUST strictly limit the number of notifications it sends between receiving acknowledgments that confirm the actual interest of the client in continuing the observation.</t>
        <t>Moreover, it is especially easy to perform an amplification attack when the NoSec mode is used. Therefore, even in case of non-sensitive and non-critical applications, it is generally NOT RECOMMENDED to use CoAP group communication in NoSec mode, in order to prevent an easy proliferation of high-volume amplification attacks.</t>
        <t>Exceptions should be carefully limited to use cases and accesses to a group resource that have a specific, narrow and well understood scope, and where only a few CoAP servers (or, ideally, only one) would possibly respond to a group request.</t>
        <t>A relevant exceptional example is a CoAP client performing the discovery of hosts such as a group manager or a Resource Directory <xref target="I-D.ietf-core-resource-directory" format="default"/>, by probing for them through a group request sent to the CoAP group. This early, unprotected step is relevant for a CoAP client that does not know the address of such hosts in advance, and that does not have yet configured a mutual security relation with them. In this kind of deployments, such a discovery procedure does not result in a considerable and harmful amplification, since only the few CoAP servers object of discovery are going to respond to the group request targeting that specific resource. In particular, those hosts can be the only CoAP servers in that specific CoAP group (hence listening for group requests sent to that group), and/or the only CoAP servers explicitly configured to respond to group requests targeting specific group resources.</t>
        <t>With the exception of such particular use cases, group communications MUST be secured using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/>, see <xref target="chap-oscore" format="default"/>. As discussed in <xref target="chap-security-considerations-sec-mode-attacks" format="default"/>, this limits the feasibility and impact of amplification attacks.</t>
      </section>
      <section anchor="replay-of-non-confirmable-messages" numbered="true" toc="default">
        <name>Replay of Non-Confirmable Messages</name>
        <t>Since all requests sent over IP multicast are Non-confirmable, a client might not be able to know if an adversary has actually captured one of its transmitted requests and later re-injected it in the group as a replay to the server nodes. In fact, even if the servers sent back responses to the replayed request, the client would typically not have a valid matching request active anymore so this attack would not accomplish anything in the client.</t>
        <t>If Group OSCORE is used, such a replay attack on the servers is prevented, since a client protects every different request with a different Sequence Number value, which is in turn included as Partial IV in the protected message and takes part in the construction of the AEAD cipher nonce. Thus, a server would be able to detect the replayed request, by checking the conveyed Partial IV against its own replay window in the OSCORE Recipient Context associated with the client.</t>
        <t>This requires a server to have a synchronized, up to date view of the sequence number used by the client. If such synchronization is lost, e.g., due to a reboot, or suspected so, the server should use the challenge-response synchronization method described in Appendix E of <xref target="I-D.ietf-core-oscore-groupcomm" format="default"/> and based on the Echo Option for CoAP defined in <xref target="RFC9175" format="default"/>, in order to (re-)synchronize with the client's sequence number.</t>
      </section>
      <section anchor="use-of-coap-no-response-option" numbered="true" toc="default">
        <name>Use of CoAP No-Response Option</name>
        <t>When CoAP group communication is used in CoAP NoSec (No Security)
mode (see <xref target="chap-unsecured-groupcomm" format="default"/>), the CoAP No-Response Option <xref target="RFC7967" format="default"/> could be misused by a malicious client to evoke as much responses from servers to a group request as possible, by using the value '0' - Interested in all responses. This even overrides the default behavior of a CoAP server to suppress the response in case there is nothing of interest to respond with. Therefore, this option can be used to perform an amplification attack (see <xref target="ssec-amplification" format="default"/>).</t>
        <t>A proposed mitigation is to only allow this option to relax the standard suppression rules for a resource in case the option is sent by an authenticated client. If sent by an unauthenticated client, the option can be used to expand the classes of responses suppressed compared to the default rules but not to reduce the classes of responses suppressed.</t>
      </section>
      <section anchor="sec-security-considerations-6lowpan-mpl" numbered="true" toc="default">
        <name>6LoWPAN and MPL</name>
        <t>In a 6LoWPAN network, a multicast IPv6 packet may be fragmented prior to transmission. A 6LoWPAN Router that forwards a fragmented packet may have a relatively high impact on the occupation of the wireless channel and may locally experience high memory load due to packet buffering. For example, the MPL <xref target="RFC7731" format="default"/> protocol requires an MPL Forwarder to store the packet for a longer duration, to allow multiple forwarding transmissions to neighboring Forwarders. If one or more of the fragments are not received correctly by an MPL Forwarder during its packet reassembly time window, the Forwarder discards all received fragments and at a future point in time it needs to receive again all the packet fragments (this time, possibly from another neighboring MPL Forwarder).</t>
        <t>For these reasons, a fragmented IPv6 multicast packet is a possible attack vector in a Denial of Service (DoS) amplification attack. See <xref target="ssec-amplification" format="default"/> of this document and <xref section="11.3" sectionFormat="of" target="RFC7252" format="default"/> for more details on amplification. To mitigate the risk, applications sending multicast IPv6 requests to 6LoWPAN hosted CoAP servers SHOULD limit the size of the request to avoid 6LoWPAN fragmentation of the request packet. A 6LoWPAN Router or (MPL) multicast forwarder SHOULD deprioritize forwarding for multi-fragment 6LoWPAN multicast packets. 6LoWPAN Border Routers are typical ingress points where multicast traffic enters into a 6LoWPAN network. Specific MPL Forwarders (whether located on a 6LBR or not) may also be configured as ingress points. Any such ingress point SHOULD implement multicast packet filtering to prevent unwanted multicast traffic from entering a 6LoWPAN network from the outside. For example, it could filter out all multicast packets for which there is no known multicast listener on the 6LoWPAN network. See <xref target="sec-other-protocols" format="default"/> for protocols that allow multicast listeners to signal which groups they would like to listen to. As part of multicast packet filtering, the ingress point SHOULD implement a filtering criterium based on the size of the multicast packet. Ingress multicast packets above a defined size may then be dropped or deprioritized.</t>
      </section>
      <section anchor="wi-fi" numbered="true" toc="default">
        <name>Wi-Fi</name>
        <t>In a home automation scenario using Wi-Fi, Wi-Fi security
   should be enabled to prevent rogue nodes from joining.  The Customer
   Premises Equipment (CPE) that enables access to the Internet should
   also have its IP multicast filters set so that it enforces multicast
   scope boundaries to isolate local multicast groups from the rest of
   the Internet (e.g., as per <xref target="RFC6092" format="default"/>).  In addition, the scope of
   IP multicast transmissions and listeners should be site-local (5) or smaller.  For
   site-local scope, the CPE will be an appropriate multicast scope
   boundary point.</t>
      </section>
      <section anchor="monitoring" numbered="true" toc="default">
        <name>Monitoring</name>
        <section anchor="general-monitoring" numbered="true" toc="default">
          <name>General Monitoring</name>
          <t>CoAP group communication can be used to control a set of
   related devices: for example, simultaneously turn on all the lights in a
   room.  This intrinsically exposes the group to some unique
   monitoring risks that devices not in a group
   are not as vulnerable to.  For example, assume an attacker is able to
   physically see a set of lights turn on in a room.  Then the attacker
   can correlate an observed CoAP group communication message to the observed
   coordinated group action -- even if the CoAP message is (partly) encrypted.<br/>
   This will give the attacker side-channel information
   to plan further attacks (e.g., by determining the members of the
   group some network topology information may be deduced).</t>
        </section>
        <section anchor="pervasive-monitoring" numbered="true" toc="default">
          <name>Pervasive Monitoring</name>
          <t>A key additional threat consideration for group communication is
   pervasive monitoring <xref target="RFC7258" format="default"/>.  CoAP group communication solutions that are built on top
   of IP multicast need to pay particular heed to these dangers.  This
   is because IP multicast is easier to intercept compared to IP unicast.  Also, CoAP traffic is typically used for
   the Internet of Things.  This means that CoAP (multicast) group communication may be used for
   the control and monitoring of critical infrastructure (e.g., lights,
   alarms, HVAC, electrical grid, etc.) that may be prime targets for attack.</t>
          <t>For example, an attacker may attempt to record all the CoAP traffic
   going over a smart grid (i.e., networked electrical utility)
   and try to determine critical nodes for further attacks.  For
   example, the source node (controller) sends out CoAP group
   communication messages which easily identifies it as a controller. 
   CoAP multicast traffic is inherently more
   vulnerable compared to unicast, as the same packet may be
   replicated over many more links, leading to a higher probability of
   packet capture by a pervasive monitoring system.</t>
          <t>One mitigation is to restrict the scope of IP multicast to the minimal scope that fulfills the
   application need. See the congestion control recommendations in the last bullet of<br/>
            <xref target="sec-congestion" format="default"/> to minimize the scope. Thus, for example, realm-local IP multicast scope
   is always preferred over site-local scope IP multicast if this fulfills the application needs.</t>
          <t>Even if all CoAP multicast traffic is encrypted/protected,
   an attacker may still attempt to capture this traffic and perform an
   off-line attack in the future.</t>
        </section>
      </section>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC1122" target="https://www.rfc-editor.org/info/rfc1122" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.1122.xml">
          <front>
            <title>Requirements for Internet Hosts - Communication Layers</title>
            <author initials="R." surname="Braden" fullname="R. Braden" role="editor">
              <organization/>
            </author>
            <date year="1989" month="October"/>
            <abstract>
              <t>This RFC is an official specification for the Internet community.  It incorporates by reference, amends, corrects, and supplements the primary protocol standards documents relating to hosts.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="3"/>
          <seriesInfo name="RFC" value="1122"/>
          <seriesInfo name="DOI" value="10.17487/RFC1122"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC3376" target="https://www.rfc-editor.org/info/rfc3376" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3376.xml">
          <front>
            <title>Internet Group Management Protocol, Version 3</title>
            <author initials="B." surname="Cain" fullname="B. Cain">
              <organization/>
            </author>
            <author initials="S." surname="Deering" fullname="S. Deering">
              <organization/>
            </author>
            <author initials="I." surname="Kouvelas" fullname="I. Kouvelas">
              <organization/>
            </author>
            <author initials="B." surname="Fenner" fullname="B. Fenner">
              <organization/>
            </author>
            <author initials="A." surname="Thyagarajan" fullname="A. Thyagarajan">
              <organization/>
            </author>
            <date year="2002" month="October"/>
          </front>
          <seriesInfo name="RFC" value="3376"/>
          <seriesInfo name="DOI" value="10.17487/RFC3376"/>
        </reference>
        <reference anchor="RFC3810" target="https://www.rfc-editor.org/info/rfc3810" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3810.xml">
          <front>
            <title>Multicast Listener Discovery Version 2 (MLDv2) for IPv6</title>
            <author initials="R." surname="Vida" fullname="R. Vida" role="editor">
              <organization/>
            </author>
            <author initials="L." surname="Costa" fullname="L. Costa" role="editor">
              <organization/>
            </author>
            <date year="2004" month="June"/>
            <abstract>
              <t>This document updates RFC 2710, and it specifies Version 2 of the ulticast Listener Discovery Protocol (MLDv2).  MLD is used by an IPv6 router to discover the presence of multicast listeners on directly attached links, and to discover which multicast addresses are of interest to those neighboring nodes.  MLDv2 is designed to be interoperable with MLDv1.  MLDv2 adds the ability for a node to report interest in listening to packets with a particular multicast address only from specific source addresses or from all sources except for specific source addresses.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3810"/>
          <seriesInfo name="DOI" value="10.17487/RFC3810"/>
        </reference>
        <reference anchor="RFC4443" target="https://www.rfc-editor.org/info/rfc4443" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4443.xml">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author initials="A." surname="Conta" fullname="A. Conta">
              <organization/>
            </author>
            <author initials="S." surname="Deering" fullname="S. Deering">
              <organization/>
            </author>
            <author initials="M." surname="Gupta" fullname="M. Gupta" role="editor">
              <organization/>
            </author>
            <date year="2006" month="March"/>
            <abstract>
              <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol).  ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="RFC4944" target="https://www.rfc-editor.org/info/rfc4944" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4944.xml">
          <front>
            <title>Transmission of IPv6 Packets over IEEE 802.15.4 Networks</title>
            <author initials="G." surname="Montenegro" fullname="G. Montenegro">
              <organization/>
            </author>
            <author initials="N." surname="Kushalnagar" fullname="N. Kushalnagar">
              <organization/>
            </author>
            <author initials="J." surname="Hui" fullname="J. Hui">
              <organization/>
            </author>
            <author initials="D." surname="Culler" fullname="D. Culler">
              <organization/>
            </author>
            <date year="2007" month="September"/>
            <abstract>
              <t>This document describes the frame format for transmission of IPv6 packets and the method of forming IPv6 link-local addresses and statelessly autoconfigured addresses on IEEE 802.15.4 networks. Additional specifications include a simple header compression scheme using shared context and provisions for packet delivery in IEEE 802.15.4 meshes.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4944"/>
          <seriesInfo name="DOI" value="10.17487/RFC4944"/>
        </reference>
        <reference anchor="RFC6282" target="https://www.rfc-editor.org/info/rfc6282" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6282.xml">
          <front>
            <title>Compression Format for IPv6 Datagrams over IEEE 802.15.4-Based Networks</title>
            <author initials="J." surname="Hui" fullname="J. Hui" role="editor">
              <organization/>
            </author>
            <author initials="P." surname="Thubert" fullname="P. Thubert">
              <organization/>
            </author>
            <date year="2011" month="September"/>
            <abstract>
              <t>This document updates RFC 4944, "Transmission of IPv6 Packets over IEEE 802.15.4 Networks".  This document specifies an IPv6 header compression format for IPv6 packet delivery in Low Power Wireless Personal Area Networks (6LoWPANs).  The compression format relies on shared context to allow compression of arbitrary prefixes.  How the information is maintained in that shared context is out of scope. This document specifies compression of multicast addresses and a framework for compressing next headers.  UDP header compression is specified within this framework.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6282"/>
          <seriesInfo name="DOI" value="10.17487/RFC6282"/>
        </reference>
        <reference anchor="RFC6690" target="https://www.rfc-editor.org/info/rfc6690" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6690.xml">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author initials="Z." surname="Shelby" fullname="Z. Shelby">
              <organization/>
            </author>
            <date year="2012" month="August"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links.  Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type.  "RESTful" refers to the Representational State Transfer (REST) architecture.  A well-known URI is defined as a default entry point for requesting the links hosted by a server.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7252.xml">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author initials="Z." surname="Shelby" fullname="Z. Shelby">
              <organization/>
            </author>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <date year="2014" month="June"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7641" target="https://www.rfc-editor.org/info/rfc7641" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7641.xml">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </author>
            <date year="2015" month="September"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC7959" target="https://www.rfc-editor.org/info/rfc7959" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7959.xml">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <author initials="Z." surname="Shelby" fullname="Z. Shelby" role="editor">
              <organization/>
            </author>
            <date year="2016" month="August"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks.  Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates.  In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS).  These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
              <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs.  In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers.  Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
              <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations.  Therefore, this specification updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7959"/>
          <seriesInfo name="DOI" value="10.17487/RFC7959"/>
        </reference>
        <reference anchor="RFC8075" target="https://www.rfc-editor.org/info/rfc8075" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8075.xml">
          <front>
            <title>Guidelines for Mapping Implementations: HTTP to the Constrained Application Protocol (CoAP)</title>
            <author initials="A." surname="Castellani" fullname="A. Castellani">
              <organization/>
            </author>
            <author initials="S." surname="Loreto" fullname="S. Loreto">
              <organization/>
            </author>
            <author initials="A." surname="Rahman" fullname="A. Rahman">
              <organization/>
            </author>
            <author initials="T." surname="Fossati" fullname="T. Fossati">
              <organization/>
            </author>
            <author initials="E." surname="Dijk" fullname="E. Dijk">
              <organization/>
            </author>
            <date year="2017" month="February"/>
            <abstract>
              <t>This document provides reference information for implementing a cross-protocol network proxy that performs translation from the HTTP protocol to the Constrained Application Protocol (CoAP).  This will enable an HTTP client to access resources on a CoAP server through the proxy.  This document describes how an HTTP request is mapped to a CoAP request and how a CoAP response is mapped back to an HTTP response.  This includes guidelines for status code, URI, and media type mappings, as well as additional interworking advice.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8075"/>
          <seriesInfo name="DOI" value="10.17487/RFC8075"/>
        </reference>
        <reference anchor="RFC8132" target="https://www.rfc-editor.org/info/rfc8132" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8132.xml">
          <front>
            <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</title>
            <author initials="P." surname="van der Stok" fullname="P. van der Stok">
              <organization/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <author initials="A." surname="Sehgal" fullname="A. Sehgal">
              <organization/>
            </author>
            <date year="2017" month="April"/>
            <abstract>
              <t>The methods defined in RFC 7252 for the Constrained Application Protocol (CoAP) only allow access to a complete resource, not to parts of a resource.  In case of resources with larger or complex data, or in situations where resource continuity is required, replacing or requesting the whole resource is undesirable.  Several applications using CoAP need to access parts of the resources.</t>
              <t>This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH, which are used to access and update parts of a resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8132"/>
          <seriesInfo name="DOI" value="10.17487/RFC8132"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8613" target="https://www.rfc-editor.org/info/rfc8613" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8613.xml">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author initials="G." surname="Selander" fullname="G. Selander">
              <organization/>
            </author>
            <author initials="J." surname="Mattsson" fullname="J. Mattsson">
              <organization/>
            </author>
            <author initials="F." surname="Palombini" fullname="F. Palombini">
              <organization/>
            </author>
            <author initials="L." surname="Seitz" fullname="L. Seitz">
              <organization/>
            </author>
            <date year="2019" month="July"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE).  OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration.  Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC9175" target="https://www.rfc-editor.org/info/rfc9175" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9175.xml">
          <front>
            <title>Constrained Application Protocol (CoAP): Echo, Request-Tag, and Token Processing</title>
            <author initials="C." surname="Amsüss" fullname="C. Amsüss">
              <organization/>
            </author>
            <author initials="J." surname="Preuß Mattsson" fullname="J. Preuß Mattsson">
              <organization/>
            </author>
            <author initials="G." surname="Selander" fullname="G. Selander">
              <organization/>
            </author>
            <date year="2022" month="February"/>
            <abstract>
              <t>This document specifies enhancements to the Constrained Application Protocol (CoAP) that mitigate security issues in particular use cases. The Echo option enables a CoAP server to verify the freshness of a request or to force a client to demonstrate reachability at its claimed network address. The Request-Tag option allows the CoAP server to match block-wise message fragments belonging to the same request. This document updates RFC 7252 with respect to the following: processing requirements for client Tokens, forbidding non-secure reuse of Tokens to ensure response-to-request binding when CoAP is used with a security protocol, and amplification mitigation (where the use of the Echo option is now recommended).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9175"/>
          <seriesInfo name="DOI" value="10.17487/RFC9175"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-oscore-groupcomm.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-oscore-groupcomm-14.txt">
          <front>
            <title>Group OSCORE - Secure Group Communication for CoAP</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuss Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Jiye Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <date month="March" day="7" year="2022"/>
            <abstract>
              <t>   This document defines Group Object Security for Constrained RESTful
   Environments (Group OSCORE), providing end-to-end security of CoAP
   messages exchanged between members of a group, e.g., sent over IP
   multicast.  In particular, the described approach defines how OSCORE
   is used in a group communication setting to provide source
   authentication for CoAP group requests, sent by a client to multiple
   servers, and for protection of the corresponding CoAP responses.
   Group OSCORE also defines a pairwise mode where each member of the
   group can efficiently derive a symmetric pairwise key with any other
   member of the group for pairwise OSCORE communication.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-14"/>
        </reference>
        <reference anchor="I-D.ietf-cose-rfc8152bis-struct" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-cose-rfc8152bis-struct.xml" target="https://www.ietf.org/archive/id/draft-ietf-cose-rfc8152bis-struct-15.txt">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="Jim Schaad">
              <organization>August Cellars</organization>
            </author>
            <date month="February" day="1" year="2021"/>
            <abstract>
              <t>   Concise Binary Object Representation (CBOR) is a data format designed
   for small code size and small message size.  There is a need for the
   ability to have basic security services defined for this data format.
   This document defines the CBOR Object Signing and Encryption (COSE)
   protocol.  This specification describes how to create and process
   signatures, message authentication codes, and encryption using CBOR
   for serialization.  This specification additionally describes how to
   represent cryptographic keys using CBOR.

   This document along with [I-D.ietf-cose-rfc8152bis-algs] obsoletes
   RFC8152.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-rfc8152bis-struct-15"/>
        </reference>
        <reference anchor="I-D.ietf-cose-rfc8152bis-algs" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-cose-rfc8152bis-algs.xml" target="https://www.ietf.org/archive/id/draft-ietf-cose-rfc8152bis-algs-12.txt">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="Jim Schaad">
              <organization>August Cellars</organization>
            </author>
            <date month="September" day="24" year="2020"/>
            <abstract>
              <t>   Concise Binary Object Representation (CBOR) is a data format designed
   for small code size and small message size.  There is a need for the
   ability to have basic security services defined for this data format.
   THis document defines a set of algorithms that can be used with the
   CBOR Object Signing and Encryption (COSE) protocol RFC XXXX.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-rfc8152bis-algs-12"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.tiloca-core-groupcomm-proxy" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.tiloca-core-groupcomm-proxy.xml" target="https://www.ietf.org/archive/id/draft-tiloca-core-groupcomm-proxy-06.txt">
          <front>
            <title>Proxy Operations for CoAP Group Communication</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Esko Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date month="March" day="7" year="2022"/>
            <abstract>
              <t>   This document specifies the operations performed by a proxy, when
   using the Constrained Application Protocol (CoAP) in group
   communication scenarios.  Such a proxy processes a single request
   sent by a client over unicast, and distributes the request over IP
   multicast to a group of servers.  Then, the proxy collects the
   individual responses from those servers and relays those responses
   back to the client, in a way that allows the client to distinguish
   the responses and their origin servers through embedded addressing
   information.  This document updates RFC7252 with respect to caching
   of response messages at proxies.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-groupcomm-proxy-06"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oauth-authz" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ace-oauth-authz.xml" target="https://www.ietf.org/archive/id/draft-ietf-ace-oauth-authz-46.txt">
          <front>
            <title>Authentication and Authorization for Constrained Environments (ACE) using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <author fullname="Goeran Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Erik Wahlstroem">
	 </author>
            <author fullname="Samuel Erdtman">
              <organization>Spotify AB</organization>
            </author>
            <author fullname="Hannes Tschofenig">
              <organization>Arm Ltd.</organization>
            </author>
            <date month="November" day="8" year="2021"/>
            <abstract>
              <t>   This specification defines a framework for authentication and
   authorization in Internet of Things (IoT) environments called ACE-
   OAuth.  The framework is based on a set of building blocks including
   OAuth 2.0 and the Constrained Application Protocol (CoAP), thus
   transforming a well-known and widely used authorization solution into
   a form suitable for IoT devices.  Existing specifications are used
   where possible, but extensions are added and profiles are defined to
   better serve the IoT use cases.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oauth-authz-46"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ace-key-groupcomm-oscore.xml" target="https://www.ietf.org/archive/id/draft-ietf-ace-key-groupcomm-oscore-13.txt">
          <front>
            <title>Key Management for OSCORE Groups in ACE</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Jiye Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date month="March" day="7" year="2022"/>
            <abstract>
              <t>   This document defines an application profile of the ACE framework for
   Authentication and Authorization, to request and provision keying
   material in group communication scenarios that are based on CoAP and
   secured with Group Object Security for Constrained RESTful
   Environments (OSCORE).  This application profile delegates the
   authentication and authorization of Clients that join an OSCORE group
   through a Resource Server acting as Group Manager for that group.
   This application profile leverages protocol-specific transport
   profiles of ACE to achieve communication security, server
   authentication and proof-of-possession for a key owned by the Client
   and bound to an OAuth 2.0 Access Token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-13"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-discovery" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.tiloca-core-oscore-discovery.xml" target="https://www.ietf.org/archive/id/draft-tiloca-core-oscore-discovery-11.txt">
          <front>
            <title>Discovery of OSCORE Groups with the CoRE Resource Directory</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsuess">
	 </author>
            <author fullname="Peter van der Stok">
              <organization>Consultant</organization>
            </author>
            <date month="March" day="7" year="2022"/>
            <abstract>
              <t>   Group communication over the Constrained Application Protocol (CoAP)
   can be secured by means of Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  At deployment time, devices may
   not know the exact security groups to join, the respective Group
   Manager, or other information required to perform the joining
   process.  This document describes how a CoAP endpoint can use
   descriptions and links of resources registered at the CoRE Resource
   Directory to discover security groups and to acquire information for
   joining them through the respective Group Manager.  A given security
   group may protect multiple application groups, which are separately
   announced in the Resource Directory as sets of endpoints sharing a
   pool of resources.  This approach is consistent with, but not limited
   to, the joining of security groups based on the ACE framework for
   Authentication and Authorization in constrained environments.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-oscore-discovery-11"/>
        </reference>
        <reference anchor="I-D.ietf-core-resource-directory" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-resource-directory.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-resource-directory-28.txt">
          <front>
            <title>CoRE Resource Directory</title>
            <author fullname="Christian Amsüss">
	 </author>
            <author fullname="Zach Shelby">
              <organization>ARM</organization>
            </author>
            <author fullname="Michael Koster">
              <organization>SmartThings</organization>
            </author>
            <author fullname="Carsten Bormann">
              <organization>Universitaet Bremen TZI</organization>
            </author>
            <author fullname="Peter van der Stok">
              <organization>consultant</organization>
            </author>
            <date month="March" day="7" year="2021"/>
            <abstract>
              <t>   In many IoT applications, direct discovery of resources is not
   practical due to sleeping nodes, or networks where multicast traffic
   is inefficient.  These problems can be solved by employing an entity
   called a Resource Directory (RD), which contains information about
   resources held on other servers, allowing lookups to be performed for
   those resources.  The input to an RD is composed of links and the
   output is composed of links constructed from the information stored
   in the RD.  This document specifies the web interfaces that an RD
   supports for web servers to discover the RD and to register,
   maintain, lookup and remove information on resources.  Furthermore,
   new target attributes useful in conjunction with an RD are defined.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-resource-directory-28"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oscore-gm-admin" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ace-oscore-gm-admin.xml" target="https://www.ietf.org/archive/id/draft-ietf-ace-oscore-gm-admin-05.txt">
          <front>
            <title>Admin Interface for the OSCORE Group Manager</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Peter van der Stok">
              <organization>Consultant</organization>
            </author>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date month="March" day="7" year="2022"/>
            <abstract>
              <t>   Group communication for CoAP can be secured using Group Object
   Security for Constrained RESTful Environments (Group OSCORE).  A
   Group Manager is responsible to handle the joining of new group
   members, as well as to manage and distribute the group keying
   material.  This document defines a RESTful admin interface at the
   Group Manager, that allows an Administrator entity to create and
   delete OSCORE groups, as well as to retrieve and update their
   configuration.  The ACE framework for Authentication and
   Authorization is used to enforce authentication and authorization of
   the Administrator at the Group Manager.  Protocol-specific transport
   profiles of ACE are used to achieve communication security, proof-of-
   possession and server authentication.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oscore-gm-admin-05"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pubsub" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-coap-pubsub.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-coap-pubsub-09.txt">
          <front>
            <title>Publish-Subscribe Broker for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Michael Koster">
              <organization>SmartThings</organization>
            </author>
            <author fullname="Ari Keranen">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Jaime Jimenez">
              <organization>Ericsson</organization>
            </author>
            <date month="September" day="30" year="2019"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP), and related extensions
   are intended to support machine-to-machine communication in systems
   where one or more nodes are resource constrained, in particular for
   low power wireless sensor networks.  This document defines a publish-
   subscribe Broker for CoAP that extends the capabilities of CoAP for
   supporting nodes with long breaks in connectivity and/or up-time.

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-09"/>
        </reference>
        <reference anchor="I-D.ietf-core-new-block" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-new-block.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-new-block-14.txt">
          <front>
            <title>Constrained Application Protocol (CoAP) Block-Wise Transfer Options Supporting Robust Transmission</title>
            <author fullname="Mohamed Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Jon Shallow">
	 </author>
            <date month="May" day="26" year="2021"/>
            <abstract>
              <t>   This document specifies alternative Constrained Application Protocol
   (CoAP) Block-Wise transfer options: Q-Block1 and Q-Block2 Options.

   These options are similar to, but distinct from, the CoAP Block1 and
   Block2 Options defined in RFC 7959.  Q-Block1 and Q-Block2 Options
   are not intended to replace Block1 and Block2 Options, but rather
   have the goal of supporting Non-confirmable messages for large
   amounts of data with fewer packet interchanges.  Also, the Q-Block1
   and Q-Block2 Options support faster recovery should any of the blocks
   get lost in transmission.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-new-block-14"/>
        </reference>
        <reference anchor="I-D.mattsson-t2trg-amplification-attacks" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.mattsson-t2trg-amplification-attacks.xml" target="https://www.ietf.org/archive/id/draft-mattsson-t2trg-amplification-attacks-00.txt">
          <front>
            <title>Amplification Attacks Using the Constrained Application Protocol (CoAP)</title>
            <author fullname="John Preuß Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Christian Amsüss">
              <organization>Energy Harvesting Solutions</organization>
            </author>
            <date month="February" day="11" year="2022"/>
            <abstract>
              <t>   Protecting Internet of Things (IoT) devices against attacks is not
   enough.  IoT deployments need to make sure that they are not used for
   Distributed Denial-of-Service (DDoS) attacks.  DDoS attacks are
   typically done with compromised devices or with amplification attacks
   using a spoofed source address.  This document gives examples of
   different theoretical amplification attacks using the Constrained
   Application Protocol (CoAP).  The goal with this document is to raise
   awareness and to motivate generic and protocol-specific
   recommendations on the usage of CoAP.  Some of the discussed attacks
   can be mitigated by not using NoSec or by using the Echo option.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mattsson-t2trg-amplification-attacks-00"/>
        </reference>
        <reference anchor="RFC6092" target="https://www.rfc-editor.org/info/rfc6092" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6092.xml">
          <front>
            <title>Recommended Simple Security Capabilities in Customer Premises Equipment (CPE) for Providing Residential IPv6 Internet Service</title>
            <author initials="J." surname="Woodyatt" fullname="J. Woodyatt" role="editor">
              <organization/>
            </author>
            <date year="2011" month="January"/>
            <abstract>
              <t>This document identifies a set of recommendations for the makers of devices and describes how to provide for "simple security" capabilities at the perimeter of local-area IPv6 networks in Internet-enabled homes and small offices.  This document is not  an Internet Standards Track specification; it is published for  informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6092"/>
          <seriesInfo name="DOI" value="10.17487/RFC6092"/>
        </reference>
        <reference anchor="RFC6550" target="https://www.rfc-editor.org/info/rfc6550" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6550.xml">
          <front>
            <title>RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks</title>
            <author initials="T." surname="Winter" fullname="T. Winter" role="editor">
              <organization/>
            </author>
            <author initials="P." surname="Thubert" fullname="P. Thubert" role="editor">
              <organization/>
            </author>
            <author initials="A." surname="Brandt" fullname="A. Brandt">
              <organization/>
            </author>
            <author initials="J." surname="Hui" fullname="J. Hui">
              <organization/>
            </author>
            <author initials="R." surname="Kelsey" fullname="R. Kelsey">
              <organization/>
            </author>
            <author initials="P." surname="Levis" fullname="P. Levis">
              <organization/>
            </author>
            <author initials="K." surname="Pister" fullname="K. Pister">
              <organization/>
            </author>
            <author initials="R." surname="Struik" fullname="R. Struik">
              <organization/>
            </author>
            <author initials="JP." surname="Vasseur" fullname="JP. Vasseur">
              <organization/>
            </author>
            <author initials="R." surname="Alexander" fullname="R. Alexander">
              <organization/>
            </author>
            <date year="2012" month="March"/>
            <abstract>
              <t>Low-Power and Lossy Networks (LLNs) are a class of network in which both the routers and their interconnect are constrained.  LLN routers typically operate with constraints on processing power, memory, and energy (battery power).  Their interconnects are characterized by high loss rates, low data rates, and instability.  LLNs are comprised of anything from a few dozen to thousands of routers.  Supported traffic flows include point-to-point (between devices inside the LLN), point-to-multipoint (from a central control point to a subset of devices inside the LLN), and multipoint-to-point (from devices inside the LLN towards a central control point).  This document specifies the IPv6 Routing Protocol for Low-Power and Lossy Networks (RPL), which provides a mechanism whereby multipoint-to-point traffic from devices inside the LLN towards a central control point as well as point-to-multipoint traffic from the central control point to the devices inside the LLN are supported.  Support for point-to-point traffic is also available.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6550"/>
          <seriesInfo name="DOI" value="10.17487/RFC6550"/>
        </reference>
        <reference anchor="RFC6636" target="https://www.rfc-editor.org/info/rfc6636" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6636.xml">
          <front>
            <title>Tuning the Behavior of the Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) for Routers in Mobile and Wireless Networks</title>
            <author initials="H." surname="Asaeda" fullname="H. Asaeda">
              <organization/>
            </author>
            <author initials="H." surname="Liu" fullname="H. Liu">
              <organization/>
            </author>
            <author initials="Q." surname="Wu" fullname="Q. Wu">
              <organization/>
            </author>
            <date year="2012" month="May"/>
            <abstract>
              <t>The Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) are the protocols used by hosts and multicast routers to exchange their IP multicast group memberships with each other. This document describes ways to achieve IGMPv3 and MLDv2 protocol optimization for mobility and aims to become a guideline for the tuning of IGMPv3/MLDv2 Queries, timers, and counter values.  This  document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6636"/>
          <seriesInfo name="DOI" value="10.17487/RFC6636"/>
        </reference>
        <reference anchor="RFC7258" target="https://www.rfc-editor.org/info/rfc7258" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7258.xml">
          <front>
            <title>Pervasive Monitoring Is an Attack</title>
            <author initials="S." surname="Farrell" fullname="S. Farrell">
              <organization/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig">
              <organization/>
            </author>
            <date year="2014" month="May"/>
            <abstract>
              <t>Pervasive monitoring is a technical attack that should be mitigated in the design of IETF protocols, where possible.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="188"/>
          <seriesInfo name="RFC" value="7258"/>
          <seriesInfo name="DOI" value="10.17487/RFC7258"/>
        </reference>
        <reference anchor="RFC7346" target="https://www.rfc-editor.org/info/rfc7346" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7346.xml">
          <front>
            <title>IPv6 Multicast Address Scopes</title>
            <author initials="R." surname="Droms" fullname="R. Droms">
              <organization/>
            </author>
            <date year="2014" month="August"/>
            <abstract>
              <t>This document updates the definitions of IPv6 multicast scopes and therefore updates RFCs 4007 and 4291.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7346"/>
          <seriesInfo name="DOI" value="10.17487/RFC7346"/>
        </reference>
        <reference anchor="RFC7390" target="https://www.rfc-editor.org/info/rfc7390" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7390.xml">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author initials="A." surname="Rahman" fullname="A. Rahman" role="editor">
              <organization/>
            </author>
            <author initials="E." surname="Dijk" fullname="E. Dijk" role="editor">
              <organization/>
            </author>
            <date year="2014" month="October"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for constrained devices and constrained networks. It is anticipated that constrained devices will 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 specification defines how CoAP should be used in a group communication context.  An approach for using CoAP on top of IP multicast is detailed based on existing CoAP functionality as well as new features introduced in this specification.  Also, various use cases and corresponding protocol flows are provided to illustrate important concepts.  Finally, guidance is provided for deployment in various network topologies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7390"/>
          <seriesInfo name="DOI" value="10.17487/RFC7390"/>
        </reference>
        <reference anchor="RFC7731" target="https://www.rfc-editor.org/info/rfc7731" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7731.xml">
          <front>
            <title>Multicast Protocol for Low-Power and Lossy Networks (MPL)</title>
            <author initials="J." surname="Hui" fullname="J. Hui">
              <organization/>
            </author>
            <author initials="R." surname="Kelsey" fullname="R. Kelsey">
              <organization/>
            </author>
            <date year="2016" month="February"/>
            <abstract>
              <t>This document specifies the Multicast Protocol for Low-Power and Lossy Networks (MPL), which provides IPv6 multicast forwarding in constrained networks.  MPL avoids the need to construct or maintain any multicast forwarding topology, disseminating messages to all MPL Forwarders in an MPL Domain.</t>
              <t>MPL has two modes of operation.  One mode uses the Trickle algorithm to manage control-plane and data-plane message transmissions and is applicable for deployments with few multicast sources.  The other mode uses classic flooding.  By providing both modes and parameterization of the Trickle algorithm, an MPL implementation can be used in a variety of multicast deployments and can trade between dissemination latency and transmission efficiency.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7731"/>
          <seriesInfo name="DOI" value="10.17487/RFC7731"/>
        </reference>
        <reference anchor="RFC7967" target="https://www.rfc-editor.org/info/rfc7967" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7967.xml">
          <front>
            <title>Constrained Application Protocol (CoAP) Option for No Server Response</title>
            <author initials="A." surname="Bhattacharyya" fullname="A. Bhattacharyya">
              <organization/>
            </author>
            <author initials="S." surname="Bandyopadhyay" fullname="S. Bandyopadhyay">
              <organization/>
            </author>
            <author initials="A." surname="Pal" fullname="A. Pal">
              <organization/>
            </author>
            <author initials="T." surname="Bose" fullname="T. Bose">
              <organization/>
            </author>
            <date year="2016" month="August"/>
            <abstract>
              <t>There can be machine-to-machine (M2M) scenarios where server responses to client requests are redundant.  This kind of open-loop exchange (with no response path from the server to the client) may be desired to minimize resource consumption in constrained systems while updating many resources simultaneously or performing high-frequency updates. CoAP already provides Non-confirmable (NON) messages that are not acknowledged by the recipient.  However, the request/response semantics still require the server to respond with a status code indicating "the result of the attempt to       understand and satisfy the request", per RFC 7252.</t>
              <t>This specification introduces a CoAP option called 'No-Response'. Using this option, the client can explicitly express to the server its disinterest in all responses against the particular request. This option also provides granular control to enable expression of disinterest to a particular response class or a combination of response classes.  The server MAY decide to suppress the response by not transmitting it back to the client according to the value of the No-Response option in the request.  This option may be effective for both unicast and multicast requests.  This document also discusses a few examples of applications that benefit from this option.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7967"/>
          <seriesInfo name="DOI" value="10.17487/RFC7967"/>
        </reference>
        <reference anchor="RFC8323" target="https://www.rfc-editor.org/info/rfc8323" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8323.xml">
          <front>
            <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <author initials="S." surname="Lemay" fullname="S. Lemay">
              <organization/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig">
              <organization/>
            </author>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </author>
            <author initials="B." surname="Silverajan" fullname="B. Silverajan">
              <organization/>
            </author>
            <author initials="B." surname="Raymor" fullname="B. Raymor" role="editor">
              <organization/>
            </author>
            <date year="2018" month="February"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP), although inspired by HTTP, was designed to use UDP instead of TCP.  The message layer of CoAP over UDP includes support for reliable delivery, simple congestion control, and flow control.</t>
              <t>Some environments benefit from the availability of CoAP carried over reliable transports such as TCP or Transport Layer Security (TLS). This document outlines the changes required to use CoAP over TCP, TLS, and WebSockets transports.  It also formally updates RFC 7641 for use with these transports and RFC 7959 to enable the use of larger messages over a reliable transport.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8323"/>
          <seriesInfo name="DOI" value="10.17487/RFC8323"/>
        </reference>
        <reference anchor="RFC8710" target="https://www.rfc-editor.org/info/rfc8710" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8710.xml">
          <front>
            <title>Multipart Content-Format for the Constrained Application Protocol (CoAP)</title>
            <author initials="T." surname="Fossati" fullname="T. Fossati">
              <organization/>
            </author>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <date year="2020" month="February"/>
            <abstract>
              <t>This memo defines application/multipart-core, an application-independent media type that can be used to combine representations of zero or more different media types (each with a Constrained Application Protocol (CoAP) Content-Format identifier) into a single representation, with minimal framing overhead.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8710"/>
          <seriesInfo name="DOI" value="10.17487/RFC8710"/>
        </reference>
        <reference anchor="Californium" target="https://github.com/eclipse/californium/tree/2.0.x/californium-core/src/main/java/org/eclipse/californium/core">
          <front>
            <title>Eclipse Californium</title>
            <author>
              <organization>Eclipse Foundation</organization>
            </author>
            <date year="2019" month="March"/>
          </front>
        </reference>
        <reference anchor="Go-OCF" target="https://github.com/go-ocf/go-coap">
          <front>
            <title>Implementation of CoAP Server &amp; Client in Go</title>
            <author>
              <organization>Open Connectivity Foundation (OCF)</organization>
            </author>
            <date year="2019" month="March"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="appendix-usecases" numbered="true" toc="default">
      <name>Use Cases</name>
      <t>To illustrate where and how CoAP-based group communication can be used, this section summarizes the most common use cases. These use cases include both secured and non-secured CoAP usage. Each subsection below covers one particular category of use cases for CoRE. Within each category, a use case may cover multiple application areas such as home IoT, commercial building IoT (sensing and control), industrial IoT/control, or environmental sensing.</t>
      <section anchor="discovery" numbered="true" toc="default">
        <name>Discovery</name>
        <t>Discovery of physical devices in a network, or discovery of information entities hosted on network devices, are operations that are usually required in a system during the phases of setup or (re)configuration. When a discovery use case involves devices that need to interact without having been configured previously with a common security context, unsecured CoAP communication is typically used. Discovery may involve a request to a directory server, which provides services to aid clients in the discovery process. One particular type of directory server is the CoRE Resource Directory <xref target="I-D.ietf-core-resource-directory" format="default"/>; and there may be other types of directories that can be used with CoAP.</t>
        <section anchor="sec-uc-dd" numbered="true" toc="default">
          <name>Distributed Device Discovery</name>
          <t>Device discovery is the discovery and identification of networked devices -- optionally only devices of a particular class, type, model, or brand. Group communication is used for distributed device discovery, if a central directory server is not used. Typically in distributed device discovery, a multicast request is sent to a particular address (or address range) and multicast scope of interest, and any devices configured to be discoverable will respond back. For the alternative solution of centralized device discovery a central directory server is accessed through unicast, in which case group communication is not needed. This requires that the address of the central directory is either preconfigured in each device or configured during operation using a protocol.</t>
          <t>In CoAP, device discovery can be implemented by CoAP resource discovery requesting (GET) a particular resource that the sought device class, type, model or brand is known to respond to. It can also be implemented using CoAP resource discovery (<xref section="7" sectionFormat="of" target="RFC7252" format="default"/>) and the CoAP query interface defined in <xref section="4" sectionFormat="of" target="RFC6690" format="default"/> to find these particular resources. Also, a multicast GET request to /.well-known/core can be used to discover all CoAP devices.</t>
        </section>
        <section anchor="sec-uc-sd" numbered="true" toc="default">
          <name>Distributed Service Discovery</name>
          <t>Service discovery is the discovery and identification of particular services hosted on network devices. Services can be identified by one or more parameters such as ID, name, protocol, version and/or type. Distributed service discovery involves group communication to reach individual devices hosting a particular service; with a central directory server not being used.</t>
          <t>In CoAP, services are represented as resources and service discovery is implemented using resource discovery (<xref section="7" sectionFormat="of" target="RFC7252" format="default"/>) and the CoAP query interface defined in <xref section="4" sectionFormat="of" target="RFC6690" format="default"/>.</t>
        </section>
        <section anchor="sec-uc-dirdiscovery" numbered="true" toc="default">
          <name>Directory Discovery</name>
          <t>This use case is a specific sub-case of Distributed Service Discovery (<xref target="sec-uc-sd" format="default"/>), in which a device needs to identify the location of a Directory on the network to which it
can e.g., register its own offered services, or to which it can perform queries to identify and locate other devices/services it needs to access on
the network. <xref section="3.3" sectionFormat="of" target="RFC7390" format="default"/> showed an example of discovering a CoRE Resource Directory using CoAP group communication. As defined in <xref target="I-D.ietf-core-resource-directory" format="default"/>, a resource directory is a web entity that stores information about web resources and implements REST interfaces for registration and lookup of those resources. For example, a device can register itself to a resource directory to let it be found by other devices and/or applications.</t>
        </section>
      </section>
      <section anchor="operational-phase" numbered="true" toc="default">
        <name>Operational Phase</name>
        <t>Operational phase use cases describe those operations that occur most frequently in a networked system, during its operational lifetime and regular operation. Regular usage is when the applications on networked devices perform the tasks they were designed for and exchange of application-related data using group communication occurs. Processes like system reconfiguration, group changes, system/device setup, extra group security changes, etc. are not part of regular operation.</t>
        <section anchor="actuator-group-control" numbered="true" toc="default">
          <name>Actuator Group Control</name>
          <t>Group communication can be beneficial to control actuators that need to act in synchrony, as a group, with strict timing (latency) requirements. Examples are office lighting, stage lighting, street lighting, or audio alert/Public Address systems. Sections <xref target="RFC7390" section="3.4" sectionFormat="bare" format="default"/> and <xref target="RFC7390" section="3.5" sectionFormat="bare" format="default"/> of <xref target="RFC7390" format="default"/> showed examples of lighting control of a group of 6LoWPAN-connected lights.</t>
        </section>
        <section anchor="device-group-status-request" numbered="true" toc="default">
          <name>Device Group Status Request</name>
          <t>To properly monitor the status of systems, there may be a need for ad-hoc, unplanned status updates. Group communication can be used to quickly send out a request to a (potentially large) number of devices for specific information. Each device then responds back with the requested data. Those devices that did not respond to the request can optionally be polled again via reliable unicast communication to complete the dataset. The device group may be defined e.g., as "all temperature sensors on floor 3", or "all lights in wing B". For example, it could be a status request for device temperature, most recent sensor event detected, firmware version, network load, and/or battery level.</t>
        </section>
        <section anchor="network-wide-query" numbered="true" toc="default">
          <name>Network-wide Query</name>
          <t>In some cases a whole network or subnet of multiple IP devices needs to be queried for status or other information. This is similar to the previous use case except that the device group is not defined in terms of its function/type but in terms of its network location. Technically this is also similar to distributed service discovery (<xref target="sec-uc-sd" format="default"/>) where a query is processed by all devices on a network - except that the query is not about services offered by the device, but rather specific operational data is requested.</t>
        </section>
        <section anchor="network-wide-group-notification" numbered="true" toc="default">
          <name>Network-wide / Group Notification</name>
          <t>In some cases a whole network, or subnet of multiple IP devices, or a specific target group needs to be notified of a status change or other information. This is similar to the previous two use cases except that the recipients are not expected to respond with some information. Unreliable notification can be acceptable in some use cases, in which a recipient does not respond with a confirmation of having received the notification. In such a case, the receiving CoAP server does not have to create a CoAP response. If the sender needs confirmation of reception, the CoAP servers can be configured for that resource to respond with a 2.xx success status after processing a notification request successfully.</t>
        </section>
      </section>
      <section anchor="software-update" numbered="true" toc="default">
        <name>Software Update</name>
        <t>Group communication can be useful to efficiently distribute new software (firmware, image, application, etc.) to a group of multiple devices. In this case, the group is defined in terms of device type: all devices in the target group are known to be capable of installing and running the new software. The software is distributed as a series of smaller blocks that are collected by all devices and stored in memory. All devices in the target group are usually responsible for integrity verification of the received software; which can be done per-block or for the entire software image once all blocks have been received. Due to the inherent unreliability of CoAP multicast, there needs to be a backup mechanism (e.g., implemented using CoAP unicast) by which a device can individually request missing blocks of a whole software image/entity. Prior to a multicast software update, the group of recipients can be separately notified that there is new software available and coming, using the above network-wide or group notification.</t>
      </section>
    </section>
    <section anchor="sec-examples-exchanges" numbered="true" toc="default">
      <name>Examples of Message Exchanges</name>
      <t>This section provides examples of different message exchanges when CoAP is used with group communication. The examples consider:</t>
      <ul spacing="normal">
        <li>A client with address ADDR_CLIENT and port number PORT_CLIENT.</li>
        <li>A CoAP group associated with the IP multicast address ADDR_GRP and port number PORT_GRP.</li>
        <li>An application group "gp1" associated with the CoAP group above.</li>
        <li>Three servers A, B and C, all of which are members of the CoAP group above and of the application group "gp1". Each server X (with X equal to A, B or C): listens to its own address ADDR_X and port number PORT_X; and listens to the address ADDR_GRP and port number PORT_GRP. For each server its PORT_X may be different from PORT_GRP or may be equal to it, in general.</li>
      </ul>
      <t>In <xref target="fig-exchange-example" format="default"/>, the client sends a Non-confirmable GET request to the CoAP group, targeting the resource "temperature" in the application group "gp1". All servers reply with a 2.05 Content response, although the response from server B is lost. As source port number of their response, servers A and B use the destination port number of the request, i.e, PORT_GRP. Instead, server C uses its own port number PORT_C.</t>
      <figure anchor="fig-exchange-example">
        <name>Example of Non-confirmable group request, followed by Non-confirmable Responses</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Client              A  B  C
   |                |  |  |
   |  GET           |  |  |
   +-------+------->|  |  |  Source: ADDR_CLIENT:PORT_CLIENT
   |        \       |  |  |  Destination: ADDR_GRP:PORT_GRP
   |         `.------->|  |  Header: GET (T=NON, Code=0.01, MID=0x7d41)
   |           `.   |  |  |  Token: 0x86
   |             `------->|  Uri-Path: "gp"
   |                |  |  |  Uri-Path: "gp1"
   |                |  |  |  Uri-Path: "temperature"
   |                |  |  |
   |<---------------+  |  | Source: ADDR_A:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x60b1)
   |                |  |  | Token: 0x86
   |                |  |  | Payload: "22.3 C"
   |                |  |  |   
   |   X---------------+  | Source: ADDR_B:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x01a0)
   |                |  |  | Token: 0x86
   |                |  |  | Payload: "20.9 C"
   |                |  |  |
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x952a)
   |                |  |  | Token: 0x86
   |                |  |  | Payload: "21.0 C"
   |                |  |  |
]]></artwork>
      </figure>
      <t>In <xref target="fig-exchange-example-observe" format="default"/>, the client sends a Non-confirmable GET request to the CoAP group, targeting and requesting to observe the resource "temperature" in the application group "gp1". All servers reply with a 2.05 Content notification response. As source port number of their response, servers A and B use the destination port number of the request, i.e, PORT_GRP. Instead, server C uses its own port number PORT_C. Some time later, all servers send a 2.05 Content notification response, with payload the new representation of the "temperature" resource.</t>
      <figure anchor="fig-exchange-example-observe">
        <name>Example of Non-confirmable Observe group request, followed by Non-confirmable Responses as Observe notifications</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Client              A  B  C
   |                |  |  |
   |  GET           |  |  |
   +-------+------->|  |  |  Source: ADDR_CLIENT:PORT_CLIENT
   |        \       |  |  |  Destination: ADDR_GRP:PORT_GRP
   |         `.------->|  |  Header: GET (T=NON, Code=0.01, MID=0x7d41)
   |           `.   |  |  |  Token: 0x86
   |             `------->|  Observe: 0 (register)
   |                |  |  |  Uri-Path: "gp"
   |                |  |  |  Uri-Path: "gp1"
   |                |  |  |  Uri-Path: "temperature"
   |                |  |  |
   |<---------------+  |  | Source: ADDR_A:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x60b1)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 3
   |                |  |  | Payload: "22.3 C"
   |                |  |  |   
   |<------------------+  | Source: ADDR_B:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x01a0)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 13
   |                |  |  | Payload: "20.9 C"
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x952a)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 23
   |                |  |  | Payload: "21.0 C"
   |                |  |  |
   
   // The temperature changes ...
   
   |                |  |  |
   |<---------------+  |  | Source: ADDR_A:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x60b2)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 7
   |                |  |  | Payload: "32.3 C"
   |                |  |  |   
   |<------------------+  | Source: ADDR_B:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x01a1)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 18
   |                |  |  | Payload: "30.9 C"
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x952b)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 29
   |                |  |  | Payload: "31.0 C"
   |                |  |  |
]]></artwork>
      </figure>
      <t>In <xref target="fig-exchange-example-blockwise" format="default"/>, the client sends a Non-confirmable GET request to the CoAP group, targeting the resource "log" in the application group "gp1", and requesting a blockwise transfer. All servers reply with a 2.05 Content response including the first block. As source port number of its response, each server uses its own port number. After obtaining the first block, the client requests the following blocks separately from each server, by means of unicast exchanges.</t>
      <figure anchor="fig-exchange-example-blockwise">
        <name>Example of Non-confirmable group request starting a blockwise transfer, followed by Non-confirmable Responses with the first block. The transfer continues over confirmable unicast exchanges</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Client              A  B  C
   |                |  |  |
   |  GET           |  |  |
   +-------+------->|  |  |  Source: ADDR_CLIENT:PORT_CLIENT
   |        \       |  |  |  Destination: ADDR_GRP:PORT_GRP
   |         `.------->|  |  Header: GET (T=NON, Code=0.01, MID=0x7d41)
   |           `.   |  |  |  Token: 0x86
   |             `------->|  Uri-Path: "gp"
   |                |  |  |  Uri-Path: "gp1"
   |                |  |  |  Uri-Path: "log"
   |                |  |  |  Block2: 0/0/64
   |                |  |  |   
   |<---------------+  |  | Source: ADDR_A:PORT_A
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x60b1)
   |                |  |  | Token: 0x86
   |                |  |  | Block2: 0/1/64
   |                |  |  | Payload: 0x0a00 ...
   |                |  |  |   
   |<------------------+  | Source: ADDR_B:PORT_B
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x01a0)
   |                |  |  | Token: 0x86
   |                |  |  | Block2: 0/1/64   
   |                |  |  | Payload: 0x0b00 ...
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=4.04, MID=0x952a)
   |                |  |  | Token: 0x86
   |                |  |  | Block2: 0/1/64
   |                |  |  | Payload: 0x0c00 ...
   |                |  |  |
   |      GET       |  |  |
   +--------------->|  |  |  Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  |  Destination: ADDR_A:PORT_A
   |                |  |  |  Header: GET (T=CON, Code=0.01, MID=0x7d42)
   |                |  |  |  Token: 0xa6
   |                |  |  |  Uri-Path: "gp"
   |                |  |  |  Uri-Path: "gp1"
   |                |  |  |  Uri-Path: "log"
   |                |  |  |  Block2: 1/0/64
   |                |  |  |
   |<---------------+  |  | Source: ADDR_A:PORT_A
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d42)
   |                |  |  | Token: 0xa6
   |                |  |  | Block2: 1/1/64
   |                |  |  | Payload: 0x0a01 ...
   |                |  |  |
   |      GET       |  |  |
   +--------------->|  |  |  Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  |  Destination: ADDR_A:PORT_A
   |                |  |  |  Header: GET (T=CON, Code=0.01, MID=0x7d43)
   |                |  |  |  Token: 0xa7
   |                |  |  |  Uri-Path: "gp"
   |                |  |  |  Uri-Path: "gp1"
   |                |  |  |  Uri-Path: "log"
   |                |  |  |  Block2: 2/0/64
   |                |  |  |
   |<---------------+  |  | Source: ADDR_A:PORT_A
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d43)
   |                |  |  | Token: 0xa7
   |                |  |  | Block2: 2/0/64
   |                |  |  | Payload: 0x0a02 ...
   |                |  |  |
   |      GET       |  |  |
   +------------------>|  |  Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  |  Destination: ADDR_B:PORT_B
   |                |  |  |  Header: GET (T=CON, Code=0.01, MID=0x7d44)
   |                |  |  |  Token: 0xb6
   |                |  |  |  Uri-Path: "gp"
   |                |  |  |  Uri-Path: "gp1"
   |                |  |  |  Uri-Path: "log"
   |                |  |  |  Block2: 1/0/64
   |                |  |  |
   |<------------------+  | Source: ADDR_B:PORT_B
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d44)
   |                |  |  | Token: 0xb6
   |                |  |  | Block2: 1/1/64
   |                |  |  | Payload: 0x0b01 ...
   |                |  |  |
   |      GET       |  |  |
   +------------------>|  |  Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  |  Destination: ADDR_C:PORT_B
   |                |  |  |  Header: GET (T=CON, Code=0.01, MID=0x7d45)
   |                |  |  |  Token: 0xb7
   |                |  |  |  Uri-Path: "gp"
   |                |  |  |  Uri-Path: "gp1"
   |                |  |  |  Uri-Path: "log"
   |                |  |  |  Block2: 2/0/64
   |                |  |  |
   |<------------------+  | Source: ADDR_B:PORT_B
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d45)
   |                |  |  | Token: 0xb7
   |                |  |  | Block2: 2/0/64
   |                |  |  | Payload: 0x0b02 ...
   |                |  |  |
   |      GET       |  |  |
   +--------------------->|  Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  |  Destination: ADDR_C:PORT_C
   |                |  |  |  Header: GET (T=CON, Code=0.01, MID=0x7d46)
   |                |  |  |  Token: 0xc6
   |                |  |  |  Uri-Path: "gp"
   |                |  |  |  Uri-Path: "gp1"
   |                |  |  |  Uri-Path: "log"
   |                |  |  |  Block2: 1/0/64
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d46)
   |                |  |  | Token: 0xc6
   |                |  |  | Block2: 1/1/64
   |                |  |  | Payload: 0x0c01 ...
   |                |  |  |
   |      GET       |  |  |
   +--------------------->|  Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  |  Destination: ADDR_C:PORT_C
   |                |  |  |  Header: GET (T=CON, Code=0.01, MID=0x7d47)
   |                |  |  |  Token: 0xc7
   |                |  |  |  Uri-Path: "gp"
   |                |  |  |  Uri-Path: "gp1"
   |                |  |  |  Uri-Path: "log"
   |                |  |  |  Block2: 2/0/64
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d47)
   |                |  |  | Token: 0xc7
   |                |  |  | Block2: 2/0/64
   |                |  |  | Payload: 0x0c02 ...
   |                |  |  |   

]]></artwork>
      </figure>
    </section>
    <section anchor="sec-document-updates" numbered="true" toc="default">
      <name>Document Updates</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION.</t>
      <section anchor="sec-05-06" numbered="true" toc="default">
        <name>Version -05 to -06</name>
        <ul spacing="normal">
          <li>Harmonized use of "group URI".</li>
          <li>Clarifications about different group types.</li>
          <li>Revised methods to perform group naming.</li>
          <li>Revised methods to discover application groups and CoAP groups.</li>
          <li>Explicit difference between "authentication credential" and "public key".</li>
          <li>Added examples of application group naming.</li>
          <li>Added examples of application/CoAP group discovery.</li>
          <li>Added examples of message exchanges.</li>
          <li>Reference to draft-mattsson-core-coap-attacks replaced with reference to draft-mattsson-t2trg-amplification-attacks.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-04-05" numbered="true" toc="default">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>Clarified changes to other documents.</li>
          <li>Clarified relation between different group types.</li>
          <li>Clarified discovery of application groups.</li>
          <li>Discussed methods to express application group names in requests.</li>
          <li>Revised and extended text on the NoSec mode and amplification attacks.</li>
          <li>Rephrased backward/forward security as properties.</li>
          <li>Removed appendix on Multi-ETag Option for response revalidation.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-03-04" numbered="true" toc="default">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>Multi-ETag Option for response revalidation moved to appendix.</li>
          <li>ETag Option usage added.</li>
          <li>Q-Block Options added in the block-wise transfer section.</li>
          <li>Caching at proxies moved to draft-tiloca-core-groupcomm-proxy.</li>
          <li>Client-Proxy response revalidation with the Group-ETag Option moved to draft-tiloca-core-groupcomm-proxy.</li>
          <li>Security considerations on amplification attacks.</li>
          <li>Generalized transport protocols to include others than UDP/IP multicast; and security protocols other than Group OSCORE.</li>
          <li>Overview of security cases with proxies.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-02-03" numbered="true" toc="default">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>Multiple responses from same server handled at the application.</li>
          <li>Clarifications about issues with forward-proxies.</li>
          <li>Operations for reverse-proxies.</li>
          <li>Caching of responses at proxies.</li>
          <li>Client-Server response revalidation, with Multi-ETag Option.</li>
          <li>Client-Proxy response revalidation, with the Group-ETag Option.</li>
        </ul>
      </section>
      <section anchor="sec-01-02" numbered="true" toc="default">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>Clarified relation between security groups and application groups.</li>
          <li>Considered also FETCH for requests over IP multicast.</li>
          <li>More details on Observe re-registration.</li>
          <li>More details on Proxy intermediaries.</li>
          <li>More details on servers changing port number in the response.</li>
          <li>Usage of the Uri-Host Option to indicate an application group.</li>
          <li>Response suppression based on classes of error codes.</li>
        </ul>
      </section>
      <section anchor="sec-00-01" numbered="true" toc="default">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>Clarifications on group memberships for the different group types.</li>
          <li>Simplified description of Token reusage, compared to the unicast case.</li>
          <li>More details on the rationale for response suppression.</li>
          <li>Clarifications of creation and management of security groups.</li>
          <li>Clients more knowledgeable than proxies about stopping receiving responses.</li>
          <li>Cancellation of group observations.</li>
          <li>Clarification on multicast scope to use.</li>
          <li>Both the group mode and pairwise mode of Group OSCORE are considered.</li>
          <li>Updated security considerations.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank Christian Amsuess, Carsten Bormann, Thomas Fossati, Rikard Hoeglund, Jaime Jimenez, John Mattsson and Jim Schaad for their comments and feedback.</t>
      <t>The work on this document has been partly supported by VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAPc2JmIAA+y9e3cbyXUv+j8/RV9q3WPSBkiReoxGziThSByPTvSySB2f
rDjLqwk0wLaAbqS7IQ5s63z2u9+1q7oBUhrFdnKuVuKRgEZ1PXbt9/7t8Xi8
15Xdonia/aap16vsWb1crqtykndlXWWzusm66wI+rdquycuqmGZnq9VCv3/b
1F09qRfZwbP67O3hXn511RQft4+FT+1N60mVL+GN0yafdeOy6GbjSd0U4zn+
agI/Gl+V7XiRd0Xb7e3dy9our6Z/yBd1BT/qmnWxt1euGvpr253ev//t/dO9
vCnyp9mLqiuaquj2buZP4WXvzrPf1c2HsprzjPY+3IRnxs/x9Xswu6fwhule
fdXWiwLe+TT75sG39/fWq2nO/zp9dDrKvnn88GRvb1JPYbSn2Rrm/GRvVT7N
4M+9bJJX2botsrxp8k12UM6yfLHINkV7mMGqr/P2OrsuGph3lsF+PcVv4K9t
3XRNMWuf0hjTYpavF10LT+j3myV/jf/cy9fddd083cvozxj/R/6eZWUFT50f
Zc/LP36wD3mTz9sPdfx53cxp2i/qywmcK7wzryabo2phT8BZFwVsy+//kPz5
vT0yKbvN0+w9PDi57sKn9brqGvjidQFk0yzg3Fr7sljm5eJpVsCEjqYwoX8u
625wAuN4Xc+Ost/l1TxZ17PruprP4fP4S1ocHfHzcl52eX9RJ/fvn2Tn2Y/F
pIOzuehG2cW67Irswf37yeqQ6q/r63ryoajcEqfw9rdn2cm3D0+f9Ff+voLB
pjAuEk+6dpv0EU76n/08j4Dwh9f/6ii7LBf1JE924FXeTOr0K1r/uxcX59nZ
972lv2jz2R/rZtrOc9jy7PQ0WfC/lHDVkpVenI9PHj98eB9WBBtxXS+W/TVf
3BRTt0Wy2CXO76ij+f1zUx61QP9V3SyBHXwskI7f/fDs5OT0VP56enLyrfz1
wYNvHutfn5zcl78+fPjwgf7124cP5a+PT5/oCI8ff6vP4p3Vv8LF1b9++0hf
8eT+N4/0rycPTu2v3+i4Tx6f6Nu+PeFnX4yfHwVuVbcx00qeaItxM5s8OXl0
iswMTmA96XY+ki/mLT6wV1Yzv0v4A97ElEuumvqnTTRmPoF5IaMY4//8qffd
h2Ljfs8rGHqHrG1awn8/Fs2mv/qmaOt1M8FnGrpJAxORDVqO8+myrPpjTOp8
NV6tr9r1Vf/LqrgZX8GMPuhXsCNd29bVuDvtmvk4X4IYmolwGcN3+eRDq4Rw
/1ujiUeP7ht5PHgcyOOJ/vXBQ/v0QaCfbx4Eonn8jdLEg1OliSffMF0+y2EW
dVOV6yWz5phN03U8nyzKFUiHH+C+TGm+9K3IXf3WjURfo/R5mp3eP/l2fP8B
/yBv5niNr7tu1T49Pga+cb2+QsZxXPAgx5MwyDFe+uPTo/tHP/mPaXeP22Zy
DLe0Ov5j/jE/hlkOjoCPwpt/U4/fPPth6/LerIoKeWUFdFB+BEbiFpodwC8P
/XJfwLkVy6Lq+Pt6RkpBdlE0QGjZ/8ieLUr4EjgfvPbz92Fej+vJDP+DxLW3
Nx6Ps/wKdZcJqBKX12Wbgfqxxvdn7aqYAAUVLak4KL5hMp+h7ZBGQ7cpm3hN
ZwSTnyzWqCj4kd8/f3v84m22BHEHD7ZdlvOLRe5nsGUgMTf4K1hyDtpNXrUr
UBGOsu/r7hq+b4vJuoE5gVTN9O+0eQOTAFWksBVOj2B/4Xk8G9iBfHJdFh/h
x1cbv2xW2t5c/RHOMTzPalvYkHfnF5ez9SI7rz6WTV3hTrbZgfz24tmbd+eH
2Uo2CgQXjMvHleVuJ1Fb49fCdGSW8hXOr9oMLgnnCjtHB5YjiXysFx+LzFjR
xE1zWnwsJ/AkzB50vRvQAuVX7XqFm0obh/PzFNEUq0WOv4ILTkrgKLu5LhdF
VsLxsDrIX4F0oVOgf4B8OWJKW5bT6aJAlRUke1NPgeXjvO9lf743uQZeV+Kn
n7aS4fCalYzuSpV//rPIv0+fRqBLzkkTy27gjtxKgkZypqwPzmlZtG0+L9oj
fgRPzMgiflIJQQ6sxSOc4t0ePLMKFI52RBu79RE9yxvUp7MVMH0grbb8E2wf
6GrrBRA10P0S1G85XCU1JB4ktvUS9BJ4foqLv52w0Yg4hON9UxXjrh4vt9Em
WgDwZrtaZUWbM8I7lmcTZmp8mL1TiK876v9tAXsQHqBtbor/WINB5Hb/BW3S
CtZQjLICXg2/Iy4KL8djzadT+B53nGeMo+JZ6Y90qOwKthFfiz+SqaLY15nS
KlvgQ6/rLr9aFHLsESNv9WLhCoc2iHliQe+YNaDA4jlm+wPSbz8joQWE7D78
9Al+VS/p5315SjSDX+1/jnjZh1ewbPOj3y7OjrK9vZ/NkvmQHCPYxaPNgv0q
7PnPf96tySLjAL4H9IRzXDdA2etyAaQDa7j1/UCi/feHN4tm/emTXM8lsKd6
ioziYwm3PwMSxXuG9O8ExniRb+D4Wn0r8pViEp2wXotR2LFn3795ZxMu5xV+
hgd1Xk2azYrP89mbi3RHhjT3T592PIKaOywo0S/aIE7wpeZeEAYN0kX2OZYv
V0hYjofTj/nfIGhw386EiW1UcINsqebyGrjzJd9Hvs9wTcKEYHay0UR+f/6z
/JImf7ZY4Abzj4WDXNXTjclpk1hIx2bI6RLgtODQSObi986IOYIL1NjE8gWx
GyQ2nO5Vve6cYN8pd7YJBZX1uH4VECNYSwErlGn9NIZ30CtorffuZReTelVk
91A2t/jXT3s/bFPn6mqxgS2AU8/gDNeyvSjRcOIR9THfzLP9OsiL/eygPCqO
RrBn1Vh46aHj9yYked9o42lKvZ0nfaop6MF8gW4s2mC5RHTkwjd26BIslvjv
Mhta4VEGMi4rfkLDikTl2/XVomyvxxdgoU2a8qroMQ5nwAGhMstY4zGCxIPp
NnjWTf2Bbi7xX9o02jAWM8jn4OTa7GOZ22SiSdOS2+HlLvMNytx1S0JJfZUt
yBZU+9pyWS7yxhGXaDtwNK0opUNsODUTQDkq8Rd3V57sQBNqFgmOKk7L989u
OWw+qWn9QYB78sbialWIwq7mU5wEE5Wf1iibFzX/pegmR4dyW3EdfIq05GnR
5eWCOQZ8vyhmrPPN1sDviwyvEDCaBezzej6gN4ZpoqhqgR/xsMsaiYm5Ulf8
1PV2F7gF0tgKWTLpUsrC4EoBW2pEl8Cp9F4qKhbQHWmR+IynioGtg7P8Yd3g
xi6BXEcJG9OD9cLxDrIxPfehm2aCSvmFkYKT8oGXbDEk6XhgZ2blfN2IPsNU
Amw7nvb2Q/xNURV4EVcNEE8JV5tfx8qKvdW/Q9gQsSDmlZewgWVVL+r5hjlm
Fz5Ac6bIPhQbfB9cyv1X7y8u90f83+z1G/r7u/Pfvn/x7vw5/v3ix7OXL+0v
+sTFj2/ev3we/hZ++ezNq1fnr5/zj+HTLPno1dm/7rPRsP/m7eWLN6/PXu7v
pXRHiwL2eIVLg9mvGrr8cJTRtfj+2dvs5CFfTPRHwmmzynLyzUPicEXFryKR
wP+EE9mQ9MtJ8UbH/yRfoUuXLzqYJTcVuf+VtcQGL3KFEuQa/CWHG9DKNGc5
sK8yF8uNuIjb9Zh3+PNpCgycTHGUQRnaCt2LBgB0wMQNn5JoBKNCRfWIlfV6
sahvyAqF17B0h6tdwIX9WCzIgzCF3/1SCPL9uxfZmHU7964cZQItAr8nMXAt
92gfpcg+kNs16O1i/BGXMy2EfU54ZWAtYLngeRYl3QS4BzFPZpMH+X8u6we5
3aHDPDsojuYghXOZ6A/rBcz+t2u0MVAff16jQyx7TY/+8Nvnrw8PeaLGd1p0
N9DObnkt6mZz2wUggBqvFnDaCpWTrF6JAgSsLSNOVa2XV85e66/zKOxqKydB
jzbFfI3Czba03cB7fsoOWOu5EOX4MfJXI5RDOibjP6CdFU0J05HjaoqZkB8y
ZmNhcLWBkMnXj1/Dzq5ytN/oX21XN0xKuahhvGdIJELYtGHwE9iqcgWvJN4S
cx9PoETuzOZEr2Me9EyUXBiMReVzU2vviYOFVNlUfAe9G0nLVHKnhCNx8ta2
tEEvgmhoC1xrV/AHZeDWQarjJXfeGP4s2IO4g/pc7Iy5LufX4wXoaotsvgbZ
t6A31kQKZZPwZDlX8iLNmaN7mXSYTtz5Hb9QvEW2FvtwarW7Bg9Ot+XO64yI
AO8e8JS8Agryi+UJuhWqnYR8FufpxlRjYpsLwg5OXoC8j1TYNeru7h1gWdTV
HLgDBUDgDJDwgrG/c+yrHJUTPkaQVzVct33Qi6bxsmyweOvJ1KMHdPvHsWY0
rmqcNY4H86Uf4P4u4P87PrembD/gsUfxkUziI7ZyHCR6glcfXx3d6sga7d0V
fYrZEmm4x8HDBBNdbHeU53Sf7Wl0ISEfdRSPE5VRx/rcWJ/TLejAxkBBihTf
lcvC/5i+G9N3A1TE3qiiva5QavBsccSPIBXE5cMfwjRxdFzJBGysYmqzbiNy
Qvurmo9tTDtV/20Y/fZtJ6N/B4vqxS6ABt9ckb2VvVmp3ZwaILgO8jSQ4//8
Uv0w6kf74fzy2Y/6oahADwY8yuYGAAl5nX8sUfvUoWM7rxLHGFuC0abVPF3e
i3vCsJ4bx6XfakaJZ4rmV+9zRNJjIu1lBJd5BgIOd5h3o9usxFkxK5u226kX
oRUK9Pqbvrrsoz1C46DI2bw9X0NXcOWlBZrhsJNIUzDpkggfx4E5ihtQb39v
WjgHdWX0Noy9Gn4FQGIN7DcvGUjFiSkWN0uwGUAVIO2RpBzui9sRjtSwWvHU
ib8B6TcakH400Xv8O55ub47Eiukfn/bOvNmcqpFt0ZnXr6imqxp2uB1JRIDc
4Pqp7CAdFushTTEpkFrd8Oa6McWlRRoRdzg98wsycutJSZr1oMKJS1a1DqmF
wh0jryeAwkvBKhCFRA3wBL6AJSOsB4a16IbdFlsfOuiqsDBxfeQwe9Ig4fc0
p9WiiHUToLlW/DekwtfhuaF1FKTDYiDms16BOjYOHz8gTh9bA0rFcAl1t1rV
cfk97XW5OsC8qRleFlswxvF0VtMN6PMwbdTfWe1jtxuyfpt+HV5MgQ9y/g6c
O+m7Cbmhu6Qq0DGVNyW8pOzaYjGLtoLuQ/jVU3ThUiBMH0EDsZzhx2QHXAcL
yKa1KFtgDTgxURe+iNj2ercFGAYwEDJqrjbBE1vjdmJSz5R4N+nsZq0cZeIp
EdcQHZYMtOntHd6S2JNsNxmPBkQcXmbhT/eicOW22+/YiDKBqs9beI89B+gR
2QESI6tggdgotCj2XHtN/lPiuaSGhsHUvdy6K5wPTQOPs3eV/WN0rdnzLS7V
LSNNKGgJGw2aNSm1osvh8WB0Y4Y2VVPXS7JpyUdftXXDD8A8FoubfPMZ3KFv
rOCVkaifjcAbJfHCHTFgMYYHz+mut6j3Y9KIkJlrUDUTbzr8hy175103kQVP
djdFUSWUGgeS+FPgL0fZxRokRSLvQN1ft636MkkCkp+0pxLwX+zXHEAZ2gfy
PMh5FD/ht2UHe6EXsXQXn+x4ZHtRvJd1NXPL8/P4JNjS195R8EK2U3aevKp5
W4x6pBn4xNLmAypGKdFG1uNJTDajjH0mZtR4ZiJziYLTMFW23dHvUfxEOoX7
ze1cZmgPb+c28BtjNubf2MZpVDMRNvND3xsa2yiJKpORq4RdGxSMi7/FEwEb
jEOZwpLQS4KrI84TovGJH2YEknpyzVePnIqaVVx23vYm8wR+MNuI0obk9BPL
wWnIDsA7pBysd72ropiqo9Hfx/5agQU1U5StkpSQs2mU7bKFHW+gxfClpq2K
ePWXTUNVOHaON5h9CDsgO5LfaWJBwXOzuyP/TLw6fV6FTGk7c0p+HjQ906bW
KI5ALxCNIrA+DMi0Nd3nn/e+vgjY/dqvzynZBZ4v0nNGbjk1r4npMcOpUajE
oMMn8laKKA7BIM4cqFBsdIFf0ad30HmS+d3OieDfxone2ZZ9L6fBLOmSrLA+
Y0p2au+95X7lV7XFdNGG8/7IUSzwdlA8259G5ebXRl8KfK/2VbdGOmfXt3qv
UfLCfztSd+A6kJkV5vN0jxIzDwZsQW8qxrt56AmB1B9WBpoaGCg6Xdmfh+tf
1WAbY5D3C+mbErhoEcAmp6Nd2hBdfnIkaSw5sWRBM1y3o/D1Fm5u2W6OdeNv
grlJEWgWehIHxQyDIf2M/EMaL7kqKjh8UdFg88UQWqBhgIIGBh+lET3YFPIq
0du8a95CgX7qlFlGugQrEKndUkqyl6zuQyVBCVBSJt2A/CamPWPuTcoMEo8J
CckMJAqFL4W9T4PSoUqIeLqmKkZcBIW/tJi+qvGjTHICSBupWHZyQg+Ke3GZ
6UxW+WZR51OmFUoUIN7AFAOsADZviGKMYLaKCKGYYI0M0ABrXWJ96MwGrAW+
s0JQYsm5kQfO8pIPkn4H+/ARLE4KxM+8aVLOYqe/3AUemF+C/k4iYskTxBSq
et7kq+tyAobJHCNX10sNs3AQ0kWKSKOBbdpCXKKh4Dz/CESW/XFNaSl2SL1g
iqmkN0RAltjLE1hxMMuSkyJbUcNtvd29IVsMLg2f+0dSYWg6aHjxTJZAH98X
m5o8Z5hQRZEtCsbJgsKwPid1AvcOE+NwMDHvRcQgExm8NNsJCrYwvHckIjuJ
javLeoA45HT5Xi7wUMNDkpCzqtE0kGSBQJhkdA7P2JnMVwUvbYdGB5yCVVeg
IJcHxKlWtSm0ps7ZlcHTLSrM+GkpYIrSemLJnuraIU+SnT6PjUygwTxpibP+
iX51qPsULXKYPq6KRV3NOUQaYoO2silFkI/QO3+dq16rj5HRB5s5YSsL/QPA
qtOrjzd7VcDJcup6d91QAg6oGzgTlNDxWiZNQfpKviCvEWf7os9PJ7csQBEC
kv3zn0EesIYxViH66VNIh9b4jWosKl8p08WII/Ufh+QJ1lBg596/egmXGeYC
P8vhcJco2kMql3yXdx38bt3xbrf/sUapdNVQOjdrmBosJ+OUvL+wiv8T/uz9
arzlz6+y9M/go7/a+wt8ddY7ZPjzl94I9InTsvjDvb8cbfkzMMLgY3v9B/0b
b/mE55D9Wzb23oZ/37rqX8GD6FCMnIm753ACs3wt/zzBT8a97IVbRrjrKn7u
CPFyf+VXnf751eBje8mI8eJ3zI8e6//6Ln/+8oU/c7W/n/vDz53trwY3dXC/
dr02+GWiG/QZY2y7ap85j8HPkzF+v423yCW66JutvTEG/whF/cWPYRZDfx67
/tx1Lbv+bOOhv4o47Z+fZvf60oML+r7bD1bu2RKkY/bcpIWzdveBp1Nsa5wv
ynn13T7mBxfN/qdhyTQWxRQklFUGYILRalFvKEau/lDRDj9TbpGIxrw8UNDK
n5K49EXz8WQM//P40IVHRfktP3o9QQINB5ju8L8PfXJ2R9HWAePy4GSUnY6y
BzL2Td1TyuiJw6PUjXli9iRIdwqv94MqJzToKU4EX6+h94NnixIGhf89pf99
wDnBLjBK+n3fgkXVL50GDA6T9kPzoA950C8b9RRdW5zOw9mSAzsXmeROEh+g
s5t/JXobv/8Q1GLKukcjQjMuXSwN5OBQOE2FGhkWmHadRxMLh4+rFQIwm5Zp
KNFTshREIf2DF/G2Z/6wd3zbXf59lt36TPZ7E7TDV/9XxFf+suNrZTI6zl8G
CfEvmf1f/+sH+AVSTjzO0B83zpavw3yQzPEjvMDwEfznlP/zIBoHPnjEnz/2
4yANx/PBa32Wxf9x4+AHzzL9z/B8Tm/dZx7neab/GRjnlj93Pi+8+vSPHmtx
49z2srvOJxt60+nAOLv2p4c/0vtzvJMOT2kydyAx90ignofbHsGj+j7T/ww8
sn1Ne7cu6fgOolfFo4rg50EwngfB+LmCOKQSJWlWkaOaEo8o6OEywzUZDXik
8muYQCp/qRIFPfwjzpHCvyjEhNRQUrpULtbePZvQa3KuZ/fiqbDLHSbzfIug
D2+kRHwrvUQ7/mbkTfMvzOnlSfq8pnZ4kpwPsTNVg6rXaK4ShB1Ke+/Fi10a
3UAi1afDUMkpOfX4c5RbmBYUxj0QD/tma0b9ouwwx44Vlx3J7FQlXFgUk3Sc
gZW02e//4cc3F5e//0caUP/x9NHjJw9Yv9FAzJDUx1XVVMBMjh7JpFHXJD2n
5TleqOPgcGS/u4ZnVVEZyAvSNCR1rDUFBlWKasr+blNxomgKaTu3bN6IYihF
PmWXmKSSSH3CkRVNXBWTHNWd568vMHje5MFljb5mVHiuCtGGJQKHIYShOnly
FaJfsl8OEeXG0VLFSbyuyv9Y46VYYlXLrnoHKtvDWVJtxFrSIWf0kTh0Z+tq
woSihc0f83JBBXtCy7aD7DV0CqQmo+JwqFphJkxpheYhe0IWCycr3I84wHUJ
W95MrjE+4s8XSzsyvpXZAd3pSb2CfzCeR861zjIT8rF5VnCDGr5pm6HQ4vTo
VEstqKZAGUNPJm3jD5jBsCWFRI6FeYMe9k2+aYN7sM//jLGgG5TyCoAD0rkD
jVA67AEmps6L5tBiKJR/ogkcNhI/z867KXDQVlytN9eFlOBMie9T9GeRprh6
C7lsLe+FjlZjtLisOA1I9fWjbYImNz19FoKDrgyWAg2XprYXSheaT5uk/EUJ
c4HB2l2ZN6sjGeOobuZoP7bGfFDIRCZkyOsThnRbPt9s9uDR0wf3n57ev3/y
dHr15Ons5OnTJ/fv33/KJl3Cwx4dZXuByQ5dbDIUyRrtag5kgF0MLGiMNWZ0
+XRHniJFrRAep5xwilqM6yAxkUX5QWq9hBcknE2rRkiyBLESIcsgecWJHNP1
RIy68k9xBrvkE/UiHZT81JTjH/E9kt4u92NvRgVdxaK0xCoJMnHiBIeYTS7h
KG9xX2WUaV1w4lQo5ZOYJu3TCON/Mtv0OIh6F7i1VqE7HcqO+gUVEcO5YJ2f
lvVKulZkwepLD3dmlcm6h7PKotRO2ERmARKiCrw+SQh1Abdw5/Dcgtym+oN+
/pmr+aOYqtDBUqLPPi4lVQUY5aG3bwm2sEwkWa0gOAEvoqwGxd2WHEvart+8
e/P+7euzV+cuKMflmQ3VcisbOaJchjP4uu3sZpBsmNaUxFXTIjlolA9thaVx
weU6JB1Cla+cH22LORelYgRlUS7xDokCgSEV0MuJV3zMF+tCo9/789X+SE5F
Enth8GRAGoN+xoKRSuG3xJLTwcpDJm433oGmzEa6WC/MrtQz+JokB5ZUu+P5
6tiOA80oZnPHGNPtf4f/c0p6Qd0smaUSkAWfzFH2PzFUjAxqy8lLska0UcQg
o+3fTRTbCO4IaYXpBdnPeLYoppiG52AU4nwhMuZwVmOcT/BzYgIaC17n2qQc
5RUmVURJlnccdEz1OqU5spBvf3wcOLbzfvl6dnpVqjWTkFPwpq21qsRmo3Bm
0FzL1qkpyp1VpiYeM9rQwbN8ms1XJ3RBTaY8zdDeQRi4WEijKfEIqQl+cUxJ
1f80q+vvrvKGft/HZRC/+Y/Enp9SVdTB5Xev37zGJKZp8d39o/sno+zVi+ff
3f/pm+nDk0P5gcqjp6ma4L5/C+eCcx/46KT3GU3WffrbNUIwZjr7Qf9A7/TV
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
YnMPM85ek7a3IJ+p+bFvSNN2h7BlxNPEZxiP27m2uoiMQSgL15LyU7ZHeFrk
FcHlc7+1gT3F4xDUJEx26B+slzgjl4070nwRvMzO3dMj8Jj2oswwuG9hJhQ1
k5UHekd2Ya6rgdF3kLmvssINKjvvbozH4tyhxO46GpiQtI22ut7+jOKClHhK
smXsKsc+wDhBP4IE7iqtQqCDVTczfbmnDejFt6+oT32QKXGAX5fza1z4Vc53
RVu4M2/CgHIineGMUcRPxUVBiRYw1RfPLe88jC977O9o6CH04jmHBWmeB1TA
a+GIgYkd2ol5yA0FxkPj+ilCl4GKPdlEegl7DLuGkm1vpUDO+ltXWL88r6hz
t1QuIPRYZHg9JN2vLxtHGerUnBBHEZ15VTfCbA6onALsscNoIrFlgHl0sl3e
w+l9IeYih/mWM3dZZEDMBnCeVhQw6I9EF8pbxOa74HlQhRAZtvbNWipW042h
xEUMWudX+FqG+FMcfO5cyVGlkNKfT5pafMrD6eFZyPkhbkdWMTMkVdF7k4hf
pX55dv9KYQta5uY98n3lfMtt+sGd+68wm2a/cqzo4pis5/jzIcp20zvwr3Zd
DNh5Dppyqw6Q3ssPs6KkeKLRUZFaF5rbMDUhw+UTqHmtWyqeEAJ4i6lc4fAl
sy67tHxE0iu0NEhO13p8pT5pLldvQ7jWUoa0KjcpUh/GCqDQCJcb2YlpSkaa
XoidE0jD1xqZqq7G2x6GmxEgQI9AjUrtb3EFUUoDb4p2lkzKUFlO+LE1C4Qd
34HS79DoJ2nmlv5YI6rqB06TzcRBq6zvTVWohKdm8WnYWCGuWtFYggMvBI9j
TWL4lFyZnaIX/ML8CEBpkw98p6zON+c0HNiekBvXhzHA2zppSm0lGgpHMBDb
UuCxyz9QnSEjRdVrFbSdVKevm8iv6CN5lqYvxb9eMPRwBaIegEwhet3bp4Gm
MRlHkbzkeJHVeiR4tfap7KsRZoNOJAZbFYmNIg6vmV2+AziRQ4lvYrxOCgwM
ykt+p5t+8EKfVgD7PMTZcdvlOS1YtS2Coa7WMBNLkRc1mOkgnBEMNKOOBMII
MOrX8V3tLYYyV2nm6C6vSUaBEiR+0+QKP2QQVHX6wPV7fvnyYqwYBKpp0WlR
Mp3ahXrhZlIisC1JRKy3NJd5KkVYRqNmWbi+wFs8j6cg8GMx71PHUh5l/CGI
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

-->

</rfc>
