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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY I-D.ietf-core-object-security SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-object-security.xml">
<!ENTITY RFC7252 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7252.xml">
<!ENTITY RFC7049 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7049.xml">
<!ENTITY RFC8152 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8152.xml">
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2597 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2597.xml">
<!ENTITY RFC3172 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3172.xml">
<!ENTITY RFC8126 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
<!ENTITY I-D.ietf-6tisch-6top-protocol SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-6tisch-6top-protocol.xml">
<!ENTITY I-D.ietf-6tisch-terminology SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-6tisch-terminology.xml">
<!ENTITY I-D.ietf-6tisch-architecture SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-6tisch-architecture.xml">
<!ENTITY I-D.ietf-cbor-cddl SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-cbor-cddl.xml">
<!ENTITY I-D.hartke-core-stateless SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.hartke-core-stateless.xml">
<!ENTITY RFC8180 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8180.xml">
<!ENTITY RFC7721 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7721.xml">
<!ENTITY RFC7554 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7554.xml">
<!ENTITY RFC4944 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4944.xml">
<!ENTITY RFC6775 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6775.xml">
<!ENTITY RFC6550 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6550.xml">
<!ENTITY RFC4231 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4231.xml">
<!ENTITY RFC5869 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5869.xml">
]>

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

<rfc ipr="trust200902" docName="draft-ietf-6tisch-minimal-security-07" category="std">

  <front>
    <title>Minimal Security Framework for 6TiSCH</title>

    <author initials="M." surname="Vucinic" fullname="Malisa Vucinic" role="editor">
      <organization>University of Montenegro</organization>
      <address>
        <postal>
          <street>Dzordza Vasingtona bb</street>
          <city>Podgorica</city>
          <code>81000</code>
          <country>Montenegro</country>
        </postal>
        <email>malisav@ac.me</email>
      </address>
    </author>
    <author initials="J." surname="Simon" fullname="Jonathan Simon">
      <organization>Analog Devices</organization>
      <address>
        <postal>
          <street>32990 Alvarado-Niles Road, Suite 910</street>
          <city>Union City, CA</city>
          <code>94587</code>
          <country>USA</country>
        </postal>
        <email>jonathan.simon@analog.com</email>
      </address>
    </author>
    <author initials="K." surname="Pister" fullname="Kris Pister">
      <organization>University of California Berkeley</organization>
      <address>
        <postal>
          <street>512 Cory Hall</street>
          <city>Berkeley, CA</city>
          <code>94720</code>
          <country>USA</country>
        </postal>
        <email>pister@eecs.berkeley.edu</email>
      </address>
    </author>
    <author initials="M." surname="Richardson" fullname="Michael Richardson">
      <organization>Sandelman Software Works</organization>
      <address>
        <postal>
          <street>470 Dawson Avenue</street>
          <city>Ottawa, ON</city>
          <code>K1Z5V7</code>
          <country>Canada</country>
        </postal>
        <email>mcr+ietf@sandelman.ca</email>
      </address>
    </author>

    <date year="2018" month="October" day="23"/>

    <area>Internet</area>
    <workgroup>6TiSCH Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document describes the minimal framework required for a new device, called "pledge", to securely join a 6TiSCH (IPv6 over the TSCH mode of IEEE 802.15.4e) 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 configures 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>

  <middle>


<!-- ====================================================================== -->

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

<t>This document presumes a 6TiSCH network as described by
    <xref target="RFC7554"/> and
    <xref target="RFC8180"/>.
By design, nodes in a 6TiSCH network <xref target="RFC7554"/> have their radio turned off most of the time, to conserve energy.
As a consequence, the link used by a new device for joining the network has limited bandwidth <xref target="RFC8180"/>.
The secure join solution defined in this document therefore keeps the number of over-the-air exchanges for join purposes to a minimum.</t>

<t>The micro-controllers at the heart of 6TiSCH nodes have a small amount of code memory.
It is therefore paramount to reuse existing protocols available as part of the 6TiSCH stack.
At the application layer, the 6TiSCH stack already relies on CoAP <xref target="RFC7252"/> for web transfer, and on OSCORE <xref target="I-D.ietf-core-object-security"/> for its end-to-end security.
The secure join solution defined in this document therefore reuses those two protocols as its building blocks.</t>

<t>This document defines a secure join solution for a new device, called "pledge", to securely join a 6TiSCH network.
The specification defines
    the Constrained Join Protocol (CoJP) used by the pledge to request admission into a network managed by the JRC, and for the JRC to configure the pledge with the necessary parameters and update them at a later time,
    a new CoAP option,
    and configures different layers of the 6TiSCH protocol stack for the join process to occur in a secure manner.</t>

<t>The Constrained Join Protocol defined in this document is generic and can be used as-is in modes of IEEE Std 802.15.4 other than TSCH, that 6TiSCH is based on.
The Constrained Join Protocol may as well be used in other (low-power) networking technologies where efficiency in terms of communication overhead and code footprint is important.
In such a case, it may be necessary to register configuration parameters specific to the technology in question, through the IANA process.
The overall join process described in <xref target="join-process-overview"/> and the configuration of the stack is, however, specific to 6TiSCH.</t>

<t>The Constrained Join Protocol assumes the presence of a JRC (join registrar/coordinator), a central entity.
It further assumes that the pledge and the JRC share a symmetric key, called PSK (pre-shared key).
The PSK is used to configure OSCORE to provide a secure channel to CoJP.
How the PSK is installed is out of scope of this document: this may happen through the one-touch provisioning process or by a key exchange protocol that may precede the execution of the 6TiSCH Join protocol.</t>

<t>When the pledge seeks admission to a 6TiSCH network, it first synchronizes to it, by initiating the passive scan defined in <xref target="IEEE802.15.4"/>.
The pledge then exchanges messages with the JRC; these messages can be forwarded by nodes already part of the 6TiSCH network.
The messages exchanged allow the JRC and the pledge to mutually authenticate, based on the PSK.
They also allow the JRC to configure the pledge with link-layer keying material, short identifier and other parameters.
After this secure join process successfully completes, the joined node can interact with its neighbors to request additional bandwidth using the 6top Protocol <xref target="I-D.ietf-6tisch-6top-protocol"/> and start sending the application traffic.</t>

<!-- ====================================================================== -->

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

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119"/>.
These words may also appear in this document in lowercase, absent their normative meanings.</t>

<t>The reader is expected to be familiar with the terms and concepts defined in
    <xref target="I-D.ietf-6tisch-terminology"/>,
    <xref target="RFC7252"/>,
    <xref target="I-D.ietf-core-object-security"/>, and
    <xref target="RFC8152"/>.</t>

<t>The specification also includes a set of informative specifications using the Concise data definition language (CDDL) <xref target="I-D.ietf-cbor-cddl"/>.</t>

<t>The following terms defined in <xref target="I-D.ietf-6tisch-terminology"/> are used extensively throughout this document:</t>

<t><list style="symbols">
  <t>pledge</t>
  <t>joined node</t>
  <t>join proxy (JP)</t>
  <t>join registrar/coordinator (JRC)</t>
  <t>enhanced beacon (EB)</t>
  <t>join protocol</t>
  <t>join process</t>
</list></t>

<t>The following terms defined in <xref target="RFC6775"/> are also used throughout this document:</t>

<t><list style="symbols">
  <t>6LoWPAN Border Router (6LBR)</t>
</list></t>

<t>The term "6LBR" is used interchangeably with the term "DODAG root" defined in <xref target="RFC6550"/>, assuming the two entities are co-located, as recommended by <xref target="I-D.ietf-6tisch-architecture"/>.</t>

<t>The term "pledge", as used throughout the document, explicitly denotes non-6LBR devices attempting to join over an IEEE Std 802.15.4 network interface.
The device that attempts to join as the 6LBR of the network and does so over another network interface is explicitly denoted as the "6LBR pledge".
When the text equally applies to the pledge and the 6LBR pledge, the "(6LBR) pledge" form is used.</t>

<t>In addition, we use the generic terms "network identifier" and "pledge identifier".
See <xref target="identifiers"/>.</t>

<!-- ====================================================================== -->

</section>
<section anchor="identifiers" title="Identifiers">

<t>The "network identifier" identifies the 6TiSCH network.
The network identifier MUST be carried within Enhanced Beacon (EB) frames.
Typically, the 16-bit Personal Area Network Identifier (PAN ID) defined in <xref target="IEEE802.15.4"/> is used as the network identifier.
However, PAN ID is not considered a stable network identifier as it may change during network lifetime if a collision with another network is detected.
Companion documents can specify the use of a different network identifier for join purposes, but this is out of scope of this specification.</t>

<t>The "pledge identifier" identifies the (6LBR) pledge.
The pledge identifier MUST be unique in the set of all pledge identifiers managed by a JRC.
The pledge identifier uniqueness is an important security requirement, as discussed in <xref target="sec_considerations"/>.
The pledge identifier is typically the globally unique 64-bit Extended Unique Identifier (EUI-64) of the IEEE Std 802.15.4 device.
This identifier is used to generate the IPv6 addresses of the (6LBR) pledge and to identify it during the execution of the join protocol.
For privacy reasons (see <xref target="privacy_considerations"/>), it is possible to use a pledge identifier different from the EUI-64.
For example, a pledge identifier may be a random byte string, but care needs to be taken that such a string meets the uniqueness requirement.
How pledge identifier is configured at the pledge is out of scope of this specification.</t>

<!-- ====================================================================== -->

</section>
<section anchor="one_touch" title="One-Touch Assumption">

<t>This document assumes a one-touch scenario.
The (6LBR) pledge is provisioned with certain parameters before attempting to join the network, and the same parameters are provisioned to the JRC.</t>

<t>There are many ways by which this provisioning can be done.
Physically, the parameters can be written into the (6LBR) pledge using a number of mechanisms, such as
    a JTAG interface,
    a serial (craft) console interface,
    pushing buttons simultaneously on different devices,
    over-the-air configuration in a Faraday cage, etc.
The provisioning can be done by the vendor, the manufacturer, the integrator, etc.</t>

<t>Details of how this provisioning is done is out of scope of this document.
What is assumed is that there can be a secure, private conversation between the JRC and the (6LBR) pledge, and that the two devices can exchange the parameters.</t>

<t>Parameters that are provisioned to the (6LBR) pledge include:</t>

<t><list style="symbols">
  <t>Pre-Shared Key (PSK).
The JRC additionally needs to store the pledge identifier bound to the given PSK.
Each (6LBR) pledge MUST be provisioned with a unique PSK.
The PSK SHOULD be a cryptographically strong key, at least 128 bits in length, indistinguishable by feasible computation from a random uniform string of the same length.
How the PSK is generated and/or provisioned is out of scope of this specification.
This could be done during a provisioning step or companion documents can specify the use of a key agreement protocol.
Common pitfalls when generating PSKs are discussed in <xref target="sec_considerations"/>.</t>
  <t>Optionally, a network identifier.
