<?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.39 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-anima-constrained-join-proxy-21" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="Join Proxy">Join Proxy for Onboarding of Constrained Network Elements</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-anima-constrained-join-proxy-21"/>
    <author initials="E." surname="Dijk" fullname="Esko Dijk" role="editor">
      <organization>IoTconsultancy.nl</organization>
      <address>
        <email>esko.dijk@iotconsultancy.nl</email>
      </address>
    </author>
    <author initials="M." surname="Richardson" fullname="Michael Richardson">
      <organization>Sandelman Software Works</organization>
      <address>
        <email>mcr+ietf@sandelman.ca</email>
      </address>
    </author>
    <author initials="P." surname="van der Stok" fullname="Peter van der Stok">
      <organization>vanderstok consultancy</organization>
      <address>
        <email>stokcons@kpnmail.nl</email>
      </address>
    </author>
    <author initials="P." surname="Kampanakis" fullname="Panos Kampanakis">
      <organization>Cisco Systems</organization>
      <address>
        <email>pkampana@cisco.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="20"/>
    <area>int</area>
    <workgroup>anima</workgroup>
    <abstract>
      <?line 83?>

<t>This document supports the constrained Bootstrapping Remote Secure Key Infrastructures (cBRSKI) onboarding protocol by
adding a required network function, the Join Proxy.
This function can be implemented on a constrained node.
The goal of the Join Proxy is to help new constrained nodes ("Pledges") securely onboard into a new IP network using the
cBRSKI protocol.
It acts as a circuit proxy for User Datagram Protocol (UDP) packets that carry the onboarding messages.
The solution is extensible to support other UDP-based onboarding protocols as well.
The Join Proxy functionality is designed for use in constrained networks,
including IPv6 over Low-Power Wireless Personal Area Networks (6LoWPAN) based networks in which
the onboarding authority server ("Registrar") may be multiple IP hops away from a Pledge.
Despite this distance, the Pledge only needs to use link-local communication to complete cBRSKI onboarding.
Two modes of Join Proxy operation are defined, stateless and stateful, to allow different trade-offs
regarding resource usage, implementation complexity and security.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-anima-constrained-join-proxy/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        anima Working Group mailing list (<eref target="mailto:anima@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/anima/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/anima/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/anima-wg/constrained-join-proxy"/>.</t>
    </note>
  </front>
  <middle>
    <?line 99?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Bootstrapping Remote Secure Key Infrastructure (BRSKI) protocol described in <xref target="RFC8995"/>
provides a solution for a secure zero-touch (automated) onboarding of new, unconfigured devices.
In the context of BRSKI, new devices, called "Pledges", are equipped with a factory-installed
Initial Device Identifier (IDevID) <xref target="ieee802-1AR"/>, and are enrolled into a network.
BRSKI makes use of Enrollment over Secure Transport (EST) <xref target="RFC7030"/>
with <xref target="RFC8366bis"/> signed vouchers to securely enroll devices.
A Registrar provides the trust anchor of the network domain to which a Pledge enrolls.</t>
      <t><xref target="cBRSKI"/> defines a version of BRSKI that is suitable for constrained nodes (<xref target="RFC7228"/>) and for operation
on constrained networks (<xref target="RFC7228"/>) including Low-Power and Lossy Networks (LLN) <xref target="RFC7102"/>.
It uses Constrained Application Protocol (CoAP) <xref target="RFC7252"/> messages secured by Datagram Transport Layer Security
(DTLS) <xref target="RFC9147"/> to implement the BRSKI functions defined by <xref target="RFC8995"/>.</t>
      <t>In this document, cBRSKI is extended such that a cBRSKI Pledge can connect to a Registrar via a (constrained) Join Proxy.
In particular, this solution is intended to support
IPv6 over Low-Power Wireless Personal Area Networks (6LoWPAN) <xref target="RFC4944"/> mesh networks.
6TiSCH networks are not in scope of this document since these use the CoJP <xref target="RFC9031"/> proxy mechanism.</t>
      <t>The Join Proxy as specified in this document is one of the Join Proxy
options referred to in <xref section="2.5.2" sectionFormat="of" target="RFC8995"/> as future work.</t>
      <t>However, in IP networks that require node authentication, such as those using 6LoWPAN <xref target="RFC4944"/>,
data to and from the Pledge will not be routable over the IP network
before it is properly authenticated to the network.
A new Pledge can initially only use a link-local IPv6 address to communicate with a
mesh neighbor <xref target="RFC6775"/> until it receives the necessary network configuration parameters.</t>
      <t>Before it can receive these parameters, the Pledge needs to be authenticated and authorized to onboard the
network. This is done in cBRSKI through an end-to-end encrypted DTLS session with a domain Registrar.</t>
      <t>When this Registrar is not a direct (link-local) neighbor of the Pledge but several hops away, the Pledge
needs to discover a link-local neighbor that is operating as a Join Proxy, which helps
forward the DTLS messages of the session between Pledge and Registrar.</t>
      <t>Because the Join Proxy is a regular network node that has already been onboarded onto the network, it can send
IP packets to the Registrar which are then routed over one or more hops over the mesh network -- and potentially
over other IP networks too, before reaching the Registrar.
Likewise, the Registrar sends its response IP packets which are routed back to the Join Proxy over the mesh network.</t>
      <t>Once a Pledge has enrolled onto the network in this manner, it can optionally be configured itself as a new constrained
Join Proxy. In this role it can help other Pledges perform the cBRSKI onboarding process.</t>
      <t>Two modes of operation for a (constrained) Join Proxy are specified:</t>
      <ol spacing="normal" type="1"><li>
          <t>A stateful Join Proxy that locally stores UDP connection state per Pledge.</t>
        </li>
        <li>
          <t>A stateless Join Proxy that does not locally store UDP connection state, but stores it in the header of a
message that is exchanged between the Join Proxy and the Registrar.</t>
        </li>
      </ol>
      <t>Similar to the difference between storing and non-storing Modes of
Operations (MOP) in RPL <xref target="RFC6550"/>, the stateful and stateless modes differ in the way that they store
the state required to forward return UDP packets from the Registrar back to the Pledge.</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.
<?line -6?>
      </t>
      <t>The following terms are defined in <xref target="RFC8366bis"/> and <xref target="RFC8995"/>, and are used identically in this document:
artifact, Circuit Proxy, Join Proxy, domain, imprint, Registrar, Pledge, and Voucher.</t>
      <t>The term "installation" refers to all devices in the network and their interconnections, including Registrar,
enrolled nodes (with and without Join Proxy functionality) and Pledges (not yet enrolled).</t>
      <t>(Installation) IP addresses are assumed to be routable over the whole installation network,
except for link-local IP addresses.</t>
      <t>The term "Join Proxy" is used in this document with the same definition as in <xref target="RFC8995"/>.
However, in this document it refers specifically to a Join Proxy that can support Pledges to onboard using a
UDP-based protocol, such as the cBRSKI protocol <xref target="cBRSKI"/>.
This protocol operates over an end-to-end secured DTLS session between a Pledge and a cBRSKI Registrar.</t>
      <t>The acronym "JPY" is used to refer to a new protocol and JPY message format defined by this document.
The message can be seen as a "Join Proxy Yoke": connecting two data items and letting these travel together over a network.</t>
      <t>Because UDP does not have the notion of a connection, the term "UDP connection" in this document
refers to a pseudo-connection, whose establishment on the Join Proxy is triggered by receipt of a first UDP packet
from a new Pledge source.</t>
      <t>The term "endpoint" is used as defined in <xref target="RFC7252"/>.</t>
      <t>The terms "6LoWPAN Router" (6LR), "6LoWPAN Border Router" (6LBR) and "6LoWPAN link" are used as defined in <xref target="RFC6775"/>.</t>
      <t>Details of the IP address and port notation used in the Join Proxy specification are provided in <xref target="ip-port-notation"/>.</t>
    </section>
    <section anchor="join-proxy-problem-statement-and-solution">
      <name>Join Proxy Problem Statement and Solution</name>
      <section anchor="problem-statement">
        <name>Problem Statement</name>
        <t>As depicted in <xref target="fig-net"/>, the Pledge (P), in a network such as a 6LoWPAN <xref target="RFC4944"/> mesh network
 can be more than one hop away from the Registrar (R) and it is not yet authenticated to the network.
Also, the Pledge does not possess any key material to encrypt or decrypt link-layer data transmissions.</t>
        <t>In this situation, the Pledge can only communicate one-hop to its neighbors, such as the Join Proxy (J),
using link-local IPv6 addresses and using no link-layer encryption.
However, the Pledge needs to communicate with end-to-end security with a Registrar to authenticate and obtain its
domain identity/credentials.
In the case of cBRSKI, the domain identity is an X.509 certificate. Domain credentials may include key material for
network access.</t>
        <figure anchor="fig-net">
          <name>Multi-hop cBRSKI onboarding scenario in a 6LoWPAN mesh network</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="160" width="416" viewBox="0 0 416 160" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 24,48 L 24,96" fill="none" stroke="black"/>
                <path d="M 56,48 L 56,96" fill="none" stroke="black"/>
                <path d="M 128,64 L 128,112" fill="none" stroke="black"/>
                <path d="M 176,64 L 176,112" fill="none" stroke="black"/>
                <path d="M 216,64 L 216,112" fill="none" stroke="black"/>
                <path d="M 248,64 L 248,112" fill="none" stroke="black"/>
                <path d="M 368,64 L 368,112" fill="none" stroke="black"/>
                <path d="M 400,64 L 400,112" fill="none" stroke="black"/>
                <path d="M 24,48 L 56,48" fill="none" stroke="black"/>
                <path d="M 56,64 L 88,64" fill="none" stroke="black"/>
                <path d="M 128,64 L 176,64" fill="none" stroke="black"/>
                <path d="M 216,64 L 248,64" fill="none" stroke="black"/>
                <path d="M 368,64 L 400,64" fill="none" stroke="black"/>
                <path d="M 176,80 L 216,80" fill="none" stroke="black"/>
                <path d="M 24,96 L 56,96" fill="none" stroke="black"/>
                <path d="M 104,96 L 128,96" fill="none" stroke="black"/>
                <path d="M 128,112 L 176,112" fill="none" stroke="black"/>
                <path d="M 216,112 L 248,112" fill="none" stroke="black"/>
                <path d="M 368,112 L 400,112" fill="none" stroke="black"/>
                <path d="M 88,64 L 104,96" fill="none" stroke="black"/>
                <g class="text">
                  <text x="144" y="36">multi-hop</text>
                  <text x="204" y="36">mesh</text>
                  <text x="300" y="52">IPv6</text>
                  <text x="40" y="68">R</text>
                  <text x="308" y="68">link-local</text>
                  <text x="152" y="84">6LR</text>
                  <text x="232" y="84">J</text>
                  <text x="308" y="84">..............</text>
                  <text x="384" y="84">P</text>
                  <text x="40" y="132">Registrar</text>
                  <text x="220" y="132">Join</text>
                  <text x="264" y="132">Proxy</text>
                  <text x="388" y="132">Pledge</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                    multi-hop mesh
         .---.                            IPv6
         | R +---.    +-----+    +---+  link-local  +---+
         |   |    \   | 6LR +----+ J |..............| P |
         '---'     `--+     |    |   |              |   |
                      +-----+    +---+              +---+
       Registrar                Join Proxy          Pledge
]]></artwork>
          </artset>
        </figure>
        <t>So one problem is that there is no IP routability between the Pledge and the Registrar, via intermediate nodes
such as 6LoWPAN Routers (6LRs), despite the need for an end-to-end secured session between both.</t>
        <t>Furthermore, the Pledge is not able to discover the IP address of the Registrar because it is not yet allowed onto
the network.</t>
      </section>
      <section anchor="solution">
        <name>Solution</name>
        <t>To overcome these problems, the Join Proxy for onboarding of constrained network elements is introduced.
This is specific functionality that all, or a specific subset of, authenticated nodes in an IP network can implement.
When the Join Proxy functionality is enabled in a node, it can help a neighboring Pledge securely onboard the network.</t>
        <t>The Join Proxy performs relaying of UDP packets from the Pledge to the intended Registrar, and
relaying of the subsequent return packets.
An authenticated Join Proxy can either be configured with the routable IP address of the Registrar,
or it can discover this address as specified in this document.
Other methods of Registrar discovery (not yet specified in this document) can also be easily added.</t>
        <t>The Join Proxy acts as a packet-by-packet proxy for UDP packets between Pledge and Registrar.
The cBRSKI protocol between Pledge and Registrar <xref target="cBRSKI"/> which this Join Proxy supports
uses UDP messages with DTLS-encrypted CoAP payloads, but the Join Proxy as described here is unaware
of these payloads.
The Join Proxy solution can therefore be easily extended to work for other UDP-based protocols,
as long as these protocols are agnostic to (or can be made to work with) the change of the IP and UDP headers
performed by the Join Proxy.</t>
        <t>In summary, the following steps are typically taken for the onboarding process of a Pledge:</t>
        <ol spacing="normal" type="1"><li>
            <t>Join Proxies in the network learn the IP address and UDP port of the Registrar.</t>
          </li>
          <li>
            <t>A new Pledge arrives: it discovers one or more Join Proxies and selects one.</t>
          </li>
          <li>
            <t>The Pledge sends a link-local UDP message to the selected Join Proxy.</t>
          </li>
          <li>
            <t>The Join Proxy relays the message to the Registrar (and port) of step 1.</t>
          </li>
          <li>
            <t>The Registrar sends a response UDP message back to the Join Proxy.</t>
          </li>
          <li>
            <t>The Join Proxy relays the message back to the Pledge.</t>
          </li>
          <li>
            <t>Step 3 to 6 repeat as needed, for multiple messages, to complete the onboarding protocol.</t>
          </li>
          <li>
            <t>The Pledge uses its obtained domain identity/credentials to join the domain network.</t>
          </li>
        </ol>
        <t>To reach the Registrar in step 4, the Join Proxy needs to be either configured with a Registrar address or
needs to dynamically discover a Registrar as detailed in <xref target="discovery-by-jp"/>.
This configuration/discovery is specified here as step 1.
Alternatively, in case of automated discovery it can also happen on-demand in step 4, at the moment that the Join Proxy
has data to send to the Registrar.</t>
      </section>
      <section anchor="solution-multi">
        <name>Solution for Multiple Registrars</name>
        <t>The solution description in <xref target="solution"/> assumes there is only one Registrar service configured or discovered by a
Join Proxy, defined by a single IP address and single UDP port.</t>
        <t>However, there may be multiple Registrars present in a network deployment.
There may be multiple Registrars supporting the exact same onboarding protocol, or multiple
Registrars supporting different onboarding protocols, or a combination of both.
Such cases are all supported by this specification, to enable redundancy, backward-compatibility, and
introduction of new variants of onboarding protocols over time.
Further information about the "BRSKI variants" concept can be found in <xref target="I-D.ietf-anima-brski-discovery"/>.</t>
        <t>See <xref target="spec-multi"/> for the specific requirements on the Join Proxy for supporting multiple Registrars or multiple
onboarding protocol variants.</t>
      </section>
      <section anchor="forming-6lowpan-mesh-networks-with-cbrski">
        <name>Forming 6LoWPAN Mesh Networks with cBRSKI</name>
        <t>The Join Proxy has been specifically designed to set up an entire 6LoWPAN mesh network using cBRSKI onboarding.
This section outlines how this process works and highlights the role that the Join Proxy plays in forming the mesh
network.</t>
        <t>Typically, the first node to be set up is a 6LoWPAN Border Router (6LBR) which will form the new mesh network and
decide on the network's configuration. The 6LBR may be configured using for example one of the below methods.
Note that multiple methods may be used within the scope of a single installation.</t>
        <ol spacing="normal" type="1"><li>
            <t>Manual administrative configuration</t>
          </li>
          <li>
            <t>Use non-constrained BRSKI <xref target="RFC8995"/> to automatically onboard over its high-speed network interface when it gets
powered on.</t>
          </li>
          <li>
            <t>Use cBRSKI <xref target="cBRSKI"/> to automatically onboard over its high-speed network interface when it gets powered on.</t>
          </li>
        </ol>
        <t>Once the 6LBR is enabled, it requires an active Registrar reachable via IP communication to onboard any Pledges.
Once cBRSKI onboarding is enabled (either administratively, or automatically) on the 6LBR, it can support
the onboarding of 6LoWPAN-enabled Pledges, via its 6LoWPAN network interface.
This 6LBR may host the cBRSKI Registrar itself, but the Registrar may also be hosted
elsewhere on the installation network.</t>
        <t>At the time the Registrar and the 6LBR are enabled, there may be zero Pledges, or there may be already one or more
installed and powered Pledges waiting - periodically attempting to discover a Join Proxy over
their 6LoWPAN network interface.</t>
        <t>A Registrar hosted on the 6LBR will, per <xref target="cBRSKI"/>, make itself discoverable as a Join Proxy so that Pledges can
use it for cBRSKI onboarding over a 6LoWPAN link (one hop).
Note that only some of the Pledges waiting to onboard may be direct neighbors of the Registrar/6LBR.
Other Pledges would need their traffic to be relayed by Join Proxies across one or more enrolled mesh
devices (6LR, see <xref target="fig-net"/>) in order to reach the Registrar/6LBR.
For this purpose, all or a subset of the enrolled Pledges start to act as Join Proxies themselves.
Which subset is selected, and when the Join Proxy function is enabled by a node, is out of scope of this document.</t>
        <t>The desired end state of the installation includes a network with a Registrar and all Pledges successfully enrolled in the
network domain and connected to one of the 6LoWPAN mesh networks that are part of the installation.
New Pledges may also be added by future network maintenance work on the installation.</t>
        <t>Pledges employ link-local communication until they are enrolled, at which point they stop being a "Pledge".
A Pledge will periodically try to discover a Join Proxy using for example link-local discovery requests,
as defined in <xref target="cBRSKI"/>.
Pledges that are neighbors of the Registrar will discover the Registrar itself (which is posing as a Join Proxy)
and will be enrolled first, using cBRSKI.
The Pledges that are not a neighbor of the Registrar will at first fail to find a Join Proxy.
Later on, they will eventually discover a Join Proxy so that they can be enrolled with cBRSKI too.
While this continues, more and more Join Proxies with a larger hop distance to the Registrar will emerge.
The mesh network auto-configures in this way, such that at the end of the onboarding process, all Pledges are enrolled
into the network domain and connected to the mesh network.</t>
      </section>
    </section>
    <section anchor="jp-spec">
      <name>Join Proxy Specification</name>
      <t>A Join Proxy can operate in two modes:</t>
      <ol spacing="normal" type="1"><li>
          <t>Stateful mode</t>
        </li>
        <li>
          <t>Stateless mode</t>
        </li>
      </ol>
      <t>The advantages and disadvantages of the two modes are presented in <xref target="jp-comparison"/>.</t>
      <section anchor="mode-implementation-and-configuration-requirements">
        <name>Mode Implementation and Configuration Requirements</name>
        <t>For a Join Proxy implementation on a node, there are three possible scenarios:</t>
        <ol spacing="normal" type="1"><li>
            <t>Both stateful and stateless modes are implemented. The Join Proxy can switch between these modes, depending on
configuration and/or auto-discovery of Registrar(s) for each option.</t>
          </li>
          <li>
            <t>Only stateful mode is implemented.</t>
          </li>
          <li>
            <t>Only stateless mode is implemented.</t>
          </li>
        </ol>
        <t>Options 2 and 3 have the advantage of reducing code size, testing efforts and deployment complexity,
but require all Join Proxy devices in the deployment to standardize on the same choice.</t>
        <t>A standard for a network-wide application or ecosystem profile, that integrates the Join Proxy functionality
as defined in this document, MAY specify the use of any of these three options.
It is expected that most deployments of Join Proxies will be in the context of such standards and
that these standards will be able to pick either option 2 or 3 based on considerations such as those in <xref target="jp-comparison"/>.</t>
        <t>A Join Proxy that is not adhering to such an additional standard MUST implement both modes (option 1).
A Join Proxy or Registrar not adhering to such additional standards is called "generic".
A generic Join Proxy that implements auto-discovery of Registrars and mode gives precedence to the stateless mode.
Specifically, if one or more Registrars with <tt>brski.rjp</tt> (see <xref target="discovery-by-jp-stateless"/> for details) are discovered,
the Join Proxy MUST use stateless mode in this network.
Otherwise, if at least one Registrar with resource type <tt>brski</tt> is discovered, it MUST use stateful mode in this network.</t>
        <t>If a Join Proxy implements both modes but does not implement methods to discover available Registrars
(for either mode), then it MUST use only the mode that is currently configured for the network, or configured
individually for the device.
The method or profile that defines such a configuration is outside the scope of this document.
If the mode is not explicitly configured in this case, the device MUST NOT operate as a Join Proxy.</t>
        <t>For a Join Proxy to be operational, the node on which it is running has to be
able to communicate with a Registrar (that is, exchange UDP messages with it).
Establishing this connectivity can happen fully automatically if the Join Proxy node first enrolls itself as a Pledge,
and then discovers the Registrar IP address/port, and if applicable its desired mode of operation
(stateful or stateless), through a discovery mechanism (see <xref target="discovery"/>).
Other methods, such as provisioning the Join Proxy are out of scope for this document
but equally feasible.
Such methods would typically be defined by a standard or ecosystem profile that integrates Join Proxy functionality.
Such provisioning can also be fully automated, for example if the Registrar IP address/port are included in the
network configuration parameters that are disseminated to each trusted network node.</t>
        <t>Independent of the mode of the Join Proxy or its discovery/configuration methods, the Pledge first discovers
(see <xref target="discovery-by-pledge"/>) and selects the most appropriate Join Proxy.
From the discovery result, the Pledge learns a Join Proxy's link-local IP address and UDP join-port.
Details of this discovery are defined by the onboarding protocol and are not in scope of this document.
For cBRSKI, this is defined in <xref section="10" sectionFormat="of" target="cBRSKI"/>.</t>
        <t>A generic cBRSKI Registrar by design necessarily implements the stateful mode, and it SHOULD implement support for
Join Proxies operating in the stateless mode.
Support for only the stateless mode is considered not to bring significant simplifications to a generic cBRSKI
Registrar implementation.
However, the generic cBRSKI Registrar MAY offer a configuration option to disable either the stateful or stateless
mode, which can be useful in a particular deployment.
A cBRSKI Registrar that is only implemented to support an aforementioned network-wide application or ecosystem profile
MAY implement one of stateful mode, stateless mode, or both.</t>
      </section>
      <section anchor="ip-port-notation">
        <name>Notation</name>
        <t>The following notation is used in this section in both text and figures:</t>
        <ul spacing="normal">
          <li>
            <t>The colon (<tt>:</tt>) separates IP address and port number (<tt>&lt;IP&gt;:&lt;port&gt;</tt>).</t>
          </li>
          <li>
            <t><tt>IP_P</tt> denotes the link-local IP address of the Pledge. For simplicity, it is assumed here that the Pledge only has
 one network interface.</t>
          </li>
          <li>
            <t><tt>IP_R</tt> denotes the routable IP address of the Registrar.</t>
          </li>
          <li>
            <t><tt>IP_Jl</tt> denotes the link-local IP address of the Join Proxy on the interface that connects it to the Pledge.</t>
          </li>
          <li>
            <t><tt>IP_Jr</tt> denotes the routable IP address of the Join Proxy.</t>
          </li>
          <li>
            <t><tt>p_P</tt> denotes the UDP port used by the Pledge for its onboarding/joining protocol, which may be cBRSKI. The Pledge
 acts in a UDP client role, specifically as a DTLS client for the case of cBRSKI.</t>
          </li>
          <li>
            <t><tt>p_Jl</tt> denotes the join-port of the Join Proxy.</t>
          </li>
          <li>
            <t><tt>p_Jr</tt> denotes the client port of the Join Proxy that it uses to forward packets to the Registrar.</t>
          </li>
          <li>
            <t><tt>p_R</tt> denotes the server port of the Registrar on which it serves the onboarding protocol, such as cBRSKI.</t>
          </li>
          <li>
            <t><tt>p_Rj</tt> denotes the server port of the Registrar on which it serves the JPY protocol.</t>
          </li>
          <li>
            <t><tt>JPY[H( ),C( )]</tt> denotes a JPY message, as defined by the JPY protocol, with header H and content C indicated in
 between the parentheses.</t>
          </li>
        </ul>
      </section>
      <section anchor="stateful-jp">
        <name>Stateful Join Proxy</name>
        <t>In stateful mode, the Join Proxy acts as a UDP circuit proxy that does not
change the UDP payload (called "data octets" in <xref target="RFC768"/>) but only rewrites
the IP and UDP headers of each UDP packet it forwards between a Pledge and a Registrar.</t>
        <t>The UDP flow mapping state maintained by the Join Proxy can be represented as a list of tuples, one for each
active Pledge, as follows:</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="80" width="520" viewBox="0 0 520 80" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 192,46 L 224,46" fill="none" stroke="black"/>
              <path d="M 192,50 L 224,50" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="232,48 220,42.4 220,53.6 " fill="black" transform="rotate(0,224,48)"/>
              <polygon class="arrowhead" points="200,48 188,42.4 188,53.6 " fill="black" transform="rotate(180,192,48)"/>
              <g class="text">
                <text x="32" y="36">Local</text>
                <text x="72" y="36">UDP</text>
                <text x="112" y="36">state</text>
                <text x="276" y="36">Routable</text>
                <text x="328" y="36">UDP</text>
                <text x="368" y="36">state</text>
                <text x="444" y="36">Time</text>
                <text x="488" y="36">state</text>
                <text x="44" y="52">(IP_P:p_P,</text>
                <text x="136" y="52">IP_Jl:p_Jl)</text>
                <text x="284" y="52">(IP_Jr:p_Jr,</text>
                <text x="376" y="52">IP_R:p_R)</text>
                <text x="472" y="52">(Exp-timer)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
   Local UDP state              Routable UDP state     Time state
  (IP_P:p_P, IP_Jl:p_Jl) <===> (IP_Jr:p_Jr, IP_R:p_R)  (Exp-timer)
]]></artwork>
        </artset>
        <t>In case a Join Proxy has multiple network interfaces that accept Pledges, an interface identifier needs to be added
on the leftmost tuple component. If a Join Proxy has multiple network interfaces to connect to (one or more) Registrars,
an interface identifier needs to be added to the rightmost tuple component.
Both of these are not shown further in this section, for better readability.</t>
        <t>The establishment of the UDP connection state on the Join Proxy is solely triggered by receipt of a UDP packet from
a Pledge with an <tt>IP_P:p_P</tt> link-local source and <tt>IP_Jl:p_Jl</tt> link-local
destination for which no mapping state exists, and that is terminated by a connection expiry timer.</t>
        <t><xref target="fig-stateful2"/> depicts an example DTLS session via the Join Proxy, to show how this state is used in practice.
In this case the Join Proxy knows the IP address of the Registrar (<tt>IP_R</tt>) and the default CoAPS port (<tt>p_R</tt> = <tt>5684</tt>)
on the Registrar is used to access cBRSKI resources.</t>
        <figure anchor="fig-stateful2">
          <name>Example of the message flow of a DTLS session via a stateful Join Proxy</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="552" viewBox="0 0 552 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,336" fill="none" stroke="black"/>
                <path d="M 112,32 L 112,80" fill="none" stroke="black"/>
                <path d="M 216,32 L 216,80" fill="none" stroke="black"/>
                <path d="M 328,32 L 328,336" fill="none" stroke="black"/>
                <path d="M 440,64 L 440,336" fill="none" stroke="black"/>
                <path d="M 544,32 L 544,336" fill="none" stroke="black"/>
                <path d="M 8,32 L 544,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 544,80" fill="none" stroke="black"/>
                <path d="M 56,96 L 72,96" fill="none" stroke="black"/>
                <path d="M 168,96 L 184,96" fill="none" stroke="black"/>
                <path d="M 168,112 L 184,112" fill="none" stroke="black"/>
                <path d="M 280,112 L 296,112" fill="none" stroke="black"/>
                <path d="M 176,144 L 192,144" fill="none" stroke="black"/>
                <path d="M 288,144 L 304,144" fill="none" stroke="black"/>
                <path d="M 72,176 L 88,176" fill="none" stroke="black"/>
                <path d="M 184,176 L 200,176" fill="none" stroke="black"/>
                <path d="M 72,240 L 88,240" fill="none" stroke="black"/>
                <path d="M 160,240 L 176,240" fill="none" stroke="black"/>
                <path d="M 184,256 L 200,256" fill="none" stroke="black"/>
                <path d="M 272,256 L 288,256" fill="none" stroke="black"/>
                <path d="M 192,288 L 208,288" fill="none" stroke="black"/>
                <path d="M 280,288 L 296,288" fill="none" stroke="black"/>
                <path d="M 80,304 L 96,304" fill="none" stroke="black"/>
                <path d="M 168,304 L 184,304" fill="none" stroke="black"/>
                <path d="M 8,336 L 544,336" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="304,112 292,106.4 292,117.6 " fill="black" transform="rotate(0,296,112)"/>
                <polygon class="arrowhead" points="296,256 284,250.4 284,261.6 " fill="black" transform="rotate(0,288,256)"/>
                <polygon class="arrowhead" points="200,288 188,282.4 188,293.6 " fill="black" transform="rotate(180,192,288)"/>
                <polygon class="arrowhead" points="192,96 180,90.4 180,101.6 " fill="black" transform="rotate(0,184,96)"/>
                <polygon class="arrowhead" points="184,240 172,234.4 172,245.6 " fill="black" transform="rotate(0,176,240)"/>
                <polygon class="arrowhead" points="184,144 172,138.4 172,149.6 " fill="black" transform="rotate(180,176,144)"/>
                <polygon class="arrowhead" points="88,304 76,298.4 76,309.6 " fill="black" transform="rotate(180,80,304)"/>
                <polygon class="arrowhead" points="80,176 68,170.4 68,181.6 " fill="black" transform="rotate(180,72,176)"/>
                <g class="text">
                  <text x="60" y="52">Pledge</text>
                  <text x="140" y="52">Join</text>
                  <text x="184" y="52">Proxy</text>
                  <text x="272" y="52">Registrar</text>
                  <text x="408" y="52">UDP</text>
                  <text x="456" y="52">Message</text>
                  <text x="56" y="68">(P)</text>
                  <text x="168" y="68">(J)</text>
                  <text x="264" y="68">(R)</text>
                  <text x="384" y="68">Src_IP:port</text>
                  <text x="496" y="68">Dst_IP:port</text>
                  <text x="120" y="100">ClientHello</text>
                  <text x="388" y="100">IP_P:p_P</text>
                  <text x="492" y="100">IP_Jl:p_Jl</text>
                  <text x="232" y="116">ClientHello</text>
                  <text x="396" y="116">IP_Jr:p_Jr</text>
                  <text x="488" y="116">IP_R:5684</text>
                  <text x="240" y="148">ServerHello</text>
                  <text x="392" y="148">IP_R:5684</text>
                  <text x="492" y="148">IP_Jr:p_Jr</text>
                  <text x="240" y="164">:</text>
                  <text x="136" y="180">ServerHello</text>
                  <text x="240" y="180">:</text>
                  <text x="396" y="180">IP_Jl:p_Jl</text>
                  <text x="484" y="180">IP_P:p_P</text>
                  <text x="136" y="196">:</text>
                  <text x="240" y="196">:</text>
                  <text x="392" y="196">:</text>
                  <text x="480" y="196">:</text>
                  <text x="144" y="212">[DTLS</text>
                  <text x="208" y="212">messages]</text>
                  <text x="392" y="212">:</text>
                  <text x="480" y="212">:</text>
                  <text x="136" y="228">:</text>
                  <text x="240" y="228">:</text>
                  <text x="392" y="228">:</text>
                  <text x="480" y="228">:</text>
                  <text x="124" y="244">Finished</text>
                  <text x="240" y="244">:</text>
                  <text x="388" y="244">IP_P:p_P</text>
                  <text x="492" y="244">IP_Jl:p_Jl</text>
                  <text x="236" y="260">Finished</text>
                  <text x="396" y="260">IP_Jr:p_Jr</text>
                  <text x="488" y="260">IP_R:5684</text>
                  <text x="244" y="292">Finished</text>
                  <text x="392" y="292">IP_R:5684</text>
                  <text x="492" y="292">IP_Jr:p_Jr</text>
                  <text x="132" y="308">Finished</text>
                  <text x="396" y="308">IP_Jl:p_Jl</text>
                  <text x="484" y="308">IP_P:p_P</text>
                  <text x="128" y="324">:</text>
                  <text x="240" y="324">:</text>
                  <text x="384" y="324">:</text>
                  <text x="488" y="324">:</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+------------+------------+-------------+--------------------------+
|   Pledge   | Join Proxy |  Registrar  |        UDP Message       |
|    (P)     |     (J)    |    (R)      | Src_IP:port | Dst_IP:port|
+------------+------------+-------------+-------------+------------+
|     ---ClientHello-->                 |   IP_P:p_P  | IP_Jl:p_Jl |
|                   ---ClientHello-->   |   IP_Jr:p_Jr| IP_R:5684  |
|                                       |             |            |
|                    <--ServerHello---  |   IP_R:5684 | IP_Jr:p_Jr |
|                            :          |             |            |
|       <--ServerHello---    :          |   IP_Jl:p_Jl| IP_P:p_P   |
|               :            :          |       :     |    :       |
|              [DTLS messages]          |       :     |    :       |
|               :            :          |       :     |    :       |
|       ---Finished-->       :          |   IP_P:p_P  | IP_Jl:p_Jl |
|                     ---Finished-->    |   IP_Jr:p_Jr| IP_R:5684  |
|                                       |             |            |
|                      <--Finished---   |   IP_R:5684 | IP_Jr:p_Jr |
|        <--Finished---                 |   IP_Jl:p_Jl| IP_P:p_P   |
|              :             :          |      :      |     :      |
+---------------------------------------+-------------+------------+
]]></artwork>
          </artset>
        </figure>
        <t>The Join Proxy MUST allocate a unique <tt>IP_Jr:p_Jr</tt> for every unique Pledge that it serves. This is typically done
by selecting a unique available port <tt>p_Jr</tt> for each Pledge.
Doing so enables the Join Proxy to correctly map the
UDP packets received from the Registrar back to the corresponding Pledges.
Also, it enables the Registrar to correctly distinguish multiple DTLS clients by means of IP address/port tuples.</t>
        <t>The default timeout for clearing the state for a Pledge MUST be 30 seconds after the last relayed packet was sent on
a UDP connection associated to that Pledge, in either direction.
The default timeout MAY be overridden by another value that is either configured, or discovered in some way out of
scope of this document.</t>
        <t>When a Join Proxy receives an ICMP <xref target="RFC792"/> / ICMPv6 <xref target="RFC4443"/> error from the Registrar, this may signal a
permanent change of the Registrar's IP address and/or port, or it may signal a temporary disruption of the network.
In such case, the Join Proxy SHOULD send an equivalent ICMP error message (with same Type and Code) to the Pledge.
The specific Pledge can be determined from the IP/UDP header information that is contained in the ICMP error message
body, if included.
In case the ICMP message body is empty, or insufficient information is included there, the Join Proxy does not send
the ICMP error message to the Pledge because the intended recipient cannot be determined.</t>
        <t>To protect itself and the Registrar against malfunctioning Pledges and/or denial of service (DoS) attacks,
the Join Proxy SHOULD limit the number of simultaneous state tuples for a given <tt>IP_P</tt> to at most 2,
and it SHOULD limit the number of simultaneous state tuples per network interface to at most 10.</t>
        <t>When a new Pledge connection is received and the Join Proxy is unable to build new mapping state for it, for example
due to the above limits, the Join Proxy SHOULD return an ICMP Type 1 "Destination Unreachable" error message
with Code 1, "Communication with destination administratively prohibited".</t>
      </section>
      <section anchor="stateless-jp">
        <name>Stateless Join Proxy</name>
        <t>Stateless Join Proxy operation eliminates the need and complexity to
maintain per-Pledge UDP connection mapping state on the proxy and the machinery to build, maintain and
remove this mapping state.
It also removes the need to protect this mapping state against DoS attacks and may also reduce memory and
CPU requirements on the proxy.</t>
        <t>Stateless Join Proxy operations work by introducing a new JPY message used in communication between Proxy and Registrar.
This message will store the state "in the network".
It consists of two parts:</t>
        <ul spacing="normal">
          <li>
            <t>Header (H) field: contains state information about the Pledge (P) such as the link-local IP address and UDP port.</t>
          </li>
          <li>
            <t>Contents (C) field: the original UDP payload (data octets according to <xref target="RFC768"/>) received from the Pledge,
or destined to the Pledge.</t>
          </li>
        </ul>
        <t>When the join proxy receives a UDP message from a Pledge, it encodes the Pledge's
link-local IP address, interface ID and UDP (source) port of the UDP packet into the Header field
and the UDP payload into the Contents field and sends the packet to the Registrar from
a fixed source UDP port. When the Registrar sends packets for the Pledge,
it MUST return the Header field unchanged, so that the join proxy can decode the
Header to reconstruct the Pledge's link-local IP address, interface and UDP (destination) port
for the return UDP packet.
<xref target="fig-stateless"/> shows this per-packet mapping on the join proxy for a DTLS session.</t>
        <t>The Registrar transiently stores the Header field information.
The Registrar uses the Contents field to execute the Registrar functionality.
When the Registrar replies, it wraps its DTLS message in a JPY message and sends it back to the Join Proxy.
The Registrar SHOULD NOT assume that it can decode the Header Field of a received JPY message, it MUST simply replicate
it when responding.
The Header of a reply JPY message contains the original source link-local address and port of the Pledge from the
transient state stored earlier and the Contents field contains the DTLS payload created by the Registrar.</t>
        <t>On receiving the JPY message, the Join Proxy retrieves the two parts.
It uses the Header field information to send a link-local UDP message containing the (DTLS) payload retrieved from the
Contents field to a particular Pledge.</t>
        <t>When the Registrar receives such a JPY message, it MUST treat the Header H as a single additional opaque identifier
of all packets associated to a UDP connection with a Pledge.
Whereas in the stateful proxy case, all packets with the same 4-tuple <tt>(IP_Jr:p_Jr, IP_R:p_R)</tt> belong to a single
Pledge's UDP connection,
in the stateless proxy case only the packets with the same 5-tuple <tt>(IP_Jr:p_Jr, IP_R:p_Rj, H)</tt> belong to a single
Pledge's UDP connection.
The JPY message Contents field contains the UDP payload of the packet for that Pledge's UDP connection.
Packets with different header H belong to different Pledge's UDP connections.</t>
        <t>In the stateless mode, the Registrar MUST offer the JPY protocol on a discoverable UDP port (<tt>p_Rj</tt>).
There is no default port number available for the JPY protocol, unlike in the stateful mode where the Registrar
can host all its services on the CoAPS default port (5684).</t>
        <figure anchor="fig-stateless">
          <name>Example of the message flow of a DTLS session via a stateless Join Proxy</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="560" viewBox="0 0 560 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,352" fill="none" stroke="black"/>
                <path d="M 128,32 L 128,80" fill="none" stroke="black"/>
                <path d="M 232,32 L 232,80" fill="none" stroke="black"/>
                <path d="M 360,32 L 360,352" fill="none" stroke="black"/>
                <path d="M 456,64 L 456,352" fill="none" stroke="black"/>
                <path d="M 552,32 L 552,352" fill="none" stroke="black"/>
                <path d="M 8,32 L 552,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 552,80" fill="none" stroke="black"/>
                <path d="M 40,96 L 56,96" fill="none" stroke="black"/>
                <path d="M 152,96 L 176,96" fill="none" stroke="black"/>
                <path d="M 168,112 L 184,112" fill="none" stroke="black"/>
                <path d="M 328,112 L 344,112" fill="none" stroke="black"/>
                <path d="M 168,144 L 184,144" fill="none" stroke="black"/>
                <path d="M 328,144 L 344,144" fill="none" stroke="black"/>
                <path d="M 40,176 L 64,176" fill="none" stroke="black"/>
                <path d="M 160,176 L 176,176" fill="none" stroke="black"/>
                <path d="M 40,240 L 56,240" fill="none" stroke="black"/>
                <path d="M 128,240 L 152,240" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 328,256 L 344,256" fill="none" stroke="black"/>
                <path d="M 168,288 L 184,288" fill="none" stroke="black"/>
                <path d="M 328,288 L 344,288" fill="none" stroke="black"/>
                <path d="M 40,320 L 64,320" fill="none" stroke="black"/>
                <path d="M 8,352 L 552,352" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="352,256 340,250.4 340,261.6 " fill="black" transform="rotate(0,344,256)"/>
                <polygon class="arrowhead" points="352,112 340,106.4 340,117.6 " fill="black" transform="rotate(0,344,112)"/>
                <polygon class="arrowhead" points="184,96 172,90.4 172,101.6 " fill="black" transform="rotate(0,176,96)"/>
                <polygon class="arrowhead" points="176,288 164,282.4 164,293.6 " fill="black" transform="rotate(180,168,288)"/>
                <polygon class="arrowhead" points="176,144 164,138.4 164,149.6 " fill="black" transform="rotate(180,168,144)"/>
                <polygon class="arrowhead" points="160,240 148,234.4 148,245.6 " fill="black" transform="rotate(0,152,240)"/>
                <polygon class="arrowhead" points="48,320 36,314.4 36,325.6 " fill="black" transform="rotate(180,40,320)"/>
                <polygon class="arrowhead" points="48,176 36,170.4 36,181.6 " fill="black" transform="rotate(180,40,176)"/>
                <g class="text">
                  <text x="68" y="52">Pledge</text>
                  <text x="156" y="52">Join</text>
                  <text x="200" y="52">Proxy</text>
                  <text x="304" y="52">Registrar</text>
                  <text x="424" y="52">UDP</text>
                  <text x="472" y="52">Message</text>
                  <text x="64" y="68">(P)</text>
                  <text x="184" y="68">(J)</text>
                  <text x="296" y="68">(R)</text>
                  <text x="408" y="68">Src_IP:port</text>
                  <text x="504" y="68">Dst_IP:port</text>
                  <text x="104" y="100">ClientHello</text>
                  <text x="404" y="100">IP_P:p_P</text>
                  <text x="500" y="100">IP_Jl:p_Jl</text>
                  <text x="252" y="116">JPY[H(IP_P:p_P),</text>
                  <text x="412" y="116">IP_Jr:p_Jr</text>
                  <text x="496" y="116">IP_R:p_Rj</text>
                  <text x="280" y="132">C(ClientHello)]</text>
                  <text x="252" y="148">JPY[H(IP_P:p_P),</text>
                  <text x="408" y="148">IP_R:p_Rj</text>
                  <text x="500" y="148">IP_Jr:p_Jr</text>
                  <text x="280" y="164">C(ServerHello)]</text>
                  <text x="112" y="180">ServerHello</text>
                  <text x="412" y="180">IP_Jl:p_Jl</text>
                  <text x="492" y="180">IP_P:p_P</text>
                  <text x="128" y="196">:</text>
                  <text x="408" y="196">:</text>
                  <text x="496" y="196">:</text>
                  <text x="96" y="212">[</text>
                  <text x="124" y="212">DTLS</text>
                  <text x="180" y="212">messages</text>
                  <text x="224" y="212">]</text>
                  <text x="408" y="212">:</text>
                  <text x="496" y="212">:</text>
                  <text x="128" y="228">:</text>
                  <text x="408" y="228">:</text>
                  <text x="496" y="228">:</text>
                  <text x="92" y="244">Finished</text>
                  <text x="404" y="244">IP_P:p_P</text>
                  <text x="500" y="244">IP_Jl:p_Jl</text>
                  <text x="252" y="260">JPY[H(IP_P:p_P),</text>
                  <text x="412" y="260">IP_Jr:p_Jr</text>
                  <text x="496" y="260">IP_R:p_Rj</text>
                  <text x="268" y="276">C(Finished)]</text>
                  <text x="252" y="292">JPY[H(IP_P:p_P),</text>
                  <text x="408" y="292">IP_R:p_Rj</text>
                  <text x="500" y="292">IP_Jr:p_Jr</text>
                  <text x="268" y="308">C(Finished)]</text>
                  <text x="108" y="324">Finished--</text>
                  <text x="412" y="324">IP_Jl:p_Jl</text>
                  <text x="492" y="324">IP_P:p_P</text>
                  <text x="128" y="340">:</text>
                  <text x="408" y="340">:</text>
                  <text x="496" y="340">:</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------------+------------+---------------+-----------------------+
|    Pledge    | Join Proxy |    Registrar  |      UDP Message      |
|     (P)      |     (J)    |      (R)      |Src_IP:port|Dst_IP:port|
+--------------+------------+---------------+-----------+-----------+
|   ---ClientHello--->                      | IP_P:p_P  |IP_Jl:p_Jl |
|                   ---JPY[H(IP_P:p_P), --> | IP_Jr:p_Jr|IP_R:p_Rj  |
|                          C(ClientHello)]  |           |           |
|                   <--JPY[H(IP_P:p_P), --- | IP_R:p_Rj |IP_Jr:p_Jr |
|                          C(ServerHello)]  |           |           |
|   <---ServerHello---                      | IP_Jl:p_Jl|IP_P:p_P   |
|              :                            |     :     |    :      |
|          [ DTLS messages ]                |     :     |    :      |
|              :                            |     :     |    :      |
|   ---Finished--->                         | IP_P:p_P  |IP_Jl:p_Jl |
|                   ---JPY[H(IP_P:p_P), --> | IP_Jr:p_Jr|IP_R:p_Rj  |
|                          C(Finished)]     |           |           |
|                   <--JPY[H(IP_P:p_P), --- | IP_R:p_Rj |IP_Jr:p_Jr |
|                          C(Finished)]     |           |           |
|   <---Finished--                          | IP_Jl:p_Jl|IP_P:p_P   |
|              :                            |     :     |    :      |
+-------------------------------------------+-----------+-----------+
]]></artwork>
          </artset>
        </figure>
        <t>When a Join Proxy receives an ICMP <xref target="RFC792"/> / ICMPv6 <xref target="RFC4443"/> error from the Registrar, this may signal a
permanent change of the Registrar's IP address and/or port, or it may signal a temporary disruption of the network.</t>
        <t>Unlike a stateful Join Proxy, the stateless Join Proxy cannot determine the Pledge to which this ICMP error should
be mapped, because the JPY header containing this information is not included in the ICMP error message.
Therefore, it cannot inform the Pledge of the specific error that occurred.</t>
      </section>
      <section anchor="stateless-jpy">
        <name>JPY Protocol and Messages</name>
        <t>JPY messages are used by a stateless Join Proxy to carry required state information in relayed UDP messages,
such that it does not need to store this state in memory.
JPY messages are carried directly over the UDP layer.
So, there is no CoAP or DTLS layer used between the JPY messages and the UDP layer.</t>
        <t>A Registrar that supports the JPY protocol also uses JPY messages to return relayed UDP messages to the stateless Join
Proxy, including the state information that it needs.</t>
        <section anchor="jpy-uri-syntax-port-number-and-path">
          <name>JPY URI Syntax, Port Number and Path</name>
          <t>A JPY URI MUST include an explicit port number, otherwise it is not valid.
There is no default UDP port defined for the <tt>jpy</tt> scheme.</t>
          <t>Although a path (other than an empty or root path) MAY be present in a JPY URI, this document does not define a
particular semantics for such a path.
A receiver MUST ignore any path included in a JPY URI, while a future specification might define a particular use for
the URI path.</t>
        </section>
        <section anchor="jpy-message-structure">
          <name>JPY Message Structure</name>
          <t>Each JPY message consists of one CBOR <xref target="RFC8949"/> array with 2 elements:</t>
          <ol spacing="normal" type="1"><li>
              <t>The Header (H) with the Join Proxy's per-message state data: wrapped in a CBOR byte string.
The state data SHOULD be at most 32 bytes.</t>
            </li>
            <li>
              <t>The Content (C) field: the binary (DTLS) payload being relayed, wrapped in a CBOR byte string.
The payload is encrypted.
The Join Proxy cannot decrypt it and therefore has no knowledge of any transported (CoAP) messages, or the URI
paths or media types within the CoAP messages.</t>
            </li>
          </ol>
          <t>Using CDDL <xref target="RFC8610"/>, the CBOR array that constitutes the JPY message can be formally defined as:</t>
          <figure anchor="fig-cddl">
            <name>CDDL representation of a JPY message</name>
            <artwork align="left"><![CDATA[
    jpy_message =
    [
       jpy_header  : bstr,
       jpy_content : bstr,
    ]
]]></artwork>
          </figure>
          <t>The <tt>jpy_header</tt> state data is to be reflected (unmodified) by the Registrar when sending return JPY messages to the
Join Proxy.
The header's internal representation is not standardized: it can be constructed by the Join Proxy in whatever way.
It is to be used by the Join Proxy to record state for the included <tt>jpy_content</tt> field, which includes the
information which Pledge the data in <tt>jpy_content</tt> came from.</t>
          <t>This state data stored in the JPY message is similar to the "state object" mechanism described in <xref section="7.1" sectionFormat="of" target="RFC9031"/>.
However, since the CoAP protocol layer (if any) is inside the DTLS layer, so end-to-end encrypted between the Pledge and the
Registrar, it is not possible for the Join Proxy to act as a CoAP proxy per <xref section="5.7" sectionFormat="of" target="RFC7252"/>.</t>
          <t>Detailed examples of a complete JPY message are shown in <xref target="appendix-examples-detailed"/>.</t>
        </section>
        <section anchor="jpy-message-port-usage">
          <name>JPY Message Port Usage</name>
          <t>For the JPY messages sent to the Registrar, the Join Proxy SHOULD use the same UDP source port and IP source address
for the JPY messages sent on behalf of all Pledges.</t>
          <t>Although a Join Proxy MAY vary the UDP source port, doing so creates more local state.
A Join Proxy with multiple CPUs (unlikely in a constrained system, but possible) could, for instance, use
different UDP source port numbers to demultiplex connections across CPUs.</t>
        </section>
        <section anchor="jpy-message-overhead-and-mtu-size">
          <name>JPY Message Overhead and MTU Size</name>
          <t>The use of the JPY message CBOR encoding adds a 3-6 byte overhead on top of the data carried within the Header and Contents fields.
The Header state data itself (up to 32 bytes) also adds an overhead on each UDP message exchanged between Join Proxy and Registrar.
Therefore, a protocol using the stateless Join Proxy MUST use (UDP) payloads that are bounded in size, such that
the maximum payload length used plus the maximum overhead size (38 bytes) stays below the MTU size of the network.
cBRSKI is designed to work even for the minimum IPv6 MTU of 1280 bytes, by configuring the DTLS maximum fragment length
and using CoAP blockwise transfer for large resource transfers <xref target="cBRSKI"/>.</t>
          <t>At the CoAP level, using the cBRSKI <xref target="cBRSKI"/> and the EST-CoAPS <xref target="RFC9148"/> protocols,
the CoAP blockwise options <xref target="RFC7959"/> are often used to split large payloads into multiple data blocks.
The Registrar and the Pledge MUST select a block size that would allow the addition of the JPY message structure
without violating MTU sizes.</t>
        </section>
        <section anchor="jpy-message-security">
          <name>JPY Message Security</name>
          <t>Application or ecosystem standards adopting the stateless Join Proxy need to determine if there is the potential
for attacks originating from the trusted network side of the Join Proxy.
Such attacks would involve senders other than a trustworthy Registrar sending packets to the Join Proxy, impersonating
the trusted Registrar by using its source address and port.
In many well-designed solutions, this attack vector can be excluded because IP source addresses are verified.
For example, in Autonomic Networking Infrastructure (ANI) networks, the Autonomic Control Plane (ACP) (<xref target="RFC8994"/>)
ensures that only trustworthy nodes can communicate amongst each other.
In an ACP, compromising an ACP node may be as hard as compromising the Registrar itself.
Likewise, in many Wi-Fi mesh networks and 6LoWPAN mesh networks, link-layer security is applied and claimed to achieve
similar levels of secure and trusted communication within the scope of the mesh.</t>
          <t>For stateless Join Proxies that only operate in such secured network environments, it can be sufficient to only
accept JPY messages originating from a Registrar's IP address and port, and not use any additional encryption
or integrity protection of the JPY header.
The Registrar's IP address and port are configured on the Join Proxy, or discovered by the Join Proxy,
for sending JPY messages.</t>
          <t>Generic stateless Join Proxies on the other hand can not assume any such additional security measures for the
network that connects the Proxy to the Registrar.
For example, a generic Join Proxy's network connection to a Registrar may pass through a lightly protected enterprise
network, such as a university or campus network, without additional security.
Therefore, a generic stateless Join Proxy SHOULD encrypt and integrity-protect the state data prior to wrapping it in
a CBOR byte string in <tt>jpy_header</tt>.</t>
          <t>It SHOULD be encrypted with a symmetric key known only to the Join Proxy itself.
When the Join Proxy attempts to decrypt a received <tt>jpy_header</tt> byte string, and either the decryption or the
integrity check fails, it MUST silently discard the JPY message.</t>
          <t>The symmetric key need not persist on a long-term basis, and MAY be changed periodically.
Because a key change during an onboarding attempt of a Pledge could lead to DTLS retransmissions, or even failure of
the onboarding attempt, it is RECOMMENDED to change the key infrequently: for example every 24 hours.</t>
        </section>
        <section anchor="example-format-for-jpy-header-data">
          <name>Example Format for JPY Header Data</name>
          <t>A typical JPY message header format, prior to encryption, could be constructed using the following binary
data structure (expressed in C style notation):</t>
          <artwork><![CDATA[
struct jpy_header_plaintext {
    uint8_t  family;   // Only valid in the range 0...1
    uint8_t  ifindex;  // Only valid in the range 0...MAX_INTERFACES
    uint16_t srcport;  // Only valid > 0
    uint8_t  iid[8];
    uint32_t zero;     // Only valid == 0
};
]]></artwork>
          <t>This is illustrative only: the format of the data inside <tt>jpy_header</tt> is not subject to standardization and may vary
across Pledges.
It may for example use a CBOR array encoding, formally defined and constrained using CDDL <xref target="RFC8610"/>.</t>
          <t>The data structure stores the Pledge's UDP source port (<tt>srcport</tt>), the IID bits of the Pledge's originating IPv6
link-Local address (<tt>iid</tt>), the IPv4/IPv6 <tt>family</tt> (as a <tt>uint8</tt> value 0 or 1) and an interface index (<tt>ifindex</tt>) to
provide the link-local scope for the case that the Join Proxy has multiple network interfaces.
The <tt>zero</tt> field is both for integrity protection and padding.
It is always value zero (before encryption) on sending and MUST be zero after decryption on reception.</t>
          <t>The resulting plaintext size is 16 bytes.
This size fits into a single AES128 CBC block for instance, resulting in a 16 byte block of encrypted state data,
<tt>jpy_header_ciphertext</tt>.
Due to the way that CBC encryption mixes all the contents of a block together, an attacker that modifies any bit of
this block will most likely change one of the zero bits in the <tt>family</tt> and/or <tt>zero</tt> fields as well.</t>
          <t>This <tt>jpy_header_ciphertext</tt> data is then wrapped in a CBOR byte string to form the <tt>jpy_header</tt> element.
This results in a <tt>jpy_header</tt> CBOR element of 17 bytes which includes a 1-byte overhead to encode the data as a
CBOR byte string of length 16.</t>
          <t>Note: when IPv6 is used only the lower 64-bits of the source IPv6 address need to be recorded,
because they must be by design all IPv6 link-local addresses, so the upper 64-bits are just "fe80::" and can be elided.
For IPv4, a link-local IPv4 address <xref target="RFC3927"/> would be used, and it would always fit into the 64 bits of the <tt>iid</tt>
field.
On link types where the Interface IDentifier (IID) is not 64-bits, a different field size for <tt>iid</tt> will be necessary.</t>
          <t>Replay protection is not included in this example security solution, because the regular transport layers of cBRSKI
and BRSKI, respectively UDP and TCP, also do not provide replay protection.
Rather, replay protection is handled by the higher layer protocol, respectively DTLS and TLS.
If replay protection is desired, AES with GCM <xref target="RFC5288"/> SHOULD be used.</t>
          <t>Detailed examples of a complete JPY message are shown in <xref target="appendix-examples-detailed"/>.</t>
        </section>
        <section anchor="processing-by-registrar">
          <name>Processing by Registrar</name>
          <t>On reception of a JPY message by the Registrar, the Registrar MUST verify that the number of CBOR array elements is 2 or more.
To implement this specification, only the first two elements are used.</t>
          <t>The data in the <tt>jpy_content</tt> field is provided as input to a DTLS library <xref target="RFC9147"/>, which along with the
5-tuple defined in <xref target="stateless-jp"/> provides enough information for the Registrar to pick an appropriate (active)
client context.
Note that the same UDP socket will need to be used for multiple DTLS flows, which is atypical for how DTLS usually
uses sockets.
The <tt>jpy_header</tt> field can be used to select an appropriate DTLS context, as DTLS headers do not contain any kind
of per-session context.
The <tt>jpy_header</tt> field needs to be linked to the DTLS context, and when a DTLS message needs to be sent back to the
client, the <tt>jpy_header</tt> needs to be included in a JPY message along with the DTLS message in the <tt>jpy_content</tt> field.</t>
        </section>
      </section>
      <section anchor="spec-multi">
        <name>Handling Multiple Registrars</name>
        <t>In a network deployment there MAY be multiple Registrar hosts present, each host operating one or more
Registrar service(s).
Regardless of the number of (physical or logical) hosts, each of these Registrar services is considered a
separate Registrar.
One or more of these Registrars MAY be administratively configured in a Join Proxy, by a method out of scope
of this specification.
Also one or more of these Registrars MAY be found by a Join Proxy using its discovery method(s).</t>
        <t>The Join Proxy is not necessarily aware of all onboarding protocol variants that are enabled in its network.
Specifically, it may not be aware of the expected communication timing characteristics for the onboarding protocol
that it is providing its proxy function for.
Therefore, the final selection of onboarding protocol and Registrar is left to the Pledge and not to the Join Proxy.
Also the determination of "onboarding progress" and whether the Registrar is considered responsive or not is left to
the Pledge performing the onboarding protocol.
This is consistent with <xref section="4.1" sectionFormat="of" target="RFC8995"/> which defines how a BRSKI Pledge attempts onboarding via
multiple Join Proxies and defines the related retry and switching behaviors.</t>
        <t>If a Join Proxy discovers more Registrars than it can simultaneously offer to Pledges,
given its resource limits or implementation-defined limits, then the Join Proxy MUST select from the discovered
Registrars in an implementation-defined manner.
Future work such as <xref target="I-D.ietf-anima-brski-discovery"/> may define a selection process for this case.</t>
        <t>As an example, a network deployment might include a single Registrar host that offers two Registrar services:
cBRSKI and a hypothetical "future BRSKI" (fuBRSKI).
Both services are hosted on different UDP ports.
Each Join Proxy is configured with these two Registrar services, and when a Pledge is sending CoAP discovery requests
each Join Proxy in range will respond with both services in a CoAP discovery response.
The Join Proxy is able to distinguish the properties of the two Registrar services by the differences in the
CoRE Link Format <xref target="RFC6690"/> parameters included in the two responded onboarding service descriptions.</t>
      </section>
    </section>
    <section anchor="discovery">
      <name>Discovery</name>
      <section anchor="discovery-by-jp">
        <name>Join Proxy Discovers Registrar</name>
        <t>In order to accommodate automatic configuration of the Join Proxy, it MUST discover the location and capabilities
of the Registrar, in case this information is not configured already.</t>
        <t>In BRSKI <xref target="RFC8995"/> the GeneRic Autonomic Signaling Protocol (GRASP) <xref target="RFC8990"/> protocol is supported for discovery
of a BRSKI Registrar in an Autonomic Control Plane (ACP).
However, this document does not target the ACP context of use.
Therefore, the definition of how to use GRASP for discovering a cBRSKI Registrar in an ACP is left to future work such as
<xref target="I-D.ietf-anima-brski-discovery"/>.</t>
        <t>Although multiple discovery methods can be supported in principle by a single Join Proxy, this document only defines
one default method for a Join Proxy to discover a Registrar: using CoAP resource discovery queries <xref target="RFC6690"/> <xref target="RFC7252"/>.</t>
        <t>The CoAP discovery query to use depends on the intended mode of operation of the Join Proxy: stateless or stateful.
A stateless Join Proxy needs to discover a UDP endpoint (address and port) that can accept JPY messages, supporting
the <tt>jpy</tt> scheme.
On the other hand, a stateful Join Proxy needs to discover a single CoAPS endpoint supporting the <tt>coaps</tt> scheme that
offers the full set of cBRSKI Registrar resources.</t>
        <section anchor="discovery-by-jp-stateless">
          <name>Stateless Case</name>
          <t>The stateless Join Proxy can discover the JPY protocol endpoint of the Registrar by sending a multicast CoAP GET
discovery query to the "/.well-known/core" resource including a resource type (rt) query parameter "brski.rjp".
The latter CoAP resource type is defined in <xref target="iana-rt"/>.</t>
          <t>Upon success, the return payload MUST contain the port of the Registrar on which the JPY protocol handler is hosted.
The resource path returned in this payload MUST be the root (<tt>/</tt>) resource, the only resource currently defined for
the JPY protocol.
This exchange is shown below:</t>
          <artwork><![CDATA[
  REQ: GET coap://[ff05::fd]/.well-known/core?rt=brski.rjp

  RES: 2.05 Content
    Content-Format: 40 (application/link-format)
    Payload:
      <jpy://[ipv6_address]:port>;rt=brski.rjp
]]></artwork>
          <t>In this case, the multicast CoAP request is sent to the site-local "All CoAP Nodes" multicast IPv6 address
<tt>ff05::fd</tt>.
In some deployments, a smaller scope than site-local is more appropriate to reduce the network load due to this
CoAP discovery traffic.
For example, in a 6LoWPAN mesh network where a JPY protocol endpoint is always hosted on a 6LoWPAN Border Router (6LBR),
the realm-local scope "All CoAP Nodes" address <tt>ff03::fd</tt> can be used.</t>
          <t>The reason that the IPv6 address (field <tt>ipv6_address</tt>) is always included in the link-format result is that
in the <xref target="RFC6690"/> link format, and per <xref section="3.2" sectionFormat="of" target="RFC3986"/>, the authority component cannot include only a port
number but has to include also one of an IP literal or a hostname.</t>
          <t>The returned port (field <tt>port</tt>) is expected to process the encapsulated JPY messages described in <xref target="stateless-jpy"/>.
The scheme is <tt>jpy</tt>, described in <xref target="jpyscheme"/>, and not <tt>coaps</tt> because the JPY messages effectively
form a new protocol that encapsulates CoAPS messages.</t>
        </section>
        <section anchor="stateful-case">
          <name>Stateful Case</name>
          <t>The stateful Join Proxy can discover the Registrar's cBRSKI resource set by sending a multicast CoAP GET
discovery query to the "/.well-known/core" resource including a resource type (rt) query parameter "brski".
The latter CoAP resource type is defined in <xref target="cBRSKI"/>.</t>
          <t>Upon success, the return payload contains the URI of the Registrar on which the cBRSKI resources
are hosted.
This exchange is shown below:</t>
          <artwork><![CDATA[
  REQ: GET coap://[ff05::fd]/.well-known/core?rt=brski

  RES: 2.05 Content
    Content-Format: 40 (application/link-format)
    Payload:
      <coaps://[ipv6_address]:port/uri_path>;rt=brski
]]></artwork>
          <t>The <tt>port</tt> field and its preceding colon are optionally included: if elided, the default CoAPS port 5684 is implied.
The <tt>uri_path</tt> field may be a single CoAP URI path resource label, or it may be a hierarchy of resources.
For efficiency, it is RECOMMENDED for the Registrar to configure the URI path as short as possible, for example <tt>b</tt>.</t>
          <t>Note that the Join Proxy does not use the returned <tt>uri_path</tt> information, while it uses the <tt>ipv6_address</tt> and <tt>port</tt>
information for its relaying operations.</t>
        </section>
        <section anchor="examples">
          <name>Examples</name>
          <t>A Registrar with address <tt>2001:db8:0:abcd::52</tt>, with the JPY protocol hosted on port 7634,
and the CoAPS resources hosted on default port 5684 could for example reply to a multicast CoAP query of a stateful
Join Proxy as follows:</t>
          <artwork><![CDATA[
  REQ: GET coap://[ff05::fd]/.well-known/core?rt=brski

  RES: 2.05 Content
    Content-Format: 40 (application/link-format)
    Payload:
      <coaps://[2001:db8:0:abcd::52]/b>;rt=brski
]]></artwork>
          <t>The same Registrar could for example reply to a multicast CoAP query of a stateless Join Proxy as follows:</t>
          <artwork><![CDATA[
  REQ: GET coap://[ff05::fd]/.well-known/core?rt=brski.rjp

  RES: 2.05 Content
    Content-Format: 40 (application/link-format)
    Payload:
      <jpy://[2001:db8:0:abcd::52]:7634>;rt=brski.rjp
]]></artwork>
          <t>In these examples, the Join Proxy in a specific mode of operation (stateful or stateless) only queries for those
cBRSKI services that it minimally needs to perform the Join Proxy function in that mode.
For this reason, wildcard queries (such as <tt>rt=brski*</tt>) are not sent.</t>
        </section>
      </section>
      <section anchor="discovery-by-pledge">
        <name>Pledge Discovers Join Proxy</name>
        <t>Regardless of whether the Join Proxy operates in stateful or stateless mode, it is discovered by the Pledge identically.
<xref section="10" sectionFormat="of" target="cBRSKI"/> defines the details of the CoAP discovery request sent by the Pledge.</t>
        <t>A Join Proxy implementation by default MUST support this discovery method.
If there is another method configured, by some means outside of the scope of this document, the default method MAY
be deactivated.</t>
        <t>The join-port of the Join Proxy is discovered by sending a multicast GET request to "/.well-known/core" including a
query parameter with wildcard value "brski-jp=*".
This CoRE link format target attribute ("brski-jp") is defined in <xref target="iana-target-attribute"/>.
Upon success, the return payload will contain a link that indicates the join-port.</t>
        <t>The target attribute "brski-jp" in a link signals that the link's sender functions as a cBRSKI Join Proxy, offering
cBRSKI/EST-coaps resources of a (remote) Registrar at the indicated join-port, via the CoAPS protocol, at the
well-known URIs <tt>/.well-known/brski</tt> and <tt>/.well-known/est</tt>.</t>
        <t>The meta-example below shows the discovery of the join-port (value <tt>join_port</tt>) at the Join Proxy:</t>
        <artwork><![CDATA[
  REQ: GET coap://[ff02::fd]/.well-known/core?brski-jp=*

  RES: 2.05 Content
    Content-Format: 40 (application/link-format)
    Payload:
      <>;brski-jp=join_port
]]></artwork>
        <t>In actual examples based on this, the string <tt>join_port</tt> would be a decimal number string.</t>
        <t>In the returned CoRE LF link, the target URI (within <tt>&lt;&gt;</tt>) is an empty, unused
&lt;URI-Reference&gt; pointing to the <tt>/.well-known/core</tt> resource from which the link format document was
retrieved (see <xref section="5.1" sectionFormat="of" target="RFC3986"/> for relative URI resolution details).</t>
        <t>This specific target URI is used to minimize the size of the link format document.</t>
      </section>
      <section anchor="discovery-by-pledge-multi">
        <name>Pledge Discovers Multiple Join-Ports</name>
        <t>A Pledge MUST be able to handle multiple join-ports being returned in a discovery response sent by a Join Proxy.
This can happen if the network supports multiple Registrars and/or multiple Registrar-services as defined in
<xref target="spec-multi"/>.
Then, each Registrar gets assigned its own join-port (up to a limit imposed by Join Proxy implementation) so
that a Pledge is enabled to failover to another Registrar if a prior onboarding attempt fails.</t>
        <t>Discovery of multiple Registrars works in the same way as discovery of a single Registrar as defined in
<xref target="discovery-by-pledge"/>, except that multiple links are returned in the CoRE link format document.</t>
        <t>The meta-example below shows the Pledge's discovery of two join-ports (57101 and 57102) on a Join Proxy,
each associated to a different cBRSKI protocol variant, defined by two CoRE link format links:</t>
        <artwork><![CDATA[
  REQ: GET coap://[ff02::fd]/.well-known/core?brski-jp=*

  RES: 2.05 Content
    Content-Format: 40 (application/link-format)
    Payload:
      <>;brski-jp=57101,
      <>;brski-jp=57102;param1=value1;param2=value2
]]></artwork>
        <t>The parameter values (<tt>param1</tt> and <tt>param2</tt>) are included for illustrative purposes and are not actual parameter values.
In a real example, these would contain Link Format parameters specifically defined for the cBRSKI service discovery.
Such parameters may be defined in future work (<xref target="I-D.ietf-anima-brski-discovery"/>).
These parameters, if understood by the Pledge, help in selecting the optimal matching onboarding protocol variant
of cBRSKI.
If the Pledge does not understand these parameters, it can select any one of the returned join-ports for cBRSKI
onboarding.
If the attempt subsequently fails, the Pledge repeats the attempt using another discovered join-port as defined
by <xref target="cBRSKI"/>.</t>
      </section>
    </section>
    <section anchor="jp-comparison">
      <name>Comparison of Stateless and Stateful Modes</name>
      <t>The stateful and stateless mode of operation for the Join Proxy each have their advantages and disadvantages.
This section helps operators and/or profile-specifiers to make a choice between the two modes based on
the available device resources and network bandwidth.</t>
      <t>Stateful mode introduces the complexity of maintaining per-connection state, which can increase processing and memory
requirements on the proxy compared to the stateless mode under ideal conditions.
Additionally, it opens up a wider range of potential implementation challenges in the presence of misbehaving or
malicious Pledges.
For example: How can state be effectively limited?
How can malicious Pledges be detected—or at least prevented from negatively impacting non-malicious nodes?
And so on.</t>
      <t>If the proxy is deployed on nodes that support frequent and reliable software updates, then tailoring software
enhancements based on the observed attack profile(s) in the deployment scenario is an effective way to improve and
harden the implementation.
However, many constrained devices either lack this software agility or intentionally avoid it.
In such environments, stateless mode becomes advantageous, as it offloads most of the complex hardening responsibilities
to the Registrar, allowing the proxy implementation to remain as lightweight as possible.
Ultimately, a stateless proxy requires no more protective mechanisms than a basic packet-forwarding router.</t>
      <t>The main concern for a stateless Join Proxy is the risk of forwarding an excessive number of packets to the Registrar,
particularly over low-bandwidth connections such as 6LoWPAN links.
Rate-limiting forwarded packets is the primary defense mechanism in such cases.
All other Pledge-specific protections can be delegated to the Registrar, which is expected to have the necessary
software agility to handle these.</t>
      <t>The following table summarizes more comparison details.</t>
      <table align="left" anchor="fig-comparison">
        <name>Comparison between stateful and stateless Join Proxy mode</name>
        <thead>
          <tr>
            <th align="left">Properties</th>
            <th align="left">Stateful mode</th>
            <th align="left">Stateless mode</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">State Information</td>
            <td align="left">The Join Proxy needs additional storage to maintain mappings between the address and port number of the Pledge and those of the Registrar.</td>
            <td align="left">No information is maintained by the Join Proxy. Registrar transiently stores the JPY message header.</td>
          </tr>
          <tr>
            <td align="left">Packet size</td>
            <td align="left">The size of a relayed message is the same as the original message.</td>
            <td align="left">Size of a relayed message is up to 38 bytes larger than the original: due to additional context data.</td>
          </tr>
          <tr>
            <td align="left">Technical complexity</td>
            <td align="left">The Join Proxy needs additional functions to maintain state information, and specify the source and destination addresses and ports of relayed messages.</td>
            <td align="left">Requires new JPY message structure (CBOR) in Join Proxy. The Registrar requires a function to process JPY messages.</td>
          </tr>
          <tr>
            <td align="left">Join Proxy Ports</td>
            <td align="left">Join Proxy needs discoverable join-port</td>
            <td align="left">Join Proxy needs discoverable join-port</td>
          </tr>
          <tr>
            <td align="left">Registrar Ports</td>
            <td align="left">Registrar can host on a single UDP port.</td>
            <td align="left">Registrar must host on two UDP ports: one for DTLS, one for JPY messages.</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>For a Pledge using a Join Proxy, all the security considerations and requirements in <xref section="4.1" sectionFormat="of" target="RFC8995"/> apply.
While doing discovery of Join Proxies, the Pledge can be deceived by malicious Join Proxy announcements.</t>
      <t>The subsequent communication of a Pledge with a Registrar that flows via the Join Proxy is end-to-end protected by DTLS.</t>
      <t>A malicious Join Proxy has a number of relay/routing options for messages sent by a Pledge:</t>
      <ul spacing="normal">
        <li>
          <t>It relays messages to a malicious Registrar.
This is the same case as the presence of a "malicious Registrar" discussed in <xref target="RFC8995"/>.</t>
        </li>
        <li>
          <t>It does not relay messages, or does not return the responses from the Registrar to the Pledge.
This is equivalent to the case of a non-responding Registrar discussed in <xref section="4.1" sectionFormat="of" target="RFC8995"/>
and <xref section="5.1" sectionFormat="of" target="RFC8995"/>.</t>
        </li>
        <li>
          <t>It uses the returned responses of the Registrar for its own (attack) purposes.
This is very unlikely due to the DTLS security.</t>
        </li>
        <li>
          <t>It uses the request from the Pledge to take the Pledge certificate and impersonate the Pledge.
This is very unlikely because that requires it to acquire the private key of the Pledge, for an attack to be
effective.</t>
        </li>
      </ul>
      <t>A malicious Pledge may also craft and send messages to a Join Proxy:</t>
      <ul spacing="normal">
        <li>
          <t>It can construct an invalid DTLS or UDP message and send it to the open join-port of the Join Proxy.
    A Join Proxy will accept the message and relay to the Registrar without checking the payload.
    The Registrar will now parse the invalid message as DTLS protocol payload.
    Due to the security properties of DTLS, it is highly unlikely that this malicious payload will lead to message
    acceptance or to the Registrar's malfunctioning.
    The Registrar of course MUST be prepared to receive invalid and/or non-DTLS payloads in this way.
    If the Pledge uses large UDP payloads, the attacker is able to misuse network resources.
    This way, a DoS attack could be performed by using multiple malicious Pledges, or using a single device posing as
    multiple Pledges.</t>
        </li>
      </ul>
      <t>For a malicious node that is either a neighbor of a Join Proxy, or is a router on the network path to the Registrar,
and the node is part of the trusted network:</t>
      <ul spacing="normal">
        <li>
          <t>It may sniff the messages routed by the Join Proxy.
    It is very unlikely that the malicious node can decrypt the DTLS payload.
    The malicious node may be able to read the inner data structure in the JPY Header field, if that is not encrypted.
    This does expose some information about the Pledge attempting to join, but this can be mitigated by the Pledge
    using a new (random) link-local address for each onboarding attempt.</t>
        </li>
      </ul>
      <t>In case the JPY Header is not encrypted, a malicious node has a number of options to craft a JPY message and
send it to a stateless Join Proxy:</t>
      <ul spacing="normal">
        <li>
          <t>It can craft a JPY message with header fields of its choice based on earlier observed contents of JPY messages
sent by a stateless Join Proxy.
In that case, the Join Proxy would accept the message and send the Content field data to a Pledge as a UDP message.
Such a message could disrupt an ongoing DTLS session.
It could also allow the attacker to access an unsecured UDP port that a Pledge may have exposed.
For this reason, a Pledge MUST NOT accept messages on other UDP ports than its port used for onboarding while
an onboarding attempt is ongoing.</t>
        </li>
      </ul>
      <t>It should be noted here that the JPY message CBOR array and the JPY Header field are not DTLS protected.
When the communication between stateless Join Proxy and Registrar passes over an unsecure network, an attacker can
change the CBOR array, and change the Header field if no encryption is used there.
These concerns are also expressed in <xref target="RFC8974"/>.
It is also pointed out here that the encryption by the source of the JPY Header, the Join Proxy, is a local matter.
Similar to <xref target="RFC8974"/>, the use of AES-CCM <xref target="RFC3610"/> with a 64-bit tag is recommended, combined with a sequence
number and a replay window.</t>
      <t>A "malicious Registrar" (see <xref target="RFC8995"/>) may also be unknowingly selected by a genuine (non-compromised) Join Proxy.
This may happen when the malicious Registrar either modifies the network's Registrar address configuration or presents
itself as a Registrar using the discovery method used in the network.
If the discovery of Registrars is performed in an unsecured manner within the trusted network, it would allow
the malicious Registrar to present itself as a Registrar candidate.
CoAP discovery defined in <xref target="discovery"/> is, for example, defined without any transport-layer or application-layer
security.
A trusted Join Proxy may therefore relay a Pledge's messages to it.</t>
      <t>It is the responsibility of a Pledge to monitor if an onboarding attempt with the selected Join Proxy and selected
join-port on this Proxy (in case of multiple) is proceeding sufficiently quickly.
If this is not the case, the Pledge needs to switch to another join-port and/or another Join Proxy to retry its
onboarding attempt.
See <xref target="spec-multi"/> for more details on this.</t>
      <t>In some installations, layer 2 (link layer) security is provided between all node pairs of a mesh network.
In such an environment, in case all mesh nodes are trusted, and the Registrar is also located on the mesh network,
and on-mesh attackers are not a concern, then encryption of the JPY Header field as specified in this document is not
necessary because the layer 2 security already protects it.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="iana-rt">
        <name>Resource Type Attributes Registry</name>
        <t>This specification registers one new Resource Type (rt=) Link Target Attributes in the
"Resource Type (rt=) Link Target Attribute Values" registry under the "Constrained RESTful Environments (CoRE)
Parameters" registry group, per the <xref target="RFC6690"/> procedure.</t>
        <artwork><![CDATA[
Attribute Value: brski.rjp
Description: cBRSKI Registrar JPY Port for cBRSKI onboarding.
Reference:   [This RFC]
]]></artwork>
      </section>
      <section anchor="iana-target-attribute">
        <name>Target Attributes Registry</name>
        <t>This specification registers one new target attribute in the
"Target Attributes" registry under the "Constrained RESTful Environments (CoRE)
Parameters" registry group, per the <xref target="RFC9423"/> procedure.</t>
        <artwork><![CDATA[
Attribute Name: brski-jp
Description:    cBRSKI Join Proxy UDP port for cBRSKI onboarding.
Change Controller: IESG
Reference:      [This RFC]
]]></artwork>
        <t>The common usage of this attribute is defined in <xref target="discovery-by-pledge"/> and can be easily applied without being
aware of the exact semantics.</t>
        <t>The formal semantics of this attribute is defined as follows:
the attribute "brski-jp", when present in a link with the "hosts" relation per <xref section="2.2" sectionFormat="of" target="RFC6690"/>,
identifies that the host included in the origin of the link's context URI (<xref section="2.1" sectionFormat="of" target="RFC6690"/>) additionally
hosts cBRSKI "/.well-known/brski" resources (as per <xref target="cBRSKI"/>) on the endpoint <tt>coaps://host:port</tt> where '<tt>port</tt>' is
the port number equal to the value of the <tt>brski-jp</tt> attribute.</t>
      </section>
      <section anchor="jpyscheme">
        <name>'jpy' Scheme Registration</name>
        <t>This specification registers a new URI scheme per <xref target="RFC7595"/> under the IANA "Uniform Resource Identifier (URI) Schemes"
registry.</t>
        <artwork><![CDATA[
Scheme name: jpy
Status:      Permanent
Applications/protocols that use this scheme name:
             cBRSKI Join Proxy, JPY protocol
Contact:     ANIMA WG
Change controller: IESG
References:  [This RFC]
CRI Scheme Number: TBA from the First Come First Served range
]]></artwork>
        <t>The scheme specification is provided below.</t>
        <ul spacing="normal">
          <li>
            <t>Scheme syntax: defined in <xref target="stateless-jpy"/> of [This RFC].</t>
          </li>
          <li>
            <t>Scheme semantics: JPY protocol as defined in <xref target="stateless-jpy"/> of [This RFC].</t>
          </li>
          <li>
            <t>Encoding considerations: the scheme encoding conforms to the encoding rules established for
URIs in <xref target="RFC3986"/>, i.e., internationalized and reserved characters
are expressed using UTF-8-based percent-encoding.</t>
          </li>
          <li>
            <t>Interoperability considerations: none.</t>
          </li>
          <li>
            <t>Security considerations: all of the security considerations for the <tt>coaps</tt> scheme as defined in
<xref section="11.1" sectionFormat="of" target="RFC7252"/> apply when CoAPS protocol traffic is transported over the JPY protocol.
In addition, users of this scheme should be aware that as part of the intended use, a UDP payload that was created
under the <tt>coaps</tt> scheme is embedded by a Join Proxy into a new UDP message conforming to the
<tt>jpy</tt> scheme, without the Join Proxy being able to reconstruct which CoAPS URI was originally used by the
sender of the CoAPS message, since most of the URI information is stored in DTLS-protected data.
The receiving server can transform the JPY message sent under the <tt>jpy</tt> scheme back to a
DTLS-encrypted CoAP message that uses the <tt>coaps</tt> scheme, by extracting the JPY message payload.
However, any CoAP-related information not stored in the DTLS-protected data (such as data in UDP/IP headers) is
subject to modification by the Join Proxy or other proxies in the communication path to the receiver.
Any protocol transported in JPY messages MUST be resilient against such modifications.</t>
          </li>
        </ul>
      </section>
      <section anchor="dns-sd-spec">
        <name>Service Name and Transport Protocol Port Number Registry</name>
        <t>This specification registers two service names under the IANA "Service Name and Transport Protocol Port Number" registry.</t>
        <artwork><![CDATA[
Service Name: brski-jp
Transport Protocol(s): udp
Assignee:  IESG <iesg@ietf.org>
Contact:  IESG <chair@ietf.org>
Description: Constrained Bootstrapping Remote Secure Key
             Infrastructure (cBRSKI) Join Proxy for onboarding
Reference:   [This RFC]

Service Name: brski-rjp
Transport Protocol(s): udp
Assignee:  IESG <iesg@ietf.org>
Contact:  IESG <chair@ietf.org>
Description: Constrained Bootstrapping Remote Secure Key
             Infrastructure (cBRSKI) Registrar JPY Port, supporting
             the JPY protocol, used by stateless cBRSKI Join Proxies
Reference:   [This RFC]
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC5288">
          <front>
            <title>AES Galois Counter Mode (GCM) Cipher Suites for TLS</title>
            <author fullname="J. Salowey" initials="J." surname="Salowey"/>
            <author fullname="A. Choudhury" initials="A." surname="Choudhury"/>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <date month="August" year="2008"/>
            <abstract>
              <t>This memo describes the use of the Advanced Encryption Standard (AES) in Galois/Counter Mode (GCM) as a Transport Layer Security (TLS) authenticated encryption operation. GCM provides both confidentiality and data origin authentication, can be efficiently implemented in hardware for speeds of 10 gigabits per second and above, and is also well-suited to software implementations. This memo defines TLS cipher suites that use AES-GCM with RSA, DSA, and Diffie-Hellman-based key exchange mechanisms. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5288"/>
          <seriesInfo name="DOI" value="10.17487/RFC5288"/>
        </reference>
        <reference anchor="RFC768">
          <front>
            <title>User Datagram Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="August" year="1980"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC768"/>
        </reference>
        <reference anchor="RFC792">
          <front>
            <title>Internet Control Message Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="792"/>
          <seriesInfo name="DOI" value="10.17487/RFC792"/>
        </reference>
        <reference anchor="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"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta"/>
            <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="RFC8366bis">
          <front>
            <title>A Voucher Artifact for Bootstrapping Protocols</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Toerless Eckert" initials="T. T." surname="Eckert">
              <organization>Futurewei Technologies Inc.</organization>
            </author>
            <author fullname="Qiufang Ma" initials="Q." surname="Ma">
              <organization>Huawei</organization>
            </author>
            <date day="5" month="July" year="2026"/>
            <abstract>
              <t>   This document defines a strategy to securely assign a candidate
   device (Pledge) to an Owner using an artifact signed, directly or
   indirectly, by the Pledge's manufacturer.  This artifact is known as
   a "Voucher".

   This document defines an artifact format as a YANG-defined JSON or
   CBOR document that has been signed using a variety of cryptographic
   systems.

   The Voucher Artifact is normally generated by the Pledge's
   manufacturer (i.e., the Manufacturer Authorized Signing Authority
   (MASA)).

   This document obsoletes RFC8366: it includes a number of desired
   extensions into the YANG module.  The Voucher Request YANG module
   defined in RFC8995 is also updated and now included in this document,
   as well as other YANG extensions needed for variants of RFC8995.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-anima-rfc8366bis-32"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC8995">
          <front>
            <title>Bootstrapping Remote Secure Key Infrastructure (BRSKI)</title>
            <author fullname="M. Pritikin" initials="M." surname="Pritikin"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="T. Eckert" initials="T." surname="Eckert"/>
            <author fullname="M. Behringer" initials="M." surname="Behringer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document specifies automated bootstrapping of an Autonomic Control Plane. To do this, a Secure Key Infrastructure is bootstrapped. This is done using manufacturer-installed X.509 certificates, in combination with a manufacturer's authorizing service, both online and offline. We call this process the Bootstrapping Remote Secure Key Infrastructure (BRSKI) protocol. Bootstrapping a new device can occur when using a routable address and a cloud service, only link-local connectivity, or limited/disconnected networks. Support for deployment models with less stringent security requirements is included. Bootstrapping is complete when the cryptographic identity of the new key infrastructure is successfully deployed to the device. The established secure connection can be used to deploy a locally issued certificate to the device as well.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8995"/>
          <seriesInfo name="DOI" value="10.17487/RFC8995"/>
        </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="RFC9148">
          <front>
            <title>EST-coaps: Enrollment over Secure Transport with the Secure Constrained Application Protocol</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <author fullname="P. Kampanakis" initials="P." surname="Kampanakis"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="S. Raza" initials="S." surname="Raza"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>Enrollment over Secure Transport (EST) is used as a certificate provisioning protocol over HTTPS. Low-resource devices often use the lightweight Constrained Application Protocol (CoAP) for message exchanges. This document defines how to transport EST payloads over secure CoAP (EST-coaps), which allows constrained devices to use existing EST functionality for provisioning certificates.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9148"/>
          <seriesInfo name="DOI" value="10.17487/RFC9148"/>
        </reference>
        <reference anchor="cBRSKI">
          <front>
            <title>Constrained Bootstrapping Remote Secure Key Infrastructure (cBRSKI)</title>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
              <organization>vanderstok consultancy</organization>
            </author>
            <author fullname="Panos Kampanakis" initials="P." surname="Kampanakis">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="8" month="June" year="2026"/>
            <abstract>
              <t>   This document defines the Constrained Bootstrapping Remote Secure Key
   Infrastructure (cBRSKI) protocol, which provides a solution for
   secure zero-touch onboarding of resource-constrained (IoT) devices
   into the network of a domain owner.  This protocol is designed for
   constrained networks, which may have limited data throughput or may
   experience frequent packet loss. cBRSKI is a variant of the BRSKI
   protocol, which uses an artifact signed by the device manufacturer
   called the "voucher" which enables a new device and the owner's
   network to mutually authenticate.  While the BRSKI voucher data is
   encoded in JSON, cBRSKI uses a compact CBOR-encoded voucher.  The
   BRSKI voucher data definition is extended with new data types that
   allow for smaller voucher sizes.  The Enrollment over Secure
   Transport (EST) protocol, used in BRSKI, is replaced with EST-over-
   CoAPS; and HTTPS used in BRSKI is replaced with DTLS-secured CoAP
   (CoAPS).  This document Updates RFC 8995 and RFC 9148.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-anima-constrained-voucher-31"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3610">
          <front>
            <title>Counter with CBC-MAC (CCM)</title>
            <author fullname="D. Whiting" initials="D." surname="Whiting"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="N. Ferguson" initials="N." surname="Ferguson"/>
            <date month="September" year="2003"/>
            <abstract>
              <t>Counter with CBC-MAC (CCM) is a generic authenticated encryption block cipher mode. CCM is defined for use with 128-bit block ciphers, such as the Advanced Encryption Standard (AES).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3610"/>
          <seriesInfo name="DOI" value="10.17487/RFC3610"/>
        </reference>
        <reference anchor="RFC3927">
          <front>
            <title>Dynamic Configuration of IPv4 Link-Local Addresses</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="E. Guttman" initials="E." surname="Guttman"/>
            <date month="May" year="2005"/>
            <abstract>
              <t>To participate in wide-area IP networking, a host needs to be configured with IP addresses for its interfaces, either manually by the user or automatically from a source on the network such as a Dynamic Host Configuration Protocol (DHCP) server. Unfortunately, such address configuration information may not always be available. It is therefore beneficial for a host to be able to depend on a useful subset of IP networking functions even when no address configuration is available. This document describes how a host may automatically configure an interface with an IPv4 address within the 169.254/16 prefix that is valid for communication with other devices connected to the same physical (or logical) link.</t>
              <t>IPv4 Link-Local addresses are not suitable for communication with devices not directly connected to the same physical (or logical) link, and are only used where stable, routable addresses are not available (such as on ad hoc or isolated networks). This document does not recommend that IPv4 Link-Local addresses and routable addresses be configured simultaneously on the same interface. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3927"/>
          <seriesInfo name="DOI" value="10.17487/RFC3927"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC4944">
          <front>
            <title>Transmission of IPv6 Packets over IEEE 802.15.4 Networks</title>
            <author fullname="G. Montenegro" initials="G." surname="Montenegro"/>
            <author fullname="N. Kushalnagar" initials="N." surname="Kushalnagar"/>
            <author fullname="J. Hui" initials="J." surname="Hui"/>
            <author fullname="D. Culler" initials="D." surname="Culler"/>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document describes the frame format for transmission of IPv6 packets and the method of forming IPv6 link-local addresses and statelessly autoconfigured addresses on IEEE 802.15.4 networks. Additional specifications include a simple header compression scheme using shared context and provisions for packet delivery in IEEE 802.15.4 meshes. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4944"/>
          <seriesInfo name="DOI" value="10.17487/RFC4944"/>
        </reference>
        <reference anchor="RFC6550">
          <front>
            <title>RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks</title>
            <author fullname="T. Winter" initials="T." role="editor" surname="Winter"/>
            <author fullname="P. Thubert" initials="P." role="editor" surname="Thubert"/>
            <author fullname="A. Brandt" initials="A." surname="Brandt"/>
            <author fullname="J. Hui" initials="J." surname="Hui"/>
            <author fullname="R. Kelsey" initials="R." surname="Kelsey"/>
            <author fullname="P. Levis" initials="P." surname="Levis"/>
            <author fullname="K. Pister" initials="K." surname="Pister"/>
            <author fullname="R. Struik" initials="R." surname="Struik"/>
            <author fullname="JP. Vasseur" initials="JP." surname="Vasseur"/>
            <author fullname="R. Alexander" initials="R." surname="Alexander"/>
            <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="RFC6690">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links. Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type. "RESTful" refers to the Representational State Transfer (REST) architecture. A well-known URI is defined as a default entry point for requesting the links hosted by a server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC6775">
          <front>
            <title>Neighbor Discovery Optimization for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs)</title>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby"/>
            <author fullname="S. Chakrabarti" initials="S." surname="Chakrabarti"/>
            <author fullname="E. Nordmark" initials="E." surname="Nordmark"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="November" year="2012"/>
            <abstract>
              <t>The IETF work in IPv6 over Low-power Wireless Personal Area Network (6LoWPAN) defines 6LoWPANs such as IEEE 802.15.4. This and other similar link technologies have limited or no usage of multicast signaling due to energy conservation. In addition, the wireless network may not strictly follow the traditional concept of IP subnets and IP links. IPv6 Neighbor Discovery was not designed for non- transitive wireless links, as its reliance on the traditional IPv6 link concept and its heavy use of multicast make it inefficient and sometimes impractical in a low-power and lossy network. This document describes simple optimizations to IPv6 Neighbor Discovery, its addressing mechanisms, and duplicate address detection for Low- power Wireless Personal Area Networks and similar networks. The document thus updates RFC 4944 to specify the use of the optimizations defined here. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6775"/>
          <seriesInfo name="DOI" value="10.17487/RFC6775"/>
        </reference>
        <reference anchor="RFC7030">
          <front>
            <title>Enrollment over Secure Transport</title>
            <author fullname="M. Pritikin" initials="M." role="editor" surname="Pritikin"/>
            <author fullname="P. Yee" initials="P." role="editor" surname="Yee"/>
            <author fullname="D. Harkins" initials="D." role="editor" surname="Harkins"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>This document profiles certificate enrollment for clients using Certificate Management over CMS (CMC) messages over a secure transport. This profile, called Enrollment over Secure Transport (EST), describes a simple, yet functional, certificate management protocol targeting Public Key Infrastructure (PKI) clients that need to acquire client certificates and associated Certification Authority (CA) certificates. It also supports client-generated public/private key pairs as well as key pairs generated by the CA.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7030"/>
          <seriesInfo name="DOI" value="10.17487/RFC7030"/>
        </reference>
        <reference anchor="RFC7102">
          <front>
            <title>Terms Used in Routing for Low-Power and Lossy Networks</title>
            <author fullname="JP. Vasseur" initials="JP." surname="Vasseur"/>
            <date month="January" year="2014"/>
            <abstract>
              <t>This document provides a glossary of terminology used in routing requirements and solutions for networks referred to as Low-Power and Lossy Networks (LLNs). An LLN is typically composed of many embedded devices with limited power, memory, and processing resources interconnected by a variety of links. There is a wide scope of application areas for LLNs, including industrial monitoring, building automation (e.g., heating, ventilation, air conditioning, lighting, access control, fire), connected home, health care, environmental monitoring, urban sensor networks, energy management, assets tracking, and refrigeration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7102"/>
          <seriesInfo name="DOI" value="10.17487/RFC7102"/>
        </reference>
        <reference anchor="RFC7228">
          <front>
            <title>Terminology for Constrained-Node Networks</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Ersue" initials="M." surname="Ersue"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks. This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7228"/>
          <seriesInfo name="DOI" value="10.17487/RFC7228"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7595">
          <front>
            <title>Guidelines and Registration Procedures for URI Schemes</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <date month="June" year="2015"/>
            <abstract>
              <t>This document updates the guidelines and recommendations, as well as the IANA registration processes, for the definition of Uniform Resource Identifier (URI) schemes. It obsoletes RFC 4395.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="35"/>
          <seriesInfo name="RFC" value="7595"/>
          <seriesInfo name="DOI" value="10.17487/RFC7595"/>
        </reference>
        <reference anchor="RFC7959">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby"/>
            <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="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8990">
          <front>
            <title>GeneRic Autonomic Signaling Protocol (GRASP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="B. Carpenter" initials="B." role="editor" surname="Carpenter"/>
            <author fullname="B. Liu" initials="B." role="editor" surname="Liu"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document specifies the GeneRic Autonomic Signaling Protocol (GRASP), which enables autonomic nodes and Autonomic Service Agents to dynamically discover peers, to synchronize state with each other, and to negotiate parameter settings with each other. GRASP depends on an external security environment that is described elsewhere. The technical objectives and parameters for specific application scenarios are to be described in separate documents. Appendices briefly discuss requirements for the protocol and existing protocols with comparable features.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8990"/>
          <seriesInfo name="DOI" value="10.17487/RFC8990"/>
        </reference>
        <reference anchor="RFC8994">
          <front>
            <title>An Autonomic Control Plane (ACP)</title>
            <author fullname="T. Eckert" initials="T." role="editor" surname="Eckert"/>
            <author fullname="M. Behringer" initials="M." role="editor" surname="Behringer"/>
            <author fullname="S. Bjarnason" initials="S." surname="Bjarnason"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>Autonomic functions need a control plane to communicate, which depends on some addressing and routing. This Autonomic Control Plane should ideally be self-managing and be as independent as possible of configuration. This document defines such a plane and calls it the "Autonomic Control Plane", with the primary use as a control plane for autonomic functions. It also serves as a "virtual out-of-band channel" for Operations, Administration, and Management (OAM) communications over a network that provides automatically configured, hop-by-hop authenticated and encrypted communications via automatically configured IPv6 even when the network is not configured or is misconfigured.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8994"/>
          <seriesInfo name="DOI" value="10.17487/RFC8994"/>
        </reference>
        <reference anchor="RFC8974">
          <front>
            <title>Extended Tokens and Stateless Clients in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>This document provides considerations for alleviating Constrained Application Protocol (CoAP) clients and intermediaries of keeping per-request state. To facilitate this, this document additionally introduces a new, optional CoAP protocol extension for extended token lengths.</t>
              <t>This document updates RFCs 7252 and 8323 with an extended definition of the "TKL" field in the CoAP message header.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8974"/>
          <seriesInfo name="DOI" value="10.17487/RFC8974"/>
        </reference>
        <reference anchor="RFC9031">
          <front>
            <title>Constrained Join Protocol (CoJP) for 6TiSCH</title>
            <author fullname="M. Vučinić" initials="M." role="editor" surname="Vučinić"/>
            <author fullname="J. Simon" initials="J." surname="Simon"/>
            <author fullname="K. Pister" initials="K." surname="Pister"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes the minimal framework required for a new device, called a "pledge", to securely join a 6TiSCH (IPv6 over the Time-Slotted Channel Hopping mode of IEEE 802.15.4) network. The framework requires that the pledge and the JRC (Join Registrar/Coordinator, a central entity), share a symmetric key. How this key is provisioned is out of scope of this document. Through a single CoAP (Constrained Application Protocol) request-response exchange secured by OSCORE (Object Security for Constrained RESTful Environments), the pledge requests admission into the network, and the JRC configures it with link-layer keying material and other parameters. The JRC may at any time update the parameters through another request-response exchange secured by OSCORE. This specification defines the Constrained Join Protocol and its CBOR (Concise Binary Object Representation) data structures, and it describes how to configure the rest of the 6TiSCH communication stack for this join process to occur in a secure manner. Additional security mechanisms may be added on top of this minimal framework.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9031"/>
          <seriesInfo name="DOI" value="10.17487/RFC9031"/>
        </reference>
        <reference anchor="RFC9423">
          <front>
            <title>Constrained RESTful Environments (CoRE) Target Attributes Registry</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="April" year="2024"/>
            <abstract>
              <t>The Constrained RESTful Environments (CoRE) specifications apply web technologies to constrained environments. One such important technology is Web Linking (RFC 8288), which CoRE specifications use as the basis for a number of discovery protocols, such as the Link Format (RFC 6690) in the Constrained Application Protocol's (CoAP's) resource discovery process (Section 7.2 of RFC 7252) and the Resource Directory (RD) (RFC 9176).</t>
              <t>Web Links can have target attributes, the names of which are not generally coordinated by the Web Linking specification (Section 2.2 of RFC 8288). This document introduces an IANA registry for coordinating names of target attributes when used in CoRE. It updates the "RD Parameters" IANA registry created by RFC 9176 to coordinate with this registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9423"/>
          <seriesInfo name="DOI" value="10.17487/RFC9423"/>
        </reference>
        <reference anchor="I-D.ietf-anima-brski-discovery">
          <front>
            <title>BRSKI discovery and variations</title>
            <author fullname="Toerless Eckert" initials="T. T." surname="Eckert">
              <organization>Futurewei USA</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="23" month="June" year="2026"/>
            <abstract>
              <t>   This document specifies procedures for variations of the
   "Bootstrapping Remote Secure Key Infrastructure" (BRSKI) series of
   protocols to automatically announce, discover and select responders
   using different discovery mechanisms such as DNS-SD, GRASP or CORE-
   LF.  Different variations are not interoperable so initiators need to
   be able to find responders supporting the variation(s) they support.
   Procedures for BRSKI proxies are defined that allow proxying of
   traffic for any current and future variation.  Procedures to discover
   BRSKI Pledges by their identifier are defined.

   All procedures are defined such that they rely on IANA defined tables
   through which not only well specified but also possible but not yet
   validated variations of BRSKI or additional discovery mechanisms can
   be supported simply by adding entries to the IANA tables.

   Many of the procedures and mechanisms covered by this document may
   equally be applied to discovery of other protocols, especially when
   they have non-interoperable variations.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-anima-brski-discovery-13"/>
        </reference>
        <reference anchor="I-D.kumar-dice-dtls-relay">
          <front>
            <title>DTLS Relay for Constrained Environments</title>
            <author fullname="Sandeep S. Kumar" initials="S. S." surname="Kumar">
              <organization>Philips Research</organization>
            </author>
            <author fullname="Sye Loong Keoh" initials="S. L." surname="Keoh">
              <organization>University of Glasgow Singapore</organization>
            </author>
            <author fullname="Oscar Garcia-Morchon" initials="O." surname="Garcia-Morchon">
              <organization>Philips Research</organization>
            </author>
            <date day="20" month="October" year="2014"/>
            <abstract>
              <t>   The 6LoWPAN and CoAP standards defined for resource-constrained
   devices are fast emerging as the de-facto protocols for enabling the
   Internet-of-Things (IoTs).  Security is an important concern in IoTs
   and the DTLS protocol has been chosen as the preferred method for
   securing CoAP messages.  DTLS is a point-to-point protocol relying on
   IP routing to deliver messages between the client and the server.
   However in some low-power lossy networks (LLNs) with multi-hop, a new
   "joining" device may not be initially IP-routable.  Moreover, it
   exists in a separate, unauthenticated domain at the point of first
   contact and therefore cannot be initially trusted.  This puts
   limitations on the ability to use DTLS as an authentication and
   confidentiality protocol at this stage.  These devices being
   Resource-constrained often cannot accommodate more than one security
   protocol in their code memory.  To overcome this problem we suggest
   DTLS as the single protocol and therefore, we present a DTLS Relay
   solution for the non-IP routable "joining" device to enable it to
   establish a secure DTLS connection with a DTLS Server.  Furthermore
   we present a stateful and stateless mode of operation for the DTLS
   Relay.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kumar-dice-dtls-relay-02"/>
        </reference>
        <reference anchor="I-D.richardson-anima-state-for-joinrouter">
          <front>
            <title>Considerations for stateful vs stateless join router in ANIMA bootstrap</title>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <date day="22" month="September" year="2020"/>
            <abstract>
              <t>   This document explores a number of issues affecting the decision to
   use a stateful or stateless forwarding mechanism by the join router
   (aka join assistant) during the bootstrap process for ANIMA.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-richardson-anima-state-for-joinrouter-03"/>
        </reference>
        <reference anchor="ieee802-1AR" target="https://standards.ieee.org/ieee/802.1AR/6995/">
          <front>
            <title>IEEE 802.1AR Secure Device Identity</title>
            <author>
              <organization/>
            </author>
            <date year="2018"/>
          </front>
          <refcontent>IEEE Standards Association</refcontent>
        </reference>
      </references>
    </references>
    <?line 1181?>

<section anchor="appendix-examples-detailed">
      <name>Stateless Join Proxy JPY Message Examples</name>
      <t>This appendix shows an example of a JPY message, sent by a stateless Join Proxy to a Registrar, and an example of the
return JPY message sent by the Registrar.
The DTLS payload itself, carried in the Content (C) field of the JPY message, is not shown in detail but
abbreviated.</t>
      <t>First, assume that a Pledge creates a CoAP request to a Join Proxy that it has just discovered and selected for
performing <xref target="cBRSKI"/> onboarding.</t>
      <t>This request may be a Pledge Voucher Request (PVR) as follows:</t>
      <artwork><![CDATA[
POST coaps://[fe80::1234:5678]:45965/.well-known/brski/rv
  Content-Format: 836
  Payload:
     <bytes of the COSE-signed PVR>
]]></artwork>
      <t>Because a DTLS session is not yet established at this point, the first step for the client is to send the DTLS
Client Hello message to the Join Proxy's join-port 45965.
When the Join Proxy receives this UDP packet, it creates a JPY message with the following UDP payload:</t>
      <!--
 Example created using cbor.me website, taking random 16 bytes to represent the encrypted Header (H) field
 and a DTLS Client Hello from a capture file to represent the first data sent by the Pledge for its DTLS
 handshake establishment.

 [ h'd01914bcc376a88ffecc50ca6017b0c1' , h'16fefd0000000000000000019e010001920000000000000192fefde5f1be51956dfe42297b29ff9718390220c9cf85836bb97aa9393d4e6de4a45800000004c0ff00ff01000164000a000400020017000d000400020403000b000201000100014a410400116c00a83d1acc1e3a00c499eac5d1554c17bb3305a7ad0947ab84217a981c2043f6312d119bf5646553c38c5f3f8f5012d807d29a1359f6097a855c2a56c341041b1ab1551dafaf3b8b00f6e7c16c1ac20a2d84382d4a35b500e1aa40a8afd22db681768fbe78890bf3aa761ae117fe73c01855dd52eee54c597b0da62909edc92040f0189854874397c3e4599f6cdeae980685063d4f4ccd3057caea4cd1ec8a92410458e49b3ba437f989f06e2ce0199d1db29572e0c7610e4df8c4b437d73b6fc7773dc3a93d35461ca6bdc237bbf921ac386753dc7f86d8f1a729466f4b270144fb4104de9d2c5b4dcd9274a47f9ffc6ecc03e7ea2990aff147fa2eb1c77e287bcbca5970f8bbb9c204b481b6ab82caa7626c40a40495de20b803fe6ac4d675874b012e2063b637cf7952d5b19572910c425c5816e1a5b3f84c0ec7c2ee2c3294dfd13d45' ]
-->

<sourcecode type="cbor-pretty"><![CDATA[
82                                      # array(2)
   50                                   # bytes(16)
      D01914BCC376A88FFECC50CA6017B0C1  #
   59 01AB                              # bytes(427)
      16FEFD0000000000000000019E ...
      <further bytes of DTLS 1.2 Client Hello>
]]></sourcecode>
      <t>The same JPY message written in CBOR diagnostic notation <xref target="RFC8949"/> is:</t>
      <sourcecode type="cbor-diag"><![CDATA[
[ h'd01914bcc376a88ffecc50ca6017b0c1' ,
  h'16fefd0000000000000000019e' ... '3d45' ]
]]></sourcecode>
      <t>Above, the ellipsis ("...") notation in a CBOR diagnostic byte string denotes a further sequence of bytes that is not
shown for brevity.</t>
      <t>The first CBOR byte string wraps the 16 bytes of encrypted state information of the Header (H) field.
The second CBOR byte string wraps the 427 bytes of the received DTLS message.</t>
      <t>After the Registrar has processed the received JPY message, it sends a DTLS 1.2 Hello Verify Request in response to
the received Client Hello message.
This Hello Verify Request is wrapped in a new JPY message that it sends back to the Join Proxy:</t>
      <!--
 [ h'd01914bcc376a88ffecc50ca6017b0c1' , h'16fefd0000000000000000002f030000230000000000000023fefd2000000000277c7678d82fde80c1f4400beb7fd390c40b49f6f2b460e21d2766c1' ]
-->

<sourcecode type="cbor-pretty"><![CDATA[
82                                      # array(2)
   50                                   # bytes(16)
      D01914BCC376A88FFECC50CA6017B0C1  #
   58 3C                                # bytes(60)
      16FEFD0000000000000000002F ...
      <further bytes of DTLS 1.2 Hello Verify Request>
]]></sourcecode>
      <t>The same JPY message in CBOR diagnostic notation is:</t>
      <sourcecode type="cbor-diag"><![CDATA[
    [ h'd01914bcc376a88ffecc50ca6017b0c1' ,
      h'16fefd0000000000000000002f' ... '66c1' ]
]]></sourcecode>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t><xref target="I-D.richardson-anima-state-for-joinrouter"/> outlined the various options for building a constrained Join Proxy.</t>
      <t>Many thanks for the comments by <contact fullname="Bill Atwood"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Brian Carpenter"/>, <contact fullname="Spencer Dawkins"/>,
<contact fullname="Toerless Eckert"/>, <contact fullname="Russ Housley"/>, <contact fullname="Ines Robles"/>, <contact fullname="Rich Salz"/>,
<contact fullname="Jürgen Schönwälder"/>, <contact fullname="Mališa Vučinić"/>, and <contact fullname="Rob Wilton"/>.</t>
      <t>This document is very much inspired by text published earlier in <xref target="I-D.kumar-dice-dtls-relay"/>.
<contact fullname="Sandeep Kumar"/>, <contact fullname="Sye loong Keoh"/>, and <contact fullname="Oscar Garcia-Morchon"/> are the co-authors of this document.
Their draft text has served as a basis for this document.</t>
    </section>
    <section numbered="false" anchor="changelog">
      <name>Changelog</name>
      <t>-19 to -20</t>
      <artwork><![CDATA[
   * Title changed to use 'onboarding' instead of 'bootstrapping'.
   * Replace rt 'brski.jp' by a CoRE LF target attribute brski-jp
     (#88) and update all related text and examples (see Note-1).
   * Clarified that a JPY URI MUST included a port number, since
     no default port is registered.
   * Editorial: renamed 'constrained Join Proxy' occurrences to
     general name 'Join Proxy' to match the title.
   * Editorial updates and text fixes.
]]></artwork>
      <t>Note-1: the motivation for making the change from discovery based on "rt=brski.jp" attribute queries, to
"brski-jp=*" queries, was due to the following properties of the new CoRE Link Format solution:</t>
      <ol spacing="normal" type="1"><li>
          <t>More semantically correct per CoRE Link Format: the "rt" attribute formally pertains to a single CoAP resource or
a resource tree (single resource with sub-resources as a whole) indicated by the path of the link.
In our case, we used it to describe a single root
resource (/) and label this with a rt type, even though the actual resources being discovered are not the root
resource but the /.well-known/core/brski/... and /.well-known/core/est/... resources.
By using a new dedicated target attribute "brski-jp",
the semantic definition can be exactly created to match the present case for discovery of the join-port.</t>
        </li>
        <li>
          <t>Shorter on-the-wire format. For a single returned CoRE LF link the difference is small, but if multiple links are
returned on a constrained (6LoWPAN) network it could be the difference between a single radio frame or 2 frames.</t>
        </li>
        <li>
          <t>For the Join Proxy, no need to encode its link-local IPv6 address into ASCII/UTF-8 and send it over the wire, for no
reason (as it was not used by the Pledge/recipient).</t>
        </li>
        <li>
          <t>Minimize confusion on which IPv6 address to use: in the former solution, the IPv6 address was both present in the
received IPv6 packet header (of the packet carrying the the discovery response),
as well as in the CoAP (CoRE LF formatted) payload of this packet. This could
lead to implementer's confusion on which IPv6 address element to use. The new format does not have this 'make the
right choice' issue.</t>
        </li>
      </ol>
      <t>-18 to -19</t>
      <artwork><![CDATA[
   * Added normative rules for stateful/stateless mode selection
     for JP that supports both modes.
   * Editorial updates and text fixes.
]]></artwork>
      <t>-17 to -18</t>
      <artwork><![CDATA[
   * Changed JPY protocol scheme from coaps+jpy to more generic
     jpy and rephrased all related definitions (#80).
   * Clarified that discovery responses from Join Proxy refer to
     the root CoAP resource (/) or root JPY resource (#79).
   * Assigned editor role (#78).
   * Editorial updates.
]]></artwork>
      <t>-16 to -17</t>
      <artwork><![CDATA[
   * Added security consideration that a genuine Join Proxy may
     relay to a malicious Registrar (#33, #77).
   * Added solution and specification sections on the use of
     multiple Registrars (#45, #65, #76).
   * Added clarification that Registrar address(es) can be
     configured, or discovered (#76).
   * Define conditions for implementing only a single Join Proxy
     mode - stateful or stateless (#69, #73)
   * Improved JPY Header security by adding integrity protection
     (#74).
   * Fixed format definition of example JPY Header (#74).
   * Editorial updates.
]]></artwork>
      <t>-15 to -16</t>
      <artwork><![CDATA[
   * Security considerations text reviewed and expanded with more
     attack types.
   * Define CoAP discovery as default, remove GRASP/6TiSCH (#68).
   * Abstract updated to describe higher-level concepts (#47).
   * Applied Spencer's TSVART review comment 2022-05-16 in an
     improved manner.
   * Applied Russ' review comments from IOTDIR review 2023-08-09.
   * Rewrite Section 4.1 based on Russ' review (#48).
   * Applied Toerless' review comments from WGLC (#63).
   * Applied review comments of Bill Atwood of 2024-05-21.
   * Clarify 'context payload' terminology (#49).
   * Use shorter and consistent term for Join Proxy (#58).
   * Appendix A corrected to use latest JPY message format.
   * Author added.
   * Update reference RFC8366 to RFC8366bis.
   * Many editorial updates.
]]></artwork>
      <t>-13 to -15</t>
      <artwork><![CDATA[
   * Various editorial updates and minor changes.
]]></artwork>
      <t>-12 to -13</t>
      <artwork><![CDATA[
   * jpy message encrypted and no longer standardized
]]></artwork>
      <t>-11 to -12</t>
      <artwork><![CDATA[
   * many typos fixed and text re-organized
   * core of GRASP and CoAP discovery moved to constrained-voucher
     document, only stateless extensions remain
]]></artwork>
      <t>-10 to -11</t>
      <artwork><![CDATA[
   * Join Proxy and Registrar discovery merged
   * GRASP discovery updated
   * ARTART review
   * TSVART review
]]></artwork>
      <t>-09 to -10</t>
      <artwork><![CDATA[
   * OPSDIR review
   * IANA review
   * SECDIR review
   * GENART review
]]></artwork>
      <t>-07 to -09</t>
      <artwork><![CDATA[
    * typos
]]></artwork>
      <t>-06 to -07</t>
      <artwork><![CDATA[
    * AD review changes
]]></artwork>
      <t>-05 to -06</t>
      <artwork><![CDATA[
    * RT value change to brski.jp and brski.rjp
    * new registry values for IANA
    * improved handling of jpy header array
]]></artwork>
      <t>-04 to -05</t>
      <artwork><![CDATA[
    * Join Proxy and join-port consistent spelling
    * some nits removed
    * restructured discovery
    * section
    * rephrased parts of security section
]]></artwork>
      <t>-03 to -04</t>
      <artwork><![CDATA[
   * mail address and reference
]]></artwork>
      <t>-02 to -03</t>
      <artwork><![CDATA[
   * Terminology updated
   * Several clarifications on discovery and routability
   * DTLS payload introduced
]]></artwork>
      <t>-01 to -02</t>
      <artwork><![CDATA[
  * Discovery of Join Proxy and Registrar ports
]]></artwork>
      <t>-00 to -01</t>
      <artwork><![CDATA[
   * Registrar used throughout instead of EST server
   * Emphasized Join Proxy port for Join Proxy and Registrar
   * updated discovery accordingly
   * updated stateless Join Proxy JPY header
   * JPY header described with CDDL
   * Example simplified and corrected
]]></artwork>
      <t>-00 to -00</t>
      <artwork><![CDATA[
   * copied from vanderstok-anima-constrained-join-proxy-05
]]></artwork>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
