<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.35 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-anima-constrained-join-proxy-20" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="Join Proxy">Join Proxy for Onboarding of Constrained Network Elements</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-anima-constrained-join-proxy-20"/>
    <author initials="E." surname="Dijk" fullname="Esko Dijk" role="editor">
      <organization>IoTconsultancy.nl</organization>
      <address>
        <email>esko.dijk@iotconsultancy.nl</email>
      </address>
    </author>
    <author initials="M." surname="Richardson" fullname="Michael Richardson">
      <organization>Sandelman Software Works</organization>
      <address>
        <email>mcr+ietf@sandelman.ca</email>
      </address>
    </author>
    <author initials="P." surname="van der Stok" fullname="Peter van der Stok">
      <organization>vanderstok consultancy</organization>
      <address>
        <email>stokcons@kpnmail.nl</email>
      </address>
    </author>
    <author initials="P." surname="Kampanakis" fullname="Panos Kampanakis">
      <organization>Cisco Systems</organization>
      <address>
        <email>pkampana@cisco.com</email>
      </address>
    </author>
    <date year="2026" month="June" day="08"/>
    <area>int</area>
    <workgroup>anima</workgroup>
    <abstract>
      <?line 83?>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<sourcecode type="cbor-pretty"><![CDATA[
82                                      # array(2)
   50                                   # bytes(16)
      D01914BCC376A88FFECC50CA6017B0C1  #
   58 3C                                # bytes(60)
      16FEFD0000000000000000002F ...
      <further bytes of DTLS 1.2 Hello Verify Request>
]]></sourcecode>
      <t>The same JPY message in CBOR diagnostic notation is:</t>
      <sourcecode type="cbor-diag"><![CDATA[
    [ h'd01914bcc376a88ffecc50ca6017b0c1' ,
      h'16fefd0000000000000000002f' ... '66c1' ]
]]></sourcecode>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t><xref target="I-D.richardson-anima-state-for-joinrouter"/> outlined the various options for building a constrained Join Proxy.</t>
      <t>Many thanks for the comments by <contact fullname="Bill Atwood"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Brian Carpenter"/>, <contact fullname="Spencer Dawkins"/>,
<contact fullname="Toerless Eckert"/>, <contact fullname="Russ Housley"/>, <contact fullname="Ines Robles"/>, <contact fullname="Rich Salz"/>,
<contact fullname="Jürgen Schönwälder"/>, <contact fullname="Mališa Vučinić"/>, and <contact fullname="Rob Wilton"/>.</t>
      <t>This document is very much inspired by text published earlier in <xref target="I-D.kumar-dice-dtls-relay"/>.
