<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-t2trg-amplification-attacks-05" category="info" consensus="true" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="CoAP Amplification Attacks">Amplification Attacks Using the Constrained Application Protocol (CoAP)</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-t2trg-amplification-attacks-05"/>
    <author initials="J." surname="Preuß Mattsson" fullname="John Preuß Mattsson">
      <organization abbrev="Ericsson">Ericsson AB</organization>
      <address>
        <postal>
          <street>SE-164 80 Stockholm</street>
          <country>Sweden</country>
        </postal>
        <email>john.mattsson@ericsson.com</email>
      </address>
    </author>
    <author initials="G." surname="Selander" fullname="Göran Selander">
      <organization abbrev="Ericsson">Ericsson AB</organization>
      <address>
        <postal>
          <street>SE-164 80 Stockholm</street>
          <country>Sweden</country>
        </postal>
        <email>goran.selander@ericsson.com</email>
      </address>
    </author>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization>Energy Harvesting Solutions</organization>
      <address>
        <email>c.amsuess@energyharvesting.at</email>
      </address>
    </author>
    <date year="2025" month="June" day="18"/>
    <area>IRTF</area>
    <workgroup>Thing-to-Thing</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 72?>

<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>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://t2trg.github.io/t2trg-amplification-attacks/draft-irtf-t2trg-amplification-attacks.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-irtf-t2trg-amplification-attacks/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Thing-to-Thing Research Group mailing list (<eref target="mailto:t2trg@irtf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/search/?email_list=t2trg"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/t2trg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/t2trg/t2trg-amplification-attacks"/>.</t>
    </note>
  </front>
  <middle>
    <?line 85?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>One important protocol used to interact with Internet of Things (IoT)
sensors and actuators is the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>.
CoAP can be used without security in the so called NoSec mode but any
Internet-of-Things (IoT) deployment valuing security and privacy would use a
security protocol such as DTLS <xref target="RFC9147"/>, TLS <xref target="RFC8446"/>, or OSCORE <xref target="RFC8613"/>
to protect CoAP, where the choice of security protocol depends on the transport
protocol and the presence of intermediaries. The use of CoAP over UDP and DTLS is
specified in <xref target="RFC7252"/> and the use of CoAP over TCP and TLS is specified in <xref target="RFC8323"/>.
OSCORE protects CoAP end-to-end with the use of COSE <xref target="RFC8152"/> and the CoAP
Object-Security option <xref target="RFC8613"/> and can therefore be used over any
transport. Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> can be used to
protect CoAP Group Communication <xref target="I-D.ietf-core-groupcomm-bis"/>.</t>
      <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. DDoS attacks is a huge and
growing problem for services and critical infrastructure <xref target="DDoS-Infra"/>
and mitigations are costly.</t>
      <t>The document gives examples of different theoretical amplification attacks using CoAP.
When transported over UDP, the CoAP NoSec mode is susceptible to source
IP address spoofing and as a single request can result in multiple responses
from multiple servers, CoAP can have very large amplification factors.
The goal with this document is to raise awareness and understanding of amplification
attacks and to motivate mitigations suitable for constrained devices and networks. The
intent is not to suggest that CoAP is more vulnerable to amplification attacks than
other protocols.</t>
      <t>Some of the discussed attacks can be mitigated by not using
NoSec or by using the Echo option <xref target="RFC9175"/>.</t>
    </section>
    <section anchor="dos">
      <name>Amplification Attacks using CoAP</name>
      <t>In a Denial-of-Service (DoS) attack, an attacker sends a large number of requests
or responses to a target endpoint. The denial-of-service might be caused by
the target endpoint receiving a large amount of data, sending a large amount
of data, doing heavy processing, or using too much memory, etc. In a Distributed
Denial-of-Service (DDoS) attack, the request or responses come from a large
number of sources.</t>
      <t>In an amplification attack, the amplification factor is the ratio between the
total size of the data sent to the target and the total size of the data
received from the attacker. Note that in the presence of intermediaries, the
size of the data received by the target might be different than the size of
the data sent to the target and the size of the data received from the
attacker might be different than the size of the data sent from the attacker.</t>
      <t>In the attacks described in this section, the attacker sends one or more requests,
and the target receives one or more responses. By spoofing the source IP address of
the targeted victim and requesting as much information as possible from several
servers an attacker can multiply the amount of traffic and create a distributed
denial-of-service attack on the target. When transported over UDP, the CoAP NoSec
mode is susceptible to source IP address spoofing.</t>
      <t>The amplification factor and the bandwidth depend on the layer in the protocol stack that
is used for the calculation. The amplification factor and bandwidth can e.g., be calculated
using whole IP packets, UPD payloads, or CoAP payloads. The bandwidth decreases and the
amplification factor typically increases higher up in the protocol stack. The bandwidth
should be calculated using the layer that is considered to be under attack.</t>
      <t>The following sections give examples of different theoretical amplification attacks using CoAP.</t>
      <section anchor="simple-amplification-attacks">
        <name>Simple Amplification Attacks</name>
        <t>An amplification attack using a single response is illustrated in <xref target="ampsingle"/>.
If the response is c times larger than the request, the amplification factor is c.</t>
        <figure anchor="ampsingle">
          <name>Amplification attack using a single response</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="560" viewBox="0 0 560 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,224" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,104" fill="none" stroke="black"/>
                <path d="M 88,120 L 88,224" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,224" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 40,112 L 144,112" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,112 36,106.4 36,117.6" fill="black" transform="rotate(180,40,112)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="216" y="68">Code:</text>
                  <text x="260" y="68">0.01</text>
                  <text x="304" y="68">(GET)</text>
                  <text x="112" y="84">GET</text>
                  <text x="200" y="84">Uri-Path:</text>
                  <text x="268" y="84">random</text>
                  <text x="320" y="84">quote</text>
                  <text x="216" y="116">Code:</text>
                  <text x="260" y="116">2.05</text>
                  <text x="320" y="116">(Content)</text>
                  <text x="116" y="132">2.05</text>
                  <text x="204" y="132">Payload:</text>
                  <text x="264" y="132">"just</text>
                  <text x="320" y="132">because</text>
                  <text x="368" y="132">you</text>
                  <text x="400" y="132">own</text>
                  <text x="436" y="132">half</text>
                  <text x="472" y="132">the</text>
                  <text x="516" y="132">county</text>
                  <text x="280" y="148">doesn't</text>
                  <text x="332" y="148">mean</text>
                  <text x="372" y="148">that</text>
                  <text x="408" y="148">you</text>
                  <text x="444" y="148">have</text>
                  <text x="480" y="148">the</text>
                  <text x="520" y="148">power</text>
                  <text x="260" y="164">to</text>
                  <text x="288" y="164">run</text>
                  <text x="320" y="164">the</text>
                  <text x="356" y="164">rest</text>
                  <text x="388" y="164">of</text>
                  <text x="416" y="164">us.</text>
                  <text x="448" y="164">For</text>
                  <text x="496" y="164">twenty-</text>
                  <text x="272" y="180">three</text>
                  <text x="324" y="180">years,</text>
                  <text x="372" y="180">I've</text>
                  <text x="412" y="180">been</text>
                  <text x="456" y="180">dying</text>
                  <text x="492" y="180">to</text>
                  <text x="524" y="180">tell</text>
                  <text x="264" y="196">you</text>
                  <text x="300" y="196">what</text>
                  <text x="328" y="196">I</text>
                  <text x="368" y="196">thought</text>
                  <text x="412" y="196">of</text>
                  <text x="444" y="196">you!</text>
                  <text x="480" y="196">And</text>
                  <text x="524" y="196">now...</text>
                  <text x="272" y="212">well,</text>
                  <text x="320" y="212">being</text>
                  <text x="352" y="212">a</text>
                  <text x="400" y="212">Christian</text>
                  <text x="468" y="212">woman,</text>
                  <text x="504" y="212">I</text>
                  <text x="536" y="212">can't</text>
                  <text x="264" y="228">say</text>
                  <text x="300" y="228">it!"</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|      Code: 0.01 (GET)
   |      | GET  |  Uri-Path: random quote
   |      |      |
   |<------------+      Code: 2.05 (Content)
   |      | 2.05 |   Payload: "just because you own half the county
   |      |      |             doesn't mean that you have the power
   |      |      |             to run the rest of us. For twenty-
   |      |      |             three years, I've been dying to tell
   |      |      |             you what I thought of you! And now...
   |      |      |             well, being a Christian woman, I can't
   |      |      |             say it!"
]]></artwork>
          </artset>
        </figure>
        <t>An attacker can increase the bandwidth by sending several GET requests. If the server supports
