<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-anima-constrained-join-proxy-17" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.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-17"/>
    <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>
    <author initials="E." surname="Dijk" fullname="Esko Dijk">
      <organization>IoTconsultancy.nl</organization>
      <address>
        <email>esko.dijk@iotconsultancy.nl</email>
      </address>
    </author>
    <date year="2025" month="July" day="05"/>
    <area>int</area>
    <workgroup>anima</workgroup>
    <abstract>
      <?line 81?>

<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 97?>

<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="left"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="416" viewBox="0 0 416 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <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 be 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 6BLR, 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 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>Option 2 and 3 have the advantage of reducing code size, testing efforts and deployment complexity,
but requires all 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".</t>
        <t>If a Join Proxy implements both modes but does not implement methods to discover available Registrars
(for either method), 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 configured and also can not be discovered automatically, then 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 either stateful and/or stateless mode.</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" stroke-linecap="round">
              <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-statefull2"/> 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-statefull2">
          <name>Example of the message flow of a DTLS session via a stateful Join Proxy.</name>
          <artset>
            <artwork type="svg" align="left"><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" stroke-linecap="round">
                <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, interace 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="left"><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" stroke-linecap="round">
                <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_Jr:p_Jr</text>
                  <text x="252" y="260">JPY[H(IP_P:p_P),</text>
                  <text x="412" y="260">IP_Jl:p_Jl</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_Jr:p_Jr |
|                   ---JPY[H(IP_P:p_P), --> | IP_Jl:p_Jl|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 message 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 minus 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 receiver <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 attack 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 must be 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_context</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_context</tt> field needs to be linked to the DTLS context, and when a DTLS message need to be sent back to the
client, the <tt>jpy_context</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>coaps+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 will contain the port of the Registrar on which the JPY protocol handler is hosted.
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
    Payload:
      <coaps+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>coaps+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.</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 will contain the URI path and port 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
    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
    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
    Payload:
        <coaps+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 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
    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
    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 two join-ports for cBRSKI
onboarding.
If the attempt subsequently fails, the Pledge repeats the attempt using the other 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>coaps+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: coaps+jpy
Status:      permanent
Applications/protocols that use this scheme name:
             cBRSKI, constrained Join Proxy
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 "coaps" scheme defined in <xref target="RFC7252"/>.</t>
          </li>
          <li>
            <t>Scheme semantics: identical to the "coaps" scheme, except that the JPY message encapsulation mechanism described in
<xref target="stateless-jpy"/> of [This RFC] is used to transport each CoAPS UDP datagram.</t>
          </li>
          <li>
            <t>Encoding considerations: identical to the "coaps" scheme.</t>
          </li>
          <li>
            <t>Interoperability considerations: identical to the "coaps" scheme.</t>
          </li>
          <li>
            <t>Security considerations: all of the security considerations of the "coaps" scheme apply.
Users of this scheme should be aware that as part of the intended use, a UDP message that was formed using the
"coaps" scheme is embedded by a Join Proxy as defined by [This RFC] into a UDP message conforming to the
"coaps+jpy" scheme without the Join Proxy being able to parse/decode which CoAPS URI was originally used by the
sender, since that information is stored as DTLS-protected data.
The receiving server can transform the "coaps+jpy" scheme back to the original "coaps" scheme by decoding the JPY
message payload.
However, any CoAP-related information not stored in the DTLS-protected data (such as in the UDP/IP headers) may be
changed by these scheme transforms.</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 coaps+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="Max Pritikin" initials="M." surname="Pritikin">
              <organization>Cisco Systems</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="1" month="April" year="2025"/>
            <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 updates RFC8366, includes a number of desired
   extensions into the YANG.  The voucher request defined in RFC8995 is
   also now included in this document, as well as other YANG extensions
   needed for variants of BRSKI/RFC8995.

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

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

<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="Esko Dijk"/>, <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>-16 to -17</t>
      <artwork><![CDATA[
   * Added security consideration that a genuine Join Proxy may
     relay to a malicious Registrar (#33, #77).
   * Added solution and specification sections on the use of
     multiple Registrars (#45, #65, #76).
   * Added clarification that Registrar address(es) can be
     configured, or discovered (#76).
   * Define conditions for implementing only a single Join Proxy
     mode - stateful or stateless (#69, #73)
   * Improved JPY Header security by adding integrity protection
     (#74).
   * Fixed format definition of example JPY Header (#74).
   * Editorial updates.
]]></artwork>
      <t>-15 to -16</t>
      <artwork><![CDATA[
   * Security considerations text reviewed and expanded with more
     attack types.
   * Define CoAP discovery as default, remove GRASP/6TiSCH (#68).
   * Abstract updated to describe higher-level concepts (#47).
   * Applied Spencer's TSVART review comment 2022-05-16 in an
     improved manner.
   * Applied Russ' review comments from IOTDIR review 2023-08-09.
   * Rewrite Section 4.1 based on Russ' review (#48).
   * Applied Toerless' review comments from WGLC (#63).
   * Applied review comments of Bill Atwood of 2024-05-21.
   * Clarify 'context payload' terminology (#49).
   * Use shorter and consistent term for Join Proxy (#58).
   * Appendix A corrected to use latest JPY message format.
   * Author added.
   * Update reference RFC8366 to RFC8366bis.
   * Many editorial updates.
]]></artwork>
      <t>-13 to -15</t>
      <artwork><![CDATA[
   * Various editorial updates and minor changes.
]]></artwork>
      <t>-12 to -13</t>
      <artwork><![CDATA[
   * jpy message encrypted and no longer standardized
]]></artwork>
      <t>-11 to -12</t>
      <artwork><![CDATA[
   * many typos fixed and text re-organized
   * core of GRASP and CoAP discovery moved to constrained-voucher
     document, only stateless extensions remain
]]></artwork>
      <t>-10 to -11</t>
      <artwork><![CDATA[
   * Join Proxy and Registrar discovery merged
   * GRASP discovery updated
   * ARTART review
   * TSVART review
]]></artwork>
      <t>-09 to -10</t>
      <artwork><![CDATA[
   * OPSDIR review
   * IANA review
   * SECDIR review
   * GENART review
]]></artwork>
      <t>-07 to -09</t>
      <artwork><![CDATA[
    * typos
]]></artwork>
      <t>-06 to -07</t>
      <artwork><![CDATA[
    * AD review changes
]]></artwork>
      <t>-05 to -06</t>
      <artwork><![CDATA[
    * RT value change to brski.jp and brski.rjp
    * new registry values for IANA
    * improved handling of jpy header array
]]></artwork>
      <t>-04 to -05</t>
      <artwork><![CDATA[
    * Join Proxy and join-port consistent spelling
    * some nits removed
    * restructured discovery
    * section
    * rephrased parts of security section
]]></artwork>
      <t>-03 to -04</t>
      <artwork><![CDATA[
   * mail address and reference
]]></artwork>
      <t>-02 to -03</t>
      <artwork><![CDATA[
   * Terminology updated
   * Several clarifications on discovery and routability
   * DTLS payload introduced
]]></artwork>
      <t>-01 to -02</t>
      <artwork><![CDATA[
  * Discovery of Join Proxy and Registrar ports
]]></artwork>
      <t>-00 to -01</t>
      <artwork><![CDATA[
   * Registrar used throughout instead of EST server
   * Emphasized Join Proxy port for Join Proxy and Registrar
   * updated discovery accordingly
   * updated stateless Join Proxy JPY header
   * JPY header described with CDDL
   * Example simplified and corrected
]]></artwork>
      <t>-00 to -00</t>
      <artwork><![CDATA[
   * copied from vanderstok-anima-constrained-join-proxy-05
]]></artwork>
    </section>
  </back>
  <!-- ##markdown-source:
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
3NH3R5+gY6PJi8+jY3148hg9e4yO9dAunP3z6Rf+ewxdhIbp2dIqQfM9SVEz
ISmT3EPRr8ccBpFnX2/MknmdYwoD581XBXaUyepyKdnzRD4w3W+IUj6HHqKe
tW7mpIsj9mOOOzrkbWT9dF3MpY5Vv+oOBOIVedBB1H3nG9dwEEdD3RV+/fXX
bzGa9aS5K8vsI0aGwFenSYVtV7D0L0YQ6NffYp59DD+uqCG3fn25QkqLjYXv
QPyv8WvY6q/P63dl/Kz45Z0+96bMK9LMn6PDs9GvL9bw1ffY+iS/1+/OsMrZ
RTmFx91jaCa9TOb/rOP/8V/+z+oaFnmZ3vzL/7G8+5f/fZ75Nb1K5sX//b8l
8Z/X/+1/LpbFf/ufPmrpWhyqnMY/FvOmxJ2pEmu9pRyTsaZGk/Wq0HJtmEu1
WqvypyFz5JjAg323XiSIdGk+zJp5TQZNKrSLMIKpc9AJ/4TPOMDdYwcH7KT1
p7y8sSt8jU2x4++SKi2S4auySm9orex9piMccg1ib1z3FVbeUOZ9RvGAtGbk
CJpKXEuaqWmvYmqzYPkAspHOy+t+HB4CCwSKPBwfRKpV/y4+IQN7v49A7RQa
qRNGZXjN3IWN92Z+xJtf7OwM4i8ODra2O/NKz0aTbqbG1loTQcUPzxFPftK+
UjqbX+zuwUz7+H8H+93p0jncRTcD7a4TFLSZ11sSl+onswXxyqC0w2Zromfc
FMdn8bPqqunJXAhj3tvKwewNvQvDB4oSbn6xf4T729nys55xinhmwwvcmaJx
LeN2Vj3dg/2ssJVdu5UXxXu2JlEVoKCfhprfzHTtt59nGF6DBQkkj34bMXCP
MXDfYOADPizGf5Tx8juxcOXvVwl5lsj0Qe3f3OI1awP7lXaPoxXWxP4jrISG
7TYXmFxPbUGe7r8pLk+/RxAfBtgzRRRJG9kK+QfVtyhtPIfz/Dafc0wh9qoC
VAzxfUU1g2OhuE/q+M3ln08u3sgOlbLHk9FkMhzt4V2liDC/w0LPWFs3dcZG
cvykNaAkNZ29fvPs7EJ/g0l2hqPD4ejIjHKRo7pB9myXkeSCjIOhYW+HfXtT
LvHAGn787uUpgnan7932G4Bkhrvhn7DoXYTMZGxeP6UbfR8/0YRZMX89iblF
WgnU8B4XfGQnfVvnXABZgh1NtzJ8jfMmPbHb/GKvvV82b5/Am1XlUs+RRFEV
9KBbiNwg+z7Rf7yULqyYVkXIBZAQgz0leu3sE9GWj9PCIjdJCHnvPdvhe7Zn
7tmfRQ7pvMAlTABWlXjZeIgJD7FjhsA4DuNzFx2Kq8rH2Fcyr0xn+jzDYcY8
zMQMQwUq4KaW2JD4vYwg131YVtcgW+HL7vlUGhpy6x58uHWfF3QvuN61ClPD
WzZh+wvkKxgSBfYUFWbOlzURHa4agese8brHZt0PxjTbaFAQbMzSecn+dyEg
Bhcu3ngq4L8OiAMsZ3TEyxmZ5bw+v/R32vAC9D+2v7x8ftr37HfPfwinOaBp
RkduGniITgp/ZPFhdGB/PHnmri7jDj7IVH60bx+Eabg+pgZtly5giqAZhi7x
O6hiutAsqdKFdxO3aB5zlPFG+5MCsiCuSv4E6WG4rl1e155dV+tQvbXeEAWQ
TOY4rnmNYhyXXJmc0M/8BmKE+gAz0xrLvNxivfjK6qYiYouhFET+fGNreRo2
wNd6tBtcpmIeVGZw9ANf4Es8spf4jSGMHXS8RM8+1hSwklLNTfAc98RJQMWR
uBXDbAO/mhZdQiowYiowclTgd/Gz3qzrTrYABqLhAHwdR/Y62rhs0rUqbLCF
IRwYe4rpTzDyc2qXiJESRjRZrECuRhpjJ+aSQCHlDxbjB1AxwMAkxW7xFObe
fazXsYkcgvHTEBj3nQldImHn9Nmzl2YD2vucOhFQ5CizMWFGBmCWYKTlqtAC
S7eJ1HN7J6qsJZ18CXCZeFn+X4IguzjGGwEA

-->

</rfc>
