RFC 9032

Encapsulation of 6TiSCH Join and Enrollment Information Elements

๐Ÿ“… published May 2021, from ietf

RFC 9032 ๐ŸŽ€ Encapsulation of 6TiSCH Join and Enrollment Information Elements

Okay bestie, RFC 9032 is a Standards Track doc from May 2021, ISSN 2070-1721 ๐Ÿฆ‹ It's by D. Dujovne (Ed.) at Universidad Diego Portales and M. Richardson at Sandelman Software Works. The title block doesn't list anything it obsoletes or updates, so it's a clean standalone spec โœจ

Abstract

okay so in TSCH mode of IEEE Std 802.15.4, broadcast chances only show up at specific times and on specific channels ๐Ÿ•ฐ๏ธ Routers in a TSCH network send out Enhanced Beacon (EB) frames to announce that the network exists ๐Ÿ“ฃ This doc gives you a way to pack extra info that's super important for brand-new nodes (pledges) and long-sleeping nodes INTO the EB. The goal is to not waste those precious broadcast chances ๐Ÿ’…

Status of This Memo

this is an Internet Standards Track document ๐ŸŒธ

It's a product of the Internet Engineering Task Force (IETF) and represents the consensus of the IETF community. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). If you want more info on Internet Standards, check Section 2 of RFC 7841 ๐Ÿ“š

For the current status, any errata, and how to give feedback, go to https://www.rfc-editor.org/info/rfc9032 ๐Ÿ”—

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) as in effect on the date of publication. Please read these carefully because they spell out your rights and restrictions for this doc ๐Ÿงพ Code Components pulled out of this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as described in the Simplified BSD License โš–๏ธ


Table of Contents

1.  Introduction
  1.1.  Terminology
  1.2.  Layer 2 Synchronization
  1.3.  Layer 3 Synchronization: IPv6 Router Solicitations and
        Advertisements
  1.4.  Layer 2 Selection
2.  Protocol Definition
3.  Security Considerations
4.  Privacy Considerations
5.  IANA Considerations
6.  References
  6.1.  Normative References
  6.2.  Informative References
Acknowledgments
Authors' Addresses

1. Introduction โœจ

okay so [RFC7554] explains how to use the Time-Slotted Channel Hopping (TSCH) mode of [IEEE.802.15.4] ๐Ÿฆ‹

In TSCH mode of IEEE Std 802.15.4, broadcast chances are limited to specific times and specific channels, which is kind of a big deal ๐Ÿฅบ Routers in a TSCH network send Enhanced Beacon (EB) frames during broadcast slots so they can announce the time and channel schedule ๐Ÿ—“๏ธ

This doc defines a brand-new IETF Information Element (IE) subtype that goes INTO the EB. Its job is to give join and enrollment info to prospective pledges in a way that's way more efficient ๐Ÿ’–

The subsections below walk through the problem being solved, and why it makes sense to carry join and enrollment info in the EB ๐Ÿงš

1.1. Terminology

bestie, this part is the boring-but-important bit ๐Ÿ™ˆ 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 ๐ŸŽ€

Other terminology can be found in Section 2.1 of [RFC9030] ๐Ÿ“–

1.2. Layer 2 Synchronization

so as explained in Section 4.5.2 of [RFC8180], the EB has a few jobs ๐Ÿงƒ It carries synchronization info like the Absolute Slot Number (ASN) and Join Metric, plus identifiers for the timeslot template and the channel hopping sequence, and it tells you what the TSCH slotframe is ๐Ÿ•ธ๏ธ

An EB announces that a TSCH network exists, along with the nodes that have already joined it ๐Ÿ“ฃ When a Joining Node (pledge) receives an EB, it can learn about the network and sync up with it ๐Ÿซถ

The EB may also be used by a node that's already part of the network to resynchronize [RFC7554] ๐Ÿ”„

Here's the catch: each router only gets a limited number of timeslots designated as broadcast slots ๐Ÿ˜ญ If you consider 10 ms slots and a slotframe length of 100, those slots are rare and could give you only 1 slot per second for broadcasts, and that one has to be used for the beacon ๐Ÿฅฒ Extra broadcasts for Router Advertisements (RA) or Neighbor Discovery (ND) could be even scarcer ๐Ÿ’€

1.3. Layer 3 Synchronization: IPv6 Router Solicitations and Advertisements

at Layer 3, [RFC4861] defines how nodes find out about routers by receiving multicast RAs ๐Ÿ“ก If no RA shows up within a set time, a Router Solicitation (RS) may be sent as a multicast. An RA will come back to it, usually as a unicast ๐Ÿ’Œ

