RFC 8005

Host Identity Protocol (HIP) Domain Name System (DNS) Extension

๐Ÿ“… published October 2016, from ietf

๐Ÿ“œ RFC 8005: Host Identity Protocol (HIP) Domain Name System (DNS) Extension ๐ŸŽ€

okay bestie, this one's giving DNS glow-up ๐Ÿ’… It's a Standards Track doc from the IETF (Internet Engineering Task Force) published in October 2016. The author is J. Laganier from Luminate Wireless, Inc., and it's ISSN 2070-1721. It also obsoletes RFC 5205, so if you've got an older copy of that one in your bookmarks, it's time to let it go ๐Ÿซถ

  • Obsoletes: RFC 5205
  • Category: Standards Track
  • Date: October 2016
  • Author: J. Laganier, Luminate Wireless, Inc.

Abstract โœจ

okay so this doc defines a brand new resource record (RR) for the Domain Name System (DNS) and explains how to use it with the Host Identity Protocol (HIP). ๐Ÿฆ‹ With it, a HIP node can stash four things in DNS: its Host Identity (HI), which is the public half of its public-private key pair; its Host Identity Tag (HIT), which is a truncated hash of its public key (PK); and the domain names of its rendezvous servers (RVSs). This document obsoletes RFC 5205. ๐Ÿ’–

Status of This Memo ๐ŸŒธ

so this is an Internet Standards Track document, which means it's an official standard and not just a vibe ๐Ÿ˜Œ

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

Info about the current status of this document, any errata, and how to send feedback can be found at http://www.rfc-editor.org/info/rfc8005 ๐Ÿ”—

okay legal bit, but make it cute: this is Copyright (c) 2016 IETF Trust and the persons identified as the document authors, and all rights are reserved ๐ŸŒˆ

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info), as they were in effect on the date this document was published. Please actually read these, because they explain your rights and restrictions for this doc ๐Ÿ™ˆ

Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as described in the Simplified BSD License ๐Ÿ’œ

Table of Contents ๐Ÿงš

1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
2.  Conventions Used in This Document . . . . . . . . . . . . . .   3
3.  Usage Scenarios . . . . . . . . . . . . . . . . . . . . . . .   3
  3.1.  Simple Static Single-Homed End Host . . . . . . . . . . .   5
  3.2.  Mobile End Host . . . . . . . . . . . . . . . . . . . . .   6
4.  Overview of Using the DNS with HIP  . . . . . . . . . . . . .   7
  4.1.  Storing HI, HIT, and RVS in the DNS . . . . . . . . . . .   7
  4.2.  Initiating Connections Based on DNS Names . . . . . . . .   8
5.  HIP RR Storage Format . . . . . . . . . . . . . . . . . . . .   9
  5.1.  HIT Length Format . . . . . . . . . . . . . . . . . . . .   9
  5.2.  PK Algorithm Format . . . . . . . . . . . . . . . . . . .   9
  5.3.  PK Length Format  . . . . . . . . . . . . . . . . . . . .  10
  5.4.  HIT Format  . . . . . . . . . . . . . . . . . . . . . . .  10
  5.5.  Public Key Format . . . . . . . . . . . . . . . . . . . .  10
  5.6.  Rendezvous Servers Format . . . . . . . . . . . . . . . .  10
6.  HIP RR Presentation Format  . . . . . . . . . . . . . . . . .  11
7.  Examples  . . . . . . . . . . . . . . . . . . . . . . . . . .  12
8.  Security Considerations . . . . . . . . . . . . . . . . . . .  12
  8.1.  Attacker Tampering with an Insecure HIP RR  . . . . . . .  13
  8.2.  Hash and HITs Collisions  . . . . . . . . . . . . . . . .  13
  8.3.  DNSSEC  . . . . . . . . . . . . . . . . . . . . . . . . .  14
9.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  14
10. References  . . . . . . . . . . . . . . . . . . . . . . . . .  15
  10.1.  Normative References . . . . . . . . . . . . . . . . . .  15
  10.2.  Informative References . . . . . . . . . . . . . . . . .  16
Appendix A.  Changes from RFC 5205  . . . . . . . . . . . . . . .  17
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .  17
Contributors  . . . . . . . . . . . . . . . . . . . . . . . . . .  17
Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  18

