RFC 4866

Enhanced Route Optimization for Mobile IPv6

๐Ÿ“… published May 2007, from ietf

Enhanced Route Optimization for Mobile IPv6 ๐ŸŽ€

RFC 4866, a Standards Track document from the Network Working Group, dated May 2007 ๐Ÿ“…

  • Authors: J. Arkko (Ericsson Research NomadicLab), C. Vogt (Universitaet Karlsruhe (TH)), and W. Haddad (Ericsson Research) ๐Ÿซถ
  • Category: Standards Track
  • Obsoletes: nothing is listed in the title block
  • Updates: nothing is listed in the title block

Status of This Memo โœจ

okay so this document is an Internet standards track protocol for the whole Internet community ๐ŸŒ It also asks everyone for discussion and suggestions for improvements, so bring your ideas bestie ๐Ÿ’œ For the standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1). And distribution of this memo is unlimited, so share it with everyone ๐Ÿฆ‹

Copyright (C) The IETF Trust (2007).

Abstract ๐ŸŒธ

this doc is giving an enhanced version of Mobile IPv6 route optimization ๐Ÿ”ฅ The upgrades are lower handoff delays, increased security, and reduced signaling overhead. literally iconic ๐Ÿ‘‘

Table of Contents ๐Ÿงš

1. Introduction ....................................................3
2. Objectives ......................................................4
   2.1. Handoff Latency ............................................5
   2.2. Security ...................................................5
   2.3. Signaling Overhead .........................................7
3. Protocol Design .................................................7
   3.1. Cryptographically Generated Home Addresses .................7
   3.2. Non-Cryptographic Care-of Addresses ........................8
   3.3. Semi-Permanent Security Associations .......................8
   3.4. Initial Home Address Tests .................................8
   3.5. Concurrent Care-of Address Tests ...........................9
   3.6. Credit-Based Authorization .................................9
   3.7. Parallel Home and Correspondent Registrations .............10
4. Protocol Operation .............................................10
   4.1. Sending Binding Update Messages ...........................10
   4.2. Receiving Binding Update Messages .........................18
   4.3. Sending Binding Acknowledgment Messages ...................22
   4.4. Receiving Binding Acknowledgment Messages .................23
   4.5. Sending CGA Parameters ....................................25
   4.6. Receiving CGA Parameters ..................................26
   4.7. Sending Permanent Home Keygen Tokens ......................27
   4.8. Receiving Permanent Home Keygen Tokens ....................28
   4.9. Renewing Permanent Home Keygen Tokens .....................28
   4.10. Handling Payload Packets .................................28
   4.11. Credit Aging .............................................31
   4.12. Simultaneous Movements ...................................32
5. Option Formats and Status Codes ................................32
   5.1. CGA Parameters Option .....................................32
   5.2. Signature Option ..........................................33
   5.3. Permanent Home Keygen Token Option ........................34
   5.4. Care-of Test Init Option ..................................35
   5.5. Care-of Test Option .......................................35
   5.6. CGA Parameters Request Option .............................36
   5.7. Status Codes ..............................................36
6. Security Considerations ........................................38
   6.1. Home Address Ownership ....................................39
   6.2. Care-of Address Ownership .................................41
   6.3. Credit-Based Authorization ................................43
   6.4. Time Shifting Attacks .....................................46
   6.5. Replay Attacks ............................................47
   6.6. Resource Exhaustion .......................................47
   6.7. IP Address Ownership of Correspondent Node ................47
7. Protocol Constants and Configuration Variables .................49
8. IANA Considerations ............................................50
9. Acknowledgments ................................................50
10. References ....................................................51
   10.1. Normative References .....................................51
   10.2. Informative References ...................................51

1. Introduction โœจ

okay so Mobile IPv6 route optimization [1] lets mobile and correspondent nodes talk over a direct routing path ๐Ÿ›ค๏ธ even when the mobile node's IP connectivity changes. Both end nodes use a stable "home address" to identify the mobile node at stack layers above IP ๐Ÿ’– Meanwhile, payload packets go out or come in via a "care-of address" that routes to wherever the mobile node is currently attached ๐Ÿ“ Mobile IPv6 swaps the home and care-of addresses when a payload packet goes through the IP layer, which is giving main character energy ๐Ÿ’… The link between a mobile node's home address and care-of address is called a "binding" for the mobile node ๐Ÿ”—

It's the mobile node's job to update its binding at the correspondent node through a "correspondent registration" whenever it changes IP connectivity ๐Ÿซถ A correspondent registration also involves the mobile node's home agent. The home agent proxies the mobile node at the home address and mainly acts as a relay for payload packets exchanged with correspondent nodes that don't support route optimization ๐Ÿงš The mobile node keeps the home agent up to date about its current care-of address through "home registrations" ๐Ÿ“ฌ

Now for the security tea โ˜• Establishing a binding during a correspondent registration requires the correspondent node to verify that the mobile node owns both the home address and the care-of address. Unprecedented impersonation and flooding threats [5] would show up if correspondent nodes took liberties with these obligations ๐Ÿ˜ญ So a correspondent registration includes a "home address test" and a "care-of address test", which together are called the "return routability procedure" ๐Ÿ” These tests let the correspondent node probe the mobile node's reachability at the home and care-of addresses in an ad hoc, non-cryptographic way. If reachability checks out at both IP addresses, that suggests (though it doesn't guarantee) the mobile node owns them, and so the binding between the home address and the care-of address is legit โœ…

The return routability procedure is lightweight, and it doesn't need a public-key infrastructure or a preexisting relationship between the mobile node and the correspondent node ๐ŸŒˆ That makes broad deployment way easier. The catch is that it slows down handoffs ๐ŸŒ Both the home address test and the care-of address test are end-to-end message exchanges between the mobile node and the correspondent node. The home address test can be especially laggy because it routes through the home agent ๐Ÿ’€ The procedure is also vulnerable to attackers who can interpose in the home or care-of address test ๐Ÿ™ˆ Interposing doesn't get them much, though, because the return routability procedure has to be repeated at intervals of at most 7 minutes, even when the mobile node's IP connectivity hasn't changed. Repeating it costs extra signaling overhead ๐Ÿ“ˆ So much effort has gone into improving Mobile IPv6 route optimization [6] to fix these downsides ๐Ÿ“

This document specifies Enhanced Route Optimization, which amends route optimization in base Mobile IPv6 โœจ

Enhanced Route Optimization secures a mobile node's home address against impersonation. It does this with an interface identifier that is cryptographically and verifiably bound [2] to the public component of the mobile node's public/private-key pair ๐Ÿ” The mobile node proves it owns the home address by showing evidence that it knows the corresponding private key. An initial home address test validates the home address prefix, and after that, subsequent home address tests are unnecessary ๐ŸŽ‰ Enhanced Route Optimization also lets mobile and correspondent nodes resume bidirectional communication in parallel with a care-of address test. So the latency of the home and care-of address tests is eliminated in most cases ๐Ÿš€ Using cryptographically generated home addresses also helps against impersonators who can interpose on the home address test, which makes longer binding lifetimes possible. The result is increased security and less signaling overhead ๐Ÿ’œ Cryptographically generated home addresses and concurrent care-of address tests work best together, but a mobile node can choose to use just one of these enhancements ๐Ÿฆ‹

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [3] ๐Ÿ“–

2. Objectives ๐ŸŽฏ

The design of route optimization in base Mobile IPv6 is pretty conservative in a lot of ways ๐Ÿง That leaves room to optimize handoff delay, security, and signaling overhead. Enhanced Route Optimization tackles these issues, so it's a more progressive variant of Mobile IPv6 ๐Ÿ’…

Even with any Mobile IPv6 optimizations, you have to remember that mobility-related activities elsewhere in the protocol stack can have their own impact ๐Ÿ‘€ For example, attachment procedures, access control, and authentication at the link layer add their own handoff delays. So do IP layer tasks like router discovery, neighbor discovery, movement detection, and IP address configuration ๐ŸŒ€ The handoff delays and signaling overhead of Mobile IPv6 are usually small compared to the total delay and overhead. So the improvements from Enhanced Route Optimization should be seen in view of the entire protocol stack, periodt ๐Ÿซถ

To be continued in part 2 ๐Ÿงš (1 of 14 done!)

2.1. Handoff Latency โœจ

okay so let's talk about the lag ๐Ÿซ  in base Mobile IPv6 route optimization, the handoff delay is basically stacked up from a few round trips. first there's one round-trip time between the mobile node and the home agent for the home registration ๐Ÿ“ฌ. then there's one round-trip between the mobile node and the home agent PLUS one round-trip between the home agent and the correspondent node for the return routability procedure ๐Ÿ”. and last, one one-way trip from the mobile node to the correspondent node so the Binding Update message can get delivered ๐Ÿ’Œ. (the assumption here is that the return routability procedure is mostly eaten up by the home address test, bestie ๐ŸŽ€)

the first payload packet sent to the new care-of address then needs one extra one-way trip to get from the correspondent node to the mobile node ๐Ÿงš. the mobile node can actually keep sending right after it dispatches the Binding Update message ๐Ÿ’…. but if it asks for a Binding Acknowledgment message from the correspondent node, comms usually stall until that ack shows up ๐Ÿ˜ญ.

these handoff delays in base Mobile IPv6 route optimization stack on top of whatever delays already exist at the IP layer or link layer, so they're additive ๐Ÿ™ˆ

and yeah, they can be seriously noticeable for interactive and real-time apps ๐Ÿ“ž. TCP bulk transfers get hit too, since long handoff latencies can trigger successive retransmission timeouts and tank the throughput [7] ๐Ÿ’€. so an objective of Enhanced Route Optimization is to cut that handoff latency down ๐Ÿฆ‹.

2.2. Security ๐Ÿ”

the return routability procedure was built to give about the same level of security as today's non-mobile Internet [5] ๐Ÿ‘‘. it guards against impersonation, denial-of-service, and flooding threats that only show up because mobility exists, unless you put countermeasures in place ๐Ÿ›ก๏ธ. specifically, the return routability procedure meets these requirements:

  • an attacker off the path from a correspondent node to a victim should not be able to trick a correspondent node into redirecting packets, which should normally be delivered to a victim, to itself, or to a third IP address ๐Ÿ™…โ€โ™€๏ธ. otherwise the attacker could impersonate the victim to the correspondent node or cause denial of service against the victim ๐Ÿ˜ค. the attacker may launch these attacks from an arbitrary position, which doesn't necessarily have to be on the path between the victim and the correspondent node ๐ŸŒ.
  • an attacker off the path from a correspondent node to a victim should not be able to trick the correspondent node into redirecting packets, which should normally be delivered to the attacker itself, to the victim ๐Ÿšซ. otherwise the attacker could flood the victim with unrequested packets ๐ŸŒŠ. this "redirection-based flooding" is super appealing to attackers because the work of generating the flood packets and sending them to the victim lands on the correspondent node instead of on the attacker ๐Ÿซฃ. the attacker could also spoof multiple correspondent nodes into flooding the same victim ๐Ÿ‘€. that would hit the victim way harder than a direct flood, where the attacker itself makes and sends every packet ๐Ÿ’ฅ. comparable amplification is today only possible through an army of compromised nodes [8] ๐Ÿค–.

one way to pull off redirection-based flooding: the attacker completes the initial TCP handshake for a huge file download through its own IP address, then binds the victim's IP address (as a care-of address) to the attacker's own IP address (or home address) ๐ŸŽญ. the correspondent node then redirects the download to the victim ๐Ÿ“ฆ. the attacker can spoof acknowledgments on behalf of the victim, using the sequence numbers it picked up during the initial handshake, to keep the download going or speed it up โšก. those acknowledgments are smaller, and typically less than the full-sized segments the correspondent node generates, which is what makes the amplification work ๐Ÿ˜ˆ.

  • attackers should not be able to cause denial of service against mobile or correspondent nodes by exploiting expensive computations involved in the mobility protocol ๐Ÿ™…โ€โ™€๏ธ.

the return routability procedure blocks impersonation, denial of service, and redirection-based flooding from attackers who aren't on the path from a correspondent node to a victim ๐Ÿ™Œ, and it's lightweight enough not to expose expensive operations ๐Ÿชถ. but it does NOT protect against attackers who are located on the path from the correspondent node to the victim ๐Ÿ˜ฌ. apps that need a higher security level are generally advised to use end-to-end protection like IP security (IPsec) or Transport Layer Security (TLS) ๐Ÿ”’. but even then, they're still vulnerable to denial of service or flooding ๐Ÿ’€. plus, end-to-end security mechanisms generally need mobile and correspondent nodes to be preconfigured with authentication credentials, or they depend on a public-key infrastructure ๐Ÿ—๏ธ. both of those would make it hard to widely deploy Mobile IPv6 route optimization if they were a prerequisite for the protocol ๐Ÿšง. so an objective of Enhanced Route Optimization is to securely authenticate mobile nodes without preconfigured credentials or a public-key infrastructure, even when there are attackers on the path from the correspondent node to the victim ๐Ÿซถโœจ.

2.3. Signaling Overhead ๐Ÿ“ก

