RFC 6028
Host Identity Protocol (HIP) Multi-Hop Routing Extension
Host Identity Protocol (HIP) Multi-Hop Routing Extension ๐ฆ
Okay bestie, this is RFC 6028 ๐. It's by G. Camarillo and A. Keranen from Ericsson, published in October 2010. It's Experimental ๐งช (not a Standards Track spec), and its ISSN is 2070-1721. The title block doesn't list anything it obsoletes or updates, so it's a standalone newcomer ๐ธ.
Abstract โจ
This doc adds two extensions to the Host Identity Protocol (HIP) so it can do multi-hop routing ๐ฃ๏ธ. The first one lets you do source routing in HIP. So a node that sends a HIP packet can pick out a set of nodes the packet should go through ๐บ๏ธ. The second one lets a HIP packet carry and record the list of nodes that forwarded it ๐. Main character energy ๐.
Status of This Memo โจ
Not a Standards Track spec, bestie ๐. It's published so people can look at it, try implementing it, and evaluate it ๐งช.
It defines an Experimental Protocol for the Internet community ๐ฌ. It's a product of the Internet Engineering Task Force (IETF) and represents IETF consensus. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). Not every IESG-approved document is up for any level of Internet Standard, though. See Section 2 of RFC 5741 for that ๐ .
Info about the current status, errata, and how to send feedback lives at http://www.rfc-editor.org/info/rfc6028 ๐ฎ.
Copyright Notice โจ
Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved ยฉ๏ธ.
This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as of the publication date. Read those carefully, because they spell out your rights and restrictions ๐. Code extracted from this doc has to include the Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions. It comes without warranty, as the Simplified BSD License describes ๐ซถ.
Table of Contents ๐
1. Introduction ....................................................2
2. Terminology .....................................................3
2.1. Requirements Language ......................................3
2.2. Definitions ................................................3
3. Protocol Definitions ............................................3
3.1. Creating and Processing Via Lists ..........................4
3.2. Creating Destination Lists .................................4
3.3. Processing Destination Lists ...............................5
3.4. Fragmentation Considerations ...............................5
4. Packet Formats ..................................................5
4.1. Source and Destination Route List Parameters ...............6
5. IANA Considerations .............................................7
6. Security Considerations .........................................8
6.1. Forged Destination and Via Lists ...........................8
6.2. Forwarding Loops ...........................................8
7. Acknowledgments .................................................9
8. References ......................................................9
8.1. Normative References .......................................9
8.2. Informative References .....................................9
1. Introduction ๐
Okay so, sometimes HIP has to run in special setups where nodes need source routing ๐งญ. That means a node needs to send a HIP signaling packet that goes through a set of nodes before it lands at its destination. This comes up in the HIP-Based Overlay Networking Environment (HIP BONE) [HIP-BONE] ๐, or when two nodes want to keep a third (or more) HIP nodes on the signaling path ๐งโ๐คโ๐ง. This doc defines an extension that gives HIP that ability ๐.
Second thing ๐: when HIP signaling packets go through several nodes, some of those nodes (like the destination host) need to know which nodes a particular packet went through ๐. This doc defines another extension for exactly that ๐.
Together, these two extensions give HIP multi-hop routing ๐. Before them, there were standardized ways to support only one intermediate node between the source of a HIP packet and its destination, like a rendezvous server [RFC5204] ๐ค. Literally one middleman, periodt ๐ .
2. Terminology ๐
2.1. Requirements Language ๐
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 RFC 2119 [RFC2119] ๐.
2.2. Definitions ๐ง
These terms are similar to the ones in REsource LOcation And Discovery (RELOAD) [P2PSIP-BASE], but here they're used in the HIP context ๐ฆ.
- Destination list: A list of Host Identity Tags (HITs) of the nodes that a HIP packet should traverse ๐บ๏ธ.
- Via list: A list of HITs of the nodes that a HIP packet has traversed ๐ค๏ธ.
- Symmetric routing: A response to a message gets routed back through the same set of intermediary nodes the original message used, just in reversed order ๐ช. Also known as symmetric recursive routing ๐ซ.
3. Protocol Definitions ๐ง
The multi-hop routing extensions can be used in different contexts ๐ธ. Whether a new HIP signaling packet should, for example, include a Via list or have different options turned on depends on the use case, local policies, and the other protocols using the extension ๐ค. This section defines how the new parameters are handled. When to use these extensions, or how to configure them, is out of scope for this doc ๐.
3.1. Creating and Processing Via Lists ๐
When a node sending a HIP packet needs to record the nodes on the path the packet takes, it includes an empty ROUTE_VIA parameter in the packet ๐.
A node that gets a packet with a ROUTE_VIA parameter SHOULD add its own HIT to the end of the ROUTE_VIA parameter, unless it's the final recipient of the packet ๐ซถ. If the node uses a different HIT on the HIP association it used for receiving than for sending forward, it SHOULD also add the receiving HIT to the route list before the sending HIT ๐.
If the node is the final recipient and the received packet generates a response HIP packet, the node checks the SYMMETRIC flag from the ROUTE_VIA parameter ๐. If the SYMMETRIC flag is set, the node MUST create a ROUTE_DST parameter from the ROUTE_VIA parameter, as described in Section 3.2, and include it in the response packet ๐ช. Also, if an intermediary node generates a new HIP packet (like an error NOTIFY packet) because of a HIP packet that had a ROUTE_VIA parameter with the SYMMETRIC flag set, and the new packet is meant for the sender of the original HIP packet, the node SHOULD construct and add a ROUTE_DST parameter into the new packet, same as in the previous case ๐
.
3.2. Creating Destination Lists ๐บ๏ธ
A node that needs to define the other nodes that should be on the path a HIP packet traverses adds a ROUTE_DST parameter to the HIP packet ๐ซ. The node can decide the path on its own, or it can build the path from a ROUTE_VIA parameter ๐งฉ. Only the originator of a signed HIP packet can add a ROUTE_DST parameter to it, and none of the nodes on the path can modify it, since the parameter is covered by the signature ๐.
When a node creates a ROUTE_DST parameter because it received a packet with a ROUTE_VIA parameter, it copies all the HITs in the ROUTE_VIA parameter into the ROUTE_DST parameter, but in reversed order ๐. This way, the HIP response packet gets forwarded along the same path as the packet the response was generated for ๐ช. If exactly the same set of nodes should be traversed by the response packet, the MUST_FOLLOW flag (see Table 1) also SHOULD be set in the ROUTE_VIA parameter (and eventually copied to the ROUTE_DST parameter) so the response can't skip any nodes on the list ๐
โโ๏ธ.
3.3. Processing Destination Lists ๐
When a node gets a HIP packet containing a ROUTE_DST parameter, it first looks for its own HIT in the route list ๐. If the node's own HIT isn't in the list and the node isn't the receiver of the packet, the packet was forwarded incorrectly and MUST be dropped ๐ซ. If the node's HIT shows up in the list more than once, the list is invalid and the packet MUST be dropped to avoid forwarding loops ๐๐. The next hop is the HIT right after the node's own HIT in the list โก๏ธ. If the node's HIT was the last one in the list, the next hop is the receiver's HIT from the HIP header ๐ฏ.
If the MUST_FOLLOW flag in the ROUTE_DST parameter isn't set, the node SHOULD check whether it has a valid locator for one of the nodes later in the list, or for the receiver of the packet. It MAY select one of those as the next hop ๐ฆ. If the MUST_FOLLOW flag is set, the node MUST NOT skip any nodes in the list ๐ง.
If the node has a valid locator for the next hop, it MUST forward the HIP packet to that next-hop node ๐ฌ. If the node can't determine a valid locator for the next-hop node, it SHOULD drop the packet and SHOULD send back a NOTIFY error packet with type UNKNOWN_NEXT_HOP (value 90) ๐. The Notification Data field for these error notifications SHOULD contain the HIP header of the rejected packet and the ROUTE_DST parameter ๐ฆ.
3.4. Fragmentation Considerations ๐งฉ
Via and Destination lists with multiple HITs can really bulk up HIP packets ๐๏ธโโ๏ธ. So fragmentation issues (see Section 5.1.3 of [RFC5201]) should be taken into consideration when you use these extensions ๐ญ. Via lists in particular should be used with care, since the final packet size isn't known unless you know the maximum possible number of hops beforehand ๐. Both parameters still have a maximum size, based on the maximum number of allowed HITs (see Section 4.1) ๐.
4. Packet Formats ๐
This memo defines two new HIP parameters ๐. One records a route via multiple nodes (ROUTE_VIA). The other defines a route that a packet should traverse, set by the sender of the packet (ROUTE_DST) ๐บ๏ธ.
The ROUTE_DST parameter is integrity protected with the signature (where present), but ROUTE_VIA isn't, so intermediary nodes can add their own HITs to the list ๐ซถ. Both ROUTE_DST and ROUTE_VIA are critical parameters (as defined in Section 5.2.1 of [RFC5201]) ๐ฅ, because the packet won't be routed properly unless every node on the path recognizes the parameters ๐.
4.1. Source and Destination Route List Parameters โจ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| HIT #1 |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. . .
. . .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| HIT #n |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type ROUTE_DST: 4601
ROUTE_VIA: 64017
Length length in octets, excluding Type and Length
(i.e., number-of-HITs * 16 + 4)
Flags bit flags that can be used for requesting special
handling of the parameter
Reserved reserved for future use
HIT Host Identity Tag of one of the nodes on the path
Figure 1. Format of the ROUTE_VIA and ROUTE_DST Parameters
Okay, so Figure 1 shows the format of both the ROUTE_VIA and ROUTE_DST parameters, and they're basically twins ๐ฏโโ๏ธ. The ROUTE_DST parameter, if it's present, MUST have at least one HIT ๐ , but the ROUTE_VIA parameter is allowed to have zero HITs (chill, right?). Also, the ROUTE_DST and ROUTE_VIA parameters SHALL NOT contain more than 32 HITs, so don't get greedy ๐. The Flags field is where you ask for special handling for Via and Destination lists. The flags defined in this document are listed in Table 1 โจ. The Reserved field is saved for future extensions, so it MUST be zero when sending and ignored when receiving this parameter ๐ง.
+-----+-------------+-----------------------------------------------+
| Pos | Name | Purpose |
+-----+-------------+-----------------------------------------------+
| 0 | SYMMETRIC | The response packet MUST be sent with a |
| | | ROUTE_DST list made from the ROUTE_VIA list |
| | | containing this flag, i.e., using symmetric |
| | | routing. |
| 1 | MUST_FOLLOW | All the nodes in a ROUTE_DST list MUST be |
| | | traversed, i.e., even if a node would have a |
| | | valid locator for a node beyond the next hop, |
| | | it MUST NOT forward the packet there but to |
| | | the next-hop node. |
+-----+-------------+-----------------------------------------------+
Table 1. Bit Flags in ROUTE_VIA and ROUTE_DST Parameters
Here's how to read Table 1 ๐. The "Pos" column is the bit position of the flag (same as in Figure 1) inside the Flags field. "Name" is the flag's name in this document, and "Purpose" is a quick description of what the flag means ๐ฆ. The flags apply to both ROUTE_VIA and ROUTE_DST parameters. And when a ROUTE_DST parameter gets added to a packet because of a ROUTE_VIA parameter, the same flags MUST be copied over to the ROUTE_DST parameter ๐ซถ.
5. IANA Considerations ๐ธ
This section is to be interpreted according to [RFC5226].
This document updates the IANA Registry for HIP Parameter Types [RFC5201] by assigning new HIP Parameter Type values for the new HIP Parameters: ROUTE_VIA and ROUTE_DST (defined in Section 4). This document also defines a new Notify Packet Type [RFC5201], UNKNOWN_NEXT_HOP, in Section 3.3. Main character energy for the registry, honestly ๐.
The ROUTE_DST and ROUTE_VIA parameters use bit flags, and IANA has created and now maintains a new sub-registry called "HIP Via Flags" under the "Host Identity Protocol (HIP) Parameters" registry ๐. The initial values for that registry are the ones given in Table 1. Future assignments are to be made through IETF Review or IESG Approval [RFC5226]. Each assignment consists of the bit position and the name of the flag โจ.
6. Security Considerations ๐ฅ
The standard HIP mechanisms (e.g., using signatures, puzzles, and the ENCRYPTED parameter [RFC5201]) provide protection against eavesdropping; replay; message insertion, deletion, and modification; and man-in-the-middle attacks. Yet, the extensions described in this document allow nodes to route HIP messages via other nodes, and so they could possibly try to mount Denial-of-Service (DoS) attacks against them ๐ญ. The following sections describe possible attacks and ways to mitigate them.
6.1. Forged Destination and Via Lists ๐
The Destination list is protected by the HIP signature, so the receiver of the message can check that the list was really created by the sender of the message and wasn't modified on the path ๐. Also, the nodes forwarding the message MAY check the signature of the forwarded packets if they have the Host Identity (HI) of the sender (for example, from an I2 or R1 message [RFC5201]), and they can drop packets whose signature check fails. With forwarding nodes checking the signature, and only forwarding messages from nodes that have an active HIP association, it's also possible to reliably identify attacking nodes ๐ต๏ธโโ๏ธ.
The limited number of HITs allowed in a Destination list limits the impact of attacks using a forged Destination list. The attacker also needs to know a set of HIP nodes that are able to route the message hop-by-hop for the attack to work, which is a whole plot ๐.
A forged Via list causes a similar attack to the one with the Destination list, with similar limitations. However, in this attack the Destination list generated from the Via list is validly signed by the responding node, which is a lot more sneaky ๐ฌ. To limit the effect of this kind of attack, a responding node may further decrease the maximum acceptable number of nodes in the Via lists, or allow only certain HITs in the lists. However, using these mechanisms requires either good knowledge of the overlay network (i.e., the maximum realistic number of hops) or knowing the HITs of all potential nodes forwarding the messages ๐ง.
6.2. Forwarding Loops ๐
A malicious node could craft a destination route list that contains the same HIT more than once, and thus create a forwarding loop ๐. The check described in Section 3.3 should break such loops, but nodes MAY in addition utilize the OVERLAY_TTL [HIP-BONE] parameter for additional protection against forwarding loops ๐ก๏ธ.
7. Acknowledgments ๐ซถ
Tom Henderson provided valuable comments and improvement suggestions for this document. Shoutout to Tom, the real MVP ๐.
8. References ๐
8.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC5201] Moskowitz, R., Nikander, P., Jokela, P., Ed., and T.
Henderson, "Host Identity Protocol", RFC 5201, April
2008.
8.2. Informative References
[RFC5204] Laganier, J. and L. Eggert, "Host Identity Protocol
(HIP) Rendezvous Extension", RFC 5204, April 2008.
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing
an IANA Considerations Section in RFCs", BCP 26, RFC
5226, May 2008.
[HIP-BONE] Camarillo, G., Nikander, P., Hautakorpi, J., Keranen,
A., and A. Johnston, "HIP BONE: Host Identity Protocol
(HIP) Based Overlay Networking Environment", Work in
Progress, June 2010.
[P2PSIP-BASE] Jennings, C., Lowekamp, B., Ed., Rescorla, E., Baset,
S., and H. Schulzrinne, "REsource LOcation And
Discovery (RELOAD) Base Protocol", Work in Progress,
March 2010.
Authors' Addresses ๐
Gonzalo Camarillo
Ericsson
Hirsalantie 11
02420 Jorvas
Finland
EMail: Gonzalo.Camarillo@ericsson.com
Ari Keranen
Ericsson
Hirsalantie 11
02420 Jorvas
Finland
EMail: Ari.Keranen@ericsson.com
๐ฆ where this page comes from
- ietf: rfc6028 2010-10
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms