<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.21 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC6347 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6347.xml">
<!ENTITY RFC8366 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8366.xml">
<!ENTITY RFC8995 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8995.xml">
<!ENTITY I-D.ietf-ace-coap-est SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ace-coap-est.xml">
<!ENTITY I-D.ietf-anima-constrained-voucher SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-anima-constrained-voucher.xml">
<!ENTITY RFC8949 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml">
<!ENTITY RFC8990 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8990.xml">
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC6763 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6763.xml">
<!ENTITY I-D.richardson-anima-state-for-joinrouter SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.richardson-anima-state-for-joinrouter.xml">
<!ENTITY I-D.ietf-6tisch-enrollment-enhanced-beacon SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-6tisch-enrollment-enhanced-beacon.xml">
<!ENTITY RFC6690 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6690.xml">
<!ENTITY RFC7030 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7030.xml">
<!ENTITY RFC7102 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7102.xml">
<!ENTITY RFC7228 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7228.xml">
<!ENTITY I-D.kumar-dice-dtls-relay SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.kumar-dice-dtls-relay.xml">
<!ENTITY RFC4944 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4944.xml">
<!ENTITY RFC3610 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3610.xml">
<!ENTITY RFC7252 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7252.xml">
<!ENTITY RFC6775 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6775.xml">
<!ENTITY RFC8974 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8974.xml">
<!ENTITY RFC6550 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6550.xml">
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-anima-constrained-join-proxy-10" category="std" consensus="true">
  <front>
    <title abbrev="Join Proxy">Constrained Join Proxy for Bootstrapping Protocols</title>

    <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@bbhmail.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="2022" month="April" day="14"/>

    <area>Internet</area>
    <workgroup>anima Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document extends the work of Bootstrapping Remote Secure Key
Infrastructures (BRSKI) by replacing the Circuit-proxy between
Pledge and Registrar by a stateless/stateful constrained Join
Proxy. The constrained Join Proxy is a mesh neighbor of the
Pledge and can relay a DTLS session originating from a Pledge with only link-local
addresses to a Registrar which is not a mesh neighbor of the
Pledge.</t>