a complete correspondent registration involves six message transmissions at the mobile node, totaling about 376 bytes [9] ๐Ÿ“จ. this signaling overhead might be fine if movements are infrequent ๐Ÿ˜Œ. for example, a mobile node that moves once every 30 minutes generates an average of 1.7 bits/s of signaling traffic ๐Ÿข. but higher mobility causes more serious overhead ๐ŸŽ๏ธ. a cell size of 100 meters and a speed of 120 km/h yields a change in IP connectivity every 3 s and about 1,000 bits/s of signaling traffic ๐Ÿ˜ฑ. that's a lot compared to a highly compressed voice stream, which typically runs at 10,000 to 30,000 bits/s ๐ŸŽค.

on top of that, base Mobile IPv6 requires mobile nodes to renew a correspondent registration at least every 7 minutes โฐ. the signaling overhead comes to 7.16 bits/s if the mobile node talks to a stationary node [9] ๐Ÿ“‰. it doubles if both peers are mobile ๐Ÿ‘ฏโ€โ™€๏ธ. this overhead may be negligible when the nodes are actively communicating, but it can be an issue for mobile nodes that are inactive and stay in the same spot for a while ๐Ÿ›‹๏ธ. those nodes typically prefer to go into standby mode to save battery ๐Ÿ”‹. also, the periodic refreshes eat up a chunk of wireless bandwidth that could be used more efficiently ๐Ÿซ . these observations lead to the objective of Enhanced Route Optimization: reduce the signaling overhead of base Mobile IPv6 correspondent registrations as much as possible, especially when the mobile node hasn't moved for a while ๐Ÿง˜โ€โ™€๏ธ๐Ÿ’œ.

3. Protocol Design ๐Ÿ› ๏ธ

Enhanced Route Optimization is a bunch of optimizations that together get us the objectives from Section 2 ๐ŸŽฏ. here's the quick summary ๐Ÿ‘‡.

3.1. Cryptographically Generated Home Addresses ๐Ÿ”‘

a Mobile IPv6 binding is basically a packet redirection from a home address to a care-of address ๐Ÿ—บ๏ธ. the home address is the source of the redirection, and the care-of address is the destination ๐Ÿ“. so the packets to redirect can be identified by the home address, which is why a cryptographic ownership proof for the home address makes sense ๐Ÿ”. Enhanced Route Optimization uses cryptographically generated home addresses for this [10][11] ๐Ÿ’…. generally, a Cryptographically Generated Address (CGA) gives a strong cryptographic binding between its interface identifier and the CGA owner's public key ๐Ÿ’Ž. this makes a cryptographic home address ownership proof possible without a public-key infrastructure ๐Ÿ™Œ, so other nodes can securely and autonomously authenticate the CGA owner, as long as the CGA's subnet prefix is correct โœ…. cryptographically generated home addresses can replace home address tests, except for an initial test that validates the home address prefix ๐Ÿ”„. this means lower handoff delays and longer binding lifetimes, plus less signaling overhead for mobile nodes that temporarily don't move ๐Ÿฅณ. Enhanced Route Optimization also optionally lets the correspondent node prove ownership of its IP address ๐Ÿฆ‹.

3.2. Non-Cryptographic Care-of Addresses ๐Ÿก

unlike a home address, a care-of address doesn't have any identifying function ๐Ÿ™…โ€โ™€๏ธ. so a cryptographic ownership proof for a care-of address isn't really worth much ๐Ÿคทโ€โ™€๏ธ. since the care-of address is where packets get redirected to, what actually matters is whether the mobile node is reachable there ๐Ÿ“ฌ. Enhanced Route Optimization uses care-of address tests for this ๐Ÿงช, but lets correspondent nodes send packets to a new care-of address before the mobile node has been found reachable there ๐Ÿš€.

3.3. Semi-Permanent Security Associations ๐Ÿค

CGA-based authentication uses public-key cryptography, so it's way less computationally efficient than authenticating with a shared secret key ๐ŸŒ. it also needs a big pile of supplementary CGA parameters piggybacked onto protected messages ๐Ÿ“ฆ. Enhanced Route Optimization gets around these downsides by using an initial CGA-based authentication to securely swap a secret permanent home keygen token between a mobile node and a correspondent node ๐Ÿ”. that permanent home keygen token then authenticates the mobile node much more efficiently in later correspondent registrations โšก. mobile and correspondent nodes renew the permanent home keygen token only on an infrequent basis ๐Ÿ—“๏ธ. so the token is neither constant nor short-lived, which is why the security association between the mobile node and the correspondent node is called "semi-permanent" ๐Ÿ’ซ.

3.4. Initial Home Address Tests ๐Ÿง

an initial home address test is still needed, even with a cryptographic proof of home address ownership, to guard against spoofed subnet prefixes in home addresses ๐Ÿ•ต๏ธโ€โ™€๏ธ. without any home address tests, a malicious node could cryptographically generate a home address using the subnet prefix of a victim network, and ask a correspondent node to register a binding between that spoofed home address and the attacker's own care-of address ๐Ÿ˜ˆ. the attacker then tricks the correspondent node into sending a stream of packets to the care-of address, and then deregisters the binding or lets it expire ๐ŸŽช. the result is that the correspondent node redirects the packet stream "back" to the home address, flooding the victim network with unrequested packets ๐ŸŒŠ๐Ÿ’€. to prevent this kind of misuse, an initial home address test is required for the mobile node and the correspondent node to establish a semi-permanent security association ๐Ÿ›‘. the home address test is, if possible, run proactively so it saves a potentially costly message exchange via the home agent during the critical handoff period โฑ๏ธ. the home address test doesn't need to be repeated on subsequent movements ๐Ÿ™Œโœจ.

3.5. Concurrent Care-of Address Tests โœจ

okay so ERO lets a correspondent node (CN) start sending payload packets to the mobile node's (MN) new care-of address ๐Ÿฆ‹ before the MN has been confirmed reachable there. when the MN changes its IP connectivity, it first updates its binding at the CN to the new care-of address, and it doesn't have to prove reachability to do it ๐Ÿ’… the CN registers that new care-of address on a tentative basis and marks it UNVERIFIED. then payload packets can go back and forth both ways through the new care-of address while the MN's reachability there gets verified at the same time ๐ŸŽ€ once that verification finishes, the CN moves the care-of address to VERIFIED state. main character energy for handoffs, honestly ๐ŸŒธ

3.6. Credit-Based Authorization ๐Ÿ›ก๏ธ

ngl this one is so important ๐Ÿ˜ญ concurrent care-of address tests with no extra protection would let an attacker trick a CN into temporarily redirecting payload packets (the ones that were really meant for the attacker) over to a victim's IP address. this is called "redirection-based flooding" [5], and it's super appealing to an attacker because the CN is the one generating the flood packets and sending them at the victim, not the attacker. so the attacker gets to amplify the attack by a lot compared to a direct flood, where the attacker would have to make all those packets themselves ๐Ÿ’€

ERO stops this with Credit-Based Authorization ๐Ÿ”ฅ it manages how much effort the CN spends sending payload packets to a care-of address that's still in UNVERIFIED state, so that a redirection-based flood can never be more effective than a direct flood. sending unrequested packets is just how packet-oriented networks work, and direct flooding is a threat that comes from that, whether or not mobility support exists. since redirection-based flooding can't be any more efficient than direct flooding, Credit-Based Authorization brings ERO's flooding protection up to the level of the non-mobile Internet ๐Ÿ‘‘ which means ERO meets the objective of giving a security level comparable to the non-mobile Internet โœจ

the "credit" is how the effort gets measured and limited ๐Ÿฆ‹ the CN keeps a credit balance to compare its own effort against the effort the MN puts into regular communications with the CN. the CN increases the credit for payload packets it receives from the MN's care-of address in VERIFIED state, and it reduces the credit in proportion to its own effort when sending payload packets to a care-of address of the MN in UNVERIFIED state ๐Ÿงš

3.7. Parallel Home and Correspondent Registrations ๐ŸŒˆ

ERO lets MNs run a correspondent registration in parallel with the matching home registration ๐Ÿ“ which cuts down handoff delays. base Mobile IPv6 makes the MN wait for a Binding Acknowledgment message saying the home registration worked before it can even start the correspondent registration, so ERO is way faster ๐Ÿš€

4. Protocol Operation ๐Ÿ’–

ERO lets an MN securely authenticate to a CN based on the CGA property of its home address, and it also lets the MN ask for a concurrent care-of address test for better handoff efficiency ๐Ÿซถ the messages exchanged during a correspondent registration are different depending on whether the MN wants to use either or both of these upgrades. here's how that works ๐Ÿ‘‡

4.1. Sending Binding Update Messages ๐Ÿ’Œ

an MN can start a correspondent registration for any of these reasons:

  • to set up a new binding at a CN while it's away from its home link, so later packets get route-optimized and stop going through the MN's home agent ๐Ÿฆ‹
  • to update an existing binding at the CN while it's moving from one point of IP attachment to another ๐Ÿš—
  • to follow up an early Binding Update message with a complete Binding Update message after getting a Binding Acknowledgment message that has a Care-of Test option ๐ŸŽ€
  • to refresh an existing binding at the CN without changing the current point of IP attachment ๐ŸŒธ
  • to ask the CN to renew an existing permanent home keygen token that the MN and CN share (see Section 4.5) ๐Ÿ”‘
  • to ask the CN to deregister an existing binding ๐Ÿงน

     Mobile node               Home agent           Correspondent node
         |                         |                         |
         |                         |                         |
         ~ Handoff                 |                         |
         |                         |                         |
         |-Binding Update--------->|                         |
         |-early Binding Update + Care-of Test Init option-->|
         |                         |                         |
         |                         |                         |
         |<------------Binding Ack-|                         |
         |<----------early Binding Ack + Care-of Test option-|
         |                         |                         |
         |                         |                         |
         |-Binding Update----------------------------------->|
         |                         |                         |
         |                         |                         |
         |<--------------------------------------Binding Ack-|
         |                         |                         |

    Figure 1: Correspondent registration with authentication by a proof
     of the mobile node's knowledge of a permanent home keygen token;
                      concurrent care-of address test

no matter which of those reasons applies, the MN sends a Binding Update message to the CN ๐Ÿ’ซ that message gets authenticated with one of these three methods:

  • if the MN's home address is a CGA but the MN doesn't have a permanent home keygen token in its Binding Update List entry for the CN, the MN SHOULD authenticate the Binding Update message based on the CGA property of its home address ๐Ÿ” this means sending its CGA parameters and signature to the CN and passing a reachability check at the home address too ๐Ÿ’…
  • if the MN's home address is a CGA and the MN has a permanent home keygen token in its Binding Update List entry for the CN, the MN MUST authenticate the Binding Update message by proving it knows that permanent home keygen token ๐Ÿ”‘โœจ
  • if the MN's home address is not a CGA, the MN MUST authenticate the Binding Update message by proving reachability at its home address ๐Ÿ 

the lifetime the MN asks for in the Lifetime field of the Binding Update message MUST NOT exceed MAX_CGA_BINDING_LIFETIME (see Section 7) if the message is going to be authenticated by the CGA property of the MN's home address or by proving it knows a permanent home keygen token ๐Ÿ™ˆ if the chosen method is proving reachability at the home address, the lifetime MUST NOT exceed MAX_RR_BINDING_LIFETIME [1]. it's RECOMMENDED in every case that the MN asks for the maximum allowed lifetime so it doesn't have to keep refreshing bindings and so signaling overhead stays low ๐Ÿง  and a Binding Update message that asks to delete an existing binding at the CN MUST have its Lifetime field set to zero ๐Ÿ—‘๏ธ

if the chosen method goes through the CGA property of the MN's home address, the MN puts its CGA parameters and signature in the Binding Update message by adding one or more CGA Parameters options (see Section 5.1), directly followed by a Signature option (see Section 5.2) ๐Ÿงฉ this is covered in Section 4.5. once the MN has gotten a permanent home keygen token from the CN, it MUST authenticate every later Binding Update message by proving it knows that permanent home keygen token, until the binding lifetime runs out, the permanent home keygen token gets renewed, or the MN explicitly deregisters the binding at the CN ๐Ÿ”’ this is what stops an attacker on the path from the CN to the MN's home address from downgrading the MN's chosen method to a reachability proof at the home address ๐Ÿ›ก๏ธ the MN MAY choose to ignore the CGA property of its home address and authenticate Binding Update messages by proving reachability at the home address instead. but that behavior makes it easier for on-path attackers, so it's NOT RECOMMENDED ๐Ÿ˜ฌ

     Mobile node              Home agent          Correspondent node
         |                         |                         |
         |                         |                         |
         |-Home Test Init--------->|------------------------>|
         |                         |                         |
         |<------------------------|<--------------Home Test-|
         |                         |                         |
         |                         |                         |
         ~ Handoff                 |                         |
         |                         |                         |
         |-Binding Update--------->|                         |
         |-early Binding Update + Care-of Test Init option-->|
         |                         |                         |
         |                         |                         |
         |<------------Binding Ack-|                         |
         |<----------early Binding Ack + Care-of Test option-|
         |                         |                         |
         |                         |                         |
         |-Binding Update----------------------------------->|
         |                         |                         |
         |                         |                         |
         |<--------------------------------------Binding Ack-|
         |                         |                         |

     Figure 2: Correspondent registration with authentication based on
     reachability verification at the home address; concurrent care-of
                               address test

