<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version  (Ruby 3.0.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-groupcomm-bis-08" category="std" consensus="true" submissionType="IETF" obsoletes="7390" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.3 -->
  <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-08"/>
    <author initials="E." surname="Dijk" fullname="Esko Dijk">
      <organization>IoTconsultancy.nl</organization>
      <address>
        <postal>
          <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="2023" month="January" day="11"/>
    <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">
      <name>Introduction</name>
      <t>This document specifies group communication using the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>, 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 that support group communication include "Eclipse Californium" <xref target="Californium"/>, "Go-CoAP" <xref target="Go-CoAP"/> as well as "libcoap" <xref target="libcoap"/>.</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"/>, which in turn builds on Object Security for Constrained Restful Environments (OSCORE) <xref target="RFC8613"/>. This method provides end-to-end application-layer security protection of CoAP messages, by using CBOR Object Signing and Encryption (COSE) <xref target="RFC9052"/><xref target="RFC9053"/>.</t>
      <t>This document replaces and obsoletes <xref target="RFC7390"/>, while it updates both <xref target="RFC7252"/> and <xref target="RFC7641"/>. A summary of the changes and additions to these documents is provided in <xref target="changes"/>.</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"/>.</t>
      <section anchor="scope">
        <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"/> 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"/>. Other transport protocols (which may include broadcast, non-IP multicast, geocast, etc.) are not described in detail and are not considered. 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"/> 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">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL"
in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
        <t>This specification requires readers to be familiar with CoAP terminology <xref target="RFC7252"/>. Terminology related to group communication is defined in <xref target="sec-groupdef"/>.</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 can contain a UDP port number in the authority component. Group URIs follow the regular CoAP URI syntax (see <xref section="6" sectionFormat="of" target="RFC7252"/>).</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">
        <name>Changes to Other Documents</name>
        <t>This document obsoletes and replaces <xref target="RFC7390"/> as follows.</t>
        <ul spacing="normal">
          <li>It provides separate definitions for CoAP groups, application groups and security groups, together with high-level guidelines on their configuration (see <xref target="chap-general-groupcomm"/>).</li>
          <li>It defines the use of Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> as the security protocol to protect group communication for CoAP, together with high-level guidelines on secure group maintenance (see <xref target="chap-oscore"/>).</li>
          <li>It updates all the guidelines about using group communication for CoAP (see <xref target="sec-coap-usage"/>).</li>
          <li>It strongly discourages unsecured group communication for CoAP based on the CoAP NoSec (No Security) mode (see <xref target="chap-unsecured-groupcomm"/> and <xref target="chap-security-considerations-nosec-mode"/>) and highlights the risk of amplification attacks (see <xref target="ssec-amplification"/>).</li>
          <li>It updates all sections on transport protocols and interworking with other protocols based on new IETF work done for these protocols.</li>
        </ul>
        <t>This document updates <xref target="RFC7252"/> 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"/>) and token reuse time (see <xref target="sec-token-reuse"/>).</li>
          <li>It updates the freshness model and validation model to use for cached responses (see <xref target="sec-caching-freshness"/> and <xref target="sec-caching-validation"/>).</li>
          <li>It defines the measures against congestion risk specified in <xref target="RFC7252"/> to be applicable also to alternative transports other than IP multicast, and defines additional guidelines to reduce congestion risks (see <xref target="sec-congestion"/>).</li>
          <li>It explicitly admits the use of the IPv6 multicast address scopes realm-local (3), admin-local (4) and global (E). In particular, it recommends that an IPv6 CoAP server supports at least link-local (2), admin-local (4) and site-local (5) scopes with the "All CoAP Nodes" multicast group (see <xref target="sec-udptransport"/>). Also, it recommends that the realm-local (3) scope is supported by an IPv6 CoAP server on a 6LoWPAN node (see <xref target="sec-udptransport"/>).</li>
        </ul>
        <t>This document updates <xref target="RFC7641"/> 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"/>, together with normative behavior for both CoAP clients and CoAP servers (see <xref target="sec-observe"/>).</li>
        </ul>
      </section>
    </section>
    <section anchor="chap-general-groupcomm">
      <name>Group Definition and Group Configuration</name>
      <t>In the following, different group types are first defined in <xref target="sec-groupdef"/>. Then, Group configuration, including group creation and maintenance by an application, user or commissioning entity is considered in <xref target="sec-groupconf"/>.</t>
      <section anchor="sec-groupdef">
        <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">
          <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"/>.</t>
        </section>
        <section anchor="sec-groupdef-applicationgroup">
          <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"/>.</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"/>.</t>
        </section>
        <section anchor="sec-groupdef-securitygroup">
          <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"/>.</t>
          <t>Further details on identifying a security group are provided in <xref target="sec-groupnaming-sec"/>.</t>
          <t>If the NoSec mode is used (see <xref target="chap-unsecured-groupcomm"/>), group communication does not rely on security at the transport layer nor at the CoAP layer, hence the communicating endpoints do not refer to a security group.</t>
        </section>
        <section anchor="sec-groupdef-grouprelations">
          <name>Relations Between Group Types</name>
          <t>Using the above group type definitions, a CoAP group communication message sent by an endpoint can be associated with a tuple that contains one instance of each group type:</t>
          <artwork><![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 server port number used, 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 single 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 the 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"/> 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>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="544" viewBox="0 0 544 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,32 L 8,160" fill="none" stroke="black"/>
                  <path d="M 120,160 L 120,304" fill="none" stroke="black"/>
                  <path d="M 208,32 L 208,160" fill="none" stroke="black"/>
                  <path d="M 344,240 L 344,352" fill="none" stroke="black"/>
                  <path d="M 352,32 L 352,160" fill="none" stroke="black"/>
                  <path d="M 432,160 L 432,240" fill="none" stroke="black"/>
                  <path d="M 520,32 L 520,160" fill="none" stroke="black"/>
                  <path d="M 536,240 L 536,352" fill="none" stroke="black"/>
                  <path d="M 8,32 L 208,32" fill="none" stroke="black"/>
                  <path d="M 352,32 L 520,32" fill="none" stroke="black"/>
                  <path d="M 208,96 L 352,96" fill="none" stroke="black"/>
                  <path d="M 8,160 L 208,160" fill="none" stroke="black"/>
                  <path d="M 352,160 L 520,160" fill="none" stroke="black"/>
                  <path d="M 344,240 L 536,240" fill="none" stroke="black"/>
                  <path d="M 120,304 L 344,304" fill="none" stroke="black"/>
                  <path d="M 344,352 L 536,352" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="80" y="52">Application</text>
                    <text x="152" y="52">group</text>
                    <text x="404" y="52">CoAP</text>
                    <text x="448" y="52">group</text>
                    <text x="108" y="68">........................</text>
                    <text x="436" y="68">....................</text>
                    <text x="24" y="100">[</text>
                    <text x="40" y="100">-</text>
                    <text x="72" y="100">group</text>
                    <text x="116" y="100">name</text>
                    <text x="144" y="100">]</text>
                    <text x="368" y="100">-</text>
                    <text x="388" y="100">IP</text>
                    <text x="424" y="100">mcast</text>
                    <text x="480" y="100">address</text>
                    <text x="248" y="116">1...N</text>
                    <text x="328" y="116">1</text>
                    <text x="368" y="116">-</text>
                    <text x="392" y="116">UDP</text>
                    <text x="428" y="116">port</text>
                    <text x="476" y="116">number</text>
                    <text x="160" y="180">1...N</text>
                    <text x="472" y="180">1...N</text>
                    <text x="472" y="228">1...N</text>
                    <text x="404" y="260">Security</text>
                    <text x="464" y="260">group</text>
                    <text x="440" y="276">.......................</text>
                    <text x="360" y="308">-</text>
                    <text x="404" y="308">Security</text>
                    <text x="464" y="308">group</text>
                    <text x="508" y="308">name</text>
                    <text x="304" y="324">1...N</text>
                    <text x="360" y="324">-</text>
                    <text x="404" y="324">Security</text>
                    <text x="476" y="324">material</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![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>
            </artset>
          </figure>
          <t><xref target="fig-group-relation-example"/> 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). Although in real-life deployments using group commmunication the number of servers and resources would usually be higher, only limited numbers are shown here for ease of representation. There are three application groups (1, 2, 3) and two security groups (1, 2). The Security Group 1 may for example include all lighting devices on a floor of an office building, while Security Group 2 includes all HVAC devices of that floor. Security Group 1 is used by both Application Group 1 and 2. The Application Group 1 for example may consist of all lights in a hallway, while Application Group 2 includes all lights in a storage room. Three clients (Cli1, Cli2, Cli3) are configured with security material for Security Group 1. These clients may be motion sensors and a control panel (Cli3), that send multicast messages to /resA to inform the lights of any motion or user activity detected. The control panel Cli3 additionally sends a multicast message to /resB to communicate the latest light preset selected by a user. The latter action only influences the lighting in the storage room (Application Group 2). Two clients (Cli2, Cli4) are  configured with security material for Security Group 2. These clients may be temperature/humidity sensors that report measurements periodically to all HVAC devices (Srv5, Srv6) in the Application Group 3, using for example /resC to report temperature and /resD to report humidity. All the shown application groups may use the same CoAP group (not shown in the figure), for example the CoAP group with site-local, site-specific multicast IP address ff15::3456 and default UDP port number 5683 on which all the shown resources are hosted for each server. Other floors of the same building may replicate the shown structure, but using different security groups and different CoAP groups.</t>
          <figure anchor="fig-group-relation-example">
            <name>Deployment Example of Different Group Types</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="320" width="576" viewBox="0 0 576 320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,48 L 8,288" fill="none" stroke="black"/>
                  <path d="M 72,64 L 72,144" fill="none" stroke="black"/>
                  <path d="M 72,208 L 72,288" fill="none" stroke="black"/>
                  <path d="M 248,64 L 248,144" fill="none" stroke="black"/>
                  <path d="M 248,208 L 248,288" fill="none" stroke="black"/>
                  <path d="M 272,48 L 272,288" fill="none" stroke="black"/>
                  <path d="M 296,48 L 296,192" fill="none" stroke="black"/>
                  <path d="M 320,64 L 320,160" fill="none" stroke="black"/>
                  <path d="M 496,64 L 496,160" fill="none" stroke="black"/>
                  <path d="M 568,48 L 568,192" fill="none" stroke="black"/>
                  <path d="M 24,32 L 256,32" fill="none" stroke="black"/>
                  <path d="M 312,32 L 552,32" fill="none" stroke="black"/>
                  <path d="M 72,64 L 248,64" fill="none" stroke="black"/>
                  <path d="M 320,64 L 496,64" fill="none" stroke="black"/>
                  <path d="M 72,144 L 248,144" fill="none" stroke="black"/>
                  <path d="M 320,160 L 496,160" fill="none" stroke="black"/>
                  <path d="M 72,208 L 248,208" fill="none" stroke="black"/>
                  <path d="M 312,208 L 552,208" fill="none" stroke="black"/>
                  <path d="M 72,288 L 248,288" fill="none" stroke="black"/>
                  <path d="M 24,304 L 256,304" fill="none" stroke="black"/>
                  <path d="M 24,32 C 15.16936,32 8,39.16936 8,48" fill="none" stroke="black"/>
                  <path d="M 256,32 C 264.83064,32 272,39.16936 272,48" fill="none" stroke="black"/>
                  <path d="M 312,32 C 303.16936,32 296,39.16936 296,48" fill="none" stroke="black"/>
                  <path d="M 552,32 C 560.83064,32 568,39.16936 568,48" fill="none" stroke="black"/>
                  <path d="M 312,208 C 303.16936,208 296,200.83064 296,192" fill="none" stroke="black"/>
                  <path d="M 552,208 C 560.83064,208 568,200.83064 568,192" fill="none" stroke="black"/>
                  <path d="M 24,304 C 15.16936,304 8,296.83064 8,288" fill="none" stroke="black"/>
                  <path d="M 256,304 C 264.83064,304 272,296.83064 272,288" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="128" y="84">Application</text>
                    <text x="200" y="84">Group</text>
                    <text x="232" y="84">1</text>
                    <text x="376" y="84">Application</text>
                    <text x="448" y="84">Group</text>
                    <text x="480" y="84">3</text>
                    <text x="532" y="84">Cli2</text>
                    <text x="36" y="116">Cli1</text>
                    <text x="100" y="116">Srv1</text>
                    <text x="156" y="116">Srv2</text>
                    <text x="212" y="116">Srv3</text>
                    <text x="348" y="116">Srv5</text>
                    <text x="404" y="116">Srv6</text>
                    <text x="532" y="116">Cli4</text>
                    <text x="104" y="132">/resA</text>
                    <text x="160" y="132">/resA</text>
                    <text x="216" y="132">/resA</text>
                    <text x="352" y="132">/resC</text>
                    <text x="408" y="132">/resC</text>
                    <text x="36" y="148">Cli2</text>
                    <text x="352" y="148">/resD</text>
                    <text x="408" y="148">/resD</text>
                    <text x="36" y="180">Cli3</text>
                    <text x="124" y="180">Security</text>
                    <text x="184" y="180">Group</text>
                    <text x="216" y="180">1</text>
                    <text x="396" y="196">Security</text>
                    <text x="456" y="196">Group</text>
                    <text x="488" y="196">2</text>
                    <text x="128" y="228">Application</text>
                    <text x="200" y="228">Group</text>
                    <text x="232" y="228">2</text>
                    <text x="100" y="260">Srv1</text>
                    <text x="156" y="260">Srv4</text>
                    <text x="104" y="276">/resB</text>
                    <text x="160" y="276">/resB</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![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>
            </artset>
          </figure>
        </section>
      </section>
      <section anchor="sec-groupconf">
        <name>Group Configuration</name>
        <t>The following defines how groups of different types are named, created, discovered and maintained.</t>
        <section anchor="sec-groupnaming">
          <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">
            <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"/>), which includes the host subcomponent (possibly an IP multicast address literal) and an optional UDP port number.</t>
            <t>It follows that the same CoAP group might have multiple names, which are possible to simultaneously and interchangeably use. For example, if the two hostnames group1.com and group1.alias.com both resolve to the IP multicast address [ff15::1234], then the following authority components are all names for the same CoAP group.</t>
            <ul spacing="normal">
              <li>group1.com:7700</li>
              <li>group1.alias.com:7700</li>
              <li>[ff15::1234]:7700</li>
            </ul>
            <t>Also note that, when using the "coap" scheme, 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. Therefore, building on the above, the following authority components are all names for the same CoAP group.</t>
            <ul spacing="normal">
              <li>group1.com</li>
              <li>group1.alias.com</li>
              <li>[ff15::1234]</li>
              <li>group1.com:5683</li>
              <li>group1.alias.com:5683</li>
              <li>[ff15::1234]:5683</li>
            </ul>
            <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"/>.</t>
          </section>
          <section anchor="sec-groupnaming-app">
            <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 discusses a number of possible methods to use, while full examples for the different methods are provided in <xref target="sec-examples-app-group-naming"/>.</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 kept short.  </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 kept short in constrained networks.  </t>
                <t>
Full examples are provided in <xref target="sec-examples-app-group-naming-path"/>.</t>
              </li>
              <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>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 identifier. That is, the query component ?GROUPNAME conforms to this format.</li>
                  <li>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.</li>
                </ul>
                <t>
Full examples are provided in <xref target="sec-examples-app-group-naming-query"/>.</t>
              </li>
              <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"/>). 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"/>).  </t>
                <t>
While the host component of the Group URI can be a group hostname, an implementation would likely rather use an IP address literal, in order to reduce the size of the CoAP request. In particular, the Uri-Host Option can be fully elided in this case.  </t>
                <t>
A full example is provided in <xref target="sec-examples-app-group-naming-authority"/>.</t>
              </li>
              <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"/>), using this method implies that, given any two CoAP groups, the port subcomponent of the URI authority component MUST NOT be the only information distinguishing them.  </t>
                <t>
Like for the previous case relying on the whole URI authority component, an implementation would likely use an IP address literal rather than the group hostname as 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.  </t>
                <t>
A full example is provided in <xref target="sec-examples-app-group-naming-host"/>.</t>
              </li>
              <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"/>), 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 example is provided in <xref target="sec-examples-app-group-naming-port"/>.</t>
              </li>
            </ul>
            <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 a 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 example is provided in <xref target="sec-examples-app-group-naming-option"/>.</t>
              </li>
            </ul>
            <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="RFC9176"/> provides an example of an 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, while the CoAP group ff35:30:2001:db8:f1::8000:1 is specified in the authority component of the URI encoded in the "base" attribute.</t>
          </section>
          <section anchor="sec-groupnaming-sec">
            <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 to other kinds of group identifiers that may be specific of the used security solution.</t>
            <t>The name of a security group is not expected to be used in messages exchanged among its members, unless the application requires otherwise. At the same time, it is useful to identify the security group when performing a number of side tasks related to secure group communication, such as the following ones.</t>
            <ul spacing="normal">
              <li>An administrator may have to request for an authorization to configure security groups at an available Group Manager (see <xref target="chap-oscore"/>). During the authorization process, as well as during the interaction between the administrator and the Group Manager, the group name identifies the specific security group that the administrator wishes to configure and is authorized to.</li>
              <li>A CoAP endpoint may have to request for an authorization to join a specific security group through the respective Group Manager, and thus obtain the required group security material (see <xref target="chap-oscore"/>). During the authorization process, as well as during the interaction between the CoAP endpoint and the Group Manager, the group name identifies the specific security group that the CoAP endpoint wishes to join and is authorized to.</li>
              <li>A CoAP endpoint may first need to discover the specific security groups to join through the respective Group Manager (see <xref target="sssec-discovery-from-rd"/>). Results from the discovery process include the name of the security groups to join, together with additional information such as a pointer to the respective Group Manager.</li>
            </ul>
            <t>It is discouraged to use "NoSec" and any of its lowercase/uppercase combinations as name of a security group. Indications that endpoints can use the NoSec mode MUST NOT rely on setting up and advertising a pseudo security group with name "NoSec" or any of its lowercase/uppercase combinations.</t>
          </section>
        </section>
        <section anchor="sssec-group-creation">
          <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.</t>
          <t>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.</t>
          <t>The IETF does not define a mandatory protocol to accomplish CoAP group creation. <xref target="RFC7390"/> defined an experimental protocol for configuration of group membership for unsecured group communication, based on JSON-formatted configuration resources. However, using such experimental protocol is not a recommended approach. 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"/>. 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"/>.</t>
          <t>For unsecure group communication using the NoSec mode (see <xref target="chap-unsecured-groupcomm"/>), there is no security material to be provided, hence there is no security group for CoAP endpoints to participate in.</t>
          <t>The configuration of groups and membership may be performed at different moments in the life-cycle of a device. For example, it can occur 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">
          <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">
            <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="RFC9176"/>.</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"/>), the approach described in <xref target="I-D.tiloca-core-oscore-discovery"/> 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"/>. Later on, CoAP endpoints can discover the names of 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">
            <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 discussed 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 discusses a number 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"/>), 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;".</t>
            <t>Full examples for the different methods are provided in <xref target="sec-examples-group-discovery"/>.</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.*" 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.*", 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 example is provided in <xref target="sec-examples-group-discovery-1"/>.</t>
              </li>
              <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"/>), 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"/>. 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>
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>
                <t>
A full example is provided in <xref target="sec-examples-group-discovery-2"/>.</t>
              </li>
              <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"/>), 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>
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>
                <t>
A full example is provided in <xref target="sec-examples-group-discovery-3"/>.</t>
              </li>
              <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, the request can use 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"/>), with a particular chosen scope if IPv6 is used.  </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. For each application group, the associated CoAP group is obtained as the URI authority component of the corresponding returned link.  </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>
                <t>
Full examples are provided in <xref target="sec-examples-group-discovery-4"/>.</t>
              </li>
            </ul>
            <t>Note that the specific way of using the above methods, including the ways shown by the examples in <xref target="sec-examples-group-discovery-4"/>, is 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"/> is only defined for use with an RD, i.e., not directly with CoAP servers as group members.</t>
          </section>
        </section>
        <section anchor="sec-group-maintenance">
          <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"/>), i.e., when the NoSec mode is used, 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"/>), the maintenance operations of the protocol Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> MUST be implemented as well. 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"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-coap-usage">
      <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"/>) and block-wise transfer (see <xref target="sec-block-wise"/>).</t>
      <t>How CoAP group messages are carried over various transport layers is the subject of <xref target="sec-transport"/>. Finally, <xref target="sec-other-protocols"/> covers the interworking of CoAP group communication with other protocols that may operate in the same network.</t>
      <section anchor="sec-request-response">
        <name>Request/Response Model</name>
        <section anchor="general">
          <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"/>.  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"/>. A server sends back a unicast response to a CoAP group request. The unicast responses received by the CoAP client may carry a mixture of success (e.g., 2.05 (Content)) and failure (e.g., 4.04 (Not Found)) response codes, depending on the individual server processing results.</t>
        </section>
        <section anchor="sec-request-response-suppress">
          <name>Response Suppression</name>
          <t>A server MAY suppress its response for various reasons given in <xref section="8.2" sectionFormat="of" target="RFC7252"/>. 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"/> can be used by a client to influence the default response suppression on the server side. It is RECOMMENDED that a server supporting this option only takes it into account when processing requests targeting selected resources, as useful in the application context.</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">
          <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"/>).</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">
          <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"/>), 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"/>, 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">
          <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"/> and updated by <xref target="RFC9175"/>. 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><![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"/>.  This specification defines MAX_SERVER_RESPONSE_DELAY as was done in <xref target="RFC7390"/>, 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"/>. 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"/>, secure binding between requests and responses is ensured (see <xref target="chap-oscore"/>). 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"/>.</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">
          <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">
        <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"/>. 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"/>:</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"/>.</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"/> and <xref target="RFC7252" section="5.6.2" sectionFormat="bare"/> of <xref target="RFC7252"/>, respectively.</t>
        <section anchor="sec-caching-freshness">
          <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"/> applies, and
the multicast caching rules of <xref section="8.2.1" sectionFormat="of" target="RFC7252"/> apply except for the one discussed below.</t>
          <t>In <xref section="8.2.1" sectionFormat="of" target="RFC7252"/> 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"/> 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 monitoring group joining protocol exchanges.</t>
          <t>For caching at proxies, the freshness model defined in <xref target="I-D.tiloca-core-groupcomm-proxy"/>  can be used.</t>
        </section>
        <section anchor="sec-caching-validation">
          <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"/> 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"/> 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"/> can be used.</t>
          <section anchor="etag-option-in-a-group-requestresponse">
            <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 where an identical ETag value is returned by two or more servers, the client, by default, SHOULD NOT include an ETag Option containing that ETag value in a group request.</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 practically prevents a collision of the ETag values from different servers in the same application group, which in turn allows the client to effectively validate a particular response of an origin server. This can be accomplished, 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"/> and <xref target="RFC7252" section="8.2.1" sectionFormat="bare"/> of <xref target="RFC7252"/>, 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">
        <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 instance, the subset may include 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 respond with an error status code or ignore the group request (see also <xref target="sec-request-response-suppress"/> on response suppression).</t>
      </section>
      <section anchor="port-selection-for-udp-transport">
        <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"/>, the default port number 5683 MUST be supported (see <xref section="7.1" sectionFormat="of" target="RFC7252"/>) for the "All CoAP Nodes" multicast group as detailed in <xref target="sec-transport"/>.</t>
      </section>
      <section anchor="sec-proxy">
        <name>Proxy Operation</name>
        <t>This section defines how proxies operate in a group communication scenario. In particular, <xref target="sec-proxy-forward"/> defines operations of forward-proxies, while <xref target="sec-proxy-reverse"/> defines operations of reverse-proxies. Furthermore, <xref target="multicasting-to-proxies"/> discusses the case where a client sends a group request to multiple proxies at once. Security operations for a proxy are discussed later in <xref target="chap-proxy-security"/>.</t>
        <section anchor="sec-proxy-forward">
          <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"/> and <xref target="RFC7252" section="8.2.2" sectionFormat="bare"/> of <xref target="RFC7252"/>.</t>
          <t>When intending to reach a CoAP group through a proxy, the client sends a unicast CoAP group request to the proxy. The group URI where the request has to be forwarded to is specified in the request, 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>
              <t>Unlike a CoAP client, the proxy is likely to lack "application context". In particular, the proxy is not expected to know how many members there are in the CoAP group (not even the order of magnitude), how many group members will actually respond, or the minimal amount/percentage of those that will respond.  </t>
              <t>
Therefore, while still capable to forward the group request to the CoAP group and the corresponding responses to the client, the proxy does not know and cannot reliably determine for how long to collect responses, before it stops forwarding them to the client.  </t>
              <t>
In principle, a CoAP client that is not using a proxy might face the same problems in collecting responses to a group request. However, unlike a CoAP proxy, the client itself would typically have application-specific rules or knowledge on how to handle this situation. For example, a CoAP client could monitor incoming responses and use this information to decide for how long to continue collecting responses</t>
            </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"/>.</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"/>.</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"/> and <xref target="RFC8075" section="10.1" sectionFormat="bare"/> of <xref target="RFC8075"/>. 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 may still be able to identify the CoAP servers by other means such as application-specific information in the response payload.</t>
          <t>A forward-proxying method for HTTP-to-CoAP proxies addressing the issues raised above is defined in <xref target="I-D.tiloca-core-groupcomm-proxy"/>.</t>
        </section>
        <section anchor="sec-proxy-reverse">
          <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"/>).</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"/>.</t>
          <t>The reverse-proxy practically stands in for a CoAP group, thus preventing the client from reaching the group as a whole with a single group request directly addressed to that group (e.g., via multicast). In addition to that, the reverse-proxy may also stand in for each of the individual servers in the CoAP group (e.g., if acting as firewall), thus also preventing the client from individually reaching any server in the group with a unicast request directly addressed to that server.</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"/> hold, with the following additions:</t>
          <ul spacing="normal">
            <li>The three issues and limitations defined in <xref target="sec-proxy-forward"/> 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"/> or other means.</li>
            <li>A reverse-proxy MAY have preconfigured time duration(s) that are used for collecting server responses and forwarding these back to the client. These duration(s) may be set as global configuration or as 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"/> is not necessarily needed. Note that a reverse-proxy is in an explicit relation with the origin servers it stands in for. Thus, compared to a forward-proxy, it has a much better basis for determining and configuring such time durations.</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"/>) 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 signaling protocol of <xref target="I-D.tiloca-core-groupcomm-proxy"/> 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 two paragraphs of <xref target="sec-proxy-forward"/> which applies also to the case of reverse-proxies.</t>
        </section>
        <section anchor="multicasting-to-proxies">
          <name>Single Group Request to Multiple Proxies</name>
          <t>A client might send a group request to multiple proxies at once (e.g., over IP multicast), so that each and every of those proxies forwards it to the group of servers. Assuming that no message loss occurs and that N proxies receive and forward the group request, this has the following implications.</t>
          <ul spacing="normal">
            <li>Each server receives N copies of the group request, i.e., one copy from each proxy.</li>
            <li>
              <t>If the NoSec mode is used (see <xref target="chap-unsecured-groupcomm"/>), each server treats each received copy of the group request as a different request from a different client. Consistently:  </t>
              <ul spacing="normal">
                <li>Each server can reply to each of the N received requests with multiple responses over time (see <xref target="sec-request-response-multi"/>). All the responses to the same received request are sent to the same proxy that has forwarded that request, which in turn relays those responses to the client.</li>
                <li>From each proxy, the client receives all the responses to the group request that each server has sent to that proxy. Even in case the client is able to distinguish the different servers originating the responses (e.g., by using the approach defined in <xref target="I-D.tiloca-core-groupcomm-proxy"/>), the client would receive the same response content originated by each server N times, as relayed by the N proxies.</li>
              </ul>
            </li>
            <li>
              <t>If secure group communication with Group OSCORE is used (see <xref target="chap-oscore"/>), each server is able to determine that each received copy of the group request is in fact originated by the same client. In particular, each server is able to determine that all such received requests are copies of exactly the same group request.  </t>
              <t>
