<?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 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">
]>

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

<rfc ipr="trust200902" docName="draft-ietf-anima-constrained-join-proxy-08" 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="March" day="25"/>

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

    <abstract>


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

<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.
It relays join traffic from the Pledge to the Registrar.</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 Join Proxy.</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 until it is authenticated to the network.
A new Pledge can only initially use a link-local IPv6 address to communicate with a neighbor on the same link <xref target="RFC6775"/> until it receives the necessary network configuration parameters.
However, before the Pledge can receive these configuration parameters, it needs to authenticate itself to the network to which it connects.</t>

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

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

<t>This document specifies a new form of Join Proxy and protocol to act as intermediary between Pledge and Registrar to relay DTLS messages between Pledge and Registrar. Two versions of the 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 Join Proxy.
<xref target="RFC8995"/> adopted only the Circuit Proxy method (1), leaving the other methods as future work.
This document standardizes the CoAP/DTLS (method 4).</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), Manufacturer Authorized Signing Authority
(MASA), Pledge, Trust of First Use (TOFU), and Voucher.</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>

</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="join-proxy-functionality" title="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 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 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 Join Proxy is introduced.
This Join Proxy functionality is configured into all authenticated devices in the network which may act as a Join Proxy for Pledges.
The Join Proxy allows for routing of the packets from the Pledge using IP routing to the intended Registrar. An authenticated Join Proxy can discover the routable IP address of the Registrar over multiple hops.
The following <xref target="jr-spec"/> specifies the two Join Proxy modes. A comparison is presented in <xref target="jr-comp"/>.</t>

</section>
<section anchor="jr-spec" title="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 MUST implement one of the two modes. A Join Proxy MAY implement both, with an unspecified mechanism to switch between the two modes.</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 maintains a 4-tuple array to translate the DTLS messages received from the Registrar and forwards it back 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>When additions are added to the array in later versions of this protocol, any additional array elements (i.e., not specified by current document) MUST be ignored by a receiver if it doesn’t know these elements. This approach allows evolution of the protocol while maintaining backwards-compatibility. A version number isn’t needed; that number is defined by the length of the array. However, this means that message elements are consistently added to earlier defined elements to avoid ambiguities.</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 in 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>It should be noted here that the contents of the CBOR map 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.
If such scenario needs to be avoided, then it is reasonable for the Join Proxy to encrypt the CBOR array using a locally generated symmetric key.
The Registrar would not be able to examine the result, but it does not need to do so.
This is a topic for future work.</t>

<t>In some installations, level 2 protection is provided between all member pairs of the mesh. In such an enviroment encryption of the CBOR array is unnecessay because the level 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 (CoAP over DTLS) port of the constrained 
             Join Proxy.
Reference: [this document]

Attribute Value: brski.rjp
Description: This BRSKI resource type is used to query and return the
             supported BRSKI JPY protocol port of the 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 Brian Carpenter, Esko Dijk, Russ Housley, 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-07" 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="http://standards.ieee.org/findstds/standard/802.1AR-2009.html">
  <front>
    <title>IEEE 802.1AR Secure Device Identifier</title>
    <author initials="." surname="IEEE Standard">
      <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;
&RFC7252;
&RFC6775;


    </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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
DQlmDb3I3IZgguC/AMcHAUXsfQAA

-->

</rfc>