1. Introduction โœจ

okay so this doc specifies a resource record (RR) for the Domain Name System (DNS) [RFC1034] and how to use it with the Host Identity Protocol (HIP) [RFC7401]. The RR lets a HIP node store in DNS its Host Identity (HI), the public component of its node public-private key pair ๐Ÿ”‘. It also stores its Host Identity Tag (HIT), which is a truncated hash of its HI, plus the domain names of its rendezvous servers (RVSs) [RFC8004] ๐Ÿ’…

Right now, most Internet apps that need to talk to a remote host first turn a domain name (often typed in by a user) into one or more IP addresses. That step happens before any communication and depends on a DNS lookup ๐ŸŒธ

With HIP, IP addresses are mostly for on-the-wire communication between end hosts. Most Upper Layer Protocols (ULPs) and apps use HIs or HITs instead (ICMP might be an example of a ULP that doesn't) ๐Ÿฆ‹ So we need a way to translate a domain name into an HI. Using DNS for this is pretty straightforward: we define a HIP RR. When an app or ULP asks for a name-to-IP-address lookup, the resolver would also do a name-to-HI lookup and use the result to build the HI-to-IP-address mapping, which lives inside the HIP layer. The HIP layer then uses that mapping to translate HIs and HITs into IP addresses, and vice versa ๐Ÿงš

The HIP specification [RFC7401] describes the HIP base exchange between a HIP Initiator and a HIP Responder. It's a four-way handshake with four HIP packets total: I1, R1, I2, and R2. Since the HIP packets carry both the Initiator's and the Responder's HIT, the Initiator needs to know the Responder's HI and HIT before it starts the base exchange by sending an I1 packet ๐Ÿ‘‘

The HIP Rendezvous Extension [RFC8004] lets a HIP node be reached through the IP address(es) of a third party, which is its RVS. An Initiator that wants a HIP association with a Responder served by an RVS would normally start the HIP base exchange by sending the I1 packet to the RVS IP address, not to the Responder's IP address. So we need a way to find the name of an RVS for a given host name ๐Ÿซถ

This document introduces the HIP DNS RR to store the RVS, HI, and HIT information. โœจ

2. Conventions Used in This Document ๐ŸŽ€

okay, 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]. These are the official BCP 14 vibes, so read them exactly as written ๐Ÿ’œ

3. Usage Scenarios ๐ŸŒˆ

In this section we briefly go through a bunch of usage scenarios where DNS is useful with HIP ๐Ÿฆ‹

With HIP, most apps and ULPs don't know which IP addresses are carrying packets on the wire. That means a HIP node can use multiple IP addresses for failover, redundancy, mobility, or renumbering, all in a way that's transparent to most ULPs and apps. They're bound to HIs, so they don't care when the IP addresses change ๐ŸŒธ

In these situations, for a node to be reachable by its Fully Qualified Domain Name (FQDN), the following information should be stored in the DNS:

  • A set of IP addresses via A [RFC1035] and AAAA [RFC3596] Resource Record Sets (RRSets) [RFC2181].
  • An HI, a HIT, and possibly a set of RVSs through HIP RRs.

The HIP RR is class independent. โœจ

When a HIP node wants to start talking to another HIP node, it first needs to do a HIP base exchange to set up a HIP association with its peer. This exchange can be started opportunistically, meaning without prior knowledge of the Responder's HI, but if it's done that way, both nodes knowingly risk man-in-the-middle (MitM) attacks on the HIP exchange ๐Ÿ˜ฌ To prevent those attacks, it is recommended that the Initiator first gets the Responder's HI and then starts the exchange. This can be done, for example, through manual configuration or DNS lookups. That's exactly why a HIP RR is introduced ๐Ÿ”

When a HIP node keeps changing its IP address(es), the natural DNS latency for propagating those changes may stop it from publishing its new IP address(es) in DNS. To solve this, the HIP Architecture [RFC4423] introduces RVSs [RFC8004]. A HIP host uses an RVS as a rendezvous point to stay reachable by possible HIP Initiators while it moves [RFC5206]. A HIP node like this would publish its RVS domain name(s) in a HIP RR, and keep its RVS up to date with its current set of IP addresses ๐Ÿงš