Consistently, each server S accepts only the first copy of the group request received from one of the proxies, say P, while discarding as replay any later copies received from any other proxy.  </t>
              <t>
After that, the server S can reply to the accepted request with multiple responses over time (see <xref target="sec-request-response-multi"/>). All those responses are sent to the same proxy P that forwarded the only accepted request, and that in turn relays those responses to the client.  </t>
              <t>
As a consequence, for each server, the client receives responses originated by that server only from one proxy. That is, the client receives a certain response content only once, like in the case with only one proxy.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="sec-congestion">
        <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"/> 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"/>).</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"/>).</li>
          <li>An IP multicast request MUST be Non-confirmable (<xref section="8.1" sectionFormat="of" target="RFC7252"/>).</li>
          <li>A response to an IP multicast request SHOULD be Non-confirmable (<xref section="5.2.3" sectionFormat="of" target="RFC7252"/>).</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"/>).</li>
        </ul>
        <t>This document also defines these measures to be applicable to alternative transports (other than IP multicast), if not defined otherwise.</t>
        <t>Independently of the used transport, 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"/>) 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"/>.</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"/> 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"/>.</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">
        <name>Observing Resources</name>
        <t>The CoAP Observe Option <xref target="RFC7641"/> is a protocol extension of CoAP, which 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"/> does not mention whether the Observe Option can be combined with CoAP (multicast) group communication.</t>
        <t>This section updates <xref target="RFC7641"/> 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"/>, the same rules apply when using 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"/>, 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"/> 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"/>).</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"/>, 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"/> specified by the client in the GET or FETCH request (see <xref target="sec-request-response-suppress"/>).</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"/> 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"/> 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"/> apply. The method defined in <xref target="I-D.tiloca-core-groupcomm-proxy"/> enables group communication including resource observation through proxies and addresses those limitations.</t>
      </section>
      <section anchor="sec-block-wise">
        <name>Block-Wise Transfer</name>
        <t><xref section="2.8" sectionFormat="of" target="RFC7959"/> 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"/>, the same can be done with a multicast FETCH request.</t>
        <t>To retrieve any further blocks of the resource from a responding server, the client then has to use unicast requests, separately addressing each different server. 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"/> 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="RFC9177"/> specifies a specialized 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">
        <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">
          <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"/> 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"/>, the default port number 5683 MUST be supported as per Sections <xref target="RFC7252" section="7.1" sectionFormat="bare"/> and <xref target="RFC7252" section="12.8" sectionFormat="bare"/> of <xref target="RFC7252"/> for the "All CoAP Nodes" multicast group. An IPv6 CoAP server SHOULD support the "All CoAP Nodes" multicast group 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"/>) 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"/>.</t>
        </section>
        <section anchor="sec-6lowpan">
          <name>UDP/IPv6 Multicast Transport over 6LoWPAN</name>
          <t>In 6LoWPAN <xref target="RFC4944"/> <xref target="RFC6282"/> networks, an IPv6 packet (up to 1280 bytes) may be fragmented into multiple 6LoWPAN fragments, each fragment small enough to be carried over an IEEE 802.15.4 MAC frame (up to 127 bytes).</t>
          <t>These 6LoWPAN fragments are exchanged between 6LoWPAN nodes, potentially involving 6LoWPAN routers operating in a multi-hop network topology. Although 6LoWPAN multicast routing protocols usually define mechanisms to compensate for the loss of transmitted fragments (e.g. using link-layer unicast acknowledgements, or repeated link-layer broadcast transmissions as in MPL -- see <xref target="sec-mpl"/>) a fragment may still be lost in transit. The loss of a single fragment implies the loss of the entire IPv6 packet because the reassembly back into IPv6 packet will fail in that case. And if this fragment loss causes the application-layer retransmission of the entire multi-fragment IPv6 packet, it may happen that much of the same data is transmitted yet again over the constrained network.</t>
          <t>For this reason, the performance in terms of packet loss and throughput of using larger, multi-fragment multicast IPv6 packets is on average worse than the performance of smaller, single-fragment IPv6 multicast packets. So it is recommended to design application payloads for group communication sufficiently small: a CoAP request sent over multicast over a 6LoWPAN network interface SHOULD fit 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"/>. 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"/>) in order to discover only CoAP servers on the local 6LoWPAN network.</t>
        </section>
        <section anchor="udpipv4-multicast-transport">
          <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"/>, the default port number 5683 MUST be supported as per Sections <xref target="RFC7252" section="7.1" sectionFormat="bare"/> and <xref target="RFC7252" section="12.8" sectionFormat="bare"/> of <xref target="RFC7252"/>, 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"/>.</t>
        </section>
        <section anchor="tcp-tls-and-websockets">
          <name>TCP, TLS and WebSockets</name>
          <t>Because it supports unicast only, <xref target="RFC8323"/> (CoAP over TCP, TLS and WebSockets) has a restricted scope as a transport for CoAP group communication. This is limited to the use of block-wise transfer discussed in <xref target="sec-block-wise"/>.</t>
          <t>That is, after the first group request including the Block2 Option and sent over UDP, the following unicast CoAP requests targeting individual servers to retrieve further blocks may be sent over TCP or WebSockets, possibly protected with TLS.</t>
          <t>This requires the individually addressed servers to also support CoAP over TCP/TLS/WebSockests for the targeted resource. A server can indicate its support for multiple alternative transports, and practically enable access to its resources through either of them, by using the method defined in <xref target="I-D.ietf-core-transport-indication"/>.</t>
        </section>
        <section anchor="other-transports">
          <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>
        </section>
      </section>
      <section anchor="sec-other-protocols">
        <name>Interworking with Other Protocols</name>
        <section anchor="mldmldv2igmpigmpv3">
          <name>MLD/MLDv2/IGMP/IGMPv3</name>
          <!-- Section 4.2 of {{RFC7390}} has the original content -->