<t>This document defines a protocol to securely assign a Pledge to a domain, represented by a Registrar, using an intermediary node between Pledge and Registrar. This intermediary node is known as a “constrained Join Proxy”. An enrolled Pledge can act as a constrained Join Proxy.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>The Bootstrapping Remote Secure Key Infrastructure (BRSKI) protocol described in <xref target="RFC8995"/>
provides a solution for a secure zero-touch (automated) bootstrap of new (unconfigured) devices.
In the context of BRSKI, new devices, called “Pledges”, are equipped with a factory-installed Initial Device Identifier (IDevID) (see <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="RFC8366"/> vouchers to securely enroll devices. A Registrar provides the security anchor of the network to which a Pledge enrolls. In this document, BRSKI is extended such that a Pledge connects to “Registrars” via a constrained Join Proxy. In particular, the underlying IP network is assumed to be a mesh newtork as described in <xref target="RFC4944"/>, although other IP-over-foo networks are not excluded.</t>

<t>A complete specification of the terminology is pointed at in <xref target="Terminology"/>.</t>

<t>The specified solutions in <xref target="RFC8995"/> and <xref target="RFC7030"/> are based on POST or GET requests to the EST resources (/cacerts, /simpleenroll, /simplereenroll, /serverkeygen, and /csrattrs), and the brski resources (/requestvoucher, /voucher_status, and /enrollstatus). These requests use https and may be too large in terms of code space or bandwidth required for constrained devices.
Constrained devices which may be part of constrained networks <xref target="RFC7228"/>, typically implement the IPv6 over Low-Power Wireless personal Area Networks (6LoWPAN) <xref target="RFC4944"/> and Constrained Application Protocol (CoAP) <xref target="RFC7252"/>.</t>

<t>CoAP can be run with the Datagram Transport Layer Security (DTLS) <xref target="RFC6347"/> as a security protocol for authenticity and confidentiality of the messages.
This is known as the “coaps” scheme.
A constrained version of EST, using Coap and DTLS, is described in <xref target="I-D.ietf-ace-coap-est"/>. The <xref target="I-D.ietf-anima-constrained-voucher"/> extends <xref target="I-D.ietf-ace-coap-est"/> with BRSKI artifacts such as voucher, request voucher, and the protocol extensions for constrained Pledges.</t>

<t>DTLS is a client-server protocol relying on the underlying IP layer to perform the routing between the DTLS Client and the DTLS Server.
However, the Pledge will not be IP routable over the mesh network
until it is authenticated to the mesh network. A new Pledge can only
initially use a link-local IPv6 address to communicate with a
mesh neighbor <xref target="RFC6775"></xref> until it receives the necessary network
configuration parameters. The Pledge receives these configuration
parameters from the Registrar. When the Registrar is not a direct
neighbor of the Registrar but several hops away, the Pledge
discovers a neighbor constrained Join Proxy, which transmits the DTLS
protected request coming from the Pledge
to the Registrar. The constrained Join Proxy must be enrolled
previously such that the
message from constrained Join Proxy to Registrar can be routed over
one or more hops.</t>

<t>During enrollment, a DTLS connection is required between Pledge and Registrar.</t>

<t>Once a Pledge is enrolled, it can act as constrained Join Proxy between other Pledges and the enrolling Registrar.</t>

<t>This document specifies a new form of constrained Join Proxy and protocol to act as intermediary between Pledge and Registrar to relay DTLS messages between Pledge and Registrar. Two modes of the constrained Join Proxy are specified:</t>

<figure><artwork><![CDATA[
1 A stateful Join Proxy that locally stores IP addresses
  during the connection.
2 A stateless Join Proxy that where the connection state
 is stored in the messages.
]]></artwork></figure>

<t>This document is very much inspired by text published earlier in <xref target="I-D.kumar-dice-dtls-relay"/>.
<xref target="I-D.richardson-anima-state-for-joinrouter"/> outlined the various options for building a constrained Join Proxy.
<xref target="RFC8995"/> adopted only the Circuit Proxy method (1), leaving the other methods as future work.</t>

<t>The stateful and stateless modes differ in the way that they store
the state required to forward the return packet to the pledge.
Similar to the difference between storing and non_storing Modes of
Operations (MOP) in RPL <xref target="RFC6550"/>. In the stateful method, the
return forward state is stored in the join proxy.  In the stateless
method, the return forward state is stored in the network.</t>

</section>
<section anchor="Terminology" title="Terminology">

<t>The following terms are defined in <xref target="RFC8366"/>, and are used
identically as in that document: artifact, imprint, domain, Join
Registrar/Coordinator (JRC), Pledge, and Voucher.</t>

<t>In this document, the term “Registrar” is used throughout instead of “Join
Registrar/Coordinator (JRC)”.</t>

<t>The term “installation network” refers to all devices in the installation and the network connections between them. The term “installation IP_address” refers to an address out of the set of addresses which are routable over the whole installation network.</t>

<t>The “Constrained Join Proxy” enables a pledge that is multiple hops away from the Registrar, to securely execute the BRSKI protocol <xref target="RFC8995"/> over a secure channel.</t>

<t>The term “join Proxy” is used interchangeably with the term “constrained Join Proxy” throughout this document.</t>

</section>
<section anchor="reqlang" title="Requirements Language">

<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.</t>

</section>
<section anchor="constrained-join-proxy-functionality" title="constrained Join Proxy functionality">

<t>As depicted in the <xref target="fig-net"/>, the Pledge (P), in a Low-Power and Lossy Network (LLN) mesh
 <xref target="RFC7102"/> can be more than one hop away from the Registrar (R) and not yet authenticated into the network.</t>

<t>In this situation, the Pledge can only communicate one-hop to its nearest neighbor, the constrained Join Proxy (J) using their link-local  IPv6 addresses.
However, the Pledge (P) needs to communicate with end-to-end security with a Registrar to authenticate and get the relevant system/network parameters.
If the Pledge (P), knowing the IP-address of the Registrar, initiates a DTLS connection to the Registrar, then the packets are dropped at the constrained Join Proxy (J) since the Pledge (P) is not yet admitted to the network or there is no IP routability to Pledge (P) for any returned messages from the Registrar.</t>

<figure title="multi-hop enrollment." align="left" anchor="fig-net"><artwork><![CDATA[
          ++++ multi-hop
          |R |---- mesh  +--+        +--+
          |  |    \      |J |........|P |
          ++++     \-----|  |        |  |
                         +--+        +--+
       Registrar       Join Proxy   Pledge


]]></artwork></figure>

<t>Without routing the Pledge (P) cannot establish a secure connection to the Registrar (R) over multiple hops in the network.</t>

<t>Furthermore, the Pledge (P) cannot discover the IP address of the Registrar (R) over multiple hops to initiate a DTLS connection and perform authentication.</t>

<t>To overcome the problems with non-routability of DTLS packets and/or discovery of the destination address of the Registrar, the constrained Join Proxy is introduced.
This constrained Join Proxy functionality is configured into all authenticated devices in the network which may act as a constrained Join Proxy for Pledges.
The constrained Join Proxy allows for routing of the packets from the Pledge using IP routing to the intended Registrar. An authenticated constrained Join Proxy can discover the routable IP address of the Registrar over multiple hops.
The following <xref target="jr-spec"/> specifies the two constrained Join Proxy modes. A comparison is presented in <xref target="jr-comp"/>.</t>

<t>When a mesh network is set up, it consists of a Registrar and a set of connected pledges. No constrained Join Proxies are present. The wanted end-state is a network with a Registrar and a set of enrolled devices. Some of these enrolled devices can act as constrained Join Proxies. Pledges can only employ link-local communication untill they are enrolled. A Pledge will regularly try to discover a constrained Join Proxy or a Registrar with link-local discovery requests. The Pledges which are neigbors of the Registrar will discover the Registrar and be enrolled following the BRSKI protocol. An enrolled device can act as constrained Join Proxy. The Pledges which are not a neighbor of the Registrar will eventually discover a constrained Join Proxy and follow the BRSKI protocol to be enrolled. While this goes on, more and more constrained Join Proxies with a larger hop distance to the Registrar will emerge. The network should be configured such that at the end of the enrollment process, all pledges have discovered a neigboring constrained Join Proxy or the Registrar, and all “legal” Pledges are enrolled.</t>

</section>
<section anchor="jr-spec" title="constrained Join Proxy specification">

<t>A Join Proxy can operate in two modes:</t>

<t><list style="symbols">
  <t>Stateful mode</t>
  <t>Stateless mode</t>
</list></t>

<t>A Join Proxy MAY implement both. A mechanism to switch between modes is out of scope of this document. It is recommended that a Join Proxy uses only one of these modes at any given moment during an installation lifetime.</t>

<section anchor="stateful-join-proxy" title="Stateful Join Proxy">

<t>In stateful mode, the Join Proxy forwards the DTLS messages to the Registrar.</t>

<t>Assume that the Pledge does not know the IP address of the Registrar it needs to contact.
The Join Proxy has been enrolled via the Registrar and learns the IP address and port of the Registrar, for example by using the discovery mechanism described in <xref target="jr-disc"/>. The Pledge first discovers (see <xref target="jr-disc"/>) and selects the most appropriate Join Proxy.
(Discovery can also be based upon <xref target="RFC8995"/> section 4.1). For service discovery via DNS-SD <xref target="RFC6763"/>, this document specifies the service names in <xref target="dns-sd-spec"/>.
The Pledge initiates its request as if the Join Proxy is the intended Registrar. The Join Proxy receives the message at a discoverable join-port.
The Join Proxy constructs an IP packet by copying the DTLS payload from the message received from the Pledge, and provides source and destination addresses to forward the message to the intended Registrar.
The Join Proxy stores the 4-tuple array of the messages received from the Registrar and copies it back to the header of the message returned to the Pledge.</t>

<t>In <xref target="fig-statefull2"/> the various steps of the message flow are shown, with 5684 being the standard coaps port:</t>

<figure title="constrained stateful joining message flow with Registrar address known to Join Proxy." align="left" anchor="fig-statefull2"><artwork><![CDATA[
+------------+------------+-------------+--------------------------+
|   Pledge   | Join Proxy |  Registrar  |          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   |
|              :             :          |      :      |     :      |
+---------------------------------------+-------------+------------+
IP_P:p_P = Link-local IP address and port of Pledge (DTLS Client)
IP_R:5684 = Routable IP address and coaps port of Registrar
IP_Jl:p_Jl = Link-local IP address and join-port of Join Proxy
IP_Jr:p_Jr = Routable IP address and client port of Join Proxy
]]></artwork></figure>

</section>
<section anchor="stateless-join-proxy" title="Stateless Join Proxy">

<t>The stateless Join Proxy aims to minimize the requirements on the constrained Join Proxy device.
Stateless operation requires no memory in the Join Proxy device, but may also reduce the CPU impact as the device does not need to search through a state table.</t>

<t>If an untrusted Pledge that can only use link-local addressing wants to contact a trusted Registrar, and the Registrar is more than one hop away, it sends its DTLS messages to the Join Proxy.</t>

<t>When a Pledge attempts a DTLS connection to the Join Proxy, it uses its link-local IP address as its IP source address.
This message is transmitted one-hop to a neighboring (Join Proxy) node.
Under normal circumstances, this message would be dropped at the neighbor node since the Pledge is not yet IP routable or is not yet authenticated to send messages through the network.
However, if the neighbor device has the Join Proxy functionality enabled; it routes the DTLS message to its Registrar of choice.</t>

<t>The Join Proxy transforms the DTLS message to a JPY message which includes the DTLS data as payload, and sends the JPY message to the join-port of the Registrar.</t>

<t>The JPY message payload consists of two parts:</t>

<t><list style="symbols">
  <t>Header (H) field: consisting of the source link-local address and port of the Pledge (P), and</t>
  <t>Contents (C) field: containing the original DTLS payload.</t>
</list></t>

<t>On receiving the JPY message, the Registrar (or proxy) retrieves the two parts.</t>

<t>The Registrar transiently stores the Header field information.
The Registrar uses the Contents field to execute the Registrar functionality.
However, when the Registrar replies, it also extends its DTLS message with the header field in a JPY message and sends it back to the Join Proxy.
The Registrar SHOULD NOT assume that it can decode the Header Field, it should simply repeat it when responding.
The Header 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.</t>

<t>On receiving the JPY message, the Join Proxy retrieves the two parts.
It uses the Header field to route the DTLS message containing the DTLS payload retrieved from the Contents field to the Pledge.</t>

<t>In this scenario, both the Registrar and the Join Proxy use discoverable join-ports, for the Join Proxy this may be a default CoAP port.</t>

<t>The <xref target="fig-stateless"/> depicts the message flow diagram:</t>

<figure title="constrained stateless joining message flow." align="left" anchor="fig-stateless"><artwork><![CDATA[
+--------------+------------+---------------+-----------------------+
|    Pledge    | Join Proxy |    Registrar  |        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_Ra  |
|                          C(ClientHello)]  |           |           |
|                    <--JPY[H(IP_P:p_P),--  | IP_R:p_Ra |IP_Jr:p_Jr |
|                         C(ServerHello)]   |           |           |
|      <--ServerHello--                     | IP_Jl:p_Jl|IP_P:p_P   |
|              :                            |           |           |
|          [ DTLS messages ]                |     :     |    :      |
|              :                            |     :     |    :      |
|      --Finished-->                        | IP_P:p_P  |IP_Jr:p_Jr |
|                    --JPY[H(IP_P:p_P),-->  | IP_Jl:p_Jl|IP_R:p_Ra  |
|                          C(Finished)]     |           |           |
|                    <--JPY[H(IP_P:p_P),--  | IP_R:p_Ra |IP_Jr:p_Jr |
|                         C(Finished)]      |           |           |
|      <--Finished--                        | IP_Jl:p_Jl|IP_P:p_P   |
|              :                            |     :     |    :      |
+-------------------------------------------+-----------+-----------+
IP_P:p_P = Link-local IP address and port of the Pledge
IP_R:p_Ra = Routable IP address and join-port of Registrar
IP_Jl:p_Jl = Link-local IP address and join-port of Join Proxy
IP_Jr:p_Jr = Routable IP address and port of Join Proxy

JPY[H(),C()] = Join Proxy message with header H and content C

]]></artwork></figure>