When a HIP node wants to start a HIP exchange with a Responder, it does a bunch of DNS lookups. Depending on the implementation type, the order of those lookups can vary. For example, implementations that use HIT in Application Programming Interfaces (APIs) may first query for HIP RRs at the Responder FQDN, while those using an IP address in APIs may first query for A and/or AAAA RRs ๐Ÿ’–

In the following, we assume that the Initiator first queries for HIP RRs at the Responder FQDN. ๐Ÿ‘‘

If the query for the HIP type gets a DNS answer with RCODE=3 (Name Error), then the Responder's information isn't in DNS, and further queries for the same owner name SHOULD NOT be made. ๐Ÿ™…โ€โ™€๏ธ

If the query for the HIP records returns a DNS answer with RCODE=0 (No Error) and an empty answer section, that means no HIP information is available at the Responder name. In that case, if the Initiator has been configured with a policy to fall back to opportunistic HIP (starting without knowing the Responder's HI) or plain IP, it would send out more queries for A and AAAA types at the Responder's FQDN ๐ŸŒธ

Depending on the combinations of answers, the situations described in Sections 3.1 and 3.2 can occur. ๐Ÿฆ‹

Note that storing HIP RR information in DNS at an FQDN that is assigned to a non-HIP node might have ill effects on its reachability by HIP nodes. โš ๏ธ bestie, that one's a little spicy, so double-check your FQDN assignments before you publish anything ๐Ÿ’€

3.1. Simple Static Single-Homed End Host

okay so picture a HIP node (R) with one static network attachment ๐ŸŒธ that wants to be reachable by its FQDN (www.example.com) and act as a Responder. Besides its IP address or addresses (IP-R), it stores a HIP RR in the DNS with its Host Identity (HI-R) and Host Identity Tag (HIT-R) ๐Ÿ’–

An Initiator that wants to connect would usually send these queries (QCLASS=IN is assumed and left out of the examples, bestie):

  • Query #1: QNAME=www.example.com, QTYPE=HIP

That one gets back a DNS packet with RCODE=0 and one or more HIP RRs with the HIT and HI (e.g., HIT-R and HI-R) of the Responder in the answer section, but no RVS. ๐Ÿฆ‹

  • Query #2: QNAME=www.example.com, QTYPE=A
  • Query #3: QNAME=www.example.com, QTYPE=AAAA

Those return DNS packets with RCODE=0 and, respectively, one or more A or AAAA RRs holding the Responder's IP address(es) (e.g., IP-R) in their answer sections.

Heads up ๐Ÿ‘€ For the rest of this doc, the diagrams squish several DNS queries and answers into one transaction so they stay neat, even though there are actually several queries and answers going back and forth, like in the text examples.

               [HIP? A?        ]
               [www.example.com]            +-----+
          +-------------------------------->|     |
          |                                 | DNS |
          | +-------------------------------|     |
          | |  [HIP? A?        ]            +-----+
          | |  [www.example.com]
          | |  [HIP HIT-R HI-R ]
          | |  [A IP-R         ]
          | v
        +-----+                              +-----+
        |     |--------------I1------------->|     |
        |  I  |<-------------R1--------------|  R  |
        |     |--------------I2------------->|     |
        |     |<-------------R2--------------|     |
        +-----+                              +-----+

                         Static Single-Homed Host

The Initiator would then send an I1 to the Responder's IP addresses (IP-R). ๐Ÿš€

3.2. Mobile End Host

A mobile HIP node (R) that wants to be reachable by its FQDN (www.example.com) stores stuff in the DNS ๐Ÿงš. Possibly along with its IP address or addresses (IP-R), it keeps its HI (HI-R), its HIT (HIT-R), and the domain name or names of its RVS or servers (e.g., rvs.example.com) in a HIP RR or records. Also, the mobile HIP node needs to tell its RVSs whenever its set of IP addresses changes. ๐Ÿ”ฅ

An Initiator that wants to associate with a mobile node like this would usually send these queries:

  • Query #1: QNAME=www.example.com, QTYPE=HIP

That returns a DNS packet with RCODE=0 and one or more HIP RRs with the HIT, HI, and RVS domain name or names (e.g., HIT-R, HI-R, and rvs.example.com) of the Responder in the answer section.

  • Query #2: QNAME=rvs.example.com, QTYPE=A
  • Query #3: QNAME=rvs.example.com, QTYPE=AAAA

Those return DNS packets with RCODE=0 and, respectively, one or more A or AAAA RRs containing an IP address(es) of the Responder's RVS (e.g., IP-RVS) in their answer sections. ๐ŸŒˆ

              [HIP?           ]
              [www.example.com]

              [A?             ]
              [rvs.example.com]                     +-----+
         +----------------------------------------->|     |
         |                                          | DNS |
         | +----------------------------------------|     |
         | |  [HIP?                          ]      +-----+
         | |  [www.example.com               ]
         | |  [HIP HIT-R HI-R rvs.example.com]
         | |
         | |  [A?             ]
         | |  [rvs.example.com]
         | |  [A IP-RVS       ]
         | |
         | |                +-----+
         | | +------I1----->| RVS |-----I1------+
         | | |              +-----+             |
         | | |                                  |
         | | |                                  |
         | v |                                  v
        +-----+                              +-----+
        |     |<---------------R1------------|     |
        |  I  |----------------I2----------->|  R  |
        |     |<---------------R2------------|     |
        +-----+                              +-----+

                              Mobile End Host

The Initiator would then send an I1 to the RVS IP address (IP-RVS). After that, the RVS relays the I1 up to the mobile node's IP address (IP-R), and that's where the HIP exchange gets completed. ๐Ÿ’œ

4. Overview of Using the DNS with HIP โœจ

4.1. Storing HI, HIT, and RVS in the DNS

For any HIP node, its HI, the associated HIT, and the FQDN of its possible RVSs can be stored in a DNS HIP RR. Any conforming implementation may store an HI and its associated HIT in a DNS HIP RDATA format. HI and HIT are defined in Section 3 of the HIP specification [RFC7401]. ๐Ÿ“

When a HIP RR comes back, a host MUST always calculate the HI-derivative HIT to be used in the HIP exchange, as specified in Section 3 of the HIP specification [RFC7401]. The HIT included in the HIP RR SHOULD only be used as an optimization (e.g., table lookup). โญ

The HIP RR may also contain one or more domain names of one or more RVSs that HIP I1 packets might be sent to, in order to kick off an association with the entity named by this RR [RFC8004]. ๐Ÿซถ

The Rendezvous Server field of the HIP RR stored at a given owner name MAY include the owner name itself. A semantically equivalent situation occurs if no RVS is present in the HIP RR stored at that owner name. This happens in two cases:

  • The host is mobile, and the A and/or AAAA RR(s) stored at its host name contain the IP address(es) of its RVS rather than its own one.
  • The host is stationary and can be reached directly at the IP address(es) contained in the A and/or AAAA RR(s) stored at its host name. This is a degenerate case of rendezvous service where the host somewhat acts as an RVS for itself. ๐Ÿ™ˆ

An RVS that receives such an I1 would then relay it to the appropriate Responder (the owner of the I1 receiver HIT). The Responder then completes the exchange with the Initiator, typically without ongoing help from the RVS. ๐Ÿ‘‘

4.2. Initiating Connections Based on DNS Names

On a HIP node, a HIP exchange SHOULD be initiated whenever a ULP attempts to communicate with an entity and the DNS lookup returns HIP RRs. ๐Ÿ’…

HIP RRs have a Time To Live (TTL) associated with them. When the number of seconds that passed since the record was retrieved exceeds the record's TTL, the record MUST be considered no longer valid and deleted by the entity that retrieved it. If access to the record is necessary to initiate communication with the entity to which the record corresponds, a new query MUST be made to retrieve a fresh copy of the record. โฐ

Real talk: an expired HIP RR is not a vibe. It has to be treated as no longer valid and deleted, and a fresh query is required before you can start talking to that entity again. ๐Ÿ’€

There may be multiple HIP RRs associated with a single name. How a host chooses between multiple RRs when more than one is returned is outside the scope of this specification. The RVS information may be copied and aligned across multiple RRs, or it may be different for each one. When multiple choices are present, a host MUST check that the RVS used is associated with the HI being used. ๐ŸŽ€

5. HIP RR Storage Format

The RDATA for a HIP RR consists of a PK Algorithm Type, the HIT length, a HIT, a PK (i.e., an HI), and optionally one or more RVSs. ๐Ÿฆ‹

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  HIT length   | PK algorithm  |          PK length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   ~                           HIT                                 ~
   |                                                               |
   +                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     |                                         |
   +-+-+-+-+-+-+-+-+-+-+-+                                         +
   |                           Public Key                          |
   ~                                                               ~
   |                                                               |
   +                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                               |                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
   |                                                               |
   ~                       Rendezvous Servers                      ~
   |                                                               |
   +             +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             |
   +-+-+-+-+-+-+-+

The HIT length, PK algorithm, PK length, HIT, and Public Key fields are REQUIRED. The Rendezvous Server field is OPTIONAL. ๐ŸŒธ

5.1. HIT Length Format

The HIT length indicates the length in bytes of the HIT field. This is an 8-bit unsigned integer. ๐Ÿ”ข

5.2. PK Algorithm Format

The PK algorithm field indicates the PK cryptographic algorithm and the implied Public Key field format. This is an 8-bit unsigned integer. This document reuses the values defined for the 'Algorithm Type' of the IPSECKEY RR [RFC4025].

Presently defined values are listed in Section 9 for reference. ๐Ÿ“–

5.3. PK Length Format

The PK length indicates the length in bytes of the Public Key field. This is a 16-bit unsigned integer in network byte order. ๐Ÿงฎ

5.4. HIT Format

The HIT is stored as a binary value in network byte order. ๐Ÿ’œ

5.5. Public Key Format

Two of the PK types defined in this document, RSA and Digital Signature Algorithm (DSA), reuse the PK formats defined for the IPSECKEY RR [RFC4025]. ๐ŸŒˆ

The DSA key format is defined in RFC 2536 [RFC2536].

The RSA key format is defined in RFC 3110 [RFC3110], and the RSA key size limit (4096 bits) is relaxed in the IPSECKEY RR [RFC4025] specification. โœจ

In addition, this document similarly defines the PK format of type Elliptic Curve Digital Signature Algorithm (ECDSA) as the algorithm-specific portion of the DNSKEY RR RDATA for ECDSA [RFC6605]. That means all of the DNSKEY RR DATA after the first four octets, corresponding to the same portion of the DNSKEY RR that must be specified by documents that define a DNSSEC algorithm. ๐Ÿฆ‹

5.6. Rendezvous Servers Format ๐Ÿงš

okay so the Rendezvous Server field is where the RVS names go. It holds one or more variable length wire-encoded domain names, all concatenated together and encoded as described in Section 3.3 of RFC 1035 [RFC1035]: "<domain-name> is a domain name represented as a series of labels, and terminated by a label with zero length" ๐ŸŒธ. The wire format is self-describing, so you never need a length for each name. That zero length label is the separator between RVS names in the same field. Since the rest of the RRDATA has a known length, and the total RDLENGTH is known too, you get all the length info you need to parse the HIP RR ๐Ÿ’….

The domain names MUST NOT be compressed. โœจ The RVSs (or servers) are listed in order of preference, so the first one is the preferred one. That creates an implicit order among the RVSs in a single RR ๐Ÿ‘‘.

When multiple HIP RRs are present at the same owner name, this implicit order of RVSs within an RR MUST NOT be used to infer a preference order between RVSs stored in different RRs. ๐Ÿ™ˆ

6. HIP RR Presentation Format ๐ŸŽ€

This section is the spec for how the HIP RR looks in a zone master file ๐Ÿ“œ.

The HIT length field is not represented, because it's implicitly known from the HIT field representation ๐Ÿฆ‹.

The PK algorithm field is represented as unsigned integers ๐Ÿ”ข.

The HIT field is represented as the Base16 encoding [RFC4648] (a.k.a. hex or hexadecimal) of the HIT. The encoding MUST NOT contain whitespaces so it can be told apart from the Public Key field ๐Ÿ’œ.

The Public Key field is represented as the Base64 encoding of the PK, as defined in Section 4 of [RFC4648]. The encoding MUST NOT contain whitespace(s) so it can be told apart from the Rendezvous Server field ๐Ÿซถ.

The PK length field is not represented either, because it's implicitly known from the Public Key field representation, which has no whitespaces ๐Ÿ“.

The Rendezvous Server field is represented by one or more domain names separated by whitespace(s). That whitespace only exists in the HIP RR representation format and is NOT part of the HIP RR wire format. (Okay, the spec says it's not part of the wire format, so it's just a presentation thing ๐Ÿง .)

The complete representation of the HIP record is:

IN  HIP   ( pk-algorithm
            base16-encoded-hit
            base64-encoded-public-key
            rendezvous-server[1]
                    ...
            rendezvous-server[n] )

When no RVSs are present, the representation of the HIP record is:

IN  HIP   ( pk-algorithm
            base16-encoded-hit
            base64-encoded-public-key )

7. Examples ๐ŸŒˆ

In the examples below, the Public Key field (which has no whitespace) gets wrapped, since it doesn't fit on one line of this document ๐Ÿ“.

Example of a node with an HI and a HIT but no RVS:

www.example.com.      IN  HIP ( 2 200100107B1A74DF365639CC39F1D578
                                AwEAAbdxyhNuSutc5EMzxTs9LBPCIkOFH8cI
vM4p9+LrV4e19WzK00+CI6zBCQTdtWsuxKbWIy87UOoJTwkUs7lBu+Upr1gsNrut79ry
ra+bSRGQb1slImA8YVJyuIDsj7kwzG7jnERNqnWxZ48AWkskmdHaVDP4BcelrTI3rMXd
XF5D )

Example of a node with an HI, a HIT, and one RVS:

www.example.com.      IN  HIP ( 2 200100107B1A74DF365639CC39F1D578
                                AwEAAbdxyhNuSutc5EMzxTs9LBPCIkOFH8cI
vM4p9+LrV4e19WzK00+CI6zBCQTdtWsuxKbWIy87UOoJTwkUs7lBu+Upr1gsNrut79ry
ra+bSRGQb1slImA8YVJyuIDsj7kwzG7jnERNqnWxZ48AWkskmdHaVDP4BcelrTI3rMXd
XF5D
                                rvs.example.com. )

Example of a node with an HI, a HIT, and two RVSs:

www.example.com.      IN  HIP ( 2 200100107B1A74DF365639CC39F1D578
                                AwEAAbdxyhNuSutc5EMzxTs9LBPCIkOFH8cI
vM4p9+LrV4e19WzK00+CI6zBCQTdtWsuxKbWIy87UOoJTwkUs7lBu+Upr1gsNrut79ry
ra+bSRGQb1slImA8YVJyuIDsj7kwzG7jnERNqnWxZ48AWkskmdHaVDP4BcelrTI3rMXd
XF5D
                                rvs1.example.com.
                                rvs2.example.com. )

8. Security Considerations ๐Ÿ”ฅ

This section is about the known threats that come with using the HIP DNS Extension. Lowkey scary, so pay attention ๐Ÿ˜ญ.

Similar to the IPSECKEY RR [RFC4025], the HIP DNS Extension lets two HIP nodes hand out the public keying material (HI) of their peer. Those HIs then get used in a key exchange between the peers. So the HIP DNS Extension is subject to the same threats as the IPSECKEY RR, which come from attacks on unsecured HIP RRs, as the rest of this section covers ๐Ÿ’€.

A HIP node SHOULD obtain HIP RRs from a trusted party through a secure channel that ensures data integrity and authenticity of the RRs. DNSSEC [RFC4033] [RFC4034] [RFC4035] provides such a secure channel. However, it's super important to know that DNSSEC only gives integrity and authenticity guarantees for the channel between the DNS server publishing a zone and the HIP node. DNSSEC does NOT ensure that the entity publishing the zone is trusted ๐Ÿ™…โ€โ™€๏ธ. Therefore, the RRSIG of the HIP RRSet MUST NOT be misinterpreted as a certificate binding the HI and/or the HIT to the owner name. Do not treat it like a cert, bestie ๐Ÿšซ.

Without a proper secure channel, both parties are vulnerable to MitM and Denial-of-Service (DoS) attacks, and unrelated parties might get hit by DoS attacks too. These threats are described in the following sections ๐Ÿฅ€.

8.1. Attacker Tampering with an Insecure HIP RR

The HIP RR holds public keying material in the form of the named peer's PK (the HI) and its secure hash (the HIT). Neither of these is sensitive to an adversary who learns them ๐Ÿ”. But an attacker who can mount an active attack on the DNS, meaning they tamper with this HIP RR (for example, with DNS spoofing), can mount MitM attacks on the cryptographic core of the eventual HIP exchange (the Responder's HIP RR rewritten by the attacker) ๐Ÿ˜ˆ.