<t>A CoAP node that is an IP host (i.e., not an IP router) may be unaware of the specific IP multicast routing/forwarding protocol
being used in its network.  When such a node needs to join a specific (CoAP) multicast group, the application process would typically subscribe to the particular IP multicast group via an API method of the IP stack on the node. Then the IP stack would execute a particular (e.g. default) method to communicate its subscription to on-link IP (multicast) routers.</t>
          <t>The MLDv2 protocol <xref target="RFC3810"/> is the standard IPv6 method to communicate multicast subscriptions, when other methods are not defined. The 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 such as ones implementing either RPL (see <xref target="sec-rpl"/>) or MPL (see <xref target="sec-mpl"/>) 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"/> 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 unless another method is defined for the network interface/technology used.</t>
          <t>The guidelines from <xref target="RFC6636"/> 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">
          <name>RPL</name>
          <!-- see Section 4.3 of {{RFC7390}} for original content -->

<t>RPL <xref target="RFC6550"/> 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"/>) 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 set to a mode that supports multicast, for example 3 (Storing mode with multicast support) or 5 (Non-Storing Mode of Operation with ingress replication multicast support) defined in <xref target="I-D.ietf-6lo-multicast-registration"/>.</t>
          <t>In mode 3, RPL DAO can be used by an RPL/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 by an edge router (e.g., 6LBR) to learn CoAP group membership information of the entire RPL network, 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 learns which IP multicast traffic it needs to selectively pass through from the backbone network into the LLN subnet.  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>
          <t>See <xref target="I-D.ietf-6lo-multicast-registration"/> for more details on RPL Mode 5 and subscribing to IPv6 multicast groups using 6LoWPAN Neighbor Discovery (ND) and the Extended Address Registration Option (EARO) in RPL networks.</t>
        </section>
        <section anchor="sec-mpl">
          <name>MPL</name>
          <t>The Multicast Protocol for Low-Power and Lossy Networks (MPL) <xref target="RFC7731"/> 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 <xref target="RFC3810"/>, 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>Using 6LoWPAN Neighbor Discovery (ND) and Extended Address Registration Option (EARO) as described in <xref target="I-D.ietf-6lo-multicast-registration"/>, in a network that supports 6LoWPAN-ND, RPL and MPL.</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"/> for more details.</t>
        </section>
      </section>
    </section>
    <section anchor="chap-unsecured-groupcomm">
      <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"/>.</t>
      <t>The NoSec mode does not require and does not make use of a security group. Indications that endpoints can use the NoSec mode MUST NOT rely on setting up and advertising a pseudo security group with name "NoSec" or any of its lowercase/uppercase combinations.</t>
      <t>It is NOT RECOMMENDED to use CoAP group communication in NoSec mode.</t>
      <t>The possible, exceptional use of the NoSec mode ought to be limited to non-sensitive and non-critical applications for which it is relevant, such as early discovery of devices and resources (see <xref target="chap-security-considerations-nosec-mode"/>).</t>
      <t>Before possibly and exceptionally using the NoSec mode in such applications, the security implications in <xref target="chap-security-considerations-nosec-mode"/> must be very well considered and understood, especially as to the risk and impact of amplification attacks (see <xref target="ssec-amplification"/>). Consistently with such security implications, the use of the NoSec mode should still be avoided whenever possible.</t>
    </section>
    <section anchor="chap-oscore">
      <name>Secured Group Communication using Group OSCORE</name>
      <t>This section discusses how CoAP group communication can be secured. In particular, <xref target="chap-group-oscore"/> describes how the Group OSCORE security protocol <xref target="I-D.ietf-core-oscore-groupcomm"/> can be used to protect messages exchanged in a CoAP group, while <xref target="chap-sec-group-maintenance"/> provides guidance on required maintenance operations for OSCORE groups used as security groups.</t>
      <section anchor="chap-group-oscore">
        <name>Group OSCORE</name>
        <t>The application-layer protocol Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/> 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="RFC9052"/><xref target="RFC9053"/> 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"/> 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"/>, an administrator entity can interact with the Group Manager to create OSCORE groups and specify their configuration (see <xref target="sssec-group-creation"/>). 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"/>, a CoAP endpoint can join an OSCORE group by using the method described in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> and based on the ACE framework for Authentication and Authorization in constrained environments <xref target="RFC9200"/>.</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"/> and based on the CoRE Resource Directory <xref target="RFC9176"/>.</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"/> 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 that are configured to receive CoAP group messages sent to the particular group and -- in case of IP multicast transport -- that 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">
        <name>Secure Group Maintenance</name>
        <t>As part of group maintenance operations (see <xref target="sec-group-maintenance"/>), 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"/>). 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 read the cleartext of 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 participate 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"/>).</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"/>, and it is RECOMMENDED to perform them as defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>.</t>
      </section>
      <section anchor="chap-proxy-security">
        <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, when sending a group request 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"/>.</t>
      </section>
    </section>
    <section anchor="chap-security-considerations">
      <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">
        <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"/> for IP multicast. Moreover, as also discussed in <xref target="I-D.mattsson-t2trg-amplification-attacks"/>, the NoSec mode is susceptible to source IP address spoofing, hence amplification attacks are especially feasible and greatly effective, since a single request can result in multiple responses from multiple servers (see <xref target="ssec-amplification"/>).</t>
        <t>Therefore, 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"/>.</t>
        <t>Exceptionally, and only after the security implications have been very well considered and understood, some non-sensitive and non-critical applications may rely on a limited and well-defined use of the NoSec mode.</t>
        <t>For example, early discovery of devices and resources is a typical use case where the NoSec mode is relevant to use. 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"/>).</t>
        <t>As a further example, the NoSec mode may be relevant to use in non-critical applications that neither involve nor 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 important decisions on.</t>
        <t>Except for the class of applications discussed above, and all the more so in sensitive and mission-critical applications (e.g., health monitoring systems and alarm monitoring systems), CoAP group communication MUST NOT be used in NoSec mode.</t>
      </section>
      <section anchor="chap-security-considerations-sec-mode">
        <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"/>. The same security considerations from <xref section="11" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> hold for this specification.</t>
        <section anchor="chap-security-considerations-sec-mode-key-mgmt">
          <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"/>). 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"/>.</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 frequently joining and leaving, and at the same time a single group rekeying instance taking 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 from paralyzing communications in the group, when a slow rekeying scheme is used and frequently invoked.</t>
          <t>At the same time, the security implications of delaying the rekeying process have to be carefully considered and understood before employing 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 retain access to group communications protected with the existing security material.</t>
        </section>
        <section anchor="chap-security-considerations-sec-mode-sauth">
          <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 signed 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">
          <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"/>, 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"/>). 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"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="9" sectionFormat="bare"/> of <xref target="I-D.ietf-core-oscore-groupcomm"/>), 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"/> of this document and <xref section="11.3" sectionFormat="of" target="RFC7252"/>), thanks to the handling of protected group requests on the server side. That is, upon receiving a group request protected with Group OSCORE, a server verifies whether the request is not a replay, and whether it originates from the alleged sender in the OSCORE group.  </t>
              <t>