the MN also puts its CGA parameters in the Binding Update message when it wants to renew a permanent home keygen token it shares with the CN ๐Ÿ”„ it does this the same way as before, by adding one or more CGA Parameters options and a Signature option to the message ๐Ÿ’–

the authenticator for the Binding Update message is calculated from either a permanent or a temporary home keygen token ๐Ÿง which type the MN uses depends on the authentication method:

Okay bestie, so the Binding Update has to be authenticated, and the home side can be proven in three different ways ๐Ÿ”๐ŸŽ€

  • If the Binding Update is going to be authenticated based on the CGA property of the mobile node's home address, the mobile node MUST use a temporary home keygen token from the correspondent node. It might already have a valid one in its Binding Update List entry for that correspondent node, or it can grab a fresh one through a Home Test Init and Home Test exchange. ๐Ÿ’…
  • If the Binding Update is going to be authenticated by proving knowledge of a permanent home keygen token, the mobile node MUST use the permanent home keygen token that is has in its Binding Update List entry for the correspondent node. ๐Ÿ”‘
  • If the Binding Update is going to be authenticated through a proof of reachability at the home address, the mobile node MUST use a temporary home keygen token from the correspondent node. Same deal as before: it might already have a valid one saved, or it can fetch one with a Home Test Init and Home Test exchange. ๐Ÿฆ‹

Unless the whole point of the Binding Update is to delete an existing binding at the correspondent node, the authenticator also gets calculated with a care-of keygen token. The mobile node picks that one like this:

  • If the mobile node has a valid care-of keygen token for the to-be-registered care-of address in its Binding Update List entry for the correspondent node, it MUST use that token when calculating the authenticator. The Binding Update is then "complete" โœจ
  • If the mobile node doesn't have a valid care-of keygen token in its Binding Update List entry for the correspondent node, it SHOULD set the care-of keygen token to zero and use that in the authenticator calculation. In this case the Binding Update is "early" ๐ŸŒธ
  • If the mobile node doesn't have a valid care-of keygen token in that entry either, it MAY choose to get one through a Care-of Test Init and Care-of Test exchange, as defined in [1], without sending an early Binding Update. Then it waits for the Care-of Test message and uses the care-of keygen token inside it to calculate the authenticator for a complete Binding Update. Ngl this makes the handoff latency go up, so it is NOT RECOMMENDED ๐Ÿ™ˆ

For reduced handoff delays, the mobile node SHOULD start its home and correspondent registrations at the same time for a particular care-of address. ๐Ÿš€ If it wants to stop using Mobile IPv6 while it's away from its home link, it SHOULD also run the home and correspondent deregistrations in parallel. BUT when the mobile node commits its home and correspondent deregistrations after getting back to the home link following some roaming, it MUST start the home deregistration first, and it MUST wait for a Binding Acknowledgment message that says the home deregistration worked before it starts the correspondent deregistration. Why? This keeps the home agent from proxying the mobile node's home address while the mobile node is on the home link, so the two don't interfere during Duplicate Address Detection. ๐Ÿ‘‘ A home deregistration only takes a link-local round-trip time when it's done from the home link, so skipping the parallel version costs basically nothing in handoff delay. Iconic restraint.

Also, when the Binding Update for the correspondent registration is going to be authenticated based on the CGA property of the mobile node's home address, or through a proof of reachability at the home address, the mobile node SHOULD start the Home Test Init and Home Test exchange before the handoff. This gets a fresh home keygen token from the correspondent node early, which speeds things up even more. A Home Test Init can be sent periodically whenever the home keygen token it got earlier is about to expire. Tokens are valid for 3.5 minutes [1], so the gap between Home Test Init messages needs to be a bit shorter than that. ๐Ÿซถ Or if the link layer gives a trigger when a handoff is coming, the mobile node might be able to send the Home Test Init at exactly the right moment. Proactive home address tests are totally doable because a home address doesn't change across handoffs. Main character energy ๐ŸŒˆ

If the mobile node starts the home address test from the home link, it MUST address the Home Test Init message directly to the correspondent node. The Home Test message will then come straight back from the correspondent node. But if the home address test starts from a visited link, the mobile node MUST tunnel the Home Test Init message to the home agent. The home agent then tunnels the Home Test message back to the mobile node. ๐Ÿงš A home address test SHOULD NOT overlap with a home registration or home deregistration, because that could make the Home Test Init or Home Test message get lost. Not the vibe ๐Ÿ’€

If the Binding Update is early, the mobile node MUST add a Care-of Test Init option (see Section 5.4) to the message, asking the correspondent node to send back a new care-of keygen token. The Care-of Test Init option MUST come after the CGA Parameters and Signature options, if those are in the Binding Update. Once a Binding Acknowledgment with a Care-of Test option (see Section 5.5) comes back, the mobile node MUST use the care-of keygen token inside it to calculate the authenticator for a complete Binding Update, and then send that to the correspondent node. ๐Ÿ’–

If the Binding Update is authenticated based on the CGA property of the mobile node's home address, the mobile node MAY add a CGA Parameters Request option (see Section 5.6) to the Binding Update. This asks the correspondent node to prove it owns its IP address inside the Binding Acknowledgment. That ownership proof lets the mobile node check that the permanent home keygen token in the Binding Acknowledgment was generated by the right correspondent node. Verified and iconic ๐Ÿ”โœจ

The mobile node includes the nonce indices for the selected home and care-of keygen tokens in the Binding Update, using a Nonce Indices option [1]. Here's how the home nonce index gets picked:

  • If the Binding Update is going to be authenticated based on the CGA property of the mobile node's home address, the mobile node uses a temporary home keygen token to calculate the authenticator, and the associated home nonce index MUST be taken from the Home Test message that the home keygen token came from. ๐ŸŒธ
  • If the Binding Update is going to be authenticated by proving knowledge of a permanent home keygen token, the home nonce index MUST be set to zero. ๐Ÿ“
  • If the Binding Update is going to be authenticated through a proof of the mobile node's reachability at the home address, the mobile node uses a temporary home keygen token to calculate the authenticator, and the associated home nonce index MUST be taken from the Home Test message that the home keygen token came from. ๐Ÿฆ‹

The care-of nonce index follows these rules:

  • If the Binding Update is complete, the care-of nonce index is taken from the Care-of Test option or Care-of Test message that the care-of keygen token (used for the authenticator) came from. ๐Ÿ’œ
  • If the Binding Update is early, the care-of nonce index MUST be set to zero. ๐Ÿซ 
  • If the purpose of the Binding Update is to delete a binding at the correspondent node, the care-of nonce index MUST be set to zero. ๐Ÿงน

The Nonce Indices option goes after the CGA Parameters, Signature, Care-of Test Init, and CGA Parameters Request options, if those are included in the Binding Update as well. Almost done bestie ๐Ÿฅน

Last step: the mobile node calculates an authenticator for the Binding Update based on the selected home and care-of keygen tokens, following the rules in Section 5.2 and Section 6.2.7 of [1]. For a Binding Update that asks the correspondent node to delete an existing binding, the authenticator is calculated from only a home keygen token, with no care-of keygen token involved. ๐Ÿ™…โ€โ™€๏ธ The authenticator goes into the Authenticator field of a Binding Authorization Data option [1], which the mobile node adds to the Binding Update as the very last option. Authenticator sealed, slay ๐Ÿ”๐Ÿ‘‘

Here's the flow for this one, because pictures help ๐Ÿฆ‹

  Mobile node               Home agent           Correspondent node
      |                         |                         |
      |                         |                         |
      ~ Handoff                 |                         |
      |                         |                         |
      |-Binding Update--------->|                         |
      |-Care-of Test Init-------------------------------->|
      |                         |                         |
      |                         |                         |
      |<------------Binding Ack-|                         |
      |<-------------------------------------Care-of Test-|
      |                         |                         |
      |                         |                         |
      |-Binding Update----------------------------------->|
      |                         |                         |
      |                         |                         |
      |<--------------------------------------Binding Ack-|
      |                         |                         |

    Figure 3: Correspondent registration with authentication by a proof
     of the mobile node's knowledge of a permanent home keygen token;
                   explicit care-of address test

Okay bestie, the time-sequence diagrams in Figure 1 through Figure 3 show how Enhanced Route Optimization actually plays out, using a few picked message exchanges. โœจ

Figure 1 is a correspondent registration where an early Binding Update message gets authenticated by proving the mobile node knows a permanent home keygen token ๐Ÿ”‘. The early message carries a Care-of Test Init option, which asks the correspondent node to tuck a fresh care-of keygen token into a Care-of Test option inside the Binding Acknowledgment message ๐ŸŽ€. Then the mobile node wraps things up with a complete Binding Update message. Sooo clean ๐Ÿ’…

Figure 2 is another correspondent registration, but this time the Binding Update is authenticated by proof of reachability at the home address ๐Ÿ . The home address test happens proactively, before the handoff, so the mobile node can send a Binding Update right after the handoff happens ๐Ÿฆ‹. This Binding Update is early too, and a care-of keygen token comes back with the Binding Acknowledgment message ๐ŸŒธ

Figure 3 is the one where the mobile node gets a fresh care-of keygen token first, through the dedicated Care-of Test Init and Care-of Test exchange ๐Ÿงš. After that, it sends a complete Binding Update message authenticated with the CGA property of the home address. Main character energy ๐Ÿ‘‘

4.2. Receiving Binding Update Messages ๐Ÿ’Œ

When the correspondent node gets a Binding Update message, it must first check whether the sending mobile node is the legit owner of the home address in that message ๐Ÿ•ต๏ธโ€โ™€๏ธ. The correspondent node picks the authentication method based on the home nonce index in the Nonce Indices option of the Binding Update message, and on whether the Binding Update message has CGA Parameters and Signature options:

  • If the home nonce index is set to a non-null value and the Binding Update message includes one or more CGA Parameters options followed by a Signature option, the correspondent node MUST authenticate the Binding Update message based on the CGA property of the mobile node's home address. ๐Ÿ’–
  • If the home nonce index is zero and the Binding Update message does not include one or more CGA Parameters options followed by a Signature option, the correspondent node MUST authenticate the Binding Update message by a proof of the mobile node's knowledge of a permanent home keygen token. ๐Ÿ”‘
  • If the home nonce index is set to a non-null value and the Binding Update message does not include one or more CGA Parameters options followed by a Signature option, the correspondent node MUST authenticate the Binding Update message through a proof of the mobile node's reachability at the home address. ๐Ÿก

On top of the validation procedure for Binding Update messages specified in [1], the correspondent node must also take these extra steps to reject Binding Update messages that are authenticated the wrong way ๐Ÿšซ:

  • If the Binding Update message includes one or more CGA Parameters options followed by a Signature option and the home nonce index is zero, the correspondent node MUST send a Binding Acknowledgment message with status code 150 ("Non-null home nonce index expected"). This makes sure that a Binding Update authenticated based on the CGA property of the mobile node's home address also proves reachability at the home address. No shortcuts, periodt ๐Ÿ’…
  • If the Binding Update message is to be authenticated by a proof of the mobile node's knowledge of a permanent home keygen token, the correspondent node MUST verify that it has a Binding Cache entry for the mobile node that includes a permanent home keygen token. If there's no Binding Cache entry for the mobile node, or the existing one doesn't include a permanent home keygen token, the correspondent node MUST reject the Binding Update message by sending a Binding Acknowledgment message with status code 147 ("Permanent home keygen token unavailable"). ๐Ÿฅบ
  • If the Binding Update message is to be authenticated through a proof of the mobile node's reachability at the home address, the correspondent node MUST verify that its Binding Cache entry for the mobile node does not have a permanent home keygen token. If the Binding Cache entry does have one, the correspondent node MUST reject the Binding Update message by sending a Binding Acknowledgment message with status code 149 ("Permanent home keygen token exists"). This stops an attacker from downgrading the authentication method to hijack a legit mobile node's binding. Not on my watch ๐Ÿ˜ค

The authenticator for the Binding Update message is calculated from a permanent or temporary home keygen token. Which type the correspondent node uses to validate the authenticator, and how it gets or recomputes that token, depends on the authentication method ๐Ÿงฉ:

  • If the Binding Update message is to be authenticated based on the CGA property of the mobile node's home address, the correspondent node MUST recompute the temporary home keygen token defined by the (non-null) home nonce index in the Nonce Indices option of the Binding Update message, and it MUST use this recomputed token to validate the authenticator of the message. โœจ
  • If the Binding Update message is to be authenticated by a proof of the mobile node's knowledge of a permanent home keygen token, the correspondent node MUST use the permanent home keygen token in its Binding Cache entry for the mobile node to validate the authenticator of the Binding Update message. ๐Ÿ”
  • If the Binding Update message is to be authenticated through verification of the mobile node's reachability at the home address, the correspondent node MUST recompute the temporary home keygen token defined by the (non-null) home nonce index in the Nonce Indices option of the Binding Update message, and it MUST use this recomputed token to validate the authenticator of the message. ๐Ÿ 

