<?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.35 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-anima-constrained-join-proxy-19" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="Join Proxy">Join Proxy for Bootstrapping of Constrained Network Elements</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-anima-constrained-join-proxy-19"/>
    <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="April" day="19"/>
    <area>int</area>
    <workgroup>anima</workgroup>
    <abstract>
      <?line 82?>

<t>This document extends the constrained Bootstrapping Remote Secure Key Infrastructures (cBRSKI) onboarding protocol by
adding a new network function, the constrained 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 98?>

<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 constrained 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 constrained 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 constrained 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 constrained Join Proxy 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 constrained 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> 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 the 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-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 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 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="stateless-case">
          <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 the IP address.</t>
          <t>The returned port 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 regular <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
resource type (rt) parameter with the value "brski.jp".
This value is defined in <xref target="iana-rt"/>.
Upon success, the return payload will contain the join-port.</t>
        <t>The resource type (rt) "brski.jp" exclusively pertains to the empty path resource, and signals that under this root the
BRSKI/EST resources of a remote Registrar can be found deeper down in the resource hierarchy under
<tt>.well-known/brski</tt> and <tt>.well-known/est</tt>.</t>
        <t>The meta-example below shows the discovery of the join-port (field <tt>join_port</tt>) of the Join Proxy:</t>
        <artwork><![CDATA[
  REQ: GET coap://[ff02::fd]/.well-known/core?rt=brski.jp

  RES: 2.05 Content
    Content-Format: 40 (application/link-format)
    Payload:
      <coaps://[IP_address]:join_port>;rt=brski.jp
]]></artwork>
        <t>In actual examples based on this, the field <tt>IP_address</tt> would contain the link-local IP address of the Join Proxy and
the field <tt>join_port</tt> would contain the join-port value as a decimal number.</t>
        <t>Note that the <tt>join_port</tt> field and preceding colon MAY be absent in the discovery response: this indicates that
the join-port is the default CoAPS port 5684.</t>
        <t>In the returned CoRE link format document, discoverable port numbers are usually returned for the Join Proxy resource
in the &lt;URI-Reference&gt; of the link (see <xref section="5.1" sectionFormat="of" target="RFC6690"/> for details).</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>How the Pledge selects between the onboarding services matching its query, is implementation-specific and out of
scope of this document.</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 discovery of two join-ports (fields <tt>join_port1</tt> and <tt>join_port2</tt>) 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?rt=brski.jp

  RES: 2.05 Content
    Content-Format: 40 (application/link-format)
    Payload:
      <coaps://[IP_address]:join_port1>;rt=brski.jp,
      <coaps://[IP_address]:join_port2>;rt=brski.jp;
                            param1=value1;param2=value2
]]></artwork>
        <t>In actual examples based on this, the field <tt>IP_address</tt> would contain the link-local IP address of the Join Proxy and
the fields <tt>join_port1</tt> and <tt>join_port2</tt> would contain distinct decimal port number values.</t>
        <t>The parameter values (<tt>param1</tt> and <tt>param2</tt>) are included for illustrative purposes.
In a real example, these would contain Link Format parameters specifically defined for the <tt>brski.jp</tt> resource type.
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 specification 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 considered, 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 two 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.jp
Description: Constrained Join Proxy for cBRSKI onboarding protocol.
Reference:   [This RFC]

Attribute Value: brski.rjp
Description: cBRSKI Registrar Join Proxy endpoint that supports the
             JPY protocol.
Reference:   [This RFC]
]]></artwork>
      </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, constrained Join Proxy, JPY protocol
Contact:     ANIMA WG
Change controller: IESG
References:  [This RFC]
]]></artwork>
        <t>The scheme specification is provided below.</t>
        <ul spacing="normal">
          <li>
            <t>Scheme syntax: identical to the <tt>coaps</tt> scheme as defined in <xref section="6.1" sectionFormat="of" target="RFC7252"/>.</t>
          </li>
          <li>
            <t>Scheme semantics: JPY protocol as defined in <xref target="stateless-jpy"/> of [This RFC].</t>
          </li>
          <li>
            <t>Encoding considerations: identical to the <tt>coaps</tt> scheme as defined in <xref section="12.4" sectionFormat="of" target="RFC7252"/>.</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.
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 <iesg@ietf.org>
Description: Bootstrapping Remote Secure Key Infrastructure
             constrained Join Proxy