Although [RFC6775] cuts down on the multicast needed for address resolution through Neighbor Solicitation (NS) messages, it still needs multicast for either RAs or RSes ๐Ÿ˜ฉ That's expensive for two reasons. First, there are very few multicast timeslots for unsolicited RAs. Second, if a pledge doesn't receive an RA and decides to send an RS, a broadcast Aloha slot (see Appendix A.5 of [RFC7554]) gets used up by unencrypted traffic ๐Ÿ™…โ€โ™€๏ธ [RFC6775] already allows a unicast reply to such an RS ๐Ÿ’œ

This is an especially acute problem for the join process, for these reasons:

  1. Even a non-malicious, unauthenticated node that uses a multicast slot for a Router Solicitation (RS) may overwhelm that timeslot ๐Ÿ˜ฑ
  2. It may take many seconds of on-time before a new pledge receives a Router Advertisement (RA) that it can actually use โณ
  3. A new pledge may have to receive many EBs before it can pick an appropriate network and/or the closest Join Proxy to attach to ๐Ÿซ  If it also has to stay in the receive state for an RA while it looks for the EB, the process can take dozens of seconds, or even minutes, for each enrollment attempt it needs to make ๐Ÿ•ฐ๏ธ

1.4. Layer 2 Selection

okay in a complex Low-power and Lossy Network (LLN), multiple LLNs may be connected together by Backbone Routers (technology such as [RFC8929]) ๐ŸŒ That makes an area served by multiple, distinct Layer 2 instances. These are called Personal Area Networks (PANs) ๐Ÿงฉ Each instance has its own Layer 2 security profile and is told apart by a different PANID. The PANID is part of the Layer 2 header as defined in [IEEE.802.15.4]: it's a 16-bit value chosen to be unique, and it adds context to the Layer 2 security mechanisms ๐Ÿ” It works like the Extended Service Set ID (ESSID) in 802.11 networking, and you can think of it like the 802.3 Ethernet VLAN tag, since it gives context for all Layer 2 addresses ๐Ÿท๏ธ

A device that's already enrolled in a network might, after a long sleep, realize it needs to resync with the Layer 2 network ๐Ÿ˜ด Its enrollment keys are specific to a PANID, but the device might have more than one set of keys ๐Ÿ—๏ธ Such a device may want to connect to a PAN that's experiencing less congestion, or one with a shallower Routing Protocol for LLNs (RPL) tree [RFC6550] ๐ŸŒณ It might even spot PANs it has no keys for, but still believe it has credentials that would let it join ๐Ÿคž

To figure out which PANs belong to the same backbone network, this extension introduces the network ID ๐Ÿชช PANs that are part of the same backbone will be configured to use the same network ID. For RPL networks [RFC6550], configuring the network ID can be done with a configuration option, which is the subject of future work ๐Ÿ”ฎ

To help choose which PAN to use, the PAN priority field has been added ๐Ÿฅ‡ It lists the relative priority of the PAN among different PANs. Every EB from a given PAN will likely have the same PAN priority. Working out the PAN priority is the subject of future work, but it's expected to be calculated by an algorithm in the 6LoWPAN Border Router (6LBR), possibly involving communication between 6LBRs over the backbone network ๐Ÿ› ๏ธ

The parent selection process [RFC6550] can only operate within a single PAN, because it depends on receiving RPL DIO messages from all available parents ๐Ÿ™ƒ As part of PAN selection, the device may want to know how deep in the LLN mesh it'll be if it joins a particular PAN. The rank priority field gives an estimate of each announcer's rank ๐Ÿ“ถ Once the device syncs with a particular PAN's TSCH schedule, it may receive DIOs that are richer in diversity than this value ๐ŸŒˆ How this value gets used in practice is the subject of future research, and the interpretation of this value's structure is considered experimental ๐Ÿงช

2. Protocol Definition โœจ

okay so [RFC8137] basically set up a registry for brand new IETF IE subtypes ๐ŸŽ€, and this doc is like "hi, I'm claiming one" ๐Ÿ’…. It allocates a new subtype.

The new IE subtype structure is giving main character ๐Ÿ‘‘. As explained in [RFC8137], the length of the subtype content can be calculated from the container, so you literally don't need any length info ๐Ÿ™ˆ

                    1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       2       |R|P| res |  proxy prio |    rank priority      |