Unless the Binding Update message is meant to delete an existing binding at the correspondent node, the authenticator is also calculated from a care-of keygen token ๐Ÿง. Which care-of keygen token gets used depends on whether the Binding Update message is complete or early:

  • If the care-of nonce index in the Nonce Indices option of the Binding Update message is set to a non-null value, the Binding Update message is complete. In this case, the correspondent node MUST recompute the care-of keygen token identified by the care-of nonce index, and it MUST use this recomputed token to validate the authenticator of the message. ๐ŸŽ€
  • If the care-of nonce index in the Nonce Indices option of the Binding Update message is zero, the Binding Update message is early. The care-of keygen token used to validate the authenticator of the Binding Update message is zero in this case. ๐ŸŒฑ

Last step: the correspondent node validates the authenticator in the Binding Update message using the chosen home and care-of keygen tokens, following the algorithm in Section 9.5.1 of [1]. ๐Ÿงฎ

If validation fails, the correspondent node MUST discard the Binding Update message. It may have to send a Binding Acknowledgment message with a status code that shows the failure, as described in [1]. ๐Ÿ™…โ€โ™€๏ธ

As long as the authenticator validation in the Binding Update message succeeds, the correspondent node registers the mobile node's new care-of address. It either updates an existing Binding Cache entry or creates a brand-new one ๐Ÿ†•. The lifetime granted for the binding depends on the lifetime the mobile node asked for in the Lifetime field of the Binding Update message, plus the method used to authenticate it. If the Binding Update message is authenticated based on the CGA property of the mobile node's home address or by a proof of knowledge of a permanent home keygen token, the lifetime for the binding SHOULD be set to the maximum of MAX_CGA_BINDING_LIFETIME and the value in the Lifetime field of the Binding Update message. If the Binding Update message is authenticated through a proof of reachability at the home address, the lifetime for the binding SHOULD be set to the maximum of MAX_RR_BINDING_LIFETIME [1] and the value in the Lifetime field of the Binding Update message. Either way, the correspondent node may grant an even shorter lifetime, but it MUST NOT accept a longer one โณ๐Ÿ’œ

The state of the new care-of address depends on whether the Binding Update message is complete or early ๐Ÿšฆ:

  • If the Binding Update message is complete, the new care-of address is set to VERIFIED state. The correspondent node may then immediately send packets to the new care-of address without restrictions. ๐ŸŸข
  • If the Binding Update message is early, the new care-of address is set to UNVERIFIED state. The correspondent node MUST then follow the rules in Section 4.10 for sending packets to this care-of address until the care-of address is set to VERIFIED state. ๐ŸŸก

If the Binding Update message has one or multiple CGA Parameters options, the mobile node is asking the correspondent node to accept the included CGA parameters, either to set up a new permanent home keygen token or to renew an existing one shared between the two of them ๐Ÿค. In this case, the correspondent node MUST check whether the CGA Parameters options are directly followed by a Signature option and, if so, validate the CGA parameters and signature as described in Section 4.6. ๐Ÿ”

If the CGA Parameters option is not directly followed by a Signature option, or the validation of the included CGA parameters and signature fails, the correspondent node MUST discard the Binding Update message and send a Binding Acknowledgment message with status code 148 ("CGA and signature verification failed") to the mobile node. ๐Ÿ’”

As long as the signature in the Signature option is correct, the correspondent node generates a permanent home keygen token to share with the mobile node and stores it in its Binding Cache entry for the mobile node ๐Ÿ”‘โœจ. The permanent home keygen token is sent to the mobile node inside a Binding Acknowledgment message, as described in Section 4.3. ๐ŸŽ

4.3. Sending Binding Acknowledgment Messages ๐Ÿ’Œ

okay so bestie, the correspondent node sends a Binding Acknowledgment message back to the mobile node after it gets a valid Binding Update message, and it does this in any of these cases: ๐Ÿฆ‹

  • The Acknowledge flag in the Binding Update message is set.
  • The Binding Update message contains one or multiple CGA Parameters options directly followed by a Signature option, and the signature included in the latter was determined to be correct.
  • The Binding Update message is early and includes a Care-of Test Init option.

if the Binding Update message also has a CGA Parameters Request option and the correspondent node's IP address is a CGA, the correspondent node MUST include its CGA parameters and signature in the Binding Acknowledgment message by adding one or more CGA Parameters options directly followed by a Signature option. โœจ this is the part that lets the mobile node check that the permanent home keygen token it got back really came from the right correspondent node, which is so iconic. if the Binding Update message has a CGA Parameters Request option but the correspondent node's IP address is not a CGA, the correspondent node ignores that option and keeps processing the Binding Update message as described below. ๐Ÿ™ˆ

if the Binding Update message contains one or multiple CGA Parameters options directly followed by a Signature option, and the signature included in the latter was determined to be correct, the correspondent node MUST add a Permanent Home Keygen Token option (see Section 5.3) with a new permanent home keygen token to the Binding Acknowledgment message. the correspondent node also stores this permanent home keygen token in its Binding Cache entry for the mobile node. ๐Ÿ”ฅ

if the Binding Update message includes a Care-of Test Init option, the correspondent node MUST append to the Binding Acknowledgment message a Care-of Test option with a pseudo-random value in the Care-of Keygen Token field. the Care-of Test option MUST appear after the Permanent Home Keygen Token option in case both options are present in the Binding Acknowledgment message. ๐Ÿ’œ

a Binding Authorization Data option must be added to the Binding Acknowledgment message as a last option, as described in Section 5.2 and Section 6.2.7 of [1]. ๐ŸŽ€


4.4. Receiving Binding Acknowledgment Messages ๐Ÿงš

first things first, a mobile node verifies a received Binding Acknowledgment message according to the rules specified in [1]. as long as the message isn't rejected under those rules, the mobile node takes the following additional steps. ๐Ÿ’…

if the mobile node included a CGA Parameters Request option in the Binding Update message and the Binding Acknowledgment message contains a Permanent Home Keygen Token option, the mobile node first processes any CGA Parameters and Signature options in the Binding Acknowledgment message like this. if the Binding Acknowledgment message contains one or more CGA Parameters options that are directly followed by a Signature option, the mobile node MUST check the ownership of the correspondent node's IP address by verifying the included CGA parameters and signature as described in Section 4.6. if the validation of the CGA parameters and signature fails, the mobile node MUST silently discard the Binding Acknowledgment message. the mobile node MUST also silently discard the Binding Acknowledgment message if the message includes one or more CGA Parameters options that are not directly followed by a Signature option, or if the Binding Acknowledgment message lacks any CGA Parameters options in the presence of a Signature option. ๐Ÿ˜ญ

if the mobile node did not include a CGA Parameters Request option in the Binding Update message, or the Binding Acknowledgment message does not contain a Permanent Home Keygen Token option, the mobile node ignores any CGA Parameters and Signature options that the Binding Acknowledgment message may contain. using the CGA Parameters Request option carefully in Binding Update messages is a power move ๐Ÿ‘‘, because it lets the mobile node control how much processing it spends on verifying a correspondent node's CGA, and it lets the mobile node turn that verification off when there are persistent verification failures. those failures may come from misconfigured or outdated CGA software [12] on the correspondent node side or at the mobile node itself. specifically, if the mobile node repeatedly fails to receive a Binding Acknowledgment message including valid CGA Parameters and Signature options in response to sending a Binding Update message with a CGA Parameters Request option, the mobile node SHOULD refrain from including a CGA Parameters Request option in future Binding Update messages for the same correspondent node. ๐ŸŒธ

if the mobile node included a CGA Parameters Request option in the Binding Update message, but the Binding Acknowledgment message does not contain any CGA Parameters or Signature options, the mobile node cannot be sure whether the correspondent node's IP address is simply not a CGA, or whether the Binding Acknowledgment message comes from an attacker on the path between the mobile node and the correspondent node. ๐Ÿ•ต๏ธโ€โ™€๏ธ to avoid accepting a permanent home keygen token from an on-path attacker, the mobile node MUST give precedence to Binding Acknowledgment messages that include valid CGA Parameters and Signature options over Binding Acknowledgment messages without such options. one possible algorithm the mobile node can follow here is to always accept the Binding Acknowledgment message received first. then, if that message doesn't contain valid CGA Parameters or Signature options, and another Binding Acknowledgment message including such options arrives later on, the mobile node reverts any state changes involved in accepting the first Binding Acknowledgment in favor of this subsequent one. giving precedence to Binding Acknowledgment messages with valid CGA Parameters and Signature options over those without such options lets the mobile node talk to correspondent nodes that don't use a CGA, and at the same time protects against most on-path attackers. the strategy does not protect against an attacker that can intercept Binding Acknowledgment messages from the correspondent node, but that kind of attacker could block mobility management between the two nodes anyway. ๐Ÿซถ when the mobile node has permanently accepted a Binding Acknowledgment message without valid CGA Parameters and Signature options, the mobile node SHOULD refrain from including a CGA Parameters Request option in future Binding Update messages for the same correspondent node. ๐Ÿฅ€

if the Binding Acknowledgment message contains a Permanent Home Keygen Token option, the mobile node extracts the permanent home keygen token from this option and stores it in its Binding Update List entry for the correspondent node. future Binding Update messages will then be authenticated by a proof of the mobile node's knowledge of this permanent home keygen token. ๐Ÿ”

if the Binding Acknowledgment message contains a Care-of Test option, the mobile node extracts the care-of keygen token from this option, stores the token in its Binding Update List entry for the correspondent node, and sends the correspondent node a complete Binding Update message as defined in Section 4.1. note that the complete Binding Update message will be authenticated based on the CGA property of the mobile node's home address if the Binding Acknowledgment message also includes a Permanent Home Keygen Token option. this is independent of the authentication method that was used for the corresponding early Binding Update message. ๐ŸŒˆ

a mobile node MUST ensure that, while it has a binding for a certain home address at a correspondent node, it also has a valid binding at its home agent for the same home address. this may sometimes require the mobile node to extend the binding lifetime at the home agent, to ask a correspondent node to use a binding lifetime shorter than the permitted maximum, or to explicitly deregister an existing binding at a correspondent node. ๐Ÿ 

if the mobile node authenticates Binding Update messages for a particular correspondent node by proving its knowledge of a permanent home keygen token, but registrations at this correspondent node keep failing, the mobile node SHOULD renew the permanent home keygen token. it does this by sending a Binding Update message that is authenticated based on the CGA property of its home address. this Binding Update message includes the mobile node's CGA parameters and signature, and it asks the correspondent node to generate a new permanent home keygen token and send it to the mobile node within a Binding Acknowledgment message. ๐Ÿ”„

if the mobile node persistently receives Binding Acknowledgment messages with status code 148 ("CGA and signature verification failed") from a correspondent node, the mobile node SHOULD authenticate future Binding Update messages for the same correspondent node through a proof of its reachability at the home address. this lets the mobile node recover from misconfigured or outdated CGA software [12] on the correspondent node side or at the mobile node itself. ๐Ÿ“

4.5. Sending CGA Parameters

okay so a mobile node tucks its CGA parameters and signature into a Binding Update message for a correspondent node in any of these situations ๐Ÿ’–

  • To acquire a permanent home keygen token if the mobile node's home address is a CGA, and the mobile node does not yet have a permanent home keygen token from the correspondent node. ๐ŸŽ€
  • To extend the lifetime of an existing binding if the mobile node already has a permanent home keygen token from the correspondent node, and the lifetime of the binding at the correspondent node is about to expire. โณ
  • To renew an existing permanent home keygen token to prevent replay attacks in the imminent event of a sequence number rollover, or for improved protection against cryptanalysis. ๐Ÿ”

A correspondent node whose IP address is a CGA does the same thing in reverse ๐Ÿฆ‹. It includes its CGA parameters and signature in a Binding Acknowledgment message for the mobile node when it receives a Binding Update message with a CGA Parameters Request option.

The CGA parameters go out in the format of the CGA Parameters data structure defined in [2]. That structure gets split over one or more CGA Parameters options, as described in Section 5.1. โœจ The last CGA Parameters option MUST be directly followed by a Signature option. No exceptions, bestie ๐Ÿ™…โ€โ™€๏ธ

The value for the Signature field in the Signature option is calculated with the signature generation algorithm defined in Section 6 of [2]. It's signed with the mobile or correspondent node's private key over this sequence of octets ๐ŸŒธ

   mobility data =
      care-of address | correspondent node IP address | MH data

Where "|" means concatenation. "Care-of address" is the mobile node's care-of address. "Correspondent node IP address" is the IP address of the correspondent node that is visible to protocol layers above IP. If the correspondent node is mobile, "correspondent node IP address" refers to the correspondent node's home address. ๐Ÿงš

"MH data" is the content of the Binding Update or Binding Acknowledgment message, including the mobility header and all options up to the last CGA Parameters option. So "MH data" leaves out the IPv6 header and any IPv6 extension headers other than the mobility header itself. ๐Ÿ™ˆ The "mobility data" is what the spec calls the "message" in Section 6 of [2].