Provisioning the network identifier is RECOMMENDED.
However, due to the operational constraints the network identifier may not be known at the time when the provisioning is done.
In case this parameter is not provisioned to the pledge, the pledge attempts to join one network at a time, which significantly prolongs the join process.
In case this parameter is not provisioned to the 6LBR pledge, the 6LBR pledge can receive it from the JRC as part of the join protocol.</t>
  <t>Optionally, any non-default algorithms.
The default algorithms are specified in <xref target="mti_algos"/>.
When algorithm identifiers are not exchanged, the use of these default algorithms is implied.</t>
</list></t>

<t>Additionally, the 6LBR pledge that is not co-located with the JRC needs to be provisioned with:</t>

<t><list style="symbols">
  <t>Global IPv6 address of the JRC.
This address is used by the 6LBR pledge to address the JRC during the join process.
The 6LBR pledge may also obtain the IPv6 address of the JRC through other available mechanisms, such as DHCPv6, GRASP, mDNS, the use of which is out of scope of this document.
Pledges do not need to be provisioned with this address as they discover it dynamically during the join process.</t>
</list></t>

<!-- ====================================================================== -->

</section>
<section anchor="join-process-overview" title="Join Process Overview">

<t>This section describes the steps taken by a pledge in a 6TiSCH network.
When a pledge seeks admission to a 6TiSCH network, the following exchange occurs:</t>

<t><list style="numbers">
  <t>The pledge listens for an Enhanced Beacon (EB) frame <xref target="IEEE802.15.4"/>.
This frame provides network synchronization information, and tells the device when it can send a frame to the node sending the beacons, which acts as a Join Proxy (JP) for the pledge, and when it can expect to receive a frame.
The Enhanced Beacon provides the L2 address of the JP and it may also provide its link-local IPv6 address.</t>
  <t>The pledge configures its link-local IPv6 address and advertises it to the JP using Neighbor Discovery.
This step may be omitted if the link-local address has been derived from a known unique interface identifier, such as an EUI-64 address.</t>
  <t>The pledge sends a Join Request to the JP in order to securely identify itself to the network.
The Join Request is forwarded to the JRC.</t>
  <t>In case of successful processing of the request, the pledge receives a Join Response from the JRC (via the JP).
The Join Response contains configuration parameters necessary for the pledge to join the network.</t>
</list></t>

<t>From the pledge's perspective, joining is a local phenomenon &#8211; the pledge only interacts with the JP, and it needs not know how far it is from the 6LBR, or how to route to the JRC.
Only after establishing one or more link-layer keys does it need to know about the particulars of a 6TiSCH network.</t>

<t>The join process is shown as a transaction diagram in <xref target="fig_overview_diagram"/>:</t>

<figure title="Overview of a successful join process. CoJP stands for Constrained Join Protocol." anchor="fig_overview_diagram"><artwork align="center"><![CDATA[
+--------+                 +-------+                 +--------+
| pledge |                 |  JP   |                 |  JRC   |
|        |                 |       |                 |        |
+--------+                 +-------+                 +--------+
   |                          |                          |
   |<---Enhanced Beacon (1)---|                          |
   |                          |                          |
   |<-Neighbor Discovery (2)->|                          |
   |                          |                          |
   |-----Join Request (3a)----|----Join Request (3a)---->| \
   |                          |                          | | CoJP
   |<----Join Response (3b)---|----Join Response (3b)----| /
   |                          |                          |
]]></artwork></figure>

<t>As other nodes in the network, the 6LBR node may act as the JP.
The 6LBR may in addition be co-located with the JRC.</t>

<t>The details of each step are described in the following sections.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="step-eb" title="Step 1 - Enhanced Beacon">

<t>The pledge synchronizes to the network by listening for, and receiving, an Enhanced Beacon (EB) sent by a node already in the network.
This process is entirely defined by <xref target="IEEE802.15.4"/>, and described in <xref target="RFC7554"/>.</t>

<t>Once the pledge hears an EB, it synchronizes to the joining schedule using the cells contained in the EB.
The pledge can hear multiple EBs; the selection of which EB to use is out of the scope for this document, and is discussed in <xref target="RFC7554"/>.
Implementers should make use of information such as:
    what network identifier the EB contains,
    the value of the Join Metric field within EBs,
    whether the source link-layer address of the EB has been tried before,
    what signal strength the different EBs were received at, etc.
In addition, the pledge may be pre-configured to search for EBs with a specific network identifier.</t>

<t>If the pledge is not provisioned with the network identifier, it attempts to join one network at a time, as described in <xref target="join_error_handling"/>.</t>

<t>Once the pledge selects the EB, it synchronizes to it and transitions into a low-power mode.
It follows the provided schedule which indicates the slots that the pledge may use for the join process.
During the remainder of the join process, the node that has sent the EB to the pledge acts as the JP.</t>

<t>At this point, the pledge may proceed to step 2, or continue to listen for additional EBs.
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  --></t>

</section>
<section anchor="step-nd" title="Step 2 - Neighbor Discovery">

<t>The pledge forms its link-local IPv6 address based on the interface identifier, as per <xref target="RFC4944"/>.
The pledge MAY perform the Neighbor Solicitation / Neighbor Advertisement exchange with the JP, as per Section 5.5.1 of <xref target="RFC6775"/>.
The pledge and the JP use their link-local IPv6 addresses for all subsequent communication during the join process.</t>

<t>Note that Neighbor Discovery exchanges at this point are not protected with link-layer security as the pledge is not in possession of the keys.
How JP accepts these unprotected frames is discussed in <xref target="llreq"/>.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="step-cojp" title="Step 3 - Constrained Join Protocol (CoJP) Execution">

<t>The pledge triggers the join exchange of the Constrained Join Protocol (CoJP).
The join exchange consists of two messages: the Join Request message (Step 3a), and the Join Response message conditioned on the successful security processing of the request (Step 3b).</t>

<t>All CoJP messages are exchanged over a secure end-to-end channel that provides confidentiality, data authenticity and replay protection.
Frames carrying CoJP messages are not protected with link-layer security when exchanged between the pledge and the JP as the pledge is not in possession of the link-layer keys in use.
How JP and pledge accept these unprotected frames is discussed in <xref target="llreq"/>.
When frames carrying CoJP messages are exchanged between nodes that have already joined the network, the link-layer security is applied according to the security configuration used in the network.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="step-join-request" title="Step 3a - Join Request">

<t>The Join Request is a message sent from the pledge to the JP, and which the JP forwards to the JRC.
The pledge indicates in the Join Request the role it requests to play in the network as well as the identifier of the network it requests to join.
The JP forwards the Join Request to the JRC on the existing 6TiSCH network.
How exactly this happens is out of scope of this document; some networks may wish to dedicate specific slots for this join traffic.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="step-join-response" title="Step 3b - Join Response">

<t>The Join Response is sent by the JRC to the pledge, and is forwarded through the JP.
The packet containing the Join Response travels from the JRC to JP using the operating routes in the 6TiSCH network.
The JP delivers it to the pledge.
The JP operates as the application-layer proxy, and does not keep any state to forward the message.</t>

<t>The Join Response contains different parameters needed by the pledge to become a fully operational network node.
For example, these parameters are the link-layer key(s) currently in use in the network, the short link-layer address assigned to the pledge, the IPv6 address of the JRC needed by the pledge to operate as the JP, and others.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
</section>
<section anchor="the-special-case-of-the-6lbr-pledge-joining" title="The Special Case of the 6LBR Pledge Joining">

<t>The 6LBR pledge performs <xref target="step-cojp"/> of the join process described above, just as any other pledge, albeit over another network interface.
There is no JP intermediating the communication between the 6LBR pledge and the JRC, as described in <xref target="netreq"/>.
The other steps of the described join process do not apply to the 6LBR pledge.
How the 6LBR pledge obtains an IPv6 address and triggers the execution of the CoJP protocol is out of scope of this document.</t>

<!-- ====================================================================== -->

</section>
</section>
<section anchor="llreq" title="Link-layer Configuration">

<t>In an operational 6TiSCH network, all frames MUST use link-layer frame security <xref target="RFC8180"/>.
The IEEE Std 802.15.4 security attributes MUST include frame authenticity, and MAY include frame confidentiality (i.e. encryption).</t>

<t>The pledge does not initially do any authenticity check of the EB frames, as it does not possess the link-layer key(s) in use.
The pledge is still able to parse the contents of the received EBs and synchronize to the network, as EBs are not encrypted <xref target="RFC8180"/>.</t>

<t>When sending frames during the join process, the pledge sends unencrypted and unauthenticated frames.
The JP accepts these unsecured frames for the duration of the join process.
This behavior may be implemented by setting the "secExempt" attribute in the IEEE Std 802.15.4 security configuration tables.
How the JP learns whether the join process is ongoing is out of scope of this specification.</t>

<t>As the EB itself cannot be authenticated by the pledge, an attacker may craft a frame that appears to be a valid EB, since the pledge can neither verify the freshness nor verify the address of the JP.
This opens up a possibility of DoS attack, as discussed in <xref target="sec_considerations"/>.</t>

<!-- ====================================================================== -->

</section>
<section anchor="netreq" title="Network-layer Configuration">

<t>The pledge and the JP SHOULD keep a separate neighbor cache for untrusted entries and use it to store each other's information during the join process.
Mixing neighbor entries belonging to pledges and nodes that are part of the network opens up the JP to a DoS attack, as the attacker may fill JP's neighbor table and prevent the discovery of legitimate neighbors.</t>

<t>Once the pledge obtains link-layer keys and becomes a joined node, it is able to securely communicate with its neighbors, obtain the network IPv6 prefix and form a global IPv6 address.
The joined node then undergoes an independent process to bootstrap the neighbor cache entries, possibly with a node that formerly acted as a JP, following <xref target="RFC6775"/>.
From the point of view of the JP, there is no relation between the neighbor cache entry belonging to a pledge and the joined node that formerly acted as a pledge.</t>

<t>The pledge does not communicate with the JRC at the network layer.
This allows the pledge to join without knowing the IPv6 address of the JRC.
Instead, the pledge communicates with the JP at the network layer using link-local addressing, and with the JRC at the application layer, as specified in <xref target="join_proxy"/>.</t>

<t>The JP communicates with the JRC over global IPv6 addresses.
The JP discovers the network IPv6 prefix and configures its global IPv6 address upon successful completion of the join process and the obtention of link-layer keys.
The pledge learns the actual IPv6 address of the JRC from the Join Response, as specified in <xref target="join_response"/>; it uses it once joined in order to operate as a JP.</t>

