RFC 6028

Host Identity Protocol (HIP) Multi-Hop Routing Extension

๐Ÿ“… published October 2010, from ietf

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 (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