Here's a lowkey tricky bit ๐Ÿ‘€ The Signature field value gets calculated as if the Checksum field in the mobility header was zero. The Checksum field in the transmitted packet still gets calculated the usual way, with the calculated value in the Signature field being part of the packet protected by the checksum. Iconic layering ๐Ÿ’…

4.6. Receiving CGA Parameters

Mobile and correspondent nodes that receive a Binding Update or Binding Acknowledgment message with one or more CGA Parameters options directly followed by a Signature option first process the message as described in [1]. That includes checking the authenticator in the Authenticator field of the Binding Authorization Data option. If the message gets rejected because of an incorrect authenticator or for any other reason, it doesn't get processed any further. ๐Ÿšซ

If the validation of the message succeeds, the mobile or correspondent node reassembles the CGA Parameters data structure from the CGA Parameters options in the message, as described in Section 5.1. Then it runs the CGA verification algorithm defined in Section 5 of [2] ๐Ÿ”

The CGA verification algorithm takes two inputs: the to-be-verified CGA and the reassembled CGA Parameters data structure. When the correspondent node runs it, the to-be-verified CGA is the mobile node's home address. When the mobile node runs it, the to-be-verified CGA is the correspondent node's IP address that is visible to protocol layers above IP. If the correspondent node is mobile, that's its home address. If the CGA verification fails, the steps below get skipped ๐Ÿ™ƒ

If the CGA verification succeeds, the mobile or correspondent node does a more time-consuming check of the signature. It pulls the signature out of the Signature field in the Signature option and runs the signature verification algorithm defined in Section 6 of [2] ๐Ÿง That algorithm takes four inputs: the to-be-verified CGA as defined above, the reassembled CGA Parameters data structure, the MH data as defined in Section 4.5, the CGA Message Type tag of Enhanced Route Optimization as defined in Section 7, and the signature itself. Lots of ingredients, very thorough ๐Ÿฅฐ

4.7. Sending Permanent Home Keygen Tokens

A correspondent node hands a mobile node a new permanent home keygen token after it has received a Binding Update message from that mobile node with CGA Parameters and Signature options included, and those options have been successfully validated as described in Section 4.6. ๐ŸŽ‰ The permanent home keygen token is a 64-bit value randomly generated by the correspondent node. The correspondent node stores it in the binding cache entry it maintains for the mobile node. ๐Ÿ—๏ธ

The correspondent node sends the permanent home keygen token to the mobile node in encrypted form, inside a Permanent Home Keygen Token option in a Binding Acknowledgment message. It sends this message even if the Acknowledge flag in the corresponding Binding Update message was clear ๐Ÿ™Œ The correspondent node encrypts the token with the mobile node's public key using the RSAES-PKCS1-v1_5 format [4], then puts the ciphertext into the Permanent Home Keygen Token field of the Permanent Home Keygen Token option.

The Binding Authorization Data option MUST be the last option in the Binding Acknowledgment message. That means the authenticator in the Binding Authorization Data option covers the Permanent Home Keygen Token option too. Locked in ๐Ÿ”’

4.8. Receiving Permanent Home Keygen Tokens

A mobile node that receives a Binding Acknowledgment message first processes it as described in [1], no matter whether the message includes a Permanent Home Keygen Token option. That includes checking the authenticator in the Authenticator field of the Binding Authorization Data option. If the message is rejected because of an incorrect authenticator or for any other reason, the mobile node does not process it any further. ๐Ÿ›‘

Otherwise, if the mobile node accepts the Binding Acknowledgment message and the message includes a Permanent Home Keygen Token option, the mobile node pulls the ciphertext out of the Permanent Home Keygen Token field and decrypts it with its private key using the RSAES-PKCS1-v1_5 format [4]. The result is the permanent home keygen token to be used in further registrations with the correspondent node. โœจ The mobile node stores the token in the Binding Update List entry it maintains for the correspondent node ๐Ÿ“‹

4.9. Renewing Permanent Home Keygen Tokens

A mobile node that shares a permanent home keygen token with a correspondent node MUST NOT use the same sequence number twice with that permanent home keygen token, so it stays protected against replay attacks ๐Ÿ›ก๏ธ The mobile node MUST renew the permanent home keygen token by including its CGA parameters and signature in a Binding Update message for the correspondent node when a sequence number rollover is imminent. ๐Ÿ”„

Also, the mobile node MAY renew its permanent home keygen token at any time. Periodic renewal gives increased protection against cryptanalysis, which is very much a main character move ๐Ÿฆธโ€โ™€๏ธ Finally, the mobile node may in most cases want to renew the permanent home keygen token when the lifetime of its binding at the correspondent node expires. โญ

4.10. Handling Payload Packets ๐ŸŽ€

Bestie, this is the moment after a handoff where things get fast. โœจ If the mobile node sends an early Binding Update right away, the mobile node and correspondent node can get route-optimized communication going again through the mobile node's new care-of address. ๐Ÿฆ‹ The mobile node can start sending payload packets to the correspondent node from that new care-of address as soon as it has dispatched the early Binding Update. ๐Ÿ’จ The correspondent node then redirects its outgoing payload packets for the mobile node to the new care-of address, once it has received the early Binding Update and registered that address. And quick reminder: a "payload packet" just means a packet that comes from a protocol layer above IP. ๐Ÿ’…

        Inbound
     payload packet
           |
           |
           V
   _________________                           _____________________
  /                 \                         |                     |
 /  Care-of address  \     Yes                |   Increase credit   |
|         in          |---------------------> |     counter by      |
 \  VERIFIED state?  /                        | payload packet size |
  \_________________/                         |_____________________|
           |                                             |
           |                                             |
           | No                                          |
           |                                             V
           |                                   _____________________
           |                                  |                     |
           |                                  |   Deliver payload   |
           +--------------------------------> |   packet to upper-  |
                                              |    layer protocol   |
                                              |_____________________|

             Figure 4: Handling outbound payload packets

Okay so, a new care-of address that got registered with an early Binding Update stays in UNVERIFIED state on the correspondent node's side until the correspondent node gets a complete Binding Update from the mobile node. ๐Ÿ” Once that happens, the correspondent node flips the care-of address to VERIFIED state. โœ… This state is a big deal because it decides how much data the correspondent node is allowed to send to that care-of address. It's there to stop amplified, redirection-based flooding attacks, so it's giving security, periodt. ๐Ÿ›ก๏ธ To track this, the correspondent node keeps a "credit counter" for every mobile node that has an entry in its Binding Cache. ๐Ÿง

Whenever a payload packet shows up from a mobile node whose care-of address is in VERIFIED state, the correspondent node SHOULD increase that mobile node's credit counter by the size of the packet. ๐Ÿ’– Policy is allowed to restrict this, though. The correspondent node MAY be limited to a smaller increase, or no increase at all. ๐Ÿ™ˆ And if an inbound payload packet comes from a care-of address in UNVERIFIED state, the credit counter just stays the same. ๐Ÿ˜Œ Figure 4 is the flow chart for all of this, so check it out. ๐Ÿ“Š

        Outbound
     payload packet
           |
           |
           V
   _________________                           _____________________
  /                 \                         |                     |
 /  Care-of address  \     Yes                |    Send payload     |
|         in          |---------------------> |      packet to      |
 \  VERIFIED state?  /                        |   care-of address   |
  \_________________/                         |_____________________|
           |
           |                                   _____________________
           | No                               |                     |
           |                                  |   Discard payload   |
           |                      +---------> |        packet       |
           |                      |           |     immediately     |
           V                      |           |_____________________|
   _________________              |            _____________________
  /                 \             |           |                     |
 /  Credit counter   \   Yes     / \          |    Send payload     |
|  less than payload  |-------> |   |-------> |      packet to      |
 \   packet size?    /           \ /          |    home address     |
  \_________________/             |           |_____________________|
           |                      |            _____________________
           |                      |           |                     |
           | No                   |           |   Buffer payload    |
           |                      +---------> |     packet for      |
           |                                  | later transmission  |
           |                                  |_____________________|
           V
 _____________________                         _____________________
|                     |                       |                     |
|    Reduce credit    |                       |    Send payload     |
|     counter by      |---------------------> |      packet to      |
| payload packet size |                       |   care-of address   |
|_____________________|                       |_____________________|

             Figure 5: Handling outbound payload packets

Now for the other direction. ๐ŸŒˆ When the correspondent node has a payload packet for the mobile node, what happens next depends on two things: the state of the mobile node's care-of address, and the current credit counter value. Figure 5 lays it out. ๐Ÿ—บ๏ธ If the care-of address is in VERIFIED state, the correspondent node MUST send the payload packet to the mobile node's care-of address. ๐Ÿš€ If the care-of address is in UNVERIFIED state and the credit counter is greater than or equal to the packet size, the correspondent node MUST reduce the counter by the packet size and still send the packet to the care-of address. ๐Ÿ’ธ But if the care-of address is in UNVERIFIED state and the counter is less than the packet size, the payload packet MUST NOT be sent to the mobile node's care-of address. ๐Ÿšซ In that case the correspondent node SHOULD discard the packet, though it MAY instead buffer it until the care-of address moves to VERIFIED state, or send it to the mobile node's home address. ๐Ÿง  The credit counter does not change when the correspondent node sends a payload packet to a care-of address that is already in VERIFIED state. ๐Ÿ’…

The state of the mobile node's care-of address never limits how much data the mobile node can send to the correspondent node. ๐Ÿ™Œ It also doesn't change how payload packets are addressed or routed in either direction. Every payload packet from the mobile node has the care-of address in the Source Address field of the IPv6 header, and the home address goes in the Home Address option of the IPv6 Destination Options extension header. ๐Ÿ  And every payload packet from the correspondent node has the care-of address in the Destination Address field of the IPv6 header, with the home address in the IPv6 Routing extension header. ๐Ÿงญ

4.11. Credit Aging ๐Ÿซง

The correspondent node makes sure all of its credit counters slowly go down over time. โณ Each credit counter gets multiplied by a factor called CreditAgingFactor, which is less than one, at fixed intervals of CreditAgingInterval length. This is called "credit aging," and it caps how much credit a mobile node can pile up, as long as the credit comes in at a steady or nearly steady rate. ๐Ÿ“‰ That also puts an upper limit on how fast the correspondent node can keep sending to a care-of address that's still in UNVERIFIED state. ๐Ÿ›‘ Without credit aging, a sneaky node with terrible uplink capacity could pretend to be a mobile node, build up credit super slowly over a long stretch, then blow all of it in a short burst redirecting payload packets at a victim's IP address. ๐Ÿ˜ฑ Not it. ๐Ÿ™…โ€โ™€๏ธ

Picking good values for CreditAgingFactor and CreditAgingInterval really matters, especially for apps where the correspondent node sends faster than the mobile node. ๐ŸŽ๏ธ If either one is too small, the credit counter could keep blocking payload packets to a care-of address in UNVERIFIED state, and that's a vibe killer. ๐Ÿ’€ The values in Section 7 are RECOMMENDED, because they work well when the correspondent node sends a file to the mobile node over a TCP connection and the end-to-end round-trip time stays at or under 500 milliseconds. ๐Ÿ“โœจ

4.12. Simultaneous Movements ๐Ÿฆ‹

As [1] specifies, Binding Update messages get sent to a mobile correspondent node's home address. ๐Ÿ’Œ That's what lets two mobile nodes keep talking even when both of them change IP connectivity at the same time. ๐Ÿ‘ฏโ€โ™€๏ธ Iconic. ๐Ÿ‘‘

5. Option Formats and Status Codes ๐Ÿ’…

Enhanced Route Optimization uses a set of new mobility options and status codes. ๐ŸŒธ These are on top of the ones already defined in [1], and they're described below. ๐Ÿฉท

5.1. CGA Parameters Option โœจ

okay so the CGA Parameters option is the one that shows up in Binding Update and Binding Acknowledgment messages ๐Ÿ’– it carries part of the mobile or correspondent node's CGA parameters. [1] caps mobility header options at a maximum length of 255 bytes, not counting the Option Type and Option Length fields. the CGA parameters are almost always bigger than that, so you may need to chain several CGA Parameters options together to fit everything ๐Ÿงฉ

here's the layout ๐ŸŽ€

      0                   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
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                     |  Option Type  | Option Length |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                                               |
     :                                                               :
     :                          CGA Parameters                       :
     :                                                               :
     |                                                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Option Type ๐Ÿฆ‹

8-bit identifier of the type of this mobility option. its value is 12.

Option Length ๐ŸŒธ

8-bit unsigned integer representing the length of the CGA Parameters field in octets.

CGA Parameters ๐Ÿ‘‘

this field holds up to 255 bytes of the CGA Parameters data structure defined in [2]. when you put all the CGA Parameters options together in the order they show up in the Binding Update message, you MUST end up with the original CGA Parameters data structure ๐Ÿซถ every CGA Parameters option in the Binding Update message except the last one MUST contain exactly 255 bytes in its CGA Parameters field, and its Option Length field MUST be set to 255 to match ๐Ÿ’… and all the CGA Parameters options MUST sit directly one after another. a mobility option of a different type MUST NOT be squeezed in between two of them ๐Ÿ™ˆ

5.2. Signature Option ๐Ÿ”