<t>As a special case, the 6LBR pledge is expected to have an additional network interface that it uses in order to obtain the configuration parameters from the JRC and start advertising the 6TiSCH network.
This additional interface needs to be configured with a global IPv6 address, by a mechanism that is out of scope of this document.
The 6LBR pledge uses this interface to directly communicate with the JRC using global IPv6 addressing.</t>

<t>The JRC can be co-located on the 6LBR.
In this special case, the IPv6 address of the JRC can be omitted from the Join Response message for space optimization.
The 6LBR then MUST set the DODAGID field in the RPL DIOs <xref target="RFC6550"/> to its IPv6 address.
The pledge learns the address of the JRC once joined and upon the reception of the first RPL DIO message, and uses it to operate as a JP.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="traffic_join_request" title="Identification of Join Request Traffic">

<t>The join request traffic that is proxied by the Join Proxy (JP) comes from unauthenticated nodes, and there may be an arbitrary amount of it.
In particular, an attacker may send fraudulent traffic in attempt to overwhelm the network.</t>

<t>When operating as part of a <xref target="RFC8180"/> 6TiSCH minimal network using distributed scheduling algorithms, the join request traffic present may cause intermediate nodes to request additional bandwidth.
An attacker could use this property to cause the network to overcommit bandwidth (and energy) to the join process.</t>

<t>The Join Proxy is aware of what traffic is join request traffic, and so can avoid allocating additional bandwidth itself.
The Join Proxy SHOULD implement a bandwidth cap on outgoing join request traffic.
This cap will not protect intermediate nodes as they can not tell join request traffic from regular traffic.
Despite the bandwidth cap implemented separately on each Join Proxy, the aggregate join request traffic from many Join Proxies may cause intermediate nodes to decide to allocate additional cells.
It is undesirable to do so in response to the join request traffic.
In order to permit the intermediate nodes to avoid this, the traffic needs to be tagged.</t>

<t><xref target="RFC2597"/> defines a set of per-hop behaviors that may be encoded into the Diffserv Code Points (DSCPs).
The Join Proxy SHOULD set the DSCP of join request packets that it produces as part of the relay process to AF43 code point (See Section 6 of <xref target="RFC2597"/>).</t>

<t>A Join Proxy that does not set the DSCP on traffic forwarded should set it to zero so that it is compressed out.</t>

<t>A Scheduling Function (SF) running on 6TiSCH nodes SHOULD NOT allocate additional cells as a result of traffic with code point AF43.
Companion SF documents SHOULD specify how this recommended behavior is achieved.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="tagged_join_response" title="Identification of Join Response Traffic">

<t>The JRC SHOULD set the DSCP of join response packets addressed to the Join Proxy to AF42 code point.
Join response traffic can not be induced by an attacker as it is generated only in response to legitimate pledges (see <xref target="join_error_handling"/>).
AF42 has lower drop probability than AF43, giving join response traffic priority in buffers over join request traffic.</t>

<t>Due to the convergecast nature of the DODAG, the 6LBR links are often the most congested, and from that point down there is progressively less (or equal) congestion.
If the 6LBR paces itself when sending join response traffic then it ought to never exceed the bandwidth allocated to the best effort traffic cells.
If the 6LBR has the capacity (if it is not constrained) then it should provide some buffers in order to satisfy the Assured Forwarding behavior.</t>

<t>Companion SF documents SHOULD specify how traffic with code point AF42 is handled with respect to cell allocation.</t>

<!-- ====================================================================== -->

</section>
</section>
<section anchor="join_proxy" title="Application-level Configuration">

<t>The CoJP join exchange in <xref target="fig_overview_diagram"/> is carried over CoAP <xref target="RFC7252"/> and the secure channel provided by OSCORE <xref target="I-D.ietf-core-object-security"/>.
The (6LBR) acts as a CoAP client; the JRC acts as a CoAP server.
The JP implements CoAP forward proxy functionality <xref target="RFC7252"/>.
Because the JP can also be a constrained device, it cannot implement a cache.</t>

<t>The pledge designates a JP as a proxy by including the Proxy-Scheme option in CoAP requests it sends to the JP.
The pledge also includes in the requests the Uri-Host option with its value set to the well-known JRC's alias, as specified in <xref target="join_request"/>.</t>

<t>The JP resolves the alias to the IPv6 address of the JRC that it learned when it acted as a pledge, and joined the network.
This allows the JP to reach the JRC at the network layer and forward the requests on behalf of the pledge.</t>

<t>The JP also tags all packets carrying the Join Request message at the network layer, as specified in <xref target="traffic_join_request"/>.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="statelessness-of-the-jp" title="Statelessness of the JP">

<t>The CoAP proxy defined in <xref target="RFC7252"/> keeps per-client state information in order to forward the response towards the originator of the request.
This state information includes at least
    the CoAP token,
    the IPv6 address of the client, and
    the UDP source port number.
Since the JP can be a constrained device that acts as a CoAP proxy, memory limitations make it prone to Denial-of-Service (DoS) attacks.</t>

<t>The DoS risk on the JP can be mitigated by making the JP act as a stateless CoAP proxy.
The JP can wrap the state it needs to keep for a given pledge throughout the network stack in a "state object" and include it as a CoAP token in the forwarded request to the JRC (i.e. origin server).
The JP may use the CoAP token as defined in <xref target="RFC7252"/>, if the size of the serialized state object permits, or use the extended CoAP token being defined in <xref target="I-D.hartke-core-stateless"/>.
Since the CoAP token is echoed back in the response, the JP is able to decode the token and configure the state needed to forward the response to the pledge.
The information that the JP needs to encode in the state object to operate in a fully stateless manner with respect to a given pledge is implementation specific.
In all cases, the state object communicated in the token SHOULD be integrity protected, with a key that is known only to the JP, and SHOULD include a freshness indicator.
It is RECOMMENDED that the JP operates in a stateless manner and signals the per-pledge state within the CoAP token, for every request it forwards into the network on behalf of unauthenticated pledges.</t>

<t>Note, however, that in some networking stack implementations, a fully stateless operation of the JP may be challenging from the implementation point of view.
In those cases, the JP may operate as a statefull proxy that stores the per-pledge state until the response is received or timed out, but this comes at an increased risk of DoS attacks.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="oscore_sec_context" title="OSCORE Security Context">

<t>Before the (6LBR) pledge and the JRC may start exchanging CoAP messages protected with OSCORE, they need to derive the OSCORE security context from the parameters provisioned out-of-band, as discussed in <xref target="one_touch"/>.</t>

<t>The OSCORE security context MUST be derived as per Section 3 of <xref target="I-D.ietf-core-object-security"/>.</t>

<t><list style="symbols">
  <t>the Master Secret MUST be the PSK.</t>
  <t>the Master Salt MUST be the empty byte string.</t>
  <t>the ID of the pledge MUST be set to the byte string 0x00.
This identifier is used as the OSCORE Sender ID of the pledge in the security context derivation, as the pledge initially acts as a CoAP client.</t>
  <t>the ID of the JRC MUST be set to the byte string 0x4a5243 ("JRC" in ASCII).
This identifier is used as the OSCORE Recipient ID of the pledge in the security context derivation, as the JRC initially acts as a CoAP server.</t>
  <t>the ID Context MUST be set to the pledge identifier.</t>
  <t>the Algorithm MUST be set to the value from <xref target="RFC8152"/>, agreed out-of-band by the same mechanism used to provision the PSK. The default is AES-CCM-16-64-128.</t>
  <t>the Key Derivation Function MUST be agreed out-of-band. Default is HKDF SHA-256 <xref target="RFC5869"/>.</t>
</list></t>

<t>The derivation in <xref target="I-D.ietf-core-object-security"/> results in traffic keys and a common IV for each side of the conversation.
Nonces are constructed by XOR'ing the common IV with the current sequence number and sender identifier.
For details on nonce construction, refer to <xref target="I-D.ietf-core-object-security"/>.</t>

<t>Implementations MUST ensure that multiple CoAP requests to different JRCs are properly incrementing the sequence numbers in the OSCORE security context for each message, so that the same sequence number is never reused in distinct requests.
The pledge typically sends requests to different JRCs if it is not provisioned with the network identifier and attempts to join one network at a time.
A simple implementation technique is to instantiate the OSCORE security context with a given PSK only once and use it for all subsequent requests.
Failure to comply will break the security guarantees of the Authenticated Encryption with Associated Data (AEAD) algorithm due to the nonce reuse.</t>

<t>This OSCORE security context is used for
    initial joining of the (6LBR) pledge, where the (6LBR) pledge acts as a CoAP client,
    as well as for any later parameter updates, where the JRC acts as a CoAP client and the joined node as a CoAP server, as discussed in <xref target="update"/>.
The (6LBR) pledge and the JRC use the OSCORE security context parameters (e.g. sender and recipient identifiers) as they were used at the moment of context derivation, regardless of whether they currently act as a CoAP client or a CoAP server.
A (6LBR) pledge is expected to have exactly one OSCORE security context with the JRC.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="persistency" title="Replay Window and Persistency">

<t>Both (6LBR) pledge and the JRC MUST implement a replay protection mechanism. 
The use of the default OSCORE replay protection mechanism specified in Section 3.2.2 of <xref target="I-D.ietf-core-object-security"/> is RECOMMENDED.</t>

<t>Implementations MUST ensure that mutable OSCORE context parameters (Sender Sequence Number, Replay Window) are stored in persistent memory.
A technique that prevents reuse of sequence numbers, detailed in Section 7.5.1 of <xref target="I-D.ietf-core-object-security"/>, MUST be implemented.
Each update of the OSCORE Replay Window MUST be written to persistent memory.</t>

<t>This is an important security requirement in order to guarantee nonce uniqueness and resistance to replay attacks across reboots and rejoins.
Traffic between the (6LBR) pledge and the JRC is rare, making security outweigh the cost of writing to persistent memory.</t>

<!-- ====================================================================== -->

</section>
</section>
</section>
<section anchor="join_protocol" title="Constrained Join Protocol (CoJP)">

<t>Constrained Join Protocol (CoJP) is a lightweight protocol over CoAP <xref target="RFC7252"/> and a secure channel provided by OSCORE <xref target="I-D.ietf-core-object-security"/>.
CoJP allows the (6LBR) pledge to request admission into a network managed by the JRC, and for the JRC to configure the pledge with the parameters necessary for joining the network, or advertising it in the case of 6LBR pledge.
The JRC may update the parameters at any time, by reaching out to the joined node that formerly acted as a (6LBR) pledge.
For example, network-wide rekeying can be implemented by updating the keying material on each node.</t>

<t>This section specifies
    how the CoJP messages are mapped to CoAP and OSCORE,
    CBOR data structures carrying different parameters, transported within CoAP payload,
    and the parameter semantics and processing rules.</t>

