<?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-18" 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-18"/>
    <author initials="E." surname="Dijk" fullname="Esko Dijk" role="editor">
      <organization>IoTconsultancy.nl</organization>
      <address>
        <email>esko.dijk@iotconsultancy.nl</email>
      </address>
    </author>
    <author initials="M." surname="Richardson" fullname="Michael Richardson">
      <organization>Sandelman Software Works</organization>
      <address>
        <email>mcr+ietf@sandelman.ca</email>
      </address>
    </author>
    <author initials="P." surname="van der Stok" fullname="Peter van der Stok">
      <organization>vanderstok consultancy</organization>
      <address>
        <email>stokcons@kpnmail.nl</email>
      </address>
    </author>
    <author initials="P." surname="Kampanakis" fullname="Panos Kampanakis">
      <organization>Cisco Systems</organization>
      <address>
        <email>pkampana@cisco.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="18"/>
    <area>int</area>
    <workgroup>anima</workgroup>
    <abstract>
      <?line 82?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Bootstrapping Remote Secure Key Infrastructure (BRSKI) protocol described in <xref target="RFC8995"/>
provides a solution for a secure zero-touch (automated) onboarding of new, unconfigured devices.
In the context of BRSKI, new devices, called "Pledges", are equipped with a factory-installed
Initial Device Identifier (IDevID) <xref target="ieee802-1AR"/>, and are enrolled into a network.
BRSKI makes use of Enrollment over Secure Transport (EST) <xref target="RFC7030"/>
with <xref target="RFC8366bis"/> signed vouchers to securely enroll devices.
A Registrar provides the trust anchor of the network domain to which a Pledge enrolls.</t>
      <t><xref target="cBRSKI"/> defines a version of BRSKI that is suitable for constrained nodes (<xref target="RFC7228"/>) and for operation
on constrained networks (<xref target="RFC7228"/>) including Low-Power and Lossy Networks (LLN) <xref target="RFC7102"/>.
It uses Constrained Application Protocol (CoAP) <xref target="RFC7252"/> messages secured by  Datagram Transport Layer Security
(DTLS) <xref target="RFC9147"/> to implement the BRSKI functions defined by <xref target="RFC8995"/>.</t>
      <t>In this document, cBRSKI is extended such that a cBRSKI Pledge can connect to a Registrar via a constrained Join Proxy.
In particular, this solution is intended to support
IPv6 over Low-Power Wireless Personal Area Networks (6LoWPAN) <xref target="RFC4944"/> mesh networks.
6TiSCH networks are not in scope of this document since these use the CoJP <xref target="RFC9031"/> proxy mechanism.</t>
      <t>The Join Proxy as specified in this document is one of the Join Proxy
options referred to in <xref section="2.5.2" sectionFormat="of" target="RFC8995"/> as future work.</t>
      <t>However, in IP networks that require node authentication, such as those using 6LoWPAN <xref target="RFC4944"/>,
data to and from the Pledge will not be routable over the IP network
before it is properly authenticated to the network.
A new Pledge can initially only use a link-local IPv6 address to communicate with a
mesh neighbor <xref target="RFC6775"/> until it receives the necessary network configuration parameters.</t>
      <t>Before it can receive these parameters, the Pledge needs to be authenticated and authorized to onboard the
network. This is done in cBRSKI through an end-to-end encrypted DTLS session with a domain Registrar.</t>
      <t>When this Registrar is not a direct (link-local) neighbor of the Pledge but several hops away, the Pledge
needs to discover a link-local neighbor that is operating as a constrained Join Proxy, which helps
forward the DTLS messages of the session between Pledge and Registrar.</t>
      <t>Because the Join Proxy is a regular network node that has already been onboarded onto the network, it can send
IP packets to the Registrar which are then routed over one or more hops over the mesh network -- and potentially
over other IP networks too, before reaching the Registrar.
Likewise, the Registrar sends its response IP packets which are routed back to the Join Proxy over the mesh network.</t>
      <t>Once a Pledge has enrolled onto the network in this manner, it can optionally be configured itself as a new constrained
Join Proxy. In this role it can help other Pledges perform the cBRSKI onboarding process.</t>
      <t>Two modes of operation for a constrained Join Proxy are specified:</t>
      <ol spacing="normal" type="1"><li>
          <t>A stateful Join Proxy that locally stores UDP connection state per Pledge.</t>
        </li>
        <li>
          <t>A stateless Join Proxy that does not locally store UDP connection state, but stores it in the header of a
message that is exchanged between the Join Proxy and the Registrar.</t>
        </li>
      </ol>
      <t>Similar to the difference between storing and non-storing Modes of
Operations (MOP) in RPL <xref target="RFC6550"/>, the stateful and stateless modes differ in the way that they store
the state required to forward return UDP packets from the Registrar back to the Pledge.</t>
    </section>
    <section anchor="Terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?>
      </t>
      <t>The following terms are defined in <xref target="RFC8366bis"/> and <xref target="RFC8995"/>, and are used identically in this document:
artifact, Circuit Proxy, Join Proxy, domain, imprint, Registrar, Pledge, and Voucher.</t>
      <t>The term "installation" refers to all devices in the network and their interconnections, including Registrar,
enrolled nodes (with and without constrained Join Proxy functionality) and Pledges (not yet enrolled).</t>
      <t>(Installation) IP addresses are assumed to be routable over the whole installation network,