</section>
<section anchor="stateless-message-structure" title="Stateless Message structure">

<t>The JPY message is constructed as a payload with media-type application/cbor</t>

<t>Header and Contents fields together are one CBOR array of 5 elements:</t>

<t><list style="numbers">
  <t>header field: containing a CBOR array <xref target="RFC8949"/> with the Pledge IPv6 Link Local address as a CBOR byte string, the Pledge’s UDP port number as a CBOR integer, the IP address family (IPv4/IPv6) as a CBOR integer, and the proxy’s ifindex or other identifier for the physical port as CBOR integer. The header field is not DTLS encrypted.</t>
  <t>Content field: containing the DTLS payload as a CBOR byte string.</t>
</list></t>

<t>The address family integer is defined in <xref target="family"/> with:</t>

<figure><artwork><![CDATA[
1   IP (IP version 4)               
2   IP6 (IP version 6)
]]></artwork></figure>

<t>The Join Proxy cannot decrypt the DTLS payload and has no knowledge of the transported media type.</t>

<figure title="CDDL representation of JPY message" align="left" anchor="fig-cddl"><artwork><![CDATA[
    JPY_message =
    [
       ip      : bstr,
       port    : int,
       family  : int,
       index   : int
       content : bstr
    ]

]]></artwork></figure>