<t>CoJP relies on the security properties provided by OSCORE.
This includes end-to-end confidentiality, data authenticity, replay protection, and a secure binding of responses to requests.</t>

<figure title="Abstract layering of CoJP." anchor="fig-stack"><artwork align="center"><![CDATA[
+-----------------------------------+
|  Constrained Join Protocol (CoJP) |
+-----------------------------------+
+-----------------------------------+  \
|         Requests / Responses      |  |
|-----------------------------------|  |
|               OSCORE              |  | CoAP
|-----------------------------------|  |
|           Messaging Layer         |  |
+-----------------------------------+  /
+-----------------------------------+
|                UDP                |
+-----------------------------------+
]]></artwork></figure>

<t>When a (6LBR) pledge requests admission to a given network, it undergoes the CoJP join exchange that consists of:</t>

<t><list style="symbols">
  <t>the Join Request message, sent by the (6LBR) pledge to the JRC, potentially proxied by the JP.
The Join Request message and its mapping to CoAP is specified in <xref target="join_request"/>.</t>
  <t>the Join Response message, sent by the JRC to the (6LBR) pledge if the JRC successfully processes the Join Request using OSCORE and it determines through a mechanism that is out of scope of this specification that the (6LBR) pledge is authorized to join the network.
The Join Response message is potentially proxied by the JP.
The Join Response message and its mapping to CoAP is specified in <xref target="join_response"/>.</t>
</list></t>

<t>When the JRC needs to update the parameters of a joined node that formerly acted as a (6LBR) pledge, it executes the CoJP parameter update exchange that consists of:</t>

<t><list style="symbols">
  <t>the Parameter Update message, sent by the JRC to the joined node that formerly acted as a (6LBR) pledge.
The Parameter Update message and its mapping to CoAP is specified in <xref target="parameter_update"/>.</t>
  <t>the Parameter Update Response message, sent by the joined node to the JRC in response to the Parameter Update message to signal successful reception of the updated parameters.
The Parameter Update Response message and its mapping to CoAP is specified in <xref target="parameter_update_response"/>.</t>
</list></t>

<t>The payload of CoJP messages is encoded with CBOR <xref target="RFC7049"/>.
The CBOR data structures that may appear as the payload of different CoJP messages are specified in <xref target="cbor_objects"/>.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="join" title="Join Exchange">

<t>This section specifies the messages exchanged when the (6LBR) pledge requests admission and configuration parameters from the JRC.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="join_request" title="Join Request Message">

<t>The Join Request message SHALL be mapped to a CoAP request:</t>

<t><list style="symbols">
  <t>The request method is POST.</t>
  <t>The type is Non-confirmable (NON).</t>
  <t>The Proxy-Scheme option is set to "coap".</t>
  <t>The Uri-Host option is set to "6tisch.arpa".
This is an anycast type of identifier of the JRC that is resolved to its IPv6 address by the JP or the 6LBR pledge.</t>
  <t>The Uri-Path option is set to "j".</t>
  <t>The Object-Security option SHALL be set according to <xref target="I-D.ietf-core-object-security"/>.
  The OSCORE security context used is the one derived in <xref target="oscore_sec_context"/>.
  The OSCORE kid context allows the JRC to retrieve the security context for a given pledge.</t>
  <t>The payload is a Join_Request CBOR object, as defined in <xref target="join_request_object"/>.</t>
</list></t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="join_response" title="Join Response Message">

<t>The Join Response message that the JRC sends SHALL be mapped to a CoAP response:</t>

<t><list style="symbols">
  <t>The response Code is 2.04 (Changed).</t>
  <t>The payload is a Configuration CBOR object, as defined in <xref target="configuration_object"/>.</t>
</list></t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
</section>
<section anchor="update" title="Parameter Update Exchange">

<t>During the network lifetime, parameters returned as part of the Join Response may need to be updated.
One typical example is the update of link-layer keying material for the network, a process known as rekeying.
This section specifies a generic mechanism when this parameter update is initiated by the JRC.</t>

<t>At the time of the join, the (6LBR) pledge acts as a CoAP client and requests the network parameters through a representation of the "/j" resource, exposed by the JRC.
In order for the update of these parameters to happen, the JRC needs to asynchronously contact the joined node.
The use of the CoAP Observe option for this purpose is not feasible due to the change in the IPv6 address when the pledge becomes the joined node and obtains a global address.</t>

<t>Instead, once the (6LBR) pledge receives and successfully validates the Join Response and so becomes a joined node, it becomes a CoAP server.
The joined node exposes the "/j" resource that is used by the JRC to update the parameters.
Consequently, the JRC operates as a CoAP client when updating the parameters.
The request/response exchange between the JRC and the (6LBR) pledge happens over the already-established OSCORE secure channel.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="parameter_update" title="Parameter Update Message">

<t>The Parameter Update message that the JRC sends to the joined node SHALL be mapped to a CoAP request:</t>

<t><list style="symbols">
  <t>The request method is POST.</t>
  <t>The type is Confirmable (CON).</t>
  <t>The Uri-Path option is set to "j".</t>
  <t>The Object-Security option SHALL be set according to <xref target="I-D.ietf-core-object-security"/>.
  The OSCORE security context used is the one derived in <xref target="oscore_sec_context"/>.
  When a joined node receives a request with the Sender ID set to 0x4a5243 (ID of the JRC), it is able to correctly retrieve the security context with the JRC.</t>
  <t>The payload is a Configuration CBOR object, as defined in <xref target="configuration_object"/>.</t>
</list></t>

<t>The JRC has implicit knowledge on the global IPv6 address of the joined node, as it knows the pledge identifier that the joined node used when it acted as a pledge, and the IPv6 network prefix.
The JRC uses this implicitly derived IPv6 address of the joined node to directly address CoAP messages to it.</t>

<t>In case the JRC does not receive a response to a Parameter Update message, it will attempt multiple retransmissions, as configured by the underlying CoAP retransmission mechanism triggered for confirmable messages.
Finally, if the CoAP implementation declares that the destination is unreachable, the JRC may consider this as a hint that the joined node is no longer in the network.
How JRC decides when to stop managing a given joined node is out of scope of this specification but security considerations on the reuse of assigned resources apply, as discussed in <xref target="sec_considerations"/>.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="parameter_update_response" title="Parameter Update Response Message">

<t>The Parameter Update Response message that the joined node sends to the JRC SHALL be mapped to a CoAP response:</t>

<t><list style="symbols">
  <t>The response Code is 2.04 (Changed).</t>
  <t>The payload is empty.</t>
</list></t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
</section>
<section anchor="error-handling" title="Error Handling">

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="join_error_handling" title="OSCORE Error Handling and Retransmission">

<t>This section describes handling of errors raised by the underlying OSCORE.</t>

<t>Since the Join Request is mapped to a Non-confirmable CoAP message, OSCORE processing at the JRC will silently drop the request in case of a failure.
This may happen for a number of reasons, including
    failed lookup of an appropriate security context (e.g. the pledge attempting to join a wrong network),
    failed decryption,
    positive replay window lookup,
    formatting errors (possibly due to malicious alterations in transit).
Silently dropping the Join Request at the JRC prevents a DoS attack where an attacker could force the pledge to attempt joining one network at a time, until all networks have been tried.</t>

<t>Using a Non-confirmable CoAP message to transport the Join Request also helps minimize the required CoAP state at the pledge and the Join Proxy, keeping it to a minimum typically needed to perform CoAP congestion control.
It does, however, introduce some complexity as the pledge needs to implement a retransmission mechanism.</t>

<t>The following binary exponential back-off algorithm is inspired by the one described in <xref target="RFC7252"/>.
For each Join Request the pledge sends while waiting for a Join Response, the pledge MUST keep track of a timeout and a retransmission counter.
For a new Join Request, the timeout is set to a random value between TIMEOUT_BASE and (TIMEOUT_BASE * TIMEOUT_RANDOM_FACTOR).
The retransmission counter is set to 0.
When the timeout is triggered and the retransmission counter is less than MAX_RETRANSMIT, the Join Request is retransmitted, the retransmission counter is incremented, and the timeout is doubled.
Note that the retransmitted Join Request passes new OSCORE processing, such that the sequence number in the OSCORE context is properly incremented.
If the retransmission counter reaches MAX_RETRANSMIT on a timeout, the pledge SHOULD attempt to join the next advertised 6TiSCH network.
If the pledge receives a Join Response that successfully passes OSCORE processing, it cancels the pending timeout and processes the response.
The pledge MUST silently discard any response not protected with OSCORE, including error codes.
For default values of retransmission parameters, see <xref target="parameters"/>.</t>

<t>If all join attempts to advertised networks have failed, the pledge SHOULD signal to the user the presence of an error condition, through some out-of-band mechanism.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="cojp_error_handling" title="CoJP CBOR Object Processing">

<t>This section describes error handling when processing CoJP CBOR objects that are transported within the payload of different CoJP messages.
See <xref target="join_error_handling"/> for the handling of errors that may be raised by the underlying OSCORE implementation.</t>

<t>CoJP CBOR objects are transported both within CoAP requests and responses.
When an error is detected while processing CoJP objects in a CoAP request (Join Request message, Parameter Update message), Error Response message MUST be returned.
Error Response message maps to a CoAP response and is specified in <xref target="error_response_message"/>.</t>

<t>When an error is detected while processing a CoJP object in a CoAP response (Join Response message), a (6LBR) pledge SHOULD reattempt to join.
In this case, the (6LBR) pledge SHOULD enclose an Error CBOR object within the Join Request object in the following Join Request message.
A (6LBR) pledge MUST NOT attempt more than MAX_RETRANSMIT number of attempts to join if the processing of the Join Response message fails.
If MAX_RETRANSMIT number of attempts is reached without success, the (6LBR) pledge SHOULD signal to the user the presence of an error condition, through some out-of-band mechanism.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="error_response_message" title="Error Response Message">

<t>The Error Response Message is returned for any CoJP request when the processing of the payload failed.
Note that the Error Response message is protected by OSCORE as any other CoJP protocol message.</t>

<t>The Error Response message SHALL be mapped to a CoAP response:</t>

<t><list style="symbols">
  <t>The response Code is 4.00 (Bad Request).</t>
  <t>The payload is an Error CBOR object, as defined in <xref target="error_object"/>, containing the error code that triggered the sending of this message.</t>
</list></t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="failure-handling" title="Failure Handling">

<t>The Parameter Update exchange may be triggered at any time during the network lifetime that may span several years.
During this period, it may occur that a joined node or the JRC experience unexpected events such as reboots or complete failures.</t>

<t>This document mandates that the mutable parameters in the security context are written to persistent memory (see <xref target="persistency"/>) by both the JRC and pledges (joined nodes).
In case of a reboot on either side, the retrieval of mutable security context parameters is feasible from the persistent memory such that there is no risk of AEAD nonce reuse due to a reinitialized Sender Sequence number, or of a replay attack due to the reinitialized replay window.</t>