In order to perform the latter check of source authentication, the server either: i) verifies the signature included in the request by using the public key of the client, when the request is protected using the group mode (see <xref section="8.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>); or ii) decrypts and verifies the request by means of an additionally derived pairwise key associated with the client, when the request is protected using the pairwise mode (see <xref section="9.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).  </t>
              <t>
As also discussed in <xref section="8" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, it is recommended that, when failing to decrypt and verify an incoming group request protected with the group mode, a server does not send back any error message in case any of the following holds: the server determines that the request was indeed sent to the whole CoAP group (e.g., over IP multicast); or the server is not able to determine it altogether.  </t>
              <t>
Such a message processing on the server 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 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"/> 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 (authenticated) device. 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 response.</t>
            </li>
            <li>
              <t>Group OSCORE limits the impact of attacks based on IP spoofing over IP multicast (see <xref section="11.4" sectionFormat="of" target="RFC7252"/>). 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"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="8.3" sectionFormat="bare"/> of <xref target="I-D.ietf-core-oscore-groupcomm"/>), 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"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="9.5" sectionFormat="bare"/> of <xref target="I-D.ietf-core-oscore-groupcomm"/>). 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"/>, 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"/>), 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"/>). 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 making any single group member a target for subverting security in the whole OSCORE group (see <xref section="11.6" sectionFormat="of" target="RFC7252"/>), 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">
        <name>Risk of Amplification</name>
        <t><xref section="11.3" sectionFormat="of" target="RFC7252"/> 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"/>, 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, possibly employing CoAP block-wise transfers <xref target="RFC7959"/> to reduce the amount of amplification.</li>
        </ul>
        <t>Amplification attacks using CoAP are further discussed in <xref target="I-D.mattsson-t2trg-amplification-attacks"/>, which also highlights how the amplification factor would become even higher when CoAP group communication is combined with resource observation <xref target="RFC7641"/>. 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"/>, 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, also in order to prevent an easy proliferation of high-volume amplification attacks, it is generally NOT RECOMMENDED to use CoAP group communication in NoSec mode (see <xref target="chap-security-considerations-nosec-mode"/>).</t>
        <t>Besides requiring that the security implications in <xref target="chap-security-considerations-nosec-mode"/> are very well understood, exceptions should be carefully limited to non-sensitive and non-critical use cases where accesses to a group resource 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="RFC9176"/>, 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 that are the 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"/>, see <xref target="chap-oscore"/>. As discussed in <xref target="chap-security-considerations-sec-mode-attacks"/>, this limits the feasibility and impact of amplification attacks.</t>
      </section>
      <section anchor="replay-of-non-confirmable-messages">
        <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 each 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 based on the Echo Option for CoAP defined in <xref target="RFC9175"/> as described in Section 10 of <xref target="I-D.ietf-core-oscore-groupcomm"/>, in order to (re-)synchronize with the client's sequence number.</t>
      </section>
      <section anchor="use-of-coap-no-response-option">
        <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"/>), the CoAP No-Response Option <xref target="RFC7967"/> could be misused by a malicious client to evoke as many responses from servers to a group request as possible, by using the value '0' -- Interested in all responses. This might even override 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"/>).</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">
        <name>6LoWPAN and MPL</name>
        <t>In a 6LoWPAN network, the MPL <xref target="RFC7731"/> protocol may be used to forward multicast packets throughout the network. A 6LoWPAN Router that forwards a large IPv6 packet may have a relatively high impact on the occupation of the wireless channel because sending a large packet consists of the transmission of multiple link-layer IEEE 802.15.4 frames. Also, a constrained 6LoWPAN Router may experience a high memory load due to buffering of the large packet -- MPL requires an MPL Forwarder to store the packet for a longer duration, to allow multiple forwarding transmissions to neighboring Forwarders. This could allow an attacker on the 6LoWPAN network or outside the 6LoWPAN network to execute a Denial of Service (DoS) attack by sending large IPv6 multicast packets. This is also an amplification attack in general, because each of potentially multiple MPL Forwarder(s) repeats the transmission of the IPv6 packet potentially multiple times, hence amplifying the original amount of data sent by the attacker considerably.</t>
        <t>The amplication factor may be even further increased by the loss of link-layer frames. 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 it will likely at a future point in time trigger a neighboring MPL Forwarder to send the IPv6 packet (fragments) again, because its internal state marks this packet (that it failed to received previously) still as a "new" IPv6 packet. Hence this leads to an MPL Forwarder signaling to neighbors its "old" state, triggering additional transmission(s) of all packet fragments.</t>
        <t>For these reasons, a large IPv6 multicast packet is a possible attack vector in a Denial of Service (DoS) amplification attack on a 6LoWPAN network. See <xref target="ssec-amplification"/> of this document and <xref section="11.3" sectionFormat="of" target="RFC7252"/> 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"/> 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 criterion 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">
        <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"/>).  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">
        <name>Monitoring</name>
        <section anchor="general-monitoring">
          <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.
   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">
          <name>Pervasive Monitoring</name>
          <t>CoAP traffic is typically used for the Internet of Things, and CoAP (multicast) group communication may specifically be used for conveniently controlling and monitoring critical infrastructure (e.g., lights, alarms, HVAC, electrical grid, etc.).</t>
          <t>However, this may be a prime target of pervasive monitoring attacks <xref target="RFC7258"/>, which have to be considered as a key additional threat for group communication. 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 instance, the source node (controller) sends out CoAP group messages, which easily identifies it as a controller.</t>
          <t>CoAP group communication built on top of IP multicast is inherently more vulnerable compared to communications solely relying on IP unicast, since the same packet may be replicated over many multiple links. In particular, this yields a higher probability of packet capture by a pervasive monitoring system, which in turn results in more information available to analyze within the same time interval. Moreover, a single CoAP group request potentially results in multiple CoAP responses, thus further contributing to the information available to analyze.</t>
          <t>This requires CoAP group communication solutions that are built on top of IP multicast to pay particular attention to these dangers.</t>
          <t>In order to limit the ease of interception of group communication messages, 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
   <xref target="sec-congestion"/> to minimize the scope. Thus, for example, realm-local IP multicast scope is always preferred over site-local scope IP multicast, if it fulfills the application needs.</t>
          <t>Even if CoAP group communications are encrypted/protected (see <xref target="chap-oscore"/>), 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">
      <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">
          <front>
            <title>Requirements for Internet Hosts - Communication Layers</title>
            <author fullname="R. Braden" initials="R." role="editor" surname="Braden">
              <organization/>
            </author>
            <date month="October" year="1989"/>
            <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">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC3376" target="https://www.rfc-editor.org/info/rfc3376">
          <front>
            <title>Internet Group Management Protocol, Version 3</title>
            <author fullname="B. Cain" initials="B." surname="Cain">
              <organization/>
            </author>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <author fullname="I. Kouvelas" initials="I." surname="Kouvelas">
              <organization/>
            </author>
            <author fullname="B. Fenner" initials="B." surname="Fenner">
              <organization/>
            </author>
            <author fullname="A. Thyagarajan" initials="A." surname="Thyagarajan">
              <organization/>
            </author>
            <date month="October" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3376"/>
          <seriesInfo name="DOI" value="10.17487/RFC3376"/>
        </reference>
        <reference anchor="RFC4443" target="https://www.rfc-editor.org/info/rfc4443">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta">
              <organization/>
            </author>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta">
              <organization/>
            </author>
            <date month="March" year="2006"/>
            <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">
          <front>
            <title>Transmission of IPv6 Packets over IEEE 802.15.4 Networks</title>
            <author fullname="G. Montenegro" initials="G." surname="Montenegro">
              <organization/>
            </author>
            <author fullname="N. Kushalnagar" initials="N." surname="Kushalnagar">
              <organization/>
            </author>
            <author fullname="J. Hui" initials="J." surname="Hui">
              <organization/>
            </author>
            <author fullname="D. Culler" initials="D." surname="Culler">
              <organization/>
            </author>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document describes the frame format for transmission of IPv6 packets and the method of forming IPv6 link-local addresses and statelessly autoconfigured addresses on IEEE 802.15.4 networks. Additional specifications include a simple header compression scheme using shared context and provisions for packet delivery in IEEE 802.15.4 meshes.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4944"/>
          <seriesInfo name="DOI" value="10.17487/RFC4944"/>
        </reference>
        <reference anchor="RFC6282" target="https://www.rfc-editor.org/info/rfc6282">
          <front>
            <title>Compression Format for IPv6 Datagrams over IEEE 802.15.4-Based Networks</title>
            <author fullname="J. Hui" initials="J." role="editor" surname="Hui">
              <organization/>
            </author>
            <author fullname="P. Thubert" initials="P." surname="Thubert">
              <organization/>
            </author>
            <date month="September" year="2011"/>
            <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">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links.  Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type.  "RESTful" refers to the Representational State Transfer (REST) architecture.  A well-known URI is defined as a default entry point for requesting the links hosted by a server.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7641" target="https://www.rfc-editor.org/info/rfc7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC7959" target="https://www.rfc-editor.org/info/rfc7959">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby">
              <organization/>
            </author>
            <date month="August" year="2016"/>
            <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">
          <front>
            <title>Guidelines for Mapping Implementations: HTTP to the Constrained Application Protocol (CoAP)</title>
            <author fullname="A. Castellani" initials="A." surname="Castellani">
              <organization/>
            </author>
            <author fullname="S. Loreto" initials="S." surname="Loreto">
              <organization/>
            </author>
            <author fullname="A. Rahman" initials="A." surname="Rahman">
              <organization/>
            </author>
            <author fullname="T. Fossati" initials="T." surname="Fossati">
              <organization/>
            </author>
            <author fullname="E. Dijk" initials="E." surname="Dijk">
              <organization/>
            </author>
            <date month="February" year="2017"/>
            <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">
          <front>
            <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="A. Sehgal" initials="A." surname="Sehgal">
              <organization/>
            </author>
            <date month="April" year="2017"/>
            <abstract>
              <t>The methods defined in RFC 7252 for the Constrained Application Protocol (CoAP) only allow access to a complete resource, not to parts of a resource.  In case of resources with larger or complex data, or in situations where resource continuity is required, replacing or requesting the whole resource is undesirable.  Several applications using CoAP need to access parts of the resources.</t>
              <t>This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH, which are used to access and update parts of a resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8132"/>
          <seriesInfo name="DOI" value="10.17487/RFC8132"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8613" target="https://www.rfc-editor.org/info/rfc8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson">
              <organization/>
            </author>
            <author fullname="F. Palombini" initials="F." surname="Palombini">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE).  OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration.  Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC9052" target="https://www.rfc-editor.org/info/rfc9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size.  There is a need to be able to define basic security services 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.  </t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9053" target="https://www.rfc-editor.org/info/rfc9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services 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 9052). </t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
        <reference anchor="RFC9175" target="https://www.rfc-editor.org/info/rfc9175">
          <front>
            <title>Constrained Application Protocol (CoAP): Echo, Request-Tag, and Token Processing</title>
            <author fullname="C. Amsüss" initials="C." surname="Amsüss">
              <organization/>
            </author>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <date month="February" year="2022"/>
            <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" target="https://www.ietf.org/archive/id/draft-ietf-core-oscore-groupcomm-17.txt">
          <front>
            <title>Group OSCORE - Secure Group Communication for CoAP</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <date day="20" month="December" 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-17"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.tiloca-core-groupcomm-proxy" target="https://www.ietf.org/archive/id/draft-tiloca-core-groupcomm-proxy-07.txt">
          <front>
            <title>Proxy Operations for CoAP Group Communication</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="5" month="September" 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-07"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore" target="https://www.ietf.org/archive/id/draft-ietf-ace-key-groupcomm-oscore-15.txt">
          <front>
            <title>Key Management for OSCORE Groups in ACE</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="5" month="September" year="2022"/>
            <abstract>
              <t>   This document defines an application profile of the ACE framework for
   Authentication and Authorization, to request and provision keying
   material in group communication scenarios that are based on CoAP and
   are secured with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  This application profile delegates the
   authentication and authorization of Clients, that join an OSCORE
   group through a Resource Server acting as Group Manager for that
   group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication and proof-of-possession for a key owned by the Client
   and bound to an OAuth 2.0 Access Token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-15"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-discovery" target="https://www.ietf.org/archive/id/draft-tiloca-core-oscore-discovery-12.txt">
          <front>
            <title>Discovery of OSCORE Groups with the CoRE Resource Directory</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
              <organization>Consultant</organization>
            </author>
            <date day="5" month="September" 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-12"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oscore-gm-admin" target="https://www.ietf.org/archive/id/draft-ietf-ace-oscore-gm-admin-07.txt">
          <front>
            <title>Admin Interface for the OSCORE Group Manager</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
              <organization>Consultant</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="24" month="October" 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-07"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pubsub" target="https://www.ietf.org/archive/id/draft-ietf-core-coap-pubsub-11.txt">
          <front>
            <title>Publish-Subscribe Broker for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>SmartThings</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Jaime Jimenez" initials="J." surname="Jimenez">
              <organization>Ericsson</organization>
            </author>
            <date day="7" month="November" year="2022"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP), and related extensions
   are intended to support machine-to-machine communication in systems
   where one or more nodes are resource constrained, in particular for
   low power wireless sensor networks.  This document defines a publish-
   subscribe Broker for CoAP that extends the capabilities of CoAP for
   supporting nodes with long breaks in connectivity and/or up-time.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-11"/>
        </reference>
        <reference anchor="I-D.ietf-core-transport-indication" target="https://www.ietf.org/archive/id/draft-ietf-core-transport-indication-01.txt">
          <front>
            <title>CoAP Protocol Indication</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="11" month="July" year="2022"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP, [RFC7252]) is available
   over different transports (UDP, DTLS, TCP, TLS, WebSockets), but
   lacks a way to unify these addresses.  This document provides
   terminology and provisions based on Web Linking [RFC8288] to express
   alternative transports available to a device, and to optimize
   exchanges using these.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-transport-indication-01"/>
        </reference>
        <reference anchor="I-D.mattsson-t2trg-amplification-attacks" target="https://www.ietf.org/archive/id/draft-mattsson-t2trg-amplification-attacks-01.txt">
          <front>
            <title>Amplification Attacks Using the Constrained Application Protocol (CoAP)</title>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
              <organization>Energy Harvesting Solutions</organization>
            </author>
            <date day="9" month="November" 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-01"/>
        </reference>
        <reference anchor="I-D.ietf-6lo-multicast-registration" target="https://www.ietf.org/archive/id/draft-ietf-6lo-multicast-registration-12.txt">
          <front>
            <title>IPv6 Neighbor Discovery Multicast and Anycast Address Listener Subscription</title>
            <author fullname="Pascal Thubert" initials="P." surname="Thubert">
              <organization>Cisco Systems, Inc</organization>
            </author>
            <date day="22" month="November" year="2022"/>
            <abstract>
              <t>   This document updates the 6LoWPAN extensions to IPv6 Neighbor
   Discovery (RFC 8505) to enable a listener to subscribe to an IPv6
   anycast or multicast address; the document updates RPL (RFC 6550) to
   add a new Non-Storing Multicast Mode and a new support for anycast
   addresses in Storing and Non-Storing Modes.  This document extends
   RFC 9010 to enable the 6LR to inject the anycast and multicast
   addresses in RPL.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-6lo-multicast-registration-12"/>
        </reference>
        <reference anchor="RFC3810" target="https://www.rfc-editor.org/info/rfc3810">
          <front>
            <title>Multicast Listener Discovery Version 2 (MLDv2) for IPv6</title>
            <author fullname="R. Vida" initials="R." role="editor" surname="Vida">
              <organization/>
            </author>
            <author fullname="L. Costa" initials="L." role="editor" surname="Costa">
              <organization/>
            </author>
            <date month="June" year="2004"/>
            <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="RFC6092" target="https://www.rfc-editor.org/info/rfc6092">
          <front>
            <title>Recommended Simple Security Capabilities in Customer Premises Equipment (CPE) for Providing Residential IPv6 Internet Service</title>
            <author fullname="J. Woodyatt" initials="J." role="editor" surname="Woodyatt">
              <organization/>
            </author>
            <date month="January" year="2011"/>
            <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">
          <front>
            <title>RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks</title>
            <author fullname="T. Winter" initials="T." role="editor" surname="Winter">
              <organization/>
            </author>
            <author fullname="P. Thubert" initials="P." role="editor" surname="Thubert">
              <organization/>
            </author>
            <author fullname="A. Brandt" initials="A." surname="Brandt">
              <organization/>
            </author>
            <author fullname="J. Hui" initials="J." surname="Hui">
              <organization/>
            </author>
            <author fullname="R. Kelsey" initials="R." surname="Kelsey">
              <organization/>
            </author>
            <author fullname="P. Levis" initials="P." surname="Levis">
              <organization/>
            </author>
            <author fullname="K. Pister" initials="K." surname="Pister">
              <organization/>
            </author>
            <author fullname="R. Struik" initials="R." surname="Struik">
              <organization/>
            </author>
            <author fullname="JP. Vasseur" initials="JP." surname="Vasseur">
              <organization/>
            </author>
            <author fullname="R. Alexander" initials="R." surname="Alexander">
              <organization/>
            </author>
            <date month="March" year="2012"/>
            <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">
          <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 fullname="H. Asaeda" initials="H." surname="Asaeda">
              <organization/>
            </author>
            <author fullname="H. Liu" initials="H." surname="Liu">
              <organization/>
            </author>
            <author fullname="Q. Wu" initials="Q." surname="Wu">
              <organization/>
            </author>
            <date month="May" year="2012"/>
            <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">
          <front>
            <title>Pervasive Monitoring Is an Attack</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <date month="May" year="2014"/>
            <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">
          <front>
            <title>IPv6 Multicast Address Scopes</title>
            <author fullname="R. Droms" initials="R." surname="Droms">
              <organization/>
            </author>
            <date month="August" year="2014"/>
            <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">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="A. Rahman" initials="A." role="editor" surname="Rahman">
              <organization/>
            </author>
            <author fullname="E. Dijk" initials="E." role="editor" surname="Dijk">
              <organization/>
            </author>
            <date month="October" year="2014"/>
            <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">
          <front>
            <title>Multicast Protocol for Low-Power and Lossy Networks (MPL)</title>
            <author fullname="J. Hui" initials="J." surname="Hui">
              <organization/>
            </author>
            <author fullname="R. Kelsey" initials="R." surname="Kelsey">
              <organization/>
            </author>
            <date month="February" year="2016"/>
            <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">
          <front>
            <title>Constrained Application Protocol (CoAP) Option for No Server Response</title>
            <author fullname="A. Bhattacharyya" initials="A." surname="Bhattacharyya">
              <organization/>
            </author>
            <author fullname="S. Bandyopadhyay" initials="S." surname="Bandyopadhyay">
              <organization/>
            </author>
            <author fullname="A. Pal" initials="A." surname="Pal">
              <organization/>
            </author>
            <author fullname="T. Bose" initials="T." surname="Bose">
              <organization/>
            </author>
            <date month="August" year="2016"/>
            <abstract>
              <t>There can be machine-to-machine (M2M) scenarios where server responses to client requests are redundant.  This kind of open-loop exchange (with no response path from the server to the client) may be desired to minimize resource consumption in constrained systems while updating many resources simultaneously or performing high-frequency updates. CoAP already provides Non-confirmable (NON) messages that are not acknowledged by the recipient.  However, the request/response semantics still require the server to respond with a status code indicating "the result of the attempt to       understand and satisfy the request", per RFC 7252.</t>
              <t>This specification introduces a CoAP option called 'No-Response'. Using this option, the client can explicitly express to the server its disinterest in all responses against the particular request. This option also provides granular control to enable expression of disinterest to a particular response class or a combination of response classes.  The server MAY decide to suppress the response by not transmitting it back to the client according to the value of the No-Response option in the request.  This option may be effective for both unicast and multicast requests.  This document also discusses a few examples of applications that benefit from this option.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7967"/>
          <seriesInfo name="DOI" value="10.17487/RFC7967"/>
        </reference>
        <reference anchor="RFC8323" target="https://www.rfc-editor.org/info/rfc8323">
          <front>
            <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="S. Lemay" initials="S." surname="Lemay">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="B. Silverajan" initials="B." surname="Silverajan">
              <organization/>
            </author>
            <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor">
              <organization/>
            </author>
            <date month="February" year="2018"/>
            <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">
          <front>
            <title>Multipart Content-Format for the Constrained Application Protocol (CoAP)</title>
            <author fullname="T. Fossati" initials="T." surname="Fossati">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="February" year="2020"/>
            <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="RFC9019" target="https://www.rfc-editor.org/info/rfc9019">
          <front>
            <title>A Firmware Update Architecture for Internet of Things</title>
            <author fullname="B. Moran" initials="B." surname="Moran">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="D. Brown" initials="D." surname="Brown">
              <organization/>
            </author>
            <author fullname="M. Meriac" initials="M." surname="Meriac">
              <organization/>
            </author>
            <date month="April" year="2021"/>
            <abstract>
              <t>Vulnerabilities in Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism suitable for devices with resource constraints. Incorporating such an update mechanism is a fundamental requirement for fixing vulnerabilities, but it also enables other important capabilities such as updating configuration settings and adding new functionality.</t>
              <t>In addition to the definition of terminology and an architecture, this document provides the motivation for the standardization of a manifest format as a transport-agnostic means for describing and protecting firmware updates.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9019"/>
          <seriesInfo name="DOI" value="10.17487/RFC9019"/>
        </reference>
        <reference anchor="RFC9176" target="https://www.rfc-editor.org/info/rfc9176">
          <front>
            <title>Constrained RESTful Environments (CoRE) Resource Directory</title>
            <author fullname="C. Amsüss" initials="C." role="editor" surname="Amsüss">
              <organization/>
            </author>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="M. Koster" initials="M." surname="Koster">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok">
              <organization/>
            </author>
            <date month="April" year="2022"/>
            <abstract>
              <t>In many Internet of Things (IoT) applications, direct discovery of resources is not practical due to sleeping nodes or networks where multicast traffic is inefficient. These problems can be solved by employing an entity called a Resource Directory (RD), which contains information about resources held on other servers, allowing lookups to be performed for those resources. The input to an RD is composed of links, and the output is composed of links constructed from the information stored in the RD. This document specifies the web interfaces that an RD supports for web servers to discover the RD and to register, maintain, look up, and remove information on resources. Furthermore, new target attributes useful in conjunction with an RD are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9176"/>
          <seriesInfo name="DOI" value="10.17487/RFC9176"/>
        </reference>
        <reference anchor="RFC9177" target="https://www.rfc-editor.org/info/rfc9177">
          <front>
            <title>Constrained Application Protocol (CoAP) Block-Wise Transfer Options Supporting Robust Transmission</title>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair">
              <organization/>
            </author>
            <author fullname="J. Shallow" initials="J." surname="Shallow">
              <organization/>
            </author>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document specifies alternative Constrained Application Protocol (CoAP) block-wise transfer options: Q-Block1 and Q-Block2.</t>
              <t>These options are similar to, but distinct from, the CoAP Block1 and Block2 options defined in RFC 7959. The Q-Block1 and Q-Block2 options are not intended to replace the Block1 and Block2 options but rather have the goal of supporting Non-confirmable (NON) 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="RFC" value="9177"/>
          <seriesInfo name="DOI" value="10.17487/RFC9177"/>
        </reference>
        <reference anchor="RFC9124" target="https://www.rfc-editor.org/info/rfc9124">
          <front>
            <title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
            <author fullname="B. Moran" initials="B." surname="Moran">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz">
              <organization/>
            </author>
            <date month="January" year="2022"/>
            <abstract>
              <t>Vulnerabilities with Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism that is also suitable for constrained devices. Ensuring that devices function and remain secure over their service lifetime requires such an update mechanism to fix vulnerabilities, update configuration settings, and add new functionality.</t>
              <t>One component of such a firmware update is a concise and machine-processable metadata document, or manifest, that describes the firmware image(s) and offers appropriate protection. This document describes the information that must be present in the manifest.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9124"/>
          <seriesInfo name="DOI" value="10.17487/RFC9124"/>
        </reference>
        <reference anchor="RFC9200" target="https://www.rfc-editor.org/info/rfc9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem">
              <organization/>
            </author>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices.  Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="Californium" target="https://github.com/eclipse/californium">
          <front>
            <title>Eclipse Californium</title>
            <author>
              <organization>Eclipse Foundation</organization>
            </author>
            <date year="2022" month="June"/>
          </front>
        </reference>
        <reference anchor="Go-CoAP" target="https://github.com/go-ocf/go-coap">
          <front>
            <title>Go-CoAP</title>
            <author>
              <organization>Open Connectivity Foundation (OCF)</organization>
            </author>
            <date year="2022" month="June"/>
          </front>
        </reference>
        <reference anchor="libcoap" target="https://github.com/obgm/libcoap">
          <front>
            <title>libcoap</title>
            <author initials="O." surname="Bergmann" fullname="Olaf Bergmann">
              <organization>TZI</organization>
            </author>
            <date year="2022" month="June"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="appendix-usecases">
      <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">
        <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="RFC9176"/>; and there may be other types of directories that can be used with CoAP.</t>
        <section anchor="sec-uc-dd">
          <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"/>) and the CoAP query interface defined in <xref section="4" sectionFormat="of" target="RFC6690"/> to find these particular resources.</t>
        </section>
        <section anchor="sec-uc-sd">
          <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"/>) and the CoAP query interface defined in <xref section="4" sectionFormat="of" target="RFC6690"/>.</t>
        </section>
        <section anchor="sec-uc-dirdiscovery">
          <name>Directory Discovery</name>
          <t>This use case is a specific subcase of Distributed Service Discovery (<xref target="sec-uc-sd"/>), 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"/> showed an example of discovering a CoRE Resource Directory using CoAP group communication. As defined in <xref target="RFC9176"/>, 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">
        <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">
          <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"/> and <xref target="RFC7390" section="3.5" sectionFormat="bare"/> of <xref target="RFC7390"/> showed examples of lighting control of a group of 6LoWPAN-connected lights.</t>
        </section>
        <section anchor="device-group-status-request">
          <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">
          <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"/>) 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">
          <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">
        <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, e.g., by relying on the SUIT firmware update architecture <xref target="RFC9019"/> and its manifest information model <xref target="RFC9124"/>. 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-app-group-naming">
      <name>Examples of Group Naming for Application Groups</name>
      <t>This section provides examples for the different methods that can be used to name application groups, as defined in <xref target="sec-groupnaming-app"/>.</t>
      <t>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.</t>
      <t>Note that a group hostname is used here to have better-readable examples. As discussed in <xref target="sec-groupnaming-app"/> when considering the authority component and its host subcomponent in the Group URI, 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.</t>
      <t>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>
      <section anchor="sec-examples-app-group-naming-path">
        <name>Group Naming using the URI Path Component</name>
        <t><xref target="fig-gname-path-example"/> provides an example where the URI path component is used for naming application groups.</t>
        <figure anchor="fig-gname-path-example">
          <name>Example of application group name in URI path (1/2)</name>
          <artwork><![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>
        <t><xref target="fig-gname-path-example-2"/> provides a different example, where an IPv6 literal address and the default CoAP port number 5683 are used in the authority component, which yields a compact CoAP request. Also the resource structure is different in this example.</t>
        <figure anchor="fig-gname-path-example-2">
          <name>Example of application group name in URI path (2/2)</name>
          <artwork><![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>
      </section>
      <section anchor="sec-examples-app-group-naming-query">
        <name>Group Naming using the URI Query Component</name>
        <t><xref target="fig-gname-query1-example"/> provides an example where the URI query component is used for naming application groups. In particular, it considers the first alternative discussed in <xref target="sec-groupnaming-app"/>, where the URI query component consists of only one parameter, which has no value and has the name of the application group as its own identifier.</t>
        <figure anchor="fig-gname-query1-example">
          <name>Example of application group name in URI query (1/2)</name>
          <artwork><![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>
        <t><xref target="fig-gname-query2-example"/> provides another example, which considers the second alternative discussed in <xref target="sec-groupnaming-app"/>. In particular, the URI query component includes a query parameter "gp" as designated indicator, with value the name of the application group.</t>
        <figure anchor="fig-gname-query2-example">
          <name>Example of application group name in URI query (2/2)</name>
          <artwork><![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>
      </section>
      <section anchor="sec-examples-app-group-naming-authority">
        <name>Group Naming using the URI Authority Component</name>
        <t><xref target="fig-gname-auth-example"/> provides an example where the URI authority component as a whole is used for naming application groups.</t>
        <figure anchor="fig-gname-auth-example">
          <name>Example of application group name in URI authority</name>
          <artwork><![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>
      </section>
      <section anchor="sec-examples-app-group-naming-host">
        <name>Group Naming using the URI Host Subcomponent</name>
        <t><xref target="fig-gname-host-example"/> provides an example where the URI host subcomponent of the URI authority component is used for naming application groups.</t>
        <figure anchor="fig-gname-host-example">
          <name>Example of application group name in URI host</name>
          <artwork><![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>
      </section>
      <section anchor="sec-examples-app-group-naming-port">
        <name>Group Naming using the URI Port Subcomponent</name>
        <t><xref target="fig-gname-port-example"/> provides an example where the URI port subcomponent of the URI authority component is used for naming application groups.</t>
        <figure anchor="fig-gname-port-example">
          <name>Example of application group name in URI port</name>
          <artwork><![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>
      </section>
      <section anchor="sec-examples-app-group-naming-option">
        <name>Group Naming using a Custom CoAP Option</name>
        <t><xref target="fig-gname-custom-option-example"/> provides an example where a new, custom CoAP Option, namely App-Group-Name, is used for naming application groups.</t>
        <figure anchor="fig-gname-custom-option-example">
          <name>Example of application group name in a new CoAP Option</name>
          <artwork><![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>
      </section>
    </section>
    <section anchor="sec-examples-group-discovery">
      <name>Examples of Group Discovery from CoAP Servers</name>
      <t>This section provides examples for the different methods that a CoAP client can use to discover application groups and CoAP groups by interecting with CoAP servers, as defined in <xref target="sssec-discovery-from-servers"/>.</t>
      <t>The examples build on the same assumptions considered in <xref target="sssec-discovery-from-servers"/>. In addition, a CoAP group is used and is identified by the URI authority grp.example.org:5685.</t>
      <section anchor="sec-examples-group-discovery-1">
        <name>Application Groups Associated with a CoAP Group</name>
        <t><xref target="fig-app-gp-discovery-example1"/> provides an example where a CoAP client discovers all the application groups associated with a specific CoAP group.</t>
        <t>As a result, 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>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>
        <figure anchor="fig-app-gp-discovery-example1">
          <name>Discovery of application groups associated with a CoAP group</name>
          <artwork><![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>
      </section>
      <section anchor="sec-examples-group-discovery-2">
        <name>Members of a Given Application Group</name>
        <t><xref target="fig-app-gp-discovery-example2"/> provides an example where a CoAP client discovers the CoAP servers that are members of a specific application group and the CoAP group associated with the application group.</t>
        <t>Note that, unlike in the example shown in <xref target="sec-examples-group-discovery-1"/>, now the servers need to respond with an absolute URI and not a relative URI. This is necessary because the responding CoAP endpoint serving the Link Format document (on port 5683) is a different CoAP endpoint from the one hosting the group resource "gp1" (on port 5685). Due to this situation, the responding server includes the full (absolute) URI in the Link Format response from which the client can conveniently gain knowledge of the CoAP group.</t>
        <t>Also note that a server could equally well respond with the literal IPv6 multicast address within square brackets instead of the CoAP group name "grp.example.org". In that case, the client would still gain knowledge of the CoAP group, albeit in a different representation.</t>
        <figure anchor="fig-app-gp-discovery-example2">
          <name>Discovery of members of an application group, together with the associated CoAP group</name>
          <artwork><![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>
      </section>
      <section anchor="sec-examples-group-discovery-3">
        <name>Members of any Application Group of a Given Type</name>
        <t><xref target="fig-app-gp-discovery-example3"/> provides an example where a CoAP client  discovers the CoAP servers that are members of any application group of a specific type, and the CoAP group associated with those application groups.</t>
        <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><![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>
      </section>
      <section anchor="sec-examples-group-discovery-4">
        <name>Members of any Application Group in the Network</name>
        <t><xref target="fig-app-gp-discovery-example4"/> provides an example where a CoAP client discovers the CoAP servers that are members of any application group configured in the 6LoWPAN wireless mesh network of the client, and the CoAP group associated with each application group. In this example, the scope is realm-local to address all servers in the current 6LoWPAN wireless mesh network of the client.</t>
        <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><![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>Alternatively, some applications may use the "rt" attribute on a parent resource to denote support for a particular REST API to access child resources.</t>
        <t>For instance, <xref target="fig-app-gp-discovery-example5"/> provides a different example where 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, in order 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><![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-examples-exchanges">
      <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"/>, 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><![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"/>, 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 the new representation of the "temperature" resource as payload.</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><![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"/>, 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><![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" removeInRFC="true">
      <name>Document Updates</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION.</t>
      <section anchor="sec-07-08">
        <name>Version -07 to -08</name>
        <ul spacing="normal">
          <li>Updated references.</li>
        </ul>
      </section>
      <section anchor="sec-06-07">
        <name>Version -06 to -07</name>
        <ul spacing="normal">
          <li>Updated list of changes to other documents.</li>
          <li>Added real-life context and clarifications to examples.</li>
          <li>Clarified aliasing of CoAP group names.</li>
          <li>Clarified use of security group names.</li>
          <li>Clarified response suppression.</li>
          <li>Clarified response revalidation.</li>
          <li>Clarified limitations and peculiarities when using proxies.</li>
          <li>Discussed the case of group request sent to multiple proxies at once.</li>
          <li>Discussed limited use of reliable transports with block-wise transfer.</li>
          <li>Revised text on joining CoAP groups and multicast routing.</li>
          <li>Clarified use/avoidance of the CoAP NoSec mode.</li>
          <li>Moved examples of application group naming and group discovery to appendix sections.</li>
          <li>Revised list of references.</li>
          <li>Updated list of implementations supporting group communication.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-05-06">
        <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">
        <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">
        <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">
        <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">
        <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">
        <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">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Thomas Fossati"/>, <contact fullname="Rikard Höglund"/>, <contact fullname="Jaime Jiménez"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Jim Schaad"/> and <contact fullname="Jon Shallow"/> 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:
H4sIAAAAAAAAA+S9e3fcyHUv+j8/Ba5m3WvS7iZF6jlynIQjcTw60SuiFJ/c
k7OywG6QhIUGOgCamvZY97Pf/a5dBaBJjcdOss6sxMPpRhfqsWu/92/P5/O9
m2fZg729vuyr4ln2+7bZrLPnzWq1qctF3pdNnV02bdZfF/Bp3fVtXtbFMjtd
ryv9/l3b9M2iqbL9583pu4O9/OKiLW6mx8Kn9pbNos5X8MZlm1/287LoL+eL
pi3mV/irBfxoflF28yrvi67f28vbIn+Wvaz7oq2Lfu/z1TMY5v1Z9oem/VTW
V/yuvU+fwzPzFzjwHrz3Wdb1y71uc7Equw4m0W/X8N6XZx++32suuqYq4BXP
sicPvr2/t1kvc/6vk0cns+zJ44fHe3uLZgmveJZtYIpPYSqb/rppn+1l9M9c
/p1lZQ2/OzvMXpR//GQf8hrPuk9N/HnTwoDwz8vmwwK2dVP1eb3YHtaVPbEo
++2z7GPfFovrPnzabOq+hS/eFHAkbZXXy86+LFZ5WT3LCnjb4RLe9o9l04+O
nkz6+WH2h7y+Sib9/Lqpr67g8/hLmjlt8ovyquzzMGMgjqKA3T6+f/84O8t+
KBY9nPZ5P8vON2VfZA/u309WhxR13Vw3i09F7Za4hLe/O82Ov3148nS48o81
DLaEcfGk0rXbpA9x0v/o53kIRDW+/teH2YeyahZ5sgOv83bRpF/R+t+/PD/L
Tr8bLP1ll1/+sWmX3VUOW56dnCQL/qey6/Nkpedn8+PHDx/ehxXBRlw31Wq4
5vPPxdJtkSx2hfM77Gl+/9iWh12xt1c37Qqu2k2BBPr+++fHxycn8ufJ8fG3
8ueDB08ey58PHz58oH9++/Ch/Pn45Kn+7PHjb+/Ln3gr9E+4Gvrnt4903Kf3
nzzSP48fnNifT3Tcp4+P9W3f3rfB4E/79JhHeDl/cRiYQtPFvOHZ3l5ZX/ql
4vO8EykbWbfNj9toyHxRzD8VW/cMjz82jrx5WcK/b4p2OJBObTXPl6uyHs59
0eTr+XpzAQxo+CXw07pbNy1wwHopTFKfgsX1XdfU8/6kb6/m+QpY7qU8M4fv
8sWnLhrxcdXMV3DZ4Zmun7fFVYn8WofEY396rEf5+P63dsCPHtmnjx88Dmf9
VP988NA+fRCI4cmDQAGPn+gBPzjRo3z6xN727X0jPTjgx+HPJ/bniZLItyf3
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
0v5TN+zE1FI0QwfL6f0JymHyjDaETe9dq+FsHMStMyDepUam7hE2xT1J6KEK
feTCGPBpUdk7AoHPfyGjuxAbtrPg7Qj3R91A+wyKcAmoEj5C4WAxzIkSYC16
yh9XzKTlDdaKdsyf112xWaYlGYIASQqHLIou853XFCWbPfeoia8tA0Ole2fy
fa74il/2PjSS0hblb8y4YMByO0SNNezViUyG/aY1R8yBeYkkYIG4+aFqdBQM
nZZXquXtyVSybGiGo6k2NUd8laMyLgaKKgZWkeYwmsIjcOd0zmMrmWnI8uvR
5jyCIWbxGxkd2Szawu2L6A6inYxsOlvDCSpAnjGmapRWgVNeU0uWCFyTqyAI
KKG57D8zKuUNGOJr/nRRNZul5obMGB2MR48hNfsGO+cZgI7tqtrM3nAzI1t0
KxEcDZsBHldAGeLFsAjG9KPIzvIOip66L0jzEg+UFu8tdbX5nG8ToWtmGs0W
zQSCWNOzDw4OPhtCqzY7iu8Cgwctc7JSPF56vkD9HHvnRBgwcu8OIxh6g+as
SftsS/KJVnEPmaQTSFJMj9ccn9oJVe6gGf7H+ds3c95UJNp4cAfh9wPwHwIx
YzcasfHxOYr6nEeJXoQZAyYtW7kB41ed15I8MeQkrWD+K56o4rWE0xOuopib
zCsIifby+Mdnz46OuWYD7Cv+LzzEwOtG7L4Jnid1YkYzlhmwz1yOrsvQhq4H
4KrBHI99HAal5ShOuvOF++BvzOcSNCSGGllYXM2zu6haUppt3DDPgfMmuG+f
26EvUY5llY3CpzT7cTIeG+1sIuFulyQElwSUhBirhRmzarlMwqYYRpztPu+e
g2iI253uhEVxcChq8Rn3itTSCf1GgCx71dQUHonnhFWm88V2gZzb21rdSJEy
FxohcMNaKz+RP4E5l70+/Vf2i/btpuvVXeLQJ7ydIbV9qjt3ytVinTFPGsJE
Kjsw+8teOnaB/BHEscGJdLf0h+jMYoHJs8VPGfTkw+vJfRjYvfk7dCDHmJjQ
ko4iQ4KLL55/+ZiAmbJhUoSoZEnqjgmC392LI19YRZ5unLSStmravllsp/Y5
Bt7IVxNx+eH0kBZQJyWPcd4uyfoYaajydQe+R1COKkTGDtNlYTtV+C7IcBal
r5uR9fABqWfaYb0NfyOOMy18CCc9aDeTKFWx6OSL7+SneJPEq4In6rF3Vo30
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
gktezKn+roU8Hi1ET2/3gZWVBgn7+1FWdFd3Vt7WFZWa37HiopvaW3lTV1Bw
2KUIbimLBSyura0tasz2FXKQ3gMfy7MVT2X3q+YgD82Xd56vuq1fMQfpPzQH
ebHqpj6QidRRK2KpqcSTvJfJBLqv/N7q1UtsKcTYvE3LL+wXHedXy2yldtUA
iyOdHDWLH0HX93Wdppz6L1MioCYceIF1JaVkZI9YL/U8M8gNhpDEeX8a+zbc
5m3B7vIquRwBj9cAnhokUnTtmvcjMPBNEmcYHpASNw3H/N3q+So8qXBbFj77
Ggil5+a63d1+uvegSsrhY+D7D2fk+J3aWbJTnvU7YR53u6j/rbuzixSV149h
Zx/O0Lnnzvbvv7OPT1fZ2+ruPby1c8+dHay4s/SJ5+4NnF3+uRdnr86xvv8N
rGb+rjNXP5rH1Ve1ZeLFm/6IuPrO3zxXPzz61wbe83CH5XdqTa6+83u8Ibur
bvpiM/4R3ZDe13tDHuiwVt+pyg3pPfQN0UvysDekQamav+vLbsjeipve/9pl
yCPSX+fekAc6rHvKkP7Dy5AvdEOOHvKG7K+66V+7DPlbuCEPdFj3lCH9LyJD
6JJ8kRuy0Bm28g15uuKmD34HMqTzSCz1uTfkgQ7rnjJk8EVkyKO/Ic9W3fTf
gQx59DfkgQ7rnjJksIIMWS36ZmJI66UqQqvJYm4gatWonOayBYEnTDngkbBv
dZrNoNaGsKD8OLUAD1X7HAvaFvWw9AU+AsPV4dbSn92+FMmNGzfNitHA/fj8
u6Po5Pj08v35QXT2x5PDi5Po/OTt+x9Poss3pxfRxcnR5en7d4Q++iO1HY46
3WcQ6+t0n0ffyJu6z9yfn6GyheYAkTss1qC62eDXT+nXz8yvn7o/g19DHQkc
iSRfQPYlAujIkkoqxRkO8VXxuANt6nHvkk/U52wwjn2vRRxBio3wp0f0NcB6
jtMYq62k5aEHxKo+ipWvI9/rff6TGm+EgmOogSF8q8ZHiuSjm8NQMLDsM+P0
Jp3yCrB2xr3ZTde9PJVqK6oUmxT5p5RncayNPzDGGNOkK9QM9OL2RBuO8gBR
PMUGkpWBcB5+A7TNLVItxD2ZtJGgO2GMFkY6Tz6mOCE4HUcFf8kpKmoLUrF+
XGuy3Gdw2+oHsB1/zN1mQdM1WxL1Lr9IBtjKFH/yNv9YaQzfCKksib70gQcY
hSLwySTJhuknKYYrg4UIgQZkXqffsGteKeXn8NqmmjgY4mQIXeXTeAw/Ltx0
hNyDS7RPl+ipuUT77k+8RG/iAnrT/+zPa+NKsLk37IbK3aASal9f5csJw0Ur
xHMO/UihBDvYyXnProH5TDvwCR5L/YwG2CTxFlqYbgBOMoDYSmPeIhlSo3su
mZ3M+u7H0YfkbsOwiFUIYfnj24Y9KK3M+VmtNpJ3RxYE+1LEo2nnJp5OyxIl
RpF0oOa04z6JIfIPCQ3xQIoJiwW/nfamxVUH3q7HKqOsQVR7RFT7hqj23J+f
wzu4hCdbBjemXZbDm09h/kfDxRCkFb5kqCz5NCHgm0bodATBkTyLgFCBahxX
gibWnj8hWJFyFHwm2NzIbu55MrkuYmzr7j67jYvhtrsb8G8vKWLs/u5uzTRV
UrhBHqV8xo36Fthf5+QyvpJGAgCqMF9QrHasu3Sse+ZYd92feKxrvDGi+RrW
SHMwv50hycdwGfC7f+ugwsdfl/SNJP40yArhtUQT8eAa+fNUhZPOgMh/mgLQ
Al0cPGrgph14+I6pChJeOmfwwZw1qUKGOFXBRqz5sgs5aillZuYKxDKXdL6n
ClXk1SpLYbnTfJCPqQqXsErpriFgVQbtQrdtBTMV3yqx+d/TBcXfEBDX+4uj
9+cn+O73HwG9NbkNNBpsRk+7YlWK1QitR4S2awit5/70hAaKRqHKMBWqAu6o
AIS7VYzhSkyrmWHzpVZaljOZMd+6jp35+4meBFE2pIolwSNCaCjONX9uGmwA
kxI1UGimJa5Uqd2oFUmxvYAWqxu9QxvdMxu94/78vIT/hnorCd85LPbIdz+I
AaX2u5PLoze8g5yshiLdUiErXgWUGU3jdIy0L0mI7tZQTUjhD7T6LO0O9ny4
SYag5vLuVx+UjD8URaj+moQ9Zi9aNYV6GTImacNTaRSMlwwb1iWN+J3MrusK
veP3BCMDxkZZkuBPiiIHs21Yt3y6dGw75ti67s/PDcStwovL/6/TSVPTjaoc
vUiJ1YAgTcpBkU6kTAotdLcpyKLb1DK1IP4GQ4ppyY2R61uOW4qTi7mr/TIT
R5cyAi2NeR/o+HHmpnDDfZEqNGkuC7B7NweFFSaDA1iZ2irIAcppPpkAEVB7
e/ovvsZ8v53SNB5rxRjjjyJhxl61D6YNSzbN4xFTiaCP8NnXOV9VPiRREiZx
WqBEw0+0FwtxXYRz8G1FAoOhbJYeS5hvdDiQ7cHP0PKPw8/A6OerkQxfbWT5
xmfqg0IdR0pqYF1QB4Q4+xD98ssvR9eFu6mp2+rDm/Kv/68sP0M+MHwRFwDw
4NZfuGPM5OPL6/zGaTjf5U7nnaby6Xn6AXSgN3/9v1fjWTaUj/8lhqrAf0lv
/vp/suRn/TS/BgaQzP76v6O3rNbqd+lNdOHuegxj4D7jD7Lo4joGrwt8yncj
LdCkws2AB0dJMgStjHu/EMIh4ykqSjl0SO0DgwQ8MLcPbKWRM+fH03fv3v94
6AEcE6CKzjvQFN1p/CWBxsPnp5enFydHJIe5tcabXrfX1UcuTr87vXBsxy19
83sn6adRfFUkdA1e7Pee7vegq3en04lG49lo9OT/A88fy5tElwIA

-->

</rfc>