The HIP RR may contain an RVS domain name that resolves to a destination IP address where the named peer can be reached by an I1, as per the HIP Rendezvous Extension [RFC8004]. So an attacker who can tamper with this RR can redirect I1 packets sent to the named peer to an IP address of their choosing, for DoS or MitM attacks ๐Ÿšจ. Note that this kind of attack isn't specific to HIP and exists whether or not HIP and the HIP RR are used. Such an attacker might tamper with A and AAAA RRs as well ๐Ÿ™„.

An attacker might use these two attacks together. They'd replace the Responder's HI and RVS IP address with their own in a spoofed DNS packet sent to the Initiator HI, then redirect all the exchanged packets to themselves and mount a MitM on HIP. In that case, HIP won't provide confidentiality, nor Initiator HI protection from eavesdroppers ๐Ÿ•ต๏ธโ€โ™€๏ธ.

8.2. Hash and HITs Collisions

Like many cryptographic algorithms, some secure hashes (for example SHA1, which HIP uses to generate a HIT from an HI) eventually become insecure. An exploit gets found where an attacker with reasonable computing power breaks one of the hash's security features (like its supposed collision resistance) ๐Ÿงจ. That's why a HIP end-node implementation SHOULD NOT authenticate its HIP peers based solely on a HIT retrieved from the DNS. Instead, it SHOULD use HI-based authentication ๐Ÿ”‘.