<t>The contents are DTLS encrypted. In CBOR diagnostic notation the payload JPY[H(IP_P:p_P)], will look like:</t>

<figure><artwork><![CDATA[
      [h'IP_p', p_P, family, ident, h'DTLS-payload']
]]></artwork></figure>

<t>On reception by the Registrar, the Registrar MUST verify that the number of array elements is larger than or equal to 5, and reject the message when the number of array elements is smaller than 5.
After replacing the 5th “content” element with the DTLS payload of the response message and leaving all other array elements unchanged, the Registrar returns the response message.</t>

<t>Examples are shown in <xref target="examples"/>.</t>

<t>The header field is completely opaque to the receiver. A Registrar MUST copy the header and return it unmodified in the return message.</t>

</section>
</section>
<section anchor="jr-disc" title="Discovery">

<t>It is assumed that Join Proxy seamlessly provides a coaps connection between Pledge and Registrar. In particular this section extends section 4.1 of <xref target="RFC8995"/> for the constrained case.</t>

<t>The discovery follows two steps with two alternatives for step 1:</t>

<t><list style="symbols">
  <t>Step 1. Two alternatives exist (near and remote):  <list style="symbols">
      <t>Near: the Pledge is one hop away from the Registrar. The Pledge discovers the link-local address of the Registrar as described in <xref target="I-D.ietf-ace-coap-est"/>. From then on, it follows the BRSKI process as described in <xref target="I-D.ietf-ace-coap-est"/> and <xref target="I-D.ietf-anima-constrained-voucher"/>, using link-local addresses.</t>
      <t>Remote: the Pledge is more than one hop away from a relevant Registrar, and discovers the link-local address and join-port of a Join Proxy. The Pledge then follows the BRSKI procedure using the link-local address of the Join Proxy.</t>
    </list></t>
  <t>Step 2. The enrolled Join Proxy discovers the join-port of the Registrar.</t>