+-+-+-+-+-+-+-+-+-+-+-------------+-------------+-----------------+
| PAN priority  |                                               |
+---------------+                                               +
|                     Join Proxy Interface ID                   |
+                        (present if P=1)                       +
|                                                               |
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |                                               |
+-+-+-+-+-+-+-+-+                                               +
|                           network ID                          |
+                   variable length, up to 16 bytes             +
~                                                               ~
+                                                               +
|                                                               |
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+

                    Figure 1: IE Subtype Structure

res: Reserved bits MUST be ignored upon receipt and SHOULD be set to 0 when sending. Basically: don't read into them, and try to zero them out when you send ๐Ÿงน

R: The RA R-flag is set if the sending node will act as a router for host-only nodes relying on stateless address auto-configuration (SLAAC) to get their global IPv6 address. Those hosts MUST send a unicast RS message in order to receive an RA with the Prefix Information Option. ๐Ÿ“

In most cases, every node sending a beacon will set this flag, and in a typical mesh, this will be every single node. When this bit is not set, it might indicate that this node may be under provisioned or that it may have no additional slots for additional nodes. This could make this node more interesting to an attacker ๐Ÿ‘€ (not me, the attacker ๐Ÿ’€).

P: If the Proxy Address P-flag is set, then the Join Proxy Interface ID bit field is present. Otherwise, it is not provided.

This bit only indicates if another part of the structure is present, and it has little security or privacy impact. Lowkey harmless ๐Ÿฆ‹

proxy prio (proxy priority): This field indicates the willingness of the sender to act as a Join Proxy. Lower value indicates greater willingness to act as a Join Proxy as described in [RFC9031]. Values range from 0x00 (most willing) to 0x7e (least willing). A priority of 0x7f indicates that the announcer should never be considered as a viable Join Proxy. Only unenrolled pledges look at this value. ๐Ÿซถ

Lower values in this field indicate that the transmitter may have more capacity to handle unencrypted traffic. A higher value may indicate that the transmitter is low on neighbor cache entries or other resources. Ongoing work such as [NETWORK-ENROLLMENT] documents one way to set this field ๐ŸŒธ

rank priority: The rank priority is set by the IPv6 LLN Router (6LR) that sent the beacon and is an indication of how willing this 6LR is to serve as a RPL parent [RFC6550] within a particular network ID. Lower values indicate more willingness, and higher values indicate less willingness. This value is calculated by each 6LR according to algorithms specific to the routing metrics used by the RPL [RFC6550]. The exact process is a subject of significant research work. It will typically be calculated from the RPL rank, and it may include some modifications based upon current number of children or the number of neighbor cache entries available. Pledges MUST ignore this value. It helps enrolled devices only to compare connection points. ๐Ÿงš

An attacker can use this value to determine which nodes are potentially more interesting. Nodes that are less willing to be parents likely have more traffic, and an attacker could use this information to determine which nodes would be more interesting to attack or disrupt. Not great, bestie ๐Ÿ˜ญ

PAN priority: The PAN priority is a value set by the Destination-Oriented Directed Acyclic Graph (DODAG) root (see [RFC6550], typically the 6LBR) to indicate the relative priority of this LLN compared to those with different PANIDs that the operator might control. This value may be used as part of the enrollment priority, but typically it is used by devices that have already enrolled and need to determine which PAN to pick when resuming from a long sleep. Unenrolled pledges MAY consider this value when selecting a PAN to join. Enrolled devices MAY consider this value when looking for an eligible parent device. Lower values indicate more willingness to accept new nodes. ๐Ÿ’œ

An attacker can use this value, along with the observed PANID in the EB to determine which PANIDs have more network resources, and may have more interesting traffic.

Join Proxy Interface ID: If the P bit is set, then 64 bits (8 bytes) of address are present. This field provides the Interface ID (IID) of the link-local address of the Join Proxy. The associated prefix is well-known as fe80::/64. If this field is not present, then IID is derived from the Layer 2 address of the sender per SLAAC [RFC4862]. โœจ

This field communicates the IID bits that should be used for this node's Layer 3 address, if it should not be derived from the Layer 2 address. Communication with the Join Proxy occurs in the clear. This field avoids the need for an additional service-discovery process for the case where the Layer 3 address is not derived from the Layer 2 address. An attacker will see both Layer 2 and Layer 3 addresses, so this field provides no new information. Nothing new to see here ๐Ÿ’…

network ID: This is a variable length field, up to 16-bytes in size that uniquely identifies this network, potentially among many networks that are operating in the same frequencies in overlapping physical space. The length of this field can be calculated as being whatever is left in the IE. ๐ŸŒˆ

