<?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.19 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-anima-constrained-join-proxy-16" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <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-16"/>
    <author initials="M." surname="Richardson" fullname="Michael Richardson">
      <organization>Sandelman Software Works</organization>
      <address>
        <email>mcr+ietf@sandelman.ca</email>
      </address>
    </author>
    <author initials="P." surname="van der Stok" fullname="Peter van der Stok">
      <organization>vanderstok consultancy</organization>
      <address>
        <email>stokcons@kpnmail.nl</email>
      </address>
    </author>
    <author initials="P." surname="Kampanakis" fullname="Panos Kampanakis">
      <organization>Cisco Systems</organization>
      <address>
        <email>pkampana@cisco.com</email>
      </address>
    </author>
    <author initials="E." surname="Dijk" fullname="Esko Dijk">
      <organization>IoTconsultancy.nl</organization>
      <address>
        <email>esko.dijk@iotconsultancy.nl</email>
      </address>
    </author>
    <date year="2025" month="January" day="23"/>
    <area>Internet</area>
    <workgroup>anima Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 83?>

<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 by a constrained node <xref target="RFC7228"/>. 
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 extendible to support other UDP-based onboarding protocols as well.
The Join Proxy functionality is designed for use in constrained networks <xref target="RFC7228"/>, including IPv6 over Low-Power Wireless Personal Area Networks (6LoWPAN) 
<xref target="RFC4944"/> based mesh 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 UDP communication to complete cBRSKI onboarding.
Two modes of Join Proxy operation are defined, stateless and stateful, to allow implementers to make 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) bootstrap 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<br/>
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<br/>
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<br/>
 can be more than one hop away from the Registrar (R) and it is not yet authenticated to the network.
Also, the Pledge does not possess any key material to encrypt or decrypt link-layer data transmissions.</t>
        <t>In this situation, the Pledge can only communicate one-hop to its neighbors, such as the constrained Join Proxy (J), 
using link-local IPv6 addresses and using no link-layer encryption.
However, the Pledge needs to communicate with end-to-end security with a Registrar to authenticate and obtain its 
domain identity/credentials.
In the case of cBRSKI, the domain identity is an X.509 certificate. Domain credentials may include key material for 
network access.</t>
        <figure anchor="fig-net">
          <name>Multi-hop cBRSKI onboarding scenario in a 6LoWPAN mesh network</name>
          <artset>
            <artwork type="svg" align="left"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="416" viewBox="0 0 416 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <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 discover the routable IP address of the Registrar, as specified in this document.
Future methods of Registrar discovery 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<br/>
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) discovered in 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.
For step 1, it is out of scope how a Join Proxy selects a Registrar when it discovers two or more.
That is the subject of future work.</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    <br/>
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.</t>
          </li>
          <li>
            <t>Only stateful mode is implemented.</t>
          </li>
          <li>
            <t>Only stateless mode is implemented.</t>
          </li>
        </ol>
        <t>An application profile or ecosystem standard that integrates the Join Proxy functionality as defined in this 
document MAY define any of these three options. 
In particular, option 2 or 3 has the advantage of reducing code size and testing efforts, when all devices under 
the application profile/standard adhere to the same choice.</t>
        <t>A generic Join Proxy that is not adhering to such an application profile/standard MUST implement both modes.</t>
        <t>A cBRSKI Registrar by design necessarily implements the stateful mode, and it SHOULD implement support for 
Join Proxies operating in the stateless mode. The exception case here is a cBRSKI Registrar that is implemented for a 
particular dedicated application profile/standard which specifies only the stateful mode.</t>
        <t>If a Join Proxy implements both modes, then it MUST use only the mode that is currently configured for the network 