8.3. DNSSEC

Without DNSSEC, the HIP RR is subject to the threats described in RFC 3833 [RFC3833] ๐Ÿงพ.

9. IANA Considerations ๐Ÿ“š

[RFC5205], which this document obsoletes, made the following definition and reservation in the "Resource Record (RR) TYPEs" subregistry under "Domain Name System (DNS) Parameters":

Value   Type
-----   ----
55      HIP

In the "Resource Record (RR) TYPEs" subregistry under "Domain Name System (DNS) Parameters", references to [RFC5205] have been replaced by references to this document ๐Ÿ”„.

Just like [RFC5205], this document reuses the Algorithm Types defined by [RFC4025] for the IPSEC KEY RR. The presently defined values are shown here for reference only ๐Ÿงฉ:

Value   Description
-----   --------------------------------------------------------
  1     A DSA key is present, in the format defined in [RFC2536]
  2     A RSA key is present, in the format defined in [RFC3110]

IANA has made the following assignment in the "Algorithm Type Field" subregistry under "IPSECKEY Resource Record Parameters" [RFC4025] ๐ŸŽ‰:

Value   Description
-----   -----------
  3     An ECDSA key is present, in the format defined in [RFC6605]

10. References ๐Ÿ“–

10.1. Normative References

[RFC1034]  Mockapetris, P., "Domain names - concepts and facilities",
           STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987,
           <http://www.rfc-editor.org/info/rfc1034>.