except for link-local IP addresses.</t>
      <t>The term "Join Proxy" is used in this document with the same definition as in <xref target="RFC8995"/>.
However, in this document it refers specifically to a Join Proxy that can support Pledges to onboard using a
UDP-based protocol, such as the cBRSKI protocol <xref target="cBRSKI"/>.
This protocol operates over an end-to-end secured DTLS session between a Pledge and a cBRSKI Registrar.</t>
      <t>The acronym "JPY" is used to refer to a new protocol and JPY message format defined by this document.
The message can be seen as a "Join Proxy Yoke": connecting two data items and letting these travel together over a network.</t>
      <t>Because UDP does not have the notion of a connection, the term "UDP connection" in this document
refers to a pseudo-connection, whose establishment on the Join Proxy is triggered by receipt of a first UDP packet
from a new Pledge source.</t>
      <t>The term "endpoint" is used as defined in <xref target="RFC7252"/>.</t>
      <t>The terms "6LoWPAN Router" (6LR), "6LoWPAN Border Router" (6LBR) and "6LoWPAN link" are used as defined in <xref target="RFC6775"/>.</t>
      <t>Details of the IP address and port notation used in the Join Proxy specification are provided in <xref target="ip-port-notation"/>.</t>
    </section>
    <section anchor="join-proxy-problem-statement-and-solution">
      <name>Join Proxy Problem Statement and Solution</name>
      <section anchor="problem-statement">
        <name>Problem Statement</name>
        <t>As depicted in <xref target="fig-net"/>, the Pledge (P), in a network such as a 6LoWPAN <xref target="RFC4944"/> mesh network
 can be more than one hop away from the Registrar (R) and it is not yet authenticated to the network.
Also, the Pledge does not possess any key material to encrypt or decrypt link-layer data transmissions.</t>
        <t>In this situation, the Pledge can only communicate one-hop to its neighbors, such as the constrained Join Proxy (J),