(by a method or profile outside the scope of this document) or the mode individually configured for the device.
If the mode is not configured, 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 talk to a Registrar (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.</t>
        <t>Independent of the mode of the Join Proxy, 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>
      </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="left"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="552" viewBox="0 0 552 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <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.</t>
        <figure anchor="fig-stateless">
          <name>Example of the message flow of a DTLS session via a stateless Join Proxy.</name>
          <artset>
            <artwork type="svg" align="left"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="560" viewBox="0 0 560 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <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 <br/>
without violating MTU sizes.</t>
        </section>
        <section anchor="jpy-message-security">
          <name>JPY Message Security</name>
          <t>The Join Proxy SHOULD encrypt the state data prior to wrapping it in a CBOR byte string in jpy_header. 
It SHOULD be encrypted with a symmetric key known only to the Join Proxy itself.
This key need not persist on a long-term basis, and MAY be changed periodically.</t>
          <t>The Join Proxy MUST maintain identical <tt>jpy_header</tt> data for all communications from the same Pledge and same UDP source port.
This implies that the encryption key used either does not change during the onboarding attempt of the Pledge, 
or that when it does, it is acceptable to break any onboarding connections that have not yet completed.</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 CDDL grammar.
This is illustrative only: the format of the data inside <tt>jpy_header</tt> is not subject to standardization and may vary 
across Pledges.</t>
          <artwork><![CDATA[
    jpy_header_plaintext = [
      family:  uint .bits 1,
      ifindex: uint .bits 8,
      srcport: uint .bits 16,
      iid:     bstr .bits 64,
    ]
]]></artwork>
          <t>This results in a total plaintext size of 96 bits, or 12 bytes.
The data structure stores the Pledge's UDP source port (srcport), the IID bits of the Pledge's originating IPv6 link-Local 
address (iid), the IPv4/IPv6 family (as a single bit) and an interface index (ifindex) to provide the link-local scope 
for the case that the Join Proxy has multiple network interfaces.
This size fits nicely into a single AES128 CBC block for instance, resulting in a 16 byte block of encrypted state data,
<tt>jpy_header_ciphertext</tt>.
This <tt>jpy_header_ciphertext</tt> data is then wrapped in a CBOR byte string to form the <tt>jpy_header</tt> element.
So for the example <tt>jpy_header_plaintext</tt> of 12 bytes, we get a <tt>jpy_header_ciphertext</tt> of 16 bytes, and finally 
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,<br/>
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 media where the Interface IDentifier (IID) is not 64-bits, a different field size for <tt>iid</tt> will be necessary.</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>
    <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 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.
On the other hand, a stateful Join Proxy needs to discover a single CoAPS endpoint that offers the full set of 
cBRSKI Registrar resources.</t>
        <section anchor="stateless-case">
          <name>Stateless Case</name>
          <t>The stateless Join Proxy can discover the JPY protocol endpoint of the Registrar by sending a multicast CoAP GET 
discovery query to the "/.well-known/core" resource including a resource type (rt) query parameter "brski.rjp".
The latter CoAP resource type is defined in <xref target="iana-rt"/>.</t>
          <t>Upon success, the return payload will contain the port of the Registrar on which the JPY protocol handler is hosted.
This exchange is shown below:</t>
          <artwork><![CDATA[
  REQ: GET coap://[ff05::fd]/.well-known/core?rt=brski.rjp

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

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

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

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

  RES: 2.05 Content
    Content-Format: 40
    Payload:
      <coaps://[IP_address]:join_port>;rt=brski.jp
]]></artwork>
        <t>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>
    <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>
      <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 target="RFC8995"/>.</t>
        </li>
        <li>
          <t>It uses the returned responses of the Registrar for itself. 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.</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 node 
    acceptance or to Registrar 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 a neighbor of a Join Proxy, or is a router on the path to the Registrar:</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 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>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 construct an invalid JPY message. In that case, a Join Proxy might 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 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 that the encryption by the source 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>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 Header field as specified in this document is not necessary because the layer 2 security already protects it.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="iana-rt">
        <name>Resource Type Attributes Registry</name>
        <t>This specification registers two new Resource Type (rt=) Link Target Attributes in the 
"Resource Type (rt=) Link Target Attribute Values" registry under the "Constrained RESTful Environments (CoRE)
Parameters" registry group, per the <xref target="RFC6690"/> procedure.</t>
        <artwork><![CDATA[
Attribute Value: brski.jp
Description: Constrained Join Proxy for cBRSKI onboarding protocol.
Reference:   [This RFC]

Attribute Value: brski.rjp
Description: cBRSKI Registrar Join Proxy endpoint that supports the 
             JPY protocol.
Reference:   [This RFC]
]]></artwork>
      </section>
      <section anchor="jpyscheme">
        <name>coaps+jpy Scheme Registration</name>
        <t>This specification registers a new URI scheme per <xref target="RFC7595"/> under the IANA "Uniform Resource Identifier (URI) Schemes"
registry.</t>
        <artwork><![CDATA[
Scheme name: coaps+jpy
Status:      permanent
Applications/protocols that use this scheme name: 
             cBRSKI, constrained Join Proxy
Contact:     ANIMA WG
Change controller: IESG
References:  [This RFC]
]]></artwork>
        <t>The scheme specification is provided below.</t>
        <ul spacing="normal">
          <li>
            <t>Scheme syntax: identical to the "coaps" scheme defined in <xref target="RFC7252"/>.</t>
          </li>
          <li>
            <t>Scheme semantics: identical to the "coaps" scheme, except that the JPY message encapsulation mechanism described in 
<xref target="stateless-jpy"/> of [This RFC] is used to transport each CoAPS UDP datagram.</t>
          </li>
          <li>
            <t>Encoding considerations: identical to the "coaps" scheme.</t>
          </li>
          <li>
            <t>Interoperability considerations: identical to the "coaps" scheme.</t>
          </li>
          <li>
            <t>Security considerations: all of the security considerations of the "coaps" scheme apply.
Users of this scheme should be aware that as part of the intended use, a UDP message that was formed using the 
"coaps" scheme is modified by a Join Proxy as defined by [This RFC] into a UDP message conforming to the 
"coaps+jpy" scheme without the Join Proxy being able to parse/decode which CoAPS URI was originally used by the 
sender.
Depending on the CoAP Options used in the original CoAPS message, this operation may modify elements of the original 
CoAPS URI (as will be reconstructed by the receiving coaps+jpy server) in a way that is unknown to the Join Proxy.</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 used by stateless constrained
             Join Proxy
Reference:   [This RFC]
]]></artwork>
      </section>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t><xref target="I-D.richardson-anima-state-for-joinrouter"/> outlined the various options for building a constrained Join Proxy.</t>
      <t>Many thanks for the comments by <contact fullname="Bill Atwood"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Brian Carpenter"/>, <contact fullname="Spencer Dawkins"/>, <contact fullname="Esko Dijk"/>, <contact fullname="Toerless Eckert"/>, <contact fullname="Russ Housley"/>, <contact fullname="Ines Robles"/>, <contact fullname="Rich Salz"/>, <contact fullname="Jürgen Schönwälder"/>, <contact fullname="Mališa Vučinić"/>, and <contact fullname="Rob Wilton"/>.</t>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
      <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 anchor="changelog">
      <name>Changelog</name>
      <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>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="8" month="July" year="2024"/>
            <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, merging a number of extensions into
   the YANG.  The RFC8995 voucher request is also merged into this
   document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-anima-rfc8366bis-12"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC8995">
          <front>
            <title>Bootstrapping Remote Secure Key Infrastructure (BRSKI)</title>
            <author fullname="M. Pritikin" initials="M." surname="Pritikin"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="T. Eckert" initials="T." surname="Eckert"/>
            <author fullname="M. Behringer" initials="M." surname="Behringer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document specifies automated bootstrapping of an Autonomic Control Plane. To do this, a Secure Key Infrastructure is bootstrapped. This is done using manufacturer-installed X.509 certificates, in combination with a manufacturer's authorizing service, both online and offline. We call this process the Bootstrapping Remote Secure Key Infrastructure (BRSKI) protocol. Bootstrapping a new device can occur when using a routable address and a cloud service, only link-local connectivity, or limited/disconnected networks. Support for deployment models with less stringent security requirements is included. Bootstrapping is complete when the cryptographic identity of the new key infrastructure is successfully deployed to the device. The established secure connection can be used to deploy a locally issued certificate to the device as well.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8995"/>
          <seriesInfo name="DOI" value="10.17487/RFC8995"/>
        </reference>
        <reference anchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC9148">
          <front>
            <title>EST-coaps: Enrollment over Secure Transport with the Secure Constrained Application Protocol</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <author fullname="P. Kampanakis" initials="P." surname="Kampanakis"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="S. Raza" initials="S." surname="Raza"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>Enrollment over Secure Transport (EST) is used as a certificate provisioning protocol over HTTPS. Low-resource devices often use the lightweight Constrained Application Protocol (CoAP) for message exchanges. This document defines how to transport EST payloads over secure CoAP (EST-coaps), which allows constrained devices to use existing EST functionality for provisioning certificates.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9148"/>
          <seriesInfo name="DOI" value="10.17487/RFC9148"/>
        </reference>
        <reference anchor="cBRSKI">
          <front>
            <title>Constrained Bootstrapping Remote Secure Key Infrastructure (cBRSKI)</title>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
              <organization>vanderstok consultancy</organization>
            </author>
            <author fullname="Panos Kampanakis" initials="P." surname="Kampanakis">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="8" month="January" 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-26"/>
        </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="RFC8974">
          <front>
            <title>Extended Tokens and Stateless Clients in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>This document provides considerations for alleviating Constrained Application Protocol (CoAP) clients and intermediaries of keeping per-request state. To facilitate this, this document additionally introduces a new, optional CoAP protocol extension for extended token lengths.</t>
              <t>This document updates RFCs 7252 and 8323 with an extended definition of the "TKL" field in the CoAP message header.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8974"/>
          <seriesInfo name="DOI" value="10.17487/RFC8974"/>
        </reference>
        <reference anchor="RFC9031">
          <front>
            <title>Constrained Join Protocol (CoJP) for 6TiSCH</title>
            <author fullname="M. Vučinić" initials="M." role="editor" surname="Vučinić"/>
            <author fullname="J. Simon" initials="J." surname="Simon"/>
            <author fullname="K. Pister" initials="K." surname="Pister"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes the minimal framework required for a new device, called a "pledge", to securely join a 6TiSCH (IPv6 over the Time-Slotted Channel Hopping mode of IEEE 802.15.4) network. The framework requires that the pledge and the JRC (Join Registrar/Coordinator, a central entity), share a symmetric key. How this key is provisioned is out of scope of this document. Through a single CoAP (Constrained Application Protocol) request-response exchange secured by OSCORE (Object Security for Constrained RESTful Environments), the pledge requests admission into the network, and the JRC configures it with link-layer keying material and other parameters. The JRC may at any time update the parameters through another request-response exchange secured by OSCORE. This specification defines the Constrained Join Protocol and its CBOR (Concise Binary Object Representation) data structures, and it describes how to configure the rest of the 6TiSCH communication stack for this join process to occur in a secure manner. Additional security mechanisms may be added on top of this minimal framework.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9031"/>
          <seriesInfo name="DOI" value="10.17487/RFC9031"/>
        </reference>
        <reference anchor="I-D.ietf-anima-brski-discovery">
          <front>
            <title>BRSKI discovery and variations</title>
            <author fullname="Toerless Eckert" initials="T. T." surname="Eckert">
              <organization>Futurewei USA</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   This document specifies how BRSKI entities, such as registrars,
   proxies, pledges or others that are acting as responders, can be
   discovered and selected by BRSKI entities acting as initiators,
   especially in the face of variations in the protocols that can
   introduce non-interoperability when not equally supported by both
   responder and initiator.

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

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

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

<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>
  </back>
  <!-- ##markdown-source:
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
CjaG/54iGGFlursI5v8DeBiCbkroAAA=

-->

</rfc>