the Signature option is used in Binding and Binding Acknowledgment Update messages. it carries a signature that the mobile or correspondent node makes with its private key, covering one or more of the CGA Parameters options that came before it โœจ

here's the layout ๐ŸŽ€

      0                   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
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                     |  Option Type  | Option Length |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                                               |
     :                                                               :
     :                            Signature                          :
     :                                                               :
     |                                                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Option Type ๐Ÿฆ‹

8-bit identifier of the type of this mobility option. its value is 13.

Option Length ๐ŸŒธ

8-bit unsigned integer representing the length of the Signature field in octets.

Signature ๐Ÿ‘‘

this field has the mobile or correspondent node's signature, made with that node's private key as described in Section 4.5.

5.3. Permanent Home Keygen Token Option ๐Ÿ—๏ธ

the Permanent Home Keygen Token option shows up in Binding Acknowledgment messages ๐Ÿ’œ it carries a permanent home keygen token, which the correspondent node sends back to the mobile node after getting a Binding Update that has one or more CGA Parameters options directly followed by a Signature option from the mobile node. main character energy, honestly โœจ

here's the layout ๐ŸŽ€

      0                   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
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                     |  Option Type  | Option Length |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                                               |
     :                                                               :
     :                  Permanent Home Keygen Token                  :
     :                                                               :
     |                                                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Option Type ๐Ÿฆ‹

8-bit identifier of the type of this mobility option. its value is 14.

Option Length ๐ŸŒธ

8-bit unsigned integer representing the length of the Permanent Home Keygen Token field in octets.

Permanent Home Keygen Token ๐Ÿ‘‘

this field has the permanent home keygen token that the correspondent node generated. the content of this field MUST be encrypted with the mobile node's public key, as defined in Section 4.7 ๐Ÿ”’ before encryption, the permanent home keygen token is 8 octets long. the ciphertext [4] is what goes in the field, though, so the Permanent Home Keygen Token field might end up longer than 8 octets ๐Ÿซถ

5.4. Care-of Test Init Option ๐Ÿงช

the Care-of Test Init option gets included in Binding Update messages ๐ŸŒˆ it asks a correspondent node to send back a Care-of Test option with a fresh care-of keygen token in the Binding Acknowledgment message โœจ

here's the layout ๐ŸŽ€

      0                   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
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                     |  Option Type  | Option Length |
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Option Type ๐Ÿฆ‹

8-bit identifier of the type of this mobility option. its value is 15.

Option Length ๐ŸŒธ

this field MUST be set to zero ๐Ÿ™ˆ

5.5. Care-of Test Option ๐Ÿ“

the Care-of Test option shows up in Binding Acknowledgment messages ๐Ÿ’… it carries a fresh care-of keygen token. the correspondent node sends it to the mobile node after getting a Care-of Test Init option in a Binding Update message ๐Ÿซถ

here's the layout ๐ŸŽ€

      0                   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
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                     |  Option Type  | Option Length |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                                               |
     +                     Care-of Keygen Token                      +
     |                                                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Option Type ๐Ÿฆ‹

8-bit identifier of the type of this mobility option. its value is 16.

Option Length ๐ŸŒธ

this field MUST be set to 8. it represents the length of the Care-of Keygen Token field in octets.

Care-of Keygen Token ๐Ÿ‘‘

this field has the care-of keygen token that the correspondent node generated, as specified in Section 4.3.

5.6. CGA Parameters Request Option ๐ŸŒท

the CGA Parameters Request option gets included in Binding Update messages that are authenticated based on the CGA property of the mobile node's home address ๐Ÿ’– it asks a correspondent node to send back its CGA parameters and signature in the Binding Acknowledgment message. that lets the mobile node check that the permanent home keygen token in the Binding Acknowledgment was generated by the right correspondent node. verification slay ๐Ÿ”

here's the layout ๐ŸŽ€

      0                   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
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                     |  Option Type  | Option Length |
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Option Type ๐Ÿฆ‹

8-bit identifier of the type of this mobility option. its value is 11.

Option Length ๐ŸŒธ

this field MUST be set to zero ๐Ÿซถ

5.7. Status Codes โœจ

okay bestie, Enhanced Route Optimization adds four brand-new status codes ๐Ÿ’– for Binding Acknowledgment messages, on top of the ones already defined in [1] ๐ŸŽ€. Here they are ๐Ÿ‘‡

Permanent home keygen token unavailable (147) ๐Ÿ”‘

A correspondent node returns a Binding Acknowledgment message with status code 147 to a mobile node if it has received from the mobile node a Binding Update message that was authenticated through the CGA property of the mobile node's home address, but the correspondent node either does not have a Binding Cache entry for the mobile node, or the existing Binding Cache entry for the mobile node does not contain a permanent home keygen token. A Binding Acknowledgment message with status code 147 tells the mobile node that it should request a new permanent home keygen token from the correspondent node by sending the correspondent node a Binding Update message that includes its CGA parameters and signature. This is what lets the mobile node quickly recover from state loss at the correspondent node ๐Ÿฆ‹.

[1] does not allow a correspondent node to send a Binding Acknowledgment message with a status code indicating failure when the authenticator of a received Binding Update message turns out to be incorrect. That causes extra handoff latency with high probability, because the mobile node can only detect the problem after a retransmission timer expires ๐Ÿ˜ญ. The mobile node is also likely to assume packet loss and resend the incorrectly authenticated Binding Update message several more times. A Binding Acknowledgment message with status code 147 helps the mobile node spot the underlying problem much more efficiently when the correspondent node could not verify the CGA property of the mobile node's home address ๐Ÿ’….

CGA and signature verification failed (148) ๐Ÿšซ

A correspondent node returns a Binding Acknowledgment message with status code 148 to a mobile node if it has received from the mobile node a Binding Update message that includes one or more CGA Parameters options directly followed by a Signature option, but either the CGA property of the home address cannot be verified based on the contents of the CGA Parameters options, or the verification of the signature in the Signature option has failed.

Permanent home keygen token exists (149) ๐ŸŒˆ

A correspondent node returns a Binding Acknowledgment message with status code 149 to a mobile node if it has received from the mobile node a Binding Update message that was authenticated through verification of the mobile node's reachability at the home address and does not include one or more CGA Parameters options directly followed by a Signature option, but the correspondent node has a permanent home keygen token in its Binding Cache entry for the mobile node. The Binding Update message is processed further if it includes one or more CGA Parameters options directly followed by a Signature option. This lets a mobile node get a new permanent home keygen token from the correspondent node in case it has lost the existing one, for instance due to a reboot ๐Ÿ”„. Whether the correspondent node accepts the Binding Update message in this case depends on the verification of the CGA parameters and the signature provided in the Binding Update message ๐Ÿง.

Non-null home nonce index expected (150) ๐Ÿ™…โ€โ™€๏ธ

A correspondent node returns a Binding Acknowledgment message with status code 150 to a mobile node if it has received from the mobile node a Binding Update message that includes one or more CGA Parameters options directly followed by a Signature option, but the home nonce index specified in the Nonce Indices option is zero. This behaviour makes sure that a Binding Update message authenticated based on the CGA property of the mobile node's home address also provides proof of the mobile node's reachability at the home address ๐ŸŒธ.


6. Security Considerations ๐Ÿ”’

Enhanced Route Optimization is different from base Mobile IPv6 because it applies a set of optimizations for better handoff performance, stronger security, and less signaling overhead ๐Ÿš€. These optimizations bring the following conceptual changes to the security model [5] of base Mobile IPv6:

  • Base Mobile IPv6 runs periodic tests of a mobile node's reachability at the home address as proof of home address ownership. Enhanced Route Optimization uses an initial cryptographic home address ownership proof, combined with a check of the mobile node's reachability at the home address, to securely exchange a secret permanent home keygen token ๐Ÿ—๏ธ. That permanent home keygen token is used to cryptographically authenticate the mobile node during later correspondent registrations, so those later registrations can be securely bound to the initial home address ownership proof ๐Ÿ’œ. No further periodic reachability tests at the home address are performed.
  • Base Mobile IPv6 requires a mobile node to prove its reachability at a new care-of address during a correspondent registration. That means the mobile node and the correspondent node have to exchange Care-of Test Init and Care-of Test messages before the mobile node can start the binding update proper ๐Ÿข. Enhanced Route Optimization lets the mobile node send the binding update first and follow up with a proof of reachability at the care-of address โšก. Mobile and correspondent nodes can resume communications early after a handoff, while reachability verification happens at the same time โœจ. The amount of data the correspondent node is allowed to send to the care-of address until reachability verification completes is governed by Credit-Based Authorization ๐Ÿ’ฐ.
  • The maximum binding lifetime for correspondent registrations is 7 minutes in base Mobile IPv6, so a mobile node has to periodically refresh a correspondent registration when it doesn't change IP connectivity for a while ๐Ÿ˜ด. This protocol raises the maximum binding lifetime to 24 hours, which cuts the need for periodic refreshes down to a negligible level ๐ŸŽ‰.

The discussion that follows looks at what these conceptual changes to the Mobile IPv6 security model mean in practice ๐Ÿง . It should be read together with the security considerations of [1], [2], and [5] ๐Ÿ“š.

6.1. Home Address Ownership ๐Ÿ’–

Okay bestie, so Enhanced Route Optimization requires a mobile node to deliver a strong cryptographic proof [2] that it's the legit owner of the home address it wants to use ๐Ÿ”โœจ. The proof is based on the true home address owner knowing the private half of a public/private-key pair, and that pair needs two properties:

  • As an input to an irreversible CGA generation function, along with a set of auxiliary CGA parameters, the public key results in the mobile node's home address. ๐Ÿ”‘
  • Among the CGA parameters fed into the CGA generation function is a modifier that, as an input to an irreversible hash extension function along with the public key, results in a string with a certain minimum number of leading zeroes. Three reserved bits in the home address encode this minimum number. ๐ŸŽ€

The first property locks the home address to the mobile node's public key and, thanks to public-key cryptography, to the private key too ๐Ÿ”’. That means the mobile node can claim the address by proving it knows the private key, which is so iconic. The second property makes brute-force searching for a key pair that passes the first property way more expensive ๐Ÿ’…. This matters because a cryptographically generated home address only has 59 bits with cryptographic significance. Without the second property, an attacker could find a suitable key pair in O(2^59) steps, and that is NOT it ๐Ÿ’€. With the second property added, the brute-force complexity goes up to O(2^(59+N)) steps, where N is the minimum number of leading zeroes that the result of the hash extension function is required to have ๐Ÿ“ˆ.

In practice, a legit mobile node has to brute-force a suitable modifier first, and then use that modifier to run the CGA generation function. An attacker who wants to spoof the mobile node's home address, so-called "IP address stealing" [5], has two options ๐Ÿ•ต๏ธโ€โ™€๏ธ. It could generate its own public/private-key pair and brute-force a modifier that, combined with that public key, satisfies the two properties above. Or it could factor the mobile node's public key, deduce the matching private key, and copy the mobile node's modifier without any brute-force search. The mobile node controls the cost either way ๐Ÿ™Œ. Factoring a public key gets harder as the key gets longer, and the key length is up to the mobile node. The brute-force cost for a modifier goes up with the number of leading zeroes the hash extension result has to have, and the mobile node picks that number too. Downgrading attacks, where an attacker lowers the cost of spoofing a cryptographically generated home address by picking CGA parameters that are weaker than the ones the mobile node used, are therefore impossible ๐Ÿšซ.

The CGA specification [2] requires RSA public and private keys and sets a minimum key length of 384 bits. That requirement was tailored to Secure Neighbor Discovery for IPv6 [13], which was the original CGA application ๐ŸŒธ. Enhanced Route Optimization does not raise the minimum key length. Without downgrading attacks, as explained above, using short keys doesn't weaken home addresses that were generated with longer keys ๐Ÿฆ‹. Also, extensions to [2] may eventually allow public/private-key classes other than RSA, and those extensions work fine with the CGA application of Enhanced Route Optimization โœจ. You still have to pick a key class and length carefully though ๐Ÿง. Home addresses are usually pretty stable, so the chosen parameters need to stay secure for what could be a really long home address lifetime โณ. When RSA keys are used, a minimum key length of 1024 bits is therefore RECOMMENDED ๐Ÿ’œ.

The CGA generation function ties the interface identifier of a home address to its subnet prefix, but it accepts any subnet prefix. So a node can still generate a home address with a spoofed subnet prefix ๐Ÿ™ˆ. This means the CGA property of a home address does NOT guarantee that the owner can actually be reached at that home address. That gap could be abused in a "return-to-home flooding attack" [5]. Here's how it goes: the attacker uses its own public key to generate a home address with a subnet prefix from a victim network, asks a correspondent node to bind that address to the attacker's current care-of address, starts downloading a large file through the care-of address, and then deregisters the binding or lets it expire. The correspondent node would then send the downloaded packets to the victim network named by the subnet prefix of the spoofed home address ๐Ÿ˜ฑ. The protocol in this document runs a reachability test for the home address when it's first registered with the correspondent node, and that shuts down return-to-home flooding ๐Ÿ›‘.

