summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9031.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc9031.txt')
-rw-r--r--doc/rfc/rfc9031.txt2369
1 files changed, 2369 insertions, 0 deletions
diff --git a/doc/rfc/rfc9031.txt b/doc/rfc/rfc9031.txt
new file mode 100644
index 0000000..775a092
--- /dev/null
+++ b/doc/rfc/rfc9031.txt
@@ -0,0 +1,2369 @@
+
+
+
+
+Internet Engineering Task Force (IETF) M. Vučinić, Ed.
+Request for Comments: 9031 Inria
+Category: Standards Track J. Simon
+ISSN: 2070-1721 Analog Devices
+ K. Pister
+ University of California Berkeley
+ M. Richardson
+ Sandelman Software Works
+ May 2021
+
+
+ Constrained Join Protocol (CoJP) for 6TiSCH
+
+Abstract
+
+ This document describes the minimal framework required for a new
+ device, called a "pledge", to securely join a 6TiSCH (IPv6 over the
+ Time-Slotted Channel Hopping mode of IEEE 802.15.4) network. The
+ framework requires that the pledge and the JRC (Join Registrar/
+ Coordinator, a central entity), share a symmetric key. How this key
+ is provisioned is out of scope of this document. Through a single
+ CoAP (Constrained Application Protocol) request-response exchange
+ secured by OSCORE (Object Security for Constrained RESTful
+ Environments), the pledge requests admission into the network, and
+ the JRC configures it with link-layer keying material and other
+ parameters. The JRC may at any time update the parameters through
+ another request-response exchange secured by OSCORE. This
+ specification defines the Constrained Join Protocol and its CBOR
+ (Concise Binary Object Representation) data structures, and it
+ describes how to configure the rest of the 6TiSCH communication stack
+ for this join process to occur in a secure manner. Additional
+ security mechanisms may be added on top of this minimal framework.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9031.
+
+Copyright Notice
+
+ Copyright (c) 2021 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 2. Terminology
+ 3. Provisioning Phase
+ 4. Join Process Overview
+ 4.1. Step 1 - Enhanced Beacon
+ 4.2. Step 2 - Neighbor Discovery
+ 4.3. Step 3 - Constrained Join Protocol (CoJP) Execution
+ 4.4. The Special Case of the 6LBR Pledge Joining
+ 5. Link-Layer Configuration
+ 5.1. Distribution of Time
+ 6. Network-Layer Configuration
+ 6.1. Identification of Unauthenticated Traffic
+ 7. Application-Layer Configuration
+ 7.1. Statelessness of the JP
+ 7.2. Recommended Settings
+ 7.3. OSCORE
+ 8. Constrained Join Protocol (CoJP)
+ 8.1. Join Exchange
+ 8.2. Parameter Update Exchange
+ 8.3. Error Handling
+ 8.4. CoJP Objects
+ 8.5. Recommended Settings
+ 9. Security Considerations
+ 10. Privacy Considerations
+ 11. IANA Considerations
+ 11.1. Constrained Join Protocol (CoJP) Parameters
+ 11.2. Constrained Join Protocol (CoJP) Key Usage
+ 11.3. Constrained Join Protocol (CoJP) Unsupported Configuration
+ Codes
+ 12. References
+ 12.1. Normative References
+ 12.2. Informative References
+ Appendix A. Example
+ Appendix B. Lightweight Implementation Option
+ Acknowledgments
+ Authors' Addresses
+
+1. Introduction
+
+ This document defines a "secure join" solution for a new device,
+ called a "pledge", to securely join a 6TiSCH network. The term
+ "secure join" refers to network access authentication, authorization,
+ and parameter distribution as defined in [RFC9030]. The Constrained
+ Join Protocol (CoJP) defined in this document handles parameter
+ distribution needed for a pledge to become a joined node. Mutual
+ authentication during network access and implicit authorization are
+ achieved through the use of a secure channel as configured according
+ to this document. This document also specifies a configuration of
+ different layers of the 6TiSCH protocol stack that reduces the Denial
+ of Service (DoS) attack surface during the join process.
+
+ This document presumes a 6TiSCH network as described by [RFC7554] and
+ [RFC8180]. By design, nodes in a 6TiSCH network [RFC7554] have their
+ radio turned off most of the time in order to conserve energy. As a
+ consequence, the link used by a new device for joining the network
+ has limited bandwidth [RFC8180]. The secure join solution defined in
+ this document therefore keeps the number of over-the-air exchanges to
+ a minimum.
+
+ The microcontrollers at the heart of 6TiSCH nodes have small amounts
+ 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 [RFC7252] for web
+ transfer and on OSCORE [RFC8613] for its end-to-end security. The
+ secure join solution defined in this document therefore reuses those
+ two protocols as its building blocks.
+
+ CoJP is a generic protocol that can be used as-is in all modes of
+ IEEE Std 802.15.4 [IEEE802.15.4], including the Time-Slotted Channel
+ Hopping (TSCH) mode on which 6TiSCH is based. CoJP may also 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 define through companion
+ documents the configuration parameters specific to the technology in
+ question. The overall process is described in Section 4, and the
+ configuration of the stack is specific to 6TiSCH.
+
+ CoJP assumes the presence of a Join Registrar/Coordinator (JRC), a
+ central entity. The configuration defined in this document assumes
+ that the pledge and the JRC share a unique symmetric cryptographic
+ 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 during the
+ provisioning phase or by a key exchange protocol that may precede the
+ execution of CoJP.
+
+ When the pledge seeks admission to a 6TiSCH network, it first
+ synchronizes to it by initiating the passive scan defined in
+ [IEEE802.15.4]. The pledge then exchanges CoJP messages with the
+ JRC; for this end-to-end communication to happen, the messages are
+ forwarded by nodes, called Join Proxies, that are already part of the
+ 6TiSCH network. The messages exchanged allow the JRC and the pledge
+ to mutually authenticate based on the properties provided by OSCORE.
+ They also allow the JRC to configure the pledge with link-layer
+ keying material, a 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
+ 6TiSCH Operation Sublayer (6top) Protocol [RFC8480] and can start
+ sending application traffic.
+
+2. Terminology
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in BCP
+ 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+ The reader is expected to be familiar with the terms and concepts
+ defined in [RFC9030], [RFC7252], [RFC8613], and [RFC8152].
+
+ The specification also includes a set of informative specifications
+ using the Concise Data Definition Language (CDDL) [RFC8610].
+
+ The following terms defined in [RFC9030] are used extensively
+ throughout this document:
+
+ * pledge
+
+ * joined node
+
+ * Join Proxy (JP)
+
+ * Join Registrar/Coordinator (JRC)
+
+ * Enhanced Beacon (EB)
+
+ * join protocol
+
+ * join process
+
+ The following terms defined in [RFC8505] are also used throughout
+ this document:
+
+ * 6LoWPAN Border Router (6LBR)
+
+ * 6LoWPAN Node (6LN)
+
+ The term "6LBR" is used interchangeably with the term "DODAG root"
+ defined in [RFC6550] on the assumption that the two entities are co-
+ located, as recommended by [RFC9030].
+
+ The term "pledge", as used throughout the document, explicitly
+ denotes non-6LBR devices attempting to join the network using their
+ 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
+ applies equally to the pledge and the 6LBR pledge, the "(6LBR)
+ pledge" form is used.
+
+ In addition, we use generic terms "pledge identifier" and "network
+ identifier". See Section 3.
+
+3. Provisioning Phase
+
+ The (6LBR) pledge is provisioned with certain parameters before
+ attempting to join the network, and the same parameters are
+ provisioned to the JRC. There are many ways by which this
+ provisioning can be done. Physically, the parameters can be written
+ into the (6LBR) pledge with a number of mechanisms, such as using a
+ JTAG (Joint Test Action Group) interface, using a serial (craft)
+ console interface, pushing buttons simultaneously on different
+ devices, configuring over-the-air in a Faraday cage, etc. The
+ provisioning can be done by the vendor, the manufacturer, the
+ integrator, etc.
+
+ Details of how this provisioning is done are 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.
+
+ Parameters that are provisioned to the (6LBR) pledge include:
+
+ pledge identifier: 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
+ Section 9. The pledge identifier is typically the globally unique
+ 64-bit Extended Unique Identifier (EUI-64) of the IEEE Std
+ 802.15.4 device, in which case it is provisioned by the hardware
+ manufacturer. The pledge identifier is used to generate the IPv6
+ addresses of the (6LBR) pledge and to identify it during the
+ execution of the join protocol. Depending on the configuration,
+ the pledge identifier may also be used after the join process to
+ identify the joined node. For privacy reasons (see Section 10),
+ 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.
+
+ Pre-Shared Key (PSK): A symmetric cryptographic key shared between
+ the (6LBR) pledge and the JRC. To look up the PSK for a given
+ pledge, the JRC additionally needs to store the corresponding
+ pledge identifier. Each (6LBR) pledge MUST be provisioned with a
+ unique PSK. The PSK MUST be a cryptographically strong key, with
+ at least 128 bits of entropy, 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
+ Section 9. In the case of recommissioning a device to a new
+ owner, the PSK MUST be changed. Note that the PSK is different
+ from the link-layer keys K1 and K2 specified in [RFC8180]. The
+ PSK is a long-term secret used to protect the execution of the
+ secure join protocol specified in this document; the link-layer
+ keys are transported as part of the secure join protocol.
+
+ Optionally, a network identifier: 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 [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.
+ Provisioning the network identifier to a pledge is RECOMMENDED.
+ However, due to operational constraints, the network identifier
+ may not be known at the time of provisioning. If this parameter
+ is not provisioned to the pledge, the pledge will attempt to join
+ one advertised network at a time, which significantly prolongs the
+ join process. This parameter MUST be provisioned to the 6LBR
+ pledge.
+
+ Optionally, any non-default algorithms: The default algorithms are
+ specified in Section 7.3.3. When algorithm identifiers are not
+ provisioned, the use of these default algorithms is implied.
+
+ Additionally, the 6LBR pledge that is not co-located with the JRC
+ needs to be provisioned with the following:
+
+ 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 [RFC8415], Generic Autonomic
+ Signaling Protocol (GRASP) [RFC8990], or Multicast DNS (mDNS)
+ [RFC6762]; the use of these mechanisms is out of scope of this
+ document. Pledges do not need to be provisioned with this address
+ as they discover it dynamically through CoJP.
+
+4. Join Process Overview
+
+ 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:
+
+ 1. The pledge listens for an Enhanced Beacon (EB) frame
+ [IEEE802.15.4]. This frame provides network synchronization
+ information, telling 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 EB
+ provides the link-layer address of the JP, and it may also
+ provide its link-local IPv6 address.
+
+ 2. The pledge configures its link-local IPv6 address and advertises
+ it to the JP using Neighbor Discovery. The advertisement step
+ may be omitted if the link-local address has been derived from a
+ known unique interface identifier, such as an EUI-64 address.
+
+ 3. 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.
+
+ 4. In the 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.
+
+ From the pledge's perspective, joining is a local phenomenon -- 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.
+
+ The join process is shown as a transaction diagram in Figure 1:
+
+ +--------+ +-------+ +--------+
+ | pledge | | JP | | JRC |
+ | | | | | |
+ +--------+ +-------+ +--------+
+ | | |
+ |<---Enhanced Beacon (1)---| |
+ | | |
+ |<-Neighbor Discovery (2)->| |
+ | | |
+ |-----Join Request (3a)----|----Join Request (3a)---->| \
+ | | | | CoJP
+ |<----Join Response (3b)---|----Join Response (3b)----| /
+ | | |
+
+ Figure 1: Overview of a successful join process.
+
+ As for other nodes in the network, the 6LBR node may act as the JP.
+ The 6LBR may in addition be co-located with the JRC.
+
+ The details of each step are described in the following sections.
+
+4.1. Step 1 - Enhanced Beacon
+
+ The pledge synchronizes to the network by listening for, and
+ receiving, an EB sent by a node already in the network. This process
+ is entirely defined by [IEEE802.15.4] and described in [RFC7554].
+
+ 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 [RFC7554]. Implementers should make use
+ of information such as the following: which 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, at which
+ signal strength the different EBs were received, etc. In addition,
+ the pledge may be preconfigured to search for EBs with a specific
+ network identifier.
+
+ If the pledge is not provisioned with the network identifier, it
+ attempts to join one network at a time, as described in
+ Section 8.1.1.
+
+ Once the pledge selects the EB, it synchronizes to it and transitions
+ into a low-power mode. It follows the schedule information contained
+ in the EB, 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.
+
+ At this point, the pledge may either proceed to step 2 or continue to
+ listen for additional EBs.
+
+4.2. Step 2 - Neighbor Discovery
+
+ The pledge forms its link-local IPv6 address based on the interface
+ identifier per [RFC4944]. The pledge MAY perform the Neighbor
+ Solicitation / Neighbor Advertisement exchange with the JP per
+ Section 5.6 of [RFC8505]. Per [RFC8505], there is no need to perform
+ duplicate address detection for the link-local address. The pledge
+ and the JP use their link-local IPv6 addresses for all subsequent
+ communication during the join process.
+
+ 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 the JP accepts these unprotected frames is
+ discussed in Section 5.
+
+4.3. Step 3 - Constrained Join Protocol (CoJP) Execution
+
+ 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 (Section 4.3.1)) and the Join Response
+ message, conditioned on the successful security processing of the
+ request (Step 3b (Section 4.3.2)).
+
+ 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 the JP and
+ pledge accept these unprotected frames is discussed in Section 5.
+ 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.
+
+4.3.1. Step 3a - Join Request
+
+ 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 links. How exactly this
+ happens is out of scope of this document; some networks may wish to
+ dedicate specific link-layer resources for this join traffic.
+
+4.3.2. Step 3b - Join Response
+
+ The Join Response is sent by the JRC to the pledge, and it is
+ forwarded through the JP. The packet containing the Join Response
+ travels from the JRC to the JP using the operating routes in the
+ network. The JP delivers it to the pledge. The JP operates as an
+ application-layer proxy, see Section 7.
+
+ The Join Response contains various parameters needed by the pledge to
+ become a fully operational network node. These parameters include
+ the link-layer key(s) currently in use in the network, the short
+ address assigned to the pledge, the IPv6 address of the JRC needed by
+ the pledge to operate as the JP, among others.
+
+4.4. The Special Case of the 6LBR Pledge Joining
+
+ The 6LBR pledge performs Section 4.3 of the join process just like
+ any other pledge, albeit over a different network interface. There
+ is no JP intermediating the communication between the 6LBR pledge and
+ the JRC, as described in Section 6. 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 CoJP is out of
+ scope of this document.
+
+5. Link-Layer Configuration
+
+ In an operational 6TiSCH network, all frames use link-layer frame
+ security [RFC8180]. The IEEE Std 802.15.4 security attributes
+ include frame authenticity and optionally frame confidentiality
+ (i.e., encryption).
+
+ Any node sending EB frames MUST be prepared to act as a JP for
+ potential pledges.
+
+ The pledge does not initially perform an authenticity check of the EB
+ frames because 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 [RFC8180].
+
+ When sending frames during the join process, the pledge sends
+ unencrypted and unauthenticated frames at the link layer. In order
+ for the join process to be possible, the JP must accept 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. It is expected that the
+ lower layer provides an interface to indicate to the upper layer that
+ unsecured frames are being received from a device. The upper layer
+ can use that information to determine that a join process is in place
+ and that the unsecured frames should be processed. How the JP makes
+ such a determination and interacts with the lower layer is out of
+ scope of this specification. The JP can additionally use information
+ such as the value of the join rate parameter (Section 8.4.2) set by
+ the JRC, physical button press, etc.
+
+ When the pledge initially synchronizes with the network, it has no
+ means of verifying the authenticity of EB frames. Because an
+ attacker can craft a frame that looks like a legitimate EB frame,
+ this opens up a DoS vector, as discussed in Section 9.
+
+5.1. Distribution of Time
+
+ Nodes in a 6TiSCH network keep a global notion of time known as the
+ Absolute Slot Number. The Absolute Slot Number is used in the
+ construction of the link-layer nonce, as defined in [IEEE802.15.4].
+ The pledge initially synchronizes with the EB frame sent by the JP
+ and uses the value of the Absolute Slot Number found in the TSCH
+ Synchronization Information Element. At the time of the
+ synchronization, the EB frame can neither be authenticated nor its
+ freshness verified. During the join process, the pledge sends frames
+ that are unprotected at the link-layer and protected end-to-end
+ instead. The pledge does not obtain the time information as the
+ output of the join process as this information is local to the
+ network and may not be known at the JRC.
+
+ This enables an attack on the pledge where the attacker replays to
+ the pledge legitimate EB frames obtained from the network and acts as
+ a man-in-the-middle between the pledge and the JP. The EB frames
+ will make the pledge believe that the replayed Absolute Slot Number
+ value is the current notion of time in the network. By forwarding
+ the join traffic to the legitimate JP, the attacker enables the
+ pledge to join the network. Under different conditions relating to
+ the reuse of the pledge's short address by the JRC or its attempt to
+ rejoin the network, this may cause the pledge to reuse the link-layer
+ nonce in the first frame it sends protected after the join process is
+ completed.
+
+ For this reason, all frames originated at the JP and destined to the
+ pledge during the join process MUST be authenticated at the link
+ layer using the key that is normally in use in the network. Link-
+ layer security processing at the pledge for these frames will fail as
+ the pledge is not yet in possession of the key. The pledge
+ acknowledges these frames without link-layer security, and JP accepts
+ the unsecured acknowledgment due to the secExempt attribute set for
+ the pledge. The frames should be passed to the upper layer for
+ processing using the promiscuous mode of [IEEE802.15.4] or another
+ appropriate mechanism. When the upper-layer processing on the pledge
+ is completed, and the link-layer keys are configured, the upper layer
+ MUST trigger the security processing of the corresponding frame.
+ Once the security processing of the frame carrying the Join Response
+ message is successful, the current Absolute Slot Number kept locally
+ at the pledge SHALL be declared as valid.
+
+6. Network-Layer Configuration
+
+ 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 the JP's neighbor table and prevent the
+ discovery of legitimate neighbors.
+
+ 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 its global IPv6 address. The joined
+ node then undergoes an independent process to bootstrap its neighbor
+ cache entries, possibly with a node that formerly acted as a JP,
+ following [RFC8505]. From the point of view of the JP, there is no
+ relationship between the neighbor cache entry belonging to a pledge
+ and the joined node that formerly acted as a pledge.
+
+ 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 Section 7.
+
+ 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 IPv6 address of
+ the JRC from the Join Response, as specified in Section 8.1.2; it
+ uses it once joined in order to operate as a JP.
+
+ As a special case, the 6LBR pledge may have an additional network
+ interface that it uses in order to obtain the configuration
+ parameters from the JRC and to 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.
+
+ 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 DODAG Information Objects (DIOs) [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.
+
+6.1. Identification of Unauthenticated Traffic
+
+ The traffic that is proxied by the JP comes from unauthenticated
+ pledges, and there may be an arbitrary amount of it. In particular,
+ an attacker may send fraudulent traffic in an attempt to overwhelm
+ the network.
+
+ When operating as part of a 6TiSCH minimal network [RFC8180] using
+ distributed scheduling algorithms, the traffic from unauthenticated
+ pledges 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.
+
+ The JP is aware of what traffic originates from unauthenticated
+ pledges, and so can avoid allocating additional bandwidth itself.
+ The JP implements a data cap on outgoing join traffic by implementing
+ the recommendation of 1 packet per 3 seconds in Section 3.1.3 of
+ [RFC8085]. This can be achieved with the congestion control
+ mechanism specified in Section 4.7 of [RFC7252]. This cap will not
+ protect intermediate nodes as they cannot tell join traffic from
+ regular traffic. Despite the data cap implemented separately on each
+ JP, the aggregate join traffic from many JPs may cause intermediate
+ nodes to decide to allocate additional cells. It is undesirable to
+ do so in response to the traffic originated from unauthenticated
+ pledges. In order to permit the intermediate nodes to avoid this,
+ the traffic needs to be tagged. [RFC2597] defines a set of per-hop
+ behaviors that may be encoded into the Diffserv Code Points (DSCPs).
+ Based on the DSCP, intermediate nodes can decide whether to act on a
+ given packet.
+
+6.1.1. Traffic from JP to JRC
+
+ The JP SHOULD set the DSCP of packets that it produces as part of the
+ forwarding process to AF43 code point (See Section 6 of [RFC2597]).
+ A JP that does not require a specific DSCP value on forwarded traffic
+ should set it to zero so that it is compressed out.
+
+ 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.
+
+6.1.2. Traffic from JRC to JP
+
+ The JRC SHOULD set the DSCP of Join Response packets addressed to the
+ JP to the AF42 code point. AF42 has lower drop probability than
+ AF43, giving this traffic priority in buffers over the traffic going
+ towards the JRC.
+
+ The 6LBR links are often the most congested within a DODAG, 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.
+
+ Companion SF documents SHOULD specify how traffic with code point
+ AF42 is handled with respect to cell allocation. If the recommended
+ behavior described in this section is not followed, the network may
+ become prone to the attack discussed in Section 6.1.
+
+7. Application-Layer Configuration
+
+ The CoJP join exchange in Figure 1 is carried over CoAP [RFC7252] and
+ the secure channel provided by OSCORE [RFC8613]. The (6LBR) pledge
+ acts as a CoAP client; the JRC acts as a CoAP server. The JP
+ implements CoAP forward proxy functionality [RFC7252]. Because the
+ JP can also be a constrained device, it cannot implement a cache.
+
+ The pledge designates a JP as a proxy by including the Proxy-Scheme
+ option in the CoAP requests that 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 Section 8.1.1.
+
+ 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.
+
+7.1. Statelessness of the JP
+
+ The CoAP proxy defined in [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 a DoS attack.
+
+ This DoS vector on the JP can be mitigated by making the JP act as a
+ stateless CoAP proxy, where "state" encompasses the information
+ related to individual pledges. 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. The JP may use the CoAP token as defined in [RFC7252], if
+ the size of the serialized state object permits, or use the extended
+ CoAP token defined in [RFC8974] to transport the state object. The
+ JRC and any other potential proxy on the JP-JRC path MUST support
+ extended token lengths, as defined in [RFC8974]. Since the CoAP
+ token is echoed back in the response, the JP is able to decode the
+ state object 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.
+
+ It is RECOMMENDED that the JP operates in a stateless manner and
+ signals the per-pledge state within the CoAP token for every request
+ that it forwards into the network on behalf of unauthenticated
+ pledges. When the JP is operating in a stateless manner, the
+ security considerations from [RFC8974] apply, and the type of the
+ CoAP message that the JP forwards on behalf of the pledge MUST be
+ non-confirmable (NON), regardless of the message type received from
+ the pledge. The use of a non-confirmable message by the JP
+ alleviates the JP from keeping CoAP message exchange state. The
+ retransmission burden is then entirely shifted to the pledge. A JP
+ that operates in a stateless manner still needs to keep congestion
+ control state with the JRC, see Section 9. Recommended values of
+ CoAP settings for use during the join process, both by the pledge and
+ the JP, are given in Section 7.2.
+
+ Note that in some networking stack implementations, a fully (per-
+ pledge) stateless operation of the JP may be challenging from the
+ implementation's point of view. In those cases, the JP may operate
+ as a stateful proxy that stores the per-pledge state until the
+ response is received or timed out, but this comes at a price of a DoS
+ vector.
+
+7.2. Recommended Settings
+
+ This section gives RECOMMENDED values of CoAP settings during the
+ join process.
+
+ +===================+===============+
+ | Name | Default Value |
+ +===================+===============+
+ | ACK_TIMEOUT | 10 seconds |
+ +-------------------+---------------+
+ | ACK_RANDOM_FACTOR | 1.5 |
+ +-------------------+---------------+
+ | MAX_RETRANSMIT | 4 |
+ +-------------------+---------------+
+ | NSTART | 1 |
+ +-------------------+---------------+
+ | DEFAULT_LEISURE | 5 seconds |
+ +-------------------+---------------+
+ | PROBING_RATE | 1 byte/second |
+ +-------------------+---------------+
+
+ Table 1: Recommended CoAP settings.
+
+ These values 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.
+
+ The PROBING_RATE value at the JP is controlled by the join rate
+ parameter, see Section 8.4.2. Following [RFC7252], the average data
+ rate in sending to the JRC must not exceed PROBING_RATE. For
+ security reasons, the average data rate SHOULD be measured over a
+ rather short window, e.g., ACK_TIMEOUT, see Section 9.
+
+7.3. OSCORE
+
+ Before the (6LBR) pledge and the JRC start exchanging CoAP messages
+ protected with OSCORE, they need to derive the OSCORE security
+ context from the provisioned parameters, as discussed in Section 3.
+
+ The OSCORE security context MUST be derived per Section 3 of
+ [RFC8613].
+
+ * The Master Secret MUST be the PSK.
+
+ * The Master Salt MUST be the empty byte string.
+
+ * The ID Context MUST be set to the pledge identifier.
+
+ * The ID of the pledge MUST be set to the empty byte string. This
+ identifier is used as the OSCORE Sender ID of the pledge in the
+ security context derivation, since the pledge initially acts as a
+ CoAP client.
+
+ * 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.
+
+ * The Algorithm MUST be set to the value from [RFC8152], agreed to
+ out-of-band by the same mechanism used to provision the PSK. The
+ default is AES-CCM-16-64-128.
+
+ * The key derivation function MUST be agreed out-of-band by the same
+ mechanism used to provision the PSK. Default is HKDF SHA-256
+ [RFC5869].
+
+ Since the pledge's OSCORE Sender ID is the empty byte string, when
+ constructing the OSCORE option, the pledge sets the 'kid' flag in the
+ OSCORE flag bits but indicates a 0-length 'kid'. The pledge
+ transports its pledge identifier within the 'kid context' field of
+ the OSCORE option. The derivation in [RFC8613] results in OSCORE
+ keys and a Common Initialization Vector (IV) for each side of the
+ conversation. Nonces are constructed by XORing the Common IV with
+ the current sequence number. For details on nonce and OSCORE option
+ construction, refer to [RFC8613].
+
+ Implementations MUST ensure that multiple CoAP requests, including to
+ different JRCs, are properly incrementing the sequence numbers, so
+ that the same sequence number is never reused in distinct requests
+ protected under the same PSK. 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. Failure to comply will
+ break the security guarantees of the Authenticated Encryption with
+ Associated Data (AEAD) algorithm because of nonce reuse.
+
+ This OSCORE security context is used for the 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
+ Section 8.2. Note that when the (6LBR) pledge and the JRC change
+ roles between CoAP client and CoAP server, the same OSCORE security
+ context as initially derived remains in use, and the derived
+ parameters are unchanged, for example, Sender ID when sending and
+ Recipient ID when receiving (see Section 3.1 of [RFC8613]). A (6LBR)
+ pledge is expected to have exactly one OSCORE security context with
+ the JRC.
+
+7.3.1. Replay Window and Persistency
+
+ Both the (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 [RFC8613] is RECOMMENDED.
+
+ Implementations MUST ensure that mutable OSCORE context parameters
+ (Sender Sequence Number, Replay Window) are stored in persistent
+ memory. A technique detailed in Appendix B.1.1 of [RFC8613] that
+ prevents reuse of sequence numbers MUST be implemented. Each update
+ of the OSCORE Replay Window MUST be written to persistent memory.
+
+ 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.
+
+7.3.2. OSCORE Error Handling
+
+ Errors raised by OSCORE during the join process MUST be silently
+ dropped, with no error response being signaled. The pledge MUST
+ silently discard any response not protected with OSCORE, including
+ error codes.
+
+ Such errors 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 OSCORE messages prevents
+ a DoS attack on the pledge where the attacker could send bogus error
+ responses, forcing the pledge to attempt joining one network at a
+ time, until all networks have been tried.
+
+7.3.3. Mandatory-to-Implement Algorithms
+
+ The mandatory-to-implement AEAD algorithm for use with OSCORE is AES-
+ CCM-16-64-128 from [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.
+
+ The mandatory-to-implement hash algorithm is SHA-256 [RFC4231]. The
+ mandatory-to-implement key derivation function is HKDF [RFC5869],
+ instantiated with a SHA-256 hash. See Appendix B for implementation
+ guidance when code footprint is important.
+
+8. Constrained Join Protocol (CoJP)
+
+ The Constrained Join Protocol (CoJP) is a lightweight protocol over
+ CoAP [RFC7252] and a secure channel provided by OSCORE [RFC8613].
+ CoJP allows a (6LBR) pledge to request admission into a network
+ managed by the JRC. It enables the JRC to configure the pledge with
+ the necessary parameters. 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.
+
+ 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.
+
+ +-----------------------------------+
+ | Constrained Join Protocol (CoJP) |
+ +-----------------------------------+
+ +-----------------------------------+ \
+ | Requests / Responses | |
+ |-----------------------------------| |
+ | OSCORE | | CoAP
+ |-----------------------------------| |
+ | Messaging Layer | |
+ +-----------------------------------+ /
+ +-----------------------------------+
+ | UDP |
+ +-----------------------------------+
+
+ Figure 2: Abstract layering of CoJP.
+
+ When a (6LBR) pledge requests admission to a given network, it
+ undergoes the CoJP join exchange that consists of:
+
+ * 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 Section 8.1.1.
+
+ * 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 Section 8.1.2.
+
+ 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 the following:
+
+ * 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 Section 8.2.1.
+
+ The payload of CoJP messages is encoded with CBOR [RFC8949]. The
+ CBOR data structures that may appear as the payload of different CoJP
+ messages are specified in Section 8.4.
+
+8.1. Join Exchange
+
+ This section specifies the messages exchanged when the (6LBR) pledge
+ requests admission and configuration parameters from the JRC.
+
+8.1.1. Join Request Message
+
+ The Join Request message that the (6LBR) pledge sends SHALL be mapped
+ to a CoAP request:
+
+ * The request method is POST.
+
+ * The type is Confirmable (CON).
+
+ * The Proxy-Scheme option is set to "coap".
+
+ * 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.
+
+ * The Uri-Path option is set to "j".
+
+ * The OSCORE option SHALL be set according to [RFC8613]. The OSCORE
+ security context used is the one derived in Section 7.3. The
+ OSCORE 'kid context' allows the JRC to retrieve the security
+ context for a given pledge.
+
+ * The payload is a Join_Request CBOR object, as defined in
+ Section 8.4.1.
+
+ Since the Join Request is a confirmable message, the transmission at
+ (6LBR) pledge will be controlled by CoAP's retransmission mechanism.
+ The JP, when operating in a stateless manner, forwards this Join
+ Request as a non-confirmable (NON) CoAP message, as specified in
+ Section 7. If the CoAP implementation at the (6LBR) pledge declares
+ the message transmission a failure, the (6LBR) pledge SHOULD attempt
+ to join a 6TiSCH network advertised with a different network
+ identifier. See Section 7.2 for recommended values of CoAP settings
+ to use during the join exchange.
+
+ If all join attempts to advertised networks have failed, the (6LBR)
+ pledge SHOULD signal the presence of an error condition, through some
+ out-of-band mechanism.
+
+ BCP 190 [RFC8820] provides guidelines on URI design and ownership.
+ It recommends that whenever a third party wants to mandate a URI to
+ web authority that it SHOULD go under "/.well-known" (per [RFC8615]).
+ In the case of CoJP, the Uri-Host option is always set to
+ "6tisch.arpa", and based upon the recommendations in Section 1 of
+ [RFC8820], it is asserted that this document is the owner of the CoJP
+ service. As such, the concerns of [RFC8820] do not apply, and thus
+ the Uri-Path is only "j".
+
+8.1.2. Join Response Message
+
+ The Join Response message that the JRC sends SHALL be mapped to a
+ CoAP response:
+
+ * The Response Code is 2.04 (Changed).
+
+ * The payload is a Configuration CBOR object, as defined in
+ Section 8.4.2.
+
+8.2. Parameter Update Exchange
+
+ 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.
+
+ 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.
+
+ 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 creates a CoAP service at the Uri-Host value
+ of "6tisch.arpa", and 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.
+
+8.2.1. Parameter Update Message
+
+ The Parameter Update message that the JRC sends to the joined node
+ SHALL be mapped to a CoAP request:
+
+ * The request method is POST.
+
+ * The type is Confirmable (CON).
+
+ * The Uri-Host option is set to "6tisch.arpa".
+
+ * The Uri-Path option is set to "j".
+
+ * The OSCORE option SHALL be set according to [RFC8613]. The OSCORE
+ security context used is the one derived in Section 7.3. 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.
+
+ * The payload is a Configuration CBOR object, as defined in
+ Section 8.4.2.
+
+ The JRC has implicit knowledge of 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.
+
+ If the JRC does not receive a response to a Parameter Update message,
+ it attempts multiple retransmissions as configured by the underlying
+ CoAP retransmission mechanism triggered for confirmable messages.
+ Finally, if the CoAP implementation declares the transmission a
+ failure, the JRC may consider this as a hint that the joined node is
+ no longer in the network. How the JRC decides when to stop
+ attempting to contact a previously joined node is out of scope of
+ this specification, but the security considerations on the reuse of
+ assigned resources apply, as discussed in Section 9.
+
+8.3. Error Handling
+
+8.3.1. CoJP CBOR Object Processing
+
+ CoJP CBOR objects are transported within both CoAP requests and
+ responses. This section describes handling the cases in which
+ certain CoJP CBOR object parameters are not supported by the
+ implementation or their processing fails. See Section 7.3.2 for the
+ handling of errors that may be raised by the underlying OSCORE
+ implementation.
+
+ When such a parameter is detected in a CoAP request (Join Request
+ message, Parameter Update message), a Diagnostic Response message
+ MUST be returned. A Diagnostic Response message maps to a CoAP
+ response and is specified in Section 8.3.2.
+
+ When a parameter that cannot be acted upon is encountered 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 include the Unsupported Configuration CBOR object
+ within the Join Request object in the following Join Request message.
+ The Unsupported Configuration CBOR object is self-contained and
+ enables the (6LBR) pledge to signal any parameters that the
+ implementation of the networking stack may not support. A (6LBR)
+ pledge MUST NOT attempt more than COJP_MAX_JOIN_ATTEMPTS number of
+ attempts to join if the processing of the Join Response message fails
+ each time. If the COJP_MAX_JOIN_ATTEMPTS number of attempts is
+ reached without success, the (6LBR) pledge SHOULD signal the presence
+ of an error condition through some out-of-band mechanism.
+
+ Note that COJP_MAX_JOIN_ATTEMPTS relates to the application-layer
+ handling of the CoAP response and is different from CoAP's
+ MAX_RETRANSMIT setting, which drives the retransmission mechanism of
+ the underlying CoAP message.
+
+8.3.2. Diagnostic Response Message
+
+ The Diagnostic Response message is returned for any CoJP request when
+ the processing of the payload failed. The Diagnostic Response
+ message is protected by OSCORE as any other CoJP message.
+
+ The Diagnostic Response message SHALL be mapped to a CoAP response:
+
+ * The Response Code is 4.00 (Bad Request).
+
+ * The payload is an Unsupported Configuration CBOR object, as
+ defined in Section 8.4.5, containing more information about the
+ parameter that triggered the sending of this message.
+
+8.3.3. Failure Handling
+
+ The parameter update exchange may be triggered at any time during the
+ network lifetime, which may span several years. During this period,
+ a joined node or the JRC may experience unexpected events such as
+ reboots or complete failures.
+
+ This document mandates that the mutable parameters in the security
+ context are written to persistent memory (see Section 7.3.1) by both
+ the JRC and pledges (joined nodes). As the pledge (joined node) is
+ typically a constrained device that handles the write operations to
+ persistent memory in a predictable manner, the retrieval of mutable
+ security-context parameters is feasible across reboots such that
+ there is no risk of AEAD nonce reuse due to reinitialized Sender
+ Sequence Numbers or of a replay attack due to the reinitialized
+ Replay Window. The JRC may be hosted on a generic machine where the
+ write operation to persistent memory may lead to unpredictable delays
+ due to caching. If a reboot event occurs at the JRC before the
+ cached data is written to persistent memory, the loss of mutable
+ security-context parameters is likely, which consequently poses the
+ risk of AEAD nonce reuse.
+
+ In the event of a complete device failure, where the mutable
+ security-context parameters cannot be retrieved, it is expected that
+ a failed joined node will be replaced with a new physical device,
+ using a new pledge identifier and a PSK. When such a failure event
+ occurs at the JRC, it is possible that the static information on
+ provisioned pledges, like PSKs and pledge identifiers, can be
+ retrieved through available backups. However, 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,
+ the network administrator MUST force all the networks managed by the
+ failed JRC to rejoin through out-of-band means during the process of
+ JRC reinitialization, e.g., reinitialize the 6LBR nodes and freshly
+ generate dynamic cryptographic keys and other parameters that
+ influence the security properties of the network.
+
+ In order to recover from such a failure event, the reinitialized JRC
+ can trigger the renegotiation of the OSCORE security context through
+ the procedure described in Appendix B.2 of [RFC8613]. Aware of the
+ failure event, the reinitialized JRC responds to the first Join
+ Request of each pledge it is managing with a 4.01 (Unauthorized)
+ error and a random nonce. The pledge verifies the error response and
+ then initiates the CoJP join exchange using a new OSCORE security
+ context derived from an ID Context consisting of the concatenation of
+ two nonces, one that it received from the JRC and the other that the
+ pledge generates locally. After verifying the Join Request with the
+ new ID Context and the derived OSCORE security context, the JRC
+ should consequently map the new ID Context to the previously used
+ pledge identifier. How the JRC handles this mapping is out of scope
+ of this document.
+
+ The use of the procedure specified in Appendix B.2 of [RFC8613] is
+ RECOMMENDED in order to handle the failure events or any other event
+ that may lead to the loss of mutable security-context parameters.
+ The length of nonces exchanged using this procedure MUST be at least
+ 8 bytes.
+
+ The procedure requires both the pledge and the JRC to have good
+ sources of randomness. While this is typically not an issue at the
+ JRC side, the constrained device hosting the pledge may pose
+ limitations in this regard. If the procedure outlined in
+ Appendix B.2 of [RFC8613] is not supported by the pledge, the network
+ administrator MUST reprovision the concerned devices with freshly
+ generated parameters through out-of-band means.
+
+8.4. CoJP Objects
+
+ 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 as part of the parameter update
+ exchange when the device operates as a joined (6LBR) node.
+
+8.4.1. Join Request Object
+
+ The Join_Request structure is built on a CBOR map object.
+
+ The set of parameters that can appear in a Join_Request object is
+ summarized below. The labels can be found in the "Constrained Join
+ Protocol (CoJP) Parameters" registry, Section 11.1.
+
+ 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 Table 3. This parameter MAY be
+ included. If the parameter is omitted, the default value of 0,
+ i.e., the role "6TiSCH Node", MUST be assumed.
+
+ network identifier: The identifier of the network, as discussed in
+ Section 3, encoded as a CBOR byte string. When present in the
+ Join_Request, it hints to the JRC which network 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 regardless of the role parameter value.
+
+ unsupported configuration: The identifier of the parameters that are
+ not supported by the implementation, encoded as an
+ Unsupported_Configuration object described in Section 8.4.5. 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 act on its payload (Configuration object), it
+ SHOULD include this parameter to facilitate the recovery and
+ debugging.
+
+ Table 2 summarizes the parameters that may appear in a Join_Request
+ object.
+
+ +===========================+=======+==================+
+ | Name | Label | CBOR Type |
+ +===========================+=======+==================+
+ | role | 1 | unsigned integer |
+ +---------------------------+-------+------------------+
+ | network identifier | 5 | byte string |
+ +---------------------------+-------+------------------+
+ | unsupported configuration | 8 | array |
+ +---------------------------+-------+------------------+
+
+ Table 2: Summary of Join_Request parameters.
+
+ The CDDL fragment that represents the text above for the Join_Request
+ follows:
+
+ Join_Request = {
+ ? 1 : uint, ; role
+ 5 : bstr, ; network identifier
+ ? 8 : Unsupported_Configuration ; unsupported configuration
+ }
+
+ +========+=======+==============================+===========+
+ | Name | Value | Description | Reference |
+ +========+=======+==============================+===========+
+ | 6TiSCH | 0 | The pledge requests to play | RFC 9031 |
+ | Node | | the role of a regular 6TiSCH | |
+ | | | node, i.e., non-6LBR node. | |
+ +--------+-------+------------------------------+-----------+
+ | 6LBR | 1 | The pledge requests to play | RFC 9031 |
+ | | | the role of 6LoWPAN Border | |
+ | | | Router (6LBR). | |
+ +--------+-------+------------------------------+-----------+
+
+ Table 3: Role values.
+
+8.4.2. Configuration Object
+
+ 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 "Constrained Join Protocol (CoJP)
+ Parameters" registry, Section 11.1.
+
+ 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 Section 8.4.3. 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. This parameter is also used to
+ implement rekeying in the network. The installation and use of
+ keys differs for the 6LBR and other (regular) nodes, and this is
+ explained in Sections 8.4.3.1 and 8.4.3.2.
+
+ short identifier: A compact identifier assigned to the pledge. The
+ short identifier structure is described in Section 8.4.4. The
+ short identifier parameter MAY be included in a Configuration
+ object.
+
+ 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 from 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 Section 6.
+
+ blacklist: An array encompassing a list of pledge identifiers that
+ are blacklisted by the JRC, with each pledge identifier encoded as
+ a byte string. The blacklist parameter MAY be included in a
+ Configuration object. When present, the array MUST contain zero
+ or more byte strings encoding pledge identifiers. The joined node
+ MUST silently drop any link-layer frames originating from the
+ pledge identifiers enclosed in the blacklist parameter. When this
+ parameter is received, its value MUST overwrite any previously set
+ values. This parameter allows the JRC to configure the node
+ acting as a JP to filter out traffic from misconfigured or
+ malicious pledges before their traffic is forwarded into the
+ network. If the JRC decides to remove a given pledge identifier
+ from a blacklist, it omits the pledge identifier in the blacklist
+ parameter value it sends next. Since the blacklist parameter
+ carries the pledge identifiers, privacy considerations apply. See
+ Section 10.
+
+ join rate: The average data rate (in units of bytes/second) of join
+ traffic forwarded into the network that should not be exceeded
+ when a joined node operates as a JP, encoded as an unsigned
+ integer. The join rate parameter MAY be included in a
+ Configuration object. This parameter allows the JRC to configure
+ different nodes in the network to operate as JP and to act in case
+ of an attack by throttling the rate at which JP forwards
+ unauthenticated traffic into the network. When this parameter is
+ present in a Configuration object, the value MUST be used to set
+ the PROBING_RATE of CoAP at the joined node for communication with
+ the JRC. If this parameter is set to zero, a joined node MUST
+ silently drop any join traffic coming from unauthenticated
+ pledges. If this parameter is omitted, the value of positive
+ infinity SHOULD be assumed. A node operating as a JP MAY use
+ another mechanism that is out of scope of this specification to
+ configure the PROBING_RATE of CoAP in the absence of a join rate
+ parameter from the Configuration object.
+
+ Table 4 summarizes the parameters that may appear in a Configuration
+ object.
+
+ +====================+=======+==================+
+ | Name | Label | CBOR Type |
+ +====================+=======+==================+
+ | link-layer key set | 2 | array |
+ +--------------------+-------+------------------+
+ | short identifier | 3 | array |
+ +--------------------+-------+------------------+
+ | JRC address | 4 | byte string |
+ +--------------------+-------+------------------+
+ | blacklist | 6 | array |
+ +--------------------+-------+------------------+
+ | join rate | 7 | unsigned integer |
+ +--------------------+-------+------------------+
+
+ Table 4: Summary of Configuration parameters.
+
+ The CDDL fragment that represents the text above for the
+ Configuration follows. The structures Link_Layer_Key and
+ Short_Identifier are specified in Sections 8.4.3 and 8.4.4,
+ respectively.
+
+ Configuration = {
+ ? 2 : [ +Link_Layer_Key ], ; link-layer key set
+ ? 3 : Short_Identifier, ; short identifier
+ ? 4 : bstr, ; JRC address
+ ? 6 : [ *bstr ], ; blacklist
+ ? 7 : uint ; join rate
+ }
+
+ +===============+=======+==========+====================+===========+
+ | Name | Label | CBOR | Description | Reference |
+ | | | type | | |
+ +===============+=======+==========+====================+===========+
+ | role | 1 | unsigned | Identifies the | RFC 9031 |
+ | | | integer | role parameter | |
+ +---------------+-------+----------+--------------------+-----------+
+ | link-layer | 2 | array | Identifies the | RFC 9031 |
+ | key set | | | array carrying | |
+ | | | | one or more | |
+ | | | | link-layer | |
+ | | | | cryptographic | |
+ | | | | keys | |
+ +---------------+-------+----------+--------------------+-----------+
+ | short | 3 | array | Identifies the | RFC 9031 |
+ | identifier | | | assigned short | |
+ | | | | identifier | |
+ +---------------+-------+----------+--------------------+-----------+
+ | JRC address | 4 | byte | Identifies the | RFC 9031 |
+ | | | string | IPv6 address | |
+ | | | | of the JRC | |
+ +---------------+-------+----------+--------------------+-----------+
+ | network | 5 | byte | Identifies the | RFC 9031 |
+ | identifier | | string | network | |
+ | | | | identifier | |
+ | | | | parameter | |
+ +---------------+-------+----------+--------------------+-----------+
+ | blacklist | 6 | array | Identifies the | RFC 9031 |
+ | | | | blacklist | |
+ | | | | parameter | |
+ +---------------+-------+----------+--------------------+-----------+
+ | join rate | 7 | unsigned | Identifier the | RFC 9031 |
+ | | | integer | join rate | |
+ | | | | parameter | |
+ +---------------+-------+----------+--------------------+-----------+
+ | unsupported | 8 | array | Identifies the | RFC 9031 |
+ | configuration | | | unsupported | |
+ | | | | configuration | |
+ | | | | parameter | |
+ +---------------+-------+----------+--------------------+-----------+
+
+ Table 5: CoJP parameters map labels.
+
+8.4.3. Link-Layer Key
+
+ 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 with which it should be
+ used for both outgoing and incoming security operations; and any
+ additional information that may be needed to configure the key.
+
+ For encoding compactness, the Link_Layer_Key object is not enclosed
+ in a top-level CBOR object. Rather, it is transported as a sequence
+ of CBOR elements [RFC8742], some being optional.
+
+ The set of parameters that can appear in a Link_Layer_Key object is
+ summarized below, in order:
+
+ 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. If the key is
+ considered invalid, the key MUST be discarded, and the
+ implementation MUST signal the error as specified in
+ Section 8.3.1.
+
+ 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 an integer. This parameter MAY be included. Possible
+ values and the corresponding link-layer settings are specified in
+ the IANA "Constrained Join Protocol (CoJP) Key Usage" registry
+ (Section 11.2). If the parameter is omitted, the default value of
+ 0 (6TiSCH-K1K2-ENC-MIC32) from Table 6 MUST be assumed. This
+ default value has been chosen because it results in byte savings
+ in the most constrained settings; its selection does not imply a
+ recommendation for its general usage.
+
+ 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 implementation MUST signal the error as
+ specified in Section 8.3.1.
+
+ 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.
+
+ 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.
+
+ The CDDL fragment for the Link_Layer_Key that represents the text
+ above follows:
+
+ Link_Layer_Key = (
+ key_id : uint,
+ ? key_usage : int,
+ key_value : bstr,
+ ? key_addinfo : bstr,
+ )
+
+ +======================+=====+======================+===============+
+ |Name |Value|Algorithm |Description |
+ +======================+=====+======================+===============+
+ |6TiSCH-K1K2-ENC-MIC32 |0 |IEEE802154-AES-CCM-128|Use MIC-32 for |
+ | | | |EBs, ENC-MIC-32|
+ | | | |for DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K1K2-ENC-MIC64 |1 |IEEE802154-AES-CCM-128|Use MIC-64 for |
+ | | | |EBs, ENC-MIC-64|
+ | | | |for DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K1K2-ENC-MIC128|2 |IEEE802154-AES-CCM-128|Use MIC-128 for|
+ | | | |EBs, ENC- |
+ | | | |MIC-128 for |
+ | | | |DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K1K2-MIC32 |3 |IEEE802154-AES-CCM-128|Use MIC-32 for |
+ | | | |EBs, DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K1K2-MIC64 |4 |IEEE802154-AES-CCM-128|Use MIC-64 for |
+ | | | |EBs, DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K1K2-MIC128 |5 |IEEE802154-AES-CCM-128|Use MIC-128 for|
+ | | | |EBs, DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K1-MIC32 |6 |IEEE802154-AES-CCM-128|Use MIC-32 for |
+ | | | |EBs. |
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K1-MIC64 |7 |IEEE802154-AES-CCM-128|Use MIC-64 for |
+ | | | |EBs. |
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K1-MIC128 |8 |IEEE802154-AES-CCM-128|Use MIC-128 for|
+ | | | |EBs. |
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K2-MIC32 |9 |IEEE802154-AES-CCM-128|Use MIC-32 for |
+ | | | |DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K2-MIC64 |10 |IEEE802154-AES-CCM-128|Use MIC-64 for |
+ | | | |DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K2-MIC128 |11 |IEEE802154-AES-CCM-128|Use MIC-128 for|
+ | | | |DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K2-ENC-MIC32 |12 |IEEE802154-AES-CCM-128|Use ENC-MIC-32 |
+ | | | |for DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K2-ENC-MIC64 |13 |IEEE802154-AES-CCM-128|Use ENC-MIC-64 |
+ | | | |for DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+ |6TiSCH-K2-ENC-MIC128 |14 |IEEE802154-AES-CCM-128|Use ENC-MIC-128|
+ | | | |for DATA and |
+ | | | |ACKNOWLEDGMENT.|
+ +----------------------+-----+----------------------+---------------+
+
+ Table 6: Key Usage values.
+
+8.4.3.1. Rekeying of 6LBRs
+
+ When the 6LBR receives the Configuration object containing a link-
+ layer key set, it MUST immediately install and start using the new
+ keys for all outgoing traffic and remove any old keys it has
+ installed from the previous key set after a delay of
+ COJP_REKEYING_GUARD_TIME has passed. This mechanism is used by the
+ JRC to force the 6LBR to start sending traffic with the new key. The
+ decision is made by the JRC when it has determined that the new key
+ has been made available to all (or some overwhelming majority) of
+ nodes. Any node that the JRC has not yet reached at that point is
+ either nonfunctional or in extended sleep such that it will not be
+ reached. To get the key update, such a node will need to go through
+ the join process anew.
+
+8.4.3.2. Rekeying of 6LNs
+
+ When a regular 6LN receives the Configuration object with a link-
+ layer key set, it MUST install the new keys. The 6LN will use both
+ the old and the new keys to decrypt and authenticate any incoming
+ traffic that arrives based upon the key identifier in the packet. It
+ MUST continue to use the old keys for all outgoing traffic until it
+ has detected that the network has switched to the new key set.
+
+ The detection of the network switch is based upon the receipt of
+ traffic secured with the new keys. Upon the reception and the
+ successful security processing of a link-layer frame secured with a
+ key from the new key set, a 6LN MUST then switch to sending all
+ outgoing traffic using the keys from the new set. The 6LN MUST
+ remove any keys it had installed from the previous key set after
+ waiting COJP_REKEYING_GUARD_TIME since it started using the new key
+ set.
+
+ Sending traffic with the new keys signals to other downstream nodes
+ to switch to their new key, causing a ripple of key updates around
+ each 6LBR.
+
+8.4.3.3. Use in IEEE Std 802.15.4
+
+ When Link_Layer_Key is used in the context of [IEEE802.15.4], the
+ following considerations apply.
+
+ Signaling of different keying modes of [IEEE802.15.4] is done based
+ on the parameter values present in a Link_Layer_Key object. For
+ instance, the value of the key_id parameter in combination with
+ key_addinfo denotes which of the four Key ID modes of [IEEE802.15.4]
+ is used and how.
+
+ Key ID Mode 0x00 (Implicit, pairwise): The key_id parameter MUST be
+ set to 0. The key_addinfo parameter MUST be present. The
+ 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 type(s) is carried is determined
+ from the length of the byte string.
+
+ Key ID Mode 0x01 (Key Index): The key_id parameter MUST be set to a
+ value different from 0. The key_addinfo parameter MUST NOT be
+ present.
+
+ Key ID Mode 0x02 (4-byte Explicit Key Source): The key_id parameter
+ MUST be set to a value different from 0. The key_addinfo
+ parameter MUST be present. The key_addinfo parameter MUST be set
+ to a byte string, exactly 4 bytes long. The key_addinfo parameter
+ carries the Key Source parameter used to configure [IEEE802.15.4].
+
+ Key ID Mode 0x03 (8-byte Explicit Key Source): The key_id parameter
+ MUST be set to a value different from 0. The key_addinfo
+ parameter MUST be present. The key_addinfo parameter MUST be set
+ to a byte string, exactly 8 bytes long. The key_addinfo parameter
+ carries the Key Source parameter used to configure [IEEE802.15.4].
+
+ In all cases, the key_usage parameter determines how a particular key
+ should be used with respect to incoming and outgoing security
+ policies.
+
+ For Key ID Modes 0x01 through 0x03, the key_id parameter sets the
+ "secKeyIndex" parameter of [IEEE802.15.4] that is signaled in all
+ outgoing frames secured with a given key. The maximum value that
+ key_id can have is 254. The value of 255 is reserved in
+ [IEEE802.15.4] and is therefore considered invalid.
+
+ 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 the JRC learns about the network topology is out of
+ scope of this specification, but it 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.
+
+ Implementations MUST use different link-layer keys when using
+ different authentication tag (MIC) lengths, as using the same key
+ with different authentication tag lengths might be unsafe. For
+ example, this prohibits the usage of the same key for both MIC-32 and
+ MIC-64 levels. See Annex B.4.3 of [IEEE802.15.4] for more
+ information.
+
+8.4.4. Short Identifier
+
+ The Short_Identifier object represents an identifier assigned to the
+ pledge. It is encoded as a CBOR array object and contains, in order:
+
+ 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. If the identifier is invalid, the
+ decoder MUST silently ignore the Short_Identifier object.
+
+ 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 Section 8.2. If the lease expires, then the node
+ SHOULD initiate a new join exchange, as described in Section 8.1.
+ If this parameter is omitted, then the value of positive infinity
+ MUST be assumed, meaning that the identifier is valid for as long
+ as the node participates in the network.
+
+ The CDDL fragment for the Short_Identifier that represents the text
+ above follows:
+
+ Short_Identifier = [
+ identifier : bstr,
+ ? lease_time : uint
+ ]
+
+8.4.4.1. Use in IEEE Std 802.15.4
+
+ When the Short_Identifier is used in the context of [IEEE802.15.4],
+ the following considerations apply.
+
+ The identifier MUST be used to set the short address of the 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 from 2, the
+ identifier is considered invalid. The values 0xfffe and 0xffff are
+ reserved by [IEEE802.15.4], and their use is considered invalid.
+
+ The security properties offered by the [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 imminent. 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.
+
+ The JRC MUST ensure that at any given time there are never two of the
+ 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.
+
+ Care needs to be taken on how the pledge (joined node) configures the
+ expiration of the lease. Since units of the lease_time parameter are
+ in hours after the reception of the CBOR object, the pledge needs to
+ convert the received time to the corresponding Absolute Slot Number
+ in the network. The joined node (pledge) MUST only use the Absolute
+ Slot Number as the appropriate reference of time to determine whether
+ the assigned short identifier is still valid.
+
+8.4.5. Unsupported Configuration Object
+
+ The Unsupported_Configuration object is encoded as a CBOR array,
+ containing at least one Unsupported_Parameter object. Each
+ Unsupported_Parameter object is a sequence of CBOR elements without
+ an enclosing top-level CBOR object for compactness. The set of
+ parameters that appear in an Unsupported_Parameter object is
+ summarized below, in order:
+
+ code: Indicates the capability of acting on the parameter signaled
+ by parameter_label, encoded as an integer. This parameter MUST be
+ included. Possible values of this parameter are specified in the
+ IANA "Constrained Join Protocol (CoJP) Unsupported Configuration
+ Codes" registry (Section 11.3).
+
+ parameter_label: Indicates the parameter. This parameter MUST be
+ included. Possible values of this parameter are specified in the
+ label column of the IANA "Constrained Join Protocol (CoJP)
+ Parameters" registry" (Section 11.1).
+
+ parameter_addinfo: Additional information about the parameter that
+ cannot be acted upon. This parameter MUST be included. If the
+ code is set to "Unsupported", parameter_addinfo gives additional
+ information to the JRC. If the parameter indicated by
+ parameter_label cannot be acted upon regardless of its value,
+ parameter_addinfo MUST be set to null, signaling to the JRC that
+ it SHOULD NOT attempt to configure the parameter again. If the
+ pledge can act on the parameter, but cannot configure the setting
+ indicated by the parameter value, the pledge can hint this to the
+ JRC. In this case, parameter_addinfo MUST be set to the value of
+ the parameter that cannot be acted upon following the normative
+ parameter structure specified in this document. For example, it
+ is possible to include the link-layer key set object, signaling
+ that either a subset or the entire key set that was received
+ cannot be acted upon. In that case, the value of
+ parameter_addinfo follows the link-layer key set structure defined
+ in Section 8.4.2. If the code is set to "Malformed",
+ parameter_addinfo MUST be set to null, signaling to the JRC that
+ it SHOULD NOT attempt to configure the parameter again.
+
+ The CDDL fragment for the Unsupported_Configuration and
+ Unsupported_Parameter objects that represents the text above follows:
+
+ Unsupported_Configuration = [
+ + parameter : Unsupported_Parameter
+ ]
+
+ Unsupported_Parameter = (
+ code : int,
+ parameter_label : int,
+ parameter_addinfo : nil / any
+ )
+
+ +=============+=======+==============================+===========+
+ | Name | Value | Description | Reference |
+ +=============+=======+==============================+===========+
+ | Unsupported | 0 | The indicated setting is not | RFC 9031 |
+ | | | supported by the networking | |
+ | | | stack implementation. | |
+ +-------------+-------+------------------------------+-----------+
+ | Malformed | 1 | The indicated parameter | RFC 9031 |
+ | | | value is malformed. | |
+ +-------------+-------+------------------------------+-----------+
+
+ Table 7: Unsupported Configuration code values.
+
+8.5. Recommended Settings
+
+ This section gives RECOMMENDED values of CoJP settings.
+
+ +==========================+===============+
+ | Name | Default Value |
+ +==========================+===============+
+ | COJP_MAX_JOIN_ATTEMPTS | 4 |
+ +--------------------------+---------------+
+ | COJP_REKEYING_GUARD_TIME | 12 seconds |
+ +--------------------------+---------------+
+
+ Table 8: Recommended CoJP settings.
+
+ The COJP_REKEYING_GUARD_TIME value SHOULD take into account possible
+ retransmissions at the link layer due to imperfect wireless links.
+
+9. Security Considerations
+
+ 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 the 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 Section 10.
+
+ This document further mandates that the (6LBR) pledge and the JRC are
+ provisioned with unique PSKs. While the process of provisioning PSKs
+ to all pledges can result in a substantial operational overhead, it
+ is vital to do so for the security properties of the network. The
+ PSK is used to set the OSCORE Master Secret during security context
+ derivation. This derivation process results in OSCORE keys that are
+ important for mutual authentication of the (6LBR) pledge and the JRC.
+ The resulting security context shared between the pledge (joined
+ node) and the JRC is used for the purpose of joining and is long-
+ lived in that it can be used throughout the lifetime of a joined node
+ for parameter update exchanges. Should an attacker come to know the
+ PSK, then a man-in-the-middle attack is possible.
+
+ Note that while OSCORE provides replay protection, it does not
+ provide an indication of freshness in the presence of an attacker
+ that can drop and/or reorder traffic. Since the Join Request
+ contains no randomness, and the sequence number is predictable, the
+ JRC could in principle anticipate a Join Request from a particular
+ pledge and pre-calculate the response. In such a scenario, the JRC
+ does not have to be alive at the time the request is received. This
+ could be relevant in the case when the JRC was temporarily
+ compromised and control was subsequently regained by the legitimate
+ owner.
+
+ It is of utmost importance to avoid 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 entire batch, with the attacker having the ability
+ to impersonate a legitimate device and join the network, generate
+ bogus data, and disturb the network operation. Additionally, some
+ vendors use methods such as scrambling or hashing device serial
+ numbers or their EUI-64 identifiers 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 [NIST800-90A] for different mechanisms
+ using deterministic methods.
+
+ The JP forwards the unauthenticated join traffic into the network. A
+ data cap on the JP prevents it from forwarding more traffic than the
+ network can handle and enables throttling in case of an attack. Note
+ that this traffic can only be directed at the JRC so that the JRC
+ needs to be prepared to handle such unsanitized inputs. The data cap
+ can be configured by the JRC by including a join rate parameter in
+ the Join Response, and it is implemented through the CoAP's
+ PROBING_RATE setting. The use of a data cap at a JP forces attackers
+ to use more than one JP if they wish to overwhelm the network.
+ Marking the join traffic packets with a nonzero DSCP allows the
+ network to carry the traffic if it has capacity, but it encourages
+ the network to drop the extra traffic rather than add bandwidth due
+ to that traffic.
+
+ The shared nature of the "minimal" cell used for the join traffic
+ makes the network prone to a DoS attack 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 the 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.
+
+ 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".
+ If 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. Note that this temporary blacklist is
+ different from the one communicated as part of the CoJP Configuration
+ object as it helps the pledge fight a DoS attack. The bogus beacons
+ prolong the join time of the pledge and so does the time spent in
+ "minimal" duty cycle mode [RFC8180]. The blacklist communicated as
+ part of the CoJP Configuration object helps the JP fight a DoS attack
+ by a malicious pledge.
+
+ During the network lifetime, the JRC may at any time initiate a
+ parameter update exchange with a joined node. The Parameter Update
+ message uses the same OSCORE security context as is used for the join
+ exchange, except that the server and client roles are interchanged.
+ As a consequence, each Parameter Update message carries the well-
+ known OSCORE Sender ID of the JRC. A passive attacker may use the
+ OSCORE Sender ID to identify the Parameter Update traffic if the
+ link-layer protection does not provide confidentiality. A
+ countermeasure against such a traffic-analysis attack is to use
+ encryption at the link layer. Note that the join traffic does not
+ undergo link-layer protection at the first hop, as the pledge is not
+ yet in possession of cryptographic keys. Similarly, EB traffic in
+ the network is not encrypted. This makes it easy for a passive
+ attacker to identify these types of traffic.
+
+10. Privacy Considerations
+
+ 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 the 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 [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. However, after the join process
+ completes, the use of EUI-64 in the form of a Layer 2 or Layer 3
+ address extends the aforementioned privacy threats to the long term.
+
+ As an optional mitigation technique, the Join Response message may
+ contain a short address that 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 may use the
+ short addresses for all further Layer 2 (and Layer 3) operations.
+ This reduces the privacy threats as the short Layer 2 address
+ (visible even when the network is encrypted) 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.
+
+11. IANA Considerations
+
+ This document allocates a well-known name under the .arpa name space
+ according to the rules given in [RFC3172] and [RFC6761]. The name
+ "6tisch.arpa" is requested. No subdomains are expected, and addition
+ of any such subdomains requires the publication of an IETF Standards
+ Track RFC. No A, AAAA, or PTR record is requested.
+
+11.1. Constrained Join Protocol (CoJP) Parameters
+
+ This section defines a subregistry within the "IPv6 Over the TSCH
+ Mode of IEEE 802.15.4 (6TiSCH)" registry with the name "Constrained
+ Join Protocol (CoJP) Parameters".
+
+ The columns of the registry are:
+
+ Name: This is a descriptive name that enables an easier reference to
+ the item. It is not used in the encoding. The name MUST be
+ unique.
+
+ Label: The value to be used to identify this parameter. The label
+ is an integer. The label MUST be unique.
+
+ CBOR Type: This field contains the CBOR type for the field.
+
+ Description: This field contains a brief description for the field.
+ The description MUST be unique.
+
+ Reference: This field contains a pointer to the public specification
+ for the field, if one exists.
+
+ This registry is populated with the values in Table 5.
+
+ The amending formula for this subregistry is: Different ranges of
+ values use different registration policies [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.
+
+11.2. Constrained Join Protocol (CoJP) Key Usage
+
+ This section defines a subregistry within the "IPv6 Over the TSCH
+ Mode of IEEE 802.15.4 (6TiSCH)" registry with the name "Constrained
+ Join Protocol (CoJP) Key Usage".
+
+ The columns of this registry are:
+
+ Name: This is a descriptive name that enables easier reference to
+ the item. It is not used in the encoding. The name MUST be
+ unique.
+
+ Value: This is the value used to identify the key usage setting.
+ These values MUST be unique. The value is an integer.
+
+ 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. The algorithm MUST be unique.
+
+ 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. The description MUST be unique.
+
+ Reference: This contains a pointer to the public specification for
+ the field, if one exists.
+
+ This registry is populated with the values in Table 6.
+
+ The amending formula for this subregistry is: Different ranges of
+ values use different registration policies [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.
+
+11.3. Constrained Join Protocol (CoJP) Unsupported Configuration Codes
+
+ This section defines a subregistry within the "IPv6 Over the TSCH
+ Mode of IEEE 802.15.4 (6TiSCH)" registry with the name "Constrained
+ Join Protocol (CoJP) Unsupported Configuration Codes".
+
+ The columns of this registry are:
+
+ Name: This is a descriptive name that enables easier reference to
+ the item. It is not used in the encoding. The name MUST be
+ unique.
+
+ Value: This is the value used to identify the diagnostic code.
+ These values MUST be unique. The value is an integer.
+
+ Description: This is a descriptive human-readable name. The
+ description MUST be unique. It is not used in the encoding.
+
+ Reference: This contains a pointer to the public specification for
+ the field, if one exists.
+
+ This registry is to be populated with the values in Table 7.
+
+ The amending formula for this subregistry is: Different ranges of
+ values use different registration policies [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.
+
+12. References
+
+12.1. Normative References
+
+ [IEEE802.15.4]
+ IEEE, "IEEE Standard for Low-Rate Wireless Networks", IEEE
+ Standard 802.15.4-2015, DOI 10.1109/IEEESTD.2016.7460875,
+ April 2016,
+ <https://ieeexplore.ieee.org/document/7460875>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC2597] Heinanen, J., Baker, F., Weiss, W., and J. Wroclawski,
+ "Assured Forwarding PHB Group", RFC 2597,
+ DOI 10.17487/RFC2597, June 1999,
+ <https://www.rfc-editor.org/info/rfc2597>.
+
+ [RFC3172] Huston, G., Ed., "Management Guidelines & Operational
+ Requirements for the Address and Routing Parameter Area
+ Domain ("arpa")", BCP 52, RFC 3172, DOI 10.17487/RFC3172,
+ September 2001, <https://www.rfc-editor.org/info/rfc3172>.
+
+ [RFC5869] Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand
+ Key Derivation Function (HKDF)", RFC 5869,
+ DOI 10.17487/RFC5869, May 2010,
+ <https://www.rfc-editor.org/info/rfc5869>.
+
+ [RFC6761] Cheshire, S. and M. Krochmal, "Special-Use Domain Names",
+ RFC 6761, DOI 10.17487/RFC6761, February 2013,
+ <https://www.rfc-editor.org/info/rfc6761>.
+
+ [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained
+ Application Protocol (CoAP)", RFC 7252,
+ DOI 10.17487/RFC7252, June 2014,
+ <https://www.rfc-editor.org/info/rfc7252>.
+
+ [RFC7554] Watteyne, T., Ed., Palattella, M., and L. Grieco, "Using
+ IEEE 802.15.4e Time-Slotted Channel Hopping (TSCH) in the
+ Internet of Things (IoT): Problem Statement", RFC 7554,
+ DOI 10.17487/RFC7554, May 2015,
+ <https://www.rfc-editor.org/info/rfc7554>.
+
+ [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage
+ Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085,
+ March 2017, <https://www.rfc-editor.org/info/rfc8085>.
+
+ [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
+ Writing an IANA Considerations Section in RFCs", BCP 26,
+ RFC 8126, DOI 10.17487/RFC8126, June 2017,
+ <https://www.rfc-editor.org/info/rfc8126>.
+
+ [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)",
+ RFC 8152, DOI 10.17487/RFC8152, July 2017,
+ <https://www.rfc-editor.org/info/rfc8152>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [RFC8180] Vilajosana, X., Ed., Pister, K., and T. Watteyne, "Minimal
+ IPv6 over the TSCH Mode of IEEE 802.15.4e (6TiSCH)
+ Configuration", BCP 210, RFC 8180, DOI 10.17487/RFC8180,
+ May 2017, <https://www.rfc-editor.org/info/rfc8180>.
+
+ [RFC8505] Thubert, P., Ed., Nordmark, E., Chakrabarti, S., and C.
+ Perkins, "Registration Extensions for IPv6 over Low-Power
+ Wireless Personal Area Network (6LoWPAN) Neighbor
+ Discovery", RFC 8505, DOI 10.17487/RFC8505, November 2018,
+ <https://www.rfc-editor.org/info/rfc8505>.
+
+ [RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz,
+ "Object Security for Constrained RESTful Environments
+ (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019,
+ <https://www.rfc-editor.org/info/rfc8613>.
+
+ [RFC8820] Nottingham, M., "URI Design and Ownership", BCP 190,
+ RFC 8820, DOI 10.17487/RFC8820, June 2020,
+ <https://www.rfc-editor.org/info/rfc8820>.
+
+ [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object
+ Representation (CBOR)", STD 94, RFC 8949,
+ DOI 10.17487/RFC8949, December 2020,
+ <https://www.rfc-editor.org/info/rfc8949>.
+
+ [RFC8974] Hartke, K. and M. Richardson, "Extended Tokens and
+ Stateless Clients in the Constrained Application Protocol
+ (CoAP)", RFC 8974, DOI 10.17487/RFC8974, January 2021,
+ <https://www.rfc-editor.org/info/rfc8974>.
+
+ [RFC9030] Thubert, P., Ed., "An Architecture for IPv6 over the Time-
+ Slotted Channel Hopping Mode of IEEE 802.15.4 (6TiSCH)",
+ RFC 9030, DOI 10.17487/RFC9030, May 2021,
+ <https://www.rfc-editor.org/info/rfc9030>.
+
+12.2. Informative References
+
+ [NIST800-90A]
+ National Institute of Standards and Technology,
+ "Recommendation for Random Number Generation Using
+ Deterministic Random Bit Generators", Special Publication
+ 800-90A, Revision 1, DOI 10.6028/NIST.SP.800-90Ar1, June
+ 2015, <https://doi.org/10.6028/NIST.SP.800-90Ar1>.
+
+ [RFC4231] Nystrom, M., "Identifiers and Test Vectors for HMAC-SHA-
+ 224, HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512",
+ RFC 4231, DOI 10.17487/RFC4231, December 2005,
+ <https://www.rfc-editor.org/info/rfc4231>.
+
+ [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler,
+ "Transmission of IPv6 Packets over IEEE 802.15.4
+ Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007,
+ <https://www.rfc-editor.org/info/rfc4944>.
+
+ [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J.,
+ Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur,
+ JP., and R. Alexander, "RPL: IPv6 Routing Protocol for
+ Low-Power and Lossy Networks", RFC 6550,
+ DOI 10.17487/RFC6550, March 2012,
+ <https://www.rfc-editor.org/info/rfc6550>.
+
+ [RFC6762] Cheshire, S. and M. Krochmal, "Multicast DNS", RFC 6762,
+ DOI 10.17487/RFC6762, February 2013,
+ <https://www.rfc-editor.org/info/rfc6762>.
+
+ [RFC7721] Cooper, A., Gont, F., and D. Thaler, "Security and Privacy
+ Considerations for IPv6 Address Generation Mechanisms",
+ RFC 7721, DOI 10.17487/RFC7721, March 2016,
+ <https://www.rfc-editor.org/info/rfc7721>.
+
+ [RFC8415] Mrugalski, T., Siodelski, M., Volz, B., Yourtchenko, A.,
+ Richardson, M., Jiang, S., Lemon, T., and T. Winters,
+ "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)",
+ RFC 8415, DOI 10.17487/RFC8415, November 2018,
+ <https://www.rfc-editor.org/info/rfc8415>.
+
+ [RFC8480] Wang, Q., Ed., Vilajosana, X., and T. Watteyne, "6TiSCH
+ Operation Sublayer (6top) Protocol (6P)", RFC 8480,
+ DOI 10.17487/RFC8480, November 2018,
+ <https://www.rfc-editor.org/info/rfc8480>.
+
+ [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data
+ Definition Language (CDDL): A Notational Convention to
+ Express Concise Binary Object Representation (CBOR) and
+ JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610,
+ June 2019, <https://www.rfc-editor.org/info/rfc8610>.
+
+ [RFC8615] Nottingham, M., "Well-Known Uniform Resource Identifiers
+ (URIs)", RFC 8615, DOI 10.17487/RFC8615, May 2019,
+ <https://www.rfc-editor.org/info/rfc8615>.
+
+ [RFC8742] Bormann, C., "Concise Binary Object Representation (CBOR)
+ Sequences", RFC 8742, DOI 10.17487/RFC8742, February 2020,
+ <https://www.rfc-editor.org/info/rfc8742>.
+
+ [RFC8990] Bormann, C., Carpenter, B., Ed., and B. Liu, Ed., "GeneRic
+ Autonomic Signaling Protocol (GRASP)", RFC 8990,
+ DOI 10.17487/RFC8990, May 2021,
+ <https://www.rfc-editor.org/info/rfc8990>.
+
+Appendix A. Example
+
+ Figure 3 illustrates a successful join protocol exchange. The pledge
+ instantiates the OSCORE context and derives the OSCORE 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 it uses 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
+ 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. The 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.
+
+ 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 CoJP object (configuration) present in the
+ payload. At the pledge, the Join Response is matched to the Join
+ Request and verified for replay protection using OSCORE processing
+ rules. In this example, the Join Response does not contain the IPv6
+ address of the JRC, hence the pledge understands that the JRC is co-
+ located with the 6LBR.
+
+ <-----E2E OSCORE------>
+ Client Proxy Server
+ Pledge JP JRC
+ | | |
+ | Join | | Code: 0.02 (POST)
+ | Request | | Token: -
+ +--------->| | Proxy-Scheme: coap
+ | | | Uri-Host: 6tisch.arpa
+ | | | OSCORE: kid: -,
+ | | | kid_context: EUI-64,
+ | | | Partial IV: 1
+ | | | Payload: { Code: 0.02 (POST),
+ | | | Uri-Path: "j",
+ | | | join_request, <Tag> }
+ | | |
+ | | Join | Code: 0.02 (POST)
+ | | Request | Token: opaque state
+ | +--------->| OSCORE: kid: -,
+ | | | kid_context: EUI-64,
+ | | | Partial IV: 1
+ | | | Payload: { Code: 0.02 (POST),
+ | | | Uri-Path: "j",
+ | | | join_request, <Tag> }
+ | | |
+ | | |
+ | | Join | Code: 2.04 (Changed)
+ | | Response | Token: opaque state
+ | |<---------+ OSCORE: -
+ | | | Payload: { Code: 2.04 (Changed),
+ | | | configuration, <Tag> }
+ | | |
+ | | |
+ | Join | | Code: 2.04 (Changed)
+ | Response | | Token: -
+ |<---------+ | OSCORE: -
+ | | | Payload: { Code: 2.04 (Changed),
+ | | | configuration, <Tag> }
+ | | |
+
+ Figure 3: Example of a successful join protocol exchange. { ... }
+ denotes authenticated encryption, <Tag> denotes the
+ authentication tag.
+
+ Where the join_request object is:
+
+ join_request:
+ {
+ 5 : h'cafe' / PAN ID of the network pledge is attempting to join /
+ }
+
+ Since the role parameter is not present, the default role of "6TiSCH
+ Node" is implied.
+
+ The join_request object is converted to h'a10542cafe' with a size of
+ 5 bytes.
+
+ And the configuration object is the following:
+
+ configuration:
+ {
+ 2 : [ / link-layer key set /
+ 1, / key_id /
+ h'e6bf4287c2d7618d6a9687445ffd33e6' / key_value /
+ ],
+ 3 : [ / short identifier /
+ h'af93' / assigned short address /
+ ]
+ }
+
+ 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 the key_addinfo parameter is not present and key_id is
+ different from 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.
+
+ The configuration object is converted to the following:
+
+ h'a202820150e6bf4287c2d7618d6a9687445ffd33e6038142af93' with a size
+ of 26 bytes.
+
+Appendix B. Lightweight Implementation Option
+
+ In environments where optimizing the implementation footprint is
+ important, it is possible to implement this specification without
+ having the implementations of HKDF [RFC5869] and SHA [RFC4231] on
+ constrained devices. HKDF and SHA are used during the OSCORE
+ security context derivation phase. This derivation can also be done
+ by the JRC or a provisioning device on behalf of the (6LBR) pledge
+ during the provisioning phase. In that case, the derived OSCORE
+ security context parameters are written directly into the (6LBR)
+ pledge, without requiring the PSK to be provisioned to the (6LBR)
+ pledge.
+
+ The use of HKDF to derive OSCORE security context parameters ensures
+ that the resulting OSCORE keys have good security properties and are
+ unique as long as the input varies for different pledges. This
+ specification ensures the uniqueness by mandating unique pledge
+ identifiers and a unique PSK for each (6LBR) pledge. From the AEAD
+ nonce reuse viewpoint, having a unique pledge identifier is a
+ sufficient condition. However, as discussed in Section 9, the use of
+ a single PSK shared among many devices is a common security pitfall.
+ The compromise of this shared PSK on a single device would lead to
+ the compromise of the entire batch. When using the implementation/
+ deployment scheme outlined above, the PSK does not need to be written
+ to individual pledges. As a consequence, even if a shared PSK is
+ used, the scheme offers a level of security comparable to the
+ scenario in which each pledge is provisioned with a unique PSK. In
+ this case, there is still a latent risk of the shared PSK being
+ compromised on the provisioning device, which would compromise all
+ devices in the batch.
+
+Acknowledgments
+
+ The work on this document has been partially supported by the
+ European Union's H2020 Programme for research, technological
+ development and demonstration under grant agreements: No. 644852,
+ project ARMOUR; No. 687884, project F-Interop and open-call project
+ SPOTS; No. 732638, project Fed4FIRE+ and open-call project SODA.
+
+ The following individuals provided input to this document (in
+ alphabetic order): Christian Amsüss, Tengfei Chang, Roman Danyliw,
+ Linda Dunbar, Vijay Gurbani, Klaus Hartke, Barry Leiba, Benjamin
+ Kaduk, Tero Kivinen, Mirja Kühlewind, John Mattsson, Hilarie Orman,
+ Alvaro Retana, Adam Roach, Jim Schaad, Göran Selander, Yasuyuki
+ Tanaka, Pascal Thubert, William Vignat, Xavier Vilajosana, Éric
+ Vyncke, and Thomas Watteyne.
+
+Authors' Addresses
+
+ Mališa Vučinić (editor)
+ Inria
+ 2 Rue Simone Iff
+ 75012 Paris
+ France
+
+ Email: malisa.vucinic@inria.fr
+
+
+ Jonathan Simon
+ Analog Devices
+ 32990 Alvarado-Niles Road, Suite 910
+ Union City, CA 94587
+ United States of America
+
+ Email: jonathan.simon@analog.com
+
+
+ Kris Pister
+ University of California Berkeley
+ 512 Cory Hall
+ Berkeley, CA 94720
+ United States of America
+
+ Email: pister@eecs.berkeley.edu
+
+
+ Michael Richardson
+ Sandelman Software Works
+ 470 Dawson Avenue
+ Ottawa ON K1Z5V7
+ Canada
+
+ Email: mcr+ietf@sandelman.ca