<t>In the case of a complete failure, where the mutable security context parameters cannot be retrieved, it is expected that a failed joined node is replaced with a new physical device, using a new pledge identifier and a PSK.
When such an event occurs at the JRC, it is likely that the information about joined nodes, their assigned short identifiers and mutable security context parameters is lost.
If this is the case, during the process of JRC replacement, the network administrator MUST force all the networks managed by the failed JRC to rejoin, through e.g. the reinitialization of the 6LBR nodes.
Since the joined nodes kept track of their mutable security context parameters, they will use these during the (re)join exchange without a risk of AEAD nonce reuse.
However, even after all the nodes rejoined, an AEAD nonce reuse risk exists during the first Parameter Update exchange, as the new JRC does not possess the last Sender Sequence number used, and can only initialize it to zero.
Since the loss of security properties including confidentiality for this message is likely the JRC MUST limit the information that may be exposed within.</t>

<t>When such a message arrives at the joined node, the OSCORE implementation rejects it due to the Partial IV being largely below the acceptable replay window state.
When this is detected, the joined node MUST send an Error Response message with error code set to "Invalid parameter: OSCORE partial IV" from <xref target="table_errors"/> and Additional information set to the next Partial IV it will expect.
When protecting this error response by OSCORE, the joined node MUST use the value of its Sender Sequence number to generate the Partial IV and include it in the CoAP OSCORE option, as specified by <xref target="I-D.ietf-core-object-security"/>.
Upon successful OSCORE verification of the received CoJP message, the JRC processes the error response and configures the Sender Sequence number to the one indicated in the Additional information field.
The next Parameter Update exchange triggered by the JRC will therefore use the proper Sender Sequence number and will be accepted by the joined node.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
</section>
<section anchor="cbor_objects" title="CoJP Objects">

<t>This section specifies the structure of CoJP CBOR objects that may be carried as the payload of CoJP messages.
Some of these objects may be received both as part of the CoJP join exchange when the device operates as a (CoJP) pledge, or the parameter update exchange, when the device operates as a joined (6LBR) node.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="join_request_object" title="Join Request Object">

<t>The Join_Request structure is built on a CBOR map object.</t>

<t>The set of parameters that can appear in a Join_Request object is summarized below.
The labels can be found in "CoJP Parameters" registry <xref target="iana_cojp_registry"/>, initially populated with the values from <xref target="table_cojp_parameters_labels"/>.</t>

<t><list style="symbols">
  <t>role: The identifier of the role that the pledge requests to play in the network once it joins, encoded as an unsigned integer.
Possible values are specified in <xref target="table_role_values"/>.
This parameter MAY be included.
In case the parameter is omitted, the default value of 0, i.e. the role "6TiSCH Node", MUST be assumed.</t>
  <t>network identifier: The identifier of the network, as discussed in <xref target="identifiers"/>, encoded as a CBOR byte string.
This parameter may appear both in the Join_Request and in the Configuration objects.
When present in the Join_Request, it hints to the JRC the network that the pledge is requesting to join, enabling the JRC to manage multiple networks.
The pledge obtains the value of the network identifier from the received EB frames.
This parameter MUST be included in a Join_Request object if the role parameter is set to "6TiSCH Node".
This parameter MAY be included if the role parameter is set to "6LBR".
The inclusion of this parameter by the 6LBR pledge depends on whether the parameter was exchanged during the one-touch process, which in turn depends on the operational constraints.</t>
  <t>response processing error: The identifier of the error from the previous join attempt, encoded as an Error object described in <xref target="error_object"/>.
This parameter MAY be included.
If a (6LBR) pledge previously attempted to join and received a valid Join Response message over OSCORE but failed to process its payload (Configuration object), it SHOULD include this parameter to facilitate the debugging process.</t>
</list></t>

<t>The CDDL fragment that represents the text above for the Join_Request follows.</t>

<figure><artwork><![CDATA[
Join_Request = {
    ? 1 : uint,              ; role
    ? 5 : bstr,              ; network identifier
    ? 7 : Error,             ; response processing error
}
]]></artwork></figure>

<texttable title="Role values." anchor="table_role_values">
      <ttcol align='right'>Name</ttcol>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='right'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>6TiSCH Node</c>
      <c>0</c>
      <c>The pledge requests to play the role of a regular 6TiSCH node, i.e. non-6LBR node.</c>
      <c>[[this document]]</c>
      <c>6LBR</c>
      <c>1</c>
      <c>The pledge requests to play the role of 6LoWPAN Border Router (6LBR).</c>
      <c>[[this document]]</c>
</texttable>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="configuration_object" title="Configuration Object">

<t>The Configuration structure is built on a CBOR map object.
The set of parameters that can appear in a Configuration object is summarized below.
The labels can be found in "CoJP Parameters" registry <xref target="iana_cojp_registry"/>, initially populated with the values from <xref target="table_cojp_parameters_labels"/>.</t>

<t><list style="symbols">
  <t>link-layer key set: An array encompassing a set of cryptographic keys and their identifiers that are currently in use in the network, or that are scheduled to be used in the future.
The encoding of individual keys is described in <xref target="ll_keys"/>.
The link-layer key set parameter MAY be included in a Configuration object.
When present, the link-layer key set parameter MUST contain at least one key.
How the keys are installed and used differs for the 6LBR and other nodes.
When 6LBR receives this parameter, it MUST
  remove any old keys it has installed from the previous key set
  and immediately install and start using the new keys for all outgoing and incoming traffic.
When a non-6LBR node receives this parameter, it MUST install the keys, use them for any incoming traffic matching the key identifier, but keep using the old keys for all outgoing traffic.
A non-6LBR node accepts any frames for which it has keys: both old and new keys.
Upon reception and successful security processing of a link-layer frame secured with a key from the new key set, a non-6LBR node MUST remove any old keys it has installed from the previous key set.
From that moment on, a non-6LBR node MUST use the keys from the new key set for all outgoing traffic.
In the case when the pledge is joining for the first time, before sending the first outgoing frame secured with a received key, the pledge needs to successfully complete the security processing of an incoming frame.
To do so, the pledge can wait to receive a new frame or it can also store an EB frame that it used to find the JP and use it for immediate security processing upon reception of the key set.
The described mechanism permits the JRC to provision the new key set to all the nodes while the network continues to use the existing keys.
When the JRC is certain that all (or enough) nodes have been provisioned with the new keys, then the JRC updates the 6LBR.
In the special case when the JRC is co-located with the 6LBR, it can simply trigger the sending of a new broadcast frame (e.g. EB), secured with a key from the new key set.
The frame goes out with the new key, and upon reception and successful security processing of the new frame all receiving nodes will switch to the new active keys.
Outgoing traffic from those nodes will then use the new key, which causes an update of additional peers, and the network will switch over in a flood-fill fashion.</t>
  <t>short identifier: a compact identifier assigned to the pledge.
The short identifier structure is described in <xref target="short_identifier"/>.
The short identifier parameter MAY be included in a Configuration object.</t>
  <t>JRC address: the IPv6 address of the JRC, encoded as a byte string, with the length of 16 bytes.
If the length of the byte string is different than 16, the parameter MUST be discarded.
If the JRC is not co-located with the 6LBR and has a different IPv6 address than the 6LBR, this parameter MUST be included.
In the special case where the JRC is co-located with the 6LBR and has the same IPv6 address as the 6LBR, this parameter MAY be included.
If the JRC address parameter is not present in the Configuration object, this indicates that the JRC has the same IPv6 address as the 6LBR.
The joined node can then discover the IPv6 address of the JRC through network control traffic.
See <xref target="netreq"/>.</t>
  <t>network identifier: the identifier of the network, as discussed in <xref target="identifiers"/>, encoded as a byte string.
When present in the Configuration object, this parameter is only valid when received by the 6LBR pledge.
The parameter indicates to the 6LBR the value of the network identifier it should advertise at the link layer.
This parameter MUST NOT be included in the Configuration object if the role parameter from the corresponding Join_Request object indicated 0, i.e. the role "6TiSCH Node".
In the case where the corresponding Join_Request object does not contain the network identifier parameter, this parameter MUST be included.
When the corresponding Join_Request object does contain the network identifier parameter, this parameter MAY be included in the Configuration object.
This may happen if the JRC decides to overwrite the network identifier provisioned during the one-touch process.
The value of the network identifier parameter from the Configuration object SHOULD take precedence over the value provisioned during the one-touch process.</t>
  <t>network prefix: the IPv6 network prefix, encoded as a byte string.
The length of the byte string determines the prefix length.
This parameter is only valid when received by the 6LBR pledge.
The parameter indicates to the 6LBR the value of the IPv6 network prefix.
This parameter MAY be included in the Configuration object if the role parameter from the corresponding Join_Request object indicated 1, i.e. the role "6LBR".
This parameter MUST NOT be included in the Configuration object if the role parameter from the corresponding Join_Request object indicated 0, i.e. the role "6TiSCH Node".</t>
</list></t>

<t>The CDDL fragment that represents the text above for the Configuration follows.
Structures Link_Layer_Key and Short_Identifier are specified in <xref target="ll_keys"/> and <xref target="short_identifier"/>.</t>

<figure><artwork><![CDATA[
Configuration = {
    ? 2 : [ +Link_Layer_Key ],   ; link-layer key set
    ? 3 : Short_Identifier,      ; short identifier
    ? 4 : bstr                   ; JRC address
    ? 5 : bstr                   ; network identifier
    ? 6 : bstr                   ; network prefix
}
]]></artwork></figure>

<texttable title="CoJP parameters map labels." anchor="table_cojp_parameters_labels">
      <ttcol align='right'>Name</ttcol>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='right'>CBOR type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>role</c>
      <c>1</c>
      <c>unsigned integer</c>
      <c>Identifies the role parameter.</c>
      <c>[[this document]]</c>
      <c>link-layer key set</c>
      <c>2</c>
      <c>array</c>
      <c>Identifies the array carrying one or more link-level cryptographic keys.</c>
      <c>[[this document]]</c>
      <c>short identifier</c>
      <c>3</c>
      <c>array</c>
      <c>Identifies the assigned short identifier</c>
      <c>[[this document]]</c>
      <c>JRC address</c>
      <c>4</c>
      <c>byte string</c>
      <c>Identifies the IPv6 address of the JRC</c>
      <c>[[this document]]</c>
      <c>network identifier</c>
      <c>5</c>
      <c>byte string</c>
      <c>Identifies the network identifier parameter</c>
      <c>[[this document]]</c>
      <c>network prefix</c>
      <c>6</c>
      <c>byte string</c>
      <c>Identifies the IPv6 prefix of the network</c>
      <c>[[this document]]</c>
      <c>error</c>
      <c>7</c>
      <c>array</c>
      <c>Identifies the error parameter</c>
      <c>[[this document]]</c>