Reference:   [This RFC]

Service Name: brski-rjp
Transport Protocol(s): udp
Assignee:  IESG <iesg@ietf.org>
Contact:  IESG <iesg@ietf.org>
Description: Bootstrapping Remote Secure Key Infrastructure
             Registrar join-port, supporting the 'jpy'
             scheme, used by stateless constrained Join Proxy
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/RFC0768"/>
        </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/RFC0792"/>
        </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="18" month="March" year="2026"/>
            <abstract>
              <t>   This document defines a strategy to securely assign a 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-29"/>
        </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="27" month="February" 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-30"/>
        </reference>
        <reference anchor="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4944.xml">
          <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="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="18" month="March" year="2026"/>
            <abstract>
              <t>   Bootstrapping Remote Secure Key Infrastructure (BRSKI) is a protocol
   to enroll pledge devices automatically and secure with a registrar of
   an owner, relying also on proxies to facilitate the communication and
   Manufacturer Authorized Signing Authorities (MASA) and Certificate
   Authorities (CA) to enable the enrollment.

   This document specifies how to make BRSKI communications
   autoconfiguring, extensible and resilient in the face of simultaneous
   use of different variations of the BRSKI protocol (BRSKI, BRSKI-AE,
   BRSKI-PRM, constrained BRSKI, stateless constrained BRSKI proxies).
   This document specifies a data model, IANA registry and BRSKI
   component procedures to achieve this.

   This document does not define any new discovery methods.  Instead,
   its data model allows signaling of all current (and future)
   variations of the BRSKI family of protocols consistently via
   different existing network discovery mechanisms: DNS-SD, CoAP
   discovery (CORE-LF) and GRASP.  Additional/future discovery
   mechanisms can also be supported through the IANA registry.

   Automatic resiliency and load-sharing are enabled through the use of
   discovery mechanisms and the provisioning of multiple instances of
   BRSKI components such as registrars and Join Proxies.  This document
   specifies the procedures to support load-sharing and (fast) failover
   under failure and recovery of redundant components.

   Future-proof deployments of BRSKI require Join Proxies that
   automatically support any current and future BRSKI variation.  This
   document specifies the procedures by which Join Proxies can support
   this through specific Join Proxy protocol behavior and the use of
   discovery mechanisms.

   The specification of discovery of pledges by their IDevID as
   introduced by BRSKI-PRM is refined in this document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-anima-brski-discovery-11"/>
        </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 1160?>