</list></t>

<t>The order in which the two alternatives of step 1 are tried is installation dependent. The trigger for discovery in Step 2 is implementation dependent.</t>

<t>Once a Pledge is enrolled, it may function as Join Proxy. The Join Proxy functions are advertised as described below. In principle, the Join Proxy functions are offered via a join-port, and not the standard coaps port. Also, the Registrar offers a join-port to which the stateless Join Proxy sends the JPY message. The Join Proxy and Registrar show the extra join-port number when responding to a /.well-known/core discovery request addressed to the standard coap/coaps port.</t>

<t>Three discovery cases are discussed: Join Proxy discovers Registrar, Pledge discovers Registrar, and Pledge discovers Join Proxy.  Each discovery case considers three alternatives: CoAP based discovery, GRASP Based discovery, and 6tisch based discovery.  The choice of discovery mechanism depends on the type of installation, and manufacturers can provide the pledge/Join Proxy with support for more than one discovery mechanism.  The pledge/Join Proxy can be designed to dynamically try different discovery mechanisms until a successful discovery mechanism is found, or the choice of discovery mechanism could be configured during device installation.</t>

<section anchor="join-proxy-discovers-registrar" title="Join Proxy discovers Registrar">

<t>In this section, the Join Proxy and Registrar are assumed to communicate via Link-Local addresses. This section describes the discovery of the Registrar by the Join Proxy.</t>

<section anchor="coap-disc" title="CoAP discovery">

<t>The discovery of the coaps Registrar, using coap discovery, by the Join Proxy follows sections 6.3 and 6.5.1 of <xref target="I-D.ietf-anima-constrained-voucher"/>.
The stateless Join Proxy can discover the join-port of the Registrar by sending a GET request to “/.well-known/core” including a resource type (rt)
parameter with the value “brski.rjp” <xref target="RFC6690"/>.
Upon success, the return payload will contain the join-port of the Registrar.</t>

<figure><artwork><![CDATA[
  REQ: GET coap://[IP_address]/.well-known/core?rt=brski.rjp

  RES: 2.05 Content
  <coaps://[IP_address]:join-port>; rt="brski.rjp"
]]></artwork></figure>

<t>The discoverable port numbers are usually returned for Join Proxy resources in the &lt;URI-Reference&gt; of the payload (see section 5.1 of <xref target="I-D.ietf-ace-coap-est"/>).</t>

</section>
<section anchor="grasp-discovery" title="GRASP discovery">

<t>This section is normative for uses with an ANIMA ACP. In the context of autonomic networks, the Join Proxy uses the DULL GRASP M_FLOOD mechanism to announce itself. Section 4.1.1 of <xref target="RFC8995"/> discusses this in more detail.
The Registrar announces itself using ACP instance of GRASP using M_FLOOD messages.
Autonomic Network Join Proxies MUST support GRASP discovery of Registrar as described in section 4.3 of <xref target="RFC8995"/>.</t>

</section>
<section anchor="tisch-discovery" title="6tisch discovery">

<t>The discovery of the Registrar by the Join Proxy uses the enhanced beacons as discussed in <xref target="I-D.ietf-6tisch-enrollment-enhanced-beacon"/>.</t>

</section>
</section>
<section anchor="pledge-discovers-registrar" title="Pledge discovers Registrar">

<t>In this section, the Pledge and Registrar are assumed to communicate via Link-Local addresses. This section describes the discovery of the Registrar by the Pledge.</t>

<section anchor="coap-discovery" title="CoAP discovery">

<t>The discovery of the coaps Registrar, using coap discovery, by the Pledge follows sections 6.3 and 6.5.1 of <xref target="I-D.ietf-anima-constrained-voucher"/>.</t>

</section>
<section anchor="grasp-discovery-1" title="GRASP discovery">

<t>This section is normative for uses with an ANIMA ACP. In the context of autonomic networks, the Pledge uses the DULL GRASP M_FLOOD mechanism to announce itself. Section 4.1.1 of <xref target="RFC8995"/> discusses this in more detail.
The Registrar announces itself using ACP instance of GRASP using M_FLOOD messages.
Autonomic Network Join Proxies MUST support GRASP discovery of Registrar as described in section 4.3 of <xref target="RFC8995"/> .</t>