Verifying the CGA property of a mobile node's home address uses asymmetric public-key cryptography, which is relatively complex next to symmetric cryptography ๐Ÿงฎ. Enhanced Route Optimization softens that cost by using symmetric cryptography after the initial public-key-based verification of the home address is done ๐Ÿช„. Specifically, during the initial correspondent registration, the correspondent node gives the mobile node a permanent home keygen token. The mobile node can then authenticate to the correspondent node during later correspondent registrations using that token. This authentication lets the correspondent node link a later registration back to the original public-key-based verification of the home address ๐Ÿ”—. The permanent home keygen token is never sent in plain text. It's encrypted with the mobile node's public key when first assigned, and it's irreversibly hashed during later correspondent registrations ๐Ÿ”๐Ÿซถ.


6.2. Care-of Address Ownership ๐Ÿก

A secure proof of home address ownership can help with the threat of IP address stealing, but an attacker can still bind a correct home address to a false care-of address. That tricks a correspondent node into redirecting packets, which would otherwise go to the attacker, toward a third party ๐Ÿ˜ค. So if nobody checks that a mobile node is really reachable at its claimed care-of address, one or more correspondent nodes could unknowingly help with a redirection-based flooding attack on a victim the attacker picked ๐Ÿ’€.

Redirection-based flooding attacks can target a single node, a link, or a router or other critical network device upstream of a whole network ๐ŸŒ. So the attacker's spoofed care-of address could be the IP address of a node, a random IP address from a subnet prefix of some particular link, or the IP address of a router or other network device. An attack on a network can hit way more nodes than an attack on one specific node, though neighbors of a victim node on a broadcast link usually get hurt just as much as the victim does ๐Ÿ“ก.

Making mobile nodes generate care-of addresses the same way they generate home addresses would only help a little against redirection-based flooding ๐Ÿคทโ€โ™€๏ธ. Sure, it stops an attacker from registering a specific victim node's IP address as its care-of address. But the attacker could still generate a different CGA-based care-of address with the same subnet prefix as the victim's IP address. Flooding packets redirected to that address wouldn't need to be received and processed by any specific node. They'd still hit a whole link or network and do similar damage ๐Ÿ˜ฉ. So CGA-based care-of addresses don't do much for flooding protection. On top of that, they'd need a computationally expensive, public-key-based ownership proof every single time the care-of address changes ๐Ÿฅต. For all these reasons, Enhanced Route Optimization uses regular IPv6 care-of addresses ๐ŸŽ€.

A common misconception is that a strong proof of home address ownership would stop redirection-based flooding, and that this would make it unnecessary to check a mobile node's reachability at a new care-of address ๐Ÿ™ƒ. This idea may come from the base Mobile IPv6 home registration spec in [1], which calls for authenticating a mobile node with an IPsec security association. It doesn't require that to be backed up by a reachability check at the care-of address. But the reason home registration doesn't have to verify reachability is the administrative relationship between the home agent and the mobile node, NOT the fact that the home agent can securely verify home address ownership or that the registration is IPsec-protected ๐Ÿง . That relationship lets the home agent, first, trust that the mobile node's care-of address is correct, and second, quickly identify the mobile node if it starts acting maliciously, for example because malware got in ๐Ÿฆ . Section 15.3 in [1] and Section 1.3.2 in [5] explain these prerequisites ๐Ÿ“š.

An administrative relationship between the mobile node and its home agent works out fine when we assume trust. The home agent is a core part of the mobility services a mobile user usually subscribes to, sets up herself or himself, or gets through a business relationship ๐Ÿค. A Mobile IPv6 extension [14] uses a shared authentication key that's preconfigured on both the mobile node and the correspondent node. That assumes the same kind of relationship between the mobile node and a correspondent node ๐Ÿ”‘. Section 2 of [14] admits this assumption limits where the protocol can be used. Still, it lets the protocol skip the care-of address reachability check, just like home registration does ๐Ÿ™Œ. Enhanced Router Optimization doesn't make any assumptions about the relationship between mobile and correspondent nodes ๐ŸŒˆ. That makes the protocol work in arbitrary scenarios, but it means correspondent nodes must verify a mobile node's reachability at every new care-of address ๐Ÿ‘‘.

6.3. Credit-Based Authorization

okay bestie, Enhanced Route Optimization lets the mobile node and the correspondent node keep talking both ways after a handoff, even before the correspondent node has verified that the mobile node is reachable at its new care-of address ๐Ÿฆ‹. but that overlap is risky ngl. without protection, it would bring back the redirection-based flooding threat that reachability verification was built to kill ๐Ÿ’€. the correspondent node usually doesn't know the round-trip time to the mobile node, and verification can fail because of packet loss, so it must accept a long enough overlap period for verification to finish โœจ.

the scary part is that an attacker could trick the correspondent node into sending packets to a victim's IP address ๐Ÿ™ˆ. it could also keep stalling verification by registering again, maybe with a different spoofed care-of address, right before the correspondent node's maximum permitted overlap period runs out. then the correspondent node switches to waiting for verification to complete and stops sending packets. this isn't automatically malicious on the correspondent's side, though, because even a totally legit mobile node might never get verified before its care-of address changes again ๐ŸŒธ. that happens with high mobility on the mobile node's side, or with constant packet loss on the path between them. it's honestly hard for the correspondent node to tell whether the other side is legit under rough conditions or actually up to no good ๐Ÿ˜ญ.

Enhanced Route Optimization kills the redirection-based flooding threat even with concurrent verification, and it does it with Credit-Based Authorization ๐Ÿ‘‘. this mechanism manages how much effort the correspondent node spends sending payload packets to a care-of address in UNVERIFIED state, and it's built on three hypotheses ๐Ÿ’…:

  1. a flooding attacker usually wants to dump the work of building and sending flood packets onto someone else. bandwidth is plentiful for lots of attractive victims, so the effort needed to send the huge flood required to knock the victim offline may be more than the attacker can handle itself.
  2. the attacker can always flood a victim directly by generating bogus packets itself and sending them over. that kind of attack isn't amplified, so the attacker has to have enough capacity to create a flood big enough to take the victim down.
  3. so the extra work of setting up and coordinating a redirection-based flood only pays off for the attacker if the correspondent node can be tricked into helping with the attack and amplifying it.

so from the attacker's side, a non-amplified redirection-based flood is no more attractive than a plain direct flood, where the attacker just sends bogus packets at the victim itself ๐Ÿงš. honestly it's even less attractive, because the attacker also has to maintain a mobility management context to coordinate the redirection. so Credit-Based Authorization takes away the motivation for redirection-based flooding by stopping the amplification that could be reached through it, rather than trying to eliminate malicious packet redirection in the first place ๐ŸŽ€. being able to send unrequested packets is just an inherent property of packet-oriented networks, and direct flooding is a threat that comes out of that. direct flooding happens with and without mobility support, so it's a reasonable yardstick for comparing the security of Enhanced Route Optimization to the security of the non-mobile Internet ๐Ÿ’œ. with Credit-Based Authorization in place, Enhanced Route Optimization meets the goal of a security level comparable to the non-mobile Internet, and that's iconic โœจ.

since the person behind a redirection-based flood would be playing the role of a mobile node, Credit-Based Authorization must be enforced on the correspondent node side ๐Ÿซถ. the correspondent node keeps constantly monitoring how much effort the mobile node spends communicating with it. that effort then acts as a limit on how much effort the correspondent node may spend sending payload packets while the mobile node's care-of address is in UNVERIFIED state. this permission to send a limited number of payload packets to an UNVERIFIED care-of address is what lets two-way communication resume right away once the mobile node has registered a new IP address with the correspondent node after a handoff ๐ŸŒˆ.

if something that looks like a mobile node is actually an attacker tricking the correspondent node into redirecting payload packets to a victim's IP address, Credit-Based Authorization makes sure the flood stream stops before the correspondent node's effort on generating it goes over the effort the attacker has recently spent itself ๐Ÿ’…. so the flood attack is at most as effective as a direct flood, which means it can't produce any amplification. iykyk, that's the whole point ๐Ÿ™Œ.

another thing about Credit-Based Authorization is that it does not hand out credit while the mobile node's care-of addresses are in UNVERIFIED state ๐Ÿ“. this needs some justification, because it would technically be possible to give credit no matter what state the care-of address is in. but giving credit for packets received from a care-of address in UNVERIFIED state would open the door to sustained reflection attacks โš ๏ธ. an attacker could make the correspondent node redirect packets meant for the attacker over to a victim's IP address, then keep that flow going toward the victim by continually refilling its credit with packets sent to the correspondent node. even though a redirection-based reflection attack like this wouldn't amplify anything, it could still look tempting to an attacker who wants to start a transport protocol handshake with the correspondent node first (which usually means the attacker has to receive some unguessable data) and then redirect the download to the victim's IP address afterwards ๐Ÿ˜ญ. Credit-Based Authorization makes sure the attacker can't pick up any extra credit once the download has been redirected, and that forces the attack to wrap up fast ๐Ÿ.


6.4. Time Shifting Attacks

okay so Base Mobile IPv6 limits how long a correspondent registration lasts to 7 minutes ๐Ÿ•ฐ๏ธ. this also makes sure the mobile node's reachability at its home and care-of addresses gets reverified regularly โœจ. that stops an attacker from exploiting the return routability procedure's vulnerability to eavesdropping when it's only temporarily on the path between the correspondent node and the spoofed home or care-of address. these "time shifting attacks" [5] could otherwise be abused for off-path IP address stealing, return-to-home flooding, or flooding against care-of addresses ๐Ÿ’€.

Enhanced Route Optimization skips repeating both the initial home address test and any care-of address test, all to cut down handoff delays and signaling overhead ๐Ÿš€. this doesn't weaken protection against IP address stealing, because the CGA-based ownership proof required for home addresses already shuts those attacks down ๐Ÿ”’. reachability verification doesn't add any extra protection on that front. on the flip side, limiting reachability verification to just the initial one makes time-shifted, off-path flooding attacks easier to pull off ๐Ÿ˜ฌ. that's true whether they target home addresses with incorrect prefixes or spoofed care-of addresses, as long as the perpetrator can jump into the exchange before moving somewhere else ๐Ÿƒโ€โ™€๏ธ.

the decision not to repeat home and care-of address tests was based on the fact that time shifting attacks are already a threat on today's non-mobile Internet ๐ŸŒ. an attacker can slip onto the path between a victim and a correspondent node, request a stream of packets from the correspondent node on the victim's behalf, and then move to a different location ๐Ÿฆ‹. most transport protocols don't check an initiator's reachability at its claimed IP address after the initial verification during connection setup. that lets an attacker take part only in connection establishment, then move to an off-path spot, where it can spoof acknowledgments to make it look like it's still at the victim's IP address ๐Ÿ‘ป. so the threat of time shifting already applies to the non-mobile Internet, and that's just the way it is ๐Ÿ’….

we should still be upfront that the time when Enhanced Route Optimization verifies a mobile node's reachability at a home or care-of address might come before any transport layer connection gets set up โณ. that gives an attacker more time to move away from the path between the correspondent node and the victim, which makes a time shifting attack more practical ๐Ÿซฃ. if skipping periodic reachability verification seems too risky, a correspondent node can enforce reruns of the home or care-of address tests by limiting the registration lifetime, or by sending Binding Refresh Request messages to the mobile node ๐Ÿ”.


6.5. Replay Attacks

so the protocol in this document relies on 16-bit base Mobile IPv6 sequence numbers plus periodic rekeying to dodge replay attacks ๐Ÿ”. rekeying lets the mobile and correspondent nodes reuse sequence numbers without leaving themselves open to replay attacks โœจ. it must be done at least once every 24 hours, because of the maximum permitted binding lifetime for correspondent registrations โฐ. the mobile and correspondent nodes also rekey whenever a rollover in the sequence number space is coming up soon ๐Ÿ”„. this shouldn't happen often, though, since the available sequence numbers are enough for up to 32768 correspondent registrations, each one made up of an early Binding Update message and a complete Binding Update message ๐Ÿงฎ. the sequence number space allows an average rate of 22 correspondent registrations per minute without needing to rekey at any point during the 24-hour binding lifetime ๐Ÿ’–.


6.6. Resource Exhaustion

okay so a CGA-based home address ownership proof protects against unauthenticated Binding Update messages, but it can also leave a correspondent node open to denial-of-service attacks ๐Ÿฅฒ. the reason is that it needs computationally expensive public-key cryptography ๐Ÿ”ฅ. Enhanced Route Optimization only uses public-key cryptography for the first correspondent registration and, if and when rekeying is needed ๐ŸŽฏ. it is RECOMMENDED that correspondent nodes also track how many processing resources they spend on CGA-based home address ownership verification, and that they reject new correspondent registrations involving public-key cryptography when those resources go over a predefined limit ๐Ÿ›ก๏ธ. [2] digs deep into how feasible CGA-based resource exhaustion attacks are ๐Ÿ“š.

6.7. IP Address Ownership of Correspondent Node ๐Ÿฆ‹