</texttable>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="ll_keys" title="Link-Layer Key">

<t>The Link_Layer_Key structure encompasses the parameters needed to configure the link-layer security module:
    the key identifier;
    the value of the cryptographic key;
    the link-layer algorithm identifier and the security level and the frame types that it should be used with, both for outgoing and incoming security operations;
    and any additional information that may be needed to configure the key.</t>

<t>For encoding compactness, Link_Layer_Key object is not enclosed in a top-level CBOR object.
Rather, it is transported as a sequence of CBOR elements, with some being optional.</t>

<t>The set of parameters that can appear in a Link_Layer_Key object is summarized below, in order:</t>

<t><list style="symbols">
  <t>key_id: The identifier of the key, encoded as a CBOR unsigned integer.
This parameter MUST be included.
If the decoded CBOR unsigned integer value is larger than the maximum link-layer key identifier, the key is considered invalid.
In case the key is considered invalid, the implementation MUST discard the key and attempt to decode the next key in the array.</t>
  <t>key_usage: The identifier of the link-layer algorithm, security level and link-layer frame types that can be used with the key, encoded as a CBOR unsigned or negative integer.
This parameter MAY be included.
Possible values and the corresponding link-layer settings are specified in IANA "CoJP Key Usage" registry (<xref target="iana_cojp_key_usage_registry"/>).
In case the parameter is omitted, the default value of 0 from <xref target="table_key_usage_values"/> MUST be assumed.</t>
  <t>key_value: The value of the cryptographic key, encoded as a byte string.
This parameter MUST be included.
If the length of the byte string is different than the corresponding key length for a given algorithm specified by the key_usage parameter, the key MUST be discarded and the decoder should attempt to decode the next key in the array.</t>
  <t>key_addinfo: Additional information needed to configure the link-layer key, encoded as a byte string.
This parameter MAY be included.
The processing of this parameter is dependent on the link-layer technology in use and a particular keying mode.</t>
</list></t>

<t>To be able to decode the keys that are present in the link-layer key set, and to identify individual parameters of a single Link_Layer_Key object, the CBOR decoder needs to differentiate between elements based on the CBOR type.
For example, a uint that follows a byte string signals to the decoder that a new Link_Layer_Key object is being processed.</t>

<t>The CDDL fragment that represents the text above for the Link_Layer_Key follows.</t>

<figure><artwork><![CDATA[
Link_Layer_Key = (
      key_id             : uint,
    ? key_usage          : uint / nint,
      key_value          : bstr,
    ? key_addinfo        : bstr,
)
]]></artwork></figure>

<texttable title="Key Usage values." anchor="table_key_usage_values">
      <ttcol align='right'>Name</ttcol>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='right'>Algorithm</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>6TiSCH-K1K2-ENC-MIC32</c>
      <c>0</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-32 for EBs, ENC-MIC-32 for DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K1K2-ENC-MIC64</c>
      <c>1</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-64 for EBs, ENC-MIC-64 for DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K1K2-ENC-MIC128</c>
      <c>2</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-128 for EBs, ENC-MIC-128 for DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K1K2-MIC32</c>
      <c>3</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-32 for EBs, DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K1K2-MIC64</c>
      <c>4</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-64 for EBs, DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K1K2-MIC128</c>
      <c>5</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-128 for EBs, DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K1-MIC32</c>
      <c>6</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-32 for EBs.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K1-MIC64</c>
      <c>7</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-64 for EBs.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K1-MIC128</c>
      <c>8</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-128 for EBs.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K2-MIC32</c>
      <c>9</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-32 for DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K2-MIC64</c>
      <c>10</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-64 for DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K2-MIC128</c>
      <c>11</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use MIC-128 for DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K2-ENC-MIC32</c>
      <c>12</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use ENC-MIC-32 for DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K2-ENC-MIC64</c>
      <c>13</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use ENC-MIC-64 for DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
      <c>6TiSCH-K2-ENC-MIC128</c>
      <c>14</c>
      <c>IEEE802154-AES-CCM-128</c>
      <c>Use ENC-MIC-128 for DATA and ACKNOWLEDGMENT.</c>
      <c>[[this document]]</c>
</texttable>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="use-in-ieee-std-802154" title="Use in IEEE Std 802.15.4">

<t>When Link_Layer_Key is used in the context of <xref target="IEEE802.15.4"/>, following considerations apply.</t>

<t>Signaling of different keying modes of <xref target="IEEE802.15.4"/> is done based on the parameter values present in a Link_Layer_Key object.</t>

<t><list style="symbols">
  <t>Key ID Mode 0x00 (Implicit, pairwise):
key_id parameter MUST be set to 0.
key_addinfo parameter MUST be present.
key_addinfo parameter MUST be set to the link-layer address(es) of a single peer with whom the key should be used.
Depending on the configuration of the network, key_addinfo may carry the peer's long link-layer address (i.e. pledge identifier), short link-layer address, or their concatenation with the long address being encoded first.
Which address is carried is determined from the length of the byte string.</t>
  <t>Key ID Mode 0x01 (Key Index):
key_id parameter MUST be set to a value different than 0.
key_addinfo parameter MUST NOT be present.</t>
  <t>Key ID Mode 0x02 (4-byte Explicit Key Source):
key_id parameter MUST be set to a value different than 0.
key_addinfo parameter MUST be present.
key_addinfo parameter MUST be set to a byte string, exactly 4 bytes long.
key_addinfo parameter carries the Key Source parameter used to configure <xref target="IEEE802.15.4"/>.</t>
  <t>Key ID Mode 0x03 (8-byte Explicit Key Source):
key_id parameter MUST be set to a value different than 0.
key_addinfo parameter MUST be present.
key_addinfo parameter MUST be set to a byte string, exactly 8 bytes long.
key_addinfo parameter carries the Key Source parameter used to configure <xref target="IEEE802.15.4"/>.</t>
</list></t>

<t>In all cases, key_usage parameter determines how a particular key should be used in respect to incoming and outgoing security policies.</t>