PUT/POST and doesn't limit the payload size, an attacker may be able to increase the amplification factor
by creating or updating a resource. By creating new resources, an attacker may also increase the
size of /.well-known/core. An amplification attack where the attacker influences the amplification factor
is illustrated in <xref target="ampmulti_post"/>.</t>
        <figure anchor="ampmulti_post">
          <name>Amplification attack using several requests and a chosen amplification factor</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="392" viewBox="0 0 392 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,112" fill="none" stroke="black"/>
                <path d="M 32,144 L 32,320" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,112" fill="none" stroke="black"/>
                <path d="M 88,144 L 88,200" fill="none" stroke="black"/>
                <path d="M 88,216 L 88,296" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,112" fill="none" stroke="black"/>
                <path d="M 144,144 L 144,320" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 88,160 L 136,160" fill="none" stroke="black"/>
                <path d="M 40,208 L 144,208" fill="none" stroke="black"/>
                <path d="M 88,256 L 136,256" fill="none" stroke="black"/>
                <path d="M 40,304 L 144,304" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,256 132,250.4 132,261.6" fill="black" transform="rotate(0,136,256)"/>
                <polygon class="arrowhead" points="144,160 132,154.4 132,165.6" fill="black" transform="rotate(0,136,160)"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,304 36,298.4 36,309.6" fill="black" transform="rotate(180,40,304)"/>
                <polygon class="arrowhead" points="48,208 36,202.4 36,213.6" fill="black" transform="rotate(180,40,208)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="216" y="68">Code:</text>
                  <text x="260" y="68">0.02</text>
                  <text x="308" y="68">(POST)</text>
                  <text x="116" y="84">POST</text>
                  <text x="200" y="84">Uri-Path:</text>
                  <text x="268" y="84">member</text>
                  <text x="204" y="100">Payload:</text>
                  <text x="316" y="100">hampsterdance.hevc</text>
                  <text x="60" y="132">....</text>
                  <text x="116" y="132">....</text>
                  <text x="216" y="164">Code:</text>
                  <text x="260" y="164">0.02</text>
                  <text x="304" y="164">(GET)</text>
                  <text x="112" y="180">GET</text>
                  <text x="200" y="180">Uri-Path:</text>
                  <text x="268" y="180">member</text>
                  <text x="216" y="212">Code:</text>
                  <text x="260" y="212">2.05</text>
                  <text x="320" y="212">(Content)</text>
                  <text x="116" y="228">2.05</text>
                  <text x="204" y="228">Payload:</text>
                  <text x="316" y="228">hampsterdance.hevc</text>
                  <text x="216" y="260">Code:</text>
                  <text x="260" y="260">0.02</text>
                  <text x="304" y="260">(GET)</text>
                  <text x="112" y="276">GET</text>
                  <text x="200" y="276">Uri-Path:</text>
                  <text x="268" y="276">member</text>
                  <text x="216" y="308">Code:</text>
                  <text x="260" y="308">2.05</text>
                  <text x="320" y="308">(Content)</text>
                  <text x="88" y="324">|</text>
                  <text x="116" y="324">2.05</text>
                  <text x="204" y="324">Payload:</text>
                  <text x="316" y="324">hampsterdance.hevc</text>
                  <text x="60" y="340">....</text>
                  <text x="116" y="340">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|      Code: 0.02 (POST)
   |      | POST |  Uri-Path: member
   |      |      |   Payload: hampsterdance.hevc
   |      |      |
     ....   ....
   |      |      |
   |      +----->|      Code: 0.02 (GET)
   |      | GET  |  Uri-Path: member
   |      |      |
   |<------------+      Code: 2.05 (Content)
   |      | 2.05 |   Payload: hampsterdance.hevc
   |      |      |
   |      +----->|      Code: 0.02 (GET)
   |      | GET  |  Uri-Path: member
   |      |      |
   |<------------+      Code: 2.05 (Content)
   |      | 2.05 |   Payload: hampsterdance.hevc
     ....   ....
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="amplification-attacks-using-observe">
        <name>Amplification Attacks using Observe</name>
        <t>Amplification factors can be significantly worse when combined with observe <xref target="RFC7641"/>. As a single request can result in multiple responses from the server, the amplification factors can be very large.</t>
        <t>An amplification attack using observe is illustrated in
