The 6LR/6LBR ensures first come, first served by storing the ROVR associated to the address being registered upon the first registration and rejecting a registration with a different ROVR value. A 6LN can claim any address as long as it is the first to make that claim. After a successful registration, the 6LN becomes the owner of the Registered Address, and the address is bound to the ROVR value in the 6LR/6LBR registry.
This specification protects the ownership of the address at the first hop (the edge). Its use in a network is signaled by the "A" flag in the 6CIO. The flag is set by the 6LBR and propagated unchanged by the 6LRs. Once every node in the network is upgraded to support this specification, the "A" flag can be set to turn the protection on globally.
The 6LN places a cryptographic identifier, the Crypto-ID, in the ROVR that is associated with the address at the first registration, enabling the 6LR to later challenge it to verify that it is the original Registering Node. The challenge may happen at any time at the discretion of the 6LR and the 6LBR. A valid registration in the 6LR or the 6LBR
MUST NOT be altered until the challenge is complete.
When the "A" flag in a subnet is set, the 6LR
MUST challenge the 6LN before it creates a Binding with the "C" flag set in the EARO. The 6LR
MUST also challenge the 6LN when a new registration attempts to change a parameter of an already validated Binding for that 6LN, for instance, its Source link-layer address. Such verification protects against an attacker that attempts to steal the address of an honest node.
The 6LR
MUST indicate to the 6LBR that it performed a successful validation by setting a status code of 5 ("Validation Requested") in the EDAR. Upon a subsequent EDAR from a new 6LR with a status code that is not 5 for a validated Binding, the 6LBR
MUST indicate to the new 6LR that it needs to challenge the 6LN using a status code of 5 in the Extended Duplicate Address Confirmation (EDAC).
The 6LR
MUST challenge the 6LN when the 6LBR signals to do so, which is done with an EDAC message with a status code of 5. The EDAC is echoed by the 6LR in the NA(EARO) back to the Registering Node. The 6LR
SHOULD also challenge all its attached 6LNs at the time the 6LBR turns the "A" flag on in the 6CIO in orders to detect an issue immediately.
If the 6LR does not support the Crypto-Type, it
MUST reply with an EARO status code of 10 "Validation Failed" without a challenge. In that case, the 6LN may try another Crypto-Type until it falls back to Crypto-Type 0, which
MUST be supported by all 6LRs.
A node may use more than one IPv6 address at the same time. The separation of the address and the cryptographic material avoids the need for the constrained device to compute multiple keys for multiple addresses. The 6LN
MAY use the same Crypto-ID to prove the ownership of multiple IPv6 addresses. The 6LN
MAY also derive multiple Crypto-IDs from the same key pair by changing the modifier.
A 6LN registers to a 6LR that is one hop away from it with the "C" flag set in the EARO, indicating that the ROVR field contains a Crypto-ID. The Target Address in the NS message indicates the IPv6 address that the 6LN is trying to register [
RFC 8505]. The on-link (local) protocol interactions are shown in
Figure 6. If the 6LR does not have a state with the 6LN that is consistent with the NS(EARO), then it replies with a challenge NA(EARO, status=Validation Requested) that contains a Nonce Option (shown as NonceLR in
Figure 6).
6LN 6LR
| |
|<------------------------- RA -------------------------|
| | ^
|---------------- NS with EARO (Crypto-ID) ------------>| |
| | option
|<- NA with EARO(status=Validation Requested), NonceLR | |
| | v
|------- NS with EARO, CIPO, NonceLN and NDPSO -------->|
| |
|<------------------- NA with EARO ---------------------|
| |
...
| |
|--------------- NS with EARO (Crypto-ID) ------------->|
| |
|<------------------- NA with EARO ---------------------|
| |
...
| |
|--------------- NS with EARO (Crypto-ID) ------------->|
| |
|<------------------- NA with EARO ---------------------|
| |
The Nonce Option contains a nonce value that, to the extent possible for the implementation, was never used before. This specification inherits the idea from [
RFC 3971] that the nonce is a random value. Ideally, an implementation uses an unpredictable cryptographically random value [
BCP106]. But that may be impractical in some LLN scenarios with resource-constrained devices.
Alternatively, the device may use an always-incrementing value saved in the same stable storage as the key, so they are lost together, and start at a best-effort random value as either the nonce value or a component to its computation.
The 6LN replies to the challenge with an NS(EARO) that includes the Nonce Option (shown as NonceLN in
Figure 6), the CIPO (
Section 4.3), and the NDPSO containing the signature. Both nonces are included in the signed material. This provides a "contributory behavior" that results in better security even when the nonces of one party are not generated as specified.
The 6LR
MUST store the information associated with a Crypto-ID on the first NS exchange where it appears in a fashion that the CIPO parameters can be retrieved from the Crypto-ID alone.
The steps for the registration to the 6LR are as follows:
Upon the first exchange with a 6LR, a 6LN will be challenged to prove ownership of the Crypto-ID and the Target Address being registered in the Neighbor Solicitation message. When a 6LR receives an NS(EARO) registration with a new Crypto-ID as a ROVR, and unless the registration is rejected for another reason, it
MUST challenge by responding with an NA(EARO) with a status code of "Validation Requested".
Upon receiving a first NA(EARO) with a status code of "Validation Requested" from a 6LR, the Registering Node
SHOULD retry its registration with a CIPO (
Section 4.3) that contains all the necessary material for building the Crypto-ID, the NonceLN that it generated, and the NDP Signature Option (
Section 4.4) that proves its ownership of the Crypto-ID and intent of registering the Target Address. In subsequent revalidation with the same 6LR, the 6LN
MAY try to omit the CIPO to save bandwidth, with the expectation that the 6LR saved it. If the validation fails and it gets challenged again, then it
SHOULD add the CIPO again.
In order to validate the ownership, the 6LR performs the same steps as the 6LN and rebuilds the Crypto-ID based on the parameters in the CIPO. If the rebuilt Crypto-ID matches the ROVR, the 6LN also verifies the signature contained in the NDPSO. At that point, if the signature in the NDPSO can be verified, then the validation succeeds. Otherwise, the validation fails.
If the 6LR fails to validate the signed NS(EARO), it responds with a status code of "Validation Failed". After receiving an NA(EARO) with a status code of "Validation Failed", the Registering Node
SHOULD try an alternate Crypto-Type; even if Crypto-Type 0 fails, it may try to register a different address in the NS message.
The signature generated by the 6LN to provide proof of ownership of the private key is carried in the NDPSO. It is generated by the 6LN in a fashion that depends on the Crypto-Type (see
Table 1 in
Section 8.2) chosen by the 6LN as follows:
-
Form the message to be signed, by concatenating the following byte-strings in the order listed:
-
The 128-bit Message Type tag [RFC 3972] (in network byte order). For this specification, the tag is given in Section 8.1. (The tag value has been generated by the editor of this specification on <https://www.random.org>.)
-
The CIPO.
-
The 16-byte Target Address (in network byte order) sent in the NS message. It is the address that the 6LN is registering with the 6LR and 6LBR.
-
The NonceLR received from the 6LR (in network byte order) in the NA message. The nonce is at least 6 bytes long as defined in [RFC 3971].
-
The NonceLN sent from the 6LN (in network byte order). The nonce is at least 6 bytes long as defined in [RFC 3971].
-
The 1-byte option length of the EARO containing the Crypto-ID.
-
Apply the signature algorithm specified by the Crypto-Type using the private key.
Upon receiving the NDPSO and CIPO options, the 6LR first checks that the EARO Length in the CIPO matches the length of the EARO. If so, it regenerates the Crypto-ID based on the CIPO to make sure that the leftmost bits up to the size of the ROVR match.
If, and only if, the check is successful, it tries to verify the signature in the NDPSO using the following steps:
-
Form the message to be verified, by concatenating the following byte-strings in the order listed:
-
The 128-bit Message Type tag given in Section 8.1 (in network byte order).
-
The CIPO.
-
The 16-byte Target Address (in network byte order) received in the NS message. It is the address that the 6LN is registering with the 6LR and 6LBR.
-
The NonceLR sent in the NA message. The nonce is at least 6 bytes long as defined in [RFC 3971].
-
The NonceLN received from the 6LN (in network byte order) in the NS message. The nonce is at least 6 bytes long as defined in [RFC 3971].
-
The 1-byte EARO Length received in the CIPO.
-
Verify the signature on this message with the public key in the CIPO and the locally computed values using the signature algorithm specified by the Crypto-Type. If the verification succeeds, the 6LR propagates the information to the 6LBR using an EDAR/EDAC flow.
-
Due to the first-come, first-served nature of the registration, if the address is not registered to the 6LBR, then flow succeeds and both the 6LR and 6LBR add the state information about the Crypto-ID and Target Address being registered to their respective abstract databases.
A new 6LN that joins the network autoconfigures an address and performs an initial registration to a neighboring 6LR with an NS message that carries an EARO [
RFC 8505].
In a multi-hop 6LoWPAN, the registration with Crypto-ID is propagated to 6LBR as shown in
Figure 7, which illustrates the registration flow all the way to a 6LoWPAN Backbone Router (6BBR) [
RFC 8929].
6LN 6LR 6LBR 6BBR
| | | |
| NS(EARO) | | |
|--------------->| | |
| | Extended DAR | |
| |-------------->| |
| | | proxy NS(EARO) |
| | |--------------->|
| | | | NS(DAD)
| | | | ------>
| | | |
| | | | <wait>
| | | |
| | | proxy NA(EARO) |
| | |<---------------|
| | Extended DAC | |
| |<--------------| |
| NA(EARO) | | |
|<---------------| | |
| | | |
The 6LR and the 6LBR communicate using ICMPv6 EDAR and EDAC messages [
RFC 8505] as shown in
Figure 7. This specification extends EDAR/EDAC messages to carry cryptographically generated ROVR.
The assumption is that the 6LR and the 6LBR maintain a security association to authenticate and protect the integrity of the EDAR and EDAC messages, so there is no need to propagate the proof of ownership to the 6LBR. The 6LBR implicitly trusts that the 6LR performs the verification when the 6LBR requires it, and if there is no further exchange from the 6LR to remove the state, the verification succeeded.