</section>
<section anchor="tisch-discovery-1" title="6tisch discovery">

<t>The discovery of Registrar by the Pledge uses the enhanced beacons as discussed in <xref target="I-D.ietf-6tisch-enrollment-enhanced-beacon"/>.</t>

</section>
</section>
<section anchor="pledge-discovers-join-proxy" title="Pledge discovers Join Proxy">

<t>In this section, the Pledge and Join Proxy are assumed to communicate via Link-Local addresses. This section describes the discovery of the Join Proxy by the Pledge.</t>

<section anchor="jp-disc" title="CoAP discovery">

<t>In the context of a coap network without Autonomic Network support, discovery follows the standard coap policy.
The Pledge can discover a Join Proxy by sending a link-local multicast message to ALL CoAP Nodes with address FF02::FD. Multiple or no nodes may respond. The handling of multiple responses and the absence of responses follow section 4 of <xref target="RFC8995"/>.</t>

<t>The join-port of the Join Proxy is discovered by
sending a GET request to “/.well-known/core” including a resource type (rt)
parameter with the value “brski.jp” <xref target="RFC6690"/>.
Upon success, the return payload will contain the join-port.</t>

<t>The example below shows the discovery of the join-port of the Join Proxy.</t>

<figure><artwork><![CDATA[
  REQ: GET coap://[FF02::FD]/.well-known/core?rt=brski.jp

  RES: 2.05 Content
  <coaps://[IP_address]:join-port>; rt="brski.jp"
]]></artwork></figure>

<t>Port numbers are assumed to be the default numbers 5683 and 5684 for coap and coaps respectively (sections 12.6 and 12.7 of <xref target="RFC7252"/>) when not shown in the response.
Discoverable port numbers are usually returned for Join Proxy resources in the &lt;URI-Reference&gt; of the payload (see section 5.1 of <xref target="I-D.ietf-ace-coap-est"/>).</t>

</section>
<section anchor="grasp-discovery-2" title="GRASP discovery">

<t>This section is normative for uses with an ANIMA ACP. The Pledge MUST listen for GRASP M_FLOOD <xref target="RFC8990"/> announcements of the objective: “AN_Proxy”.
See section 4.1.1 <xref target="RFC8995"/> for the details of the objective.</t>

</section>
<section anchor="tisch-discovery-2" title="6tisch discovery">

<t>The discovery of the Join Proxy by the Pledge uses the enhanced beacons as discussed in <xref target="I-D.ietf-6tisch-enrollment-enhanced-beacon"/>.</t>

</section>
</section>
</section>
<section anchor="jr-comp" title="Comparison of stateless and stateful modes">

<t>The stateful and stateless mode of operation for the Join Proxy have
their advantages and disadvantages.  This section should enable to
make a choice between the two modes based on the available device
resources and network bandwidth.</t>

<figure title="Comparison between stateful and stateless mode" align="left" anchor="fig-comparison"><artwork><![CDATA[
+-------------+----------------------------+------------------------+
| Properties  |         Stateful mode      |     Stateless mode     |
+-------------+----------------------------+------------------------+
| State       |The Join Proxy needs        | No information is      |
| Information |additional storage to       | maintained by the Join |
|             |maintain mapping between    | Proxy. Registrar needs |
|             |the address and port number | to store the packet    |
|             |of the Pledge and those     | header.                |
|             |of the Registrar.           |                        |
+-------------+----------------------------+------------------------+
|Packet size  |The size of the forwarded   |Size of the forwarded   |
|             |message is the same as the  |message is bigger than  |
|             |original message.           |the original,it includes|
|             |                            |additional information  |
+-------------+----------------------------+------------------------+
|Specification|The Join Proxy needs        |New JPY message to      |
|complexity   |additional functionality    |encapsulate DTLS payload|
|             |to maintain state           |The Registrar           |
|             |information, and specify    |and the Join Proxy      |
|             |the source and destination  |have to understand the  |
|             |addresses of the DTLS       |JPY message in order    |
|             |handshake messages          |to process it.          |
+-------------+----------------------------+------------------------+
| Ports       | Join Proxy needs           |Join Proxy and Registrar|
|             | discoverable join-port     |need discoverable       |
|             |                            | join-ports             |
+-------------+----------------------------+------------------------+

]]></artwork></figure>

</section>
<section anchor="security-considerations" title="Security Considerations">

<t>All the concerns in <xref target="RFC8995"/> section 4.1 apply.
The Pledge can be deceived by malicious Join Proxy announcements.
The Pledge will only join a network to which it receives a valid <xref target="RFC8366"/> voucher <xref target="I-D.ietf-anima-constrained-voucher"/>. Once the Pledge joined, the payload between Pledge and Registrar is protected by DTLS.</t>

<t>A malicious constrained Join Proxy has a number of routing possibilities:</t>