<xref target="ampmulti_obs"/>. If each notification response is c times larger than the registration
request and each request results in n notifications, the amplification factor is c <contact fullname="⋅"/> n.</t>
        <figure anchor="ampmulti_obs">
          <name>Amplification attack using observe</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="368" viewBox="0 0 368 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,128" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,240" fill="none" stroke="black"/>
                <path d="M 32,272 L 32,336" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,128" fill="none" stroke="black"/>
                <path d="M 88,184 L 88,240" fill="none" stroke="black"/>
                <path d="M 88,296 L 88,336" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,128" fill="none" stroke="black"/>
                <path d="M 144,160 L 144,240" fill="none" stroke="black"/>
                <path d="M 144,272 L 144,336" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 40,176 L 144,176" fill="none" stroke="black"/>
                <path d="M 40,288 L 144,288" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,288 36,282.4 36,293.6" fill="black" transform="rotate(180,40,288)"/>
                <polygon class="arrowhead" points="48,176 36,170.4 36,181.6" fill="black" transform="rotate(180,40,176)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="224" y="68">Code:</text>
                  <text x="268" y="68">0.01</text>
                  <text x="312" y="68">(GET)</text>
                  <text x="112" y="84">GET</text>
                  <text x="220" y="84">Token:</text>
                  <text x="268" y="84">0x83</text>
                  <text x="212" y="100">Observe:</text>
                  <text x="256" y="100">0</text>
                  <text x="208" y="116">Uri-Path:</text>
                  <text x="272" y="116">ozone</text>
                  <text x="60" y="148">....</text>
                  <text x="116" y="148">....</text>
                  <text x="88" y="164">|</text>
                  <text x="224" y="180">Code:</text>
                  <text x="268" y="180">2.05</text>
                  <text x="328" y="180">(Content)</text>
                  <text x="116" y="196">2.05</text>
                  <text x="220" y="196">Token:</text>
                  <text x="268" y="196">0x83</text>
                  <text x="212" y="212">Observe:</text>
                  <text x="272" y="212">80085</text>
                  <text x="212" y="228">Payload:</text>
                  <text x="272" y="228">"21.4</text>
                  <text x="320" y="228">ppbv"</text>
                  <text x="60" y="260">....</text>
                  <text x="116" y="260">....</text>
                  <text x="88" y="276">|</text>
                  <text x="224" y="292">Code:</text>
                  <text x="268" y="292">2.05</text>
                  <text x="328" y="292">(Content)</text>
                  <text x="116" y="308">2.05</text>
                  <text x="220" y="308">Token:</text>
                  <text x="268" y="308">0x84</text>
                  <text x="212" y="324">Observe:</text>
                  <text x="272" y="324">80086</text>
                  <text x="212" y="340">Payload:</text>
                  <text x="272" y="340">"21.5</text>
                  <text x="320" y="340">ppbv"</text>
                  <text x="60" y="356">....</text>
                  <text x="116" y="356">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|       Code: 0.01 (GET)
   |      | GET  |      Token: 0x83
   |      |      |    Observe: 0
   |      |      |   Uri-Path: ozone
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x83
   |      |      |    Observe: 80085
   |      |      |    Payload: "21.4 ppbv"
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x84
   |      |      |    Observe: 80086
   |      |      |    Payload: "21.5 ppbv"
     ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>A more advanced amplification attack using observe is illustrated in
<xref target="ampmulti_nk"/>. By registering the same client several times using different Tokens or port numbers,
the bandwidth can be increased. By updating the observed resource, the attacker
may trigger notifications and increase the size of the notifications.</t>
        <t>If the server supports the pmax conditional attribute <xref target="I-D.ietf-core-conditional-attributes"/> an attacker may
increase the frequency of notifications and therefore the amplification factor. The maximum period attribute pmax
indicates the maximum time, in seconds, between two consecutive notifications (whether or not the
resource state has changed). Servers should put limits on the pmax values they accept.</t>
        <t>If it is predictable when notifications are sent as confirmable and which Message ID
are used the acknowledgements may be spoofed.</t>
        <figure anchor="ampmulti_nk">
          <name>Amplification attack using observe, registering the same client several times, and requesting notifications at least 10 times every second</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="640" width="368" viewBox="0 0 368 640" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,240" fill="none" stroke="black"/>
                <path d="M 32,272 L 32,432" fill="none" stroke="black"/>
                <path d="M 32,464 L 32,608" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,240" fill="none" stroke="black"/>
                <path d="M 88,296 L 88,360" fill="none" stroke="black"/>
                <path d="M 88,376 L 88,432" fill="none" stroke="black"/>
                <path d="M 88,488 L 88,552" fill="none" stroke="black"/>
                <path d="M 88,568 L 88,608" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,240" fill="none" stroke="black"/>
                <path d="M 144,272 L 144,432" fill="none" stroke="black"/>
                <path d="M 144,464 L 144,608" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 88,160 L 136,160" fill="none" stroke="black"/>
                <path d="M 40,288 L 144,288" fill="none" stroke="black"/>
                <path d="M 40,368 L 144,368" fill="none" stroke="black"/>
                <path d="M 40,480 L 144,480" fill="none" stroke="black"/>
                <path d="M 40,560 L 144,560" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,160 132,154.4 132,165.6" fill="black" transform="rotate(0,136,160)"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,560 36,554.4 36,565.6" fill="black" transform="rotate(180,40,560)"/>
                <polygon class="arrowhead" points="48,480 36,474.4 36,485.6" fill="black" transform="rotate(180,40,480)"/>
                <polygon class="arrowhead" points="48,368 36,362.4 36,373.6" fill="black" transform="rotate(180,40,368)"/>
                <polygon class="arrowhead" points="48,288 36,282.4 36,293.6" fill="black" transform="rotate(180,40,288)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="224" y="68">Code:</text>
                  <text x="268" y="68">0.01</text>
                  <text x="312" y="68">(GET)</text>
                  <text x="112" y="84">GET</text>
                  <text x="220" y="84">Token:</text>
                  <text x="268" y="84">0x83</text>
                  <text x="212" y="100">Observe:</text>
                  <text x="256" y="100">0</text>
                  <text x="208" y="116">Uri-Path:</text>
                  <text x="296" y="116">temperature</text>
                  <text x="204" y="132">Uri-Query:</text>
                  <text x="292" y="132">pmax="0.1"</text>
                  <text x="224" y="164">Code:</text>
                  <text x="268" y="164">0.01</text>
                  <text x="312" y="164">(GET)</text>
                  <text x="112" y="180">GET</text>
                  <text x="220" y="180">Token:</text>
                  <text x="268" y="180">0x84</text>
                  <text x="212" y="196">Observe:</text>
                  <text x="256" y="196">0</text>
                  <text x="208" y="212">Uri-Path:</text>
                  <text x="296" y="212">temperature</text>
                  <text x="204" y="228">Uri-Query:</text>
                  <text x="292" y="228">pmax="0.1"</text>
                  <text x="60" y="260">....</text>
                  <text x="116" y="260">....</text>
                  <text x="88" y="276">|</text>
                  <text x="224" y="292">Code:</text>
                  <text x="268" y="292">2.05</text>
                  <text x="328" y="292">(Content)</text>
                  <text x="116" y="308">2.05</text>
                  <text x="220" y="308">Token:</text>
                  <text x="268" y="308">0x83</text>
                  <text x="212" y="324">Observe:</text>
                  <text x="276" y="324">217362</text>
                  <text x="212" y="340">Payload:</text>
                  <text x="276" y="340">"299.7</text>
                  <text x="316" y="340">K"</text>
                  <text x="224" y="372">Code:</text>
                  <text x="268" y="372">2.05</text>
                  <text x="328" y="372">(Content)</text>
                  <text x="116" y="388">2.05</text>
                  <text x="220" y="388">Token:</text>
                  <text x="268" y="388">0x84</text>
                  <text x="212" y="404">Observe:</text>
                  <text x="276" y="404">217362</text>
                  <text x="212" y="420">Payload:</text>
                  <text x="276" y="420">"299.7</text>
                  <text x="316" y="420">K"</text>
                  <text x="60" y="452">....</text>
                  <text x="116" y="452">....</text>
                  <text x="88" y="468">|</text>
                  <text x="224" y="484">Code:</text>
                  <text x="268" y="484">2.05</text>
                  <text x="328" y="484">(Content)</text>
                  <text x="116" y="500">2.05</text>
                  <text x="220" y="500">Token:</text>
                  <text x="268" y="500">0x83</text>
                  <text x="212" y="516">Observe:</text>
                  <text x="276" y="516">217363</text>
                  <text x="212" y="532">Payload:</text>
                  <text x="276" y="532">"299.7</text>
                  <text x="316" y="532">K"</text>
                  <text x="224" y="564">Code:</text>
                  <text x="268" y="564">2.05</text>
                  <text x="328" y="564">(Content)</text>
                  <text x="116" y="580">2.05</text>
                  <text x="220" y="580">Token:</text>
                  <text x="268" y="580">0x84</text>
                  <text x="212" y="596">Observe:</text>
                  <text x="276" y="596">217363</text>
                  <text x="212" y="612">Payload:</text>
                  <text x="276" y="612">"299.7</text>
                  <text x="316" y="612">K"</text>
                  <text x="60" y="628">....</text>
                  <text x="116" y="628">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|       Code: 0.01 (GET)
   |      | GET  |      Token: 0x83
   |      |      |    Observe: 0
   |      |      |   Uri-Path: temperature
   |      |      |  Uri-Query: pmax="0.1"
   |      |      |
   |      +----->|       Code: 0.01 (GET)
   |      | GET  |      Token: 0x84
   |      |      |    Observe: 0
   |      |      |   Uri-Path: temperature
   |      |      |  Uri-Query: pmax="0.1"
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x83
   |      |      |    Observe: 217362
   |      |      |    Payload: "299.7 K"
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x84
   |      |      |    Observe: 217362
   |      |      |    Payload: "299.7 K"
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x83
   |      |      |    Observe: 217363
   |      |      |    Payload: "299.7 K"
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x84
   |      |      |    Observe: 217363
   |      |      |    Payload: "299.7 K"
     ....   ....
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="amplification-attacks-using-group-requests">
        <name>Amplification Attacks using Group Requests</name>
        <t>Amplification factors can be significantly worse when combined with observe <xref target="RFC7641"/>. As a single request can result in responses from multiple servers, the amplification factors can be very large.</t>
        <t>As the group request is sent over multicast or broadcast the request has to be sent by a node on the local network. An attacker on a local network (e.g., a compromised node) might use local CoAP servers to attack targets on the Internet or on the local network. The servers might also be accessible through a gateway (GW) that transforms unicast requests into multicast request. In such architectures, amplification attacks using group requests might be possible to launch from the Internet.</t>
        <t>An amplification attack using a group request is illustrated in