[RFC1035]  Mockapetris, P., "Domain names - implementation and
           specification", STD 13, RFC 1035, DOI 10.17487/RFC1035,
           November 1987, <http://www.rfc-editor.org/info/rfc1035>.

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119,
           DOI 10.17487/RFC2119, March 1997,
           <http://www.rfc-editor.org/info/rfc2119>.

[RFC2181]  Elz, R. and R. Bush, "Clarifications to the DNS
           Specification", RFC 2181, DOI 10.17487/RFC2181, July 1997,
           <http://www.rfc-editor.org/info/rfc2181>.

[RFC3596]  Thomson, S., Huitema, C., Ksinant, V., and M. Souissi,
           "DNS Extensions to Support IP Version 6", RFC 3596,
           DOI 10.17487/RFC3596, October 2003,
           <http://www.rfc-editor.org/info/rfc3596>.

[RFC4025]  Richardson, M., "A Method for Storing IPsec Keying
           Material in DNS", RFC 4025, DOI 10.17487/RFC4025, March
           2005, <http://www.rfc-editor.org/info/rfc4025>.

[RFC4033]  Arends, R., Austein, R., Larson, M., Massey, D., and S.
           Rose, "DNS Security Introduction and Requirements",
           RFC 4033, DOI 10.17487/RFC4033, March 2005,
           <http://www.rfc-editor.org/info/rfc4033>.