<t><list style="symbols">
  <t>It sends the message on to a malicious Registrar. This is the same case as the presence of a malicious Registrar discussed in RFC 8995.</t>
  <t>It does not send on the request or does not return the response from the Registrar. This is the case of the not responding or crashing Registrar discussed in RFC 8995.</t>
  <t>It uses the returned response of the Registrar to enroll itself in the network. With very low probability it can decrypt the response. Successful enrollment is deemed too unlikely.</t>
  <t>It uses the request from the pledge to appropriate the pledge certificate, but then it still needs to acquire the private key of the pledge. Also this is assumed to be highly unlikely.</t>
  <t>A malicious node can construct an invalid Join Proxy message. Suppose, the destination port is the coaps port. In that case, a Join Proxy can accept the message and add the routing addresses without checking the payload. The Join Proxy then routes it to the Registrar. In all cases, the Registrar needs to receive the message at the join-port, checks that the message consists of two parts and uses the DTLS payload to start the BRSKI procedure. It is highly unlikely that this malicious payload will lead to node acceptance.</t>
  <t>A malicious node can sniff the messages routed by the constrained Join Proxy. It is very unlikely that the malicious node can decrypt the DTLS payload. A malicious node can read the header field of the message sent by the stateless Join Proxy. This ability does not yield much more information than the visible addresses transported in the network packets.</t>
</list></t>

<t>It should be noted here that the contents of the CBOR array used to convey return address information is not DTLS protected. When the communication between JOIN Proxy and Registrar passes over an unsecure network, an attacker can change the CBOR array, causing the Registrar to deviate traffic from the intended Pledge. These concerns are also expressed in <xref target="RFC8974"/>. It is also pointed out that the encryption in the source is a local matter. Similarly 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>If such scenario needs to be avoided, the constrained Join
Proxy MUST encrypt the CBOR array using a locally generated symmetric
key. The Registrar is not able to examine the encrypted result, but
does not need to. The Registrar stores the encrypted header in the return packet without modifications. The constrained Join Proxy can decrypt the contents to route the message to the right destination.</t>

<t>In some installations, layer 2 protection is provided between all member pairs of the mesh. In such an enviroment encryption of the CBOR array is unnecessay because the layer 2 protection already provide it.</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<section anchor="resource-type-attributes-registry" title="Resource Type Attributes registry">

<t>This specification registers two new Resource Type (rt=) Link Target Attributes in the “Resource Type (rt=) Link Target Attribute Values” subregistry under the “Constrained RESTful Environments (CoRE)
Parameters” registry per the <xref target="RFC6690"/> procedure.</t>

<figure><artwork><![CDATA[
Attribute Value: brski.jp
Description: This BRSKI resource type is used to query and return
             the supported BRSKI resources of the constrained 
             Join Proxy.
Reference: [this document]

Attribute Value: brski.rjp
Description: This BRSKI resource type is used for the constrained
             Join Proxy to query and return Join Proxy specific 
             BRSKI resources of a Registrar.
Reference: [this document]
]]></artwork></figure>

</section>
<section anchor="dns-sd-spec" title="service name and port number registry">

<t>This specification registers two service names under the “Service Name and Transport Protocol Port 
Number” registry.</t>

<figure><artwork><![CDATA[
Service Name: brski-jp
Transport Protocol(s): udp
Assignee:  IESG <iesg@ietf.org>
Contact:  IESG <iesg@ietf.org>
Description: Bootstrapping Remote Secure Key Infrastructure 
              constrained Join Proxy
Reference: [this document]

Service Name: brski-rjp
Transport Protocol(s): udp
Assignee:  IESG <iesg@ietf.org>
Contact:  IESG <iesg@ietf.org>
Description: Bootstrapping Remote Secure Key Infrastructure
             Registrar join-port used by stateless constrained 
             Join Proxy
Reference: [this document]
]]></artwork></figure>

</section>
</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>Many thanks for the comments by Cartsen, Bormann, Brian Carpenter, Esko Dijk, Toerless Eckert, Russ Housley, Ines Robles, Jürgen Schönwälder, Mališa Vučinić, and Rob Wilton.</t>

</section>
<section anchor="contributors" title="Contributors">

<t>Sandeep Kumar, Sye loong Keoh, and Oscar Garcia-Morchon are the co-authors of the draft-kumar-dice-dtls-relay-02. Their draft has served as a basis for this document. Much text from their draft is copied over to this draft.</t>

</section>
<section anchor="changelog" title="Changelog">

<section anchor="to-09" title="10 to 09">
<figure><artwork><![CDATA[
* OPSDIR review
* IANA review
* SECDIR review
* GENART review
]]></artwork></figure>

</section>
<section anchor="to-07" title="09 to 07">
<figure><artwork><![CDATA[
 * typos
]]></artwork></figure>