<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>-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:
H4sIAAAAAAAAA+W923Lc2LUg+I6vQFMRLdLOpDKTd9bFZlFSFW2pxCZVrnb4
VBSRAJJEKTORB0CSokuamLd5mrf5gJmI+YZ5mqc5PT8yXzLruvfaAEjJx+3u
c6IVYVcyE9iXtdde98twOIxuj+OdKGqKZp4fx38oi2V8XpXv7+NZWcXflGVT
N1WyWhXL67icxaflEv8ulnkWf583d2X1Ln4xzxf5sqmjZDqt8ls7SJSV6TJZ
wMBZlcyaYZE3s2GyLBbJMPUjDX+BF4YrfGE4T5q8bqJiVR3HTbWum8lodDSa
REmVJ8dxsWyiu+vjmIaI0qQ5jusmi2CgPFkcx2cv3r6MomTd3JTVcTSEx+vj
+MV2/Lz45V0Ux1WJW8yzoikr+JMX9qJ+V+oDZQVjn5VvcW3reZMs0/vt5Rx+
yBdJMYdX4dntDJ79fVE2rYd0utfb8UWR3iRVVpdLN8tr/Cqfhz/RdJfJMsvn
i2QZX5az5g72Gf8IUK39rIu0+i0C7ve1PrqdJm6+8+34Fl7O8iq+bMp3bsbz
vIGvWj/RjLc4TFXDN7HZg58Pf8Effv9utcRv7O5gtj8mi1WyTN4VtZ8rWZZ1
+APNdFrUaRlf3tdNvjAbWr3jJ3+f4u/babmIott8uc6P4Znrqlyv9ITjuLlf
wQQIEcTAb/FH+JbHoWd+j6DZhunw3aK5WU/lh+Hd9bN+JIuiZVktkqa4pRkv
Xp7uTQ4P5ePBvvt0NJFPu7u7O/LxcGd/f1oAJM6Gz7cNOlezVH6S5452j/SV
o6M9+Xg03j3wH2mi9JuLyz+edcazK78t1+lNXkVRsZy1Fr6zPx7px6PJgft4
uK9LP9rdlY/7e3v67P7+kft4cKCrOxjt6LcH45Fu/mAycRCZ7Llv99ymDo72
3Fb9cmDX5uOu+3igH49GO2P82Nr4tKrfFcMMMeM2r+71iXfrRVLB12k+zJp5
PazyeeJ+rNytkkHqBsjIEIBFpw5IA3cBHy7yPD8cTYbjkwv8E9Arqa5zoCIb
N02zqo+fPYM3lxmOtY3PIl49ww/P4K1teOvZPhzmsw1+l0nmxtmLFy9i+T2+
zNM1XOHn+S0sNT7LgDAWzT2/oIQJP1epvnmpM8YndV2mBRxvueQXMtjFcTwZ
jQ/hAg6HcTJFnEibKHp7U9QxENc1Ut44f9/kSxigucljgzgt8n2RL8om1xX+
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
l+BLfgS3rqYOdcooU2vn9LoV5MDhxBUSkVeSa9E5DKQTNxuohYuaWLwntodI
i9+1mHOH3dkowlZ1emK2/2b43N/M40xo/SdZXFi/5uLsE9ytXcY/8qr1P5Kp
/AMZCmFpP0t5tq6Kn5FFe97iIn9AaKOoFlPLjq2L2DSWuzBjKy2yba44vpFy
iZgaHWPIPLuCnX7T7rJANcmlF3ShksOVLkkn1rBoK2jSOYpooUaqZIppFb4s
AL1zU4BMXqU399w/2gmSxDckJji974uF63U7Ob3VIRMtIiFEqCg3TvOlws6N
V9Mr8fT3RtU4ndH7fYX8GXAYPZr8UNSW01cICzkE9wahA4za3jQ27s2Te/JN
uOqZYQxfHeamc/SncrOrq8loND7OpofHo+NkmmbHx3sT+HZg8rQDKdHxVTr4
g/2dXdeXVDDCHY61Y9kqR4QtHAJoIct148gx2SJhTGtIv1dyGdkI1HYfoH/D
N7cH2j89m/ZeWnJv+nP7ewDW1qf+a0Hsv40A3QezY8S8h+VotH5qVEAnK5Sk
S1cyo6v0P9AElyUhtT4wVSmBjQufceZHdedQGhuRUqdsix+jvSDn4SmWLnwr
35bEV4pxQrESr+Q8o0hnXcSm2s2vFBC/wXY42i6JK75jGARbeb3lMah13NeN
NWo5Mq03p1Oxlw2svVCTWm5Mlbt5DGp+prqAElr9ULPTwLeS2casHWuPqkrs
wbZTtbvHhz4KjqZiUsXuDumt2Wr+yhYt7YTNyWRau1+sXbZaP4pnqGNJfwNp
sa3hX72V+kNWK2O+PvlzRCXSKT4iaZze8UjTwS7c+yRFvPcKNMDTPsHQyINR
jzzoJUHHODjoUwwgYv8oNBb0EWPHJwVB8jhYW4fp2BsaLfz6/DI4Y62WeuB5
JTIli8RUHz8USFhd4NpEcrsxq1bvJho70LdAWPrsBdXrVQYo9VAXZRNQcq2F
sSaHYY6KWiZRTY1dvZd5aMLoyp4K7UekA/s9HOGVgAHOI9HgKEnQ1bK71qAq
OOORSDVV/OZnDojusYQ+yjkmn+Ic/1DG4djt2bkXk91uDNuwXAMu1RpzvTQO
bZrUmpFV1OptJ7j4Ua8krNEi4+d2XU2kd0IH2D1j+rPh20Ox4xlwMGAwEmDS
kUrtiF7yb0v9EpmRTGvuA9HCDXXUHasHiDtmihkiXFpRB0SrpR/4Qp9OJCZ3
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
AQA=

-->

</rfc>