[RFC4034]  Arends, R., Austein, R., Larson, M., Massey, D., and S.
           Rose, "Resource Records for the DNS Security Extensions",
           RFC 4034, DOI 10.17487/RFC4034, March 2005,
           <http://www.rfc-editor.org/info/rfc4034>.

[RFC4035]  Arends, R., Austein, R., Larson, M., Massey, D., and S.
           Rose, "Protocol Modifications for the DNS Security
           Extensions", RFC 4035, DOI 10.17487/RFC4035, March 2005,
           <http://www.rfc-editor.org/info/rfc4035>.

[RFC4648]  Josefsson, S., "The Base16, Base32, and Base64 Data
           Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006,
           <http://www.rfc-editor.org/info/rfc4648>.

[RFC6605]  Hoffman, P. and W. Wijngaards, "Elliptic Curve Digital
           Signature Algorithm (DSA) for DNSSEC", RFC 6605,
           DOI 10.17487/RFC6605, April 2012,
           <http://www.rfc-editor.org/info/rfc6605>.

[RFC7401]  Moskowitz, R., Ed., Heer, T., Jokela, P., and T.
           Henderson, "Host Identity Protocol Version 2 (HIPv2)",
           RFC 7401, DOI 10.17487/RFC7401, April 2015,
           <http://www.rfc-editor.org/info/rfc7401>.