</section>
<section anchor="to-07-1" title="06 to 07">
<figure><artwork><![CDATA[
 * AD review changes
]]></artwork></figure>

</section>
<section anchor="to-06" title="05 to 06">
<figure><artwork><![CDATA[
 * RT value change to brski.jp and brski.rjp
 * new registry values for IANA
 * improved handling of jpy header array
]]></artwork></figure>

</section>
<section anchor="to-05" title="04 to 05">
<figure><artwork><![CDATA[
 * Join Proxy and join-port consistent spelling
 * some nits removed
 * restructured discovery 
 * section
 * rephrased parts of security section
]]></artwork></figure>

</section>
<section anchor="to-04" title="03 to 04">

<figure><artwork><![CDATA[
* mail address and reference
]]></artwork></figure>

</section>
<section anchor="to-03" title="02 to 03">

<figure><artwork><![CDATA[
* Terminology updated
* Several clarifications on discovery and routability
* DTLS payload introduced
]]></artwork></figure>

</section>
<section anchor="to-02" title="01 to 02">

<t><list style="symbols">
  <t>Discovery of Join Proxy and Registrar ports</t>
</list></t>

</section>
<section anchor="to-01" title="00 to 01">

<t><list style="symbols">
  <t>Registrar used throughout instead of EST server</t>
  <t>Emphasized additional Join Proxy port for Join Proxy and Registrar</t>
  <t>updated discovery accordingly</t>
  <t>updated stateless Join Proxy JPY header</t>
  <t>JPY header described with CDDL</t>
  <t>Example simplified and corrected</t>
</list></t>

</section>
<section anchor="to-00" title="00 to 00">

<t><list style="symbols">
  <t>copied from vanderstok-anima-constrained-join-proxy-05</t>
</list></t>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>

&RFC6347;
&RFC8366;
&RFC8995;
&I-D.ietf-ace-coap-est;
&I-D.ietf-anima-constrained-voucher;
&RFC8949;
&RFC8990;
<reference anchor="ieee802-1AR" target="https://standards.ieee.org/standard/802.1AR-2009.html">
  <front>
    <title>IEEE 802.1AR Secure Device Identifier</title>
    <author >
      <organization></organization>
    </author>
    <date year="2009"/>
  </front>
</reference>
<reference anchor="family" target="https://www.iana.org/assignments/address-family-numbers/address-family-numbers.xhtml">
  <front>
    <title>Address Family Numbers</title>
    <author >
      <organization></organization>
    </author>
    <date year="2021" month="October" day="19"/>
  </front>
</reference>
&RFC2119;
&RFC8174;


    </references>

    <references title='Informative References'>

&RFC6763;
&I-D.richardson-anima-state-for-joinrouter;
&I-D.ietf-6tisch-enrollment-enhanced-beacon;
&RFC6690;
&RFC7030;
&RFC7102;
&RFC7228;
&I-D.kumar-dice-dtls-relay;
&RFC4944;
&RFC3610;
&RFC7252;
&RFC6775;
&RFC8974;
&RFC6550;


    </references>


<section anchor="examples" title="Stateless Proxy payload examples">

<t>The examples show the request “GET coaps://192.168.1.200:5965/est/crts” to a Registrar. The header generated between Join Proxy and Registrar and from Registrar to Join Proxy are shown in detail. The DTLS payload is not shown.</t>

<t>The request from Join Proxy to Registrar looks like:</t>

<figure><artwork><![CDATA[
   85                                   # array(5)
      50                                # bytes(16)
         FE800000000000000000FFFFC0A801C8 #
      19 BDA7                           # unsigned(48551)
      01                                # unsigned(1) IP
      00                                # unsigned(0)
      58 2D                             # bytes(45)
   <cacrts DTLS encrypted request>
]]></artwork></figure>

<t>In CBOR Diagnostic:</t>

<figure><artwork><![CDATA[
    [h'FE800000000000000000FFFFC0A801C8', 48551, 1, 0,
     h'<cacrts DTLS encrypted request>']
]]></artwork></figure>

<t>The response is:</t>

<figure><artwork><![CDATA[
   85                                   # array(5)
      50                                # bytes(16)
         FE800000000000000000FFFFC0A801C8 #
      19 BDA7                           # unsigned(48551)
      01                                # unsigned(1) IP
      00                                # unsigned(0)
   59 026A                              # bytes(618)
      <cacrts DTLS encrypted response>
]]></artwork></figure>

<t>In CBOR diagnostic:</t>

<figure><artwork><![CDATA[
    [h'FE800000000000000000FFFFC0A801C8', 48551, 1, 0,
    h'<cacrts DTLS encrypted response>']
]]></artwork></figure>

</section>


  </back>

<!-- ##markdown-source:
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
3p8GwcTfkGCW0IvMbQgmCP4/elC18jeQAAA=

-->

</rfc>