<xref target="ampmulti_m"/>. A single unicast request results is transformed into
a multicast group request by the gateway and results in m responses
from m different servers. If each response is c times larger than the request,
the amplification factor is c <contact fullname="⋅"/> m. Note that the servers usually do not know
the variable m.</t>
        <figure anchor="ampmulti_m">
          <name>Amplification attack using multicast</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="440" viewBox="0 0 440 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,240" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,120" fill="none" stroke="black"/>
                <path d="M 88,136 L 88,184" fill="none" stroke="black"/>
                <path d="M 88,200 L 88,240" fill="none" stroke="black"/>
                <path d="M 144,72 L 144,120" fill="none" stroke="black"/>
                <path d="M 144,136 L 144,184" fill="none" stroke="black"/>
                <path d="M 144,200 L 144,240" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,72" fill="none" stroke="black"/>
                <path d="M 200,88 L 200,184" fill="none" stroke="black"/>
                <path d="M 200,200 L 200,240" fill="none" stroke="black"/>
                <path d="M 224,48 L 224,240" fill="none" stroke="black"/>
                <path d="M 88,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 176,80 L 216,80" fill="none" stroke="black"/>
                <path d="M 40,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 40,192 L 224,192" fill="none" stroke="black"/>
                <path d="M 176,80 C 167.16936,80 160,72.83064 160,64" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="224,80 212,74.4 212,85.6" fill="black" transform="rotate(0,216,80)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="48,192 36,186.4 36,197.6" fill="black" transform="rotate(180,40,192)"/>
                <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="140" y="36">GW</text>
                  <text x="208" y="36">Servers</text>
                  <text x="144" y="52">|</text>
                  <text x="296" y="68">Code:</text>
                  <text x="340" y="68">0.01</text>
                  <text x="384" y="68">(GET)</text>
                  <text x="292" y="84">Token:</text>
                  <text x="340" y="84">0x69</text>
                  <text x="168" y="100">GET</text>
                  <text x="280" y="100">Uri-Path:</text>
                  <text x="340" y="100">&lt;/c&gt;</text>
                  <text x="296" y="132">Code:</text>
                  <text x="340" y="132">2.05</text>
                  <text x="400" y="132">(Content)</text>
                  <text x="172" y="148">2.05</text>
                  <text x="292" y="148">Token:</text>
                  <text x="340" y="148">0x69</text>
                  <text x="284" y="164">Payload:</text>
                  <text x="328" y="164">{</text>
                  <text x="356" y="164">1721</text>
                  <text x="384" y="164">:</text>
                  <text x="400" y="164">{</text>
                  <text x="424" y="164">...</text>
                  <text x="296" y="196">Code:</text>
                  <text x="340" y="196">2.05</text>
                  <text x="400" y="196">(Content)</text>
                  <text x="172" y="212">2.05</text>
                  <text x="292" y="212">Token:</text>
                  <text x="340" y="212">0x69</text>
                  <text x="284" y="228">Payload:</text>
                  <text x="328" y="228">{</text>
                  <text x="356" y="228">1721</text>
                  <text x="384" y="228">:</text>
                  <text x="400" y="228">{</text>
                  <text x="424" y="228">...</text>
                  <text x="60" y="260">....</text>
                  <text x="116" y="260">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe    GW    Servers
   |      |      |      |  |
   |      +--------+--->|  |      Code: 0.01 (GET)
   |      |      |  '----->|     Token: 0x69
   |      |      | GET  |  |  Uri-Path: </c>
   |      |      |      |  |
   |<-------------------+  |      Code: 2.05 (Content)
   |      |      | 2.05 |  |     Token: 0x69
   |      |      |      |  |   Payload: { 1721 : { ...
   |      |      |      |  |
   |<----------------------+      Code: 2.05 (Content)
   |      |      | 2.05 |  |     Token: 0x69
   |      |      |      |  |   Payload: { 1721 : { ...
   |      |      |      |  |
     ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>Even higher amplification factors can be achieved when combining group requests
<xref target="I-D.ietf-core-groupcomm-bis"/> and observe <xref target="RFC7641"/>. In this case a single
request can result in multiple responses from multiple servers.</t>
        <t>An amplification attack using a multicast request and observe is
illustrated in <xref target="ampmulti_mn"/>. In this case a single request results
in n responses each from m different servers giving a total of n <contact fullname="⋅"/> m
responses. If each response is c times larger than the request,
the amplification factor is c <contact fullname="⋅"/> n <contact fullname="⋅"/> m.</t>
        <figure anchor="ampmulti_mn">
          <name>Amplification attack using multicast and observe</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="496" width="448" viewBox="0 0 448 496" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,464" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,120" fill="none" stroke="black"/>
                <path d="M 88,136 L 88,200" fill="none" stroke="black"/>
                <path d="M 88,216 L 88,272" fill="none" stroke="black"/>
                <path d="M 88,328 L 88,392" fill="none" stroke="black"/>
                <path d="M 88,408 L 88,464" fill="none" stroke="black"/>
                <path d="M 144,72 L 144,120" fill="none" stroke="black"/>
                <path d="M 144,136 L 144,200" fill="none" stroke="black"/>
                <path d="M 144,216 L 144,272" fill="none" stroke="black"/>
                <path d="M 144,328 L 144,392" fill="none" stroke="black"/>
                <path d="M 144,408 L 144,464" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,72" fill="none" stroke="black"/>
                <path d="M 200,88 L 200,200" fill="none" stroke="black"/>
                <path d="M 200,216 L 200,272" fill="none" stroke="black"/>
                <path d="M 200,304 L 200,392" fill="none" stroke="black"/>
                <path d="M 200,408 L 200,464" fill="none" stroke="black"/>
                <path d="M 224,48 L 224,272" fill="none" stroke="black"/>
                <path d="M 224,304 L 224,464" fill="none" stroke="black"/>
                <path d="M 88,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 176,80 L 216,80" fill="none" stroke="black"/>
                <path d="M 40,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 40,208 L 224,208" fill="none" stroke="black"/>
                <path d="M 40,320 L 200,320" fill="none" stroke="black"/>
                <path d="M 40,400 L 224,400" fill="none" stroke="black"/>
                <path d="M 176,80 C 167.16936,80 160,72.83064 160,64" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="224,80 212,74.4 212,85.6" fill="black" transform="rotate(0,216,80)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="48,400 36,394.4 36,405.6" fill="black" transform="rotate(180,40,400)"/>
                <polygon class="arrowhead" points="48,320 36,314.4 36,325.6" fill="black" transform="rotate(180,40,320)"/>
                <polygon class="arrowhead" points="48,208 36,202.4 36,213.6" fill="black" transform="rotate(180,40,208)"/>
                <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="140" y="36">GW</text>
                  <text x="208" y="36">Servers</text>
                  <text x="144" y="52">|</text>
                  <text x="296" y="68">Code:</text>
                  <text x="340" y="68">0.01</text>
                  <text x="384" y="68">(GET)</text>
                  <text x="292" y="84">Token:</text>
                  <text x="340" y="84">0x44</text>
                  <text x="168" y="100">GET</text>
                  <text x="280" y="100">Uri-Path:</text>
                  <text x="368" y="100">temperature</text>
                  <text x="304" y="132">Code:</text>
                  <text x="348" y="132">2.05</text>
                  <text x="408" y="132">(Content)</text>
                  <text x="172" y="148">2.05</text>
                  <text x="300" y="148">Token:</text>
                  <text x="348" y="148">0x44</text>
                  <text x="292" y="164">Observe:</text>
                  <text x="344" y="164">217</text>
                  <text x="292" y="180">Payload:</text>
                  <text x="356" y="180">"301.2</text>
                  <text x="396" y="180">K"</text>
                  <text x="304" y="212">Code:</text>
                  <text x="348" y="212">2.05</text>
                  <text x="408" y="212">(Content)</text>
                  <text x="172" y="228">2.05</text>
                  <text x="300" y="228">Token:</text>
                  <text x="348" y="228">0x44</text>
                  <text x="292" y="244">Observe:</text>
                  <text x="344" y="244">363</text>
                  <text x="292" y="260">Payload:</text>
                  <text x="356" y="260">"293.4</text>
                  <text x="396" y="260">K"</text>
                  <text x="60" y="292">....</text>
                  <text x="172" y="292">....</text>
                  <text x="88" y="308">|</text>
                  <text x="144" y="308">|</text>
                  <text x="304" y="324">Code:</text>
                  <text x="348" y="324">2.05</text>
                  <text x="408" y="324">(Content)</text>
                  <text x="172" y="340">2.05</text>
                  <text x="300" y="340">Token:</text>
                  <text x="348" y="340">0x44</text>
                  <text x="292" y="356">Observe:</text>
                  <text x="344" y="356">218</text>
                  <text x="292" y="372">Payload:</text>
                  <text x="356" y="372">"301.3</text>
                  <text x="396" y="372">K"</text>
                  <text x="304" y="404">Code:</text>
                  <text x="348" y="404">2.05</text>
                  <text x="408" y="404">(Content)</text>
                  <text x="172" y="420">2.05</text>
                  <text x="300" y="420">Token:</text>
                  <text x="348" y="420">0x44</text>
                  <text x="292" y="436">Observe:</text>
                  <text x="344" y="436">364</text>
                  <text x="292" y="452">Payload:</text>
                  <text x="356" y="452">"293.3</text>
                  <text x="396" y="452">K"</text>
                  <text x="60" y="484">....</text>
                  <text x="116" y="484">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe    GW    Servers
   |      |      |      |  |
   |      +--------+--->|  |      Code: 0.01 (GET)
   |      |      |  '----->|     Token: 0x44
   |      |      | GET  |  |  Uri-Path: temperature
   |      |      |      |  |
   |<-------------------+  |       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 217
   |      |      |      |  |    Payload: "301.2 K"
   |      |      |      |  |
   |<----------------------+       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 363
   |      |      |      |  |    Payload: "293.4 K"
   |      |      |      |  |
   | ....          ....
   |      |      |      |  |
   |<-------------------+  |       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 218
   |      |      |      |  |    Payload: "301.3 K"
   |      |      |      |  |
   |<----------------------+       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 364
   |      |      |      |  |    Payload: "293.3 K"
   |      |      |      |  |
     ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>An attacker can use the same techniques as in <xref target="ampmulti_nk"/> to increase the number of notifications.</t>
      </section>
      <section anchor="mitm-amplification-attacks">
        <name>MITM Amplification Attacks</name>
        <t>TLS and DTLS without Connection ID <xref target="RFC9146"/><xref target="RFC9147"/> validate the IP address and port of the other peer, binds them to the connection, and do not allow them to change. DTLS with Connection ID allows the IP address and port to change at any time. As the source address is not protected, an MITM attacker can change the address. Note that an MITM attacker is a more capable attacker then an attacker just spoofing the source address. It can be discussed if and how much such an attack is reasonable for DDoS, but DTLS 1.3 states that "This attack is of concern when there is a large asymmetry of request/response message sizes." <xref target="RFC9147"/>.</t>
        <t>DTLS 1.2 with Connection ID <xref target="RFC9146"/> requires that "the receiver MUST NOT replace the address" unless “there is a strategy for ensuring that the new peer address is able to receive and process DTLS records” but does not give more details than that. It seems like the receiver can start using the new peer address and test that it is able to receive and process DTLS records at some later point. DTLS 1.3 with Connection ID <xref target="RFC9147"/> requires that "implementations MUST NOT update the address" unless “they first perform some reachability test” but does not give more details than that. OSCORE <xref target="RFC8613"/> does not discuss address updates, but it can be assumed that most servers send responses to the address it received the request from without any reachability test. A difference between (D)TLS and OSCORE is that in DTLS the updated address is used for all future records, while in OSCORE a new address is only used for responses to a specific request.</t>
        <t>An MITM amplification attack updating the client's source address in an observe registration is illustrated in <xref target="amp_mitm_client"/>. This attack is possible in OSCORE and DTLS with Connection ID. The server will send notifications to the Victim until it at some unspecified point requires an acknowledgement <xref target="RFC7641"/>. In DTLS 1.2 the reachability test might be done at a later point. In OSCORE a reachability test is likely not done.</t>
        <figure anchor="amp_mitm_client">
          <name>MITM Amplification attack by updating the client's source address in a observe registration request</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="416" viewBox="0 0 416 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,160" fill="none" stroke="black"/>
                <path d="M 32,192 L 32,304" fill="none" stroke="black"/>
                <path d="M 88,72 L 88,120" fill="none" stroke="black"/>
                <path d="M 88,192 L 88,304" fill="none" stroke="black"/>
                <path d="M 144,80 L 144,112" fill="none" stroke="black"/>
                <path d="M 144,216 L 144,264" fill="none" stroke="black"/>
                <path d="M 144,280 L 144,304" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,160" fill="none" stroke="black"/>
                <path d="M 200,192 L 200,304" fill="none" stroke="black"/>
                <path d="M 32,64 L 128,64" fill="none" stroke="black"/>
                <path d="M 152,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 40,128 L 136,128" fill="none" stroke="black"/>
                <path d="M 160,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 32,144 L 128,144" fill="none" stroke="black"/>
                <path d="M 152,144 L 192,144" fill="none" stroke="black"/>
                <path d="M 96,208 L 200,208" fill="none" stroke="black"/>
                <path d="M 96,272 L 200,272" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="200,144 188,138.4 188,149.6" fill="black" transform="rotate(0,192,144)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="168,128 156,122.4 156,133.6" fill="black" transform="rotate(180,160,128)"/>
                <polygon class="arrowhead" points="136,144 124,138.4 124,149.6" fill="black" transform="rotate(0,128,144)"/>
                <polygon class="arrowhead" points="136,64 124,58.4 124,69.6" fill="black" transform="rotate(0,128,64)"/>
                <polygon class="arrowhead" points="104,272 92,266.4 92,277.6" fill="black" transform="rotate(180,96,272)"/>
                <polygon class="arrowhead" points="104,208 92,202.4 92,213.6" fill="black" transform="rotate(180,96,208)"/>
                <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="92" y="36">Victim</text>
                  <text x="144" y="36">Foe</text>
                  <text x="204" y="36">Server</text>
                  <text x="88" y="52">|</text>
                  <text x="144" y="52">|</text>
                  <text x="144" y="68">S</text>
                  <text x="272" y="68">Code:</text>
                  <text x="316" y="68">0.01</text>
                  <text x="360" y="68">(GET)</text>
                  <text x="56" y="84">GET</text>
                  <text x="260" y="84">Observe:</text>
                  <text x="304" y="84">0</text>
                  <text x="256" y="100">Uri-Path:</text>
                  <text x="332" y="100">humidity</text>
                  <text x="144" y="132">D</text>
                  <text x="268" y="132">Reachability</text>
                  <text x="340" y="132">test</text>
                  <text x="388" y="132">(DTLS)</text>
                  <text x="144" y="148">S</text>
                  <text x="88" y="164">|</text>
                  <text x="144" y="164">|</text>
                  <text x="60" y="180">....</text>
                  <text x="116" y="180">....</text>
                  <text x="172" y="180">....</text>
                  <text x="144" y="196">|</text>
                  <text x="272" y="212">Code:</text>
                  <text x="316" y="212">2.05</text>
                  <text x="376" y="212">(Content)</text>
                  <text x="172" y="228">2.05</text>
                  <text x="260" y="228">Observe:</text>
                  <text x="324" y="228">263712</text>
                  <text x="260" y="244">Payload:</text>
                  <text x="312" y="244">"68</text>
                  <text x="340" y="244">%"</text>
                  <text x="272" y="276">Code:</text>
                  <text x="316" y="276">2.05</text>
                  <text x="376" y="276">(Content)</text>
                  <text x="172" y="292">2.05</text>
                  <text x="260" y="292">Observe:</text>
                  <text x="324" y="292">263713</text>
                  <text x="260" y="308">Payload:</text>
                  <text x="312" y="308">"69</text>
                  <text x="340" y="308">%"</text>
                  <text x="60" y="324">....</text>
                  <text x="116" y="324">....</text>
                  <text x="172" y="324">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Client  Victim  Foe   Server
   |      |      |      |
   +-----------> S----->|      Code: 0.01 (GET)
   | GET  |      |      |   Observe: 0
   |      |      |      |  Uri-Path: humidity
   |      |      |      |
   |<------------D <----+  Reachability test (DTLS)
   +-----------> S----->|
   |      |      |      |
     ....   ....   ....
   |      |      |      |
   |      |<------------+      Code: 2.05 (Content)
   |      |      | 2.05 |   Observe: 263712
   |      |      |      |   Payload: "68 %"
   |      |      |      |
   |      |<------------+      Code: 2.05 (Content)
   |      |      | 2.05 |   Observe: 263713
   |      |      |      |   Payload: "69 %"
     ....   ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>Where 'S' means the MITM attacker is changing the source address of the message and 'D' means the MITM attacker is changing the destination address of the message.</t>
        <t>An MITM amplification attack updating the server's source address is illustrated in <xref target="amp_mitm_server"/>. This attack is possible in DTLS with Connection ID. In DTLS 1.2 the reachability test might be done at a later point.</t>
        <figure anchor="amp_mitm_server">
          <name>MITM Amplification attack by updating the server's source address in a response</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="480" viewBox="0 0 480 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,192" fill="none" stroke="black"/>
                <path d="M 32,224 L 32,336" fill="none" stroke="black"/>
                <path d="M 88,72 L 88,96" fill="none" stroke="black"/>
                <path d="M 88,128 L 88,144" fill="none" stroke="black"/>
                <path d="M 88,248 L 88,296" fill="none" stroke="black"/>
                <path d="M 88,312 L 88,336" fill="none" stroke="black"/>
                <path d="M 144,72 L 144,104" fill="none" stroke="black"/>
                <path d="M 144,120 L 144,152" fill="none" stroke="black"/>
                <path d="M 144,224 L 144,336" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,192" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,336" fill="none" stroke="black"/>
                <path d="M 32,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 40,112 L 80,112" fill="none" stroke="black"/>
                <path d="M 104,112 L 192,112" fill="none" stroke="black"/>
                <path d="M 32,160 L 72,160" fill="none" stroke="black"/>
                <path d="M 96,160 L 192,160" fill="none" stroke="black"/>
                <path d="M 40,176 L 80,176" fill="none" stroke="black"/>
                <path d="M 104,176 L 200,176" fill="none" stroke="black"/>
                <path d="M 32,240 L 136,240" fill="none" stroke="black"/>
                <path d="M 32,304 L 136,304" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="200,160 188,154.4 188,165.6" fill="black" transform="rotate(0,192,160)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="144,304 132,298.4 132,309.6" fill="black" transform="rotate(0,136,304)"/>
                <polygon class="arrowhead" points="144,240 132,234.4 132,245.6" fill="black" transform="rotate(0,136,240)"/>
                <polygon class="arrowhead" points="112,176 100,170.4 100,181.6" fill="black" transform="rotate(180,104,176)"/>
                <polygon class="arrowhead" points="112,112 100,106.4 100,117.6" fill="black" transform="rotate(180,104,112)"/>
                <polygon class="arrowhead" points="80,160 68,154.4 68,165.6" fill="black" transform="rotate(0,72,160)"/>
                <polygon class="arrowhead" points="48,176 36,170.4 36,181.6" fill="black" transform="rotate(180,40,176)"/>
                <polygon class="arrowhead" points="48,112 36,106.4 36,117.6" fill="black" transform="rotate(180,40,112)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="88" y="36">Foe</text>
                  <text x="140" y="36">Victim</text>
                  <text x="204" y="36">Server</text>
                  <text x="88" y="52">|</text>
                  <text x="144" y="52">|</text>
                  <text x="272" y="68">Code:</text>
                  <text x="316" y="68">0.01</text>
                  <text x="364" y="68">(POST)</text>
                  <text x="60" y="84">POST</text>
                  <text x="256" y="84">Uri-Path:</text>
                  <text x="320" y="84">video</text>
                  <text x="88" y="116">S</text>
                  <text x="272" y="116">Code:</text>
                  <text x="316" y="116">2.01</text>
                  <text x="376" y="116">(Created)</text>
                  <text x="172" y="132">2.01</text>
                  <text x="88" y="164">D</text>
                  <text x="268" y="164">Reachability</text>
                  <text x="340" y="164">test</text>
                  <text x="388" y="164">(DTLS)</text>
                  <text x="88" y="180">S</text>
                  <text x="88" y="196">|</text>
                  <text x="144" y="196">|</text>
                  <text x="60" y="212">....</text>
                  <text x="116" y="212">....</text>
                  <text x="172" y="212">....</text>
                  <text x="88" y="228">|</text>
                  <text x="272" y="244">Code:</text>
                  <text x="316" y="244">0.01</text>
                  <text x="364" y="244">(POST)</text>
                  <text x="60" y="260">POST</text>
                  <text x="256" y="260">Uri-Path:</text>
                  <text x="320" y="260">video</text>
                  <text x="260" y="276">Payload:</text>
                  <text x="388" y="276">surveillance_1139.hevc</text>
                  <text x="272" y="308">Code:</text>
                  <text x="316" y="308">0.01</text>
                  <text x="364" y="308">(POST)</text>
                  <text x="60" y="324">POST</text>
                  <text x="256" y="324">Uri-Path:</text>
                  <text x="320" y="324">video</text>
                  <text x="260" y="340">Payload:</text>
                  <text x="388" y="340">surveillance_1140.hevc</text>
                  <text x="60" y="356">....</text>
                  <text x="116" y="356">....</text>
                  <text x="172" y="356">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Client   Foe  Victim  Server
   |      |      |      |
   +------------------->|      Code: 0.01 (POST)
   | POST |      |      |  Uri-Path: video
   |      |      |      |
   |<-----S <-----------|      Code: 2.01 (Created)
   |      |      | 2.01 |
   |      |      |      |
   +----> D------------>|  Reachability test (DTLS)
   |<-----S <-----------+
   |      |      |      |
     ....   ....   ....
   |      |      |      |
   +------------>|      |      Code: 0.01 (POST)
   | POST |      |      |  Uri-Path: video
   |      |      |      |   Payload: surveillance_1139.hevc
   |      |      |      |
   +------------>|      |      Code: 0.01 (POST)
   | POST |      |      |  Uri-Path: video
   |      |      |      |   Payload: surveillance_1140.hevc
     ....   ....   ....
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="summary">
      <name>Summary</name>
      <t>CoAP has always considered amplification attacks, but most of the requirements in
<xref target="RFC7252"/>, <xref target="RFC7641"/>, <xref target="RFC9175"/>, and
<xref target="I-D.ietf-core-groupcomm-bis"/> are "SHOULD" instead of "MUST", it is
undefined what a "large amplification factor" is, <xref target="RFC7641"/> does not specify
how many notifications that can be sent before a potentially spoofable
acknowledgement must be sent, and in several cases the "SHOULD" level is
further softened by “If possible" and "generally". <xref target="I-D.ietf-core-conditional-attributes"/>
does not have any amplification attack considerations.</t>
      <t>QUIC <xref target="RFC9000"/> mandates that ”an endpoint MUST limit the amount of data it sends
to the unvalidated address to three times the amount of data received from that
address” without any exceptions. This approach should be seen as current best practice
for non-constrained devices.</t>
      <t>While it is clear when a QUIC implementation violates the requirement in <xref target="RFC9000"/>, it
is not clear when a CoAP implementation violates the requirement in <xref target="RFC7252"/>,
<xref target="RFC7641"/>, <xref target="RFC9175"/>, and <xref target="I-D.ietf-core-groupcomm-bis"/>.</t>
      <t>In CoAP, an address can be validated with a security protocol or by using the Echo Option <xref target="RFC9175"/>. Restricting the bandwidth per server is not enough as the number of servers the attacker can use is typically unknown. For multicast requests, anti-amplification limits and the Echo Option do not really work unless the number of servers sending responses is known. Even if the responses have the same size as the request, the amplification factor from m servers is m, where m is typically unknown. While DoS attacks from CoAP servers accessible over the Internet pose the largest threat, an attacker on a local network (e.g., a compromised node) might use local CoAP servers to attack targets on the Internet or on the local network.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The whole document can be seen as security considerations for CoAP.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-informative-references">
      <name>Informative References</name>
      <reference anchor="RFC7252">
        <front>
          <title>The Constrained Application Protocol (CoAP)</title>
          <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
          <author fullname="K. Hartke" initials="K." surname="Hartke"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <date month="June" year="2014"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
            <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7252"/>
        <seriesInfo name="DOI" value="10.17487/RFC7252"/>
      </reference>
      <reference anchor="RFC7641">
        <front>
          <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
          <author fullname="K. Hartke" initials="K." surname="Hartke"/>
          <date month="September" year="2015"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7641"/>
        <seriesInfo name="DOI" value="10.17487/RFC7641"/>
      </reference>
      <reference anchor="RFC8152">
        <front>
          <title>CBOR Object Signing and Encryption (COSE)</title>
          <author fullname="J. Schaad" initials="J." surname="Schaad"/>
          <date month="July" year="2017"/>
          <abstract>
            <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need for the ability to have basic security services defined for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8152"/>
        <seriesInfo name="DOI" value="10.17487/RFC8152"/>
      </reference>
      <reference anchor="RFC8323">
        <front>
          <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <author fullname="S. Lemay" initials="S." surname="Lemay"/>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
          <author fullname="K. Hartke" initials="K." surname="Hartke"/>
          <author fullname="B. Silverajan" initials="B." surname="Silverajan"/>
          <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor"/>
          <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="RFC8446">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <date month="August" year="2018"/>
          <abstract>
            <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8446"/>
        <seriesInfo name="DOI" value="10.17487/RFC8446"/>
      </reference>
      <reference anchor="RFC8613">
        <front>
          <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
          <author fullname="G. Selander" initials="G." surname="Selander"/>
          <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
          <author fullname="F. Palombini" initials="F." surname="Palombini"/>
          <author fullname="L. Seitz" initials="L." surname="Seitz"/>
          <date month="July" year="2019"/>
          <abstract>
            <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
            <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8613"/>
        <seriesInfo name="DOI" value="10.17487/RFC8613"/>
      </reference>
      <reference anchor="RFC9000">
        <front>
          <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
          <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
          <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
          <date month="May" year="2021"/>
          <abstract>
            <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9000"/>
        <seriesInfo name="DOI" value="10.17487/RFC9000"/>
      </reference>
      <reference anchor="RFC9146">
        <front>
          <title>Connection Identifier for DTLS 1.2</title>
          <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
          <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig"/>
          <author fullname="T. Fossati" initials="T." surname="Fossati"/>
          <author fullname="A. Kraus" initials="A." surname="Kraus"/>
          <date month="March" year="2022"/>
          <abstract>
            <t>This document specifies the Connection ID (CID) construct for the Datagram Transport Layer Security (DTLS) protocol version 1.2.</t>
            <t>A CID is an identifier carried in the record layer header that gives the recipient additional information for selecting the appropriate security association. In "classical" DTLS, selecting a security association of an incoming DTLS record is accomplished with the help of the 5-tuple. If the source IP address and/or source port changes during the lifetime of an ongoing DTLS session, then the receiver will be unable to locate the correct security context.</t>
            <t>The new ciphertext record format with the CID also provides content type encryption and record layer padding.</t>
            <t>This document updates RFC 6347.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9146"/>
        <seriesInfo name="DOI" value="10.17487/RFC9146"/>
      </reference>
      <reference anchor="RFC9147">
        <front>
          <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
          <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
          <date month="April" year="2022"/>
          <abstract>
            <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
            <t>This document obsoletes RFC 6347.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9147"/>
        <seriesInfo name="DOI" value="10.17487/RFC9147"/>
      </reference>
      <reference anchor="RFC9175">
        <front>
          <title>Constrained Application Protocol (CoAP): Echo, Request-Tag, and Token Processing</title>
          <author fullname="C. Amsüss" initials="C." surname="Amsüss"/>
          <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
          <author fullname="G. Selander" initials="G." surname="Selander"/>
          <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-conditional-attributes">
        <front>
          <title>Conditional Query Parameters for CoAP Observe</title>
          <author fullname="Bill Silverajan" initials="B." surname="Silverajan">
            <organization>Tampere University</organization>
          </author>
          <author fullname="Michael Koster" initials="M." surname="Koster">
            <organization>Dogtiger Labs</organization>
          </author>
          <author fullname="Alan Soloway" initials="A." surname="Soloway">
            <organization>Qualcomm Technologies, Inc.</organization>
          </author>
          <date day="16" month="March" year="2025"/>
          <abstract>
            <t>   This specification defines Conditional Notification and Control Query
   Parameters compatible with CoAP Observe (RFC7641).

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-core-conditional-attributes-11"/>
      </reference>
      <reference anchor="I-D.ietf-core-groupcomm-bis">
        <front>
          <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
          <author fullname="Esko Dijk" initials="E." surname="Dijk">
            <organization>IoTconsultancy.nl</organization>
          </author>
          <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
            <organization>RISE AB</organization>
          </author>
          <date day="24" month="February" year="2025"/>
          <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 and obsoletes RFC 7390, while it updates RFC 7252
   and RFC 7641.

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

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-25"/>
      </reference>
      <reference anchor="DDoS-Infra" target="https://www.darkreading.com/cyberattacks-data-breaches/critical-infrastructure-under-attack">
        <front>
          <title>Critical Infrastructure Under Attack</title>
          <author>
            <organization/>
          </author>
          <date year="2021" month="November"/>
        </front>
        <seriesInfo name="Dark Reading" value=""/>
      </reference>
    </references>
    <?line 462?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank
<contact fullname="Sultan Alshehri"/>,
<contact fullname="Carsten Bormann"/>,
<contact fullname="Klaus Hartke"/>,
<contact fullname="Jaime Jiménez"/>,
<contact fullname="Ari Keränen"/>,
<contact fullname="Matthias Kovatsch"/>,
<contact fullname="Achim Kraus"/>,
<contact fullname="Sandeep Kumar"/>,
and
<contact fullname="András Méhes"/>
for their valuable comments and feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1czZLbRpK+11PUULEhKUSifyS1pA7b63a3rGlrZGnE1vro
KAJFEm4AxUEBTdNyb8xlT/sKu7GxEXuZF9jT3vQmfpLNzPpBgQR/WpbG8sb2
oUkCharMrMwvs7KyMBgMWJVWmTzmvZN8lqXjNBZVqgp+UlUivtT8jU6LCa+m
kp+qQlelSAuZ8JMZtLUtX5WqUrHK+J1TdfLqbo+J0aiUV9Aj/uad3fYY/JYT
VS6OeVqMFWOJiguRAx1JKcbVIC2r8aA6rMrJQIQdDITpYLD/kOl6lKdaw9Vq
MYMnz19ffM35LS4yrWD0tEjkTMK/our1ee/85Cv4UCV8g3Y9VtT5SJbHLAFC
jlkMzMlC1/qYV2UtGZB/n4lSimPXfq7Ky0mp6hlcuZiCUAaVGtCXHruUC7id
HDM+4IX8seITWciSCMZLdZHGqqSveibKywxFmqQgzXRUVyDOTCYTWbIrWdRA
C+frxuHccNp7LbUUZTzlz7Al3shFmsENEtmXKL1IlfQENoMb06qa6eO9PWyH
l9IrGaXSNNvDC3umx71/lNjk+wzI+5x6w04maTWtR67/vQ0Tg60zEKmugkGp
fWQ6iVK16fm93eY/mlZ51mNM1NVUwSyC3El7vlFT1EhZv/sP/gLaao1TADqW
VinoBTSI4KeuS9N8tSWI45g/LdMYf/OTr1CCVp/dVeygKqUEDodPBwdHD/jj
fT4EG7icqiyHu7GqiwpVeziXoH5wRZrp+QGoi3I72JfS9hfFKvcMPHv336Uo
+FBmAlS3DIkNrn1UKsEsRRFpO1o3mafTEhQkBUpPcv3uf7QOCW0uGTrBFiYL
/kdRXoFaoO4PVVbjbOpm0DgSua6l1l9Kaj71rSNRMVaoEuQGSnvMGAJG84vz
11+fPjp8eHhsvx49OLBfHx/4q4/vH953Xx88OHJfjw7c1Sf7+/vu64FvAF8f
+a+PHuLX88EZGc4ATFrCvyJJkRWRoWoag9ar7ciiQYD5YJR23Fa63Yr4OjtT
w8F5MS4FPgC2L8oJTqezqvl8HiUAJ4BSCcoJHtyLFyMEHoORAG1iAFoh4qnU
e3EJhMZAZ4pdgm7UcVXDoDXOsrUrM451CKf2AX7eeoC/wQcskvfoCQ06IjXO
i6GU894ZEMZfG8pMIwJa/q26kgi8/HD/8ICxwWAAmot+JYZZRlciY1KR86KS
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

-->

</rfc>