<contact fullname="Sandeep Kumar"/>, <contact fullname="Sye loong Keoh"/>, and <contact fullname="Oscar Garcia-Morchon"/> are the co-authors of this document.
Their draft text has served as a basis for this document.</t>
    </section>
    <section numbered="false" anchor="changelog">
      <name>Changelog</name>
      <t>-19 to -20</t>
      <artwork><![CDATA[
   * Title changed to use 'onboarding' instead of 'bootstrapping'.
   * Replace rt 'brski.jp' by a CoRE LF target attribute brski-jp
     (#88) and update all related text and examples (see Note-1).
   * Clarified that a JPY URI MUST included a port number, since
     no default port is registered.
   * Editorial: renamed 'constrained Join Proxy' occurrences to
     general name 'Join Proxy' to match the title.
   * Editorial updates and text fixes.
]]></artwork>
      <t>Note-1: the motivation for making the change from discovery based on "rt=brski.jp" attribute queries, to
"brski-jp=*" queries, was due to the following properties of the new CoRE Link Format solution:</t>
      <ol spacing="normal" type="1"><li>
          <t>More semantically correct per CoRE Link Format: the "rt" attribute formally pertains to a single CoAP resource or
a resource tree (single resource with sub-resources as a whole) indicated by the path of the link.
In our case, we used it to describe a single root
resource (/) and label this with a rt type, even though the actual resources being discovered are not the root
resource but the /.well-known/core/brski/... and /.well-known/core/est/... resources.
By using a new dedicated target attribute "brski-jp",
the semantic definition can be exactly created to match the present case for discovery of the join-port.</t>
        </li>
        <li>
          <t>Shorter on-the-wire format. For a single returned CoRE LF link the difference is small, but if multiple links are
returned on a constrained (6LoWPAN) network it could be the difference between a single radio frame or 2 frames.</t>
        </li>
        <li>
          <t>For the Join Proxy, no need to encode its link-local IPv6 address into ASCII/UTF-8 and send it over the wire, for no
reason (as it was not used by the Pledge/recipient).</t>
        </li>
        <li>
          <t>Minimize confusion on which IPv6 address to use: in the former solution, the IPv6 address was both present in the
received IPv6 packet header (of the packet carrying the the discovery response),
as well as in the CoAP (CoRE LF formatted) payload of this packet. This could
lead to implementer's confusion on which IPv6 address element to use. The new format does not have this 'make the
right choice' issue.</t>
        </li>
      </ol>
      <t>-18 to -19</t>
      <artwork><![CDATA[
   * Added normative rules for stateful/stateless mode selection
     for JP that supports both modes.
   * Editorial updates and text fixes.
]]></artwork>
      <t>-17 to -18</t>
      <artwork><![CDATA[
   * Changed JPY protocol scheme from coaps+jpy to more generic
     jpy and rephrased all related definitions (#80).
   * Clarified that discovery responses from Join Proxy refer to
     the root CoAP resource (/) or root JPY resource (#79).
   * Assigned editor role (#78).
   * Editorial updates.
]]></artwork>
      <t>-16 to -17</t>
      <artwork><![CDATA[
   * Added security consideration that a genuine Join Proxy may
     relay to a malicious Registrar (#33, #77).
   * Added solution and specification sections on the use of
     multiple Registrars (#45, #65, #76).
   * Added clarification that Registrar address(es) can be
     configured, or discovered (#76).
   * Define conditions for implementing only a single Join Proxy
     mode - stateful or stateless (#69, #73)
   * Improved JPY Header security by adding integrity protection
     (#74).
   * Fixed format definition of example JPY Header (#74).
   * Editorial updates.
]]></artwork>
      <t>-15 to -16</t>
      <artwork><![CDATA[
   * Security considerations text reviewed and expanded with more
     attack types.
   * Define CoAP discovery as default, remove GRASP/6TiSCH (#68).
   * Abstract updated to describe higher-level concepts (#47).
   * Applied Spencer's TSVART review comment 2022-05-16 in an
     improved manner.
   * Applied Russ' review comments from IOTDIR review 2023-08-09.
   * Rewrite Section 4.1 based on Russ' review (#48).
   * Applied Toerless' review comments from WGLC (#63).
   * Applied review comments of Bill Atwood of 2024-05-21.
   * Clarify 'context payload' terminology (#49).
   * Use shorter and consistent term for Join Proxy (#58).
   * Appendix A corrected to use latest JPY message format.
   * Author added.
   * Update reference RFC8366 to RFC8366bis.
   * Many editorial updates.
]]></artwork>
      <t>-13 to -15</t>
      <artwork><![CDATA[
   * Various editorial updates and minor changes.
]]></artwork>
      <t>-12 to -13</t>
      <artwork><![CDATA[
   * jpy message encrypted and no longer standardized
]]></artwork>
      <t>-11 to -12</t>
      <artwork><![CDATA[
   * many typos fixed and text re-organized
   * core of GRASP and CoAP discovery moved to constrained-voucher
     document, only stateless extensions remain
]]></artwork>
      <t>-10 to -11</t>
      <artwork><![CDATA[
   * Join Proxy and Registrar discovery merged
   * GRASP discovery updated
   * ARTART review
   * TSVART review
]]></artwork>
      <t>-09 to -10</t>
      <artwork><![CDATA[
   * OPSDIR review
   * IANA review
   * SECDIR review
   * GENART review
]]></artwork>
      <t>-07 to -09</t>
      <artwork><![CDATA[
    * typos
]]></artwork>
      <t>-06 to -07</t>
      <artwork><![CDATA[
    * AD review changes
]]></artwork>
      <t>-05 to -06</t>
      <artwork><![CDATA[
    * RT value change to brski.jp and brski.rjp
    * new registry values for IANA
    * improved handling of jpy header array
]]></artwork>
      <t>-04 to -05</t>
      <artwork><![CDATA[
    * Join Proxy and join-port consistent spelling
    * some nits removed
    * restructured discovery
    * section
    * rephrased parts of security section
]]></artwork>
      <t>-03 to -04</t>
      <artwork><![CDATA[
   * mail address and reference
]]></artwork>
      <t>-02 to -03</t>
      <artwork><![CDATA[
   * Terminology updated
   * Several clarifications on discovery and routability
   * DTLS payload introduced
]]></artwork>
      <t>-01 to -02</t>
      <artwork><![CDATA[
  * Discovery of Join Proxy and Registrar ports
]]></artwork>
      <t>-00 to -01</t>
      <artwork><![CDATA[
   * Registrar used throughout instead of EST server
   * Emphasized Join Proxy port for Join Proxy and Registrar
   * updated discovery accordingly
   * updated stateless Join Proxy JPY header
   * JPY header described with CDDL
   * Example simplified and corrected
]]></artwork>
      <t>-00 to -00</t>
      <artwork><![CDATA[
   * copied from vanderstok-anima-constrained-join-proxy-05
]]></artwork>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+W92XIjWZYg9u5f4cMwmwCyAQQA7qzM7GIyGJWsyliGjKya
tuq0osPdQXoGAEe7A2SyM0KmNz3pTR8gmekb9KQn9ehH9CU6673nujsZUVPT
PTNSmFUlCLjf5dxzz74Mh8Po7iTejaJNsVnkJ/Hvy2IVv6vKXx7ieVnFb1ez
MqmyYnUTl/P4rFzVmyopVnkWv8k392X1IT5f5Mt8tamjZDar8js7QpSV6SpZ
wqhZlcw3wyLfzIfJqlgmw9SPNPwZXhiu8YXhItnk9SYq1tVJvKm29WY6Hh+P
p1FS5clJXKw20f3NSUxDRGmyOYnrTRbBQHmyPIkvzt+/iqJku7ktq5NoCI/X
J/H5KH5Z/PwhiuOqxP3lWbEpK/iTF3Zefyj1gbKCsS/K97i27WKTrNKH0WoB
P+TLpFjAq/DsKINnf1uUm8ZDOt3rUXxZpLcAsrpcuVle41f5IvyJprtKVlm+
WCar+Kqcb+5hn/GfAKq1n3WZVn+HgPttrY+O0sTN924U38HLWV7FV5vyg5vx
Xb6Brxo/0Yx3OExVwzex2YOfD3/BH377Yb3Cb+zuYLY/JMt1sko+FLWfK1mV
dfgDzXRW1GkZXz3Um3xpNrT+wE/+NsXfR2m5jKK7fLXNT+CZm6rcrvWE43jz
sIYJECKIgb/DH+FbHoee+S2CZgTT4bvF5nY7kx+G9zcvupEsilZltUw2xR3N
ePnqbH96dCQfDw/cp+OpfNrb29uVj0e7BwezAiBxMXw5MuhczVP5SZ473jvW
V46P9+Xj8WTv0H+kidLvLq/+cNEaz678rtymt3kVRcVq3lj47sFkrB+Pp4fu
49GBLv14b08+Huzv67MHB8fu4+Ghru5wvKvfHk7GuvnD6dRBZLrvvt13mzo8
3ndb9cuBXZuPe+7joX48Hu9O9OPelODbgMGsqj8UwwyR5C6vHvSJD9tlUsHX
aT7MNot6WOWLxP1YuQsmg9QboChDgBshAOAPXAt8uMjz/Gg8HU5OL/FPwLSk
usmBoOzcbjbr+uTFC3hzleFYI3wWUewFfngBb43grRcHcK4vdvhdJp07F+fn
57H8Hl/l6RZu88v8DpYaX2RAI4vNA7+gNAo/V6m+eaUzxqd1XaYFnHS54hcy
2MVJPB1PjuAuDodxMkP0SDdR9P62qGOgs1skwnG9Xa/LalPHm9s8NkgUf1eW
G/xjvcaLdJkvy02uS/xD/hBfrOZVAg9s0w18Vcc9Rsx+XHoGALdnU6blIp49
RElGXyVxlf/TtqhghpXwg/l2leLCB7QGzwxGvFT9OU6BNs3yuFiumYHAEPBt
Eqx6VWY5vpfHN2WyQA4UjhnDgJsyvs0Xa5j/vvUu7GPn3SLPbvJ6px/XtN3F
g+4J+UkJM+KbF+/cBrY17gwmihgGbt+j6GITA9DrOKlxoUWVbotNvHbM8sca
aO3LZJPcVMkSV8jg6v348l0/Xifph5xOJtnA5qvqgTZj4LvM6zqBpfKO63Kx
JUDBHvNfNvmqLmaLHLcrhxyX8D5M+vLdcJbUBL7WUdFS7/PFgse0zF3OIVkA
VuIcAK3iBgGHO9nWcDKrEJ4MnnoAdChdbGmai3d3BzHezviH8n74rryHT38C
bFjAToAFVTWOH58Ce1ZxAU7k4IfyT+9O3/RjXrWOi/Pd38L9jRpg4cuCqwTw
4ly9ncv8psCFVXCqy+QB8WgJjKwAVMKTvC3XsPF7+GFelUs4KsaBUfQyr9cF
IP6GLk2BVzzNGVH5EZgX8GOV5xkhFoJhUaw+DBdlChsBVrXcroqULib+Dl/A
lDCgYIpfNcD7voyXhIOAtgbw5TqveABk9lk+R+gOYiJUBDcgAvzXfLsY4CzJ
YlHew3Ln87zCSw4bz/JhOZ/XUZXfCJTg0pbbCijNFnFo4O8Vz8Ur/QWhSOPj
VYA/RkxOlkWWLfIoegZ0YFOV2ZZQIyKc+esoR9wTuuGIBUAgrYpZjtct/vVX
4YifPkXwxF2B8Ek8riPuJXJR43/Oq3K4Qe4X9wAJSmB9eRZQJIAsXN5BDLhc
rubFzRYJUUYUF27RxUrJ4AYuED5MaxvQhZenBnAVF3D0saMTAzoXpGrrNXx/
D0IFLGkO976sHoYgBm3oBRi92BSAFAGBnxeInxfw3cXLPuzWsJlPnwYEehod
OBHN6igQ3YFRxGi0TD4AWBD5YM3n9CxRd7ppAvr3VbKqiQz0zq/e9xmyyMIB
srRmBjULJZ8+xXK5RZgg7Hb0kJfjAXcauwsWu1NCUJJIDrtI4UIqNVaymcH5
FHQr6Ba7Wyejw7DRr7/yPYHlMN7j2cOeajx6PR4mkHA/ayCuCZI8RIoOys47
BvHk06c+QRafc7crKrvJV+M9T8s8BcOxfijr+sEQrR9+eKMwBtno0yfiBXBC
daATna7XCyUPnvyflafv9GUQoWD3SunlCDLgqJ5v+JP9IXnQA4e7GvVevv/h
SgZCURIGAmi7i06nwSBU4l4rfcEJzN2Ds6DLYUSHgdIwZTcZvFXj3aPzSPRn
OVTk3gDeVZ5uiEQZjLkrEvi7Z4DfD8QAmHmdVJsi3S6SasCrsMwO7gTP7lld
9LcxGto5isIM+luHDKPo4H1xdfa9xw68natyg7QK5M51zlgeiFiAMshB8jqn
K4pQPyt//07OBcRamIVlgmUO0uiqqJejqMl+gS3X6zxFgkGEMZwDPpervC3v
ROWaj7XKgRdUDCMiq4AkBL/paH80xRfdWeNU8y3RZqYx0fcAPgDlAN/0co9I
JiLP0SUj1otkjVF6wPiQ4JMl7R7vjUDZAnkQgbyaEF7gtUQebFjsfQG0BmEM
XBsFcrrjdLb4kF9QNMvhRoMcQvAAiMLVBmJl1sT7N0QISRcSd4OkBZNpkvrg
//DEEsvTCbNAmq0Qk5ilC4/PhfZHgjLFze0MKAztE9UmAO0W1rHABVZ5moNa
VstiUrzf1YOjjcqdmDIA9oPeDIoI0sTv3CZxtTKOoJd/MJBRnHgyyxvQIP7C
4tI/M3BU1EVxVoEUkyBO+LZiMU8JLxzHDex4BTQ7A847hP/Ax7R6WOPoSH6A
YtVEroUvCtV3tx929CdYEOOzpwnwB544PA+4BSSj50+g70Er+C7bnG3hsiGi
wik5ic4CInKAUCUxPFo3rnIUYQ4oUyLn8fdqIDwLFYk6ggO5F5jxnh25lgUq
DGYA0Bw2KwtG6FtAfJeniVKIUGdBtekGyZ/DELputM5bXNsCKFmGci2MLkdI
An6I7gNFmxoOCmik1zH4MQ9/YckVLWZF1w7HQ5ARoalAVIUfCczuKlpSGaPS
Cftbg/S34gsV8eukhARkpCwHsdxd2EZ6K+qUhc0PxYf8vqhF9vbrxI0Aam6Q
wgEPXNVEEHRbfheygRn8oJu1InbXDuBA3iLldnIJAtoJYk3QOpq8TIDJVQ7S
TICJnszy2EidsOZ8MWfEaqiikeF+sfJdtEbqoKS/MiBFCo0BU9HYwwJsU7lA
YogkBtmK1TK8asFy9GM8mEDo2M9JFE1G8anTOeyDhJF0m2DDNUjAMBEonMr6
cSp6DdfrtKypG43Yc3O4rMyZGgTjdg47YCLA8xYbPhQ4ObgcOZELtBHq9XTX
PP8F2e4N4odc0AZ+ICI3EDK6KpYFXkhBA9W2AGF0EFwG0Y4ViqCrof79WsAf
vVXwg+zx+u07FC7jy3c/CMfY3x+jCkD0QyHtVD0CFJ8jz6xbRSWW9gV/CKQi
N4Q3vsCqlWpVOfD6FYFT743jwP6i2Zuj54b63/u8WharclHePMTu36/PzNef
WJb5AMuBiwK3def1j1fvQW2i/8Zv3tLny/P/8OPF5flL/Hz1/ekPP7gPkTxx
9f3bH3946T/5N8/evn59/uYlvwzfxsFX0c7r03/YYV1q5+279xdv35z+sNOW
oYjYEY9EgbJaA1yQQ9ZRoJB+d/bu//pfJ3twRv8ODmk6mRwDW+c/jiaHKDDe
A8Hk2UiA4D/xNCJQifOETgrQGC7yGvSVBbBqlO1uy3u81xWA9eu/B56Ux8OD
v/82YtjNS9ToiSwCXGtrCPBKstPccGoju3stcovmkyJj9o8XqQmDkwjlbFRd
B/GZWKuE31nexzycTAaA0PCsQ5OB4AbP+UfWHUWYxaXHO6IPs6mSxdJabBaq
TyoqK2WV21dUfDD+ztcDo475NUSOSIvix6LHinVzYASPmrVYLVSS2kOa85Bv
HNHvw056F2YDfWQ2IgvmfCxJXQMoM8Gktrh6f0t03AzimHMEdChfb4gWBwKn
nyIApd/FDlIxPt0mVtPeiQCAZMhIU7AxqW7YV0aBnN/QLzZ6VMIFGH9IkWuS
a5IvxOKooDSCJSsBSeTNkGr5seqCY2LOLORtAWIYdr8wF8tFEAmFUdWXA1FU
CXRiBTGnsFoij8BO0qpcPSC83/2DBzTsiCASO4uwWw+OBs86NsNOGKtZB8Bl
S6s+LFbumtaHsoE55vgfyg/5zonjekgPgJ2T7lSgz4ymXuSbjUhQKEtWyV2+
gFXe5CQviNTrZRwVOpH+O057m7BOgX+IrSUxzJa5EmNhyIbbdDUydzxe1/k2
K4d2pHtSDfMa70lR37LdqsWB0W5fFTc3uRg/SO9Zb3hh86KqN4aBRWLFNZod
2zqD6wPosYYJNv5Mk7pFVdn+Yt4D9qUK7CU5h3bQbnDZH/jvvwMuB0A2P393
yZTFPYLXe8fT5I6JWWGEiV/mm6RYOFXCUwMRr+GWwSExJfEkIACeu7POiixG
OpmuWA9xnKGOQ/MCbzdDwP8DGVuiy2nDxiOc/UqsMPDws/YjUXSK+1oX6UZn
AuF3CKinco0cTu9dn2iOQ0tHCJIua0EgpUd6Y0gfAQK0IgUFFBNj0A9FmZ6c
BtsJlMh/xkywqMtgze6qrEskzHgaDyTjoNG5QjsvDCGqMKpLWc4fmbCTnY5t
Hmi8WxZEmGpjZquLzTbxd80YKEiqsFYH2O8Q94umHRDeVIutQ3pqDrP3+/4g
Yjr8iGEjZ+ziZ1alXbXsCVZmGEaXsaFlGGmSZfQtiFXAHw6SCXMSLEfNNmgz
gM1FYj4oxDv6IgV6wPqlsd8nbAhPxXpP4nn4HunUq/g/jvbHx3Gao9BD043i
l/ygGZccRixn5OEJA2GPnJCSioL1P8C/OEnqu5so7vhHbic6LsRi/8hoOByO
ul7Qf3g8/vGP8WX8d/oKfhgO/04/wgdzrPyVfZP/F/8jfQDaxe//Xfz7+OMo
+Pcxfhd/9G8+h6ee06drmY0HciPG4SSd++9abfNXt1qPFo1/BpndP7HxIPyj
X0/iZ0Jr2Nn+zfPXDvBt9bhO81VSFSUTISU5lsw8BwG1uFl9s5Oi57naAaXm
qiRKsxayV9RO70LzHBIHJNYsARbkNLXapZE8Auo0IHM4CbogRhZ4BUiKjfQu
h9yHrNaXNdDPzLkq+Q6ySt8pDDXloFm5uQXMfbWtcPFISIMbrbY48SY721mD
HQmDMiqjSBYNOouqjBhQooDGIhNRjgIqpJr4UX8sSW4BiuIsnQz1uhk0wD6d
wOHX4dSJc4lBE/cBeTDzTATLwku5Da83ezYWIKmy21GfqrezOkdhZNBgI6yA
IFZZyznbmdUNM1ID6NPudsDQGXsAkU/CuIPAGpQ4uo/bVqmnGcAQwrvhYhAT
EprSgNQL9DrNAjK8MEnnfzFIDHgd2WFIA0Eo/dMWhQexOcjAwF5XDcCZZeEW
84KE19CC5lQbp2U9gY2DCI5MAGYwGPmAilNPeVhG0VtawRKk6DKj4T2iu5Aj
rzI+PlKflgB8hRTEPKkL9FFkGaJfy+njYkcYUsPZw5A/2SASc0JPG5jfd6hV
T71hdC4xpdJOrGQp4UMReTZxJc70TaeDatfQOwTQsQlrfViUSVazra5paauN
/18p6XaVYKBjxGdKfg4eohWk4tyCCGOixGRV9oB2nkp0O1P0UVm14mJcMMwg
gvUsSrb/O8KjgTKo7d+syhpwFofroddZZNEky90MCIg+CyZkZbSSPEAbgcb2
yTqSG6hKYhgNheJNvV0uk0qcGt4qVG/yNS9o87BW3Tz5kLNdtxEeI7ZgVp34
2Nmi6yYr2jaYRZ5Uqy4FhLCPgosaF07MukYHS6oKXV4neA31ytSBOyFYAYed
LHK8A/DQKNpFR1TuaRta/gP/jcE/pU08QEBQRtEeD2TwhkhVrS4AO4BRG1Tf
6uNeEeTxZBTt81hNj0Ti/RF2Vd3+h1F08CUr6jLBHo5A34KV7OIPB/DWOkcW
VZMIgGFCiAAu1Ekv5yCIRWrjh0SvHQUApyuOCgaL4xg487gwjhNgAKUVvg3j
KdnR04Aw+tBxM3strm49mMILmozAKhGOCVTG5fewSpZyN4z7z7yEpAd1bVVW
HVlHsvvz2hmeAufsC0/8C8tAiHYhSxE8OV2AtLaiWNzFA2m7qqa4SCXDR4RR
EZe4RbMxqn3DLF+S3urBxPImXB6J50iaBDVCp5U61xE1W3jdkLsQX14rvriH
aiOPDQmdxKrvCC5T7TXHZCD0nPj2SWyitReNSYXFi2+vTUVhUeZYS89ZmSIm
UWCF9va0BIMsbhYt4iTfKo2yoQy8lmYsoNnwGkYh06e1S2T5elE+OKvd0yMI
c1RvZv4LsHM2w3bcNhIpdZSoexQf0dcVuSlCKVzrWbFK1GzHsv0VKg+IcMK2
Fgsd1xgkAzPRgO0XJFYB+LerDKP+B0SE0G00RPIBT7JqwwJfYWIBJdQuvgO9
KkFJG92NXfGmLIgVSyBmooDELm4drVWzUqSEHZZcdMAdRBWylwvTnZfbldzc
pwPDybx1leeIpLBlwedPjlc6sV68ZawptG2S+Lw5nS4UsGfaFRitm+FL+KpE
p5mPkHmNCqgLTyIqx/JYS1DEW06+/8A87yJ06e5v4u2aFcINxut0abli8OkK
TiUEEVcrnMiCgvFuy3tGHZUpJCYKzuEWlBHQmG8ltJy81x30KV4TmyuI8Cz1
qpBpxLALFWpE7iFzLwdAlGwsp70V1l4YGGHVBstCLMUTOWc5ImkAA8TkDKCY
5XrmagNokH7mjjiyUgFDvBiSiCJw75HR2gCtWY4BuqJLjKI35UaAYzg16xky
MBl2EQGEo7pQM0f5rEdpROLc62S1BaEoyQCshI/Ie8IdoIj2Y52TdzoI/qfz
N74hMcshnxLcUo2Sri9KBXjgQ0A/o2WTFWOepDk5QZGp3YCSgsadNQbkkRGA
xDpcQ6qTOpXjv+CcwYQc1rHRs/O69YD9XHTpyT4IBBth5rkUSS1EE9FKc/Gu
HeGta0RzsHi/Rjxh2+xktPqeSDXhaSHGI1G3UOgrVuLifUCPxD02ZDnAELkQ
Q51JFiV2po03KLUgKLfeIfgtqDrWNWcEN4pl8Qqd/wXfU10X38+zKF/U+T3x
TtlIlzMUTumUx0LW0BhUjWa0Mg6PlvMLuDqGg/vtMnH3v2rIlNE/IhesLb4V
xhl1Yt4nBRH6IVpKijITrEw2m3y5ZjYfRJY1Aowi9mE/Ae4gjpqhZQ+bCNeA
Imf8LRlQ8LdGE+nshKKNmDWQ1ZjI6H4AbyKxz1HEdAs/ZR/WaQVaLntX+pZs
kTxXo3UuiMjzIDMXQ8AvcX3OWdHSH1/gltXs4sYrt4uMzZsMTXhyPmf9G93t
qDSxRBOqkmlV1qGq6WIEiNdo5AEaUwfofLW+KorLYXay6VRcZKmvSrEorbfV
usRYNZSz2FKoBkKWBHVu3RZgXcVh0Skpb8Hi4Y0lHO4dEpI/EQOT0Ygjs3rL
8Rb3T9gRLbEhiVlMiDVyc1JoO6OXxSaFkgRehVzjj3Qrwd0VJ0ltBOa2aoau
dgCL2/qWHCfz7cLlFTgfpnOuiAKJ74rrWINV3UK6xBmxyJPDM/EmipBVvnEG
ijqgVmSSQ1BJLLSuBVeyAUgiSacvOqgYQE2HBNIAGsPjSUEcEbzBYC2b6EGq
HYsr5KR24VxrWBsn0kkCyg7GMNtI6YA4baqHx6lSW0Yxy/TKKHLEvN6wNSzw
U/uIDBfooQB//GLzKgMvQpOTxD3eOt6lsu6Iv+1HHM6zWJBFQNGGJMNBIMWy
ibC9PAoubgYSN9YIz7KsOU8K8ufC1rNgHaPoB3QGxuKmfeD3QMNcbbZNS0MH
JaZXRH1xmzByPobG0qVfSAoapiYVqy3yM6JiCIW25Uwu3QIzVCtyhWvqWkeg
Ly14mVc3uQtEMbIwSB5DJ9XWzphNgdUm2WMjdC1TSLbtjYPg2ltcj4pmLO1j
931z2wrRDcMUroJIh1+f/bxG8TD9hKy14VKQqCHaksbEsh30SqMt8TsUka+C
iEuJCsruQHEjSzcuEwBsvhEguHEl5oIMCnp3YGmkQldFLREXoAFiaGh8EWbi
4fBnQT7ApdFLI2I7AXY1MvlK7zBiAYijuitgchi7QEmi6gAVCHxXAgI9GXSK
Y5hM3Jb5kmRSwEPAEOP1rHN+HY03a8AWEjKwtEEj4QFmfCFyr1fbA59Lr+4z
4UJmXEo4AhzVW5JE7AGSi8+sFPUN/5TbUuux6K2kzkwJALs+JsodNK4IbSMp
kRscpC7+GcEM1BK/yudzyq0mBHGWI5NaOYhQYtYMGrwfBoSNaEgzAKrzkvoN
8ykDIstSelsWIkrqIxLbLVdmeI+KbWLyzhCKaVlT1QW8rHOgNgO+18jpbji2
7in3ZIMvNNLEXp/+g5gl2KchaYqoIDmHDqOjJCtRqhyFZa/l5pNqjNqHB0KY
JctUj7lB0criJELl0vNJwVfyW+fmBx1BPd3rIv2g5mZeGyADgGs31vxpci4D
QDWMO8x3euSeB6RIY9CJIWUwk4jLPNIKxZCCAe0PlOKmfRofmvjkWvZkmZP+
KJwGVu1pfvdc7YnIFa7prjf5Cl5ISdyQz+196Jrqp+5uLWwL8PCGcqDWGM2X
5YY/hXdzFF0ZsxYIrfNAlDcDE+e7JnvfqPp5fR33WJZvmPKHbnwx+7HhH2gK
RVY7o/MgaqA9QX5bNxfosN7xJVJbOGEFVos5EXlSbxo2b1qty8PG0iWy9uuY
0811GaiihVN76tacObqYP8IOaospSHhcDJvHJbU7BTLjHcCG7oSHdNQj6st3
A0fsE3dZBSsltZD9E5qshAi1rdCGTUFszlymtleXqFRaDw9ICFlxV2QsU+mz
TCBVasF141tCwXg6zRpmDG9wGdZ98PqGNrWGAnQx93uQiwqUCchn0diDHgXa
2QdmhbHmOTiZoyHNjjqYOCu0LkEnWfCIZPUspfCBRNZU29UKbzIagem1SAlY
OzfR+jPlQAYu/6XDgV9sgJKca3Au22dZDqUA3jsMTqEYFHZSsRoXWu2KVhEO
2gRL1pLrHWRDSQpBJGaelXEWh7Kr9/a8QOMXK8F43Zi7zShhqnbKK52gzXqK
eu4uoSlfrzShsmQ2GjXIJee2iMqnT/1GfIgPvaRIW4y2Utt2I6sq0L7nakFw
wdN4TUE8YLzHGAbYlLhz9KqyTcQ7/md5wzWmbKOL0bf4/GM8XiYNtmMDWYKT
V8ezqpVFU71qnByLk2w9aCn/j+XCemUODqLOl+j0YjWBLTRYesAYhrk0THSx
YtGTvGjmZrdLxZRsY3an/CJciDtpb+8SnHboGnVxnzU9qiUINMCB14G1EtaY
uFxR4J+lEK809srq5ViMK1gAhWmExOV53Z1M4qI3uNAVuUeDWHPDgh6CjKNZ
qxBNkPrw2Yx4tpT56FzJLbaGBc1On4x9IK/ITip7tIzQM3V4uXxqDPgx3M8J
Fso8BxoGLgllng1q/gpG+AZCps8IVk9MU1Lxb3r+11Y1VG6kGEGS6GckjeH6
SdChwgGwHqfNSgZFuP3IWE4Cra8Rm/0o0FA4Lyl/sMkdRZJkQYBoqXD7AIyW
bkYMU2ZNYtUAMQAfIye6L+IQ+NFP26ty+dcre4JBhQeSjTG4C3+Bhfqb/mUa
ToQ79wculsQGeoTnRkKJxMqCrv5Gsy5+fdZKoGim7bkMjWaelrpUC47CjUll
oSIIbHEBffwr0q3hdsFjveuTa6xLhVQQqXVnNsh2OUOX5/XXF+++Pfkav/v2
GhjUV/H1xbu/vLsG4MNyRKXrJg2BFX+EfmlBxpR8/Sx2aKYb2RSca9eWRQKB
BHV7hG2Ht4PXcxmu50tCOfXV3y/+ir1Ywq4GW/UUctoaizSUNtwIspLpqi9e
qiXc8PK6CXUXNEe4IPRUeYjwHU9eXyCFDmNF+I6p15kNnSZWC6FOsaN07yhD
a1FQ3G2Jun0QJEAiF6XHyTMqXodpFLKRJswd83h0602wySzd78jNl0o5Jkn5
sUIFMkkDi6TuV2dcYiA904P1Y+zMS3EBDC5//ttnw/xAH2gHw8IXf/6+F/cH
Z/B/P/kJEptKOLCZYhoiakYasNAu6e7fqwEVKzDEZzEqURxdXZDNzaYjAEGB
h9AeIrEozghqDufXZ0ofMRyOA1JDgtkUcF38MuFgUP8uSO2PRAFxl4MDfOOe
Wh8ohK1MNzkG/rjkvAMqyYQyMtGbKr+vCgAaae3t8Fo8HBINfcS0+D7vydjx
SFpoMx8U355T/IaUOGOHGPmFkuBkQnMo+Se9ETjh4NWacWYLjAid1KvcmTUj
iT5wGdW1MBRkCpjl4pKMfnDRr7yU4N+lkqnw9/foVqc/YYQeMoYTIFODmOjq
CV70fvz1N9988y39+PsKv6ro50v4eNmHl85/WQ/RO1/1OekG8YGIRqDIolbq
wlpabECl+JQiuZyznurwKHkufKW0oJINOugiIeaLfL4h+ZkgSSZWgCWIF3HT
HPLZ9ZS2TlXPGJr6xv6B2ukXLlFpVoXRUJ1rjMje7oyhKkBzTYC5C4oLJAZW
sABl0f2EkQySZCRI2sinnbub1SrE0ZlrWwOfIO/hYym35gphVkiUeBck5dqz
rHFCnM/wZTF14cW69phmH8FqCxuNX8QtMvVclY3rlv9SoEtSYkFYXNxQ0Ylk
o5qv2Wv+y7pAVyiiKxWWQ+++Eq8p1ZfDPFWK+lGtNcgZx2iZEE4UIYln5MPg
eGlGxltjzVUyUl0Y41AT4B9WcKljJVqPpVP1WFzqu/AXYAQJIDJlVVwx++kx
L/wmvt4/ONq77uv1CAoraf46pyyq9K12SM1hZOrCyXry7/E/Gn+FP0UfXXYe
pQaanX8McvxcEiFi12uJepeEQhoEM4V93iHmsbo/MKlXfrqq0r9cAO4hQD7G
L+uN/vXxP3M74YO8khg+npEo830ORHk4/LaV6IjP6S3AvzzC63Ya/7qGlEGE
AH9kAoyHGz8ySNe/j4//9cggXw+HVyTWyFKGbiUy+0ezqs+t5OSvXEnH5K1B
PDA/GiB3rOTkkT8+Bl99tL+2BvlzUNXrp/+8Qf62lQAUXmFk4G2eeVxrw+TL
ka1ryP9KyEYn7pcyjL8U2VqvtVfypXhy8thfH4NvPgZ/RE+QvS+nJ0HGsuNJ
mrd8ruHDcw1/4KIiKIESK26xqaSrMldHAnPDZU9eCszO5bz7eLsq/mmbi+p7
woocyaZkEJRfNRNU1DbWcHzBQG+VxtKB0exBDJ4cwSRjeP8SkexrMxVK664W
c0ncX7MSWi5pEtwqjCpcYI7+mozINjlSaiVmnytvRaNg8lbmU2lrLQFRbIL5
g8IFfnqMt4GXt4CaXtg0SnaNAsoyT1bE55vWcNYGXOgdc3kUXdBZQKGaaOdV
hwILHezkl+OgowT5c3eM4mJJCWnzjdjuFuiI1EhJkeHuMVOJ7WBR0pQTEyku
r6KsCyGlNCaxCnI8J1keu1aN1rYZl0GqCpCKVyShrTjz8i5ZbE01tmZ+16CR
CYSGZYw1xfIe7D6JHg1epNTqQP53lTcxJfvstZRhPTxGIfAFfXN3INVG9vZ2
4UtYMczfxhkxXaMRBq22GGqPCZzLZEVBHkGup3vpedNmh3Eu7Lzi/GQ7XIyB
xWWFhUFh+9V2rYk1xlM64rRQSe9paeBi2abMLxRt/2lbALRxgbR33pvSFC6U
RXEk79EZzZFHGSg+DYMYnrDLkjGlScj1xFK4vWYX7154NTzI7nE+4VJ1ZzGr
t1cXzcqMff/qKBo5hdO94VIl4VnCpeV6wzH0xareYqRwwTldfglUAUA8TxQf
1YKhc5NT1czu1YUQcqUP1M5IKceAecWa5gdYST1bDy5Oi0RLDqqe6g9tloeI
k5sEI00BTxbqnzNUSjEKLljB/Q80r673srzqY6w6XPi6FdcgaLIolgWbccWI
jAMUS2r5AtdYFRymT0JyMIRjpaZl1CokVGfKDlzvXfnrBl/nVUdOhxl/MvbX
25bw9XSrMCRfARmquduVespn24ICy5tWHbbGBt7MKNu6405mQJN4Z+1SFLJv
qXWg5IZu1iTeeWn03B9XLrFkp4H1dCXxEsaTQbxzFsQO029WX25mjyA63Raz
Akj3jjHrNatsil0Pv2bDXudTvlhojhteubAwCsdnU6PrGbApIzWI4VEO5XQa
nCWEteiq66Dk5pLqweYcxkynNHCmNqkysSzvcqXFZjzuvoHuaX7ELHbjL1r7
PXfF4MboheGIJY0Op5g/FMWWZUUrjc7e/diZLbiW8I6nAcp5c8gRNYOS5SNE
R1tITq0KYQS5q+Dg4BaUfMDtyfsU38bFU73gsBNm+u8Q2Mg9WXOQHUaxousO
zY5x/FX8PZPx3vf9eF7ki+xEqbezf3Smb/paX0FZqqd90+yWxlnP2Ixdx70z
Ny+Z7avipliJ+dOZjY25GM0cJdv14dit3bgtD2rkCQr3REXxankLnqt76gq2
UIr7uiFXBBn/QUMRER/TUvsj8NfP66gTDAND+S5eOqD02FDTDzwO1qat4dRy
UgQtjaYJ4OSedNClZyUyAcVG9g3QsK3QcTH8zYtfsKYQW/bcocUORs3SCK6a
jPiZFOgaOSb0srkB7NnBVXoHNn7eHgHVdslTDjbLI3mbcnY4u3GbbgKwd2Of
BbuDuSGzDPhI19+qnzuy5kUJMkQ7Yc3EBsmhgFTpTtnCJuatVrUTdcAoHFg5
ruBIOql43IKZuYqjxuvsYWufPcbP/JKn200z664RDtRxvlW+Bu2mJiy/r5I1
l4uwthN2SFqa5lENXnqsPEa4cl/+V3zQTv0MEUBB8Yr2Rbqyu/KBU00xj3zc
D7wNVIIRJSmnyquDvJbvfT1pevoh2JIjhwF9kgtiMK7luQ/L2StVitxBC32l
w85AOa4WRe6zIRvnGKyCzkBvfQrCxsa7qax/6612FHDRahZODfkGEL8qcmWs
jk34TidPoaOrR/FoBRfZgK5EmpnoJnRyT72jNiIHMSdt6m0xV4i3BIp2ogd2
jdzYTX3PTjzJwDYB1OU6QcOG9wph6SIM71faF6rULY1bYjV1xX9CtSRxmQDO
uqNUT1MNXdn7oObv3pD9TdfdjrxrykZn7qh7iRyBDBeGrbz8Ekie8Wvw4U7d
69h/ch0/D+Lv/6q1SO0nc++eugCW68k1U/eV9nt4dJ53dju+Bofzsvs1+x8f
GcxV+GzGhDX7GhDCcWBW08nPCT1Bpq+LJ+lxeEJfq5NwGUI1xtjwIG90Uz4W
BhJsV4viQ95COYpfu5eQH7PgiIKAKYBxsSCyL4qnE4XZSxUspYfG3f7j/qYn
XTSP+5zEQ+M8Ti2XU5fTqeVyUguxupw6fE7W62ScTh8fdzn9FTsKPtNahg33
UIfLSRZqHAFf4nTi2BN9qT+IcWhrc//obulnHAFnPbPC/k+h+T/43DnK151r
GcYfPZngHX2J3+msZ5xIn18LzN3hdWr/s66Vj1/uUWiN4h+xHp9glD83usn8
FDf+fdEof+NahoGP5RGUi/8rY52usP+T2VHc/vxvgXV/1Vq+DsD7+LD/2lj3
pY6sp6lU25NFDO5v9WQ1DCcdrqz/H5j5ox+ZI3d69wYNkSIMPUNbszM0WxXD
9V6kLRqrNqir20UWUSlL7Go5CCzaKCmI9BMI6WRKDyzrnAcQ5HV0GM9FWplT
4eHCmcd5LLteLSSrrgcehUuQpJRXlrGZE1f4ziYlvFYaGto6sTmNESFrX5Jf
U2c6ehKV0o3XNdNpm72KlfOw2ZyqQeRz5guTf6dGSbXN+VCilVgZR+1l4iIK
qhooTkdXTgGnpGLto+iq1KxvFgWpAivAjK4aF3Tn7drGR8FMxmwkYwZlamgv
QRfpQFYleykpg8GoZJMhs0kXmNpZoAj+SDDdt3zxRsy2T4mBysGsjA8/Xl7E
Vw+Arr8M4ncofr4RSRhbviSbW0rMlec4w1ZqvlNIGAe/WxF6wHVjMcnTlLi+
A9qUdYvfTkrXCF6VvK8BEa/jOr3Nl5S6vcAuNZR9toZ1xT32klJvA1wL+rTw
DKsS2w8kWF1W3KtBzULZyyD0iXqk41UgNfM6co0VJuGPWorbpboITNMQkirK
CRAvrkDxwKu019xMfk/FKxKtohK2olhiSKRbiFXWkdRg8g2hHhwIr8GdpUrq
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
QnzVrM2EjGkA4jBO5aqVa7VLzDO7zLGfmiVunUE4VFydOZnTi9RqEob6VPkN
+eOdu5YdPrUvDEd2SqnliXkSVBYYLyfyKfztPRodyPyclSzDCgOomosdRZcJ
U4bWT7gPVPUWXpnE5l95JS4qH7gcrIFkVFrED1dUyblzYCkQPEBqymrG785e
M27sT4/Q5On1EUSOf3Wf0jtumUGipDGuufyMdafvt+Wv7QwqJ3vWg+etPhnX
ijOmP/pU61+NMEHZl8zs6hnpSAZXwsWcEDeUhlZZSUeJdNvZGhe1IgqZoorV
esstksTvWMwoYk4N04fo3mcSmVA4vgZsRJp3EBSYDRJeP+lMGO5Aqrj16qpI
EpR6oNYAyL9Mud4eF2zrR1LiUDoQ2EZZDXce117Ae2woJ9HeoG0vbRjDJGvn
gkarpmgx+ChWoKKntjXViuZ+3DyBykSWyUiGhKvRKi0i2YIe7oqrVvBWqAgd
faEl9eRKSxgg8e0PIOthvgvGxmgwpwPFIyuxRdOQcPqcy8b02uUqCdPK7Pvk
7jSZZHIcgzZLtm+1w5fc9Q3QqZXO9gj+chzi90iyyHnQ3VLXtx+lvJCuRrNi
9xe1vt1klLIuXLvaAVt9KRPD1yq2Pe5aLXd7dX+E34I6tDCFxzxd6K1vH2pC
NfQ3lTf4sc/TynSudF1r8LpR7DiJtHitNai9Nd0c2mPVuvlWentYfD8JDJAU
wKltAUyR9UirhASki8u7BG0lnlgIt5qlGVrttIKa4bIAAnGz3k6hsZ++WDW1
uVcH/VP9Yr2vVHu6FSua2XktGx0zWIWVohNuGjxn12Wl0cqyoG6sIGFjCTvg
GbULC2zYc3RxkQZeOsqt4FiHnehgjMD+yPyCzZMLb5d+rL54UMsOw5watTfU
IN6RR0pnzFY7rRUok+2Es92gdLij5MYZ+4KpDVZLr3cyTnB7Fb+0yCwNLqRt
c9vZdF1NHhK+iBSAaI8PcdlzcTzSnJV5gva6QF6QSAtXBYkaO82Md0USOWoS
dkukdkU8GMuAC8pURFsfRwBwZycST/Lb5K4oyQDXrLTp2zY027SQB1E7l5oS
IOhh4Zw337gz4gIjBRVwckm0S5K8m1XPh8rjTUWOluXXeovnzar6eWZ7bxNH
e2yOZbJaob/kFUe2sm9VTPOfb0FN99FFvnrEX0snZdcKAi0h6MG3pSkH3ZyC
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
y8TL8v8C7Je5NbYuAQA=

-->

</rfc>