using link-local IPv6 addresses and using no link-layer encryption.
However, the Pledge needs to communicate with end-to-end security with a Registrar to authenticate and obtain its
domain identity/credentials.
In the case of cBRSKI, the domain identity is an X.509 certificate. Domain credentials may include key material for
network access.</t>
        <figure anchor="fig-net">
          <name>Multi-hop cBRSKI onboarding scenario in a 6LoWPAN mesh network</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="160" width="416" viewBox="0 0 416 160" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 24,48 L 24,96" fill="none" stroke="black"/>
                <path d="M 56,48 L 56,96" fill="none" stroke="black"/>
                <path d="M 128,64 L 128,112" fill="none" stroke="black"/>
                <path d="M 176,64 L 176,112" fill="none" stroke="black"/>
                <path d="M 216,64 L 216,112" fill="none" stroke="black"/>
                <path d="M 248,64 L 248,112" fill="none" stroke="black"/>
                <path d="M 368,64 L 368,112" fill="none" stroke="black"/>
                <path d="M 400,64 L 400,112" fill="none" stroke="black"/>
                <path d="M 24,48 L 56,48" fill="none" stroke="black"/>
                <path d="M 56,64 L 88,64" fill="none" stroke="black"/>
                <path d="M 128,64 L 176,64" fill="none" stroke="black"/>
                <path d="M 216,64 L 248,64" fill="none" stroke="black"/>
                <path d="M 368,64 L 400,64" fill="none" stroke="black"/>
                <path d="M 176,80 L 216,80" fill="none" stroke="black"/>
                <path d="M 24,96 L 56,96" fill="none" stroke="black"/>
                <path d="M 104,96 L 128,96" fill="none" stroke="black"/>
                <path d="M 128,112 L 176,112" fill="none" stroke="black"/>
                <path d="M 216,112 L 248,112" fill="none" stroke="black"/>
                <path d="M 368,112 L 400,112" fill="none" stroke="black"/>
                <path d="M 88,64 L 104,96" fill="none" stroke="black"/>
                <g class="text">
                  <text x="144" y="36">multi-hop</text>
                  <text x="204" y="36">mesh</text>
                  <text x="300" y="52">IPv6</text>
                  <text x="40" y="68">R</text>
                  <text x="308" y="68">link-local</text>
                  <text x="152" y="84">6LR</text>
                  <text x="232" y="84">J</text>
                  <text x="308" y="84">..............</text>
                  <text x="384" y="84">P</text>
                  <text x="40" y="132">Registrar</text>
                  <text x="220" y="132">Join</text>
                  <text x="264" y="132">Proxy</text>
                  <text x="388" y="132">Pledge</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                    multi-hop mesh
         .---.                            IPv6
         | R +---.    +-----+    +---+  link-local  +---+
         |   |    \   | 6LR +----+ J |..............| P |
         '---'     `--+     |    |   |              |   |
                      +-----+    +---+              +---+
       Registrar                Join Proxy          Pledge
]]></artwork>
          </artset>
        </figure>
        <t>So one problem is that there is no IP routability between the Pledge and the Registrar, via intermediate nodes
such as 6LoWPAN Routers (6LRs), despite the need for an end-to-end secured session between both.</t>
        <t>Furthermore, the Pledge is not 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">
              <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="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="552" viewBox="0 0 552 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,336" fill="none" stroke="black"/>
                <path d="M 112,32 L 112,80" fill="none" stroke="black"/>
                <path d="M 216,32 L 216,80" fill="none" stroke="black"/>
                <path d="M 328,32 L 328,336" fill="none" stroke="black"/>
                <path d="M 440,64 L 440,336" fill="none" stroke="black"/>
                <path d="M 544,32 L 544,336" fill="none" stroke="black"/>
                <path d="M 8,32 L 544,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 544,80" fill="none" stroke="black"/>
                <path d="M 56,96 L 72,96" fill="none" stroke="black"/>
                <path d="M 168,96 L 184,96" fill="none" stroke="black"/>
                <path d="M 168,112 L 184,112" fill="none" stroke="black"/>
                <path d="M 280,112 L 296,112" fill="none" stroke="black"/>
                <path d="M 176,144 L 192,144" fill="none" stroke="black"/>
                <path d="M 288,144 L 304,144" fill="none" stroke="black"/>
                <path d="M 72,176 L 88,176" fill="none" stroke="black"/>
                <path d="M 184,176 L 200,176" fill="none" stroke="black"/>
                <path d="M 72,240 L 88,240" fill="none" stroke="black"/>
                <path d="M 160,240 L 176,240" fill="none" stroke="black"/>
                <path d="M 184,256 L 200,256" fill="none" stroke="black"/>
                <path d="M 272,256 L 288,256" fill="none" stroke="black"/>
                <path d="M 192,288 L 208,288" fill="none" stroke="black"/>
                <path d="M 280,288 L 296,288" fill="none" stroke="black"/>
                <path d="M 80,304 L 96,304" fill="none" stroke="black"/>
                <path d="M 168,304 L 184,304" fill="none" stroke="black"/>
                <path d="M 8,336 L 544,336" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="304,112 292,106.4 292,117.6" fill="black" transform="rotate(0,296,112)"/>
                <polygon class="arrowhead" points="296,256 284,250.4 284,261.6" fill="black" transform="rotate(0,288,256)"/>
                <polygon class="arrowhead" points="200,288 188,282.4 188,293.6" fill="black" transform="rotate(180,192,288)"/>
                <polygon class="arrowhead" points="192,96 180,90.4 180,101.6" fill="black" transform="rotate(0,184,96)"/>
                <polygon class="arrowhead" points="184,240 172,234.4 172,245.6" fill="black" transform="rotate(0,176,240)"/>
                <polygon class="arrowhead" points="184,144 172,138.4 172,149.6" fill="black" transform="rotate(180,176,144)"/>
                <polygon class="arrowhead" points="88,304 76,298.4 76,309.6" fill="black" transform="rotate(180,80,304)"/>
                <polygon class="arrowhead" points="80,176 68,170.4 68,181.6" fill="black" transform="rotate(180,72,176)"/>
                <g class="text">
                  <text x="60" y="52">Pledge</text>
                  <text x="140" y="52">Join</text>
                  <text x="184" y="52">Proxy</text>
                  <text x="272" y="52">Registrar</text>
                  <text x="408" y="52">UDP</text>
                  <text x="456" y="52">Message</text>
                  <text x="56" y="68">(P)</text>
                  <text x="168" y="68">(J)</text>
                  <text x="264" y="68">(R)</text>
                  <text x="384" y="68">Src_IP:port</text>
                  <text x="496" y="68">Dst_IP:port</text>
                  <text x="120" y="100">ClientHello</text>
                  <text x="388" y="100">IP_P:p_P</text>
                  <text x="492" y="100">IP_Jl:p_Jl</text>
                  <text x="232" y="116">ClientHello</text>
                  <text x="396" y="116">IP_Jr:p_Jr</text>
                  <text x="488" y="116">IP_R:5684</text>
                  <text x="240" y="148">ServerHello</text>
                  <text x="392" y="148">IP_R:5684</text>
                  <text x="492" y="148">IP_Jr:p_Jr</text>
                  <text x="240" y="164">:</text>
                  <text x="136" y="180">ServerHello</text>
                  <text x="240" y="180">:</text>
                  <text x="396" y="180">IP_Jl:p_Jl</text>
                  <text x="484" y="180">IP_P:p_P</text>
                  <text x="136" y="196">:</text>
                  <text x="240" y="196">:</text>
                  <text x="392" y="196">:</text>
                  <text x="480" y="196">:</text>
                  <text x="144" y="212">[DTLS</text>
                  <text x="208" y="212">messages]</text>
                  <text x="392" y="212">:</text>
                  <text x="480" y="212">:</text>
                  <text x="136" y="228">:</text>
                  <text x="240" y="228">:</text>
                  <text x="392" y="228">:</text>
                  <text x="480" y="228">:</text>
                  <text x="124" y="244">Finished</text>
                  <text x="240" y="244">:</text>
                  <text x="388" y="244">IP_P:p_P</text>
                  <text x="492" y="244">IP_Jl:p_Jl</text>
                  <text x="236" y="260">Finished</text>
                  <text x="396" y="260">IP_Jr:p_Jr</text>
                  <text x="488" y="260">IP_R:5684</text>
                  <text x="244" y="292">Finished</text>
                  <text x="392" y="292">IP_R:5684</text>
                  <text x="492" y="292">IP_Jr:p_Jr</text>
                  <text x="132" y="308">Finished</text>
                  <text x="396" y="308">IP_Jl:p_Jl</text>
                  <text x="484" y="308">IP_P:p_P</text>
                  <text x="128" y="324">:</text>
                  <text x="240" y="324">:</text>
                  <text x="384" y="324">:</text>
                  <text x="488" y="324">:</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+------------+------------+-------------+--------------------------+
|   Pledge   | Join Proxy |  Registrar  |        UDP Message       |
|    (P)     |     (J)    |    (R)      | Src_IP:port | Dst_IP:port|
+------------+------------+-------------+-------------+------------+
|     ---ClientHello-->                 |   IP_P:p_P  | IP_Jl:p_Jl |
|                   ---ClientHello-->   |   IP_Jr:p_Jr| IP_R:5684  |
|                                       |             |            |
|                    <--ServerHello---  |   IP_R:5684 | IP_Jr:p_Jr |
|                            :          |             |            |
|       <--ServerHello---    :          |   IP_Jl:p_Jl| IP_P:p_P   |
|               :            :          |       :     |    :       |
|              [DTLS messages]          |       :     |    :       |
|               :            :          |       :     |    :       |
|       ---Finished-->       :          |   IP_P:p_P  | IP_Jl:p_Jl |
|                     ---Finished-->    |   IP_Jr:p_Jr| IP_R:5684  |
|                                       |             |            |
|                      <--Finished---   |   IP_R:5684 | IP_Jr:p_Jr |
|        <--Finished---                 |   IP_Jl:p_Jl| IP_P:p_P   |
|              :             :          |      :      |     :      |
+---------------------------------------+-------------+------------+
]]></artwork>
          </artset>
        </figure>
        <t>The Join Proxy MUST allocate a unique <tt>IP_Jr:p_Jr</tt> for every unique Pledge that it serves. This is typically done
by selecting a unique available port <tt>P_Jr</tt> for each Pledge.
Doing so enables the Join Proxy to correctly map the
UDP packets received from the Registrar back to the corresponding Pledges.
Also, it enables the Registrar to correctly distinguish multiple DTLS clients by means of IP address/port tuples.</t>
        <t>The default timeout for clearing the state for a Pledge MUST be 30 seconds after the last relayed packet was sent on
a UDP connection associated to that Pledge, in either direction.
The default timeout MAY be overridden by another value that is either configured, or discovered in some way out of
scope of this document.</t>
        <t>When a Join Proxy receives an ICMP <xref target="RFC792"/> / ICMPv6 <xref target="RFC4443"/> error from the Registrar, this may signal a
permanent change of the Registrar's IP address and/or port, or it may signal a temporary disruption of the network.
In such case, the Join Proxy SHOULD send an equivalent ICMP error message (with same Type and Code) to the Pledge.
The specific Pledge can be determined from the IP/UDP header information that is contained in the ICMP error message
body, if included.
In case the ICMP message body is empty, or insufficient information is included there, the Join Proxy does not send
the ICMP error message to the Pledge because the intended recipient cannot be determined.</t>
        <t>To protect itself and the Registrar against malfunctioning Pledges and/or denial of service (DoS) attacks,
the Join Proxy SHOULD limit the number of simultaneous state tuples for a given <tt>IP_p</tt> to at most 2,
and it SHOULD limit the number of simultaneous state tuples per network interface to at most 10.</t>
        <t>When a new Pledge connection is received and the Join Proxy is unable to build new mapping state for it, for example
due to the above limits, the Join Proxy SHOULD return an ICMP Type 1 "Destination Unreachable" error message
with Code 1, "Communication with destination administratively prohibited".</t>
      </section>
      <section anchor="stateless-jp">
        <name>Stateless Join Proxy</name>
        <t>Stateless Join Proxy operation eliminates the need and complexity to
maintain per-Pledge UDP connection mapping state on the proxy and the machinery to build, maintain and
remove this mapping state.
It also removes the need to protect this mapping state against DoS attacks and may also reduce memory and
CPU requirements on the proxy.</t>
        <t>Stateless Join Proxy operations work by introducing a new JPY message used in communication between Proxy and Registrar.
This message will store the state "in the network".
It consists of two parts:</t>
        <ul spacing="normal">
          <li>
            <t>Header (H) field: contains state information about the Pledge (P) such as the link-local IP address and UDP port.</t>
          </li>
          <li>
            <t>Contents (C) field: the original UDP payload (data octets according to <xref target="RFC768"/>) received from the Pledge,
or destined to the Pledge.</t>
          </li>
        </ul>
        <t>When the join proxy receives a UDP message from a Pledge, it encodes the Pledge's
link-local IP address, interface ID and UDP (source) port of the UDP packet into the Header field
and the UDP payload into the Contents field and sends the packet to the Registrar from
a fixed source UDP port. When the Registrar sends packets for the Pledge,
it MUST return the Header field unchanged, so that the join proxy can decode the
Header to reconstruct the Pledge's link-local IP address, 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="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="560" viewBox="0 0 560 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,352" fill="none" stroke="black"/>
                <path d="M 128,32 L 128,80" fill="none" stroke="black"/>
                <path d="M 232,32 L 232,80" fill="none" stroke="black"/>
                <path d="M 360,32 L 360,352" fill="none" stroke="black"/>
                <path d="M 456,64 L 456,352" fill="none" stroke="black"/>
                <path d="M 552,32 L 552,352" fill="none" stroke="black"/>
                <path d="M 8,32 L 552,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 552,80" fill="none" stroke="black"/>
                <path d="M 40,96 L 56,96" fill="none" stroke="black"/>
                <path d="M 152,96 L 176,96" fill="none" stroke="black"/>
                <path d="M 168,112 L 184,112" fill="none" stroke="black"/>
                <path d="M 328,112 L 344,112" fill="none" stroke="black"/>
                <path d="M 168,144 L 184,144" fill="none" stroke="black"/>
                <path d="M 328,144 L 344,144" fill="none" stroke="black"/>
                <path d="M 40,176 L 64,176" fill="none" stroke="black"/>
                <path d="M 160,176 L 176,176" fill="none" stroke="black"/>
                <path d="M 40,240 L 56,240" fill="none" stroke="black"/>
                <path d="M 128,240 L 152,240" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 328,256 L 344,256" fill="none" stroke="black"/>
                <path d="M 168,288 L 184,288" fill="none" stroke="black"/>
                <path d="M 328,288 L 344,288" fill="none" stroke="black"/>
                <path d="M 40,320 L 64,320" fill="none" stroke="black"/>
                <path d="M 8,352 L 552,352" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="352,256 340,250.4 340,261.6" fill="black" transform="rotate(0,344,256)"/>
                <polygon class="arrowhead" points="352,112 340,106.4 340,117.6" fill="black" transform="rotate(0,344,112)"/>
                <polygon class="arrowhead" points="184,96 172,90.4 172,101.6" fill="black" transform="rotate(0,176,96)"/>
                <polygon class="arrowhead" points="176,288 164,282.4 164,293.6" fill="black" transform="rotate(180,168,288)"/>
                <polygon class="arrowhead" points="176,144 164,138.4 164,149.6" fill="black" transform="rotate(180,168,144)"/>
                <polygon class="arrowhead" points="160,240 148,234.4 148,245.6" fill="black" transform="rotate(0,152,240)"/>
                <polygon class="arrowhead" points="48,320 36,314.4 36,325.6" fill="black" transform="rotate(180,40,320)"/>
                <polygon class="arrowhead" points="48,176 36,170.4 36,181.6" fill="black" transform="rotate(180,40,176)"/>
                <g class="text">
                  <text x="68" y="52">Pledge</text>
                  <text x="156" y="52">Join</text>
                  <text x="200" y="52">Proxy</text>
                  <text x="304" y="52">Registrar</text>
                  <text x="424" y="52">UDP</text>
                  <text x="472" y="52">Message</text>
                  <text x="64" y="68">(P)</text>
                  <text x="184" y="68">(J)</text>
                  <text x="296" y="68">(R)</text>
                  <text x="408" y="68">Src_IP:port</text>
                  <text x="504" y="68">Dst_IP:port</text>
                  <text x="104" y="100">ClientHello</text>
                  <text x="404" y="100">IP_P:p_P</text>
                  <text x="500" y="100">IP_Jl:p_Jl</text>
                  <text x="252" y="116">JPY[H(IP_P:p_P),</text>
                  <text x="412" y="116">IP_Jr:p_Jr</text>
                  <text x="496" y="116">IP_R:p_Rj</text>
                  <text x="280" y="132">C(ClientHello)]</text>
                  <text x="252" y="148">JPY[H(IP_P:p_P),</text>
                  <text x="408" y="148">IP_R:p_Rj</text>
                  <text x="500" y="148">IP_Jr:p_Jr</text>
                  <text x="280" y="164">C(ServerHello)]</text>
                  <text x="112" y="180">ServerHello</text>
                  <text x="412" y="180">IP_Jl:p_Jl</text>
                  <text x="492" y="180">IP_P:p_P</text>
                  <text x="128" y="196">:</text>
                  <text x="408" y="196">:</text>
                  <text x="496" y="196">:</text>
                  <text x="96" y="212">[</text>
                  <text x="124" y="212">DTLS</text>
                  <text x="180" y="212">messages</text>
                  <text x="224" y="212">]</text>
                  <text x="408" y="212">:</text>
                  <text x="496" y="212">:</text>
                  <text x="128" y="228">:</text>
                  <text x="408" y="228">:</text>
                  <text x="496" y="228">:</text>
                  <text x="92" y="244">Finished</text>
                  <text x="404" y="244">IP_P:p_P</text>
                  <text x="500" y="244">IP_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>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.
The resource path returned in this payload is always the root (<tt>/</tt>) resource, the only resource currently defined for
the JPY protocol.
This exchange is shown below:</t>
          <artwork><![CDATA[
  REQ: GET coap://[ff05::fd]/.well-known/core?rt=brski.rjp

  RES: 2.05 Content
    Content-Format: 40 (application/link-format)
    Payload:
      <jpy://[ipv6_address]:port>;rt=brski.rjp
]]></artwork>
          <t>In this case, the multicast CoAP request is sent to the site-local "All CoAP Nodes" multicast IPv6 address
<tt>ff05::fd</tt>.
In some deployments, a smaller scope than site-local is more appropriate to reduce the network load due to this
CoAP discovery traffic.
For example, in a 6LoWPAN mesh network where a JPY protocol endpoint is always hosted on a 6LoWPAN Border Router (6LBR),
the realm-local scope "All CoAP Nodes" address <tt>ff03::fd</tt> can be used.</t>
          <t>The reason that the IPv6 address (field <tt>ipv6_address</tt>) is always included in the link-format result is that
in the <xref target="RFC6690"/> link format, and per <xref section="3.2" sectionFormat="of" target="RFC3986"/>, the authority component cannot include only a port
number but has to include also the IP address.</t>
          <t>The returned port is expected to process the encapsulated JPY messages described in <xref target="stateless-jpy"/>.
The scheme is <tt>jpy</tt>, described in <xref target="jpyscheme"/>, and not regular <tt>coaps</tt> because the JPY messages effectively
form a new protocol that encapsulates CoAPS messages.</t>
        </section>
        <section anchor="stateful-case">
          <name>Stateful Case</name>
          <t>The stateful Join Proxy can discover the Registrar's cBRSKI resource set by sending a multicast CoAP GET
discovery query to the "/.well-known/core" resource including a resource type (rt) query parameter "brski".
The latter CoAP resource type is defined in <xref target="cBRSKI"/>.</t>
          <t>Upon success, the return payload 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 (application/link-format)
    Payload:
      <coaps://[ipv6_address]:port/uri_path>;rt=brski
]]></artwork>
          <t>The <tt>port</tt> field and its preceding colon are optionally included: if elided, the default CoAPS port 5684 is implied.
The <tt>uri_path</tt> field may be a single CoAP URI path resource label, or it may be a hierarchy of resources.
For efficiency, it is RECOMMENDED for the Registrar to configure the URI path as short as possible, for example <tt>b</tt>.</t>
          <t>Note that the Join Proxy does not use the returned <tt>uri_path</tt> information, while it uses the <tt>ipv6_address</tt> and <tt>port</tt>
information for its relaying operations.</t>
        </section>
        <section anchor="examples">
          <name>Examples</name>
          <t>A Registrar with address <tt>2001:db8:0:abcd::52</tt>, with the JPY protocol hosted on port 7634,
and the CoAPS resources hosted on default port 5684 could for example reply to a multicast CoAP query of a stateful
Join Proxy as follows:</t>
          <artwork><![CDATA[
  REQ: GET coap://[ff05::fd]/.well-known/core?rt=brski

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

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

  RES: 2.05 Content
    Content-Format: 40 (application/link-format)
    Payload:
      <coaps://[IP_address]:join_port>;rt=brski.jp
]]></artwork>
        <t>In actual examples based on this, the field <tt>IP_address</tt> would contain the link-local IP address of the Join Proxy and
the field <tt>join_port</tt> would contain the join-port value as a decimal number.</t>
        <t>Note that the <tt>join_port</tt> field and preceding colon MAY be absent in the discovery response: this indicates that
the join-port is the default CoAPS port 5684.</t>
        <t>In the returned CoRE link format document, discoverable port numbers are usually returned for the Join Proxy resource
in the &lt;URI-Reference&gt; of the link (see <xref section="5.1" sectionFormat="of" target="RFC6690"/> for details).</t>
      </section>
      <section anchor="discovery-by-pledge-multi">
        <name>Pledge Discovers Multiple Join Ports</name>
        <t>A Pledge MUST be able to handle multiple join-ports being returned in a discovery response sent by a Join Proxy.
This can happen if the network supports multiple Registrars and/or multiple Registrar-services as defined in
<xref target="spec-multi"/>.
Then, each Registrar gets assigned its own join-port (up to a limit imposed by Join Proxy implementation) so
that a Pledge is enabled to failover to another Registrar if a prior onboarding attempt fails.</t>
        <t>How the Pledge selects between the onboarding services matching its query, is implementation-specific and out of
scope of this document.</t>
        <t>Discovery of multiple Registrars works in the same way as discovery of a single Registrar as defined in
<xref target="discovery-by-pledge"/>, except that multiple links are returned in the CoRE Link Format document.</t>
        <t>The meta-example below shows the discovery of two join-ports (fields <tt>join_port1</tt> and <tt>join_port2</tt>) on a Join Proxy,
each associated to a different cBRSKI protocol variant, defined by two CoRE Link Format links:</t>
        <artwork><![CDATA[
  REQ: GET coap://[ff02::fd]/.well-known/core?rt=brski.jp

  RES: 2.05 Content
    Content-Format: 40 (application/link-format)
    Payload:
      <coaps://[IP_address]:join_port1>;rt=brski.jp,
      <coaps://[IP_address]:join_port2>;rt=brski.jp;
                            param1=value1;param2=value2
]]></artwork>
        <t>In actual examples based on this, the field <tt>IP_address</tt> would contain the link-local IP address of the Join Proxy and
the fields <tt>join_port1</tt> and <tt>join_port2</tt> would contain distinct decimal port number values.</t>
        <t>The parameter values (<tt>param1</tt> and <tt>param2</tt>) are included for illustrative purposes.
In a real example, these would contain Link Format parameters specifically defined for the <tt>brski.jp</tt> resource type.
Such parameters may be defined in future work (<xref target="I-D.ietf-anima-brski-discovery"/>).
These parameters, if understood by the Pledge, help in selecting the optimal matching onboarding protocol variant
of cBRSKI.
If the Pledge does not understand these parameters, it can select any one of the 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>'jpy' Scheme Registration</name>
        <t>This specification registers a new URI scheme per <xref target="RFC7595"/> under the IANA "Uniform Resource Identifier (URI) Schemes"
registry.</t>
        <artwork><![CDATA[
Scheme name: jpy
Status:      Permanent
Applications/protocols that use this scheme name:
             cBRSKI, constrained Join Proxy, JPY protocol
Contact:     ANIMA WG
Change controller: IESG
References:  [This RFC]
]]></artwork>
        <t>The scheme specification is provided below.</t>
        <ul spacing="normal">
          <li>
            <t>Scheme syntax: identical to the <tt>coaps</tt> scheme as defined in <xref section="6.1" sectionFormat="of" target="RFC7252"/>.</t>
          </li>
          <li>
            <t>Scheme semantics: JPY protocol as defined in <xref target="stateless-jpy"/> of [This RFC].</t>
          </li>
          <li>
            <t>Encoding considerations: identical to the <tt>coaps</tt> scheme as defined in <xref section="12.4" sectionFormat="of" target="RFC7252"/>.</t>
          </li>
          <li>
            <t>Interoperability considerations: none.</t>
          </li>
          <li>
            <t>Security considerations: all of the security considerations for the <tt>coaps</tt> scheme as defined in
<xref section="11.1" sectionFormat="of" target="RFC7252"/> apply.
In addition, users of this scheme should be aware that as part of the intended use, a UDP payload that was created
under the <tt>coaps</tt> scheme is embedded by a Join Proxy into a new UDP message conforming to the
<tt>jpy</tt> scheme, without the Join Proxy being able to reconstruct which CoAPS URI was originally used by the
sender of the CoAPS message, since most of the URI information is stored in DTLS-protected data.
The receiving server can transform the JPY message sent under the <tt>jpy</tt> scheme back to a
DTLS-encrypted CoAP message that uses the <tt>coaps</tt> scheme, by extracting the JPY message payload.
However, any CoAP-related information not stored in the DTLS-protected data (such as data in UDP/IP headers) is
subject to modification by the Join Proxy or other proxies in the communication path to the receiver.
Any protocol transported in JPY messages MUST be resilient against such modifications.</t>
          </li>
        </ul>
      </section>
      <section anchor="dns-sd-spec">
        <name>Service Name and Transport Protocol Port Number Registry</name>
        <t>This specification registers two service names under the IANA "Service Name and Transport Protocol Port
Number" registry.</t>
        <artwork><![CDATA[
Service Name: brski-jp
Transport Protocol(s): udp
Assignee:  IESG <iesg@ietf.org>
Contact:  IESG <iesg@ietf.org>
Description: Bootstrapping Remote Secure Key Infrastructure
             constrained Join Proxy
Reference:   [This RFC]

Service Name: brski-rjp
Transport Protocol(s): udp
Assignee:  IESG <iesg@ietf.org>
Contact:  IESG <iesg@ietf.org>
Description: Bootstrapping Remote Secure Key Infrastructure
             Registrar join-port, supporting the 'jpy'
             scheme, used by stateless constrained Join Proxy
Reference:   [This RFC]
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC5288">
          <front>
            <title>AES Galois Counter Mode (GCM) Cipher Suites for TLS</title>
            <author fullname="J. Salowey" initials="J." surname="Salowey"/>
            <author fullname="A. Choudhury" initials="A." surname="Choudhury"/>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <date month="August" year="2008"/>
            <abstract>
              <t>This memo describes the use of the Advanced Encryption Standard (AES) in Galois/Counter Mode (GCM) as a Transport Layer Security (TLS) authenticated encryption operation. GCM provides both confidentiality and data origin authentication, can be efficiently implemented in hardware for speeds of 10 gigabits per second and above, and is also well-suited to software implementations. This memo defines TLS cipher suites that use AES-GCM with RSA, DSA, and Diffie-Hellman-based key exchange mechanisms. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5288"/>
          <seriesInfo name="DOI" value="10.17487/RFC5288"/>
        </reference>
        <reference anchor="RFC768">
          <front>
            <title>User Datagram Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="August" year="1980"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC0768"/>
        </reference>
        <reference anchor="RFC792">
          <front>
            <title>Internet Control Message Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="792"/>
          <seriesInfo name="DOI" value="10.17487/RFC0792"/>
        </reference>
        <reference anchor="RFC4443">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta"/>
            <date month="March" year="2006"/>
            <abstract>
              <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol). ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="RFC8366bis">
          <front>
            <title>A Voucher Artifact for Bootstrapping Protocols</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software</organization>
            </author>
            <author fullname="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="18" month="October" 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-29"/>
        </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="20" month="July" year="2025"/>
            <abstract>
              <t>   This document specifies how to make BRSKI communications
   autoconfiguring, extensible and resilient in the face of simultaneous
   use of different variations of the BRSKI protocol (BRSKI, BRSKI-AE,
   BRSKI-PRM, constrained BRSKI, stateless constrained BRSKI proxies).
   This document specifies a data model, IANA registry and BRSKI
   component procedures to achieve this.

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

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

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

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

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

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

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

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

<sourcecode type="cbor-pretty"><![CDATA[
82                                      # array(2)
   50                                   # bytes(16)
      D01914BCC376A88FFECC50CA6017B0C1  #
   58 3C                                # bytes(60)
      16FEFD0000000000000000002F ...
      <further bytes of DTLS 1.2 Hello Verify Request>
]]></sourcecode>
      <t>The same JPY message in CBOR diagnostic notation is:</t>
      <sourcecode type="cbor-diag"><![CDATA[
    [ h'd01914bcc376a88ffecc50ca6017b0c1' ,
      h'16fefd0000000000000000002f' ... '66c1' ]
]]></sourcecode>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t><xref target="I-D.richardson-anima-state-for-joinrouter"/> outlined the various options for building a constrained Join Proxy.</t>
      <t>Many thanks for the comments by <contact fullname="Bill Atwood"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Brian Carpenter"/>, <contact fullname="Spencer Dawkins"/>,
<contact fullname="Toerless Eckert"/>, <contact fullname="Russ Housley"/>, <contact fullname="Ines Robles"/>, <contact fullname="Rich Salz"/>,
<contact fullname="Jürgen Schönwälder"/>, <contact fullname="Mališa Vučinić"/>, and <contact fullname="Rob Wilton"/>.</t>
      <t>This document is very much inspired by text published earlier in <xref target="I-D.kumar-dice-dtls-relay"/>.
<contact fullname="Sandeep Kumar"/>, <contact fullname="Sye loong Keoh"/>, and <contact fullname="Oscar Garcia-Morchon"/> are the co-authors of this document.
Their draft text has served as a basis for this document.</t>
    </section>
    <section numbered="false" anchor="changelog">
      <name>Changelog</name>
      <t>-17 to -18</t>
      <artwork><![CDATA[
   * Changed JPY protocol scheme from coaps+jpy to more generic
     jpy and rephrased all related definitions (#80).
   * Clarified that discovery responses from Join Proxy refer to
     the root CoAP resource (/) or root JPY resource (#79).
   * Assigned editor role (#78).
   * Editorial updates.
]]></artwork>
      <t>-16 to -17</t>
      <artwork><![CDATA[
   * Added security consideration that a genuine Join Proxy may
     relay to a malicious Registrar (#33, #77).
   * Added solution and specification sections on the use of
     multiple Registrars (#45, #65, #76).
   * Added clarification that Registrar address(es) can be
     configured, or discovered (#76).
   * Define conditions for implementing only a single Join Proxy
     mode - stateful or stateless (#69, #73)
   * Improved JPY Header security by adding integrity protection
     (#74).
   * Fixed format definition of example JPY Header (#74).
   * Editorial updates.
]]></artwork>
      <t>-15 to -16</t>
      <artwork><![CDATA[
   * Security considerations text reviewed and expanded with more
     attack types.
   * Define CoAP discovery as default, remove GRASP/6TiSCH (#68).
   * Abstract updated to describe higher-level concepts (#47).
   * Applied Spencer's TSVART review comment 2022-05-16 in an
     improved manner.
   * Applied Russ' review comments from IOTDIR review 2023-08-09.
   * Rewrite Section 4.1 based on Russ' review (#48).
   * Applied Toerless' review comments from WGLC (#63).
   * Applied review comments of Bill Atwood of 2024-05-21.
   * Clarify 'context payload' terminology (#49).
   * Use shorter and consistent term for Join Proxy (#58).
   * Appendix A corrected to use latest JPY message format.
   * Author added.
   * Update reference RFC8366 to RFC8366bis.
   * Many editorial updates.
]]></artwork>
      <t>-13 to -15</t>
      <artwork><![CDATA[
   * Various editorial updates and minor changes.
]]></artwork>
      <t>-12 to -13</t>
      <artwork><![CDATA[
   * jpy message encrypted and no longer standardized
]]></artwork>
      <t>-11 to -12</t>
      <artwork><![CDATA[
   * many typos fixed and text re-organized
   * core of GRASP and CoAP discovery moved to constrained-voucher
     document, only stateless extensions remain
]]></artwork>
      <t>-10 to -11</t>
      <artwork><![CDATA[
   * Join Proxy and Registrar discovery merged
   * GRASP discovery updated
   * ARTART review
   * TSVART review
]]></artwork>
      <t>-09 to -10</t>
      <artwork><![CDATA[
   * OPSDIR review
   * IANA review
   * SECDIR review
   * GENART review
]]></artwork>
      <t>-07 to -09</t>
      <artwork><![CDATA[
    * typos
]]></artwork>
      <t>-06 to -07</t>
      <artwork><![CDATA[
    * AD review changes
]]></artwork>
      <t>-05 to -06</t>
      <artwork><![CDATA[
    * RT value change to brski.jp and brski.rjp
    * new registry values for IANA
    * improved handling of jpy header array
]]></artwork>
      <t>-04 to -05</t>
      <artwork><![CDATA[
    * Join Proxy and join-port consistent spelling
    * some nits removed
    * restructured discovery
    * section
    * rephrased parts of security section
]]></artwork>
      <t>-03 to -04</t>
      <artwork><![CDATA[
   * mail address and reference
]]></artwork>
      <t>-02 to -03</t>
      <artwork><![CDATA[
   * Terminology updated
   * Several clarifications on discovery and routability
   * DTLS payload introduced
]]></artwork>
      <t>-01 to -02</t>
      <artwork><![CDATA[
  * Discovery of Join Proxy and Registrar ports
]]></artwork>
      <t>-00 to -01</t>
      <artwork><![CDATA[
   * Registrar used throughout instead of EST server
   * Emphasized Join Proxy port for Join Proxy and Registrar
   * updated discovery accordingly
   * updated stateless Join Proxy JPY header
   * JPY header described with CDDL
   * Example simplified and corrected
]]></artwork>
      <t>-00 to -00</t>
      <artwork><![CDATA[
   * copied from vanderstok-anima-constrained-join-proxy-05
]]></artwork>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