Okay bestie, so Enhanced Route Optimization lets a mobile node check a Binding Acknowledgment using the CGA property of the correspondent node's IP address, as long as that correspondent node actually has a CGA ๐Ÿ”โœจ. The mobile node asks for this by putting a CGA Parameters Request option in the Binding Update it sends to the correspondent node. The correspondent node replies by adding its CGA parameters and signature to the Binding Acknowledgment, using CGA Parameters and Signature options ๐Ÿ’….

Proving that the correspondent node owns its IP address keeps the mobile node from accepting a spoofed Binding Acknowledgment, and from storing the permanent home keygen token that came inside it for later correspondent registrations ๐Ÿšซ. If that happened, it would be a whole denial-of-service situation ๐Ÿ˜ญ. The mobile node couldn't run any binding updates with that token, which is giving "stuck forever" energy ๐Ÿ’€. To help with this, Enhanced Route Optimization recommends renewing a permanent home keygen token when correspondent registrations keep failing. That way mobile nodes can recover from denial-of-service attacks that use spoofed permanent home keygen tokens ๐ŸŒธ.

This attack is kind of limited by where the attacker has to be ๐Ÿ“. A Binding Update that asks a correspondent node for a permanent home keygen token gets authenticated using the CGA property of the mobile node's home address ๐Ÿ . That authentication involves a home address test, which gives the mobile node a home keygen token. The mobile node uses that token to calculate the authenticator on its Binding Update ๐Ÿ”‘. The mobile node also expects the returning Binding Acknowledgment to be calculated with that same home keygen token. So an attacker who wants to spoof a Binding Acknowledgment carrying a permanent home keygen token has to eavesdrop on the home address test ๐Ÿ‘€. That means the attacker has to be on the path from the correspondent node to the mobile node's home agent while the home address test is happening. And if the Binding Update asking for the permanent home keygen token is complete, its authenticator is also calculated using a care-of keygen token ๐Ÿงฉ. The attacker would then also need to know that care-of keygen token to make a valid authenticator for the Binding Acknowledgment. To get it, the attacker has to be on the path from the correspondent node to the mobile node's current IP attachment, at the moment the correspondent node sends the care-of keygen token to the mobile node. That happens in a Care-of Test message, or in the Care-of Test option of a Binding Acknowledgment ๐Ÿ“ฌ.

Here's the thing though: a mobile node usually doesn't know whether a given correspondent node's IP address is a CGA ๐Ÿคทโ€โ™€๏ธ. So the mobile node has to be ready to receive a Binding Acknowledgment that has no CGA Parameters and Signature options, even after it sent a Binding Update with a CGA Parameters Request option. That behavior is required, but it can also enable downgrading attacks ๐Ÿ˜ฌ. In one of these, an attacker sends a Binding Acknowledgment on the correspondent node's behalf with no CGA Parameters and Signature options, claiming the correspondent node's IP address isn't a CGA ๐ŸŽญ. Enhanced Route Optimization deals with this by telling mobile nodes to prefer Binding Acknowledgments that have valid CGA Parameters and Signature options over ones without them ๐Ÿ†. This protects against downgrading attacks, unless the attacker can intercept the Binding Acknowledgments coming from the correspondent node ๐Ÿ›ก๏ธ. Since the attacker needs to be on the home agent path at roughly the same time as described above, it might not be able to intercept those Binding Acknowledgments ๐Ÿคž. Still, an attacker who can intercept them could already run a denial-of-service attack against the mobile node and the correspondent node anyway ๐Ÿ™ˆ. That threat already exists on the non-mobile Internet, and it isn't specific to Enhanced Route Optimization ๐ŸŒ.

External mechanisms might let the mobile node find out for certain whether a particular correspondent node's IP address is a CGA โœจ. If it does, the mobile node can insist on an IP address ownership proof from the correspondent node. In that case, it would throw away any received Binding Acknowledgments that don't include valid CGA Parameters and Signature options ๐Ÿ—‘๏ธ. One idea for telling standard IPv6 addresses apart from CGAs could be an extension to the Domain Name System ๐Ÿงš.

7. Protocol Constants and Configuration Variables ๐ŸŽ€

[2] defines a CGA Message Type namespace. CGA applications pick CGA Message Type tags from that namespace to use in signature calculations ๐Ÿงฎ. Enhanced Route Optimization uses this one constant, randomly generated CGA Message Type tag ๐ŸŽฒ:

   0x5F27 0586 8D6C 4C56 A246 9EBB 9B2A 2E13

[1] caps the lifetime of bindings that correspondent nodes set up through the return routability procedure, using MAX_RR_BINDING_LIFETIME โณ. Enhanced Route Optimization uses this same limit for bindings that are authenticated by proving the mobile node is reachable at its home address ๐Ÿก. But if a binding is authenticated through the CGA property of the mobile node's home address, the lifetime gets the more generous constant MAX_CGA_BINDING_LIFETIME ๐Ÿฅณ:

   MAX_CGA_BINDING_LIFETIME   86400 seconds

Credit aging uses two configuration variables to slowly lower a mobile node's credit counter over time ๐Ÿ“‰. It is RECOMMENDED that a correspondent node uses the following values ๐Ÿ’œ:

   CreditAgingFactor          7/8
   CreditAgingInterval        5 seconds

8. IANA Considerations ๐Ÿ“‹

This document defines the following six new mobility options. They must be assigned type values from the mobility option numbering space of [1] ๐Ÿ”ข:

  • CGA Parameters Request mobility option (11)
  • CGA Parameters mobility option (12)
  • Signature mobility option (13)
  • Permanent Home Keygen Token mobility option (14)
  • Care-of Test Init mobility option (15)
  • Care-of Test mobility option (16)

This document also allocates four new status codes for Binding Acknowledgment messages ๐ŸŒˆ:

  • "Permanent home keygen token unavailable" (147)
  • "CGA and signature verification failed" (148)
  • "Permanent home keygen token exists" (149)
  • "Non-null home nonce index expected" (150)

The values for these status codes must all be greater than or equal to 128. That number means the receiving correspondent node rejected the respective Binding Update ๐Ÿ™…โ€โ™€๏ธ.

This document also defines a new 128-bit value under the CGA Message Type namespace [2] ๐Ÿง.


9. Acknowledgments ๐Ÿซถ

The authors want to thank Tuomas Aura, Gabriel Montenegro, Pekka Nikander, Mike Roe, Greg O'Shea, and Vesa Torvinen (listed in alphabetical order) for the valuable and interesting discussions about cryptographically generated addresses ๐Ÿ’ญ.

The authors also want to thank Marcelo Bagnulo, Roland Bless, Zhen Cao, Samita Chakrabarti, Greg Daley, Vijay Devarapalli, Mark Doll, Lakshminath Dondeti, Francis Dupont, Lars Eggert, Eric Gray, Manhee Jo, James Kempf, Suresh Krishnan, Tobias Kuefner, Lila Madour, Vidya Narayanan, Mohan Parthasarathy, Alice Qinxia, and Behcet Sarikaya (listed in alphabetical order) for reviewing this document and its predecessors and leaving important comments ๐Ÿ™Œ.

Finally, the authors want to highlight that [15] pioneered the use of cryptographically generated addresses in Mobile IPv6 route optimization ๐Ÿ‘‘. They also say this document is mostly made up of material from [16], [17], and [18], plus the contributions of those authors ๐Ÿ’–.


10. References ๐Ÿ“š

10.1. Normative References ๐Ÿ”’

   [1]   Johnson, D., Perkins, C., and J. Arkko, "Mobility Support in
         IPv6", RFC 3775, June 2004.

   [2]   Aura, T., "Cryptographically Generated Addresses (CGA)",
         RFC 3972, March 2005.

   [3]   Bradner, S., "Key Words for Use in RFCs to Indicate Requirement
         Levels", IETF BCP 14, RFC 2119, March 1997.

   [4]   Jonsson, J. and B. Kaliski, "Public-Key Cryptography Standards
         (PKCS) #1: RSA Cryptography Specifications Version 2.1",
         RFC 3447, February 2003.

10.2. Informative References ๐Ÿ”

   [5]   Nikander, P., Arkko, J., Aura, T., Montenegro, G., and E.
         Nordmark, "Mobile IP Version 6 Route Optimization Security
         Design Background", RFC 4225, December 2005.

   [6]   Vogt, C. and J. Arkko, "A Taxonomy and Analysis of Enhancements
         to Mobile IPv6 Route Optimization", RFC 4651, February 2007.

   [7]   Vogt, C. and M. Doll, "Efficient End-to-End Mobility Support in
         IPv6", Proceedings of the IEEE Wireless Communications and
         Networking Conference, IEEE, April 2006.

   [8]   Mirkovic, J. and P. Reiher, "A Taxonomy of DDoS Attack and DDoS
         Defense Mechanisms", ACM SIGCOMM Computer Communication Review,
         Vol. 34, No. 2, ACM Press, April 2004.

   [9]   Arkko, J. and C. Vogt, "Credit-Based Authorization for Binding
         Lifetime Extension", Work in Progress, May 2004.

   [10]  O'Shea, G. and M. Roe, "Child-Proof Authentication for MIPv6
         (CAM)", ACM SIGCOMM Computer Communication Review, ACM Press,
         Vol. 31, No. 2, April 2001.

   [11]  Nikander, P., "Denial-of-Service, Address Ownership, and Early
         Authentication in the IPv6 World", Revised papers from the
         International Workshop on Security Protocols, Springer-Verlag,
         April 2002.

   [12]  Bagnulo, M. and J. Arkko, "Support for Multiple Hash Algorithms
         in Cryptographically Generated Addresses (CGAs)", Work
         in Progress, April 2007.

   [13]  Arkko, J., Kempf, J., Zill, B., and P. Nikander, "SEcure
         Neighbor Discovery (SEND)", RFC 3971, March 2005.

   [14]  Perkins, C., "Securing Mobile IPv6 Route Optimization Using a
         Static Shared Key", RFC 4449, June 2006.

   [15]  Roe, M., Aura, T., O'Shea, G., and J. Arkko, "Authentication of
         Mobile IPv6 Binding Updates and Acknowledgments", Work
         in Progress, March 2002.

   [16]  Haddad, W., Madour, L., Arkko, J., and F. Dupont, "Applying
         Cryptographically Generated Addresses to Optimize MIPv6  (CGA-
         OMIPv6)", Work Progress, May 2005.

   [17]  Vogt, C., Bless, R., Doll, M., and T. Kuefner, "Early Binding
         Updates for Mobile IPv6", Work in Progress, February 2004.

   [18]  Vogt, C., Arkko, J., Bless, R., Doll, M., and T. Kuefner,
         "Credit-Based Authorization for Mobile IPv6 Early Binding
         Updates", Work in Progress, May 2004.

Authors' Addresses ๐ŸŒท

   Jari Arkko
   Ericsson Research NomadicLab
   FI-02420 Jorvas
   Finland

   EMail: jari.arkko@ericsson.com


   Christian Vogt
   Institute of Telematics
   Universitaet Karlsruhe (TH)
   P.O. Box 6980
   76128 Karlsruhe
   Germany

   EMail: chvogt@tm.uka.de


   Wassim Haddad
   Ericsson Research
   8400, Decarie Blvd
   Town of Mount Royal
   Quebec H4P 2N2, Canada

   EMail: wassim.haddad@ericsson.com

Okay so, legal stuff time, bestie ๐Ÿ’… Copyright (C) The IETF Trust (2007). ๐ŸŽ€ This document is covered by the rights, licenses and restrictions in BCP 78, and apart from what that says, the authors keep all their rights ๐Ÿ’œ.

The whole thing is provided "AS IS" ๐Ÿซถ, and the contributor, the organization they represent or are sponsored by (if any), the Internet Society, the IETF Trust, and the Internet Engineering Task Force all disclaim all warranties ๐Ÿ˜ญ. That includes, but isn't limited to, any promise that using the information here won't infringe anyone's rights, plus any implied warranties of merchantability or fitness for a particular purpose ๐Ÿ™ˆ.


Intellectual Property ๐Ÿฆ‹

Lowkey the IETF is staying neutral here ๐ŸŒธ. It doesn't take a position on whether any Intellectual Property Rights or other rights that someone might claim over the technology in this document are valid or how far they reach ๐Ÿงš. It also doesn't say whether any license under those rights is available, and it hasn't independently gone looking for any of them ๐Ÿ‘€. If you want the procedures for rights in RFC documents, check out BCP 78 and BCP 79 ๐Ÿ“š.

Copies of IPR disclosures sent to the IETF Secretariat are a thing ๐Ÿ“. So are any assurances of licenses that might be offered, and the results of any attempt to get a general license or permission for implementers or users to use the proprietary rights ๐Ÿ”ฅ. You can find all of that in the IETF online IPR repository at http://www.ietf.org/ipr ๐Ÿ’–.

The IETF also invites anyone who's interested to flag any copyrights, patents, patent applications, or other proprietary rights that might cover technology needed to implement this standard โœจ. Send that info to the IETF at ietf-ipr@ietf.org ๐Ÿ’Œ. Main character energy for transparency, honestly ๐Ÿ‘‘.


Acknowledgement ๐ŸŒˆ

Big thank you moment ๐Ÿซถ: funding for the RFC Editor function is currently provided by the Internet Society ๐Ÿ’œโญ.

๐Ÿ“ฆ where this page comes from