In a 6TiSCH network, where RPL [RFC6550] is used as the mesh routing protocol, the network ID can be constructed from a truncated SHA-256 hash of the prefix (/64) of the network. This will be done by the RPL DODAG root and communicated by the RPL Configuration Option payloads, so it is not calculated more than once. This is just a suggestion for a default algorithm: it may be set in any convenient way that results in a non-identifying value. In some LLNs where multiple PANIDs may lead to the same management device (the Join Registrar/Coordinator (JRC)), then a common value that is the same across all the PANs MUST be configured. Pledges that see the same network ID will not waste time attempting to enroll multiple times with the same network when the network has multiple attachment points. ๐Ÿ“

If the network ID is derived as suggested, then it will be an opaque, seemingly random value and will not directly reveal any information about the network. An attacker can match this value across many transmissions to map the extent of a network beyond what the PANID might already provide. Sneaky, but still a vibe ๐Ÿ•ต๏ธ


3. Security Considerations ๐Ÿ”

Okay, this section is serious, so read it slowly ๐Ÿ˜ค

All of the contents of this IE are transmitted in the clear. The content of the EB is not encrypted. This is a restriction in the cryptographic architecture of the 802.15.4 mechanism. In order to decrypt or do integrity checking of Layer 2 frames in TSCH, the TSCH ASN is needed. The EB provides the ASN to new (and long-sleeping) nodes. ๐Ÿ’€

The sensitivity of each field is described within the description of each field. ๐Ÿซถ

The EB is authenticated at the Layer 2 level using 802.15.4 mechanisms using the network-wide keying material. Nodes that are enrolled will have the network-wide keying material and can validate the beacon. ๐Ÿ”‘

Pledges that have not yet enrolled are unable to authenticate the beacons and will be forced to temporarily take the contents on faith. After enrollment, a newly enrolled node will be able to return to the beacon and validate it. Trust fall moment ๐Ÿ™ƒ

In addition to the enrollment and join information described in this document, the EB contains a description of the TSCH schedule to be used by the transmitter of this packet. The schedule can provide an attacker with a list of channels and frequencies on which communication will occur. Knowledge of this can help an attacker to more efficiently jam communications, although there is future work being considered to make some of the schedule less visible. Encrypting the schedule does not prevent an attacker from jamming, but rather increases the energy cost of doing that jamming. So it's harder, not impossible ๐Ÿ’ช


4. Privacy Considerations ๐Ÿฆ‹

The use of a network ID may reveal information about the network. The use of a SHA-256 hash of the DODAGID (see [RFC6550]), rather than using the DODAGID itself directly provides some privacy for the addresses used within the network, as the DODAGID is usually the IPv6 address of the root of the RPL mesh. Hashing it is the move ๐Ÿ™Œ

An interloper with a radio sniffer would be able to use the network ID to map out the extent of the mesh network. ๐Ÿ‘€


5. IANA Considerations ๐Ÿ“‹

IANA has assigned the following value in the "IEEE Std 802.15.4 IETF IE Subtype IDs" registry, as defined by [RFC8137].

              +=======+==================+===========+
              | Value | Subtype ID       | Reference |
              +=======+==================+===========+
              | 2     | 6tisch-Join-Info | RFC 9032  |
              +-------+------------------+-----------+

                              Table 1

6. References ๐Ÿ“š

6.1. Normative References ๐Ÿ“š

okay bestie, these are the docs the spec needs you to have read, no skipping ๐Ÿซถ


6.2. Informative References ๐Ÿงš

these ones are the extra reading. helpful, but not required to implement the spec ๐Ÿ’…


Acknowledgments ๐Ÿ’–

okay the people who helped make this doc happen, we love them ๐Ÿซถ

Thomas Watteyne gave loads of editorial comments on the document. Carles Gomez Montenegro did a super detailed review of the document during Working Group Last Call, which is so dedicated ๐Ÿ˜ญ and Tim Evens offered a bunch of useful editorial suggestions. slay, thank you all ๐ŸŽ€


Authors' Addresses โœจ

the people behind the doc, and how to reach them ๐Ÿ’Œ

Diego Dujovne (editor)
Universidad Diego Portales
Escuela de Informรกtica y Telecomunicaciones
Av. Ejรฉrcito 441
Santiago
Regiรณn Metropolitana
Chile

Phone: +56 (2) 676-8121
Email: diego.dujovne@mail.udp.cl


Michael Richardson
Sandelman Software Works

Email: mcr+ietf@sandelman.ca

and that's a wrap on RFC 9032! ๐ŸŒˆ๐Ÿ’… bestie, you just made it through the whole thing, iykyk ๐Ÿฆ‹โœจ

๐Ÿ“ฆ where this page comes from