[RFC8004]  Laganier, J. and L. Eggert, "Host Identity Protocol (HIP)
           Rendezvous Extension", RFC 8004, DOI 10.17487/RFC8004,
           October 2016, <http://www.rfc-editor.org/info/rfc8004>.

10.2. Informative References โœจ

Okay bestie, these are the informative refs, so they're the background reading that makes the whole spec click ๐Ÿ“š๐Ÿ’œ


Appendix A. Changes from RFC 5205 ๐Ÿ’…

Here's the glow-up list, what changed since RFC 5205 ๐Ÿฆ‹

  • Updated HIP references to revised HIP specifications. ๐Ÿ“
  • Extended the DNS HIP RR to support Host Identities based on ECDSA. ๐Ÿ”
  • Clarified that a new query must be made when the time that has passed since an RR was retrieved exceeds the TTL of the RR. โฐ
  • Added considerations related to multiple HIP RRs being associated with a single name. ๐Ÿ‘ฏ
  • Clarified that the Base64 encoding in use is as per Section 4 of [RFC4648]. ๐Ÿ”ค
  • Clarified the wire format when more than one RVS is defined in one RR. ๐Ÿ›ฐ๏ธ
  • Clarified that "whitespace" is used as the delimiter in the human-readable representation of the RR but is not part of the wire format. โœจ

Acknowledgments ๐Ÿซถ

Okay so, as usual in the IETF, this doc is a team project! ๐Ÿ’– The authors want to thank the author (Michael Richardson), contributors, and reviewers of the IPSECKEY RR [RFC4025] spec, which this one was framed on ๐ŸŒธ They also shout out these people, who gave thoughtful and helpful discussions and/or suggestions that made this doc better: Jeff Ahrenholz, Rob Austein, Hannu Flinck, Olafur Gudmundsson, Tom Henderson, Peter Koch, Olaf Kolkman, Miika Komu, Andrew McGregor, Gabriel Montenegro, and Erik Nordmark ๐Ÿฅฐ Some parts of this doc come from the HIP specification [RFC7401] ๐Ÿงš And finally, thanks to Sheng Jiang for doing the Internet Area Directorate review during publication ๐Ÿ‘‘


Contributors ๐ŸŒˆ

Pekka Nikander coauthored an earlier, experimental version of this spec [RFC5205] ๐Ÿฆ‹


Author's Address ๐ŸŽ€

Julien Laganier Luminate Wireless, Inc. Cupertino, CA United States of America

Email: julien.ietf@gmail.com ๐Ÿ’Œ

๐Ÿ“ฆ where this page comes from