<t>For Key ID Modes 0x01 - 0x03, parameter key_id sets the "secKeyIndex" parameter of {{IEEE802.15.4} that is signaled in all outgoing frames secured with a given key.
The maximum value key_id can have is 254.
The value of 255 is reserved in {{IEEE802.15.4} and is therefore considered invalid.</t>

<t>Key ID Mode 0x00 (Implicit, pairwise) enables the JRC to act as a trusted third party and assign pairwise keys between nodes in the network.
How JRC learns about the network topology is out of scope of this specification, but could be done through 6LBR - JRC signaling for example.
Pairwise keys could also be derived through a key agreement protocol executed between the peers directly, where the authentication is based on the symmetric cryptographic material provided to both peers by the JRC.
Such a protocol is out of scope of this specification.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
</section>
<section anchor="short_identifier" title="Short Identifier">

<t>The Short_Identifier object represents an identifier assigned to the pledge.
It is encoded as a CBOR array object, containing, in order:</t>

<t><list style="symbols">
  <t>identifier: The short identifier assigned to the pledge, encoded as a byte string.
This parameter MUST be included.
The identifier MUST be unique in the set of all identifiers assigned in a network that is managed by a JRC.
In case the identifier is invalid, the decoder MUST silently ignore the Short_Identifier object.</t>
  <t>lease_time: The validity of the identifier in hours after the reception of the CBOR object, encoded as a CBOR unsigned integer.
This parameter MAY be included.
The node MUST stop using the assigned short identifier after the expiry of the lease_time interval.
It is up to the JRC to renew the lease before the expiry of the previous interval.
The JRC updates the lease by executing the Parameter Update exchange with the node and including the Short_Identifier in the Configuration object, as described in <xref target="update"/>.
In case the lease expires, the node SHOULD initiate a new join exchange, as described in <xref target="join"/>.
In case this parameter is omitted, the value of positive infinity MUST be assumed, meaning that the identifier is valid for as long as the node participates in the network.</t>
</list></t>

<t>The CDDL fragment that represents the text above for the Short_Identifier follows.</t>

<figure><artwork><![CDATA[
Short_Identifier = [
      identifier        : bstr,
    ? lease_time        : uint
]
]]></artwork></figure>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="use-in-ieee-std-802154-1" title="Use in IEEE Std 802.15.4">

<t>When Short_Identifier is used in the context of <xref target="IEEE802.15.4"/>, following considerations apply.</t>

<t>The identifier MUST be used to set the short address of IEEE Std 802.15.4 module.
When operating in TSCH mode, the identifier MUST be unique in the set of all identifiers assigned in multiple networks that share link-layer key(s).
If the length of the byte string corresponding to the identifier parameter is different than 2, the identifier is considered invalid.
The values 0xfffe and 0xffff are reserved by <xref target="IEEE802.15.4"/> and their use is considered invalid.</t>

<t>The security properties offered by the <xref target="IEEE802.15.4"/> link-layer in TSCH mode are conditioned on the uniqueness requirement of the short identifier (i.e. short address).
The short address is one of the inputs in the construction of the nonce, which is used to protect link-layer frames.
If a misconfiguration occurs, and the same short address is assigned twice under the same link-layer key, the loss of security properties is eminent.
For this reason, practices where the pledge generates the short identifier locally are not safe and are likely to result in the loss of link-layer security properties.</t>

<t>The JRC MUST ensure that at any given time there are never two same short identifiers being used under the same link-layer key.
If the lease_time parameter of a given Short_Identifier object is set to positive infinity, care needs to be taken that the corresponding identifier is not assigned to another node until the JRC is certain that it is no longer in use, potentially through out-of-band signaling.
If the lease_time parameter expires for any reason, the JRC should take into consideration potential ongoing transmissions by the joined node, which may be hanging in the queues, before assigning the same identifier to another node.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
</section>
<section anchor="error_object" title="Error Object">

<t>The Error object is encoded as a CBOR array object, containing in order:</t>

<t><list style="symbols">
  <t>error_code: Error code for the first encountered error while processing a CoJP object, encoded as an unsigned integer.
This parameter MUST be included.
This parameter MUST be set to the "Value" column of the "CoJP Error Registry" (<xref target="iana_cojp_error_registry"/>).</t>
  <t>error_addinfo: Additional information relevant to the error.
This parameter MUST be included.
This parameter MUST be set as described by the "Additional info" column of the "CoJP Error Registry" (<xref target="iana_cojp_error_registry"/>).</t>
  <t>error_description: Human-readable description of the error, encoded as a text string.
This parameter MAY be included.
The RECOMMENDED setting of this parameter is the "Description" column of the "CoJP Error Registry" <xref target="iana_cojp_error_registry"/>).</t>
</list></t>

<t>The CDDL fragment that represents the text above for the Error object follows.</t>

<figure><artwork><![CDATA[
Error = [
        error_code        : int,
        error_addinfo     : int / bstr / tstr / nil,
      ? error_description : tstr,
]
]]></artwork></figure>

<texttable title="CoJP error codes." anchor="table_errors">
      <ttcol align='right'>Description</ttcol>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='right'>Additional info</ttcol>
      <ttcol align='left'>Additional info type</ttcol>
      <ttcol align='right'>Reference</ttcol>
      <c>Invalid Join_Request object</c>
      <c>0</c>
      <c>None</c>
      <c>nil</c>
      <c>[[this document]]</c>
      <c>Invalid Configuration object</c>
      <c>1</c>
      <c>None</c>
      <c>nil</c>
      <c>[[this document]]</c>
      <c>Invalid parameter: role</c>
      <c>2</c>
      <c>None</c>
      <c>nil</c>
      <c>[[this document]]</c>
      <c>Invalid parameter: network identifier</c>
      <c>3</c>
      <c>None</c>
      <c>nil</c>
      <c>[[this document]]</c>
      <c>Invalid parameter: link-layer key set</c>
      <c>4</c>
      <c>None</c>
      <c>nil</c>
      <c>[[this document]]</c>
      <c>Invalid parameter: link-layer key</c>
      <c>5</c>
      <c>Index of the invalid key</c>
      <c>uint</c>
      <c>[[this document]]</c>
      <c>Invalid paramater: short identifier</c>
      <c>6</c>
      <c>None</c>
      <c>nil</c>
      <c>[[this document]]</c>
      <c>Invalid parameter: JRC address</c>
      <c>7</c>
      <c>None</c>
      <c>nil</c>
      <c>[[this document]]</c>
      <c>Invalid parameter: network prefix</c>
      <c>8</c>
      <c>None</c>
      <c>nil</c>
      <c>[[this document]]</c>
      <c>Invalid parameter: OSCORE partial IV</c>
      <c>9</c>
      <c>Next acceptable OSCORE partial IV</c>
      <c>bstr</c>
      <c>[[this document]]</c>
</texttable>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
</section>
<section anchor="parameters" title="Parameters">

<t>CoJP uses the following parameters:</t>

<figure><artwork align="center"><![CDATA[
+-----------------------+----------------+
| Name                  | Default Value  |
+-----------------------+----------------+
| TIMEOUT_BASE          | 10 s           |
+-----------------------+----------------+
| TIMEOUT_RANDOM_FACTOR | 1.5            |
+-----------------------+----------------+
| MAX_RETRANSMIT        | 4              |
+----------------------------------------+
]]></artwork></figure>

<t>The values of TIMEOUT_BASE, TIMEOUT_RANDOM_FACTOR, MAX_RETRANSMIT may be configured to values specific to the deployment.
The default values have been chosen to accommodate a wide range of deployments, taking into account dense networks.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

</section>
<section anchor="mti_algos" title="Mandatory to Implement Algorithms">

<t>The mandatory to implement AEAD algorithm for use with OSCORE is AES-CCM-16-64-128 from <xref target="RFC8152"/>.
This is the algorithm used for securing IEEE Std 802.15.4 frames, and hardware acceleration for it is present in virtually all compliant radio chips.
With this choice, CoAP messages are protected with an 8-byte CCM authentication tag, and the algorithm uses 13-byte long nonces.</t>

<t>The mandatory to implement hash algorithm is SHA-256 <xref target="RFC4231"/>.</t>

<t>The mandatory to implement key derivation function is HKDF <xref target="RFC5869"/>, instantiated with a SHA-256 hash.</t>

<!-- ====================================================================== -->

</section>
</section>
<section anchor="sec_considerations" title="Security Considerations">

<t>Since this document uses the pledge identifier to set the ID Context parameter of OSCORE, an important security requirement is that the pledge identifier is unique in the set of all pledge identifiers managed by a JRC.
The uniqueness of the pledge identifier ensures unique (key, nonce) pairs for AEAD algorithm used by OSCORE.
It also allows the JRC to retrieve the correct security context, upon the reception of a Join Request message.
The management of pledge identifiers is simplified if the globally unique EUI-64 is used, but this comes with privacy risks, as discussed in <xref target="privacy_considerations"/>.</t>

<t>This document further mandates that the (6LBR) pledge and the JRC are provisioned with unique PSKs.
The PSK is used to set the OSCORE Master Secret during security context derivation and is important for mutual authentication of the (6LBR) pledge and the JRC.
Should an attacker come to know the PSK, then a man-in-the-middle attack is possible.</t>

<t>Many vendors are known to use unsafe practices when generating and provisioning PSKs.
The use of a single PSK shared among a group of devices is a common pitfall that results in poor security.
In this case, the compromise of a single device is likely to lead to a compromise of the whole batch, with the attacker having the ability to impersonate a legitimate device and join the network, generate bogus data and disturb the network operation.
As a reminder, recall the well-known problem with Bluetooth headsets with a "0000" pin.
Additionally, some vendors use methods such as scrambling or hashing of device serial numbers or their EUI-64 to generate "unique" PSKs.
Without any secret information involved, the effort that the attacker needs to invest into breaking these unsafe derivation methods is quite low, resulting in the possible impersonation of any device from the batch, without even needing to compromise a single device.
The use of cryptographically secure random number generators to generate the PSK is RECOMMENDED, see <xref target="NIST800-90A"/> for different mechanisms using deterministic methods.</t>

<t>The JP forwards the unauthenticated join traffic into the network.
A simple bandwidth cap on the JP prevents it from forwarding more traffic than the network can handle.
This forces attackers to use more than one Join Proxy if they wish to overwhelm the network.
Marking the join traffic packets with a non-zero DSCP allows the network to carry the traffic if it has capacity, but encourages the network to drop the extra traffic rather than add bandwidth due to that traffic.</t>

<t>The shared nature of the "minimal" cell used for the join traffic makes the network prone to DoS attacks by congesting the JP with bogus traffic.
Such an attacker is limited by its maximum transmit power.
The redundancy in the number of deployed JPs alleviates the issue and also gives the pledge a possibility to use the best available link for joining.
How a network node decides to become a JP is out of scope of this specification.</t>

<t>At the beginning of the join process, the pledge has no means of verifying the content in the EB, and has to accept it at "face value".
In case the pledge tries to join an attacker's network, the Join Response message will either fail the security check or time out.
The pledge may implement a temporary blacklist in order to filter out undesired EBs and try to join using the next seemingly valid EB.
This blacklist alleviates the issue, but is effectively limited by the node's available memory.
Bogus beacons prolong the join time of the pledge, and so the time spent in "minimal" <xref target="RFC8180"/> duty cycle mode.</t>

<!-- ====================================================================== -->

</section>
<section anchor="privacy_considerations" title="Privacy Considerations">

<t>The join solution specified in this document relies on the uniqueness of the pledge identifier in the set of all pledge identifiers managed by a JRC.
This identifier is transferred in clear as an OSCORE kid context.
The use of the globally unique EUI-64 as pledge identifier simplifies the management but comes with certain privacy risks.
The implications are thoroughly discussed in <xref target="RFC7721"/> and comprise correlation of activities over time, location tracking, address scanning and device-specific vulnerability exploitation.
Since the join process occurs rarely compared to the network lifetime, long-term threats that arise from using EUI-64 as the pledge identifier are minimal.
In addition, the Join Response message contains a short address which is assigned by the JRC to the (6LBR) pledge.
The assigned short address SHOULD be uncorrelated with the long-term pledge identifier.
The short address is encrypted in the response.
Once the join process completes, the new node uses the short addresses for all further layer 2 (and layer-3) operations.
This reduces the aforementioned privacy risks as the short layer-2 address (visible even when the network is encrypted) is not traceable between locations and does not disclose the manufacturer, as is the case of EUI-64.
However, an eavesdropper with access to the radio medium during the join process may be able to correlate the assigned short address with the extended address based on timing information with a non-negligible probability.
This probability decreases with an increasing number of pledges joining concurrently.</t>

<!-- ====================================================================== -->

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

<t>Note to RFC Editor: Please replace all occurrences of "[[this document]]" with the RFC number of this specification.</t>

<t>This document allocates a well-known name under the .arpa name space according to the rules given in <xref target="RFC3172"/>.
The name "6tisch.arpa" is requested.
No subdomains are expected.
No A, AAAA or PTR record is requested.</t>

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

<section anchor="iana_cojp_registry" title="CoJP Parameters Registry">

<t>This section defines a sub-registries within the "IPv6 over the TSCH mode of IEEE 802.15.4e (6TiSCH) parameters" registry with the name "Constrained Join Protocol Parameters Registry".</t>

<t>The columns of the registry are:</t>

<t>Name: This is a descriptive name that enables an easier reference to the item.
It is not used in the encoding.</t>

<t>Label: The value to be used to identify this parameter.
The label is an unsigned integer.</t>

<t>CBOR type: This field contains the CBOR type for the field.</t>

<t>Description: This field contains a brief description for the field.</t>

<t>Reference: This field contains a pointer to the public specification for the field, if one exists.</t>

<t>This registry is to be populated with the values in <xref target="table_cojp_parameters_labels"/>.</t>

<t>The amending formula for this sub-registry is: Different ranges of values use different registration policies <xref target="RFC8126"/>.
Integer values from -256 to 255 are designated as Standards Action.
Integer values from -65536 to -257 and from 256 to 65535 are designated as Specification Required.
Integer values greater than 65535 are designated as Expert Review.
Integer values less than -65536 are marked as Private Use.</t>

</section>
<section anchor="iana_cojp_key_usage_registry" title="CoJP Key Usage Registry">

<t>This section defines a sub-registries within the "IPv6 over the TSCH mode of IEEE 802.15.4e (6TiSCH) parameters" registry with the name "Constrained Join Protocol Key Usage Registry".</t>

<t>The columns of this registry are:</t>

<t>Name:  This is a descriptive name that enables easier reference to the item.
The name MUST be unique.
It is not used in the encoding.</t>

<t>Value:  This is the value used to identify the key usage setting.
These values MUST be unique.
The value is an integer.</t>

<t>Algorithm: This is a descriptive name of the link-layer algorithm in use and uniquely determines the key length.
The name is not used in the encoding.</t>

<t>Description:  This field contains a description of the key usage setting.
The field should describe in enough detail how the key is to be used with different frame types, specific for the link-layer technology in question.</t>

<t>Reference:  This contains a pointer to the public specification for the field, if one exists.</t>

<t>This registry is to be populated with the values in <xref target="table_key_usage_values"/>.</t>

<t>The amending formula for this sub-registry is: Different ranges of values use different registration policies <xref target="RFC8126"/>.
Integer values from -256 to 255 are designated as Standards Action.
Integer values from -65536 to -257 and from 256 to 65535 are designated as Specification Required.
Integer values greater than 65535 are designated as Expert Review.
Integer values less than -65536 are marked as Private Use.</t>

</section>
<section anchor="iana_cojp_error_registry" title="CoJP Error Registry">

<t>This section defines a sub-registries within the "IPv6 over the TSCH mode of IEEE 802.15.4e (6TiSCH) parameters" registry with the name "Constrained Join Protocol Error Registry".</t>

<t>The columns of this registry are:</t>

<t>Description:  This is a descriptive human-readble name.
The description MUST be unique.
It is not used in the encoding.</t>

<t>Value:  This is the value used to identify the error.
These values MUST be unique.
The value is an integer.</t>

<t>Additional information: This is a descriptive name of additional information that is meaningful for the error.
The name is not used in the encoding.</t>

<t>Additional information type: A CBOR type of the additional information field.</t>

<t>Reference:  This contains a pointer to the public specification for the field, if one exists.</t>

<t>This registry is to be populated with the values in <xref target="table_errors"/>.</t>

<t>The amending formula for this sub-registry is: Different ranges of values use different registration policies <xref target="RFC8126"/>.
Integer values from -256 to 255 are designated as Standards Action.
Integer values from -65536 to -257 and from 256 to 65535 are designated as Specification Required.
Integer values greater than 65535 are designated as Expert Review.
Integer values less than -65536 are marked as Private Use.</t>

<!-- ====================================================================== -->

</section>
</section>
<section anchor="acknowledgments" title="Acknowledgments">

<t>The work on this document has been partially supported by the European Union's H2020 Programme for research, technological development and demonstration under grant agreement No 644852, project ARMOUR.</t>

<t>The following individuals provided input to this document (in alphabetic order):
Tengfei Chang,
Klaus Hartke,
Tero Kivinen,
Jim Schaad,
Goeran Selander,
Yasuyuki Tanaka,
Pascal Thubert,
William Vignat,
Xavier Vilajosana,
Thomas Watteyne.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>

&I-D.ietf-core-object-security;
&RFC7252;
&RFC7049;
&RFC8152;
&RFC2119;
&RFC2597;
&RFC3172;
&RFC8126;


    </references>

    <references title='Informative References'>

&I-D.ietf-6tisch-6top-protocol;
&I-D.ietf-6tisch-terminology;
&I-D.ietf-6tisch-architecture;
&I-D.ietf-cbor-cddl;
&I-D.hartke-core-stateless;
&RFC8180;
&RFC7721;
&RFC7554;
&RFC4944;
&RFC6775;
&RFC6550;
&RFC4231;
&RFC5869;
<reference anchor="IEEE802.15.4" >
  <front>
    <title>IEEE Std 802.15.4 Standard for Low-Rate Wireless Networks</title>
    <author initials="." surname="IEEE standard for Information Technology">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="NIST800-90A" >
  <front>
    <title>Recommendation for Random Number Generation Using Deterministic Random Bit Generators</title>
    <author initials="." surname="NIST Special Publication 800-90A, Revision 1">
      <organization></organization>
    </author>
    <author initials="E." surname="Barker">
      <organization></organization>
    </author>
    <author initials="J." surname="Kelsey">
      <organization></organization>
    </author>
    <date year="2015"/>
  </front>
</reference>


    </references>


<!-- ====================================================================== -->

<section anchor="example" title="Example">

<t><xref target="fig_example"/> illustrates a successful join protocol exchange.
The pledge instantiates the OSCORE context and derives the AEAD keys and nonces from the PSK.
It uses the instantiated context to protect the Join Request addressed with
    a Proxy-Scheme option,
    the well-known host name of the JRC in the Uri-Host option, and
    its EUI-64 as pledge identifier and OSCORE kid context.
Triggered by the presence of a Proxy-Scheme option, the JP forwards the request to the JRC and sets the CoAP token to the internally needed state.
The JP has learned the IPv6 address of the JRC when it acted as a pledge and joined the network.
Once the JRC receives the request, it looks up the correct context based on the kid context parameter.
OSCORE data authenticity verification ensures that the request has not been modified in transit.
In addition, replay protection is ensured through persistent handling of mutable context parameters.</t>

<t>Once the JP receives the Join Response, it authenticates the state within the CoAP token before deciding where to forward.
The JP sets its internal state to that found in the token, and forwards the Join Response to the correct pledge.
Note that the JP does not possess the key to decrypt the CBOR object (configuration) present in the payload.
The Join Response is matched to the Join Request and verified for replay protection at the pledge using OSCORE processing rules.
In this example, the Join Response does not contain the IPv6 address of the JRC, the pledge hence understands the JRC is co-located with the 6LBR.</t>

<figure title="Example of a successful join protocol exchange. { ... } denotes encryption and authentication, [ ... ] denotes authentication." anchor="fig_example"><artwork align="center"><![CDATA[
  <---E2E OSCORE-->
Client      Proxy     Server
Pledge       JP        JRC
  |          |          |
  |  Join    |          |            Code: { 0.02 } (POST)
  | Request  |          |           Token: 0x8c
  +--------->|          |    Proxy-Scheme: [ coap ]
  |  POST    |          |        Uri-Host: [ 6tisch.arpa ]
  |          |          | Object-Security: [ kid: 0 ]
  |          |          |         Payload: kid_context: EUI-64
  |          |          |                  [ Partial IV: 1,
  |          |          |                    { Uri-Path:"j",
  |          |          |                      join_request },
  |          |          |                      <Tag> ]
  |          |          |
  |          |  Join    |            Code: { 0.01 } (GET)
  |          | Request  |           Token: opaque state
  |          +--------->|        Uri-Host: [ 6tisch.arpa ]
  |          | POST     | Object-Security: [ kid: 0 ]
  |          |          |         Payload: kid_context: EUI-64
  |          |          |                  [ Partial IV: 1,
  |          |          |                    { Uri-Path:"j",
  |          |          |                      join_request },
  |          |          |                      <Tag> ]
  |          |          |
  |          |  Join    |            Code: { 2.05 } (Content)
  |          | Response |           Token: 0x7b
  |          |<---------+ Object-Security: -
  |          | 2.04     |         Payload: [ { configuration }, <Tag> ]
  |          |          |
  |  Join    |          |            Code: { 2.05 } (Content)
  | Response |          |           Token: 0x8c
  |<---------+          | Object-Security: -
  | 2.04     |          |         Payload: [ { configuration }, <Tag> ]
  |          |          |
]]></artwork></figure>

<t>Where the join_request object is:</t>

<figure><artwork><![CDATA[
join_request:
{
    5 : h'cafe' / PAN ID of the network pledge is attempting to join /
}
]]></artwork></figure>

<t>Since the role parameter is not present, the default role of "6TiSCH Node" is implied.</t>

<t>The join_request object encodes to h'a10542cafe' with a size of 5 bytes.</t>

<t>And the configuration object is:</t>

<figure><artwork><![CDATA[
configuration:
{
    2 : [           / link-layer key set /
          1,        / key_id /
          h'e6bf4287c2d7618d6a9687445ffd33e6' / key_value /
        ],
    3 : [           / short identifier /
          h'af93'   / assigned short address /
        ]
}
]]></artwork></figure>

<t>Since the key_usage parameter is not present in the link-layer key set object, the default value of "6TiSCH-K1K2-ENC-MIC32" is implied.
Since key_addinfo parameter is not present and key_id is different than 0, Key ID Mode 0x01 (Key Index) is implied.
Similarly, since the lease_time parameter is not present in the short identifier object, the default value of positive infinity is implied.</t>

<t>The configuration object encodes to</t>

<t>h'a202820150e6bf4287c2d7618d6a9687445ffd33e6038142af93' with a size of 26 bytes.</t>

</section>


  </back>

<!-- ##markdown-source:
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
O9gCMmUErOjx6oSanmdwfONJcAWa4QSwnNbhiIrYRHuJy3XSOqOWrF1xWUf9
kpOIlEAXwgyD6BgdWhtQZG8hYHNR6zEt156FGnaupUngI+ybVIuoJMjouNwd
rcBBxLuOn6qd+0B6kjuY1mqMiUQ61TmvtVt1t3M9ndHh43fITVaC+sOkCkrJ
FiJnlMJYvE6lOhYRb0/ZHup6RC2hAxsLM+tkakZoM7BaB2RH4HlXJ4otxKe7
tCAKbHQJRhq2CgYO66j8aCyE2zhahUG1EESfAQQOER0pUPzezKPh0kmqN0oi
5JYmB7oFGblq4/Q6az6GLSODj/XwYEbQuA4Uyb1OSn5nL78F+9tFftKggj/b
qdFZRVFoKJc4qdykhTbLQFcL6UcYv4sNUfKE81Px2AslXF68iE7PX5c2hwI7
g8uWu6vlTDUnYk8A532TlUHtZGlPNic5kiHo1Poq+qjJq3lyHsKAooG/Y6dY
BLbYa7ZyYn4a/u2tMAFrxJYMHWK9lTeUfpH/pia5Xg0fzVIK7XpdRyKZzPmZ
CgdeQE5QjFLMBnJnMkemnG/N4yqb0j9Bu0H0X6G3PvNjTTOFItDCw6EH3WW+
sDxeNUJvxjRhLLHVHZVLaJ5VZVV8wDCSjDUthxugxlwwiU+Q1FhSyT/LikzM
tj5nNUpUhl2fLmnYOzaLwmFiKxf2U+D0KjL4cAf2lpOlQQ4CFOoTMG3jDnHy
0x0LMTJO4+tw55FrUnUMwgjFZiPK1pkzEZQ5MYv4fZ5y9qyxbERbVihWE4f1
nkU1cVoxbJ1/ZwxyJp6BVcXKadtQNL4OHr1F2d74+9p2Q6NJSHOERzHyoH1z
6QgUyQ1Sru/sFBhgKmH04UCtYq8qFsfakrrk58wEFd/cQOM4sO7eKULZvYj6
0n2UNgEuP+E4It6PxO4Ggck0iyuK+2VaqOoxySPKdhS5xM6WchqLfm4u9CVm
HmLe3j4qphCkaJ67TjKMsb+5oXAtzlh1+O0TOLk2zykdbOhqMMuXzqoiKqIw
oiTD5I8TH319mk6nmAsYFGZYlYucwgi3T69OLsqdLlJ01xQ8hV0G819KBQUV
bpaUN5npyuqoqIrcWcXp+PnBI05NyarMNiZ3UTTJY4ck4XmTi90Ojbpz2kU4
wszTjHMcCQQPH+S76x9JQfur46aI1MWShOkJHjDq8crzP1+i4Or5TlSssozh
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

-->

</rfc>

