summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc7401.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc7401.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc7401.txt')
-rw-r--r--doc/rfc/rfc7401.txt7171
1 files changed, 7171 insertions, 0 deletions
diff --git a/doc/rfc/rfc7401.txt b/doc/rfc/rfc7401.txt
new file mode 100644
index 0000000..eb14650
--- /dev/null
+++ b/doc/rfc/rfc7401.txt
@@ -0,0 +1,7171 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) R. Moskowitz, Ed.
+Request for Comments: 7401 HTT Consulting
+Obsoletes: 5201 T. Heer
+Category: Standards Track Hirschmann Automation and Control
+ISSN: 2070-1721 P. Jokela
+ Ericsson Research NomadicLab
+ T. Henderson
+ University of Washington
+ April 2015
+
+
+ Host Identity Protocol Version 2 (HIPv2)
+
+Abstract
+
+ This document specifies the details of the Host Identity Protocol
+ (HIP). HIP allows consenting hosts to securely establish and
+ maintain shared IP-layer state, allowing separation of the identifier
+ and locator roles of IP addresses, thereby enabling continuity of
+ communications across IP address changes. HIP is based on a Diffie-
+ Hellman key exchange, using public key identifiers from a new Host
+ Identity namespace for mutual peer authentication. The protocol is
+ designed to be resistant to denial-of-service (DoS) and man-in-the-
+ middle (MitM) attacks. When used together with another suitable
+ security protocol, such as the Encapsulating Security Payload (ESP),
+ it provides integrity protection and optional encryption for upper-
+ layer protocols, such as TCP and UDP.
+
+ This document obsoletes RFC 5201 and addresses the concerns raised by
+ the IESG, particularly that of crypto agility. It also incorporates
+ lessons learned from the implementations of RFC 5201.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 5741.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ http://www.rfc-editor.org/info/rfc7401.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 1]
+
+RFC 7401 HIPv2 April 2015
+
+
+Copyright Notice
+
+ Copyright (c) 2015 IETF Trust and the persons identified as the
+ document authors. All rights 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) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction ....................................................5
+ 1.1. A New Namespace and Identifiers ............................6
+ 1.2. The HIP Base Exchange (BEX) ................................6
+ 1.3. Memo Structure .............................................7
+ 2. Terms and Definitions ...........................................7
+ 2.1. Requirements Terminology ...................................7
+ 2.2. Notation ...................................................8
+ 2.3. Definitions ................................................8
+ 3. Host Identity (HI) and Its Structure ............................9
+ 3.1. Host Identity Tag (HIT) ...................................10
+ 3.2. Generating a HIT from an HI ...............................11
+ 4. Protocol Overview ..............................................12
+ 4.1. Creating a HIP Association ................................12
+ 4.1.1. HIP Puzzle Mechanism ...............................14
+ 4.1.2. Puzzle Exchange ....................................15
+ 4.1.3. Authenticated Diffie-Hellman Protocol with
+ DH Group Negotiation ...............................17
+ 4.1.4. HIP Replay Protection ..............................18
+ 4.1.5. Refusing a HIP Base Exchange .......................19
+ 4.1.6. Aborting a HIP Base Exchange .......................20
+ 4.1.7. HIP Downgrade Protection ...........................20
+ 4.1.8. HIP Opportunistic Mode .............................21
+ 4.2. Updating a HIP Association ................................24
+ 4.3. Error Processing ..........................................24
+ 4.4. HIP State Machine .........................................25
+ 4.4.1. State Machine Terminology ..........................26
+ 4.4.2. HIP States .........................................27
+ 4.4.3. HIP State Processes ................................28
+ 4.4.4. Simplified HIP State Diagram .......................35
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 2]
+
+RFC 7401 HIPv2 April 2015
+
+
+ 4.5. User Data Considerations ..................................37
+ 4.5.1. TCP and UDP Pseudo Header Computation for
+ User Data ..........................................37
+ 4.5.2. Sending Data on HIP Packets ........................37
+ 4.5.3. Transport Formats ..................................37
+ 4.5.4. Reboot, Timeout, and Restart of HIP ................37
+ 4.6. Certificate Distribution ..................................38
+ 5. Packet Formats .................................................38
+ 5.1. Payload Format ............................................38
+ 5.1.1. Checksum ...........................................40
+ 5.1.2. HIP Controls .......................................40
+ 5.1.3. HIP Fragmentation Support ..........................40
+ 5.2. HIP Parameters ............................................41
+ 5.2.1. TLV Format .........................................44
+ 5.2.2. Defining New Parameters ............................46
+ 5.2.3. R1_COUNTER .........................................47
+ 5.2.4. PUZZLE .............................................48
+ 5.2.5. SOLUTION ...........................................49
+ 5.2.6. DH_GROUP_LIST ......................................50
+ 5.2.7. DIFFIE_HELLMAN .....................................51
+ 5.2.8. HIP_CIPHER .........................................52
+ 5.2.9. HOST_ID ............................................54
+ 5.2.10. HIT_SUITE_LIST ....................................56
+ 5.2.11. TRANSPORT_FORMAT_LIST .............................58
+ 5.2.12. HIP_MAC ...........................................59
+ 5.2.13. HIP_MAC_2 .........................................59
+ 5.2.14. HIP_SIGNATURE .....................................60
+ 5.2.15. HIP_SIGNATURE_2 ...................................61
+ 5.2.16. SEQ ...............................................61
+ 5.2.17. ACK ...............................................62
+ 5.2.18. ENCRYPTED .........................................62
+ 5.2.19. NOTIFICATION ......................................64
+ 5.2.20. ECHO_REQUEST_SIGNED ...............................67
+ 5.2.21. ECHO_REQUEST_UNSIGNED .............................68
+ 5.2.22. ECHO_RESPONSE_SIGNED ..............................69
+ 5.2.23. ECHO_RESPONSE_UNSIGNED ............................69
+ 5.3. HIP Packets ...............................................70
+ 5.3.1. I1 - the HIP Initiator Packet ......................71
+ 5.3.2. R1 - the HIP Responder Packet ......................72
+ 5.3.3. I2 - the Second HIP Initiator Packet ...............75
+ 5.3.4. R2 - the Second HIP Responder Packet ...............76
+ 5.3.5. UPDATE - the HIP Update Packet .....................77
+ 5.3.6. NOTIFY - the HIP Notify Packet .....................78
+ 5.3.7. CLOSE - the HIP Association Closing Packet .........78
+ 5.3.8. CLOSE_ACK - the HIP Closing Acknowledgment Packet ..79
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 3]
+
+RFC 7401 HIPv2 April 2015
+
+
+ 5.4. ICMP Messages .............................................79
+ 5.4.1. Invalid Version ....................................79
+ 5.4.2. Other Problems with the HIP Header and
+ Packet Structure ...................................80
+ 5.4.3. Invalid Puzzle Solution ............................80
+ 5.4.4. Non-existing HIP Association .......................80
+ 6. Packet Processing ..............................................80
+ 6.1. Processing Outgoing Application Data ......................81
+ 6.2. Processing Incoming Application Data ......................82
+ 6.3. Solving the Puzzle ........................................83
+ 6.4. HIP_MAC and SIGNATURE Calculation and Verification ........84
+ 6.4.1. HMAC Calculation ...................................84
+ 6.4.2. Signature Calculation ..............................87
+ 6.5. HIP KEYMAT Generation .....................................89
+ 6.6. Initiation of a HIP Base Exchange .........................90
+ 6.6.1. Sending Multiple I1 Packets in Parallel ............91
+ 6.6.2. Processing Incoming ICMP Protocol
+ Unreachable Messages ...............................92
+ 6.7. Processing of Incoming I1 Packets .........................92
+ 6.7.1. R1 Management ......................................94
+ 6.7.2. Handling of Malformed Messages .....................94
+ 6.8. Processing of Incoming R1 Packets .........................94
+ 6.8.1. Handling of Malformed Messages .....................97
+ 6.9. Processing of Incoming I2 Packets .........................97
+ 6.9.1. Handling of Malformed Messages ....................100
+ 6.10. Processing of Incoming R2 Packets .......................101
+ 6.11. Sending UPDATE Packets ..................................101
+ 6.12. Receiving UPDATE Packets ................................102
+ 6.12.1. Handling a SEQ Parameter in a Received
+ UPDATE Message ...................................103
+ 6.12.2. Handling an ACK Parameter in a Received
+ UPDATE Packet ....................................104
+ 6.13. Processing of NOTIFY Packets ............................104
+ 6.14. Processing of CLOSE Packets .............................105
+ 6.15. Processing of CLOSE_ACK Packets .........................105
+ 6.16. Handling State Loss .....................................105
+ 7. HIP Policies ..................................................106
+ 8. Security Considerations .......................................106
+ 9. IANA Considerations ...........................................109
+ 10. Differences from RFC 5201 ....................................113
+ 11. References ...................................................117
+ 11.1. Normative References ....................................117
+ 11.2. Informative References ..................................119
+ Appendix A. Using Responder Puzzles ..............................122
+ Appendix B. Generating a Public Key Encoding from an HI ..........123
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 4]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Appendix C. Example Checksums for HIP Packets ....................123
+ C.1. IPv6 HIP Example (I1 Packet) ..............................124
+ C.2. IPv4 HIP Packet (I1 Packet) ...............................124
+ C.3. TCP Segment ...............................................125
+ Appendix D. ECDH and ECDSA 160-Bit Groups ........................125
+ Appendix E. HIT Suites and HIT Generation ........................125
+ Acknowledgments ..................................................127
+ Authors' Addresses ...............................................128
+
+1. Introduction
+
+ This document specifies the details of the Host Identity Protocol
+ (HIP). A high-level description of the protocol and the underlying
+ architectural thinking is available in the separate HIP architecture
+ description [HIP-ARCH]. Briefly, the HIP architecture proposes an
+ alternative to the dual use of IP addresses as "locators" (routing
+ labels) and "identifiers" (endpoint, or host, identifiers). In HIP,
+ public cryptographic keys, of a public/private key pair, are used as
+ host identifiers, to which higher-layer protocols are bound instead
+ of an IP address. By using public keys (and their representations)
+ as host identifiers, dynamic changes to IP address sets can be
+ directly authenticated between hosts, and if desired, strong
+ authentication between hosts at the TCP/IP stack level can be
+ obtained.
+
+ This memo specifies the base HIP protocol ("base exchange") used
+ between hosts to establish an IP-layer communications context, called
+ a HIP association, prior to communications. It also defines a packet
+ format and procedures for updating and terminating an active HIP
+ association. Other elements of the HIP architecture are specified in
+ other documents, such as:
+
+ o "Using the Encapsulating Security Payload (ESP) Transport Format
+ with the Host Identity Protocol (HIP)" [RFC7402]: how to use the
+ Encapsulating Security Payload (ESP) for integrity protection and
+ optional encryption
+
+ o "Host Mobility with the Host Identity Protocol" [HIP-HOST-MOB]:
+ how to support host mobility in HIP
+
+ o "Host Identity Protocol (HIP) Domain Name System (DNS) Extension"
+ [HIP-DNS-EXT]: how to extend DNS to contain Host Identity
+ information
+
+ o "Host Identity Protocol (HIP) Rendezvous Extension"
+ [HIP-REND-EXT]: using a rendezvous mechanism to contact mobile HIP
+ hosts
+
+
+
+
+Moskowitz, et al. Standards Track [Page 5]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Since the HIP base exchange was first developed, there have been a
+ few advances in cryptography and attacks against cryptographic
+ systems. As a result, all cryptographic protocols need to be agile.
+ That is, the ability to switch from one cryptographic primitive to
+ another should be a part of such protocols. It is important to
+ support a reasonable set of mainstream algorithms to cater to
+ different use cases and allow moving away from algorithms that are
+ later discovered to be vulnerable. This update to the base exchange
+ includes this needed cryptographic agility while addressing the
+ downgrade attacks that such flexibility introduces. In addition,
+ Elliptic Curve support via Elliptic Curve DSA (ECDSA) and Elliptic
+ Curve Diffie-Hellman (ECDH) has been added.
+
+1.1. A New Namespace and Identifiers
+
+ The Host Identity Protocol introduces a new namespace, the Host
+ Identity namespace. Some ramifications of this new namespace are
+ explained in the HIP architecture description [HIP-ARCH].
+
+ There are two main representations of the Host Identity, the full
+ Host Identity (HI) and the Host Identity Tag (HIT). The HI is a
+ public key and directly represents the Identity of a host. Since
+ there are different public key algorithms that can be used with
+ different key lengths, the HI, as such, is unsuitable for use as a
+ packet identifier, or as an index into the various state-related
+ implementation structures needed to support HIP. Consequently, a
+ hash of the HI, the Host Identity Tag (HIT), is used as the
+ operational representation. The HIT is 128 bits long and is used
+ in the HIP headers and to index the corresponding state in the
+ end hosts. The HIT has an important security property in that it
+ is self-certifying (see Section 3).
+
+1.2. The HIP Base Exchange (BEX)
+
+ The HIP base exchange is a two-party cryptographic protocol used to
+ establish communications context between hosts. The base exchange is
+ a SIGMA-compliant [KRA03] four-packet exchange. The first party is
+ called the Initiator and the second party the Responder. The
+ protocol exchanges Diffie-Hellman [DIF76] keys in the 2nd and 3rd
+ packets, and authenticates the parties in the 3rd and 4th packets.
+ The four-packet design helps to make HIP resistant to DoS attacks.
+ It allows the Responder to stay stateless until the IP address and
+ the cryptographic puzzle are verified. The Responder starts the
+ puzzle exchange in the 2nd packet, with the Initiator completing it
+ in the 3rd packet before the Responder stores any state from the
+ exchange.
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 6]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The exchange can use the Diffie-Hellman output to encrypt the Host
+ Identity of the Initiator in the 3rd packet (although Aura, et al.
+ [AUR05] note that such operation may interfere with packet-inspecting
+ middleboxes), or the Host Identity may instead be sent unencrypted.
+ The Responder's Host Identity is not protected. It should be noted,
+ however, that both the Initiator's and the Responder's HITs are
+ transported as such (in cleartext) in the packets, allowing an
+ eavesdropper with a priori knowledge about the parties to identify
+ them by their HITs. Hence, encrypting the HI of any party does not
+ provide privacy against such an attacker.
+
+ Data packets start to flow after the 4th packet. The 3rd and 4th HIP
+ packets may carry a data payload in the future. However, the details
+ of this may be defined later.
+
+ An existing HIP association can be updated using the update mechanism
+ defined in this document, and when the association is no longer
+ needed, it can be closed using the defined closing mechanism.
+
+ Finally, HIP is designed as an end-to-end authentication and key
+ establishment protocol, to be used with Encapsulating Security
+ Payload (ESP) [RFC7402] and other end-to-end security protocols. The
+ base protocol does not cover all the fine-grained policy control
+ found in Internet Key Exchange (IKE) [RFC7296] that allows IKE to
+ support complex gateway policies. Thus, HIP is not a complete
+ replacement for IKE.
+
+1.3. Memo Structure
+
+ The rest of this memo is structured as follows. Section 2 defines
+ the central keywords, notation, and terms used throughout the rest of
+ the document. Section 3 defines the structure of the Host Identity
+ and its various representations. Section 4 gives an overview of the
+ HIP base exchange protocol. Sections 5 and 6 define the detailed
+ packet formats and rules for packet processing. Finally, Sections 7,
+ 8, and 9 discuss policy, security, and IANA considerations,
+ respectively.
+
+2. Terms and Definitions
+
+2.1. Requirements Terminology
+
+ 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].
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 7]
+
+RFC 7401 HIPv2 April 2015
+
+
+2.2. Notation
+
+ [x] indicates that x is optional.
+
+ {x} indicates that x is encrypted.
+
+ X(y) indicates that y is a parameter of X.
+
+ <x>i indicates that x exists i times.
+
+ --> signifies "Initiator to Responder" communication (requests).
+
+ <-- signifies "Responder to Initiator" communication (replies).
+
+ | signifies concatenation of information (e.g., X | Y is the
+ concatenation of X with Y).
+
+ Ltrunc (H(x), #K)
+ denotes the lowest-order #K bits of the result of the
+ hash function H on the input x.
+
+2.3. Definitions
+
+ HIP base exchange (BEX): The handshake for establishing a new HIP
+ association.
+
+ Host Identity (HI): The public key of the signature algorithm that
+ represents the identity of the host. In HIP, a host proves its
+ identity by creating a signature with the private key belonging to
+ its HI (cf. Section 3).
+
+ Host Identity Tag (HIT): A shorthand for the HI in IPv6 format. It
+ is generated by hashing the HI (cf. Section 3.1).
+
+ HIT Suite: A HIT Suite groups all cryptographic algorithms that are
+ required to generate and use an HI and its HIT. In particular,
+ these algorithms are 1) the public key signature algorithm, 2) the
+ hash function, and 3) the truncation (cf. Appendix E).
+
+ HIP association: The shared state between two peers after completion
+ of the BEX.
+
+ HIP packet: A control packet carrying a HIP packet header relating
+ to the establishment, maintenance, or termination of the HIP
+ association.
+
+ Initiator: The host that initiates the BEX. This role is typically
+ forgotten once the BEX is completed.
+
+
+
+Moskowitz, et al. Standards Track [Page 8]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Responder: The host that responds to the Initiator in the BEX. This
+ role is typically forgotten once the BEX is completed.
+
+ Responder's HIT hash algorithm (RHASH): The hash algorithm used for
+ various hash calculations in this document. The algorithm is the
+ same as is used to generate the Responder's HIT. The RHASH is the
+ hash function defined by the HIT Suite of the Responder's HIT
+ (cf. Section 5.2.10).
+
+ Length of the Responder's HIT hash algorithm (RHASH_len): The
+ natural output length of RHASH in bits.
+
+ Signed data: Data that is signed is protected by a digital signature
+ that was created by the sender of the data by using the private
+ key of its HI.
+
+ KDF: The Key Derivation Function (KDF) is used for deriving the
+ symmetric keys from the Diffie-Hellman key exchange.
+
+ KEYMAT: The keying material derived from the Diffie-Hellman key
+ exchange by using the KDF. Symmetric keys for encryption and
+ integrity protection of HIP packets and encrypted user data
+ packets are drawn from this keying material.
+
+3. Host Identity (HI) and Its Structure
+
+ In this section, the properties of the Host Identity and Host
+ Identity Tag are discussed, and the exact format for them is defined.
+ In HIP, the public key of an asymmetric key pair is used as the Host
+ Identity (HI). Correspondingly, the host itself is defined as the
+ entity that holds the private key of the key pair. See the HIP
+ architecture specification [HIP-ARCH] for more details on the
+ difference between an identity and the corresponding identifier.
+
+ HIP implementations MUST support the Rivest Shamir Adleman [RSA]
+ public key algorithm and the Elliptic Curve Digital Signature
+ Algorithm (ECDSA) for generating the HI as defined in Section 5.2.9.
+ Additional algorithms MAY be supported.
+
+ A hashed encoding of the HI, the Host Identity Tag (HIT), is used in
+ protocols to represent the Host Identity. The HIT is 128 bits long
+ and has the following three key properties: i) it is the same length
+ as an IPv6 address and can be used in fixed address-sized fields in
+ APIs and protocols; ii) it is self-certifying (i.e., given a HIT, it
+ is computationally hard to find a Host Identity key that matches the
+ HIT); and iii) the probability of a HIT collision between two hosts
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 9]
+
+RFC 7401 HIPv2 April 2015
+
+
+ is very low; hence, it is infeasible for an attacker to find a
+ collision with a HIT that is in use. For details on the security
+ properties of the HIT, see [HIP-ARCH].
+
+ The structure of the HIT is defined in [RFC7343]. The HIT is an
+ Overlay Routable Cryptographic Hash Identifier (ORCHID) and consists
+ of three parts: first, an IANA-assigned prefix to distinguish it from
+ other IPv6 addresses; second, a four-bit encoding of the algorithms
+ that were used for generating the HI and the hashed representation of
+ HI; third, a 96-bit hashed representation of the Host Identity. The
+ encoding of the ORCHID generation algorithm and the exact algorithm
+ for generating the hashed representation are specified in Appendix E
+ and [RFC7343].
+
+ Carrying HIs and HITs in the header of user data packets would
+ increase the overhead of packets. Thus, it is not expected that they
+ are carried in every packet, but other methods are used to map the
+ data packets to the corresponding HIs. In some cases, this makes it
+ possible to use HIP without any additional headers in the user data
+ packets. For example, if ESP is used to protect data traffic, the
+ Security Parameter Index (SPI) carried in the ESP header can be used
+ to map the encrypted data packet to the correct HIP association.
+
+3.1. Host Identity Tag (HIT)
+
+ The Host Identity Tag is a 128-bit value -- a hashed encoding of the
+ Host Identifier. There are two advantages of using a hashed encoding
+ over the actual variable-sized Host Identity public key in protocols.
+ First, the fixed length of the HIT keeps packet sizes manageable and
+ eases protocol coding. Second, it presents a consistent format for
+ the protocol, independent of the underlying identity technology
+ in use.
+
+ RFC 7343 [RFC7343] specifies 128-bit hash-based identifiers, called
+ ORCHIDs. Their prefix, allocated from the IPv6 address block, is
+ defined in [RFC7343]. The Host Identity Tag is one type of ORCHID.
+
+ This document extends the original, experimental HIP specification
+ [RFC5201] with measures to support crypto agility. One of these
+ measures allows different hash functions for creating a HIT. HIT
+ Suites group the sets of algorithms that are required to generate and
+ use a particular HIT. The Suites are encoded in HIT Suite IDs.
+ These HIT Suite IDs are transmitted in the ORCHID Generation
+ Algorithm (OGA) field in the ORCHID. With the HIT Suite ID in the
+ OGA ID field, a host can tell, from another host's HIT, whether it
+ supports the necessary hash and signature algorithms to establish a
+ HIP association with that host.
+
+
+
+
+Moskowitz, et al. Standards Track [Page 10]
+
+RFC 7401 HIPv2 April 2015
+
+
+3.2. Generating a HIT from an HI
+
+ The HIT MUST be generated according to the ORCHID generation method
+ described in [RFC7343] using a context ID value of 0xF0EF F02F BFF4
+ 3D0F E793 0C3C 6E61 74EA (this tag value has been generated randomly
+ by the editor of this specification), and an input that encodes the
+ Host Identity field (see Section 5.2.9) present in a HIP payload
+ packet. The set of hash function, signature algorithm, and the
+ algorithm used for generating the HIT from the HI depends on the HIT
+ Suite (see Section 5.2.10) and is indicated by the four bits of the
+ OGA ID field in the ORCHID. Currently, truncated SHA-1, truncated
+ SHA-384, and truncated SHA-256 [FIPS.180-4.2012] are defined as
+ hashes for generating a HIT.
+
+ For identities that are either RSA, Digital Signature Algorithm (DSA)
+ [FIPS.186-4.2013], or Elliptic Curve DSA (ECDSA) public keys, the
+ ORCHID input consists of the public key encoding as specified for the
+ Host Identity field of the HOST_ID parameter (see Section 5.2.9).
+ This document defines four algorithm profiles: RSA, DSA, ECDSA, and
+ ECDSA_LOW. The ECDSA_LOW profile is meant for devices with low
+ computational capabilities. Hence, one of the following applies:
+
+ The RSA public key is encoded as defined in [RFC3110], Section 2,
+ taking the exponent length (e_len), exponent (e), and modulus (n)
+ fields concatenated. The length (n_len) of the modulus (n) can be
+ determined from the total HI Length and the preceding HI fields
+ including the exponent (e). Thus, the data that serves as input
+ for the HIT generation has the same length as the HI. The fields
+ MUST be encoded in network byte order, as defined in [RFC3110].
+
+ The DSA public key is encoded as defined in [RFC2536], Section 2,
+ taking the fields T, Q, P, G, and Y, concatenated as input. Thus,
+ the data to be hashed is 1 + 20 + 3 * 64 + 3 * 8 * T octets long,
+ where T is the size parameter as defined in [RFC2536]. The size
+ parameter T, affecting the field lengths, MUST be selected as the
+ minimum value that is long enough to accommodate P, G, and Y. The
+ fields MUST be encoded in network byte order, as defined in
+ [RFC2536].
+
+ The ECDSA public keys are encoded as defined in Sections 4.2 and 6
+ of [RFC6090].
+
+ In Appendix B, the public key encoding process is illustrated using
+ pseudo-code.
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 11]
+
+RFC 7401 HIPv2 April 2015
+
+
+4. Protocol Overview
+
+ This section is a simplified overview of the HIP protocol operation,
+ and does not contain all the details of the packet formats or the
+ packet processing steps. Sections 5 and 6 describe in more detail
+ the packet formats and packet processing steps, respectively, and are
+ normative in case of any conflicts with this section.
+
+ The protocol number 139 has been assigned by IANA to the Host
+ Identity Protocol.
+
+ The HIP payload (Section 5.1) header could be carried in every IP
+ datagram. However, since HIP headers are relatively large
+ (40 bytes), it is desirable to 'compress' the HIP header so that the
+ HIP header only occurs in control packets used to establish or change
+ HIP association state. The actual method for header 'compression'
+ and for matching data packets with existing HIP associations (if any)
+ is defined in separate documents, describing transport formats and
+ methods. All HIP implementations MUST implement, at minimum, the ESP
+ transport format for HIP [RFC7402].
+
+4.1. Creating a HIP Association
+
+ By definition, the system initiating a HIP base exchange is the
+ Initiator, and the peer is the Responder. This distinction is
+ typically forgotten once the base exchange completes, and either
+ party can become the Initiator in future communications.
+
+ The HIP base exchange serves to manage the establishment of state
+ between an Initiator and a Responder. The first packet, I1,
+ initiates the exchange, and the last three packets, R1, I2, and R2,
+ constitute an authenticated Diffie-Hellman [DIF76] key exchange for
+ session-key generation. In the first two packets, the hosts agree on
+ a set of cryptographic identifiers and algorithms that are then used
+ in and after the exchange. During the Diffie-Hellman key exchange, a
+ piece of keying material is generated. The HIP association keys are
+ drawn from this keying material by using a Key Derivation Function
+ (KDF). If other cryptographic keys are needed, e.g., to be used with
+ ESP, they are expected to be drawn from the same keying material by
+ using the KDF.
+
+ The Initiator first sends a trigger packet, I1, to the Responder.
+ The packet contains the HIT of the Initiator and possibly the HIT of
+ the Responder, if it is known. Moreover, the I1 packet initializes
+ the negotiation of the Diffie-Hellman group that is used for
+ generating the keying material. Therefore, the I1 packet contains a
+ list of Diffie-Hellman Group IDs supported by the Initiator. Note
+ that in some cases it may be possible to replace this trigger packet
+
+
+
+Moskowitz, et al. Standards Track [Page 12]
+
+RFC 7401 HIPv2 April 2015
+
+
+ with some other form of a trigger, in which case the protocol starts
+ with the Responder sending the R1 packet. In such cases, another
+ mechanism to convey the Initiator's supported DH groups (e.g., by
+ using a default group) must be specified.
+
+ The second packet, R1, starts the actual authenticated Diffie-Hellman
+ exchange. It contains a puzzle -- a cryptographic challenge that the
+ Initiator must solve before continuing the exchange. The level of
+ difficulty of the puzzle can be adjusted based on the level of trust
+ with the Initiator, the current load, or other factors. In addition,
+ the R1 contains the Responder's Diffie-Hellman parameter and lists of
+ cryptographic algorithms supported by the Responder. Based on these
+ lists, the Initiator can continue, abort, or restart the base
+ exchange with a different selection of cryptographic algorithms.
+ Also, the R1 packet contains a signature that covers selected parts
+ of the message. Some fields are left outside the signature to
+ support pre-created R1s.
+
+ In the I2 packet, the Initiator MUST display the solution to the
+ received puzzle. Without a correct solution, the I2 message is
+ discarded. The I2 packet also contains a Diffie-Hellman parameter
+ that carries needed information for the Responder. The I2 packet is
+ signed by the Initiator.
+
+ The R2 packet acknowledges the receipt of the I2 packet and completes
+ the base exchange. The packet is signed by the Responder.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 13]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The base exchange is illustrated below in Figure 1. The term "key"
+ refers to the Host Identity public key, and "sig" represents a
+ signature using such a key. The packets contain other parameters not
+ shown in this figure.
+
+ Initiator Responder
+
+ I1: DH list
+ -------------------------->
+ select precomputed R1
+ R1: puzzle, DH, key, sig
+ <-------------------------
+ check sig remain stateless
+ solve puzzle
+ I2: solution, DH, {key}, sig
+ -------------------------->
+ compute DH check puzzle
+ check sig
+ R2: sig
+ <--------------------------
+ check sig compute DH
+
+ Figure 1
+
+4.1.1. HIP Puzzle Mechanism
+
+ The purpose of the HIP puzzle mechanism is to protect the Responder
+ from a number of denial-of-service threats. It allows the Responder
+ to delay state creation until receiving the I2 packet. Furthermore,
+ the puzzle allows the Responder to use a fairly cheap calculation to
+ check that the Initiator is "sincere" in the sense that it has
+ churned enough CPU cycles in solving the puzzle.
+
+ The puzzle allows a Responder implementation to completely delay
+ association-specific state creation until a valid I2 packet is
+ received. An I2 packet without a valid puzzle solution can be
+ rejected immediately once the Responder has checked the solution.
+ The solution can be checked by computing only one hash function, and
+ invalid solutions can be rejected before state is created, and before
+ CPU-intensive public-key signature verification and Diffie-Hellman
+ key generation are performed. By varying the difficulty of the
+ puzzle, the Responder can frustrate CPU- or memory-targeted DoS
+ attacks.
+
+ The Responder can remain stateless and drop most spoofed I2 packets
+ because puzzle calculation is based on the Initiator's Host Identity
+ Tag. The idea is that the Responder has a (perhaps varying) number
+ of pre-calculated R1 packets, and it selects one of these based on
+
+
+
+Moskowitz, et al. Standards Track [Page 14]
+
+RFC 7401 HIPv2 April 2015
+
+
+ the information carried in the I1 packet. When the Responder then
+ later receives the I2 packet, it can verify that the puzzle has been
+ solved using the Initiator's HIT. This makes it impractical for the
+ attacker to first exchange one I1/R1 packet, and then generate a
+ large number of spoofed I2 packets that seemingly come from different
+ HITs. This method does not protect the Responder from an attacker
+ that uses fixed HITs, though. Against such an attacker, a viable
+ approach may be to create a piece of local state, and remember that
+ the puzzle check has previously failed. See Appendix A for one
+ possible implementation. Responder implementations SHOULD include
+ sufficient randomness in the puzzle values so that algorithmic
+ complexity attacks become impossible [CRO03].
+
+ The Responder can set the puzzle difficulty for the Initiator, based
+ on its level of trust of the Initiator. Because the puzzle is not
+ included in the signature calculation, the Responder can use
+ pre-calculated R1 packets and include the puzzle just before sending
+ the R1 to the Initiator. The Responder SHOULD use heuristics to
+ determine when it is under a denial-of-service attack, and set the
+ puzzle difficulty value #K appropriately, as explained later.
+
+4.1.2. Puzzle Exchange
+
+ The Responder starts the puzzle exchange when it receives an I1
+ packet. The Responder supplies a random number #I, and requires the
+ Initiator to find a number #J. To select a proper #J, the Initiator
+ must create the concatenation of #I, the HITs of the parties, and #J,
+ and calculate a hash over this concatenation using the RHASH
+ algorithm. The lowest-order #K bits of the result MUST be zeros.
+ The value #K sets the difficulty of the puzzle.
+
+ To generate a proper number #J, the Initiator will have to generate a
+ number of #Js until one produces the hash target of zeros. The
+ Initiator SHOULD give up after exceeding the puzzle Lifetime in the
+ PUZZLE parameter (as described in Section 5.2.4). The Responder
+ needs to re-create the concatenation of #I, the HITs, and the
+ provided #J, and compute the hash once to prove that the Initiator
+ completed its assigned task.
+
+ To prevent precomputation attacks, the Responder MUST select the
+ number #I in such a way that the Initiator cannot guess it.
+ Furthermore, the construction MUST allow the Responder to verify that
+ the value #I was indeed selected by it and not by the Initiator. See
+ Appendix A for an example on how to implement this.
+
+ Using the Opaque data field in the PUZZLE (see Section 5.2.4) in an
+ ECHO_REQUEST_SIGNED (see Section 5.2.20) or in an
+ ECHO_REQUEST_UNSIGNED parameter (see Section 5.2.21), the Responder
+
+
+
+Moskowitz, et al. Standards Track [Page 15]
+
+RFC 7401 HIPv2 April 2015
+
+
+ can include some data in R1 that the Initiator MUST copy unmodified
+ in the corresponding I2 packet. The Responder can use the opaque
+ data to transfer a piece of local state information to the Initiator
+ and back -- for example, to recognize that the I2 is a response to a
+ previously sent R1. The Responder can generate the opaque data in
+ various ways, e.g., using encryption or hashing with some secret, the
+ sent #I, and possibly using other related data. With the same
+ secret, the received #I (from the I2 packet), and the other related
+ data (if any), the Responder can verify that it has itself sent the
+ #I to the Initiator. The Responder MUST periodically change such a
+ secret.
+
+ It is RECOMMENDED that the Responder generates new secrets for the
+ puzzle and new R1s once every few minutes. Furthermore, it is
+ RECOMMENDED that the Responder is able to verify a valid puzzle
+ solution at least Lifetime seconds after the puzzle secret has been
+ deprecated. This time value guarantees that the puzzle is valid for
+ at least Lifetime and at most 2 * Lifetime seconds. This limits the
+ usability that an old, solved puzzle has to an attacker. Moreover,
+ it avoids problems with the validity of puzzles if the lifetime is
+ relatively short compared to the network delay and the time for
+ solving the puzzle.
+
+ The puzzle value #I and the solution #J are inputs for deriving the
+ keying material from the Diffie-Hellman key exchange (see
+ Section 6.5). Therefore, to ensure that the derived keying material
+ differs, a Responder SHOULD NOT use the same puzzle #I with the same
+ DH keys for the same Initiator twice. Such uniqueness can be
+ achieved, for example, by using a counter as an additional input for
+ generating #I. This counter can be increased for each processed I1
+ packet. The state of the counter can be transmitted in the Opaque
+ data field in the PUZZLE (see Section 5.2.4), in an
+ ECHO_REQUEST_SIGNED parameter (see Section 5.2.20), or in an
+ ECHO_REQUEST_UNSIGNED parameter (see Section 5.2.21) without the need
+ to establish state.
+
+ NOTE: The protocol developers explicitly considered whether R1 should
+ include a timestamp in order to protect the Initiator from replay
+ attacks. The decision was to NOT include a timestamp, to avoid
+ problems with global time synchronization.
+
+ NOTE: The protocol developers explicitly considered whether a memory-
+ bound function should be used for the puzzle instead of a CPU-bound
+ function. The decision was to not use memory-bound functions.
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 16]
+
+RFC 7401 HIPv2 April 2015
+
+
+4.1.3. Authenticated Diffie-Hellman Protocol with DH Group Negotiation
+
+ The packets R1, I2, and R2 implement a standard authenticated
+ Diffie-Hellman exchange. The Responder sends one of its public
+ Diffie-Hellman keys and its public authentication key, i.e., its Host
+ Identity, in R1. The signature in the R1 packet allows the Initiator
+ to verify that the R1 has been once generated by the Responder.
+ However, since the R1 is precomputed and therefore does not cover
+ association-specific information in the I1 packet, it does not
+ protect against replay attacks.
+
+ Before the actual authenticated Diffie-Hellman exchange, the
+ Initiator expresses its preference regarding its choice of the DH
+ groups in the I1 packet. The preference is expressed as a sorted
+ list of DH Group IDs. The I1 packet is not protected by a signature.
+ Therefore, this list is sent in an unauthenticated way to avoid
+ costly computations for processing the I1 packet at the Responder
+ side. Based on the preferences of the Initiator, the Responder sends
+ an R1 packet containing its most suitable public DH value. The
+ Responder also attaches a list of its own preferences to the R1 to
+ convey the basis for the DH group selection to the Initiator. This
+ list is carried in the signed part of the R1 packet. If the choice
+ of the DH group value in the R1 does not match the preferences of the
+ Initiator and the Responder, the Initiator can detect that the list
+ of DH Group IDs in the I1 was manipulated (see below for details).
+
+ If none of the DH Group IDs in the I1 packet are supported by the
+ Responder, the Responder selects the DH group most suitable for it,
+ regardless of the Initiator's preference. It then sends the R1
+ containing this DH group and its list of supported DH Group IDs to
+ the Initiator.
+
+ When the Initiator receives an R1, it receives one of the Responder's
+ public Diffie-Hellman values and the list of DH Group IDs supported
+ by the Responder. This list is covered by the signature in the R1
+ packet to avoid forgery. The Initiator compares the Group ID of the
+ public DH value in the R1 packet to the list of supported DH Group
+ IDs in the R1 packets and to its own preferences expressed in the
+ list of supported DH Group IDs. The Initiator continues the BEX only
+ if the Group ID of the public DH value of the Responder is the most
+ preferred of the IDs supported by both the Initiator and Responder.
+ Otherwise, the communication is subject to a downgrade attack, and
+ the Initiator MUST either restart the base exchange with a new I1
+ packet or abort the base exchange. If the Responder's choice of the
+ DH group is not supported by the Initiator, the Initiator MAY abort
+ the handshake or send a new I1 packet with a different list of
+ supported DH groups. However, the Initiator MUST verify the
+
+
+
+
+Moskowitz, et al. Standards Track [Page 17]
+
+RFC 7401 HIPv2 April 2015
+
+
+ signature of the R1 packet before restarting or aborting the
+ handshake. It MUST silently ignore the R1 packet if the signature is
+ not valid.
+
+ If the preferences regarding the DH Group ID match, the Initiator
+ computes the Diffie-Hellman session key (Kij). The Initiator creates
+ a HIP association using keying material from the session key (see
+ Section 6.5) and may use the HIP association to encrypt its public
+ authentication key, i.e., the Host Identity. The resulting I2 packet
+ contains the Initiator's Diffie-Hellman key and its (optionally
+ encrypted) public authentication key. The signature of the I2
+ message covers all parameters of the signed parameter ranges (see
+ Section 5.2) in the packet without exceptions, as in the R1.
+
+ The Responder extracts the Initiator's Diffie-Hellman public key from
+ the I2 packet, computes the Diffie-Hellman session key, creates a
+ corresponding HIP association, and decrypts the Initiator's public
+ authentication key. It can then verify the signature using the
+ authentication key.
+
+ The final message, R2, completes the BEX and protects the Initiator
+ against replay attacks, because the Responder uses the shared key
+ from the Diffie-Hellman exchange to create a Hashed Message
+ Authentication Code (HMAC) and also uses the private key of its Host
+ Identity to sign the packet contents.
+
+4.1.4. HIP Replay Protection
+
+ HIP includes the following mechanisms to protect against malicious
+ packet replays. Responders are protected against replays of I1
+ packets by virtue of the stateless response to I1 packets with
+ pre-signed R1 messages. Initiators are protected against R1 replays
+ by a monotonically increasing "R1 generation counter" included in
+ the R1. Responders are protected against replays of forged I2
+ packets by the puzzle mechanism (see Section 4.1.1 above), and
+ optional use of opaque data. Hosts are protected against replays of
+ R2 packets and UPDATEs by use of a less expensive HMAC verification
+ preceding the HIP signature verification.
+
+ The R1 generation counter is a monotonically increasing 64-bit
+ counter that may be initialized to any value. The scope of the
+ counter MAY be system-wide, but there SHOULD be a separate counter
+ for each Host Identity, if there is more than one local Host
+ Identity. The value of this counter SHOULD be preserved across
+ system reboots and invocations of the HIP base exchange. This
+ counter indicates the current generation of puzzles. Implementations
+ MUST accept puzzles from the current generation and MAY accept
+ puzzles from earlier generations. A system's local counter MUST be
+
+
+
+Moskowitz, et al. Standards Track [Page 18]
+
+RFC 7401 HIPv2 April 2015
+
+
+ incremented at least as often as every time old R1s cease to be
+ valid. The local counter SHOULD never be decremented; otherwise, the
+ host exposes its peers to the replay of previously generated, higher-
+ numbered R1s.
+
+ A host may receive more than one R1, either due to sending multiple
+ I1 packets (see Section 6.6.1) or due to a replay of an old R1. When
+ sending multiple I1 packets to the same host, an Initiator SHOULD
+ wait for a small amount of time (a reasonable time may be
+ 2 * expected RTT) after the first R1 reception to allow possibly
+ multiple R1s to arrive, and it SHOULD respond to an R1 among the set
+ with the largest R1 generation counter. If an Initiator is
+ processing an R1 or has already sent an I2 packet (still waiting for
+ the R2 packet) and it receives another R1 with a larger R1 generation
+ counter, it MAY elect to restart R1 processing with the fresher R1,
+ as if it were the first R1 to arrive.
+
+ The R1 generation counter may roll over or may become reset. It is
+ important for an Initiator to be robust to the loss of state about
+ the R1 generation counter of a peer or to a reset of the peer's
+ counter. It is recommended that, when choosing between multiple R1s,
+ the Initiator prefer to use the R1 that corresponds to the current R1
+ generation counter, but that if it is unable to make progress with
+ that R1, the Initiator may try the other R1s, beginning with the R1
+ packet with the highest counter.
+
+4.1.5. Refusing a HIP Base Exchange
+
+ A HIP-aware host may choose not to accept a HIP base exchange. If
+ the host's policy is to only be an Initiator and policy allows the
+ establishment of a HIP association with the original Initiator, it
+ should begin its own HIP base exchange. A host MAY choose to have
+ such a policy since only the privacy of the Initiator's HI is
+ protected in the exchange. It should be noted that such behavior can
+ introduce the risk of a race condition if each host's policy is to
+ only be an Initiator, at which point the HIP base exchange will fail.
+
+ If the host's policy does not permit it to enter into a HIP exchange
+ with the Initiator, it should send an ICMP 'Destination Unreachable,
+ Administratively Prohibited' message. A more complex HIP packet is
+ not used here as it actually opens up more potential DoS attacks than
+ a simple ICMP message. A HIP NOTIFY message is not used because no
+ HIP association exists between the two hosts at that time.
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 19]
+
+RFC 7401 HIPv2 April 2015
+
+
+4.1.6. Aborting a HIP Base Exchange
+
+ Two HIP hosts may encounter situations in which they cannot complete
+ a HIP base exchange because of insufficient support for cryptographic
+ algorithms, in particular the HIT Suites and DH groups. After
+ receiving the R1 packet, the Initiator can determine whether the
+ Responder supports the required cryptographic operations to
+ successfully establish a HIP association. The Initiator can abort
+ the BEX silently after receiving an R1 packet that indicates an
+ unsupported set of algorithms. The specific conditions are described
+ below.
+
+ The R1 packet contains a signed list of HIT Suite IDs as supported by
+ the Responder. Therefore, the Initiator can determine whether its
+ source HIT is supported by the Responder. If the HIT Suite ID of the
+ Initiator's HIT is not contained in the list of HIT Suites in the R1,
+ the Initiator MAY abort the handshake silently or MAY restart the
+ handshake with a new I1 packet that contains a source HIT supported
+ by the Responder.
+
+ During the handshake, the Initiator and the Responder agree on a
+ single DH group. The Responder selects the DH group and its DH
+ public value in the R1 based on the list of DH Group IDs in the I1
+ packet. If the Responder supports none of the DH groups requested by
+ the Initiator, the Responder selects an arbitrary DH and replies with
+ an R1 containing its list of supported DH Group IDs. In such a case,
+ the Initiator receives an R1 packet containing the DH public value
+ for an unrequested DH group and also the Responder's DH group list in
+ the signed part of the R1 packet. At this point, the Initiator MAY
+ abort the handshake or MAY restart the handshake by sending a new I1
+ packet containing a selection of DH Group IDs that is supported by
+ the Responder.
+
+4.1.7. HIP Downgrade Protection
+
+ In a downgrade attack, an attacker attempts to unnoticeably
+ manipulate the packets of an Initiator and/or a Responder to
+ influence the result of the cryptographic negotiations in the BEX in
+ its favor. As a result, the victims select weaker cryptographic
+ algorithms than they would otherwise have selected without the
+ attacker's interference. Downgrade attacks can only be successful if
+ they remain undetected by the victims and the victims falsely assume
+ a secure communication channel.
+
+ In HIP, almost all packet parameters related to cryptographic
+ negotiations are covered by signatures. These parameters cannot be
+ directly manipulated in a downgrade attack without invalidating the
+ signature. However, signed packets can be subject to replay attacks.
+
+
+
+Moskowitz, et al. Standards Track [Page 20]
+
+RFC 7401 HIPv2 April 2015
+
+
+ In such a replay attack, the attacker could use an old BEX packet
+ with an outdated and weak selection of cryptographic algorithms and
+ replay it instead of a more recent packet with a collection of
+ stronger cryptographic algorithms. Signed packets that could be
+ subject to this replay attack are the R1 and I2 packet. However,
+ replayed R1 and I2 packets cannot be used to successfully establish a
+ HIP BEX because these packets also contain the public DH values of
+ the Initiator and the Responder. Old DH values from replayed packets
+ lead to invalid keying material and mismatching shared secrets
+ because the attacker is unable to derive valid keying material from
+ the DH public keys in the R1 and cannot generate a valid HMAC and
+ signature for a replayed I2.
+
+ In contrast to the first version of HIP [RFC5201], version 2 of HIP
+ as defined in this document begins the negotiation of the DH groups
+ already in the first BEX packet, the I1. The I1 packet is, by
+ intention, not protected by a signature, to avoid CPU-intensive
+ cryptographic operations processing floods of I1 packets targeted at
+ the Responder. Hence, the list of DH Group IDs in the I1 packet is
+ vulnerable to forgery and manipulation. To thwart an unnoticed
+ manipulation of the I1 packet, the Responder chooses the DH group
+ deterministically and includes its own list of DH Group IDs in the
+ signed part of the R1 packet. The Initiator can detect an attempted
+ downgrade attack by comparing the list of DH Group IDs in the R1
+ packet to its own preferences in the I1 packet. If the choice of the
+ DH group in the R1 packet does not equal the best match of the two
+ lists (the highest-priority DH ID of the Responder that is present in
+ the Initiator's DH list), the Initiator can conclude that its list in
+ the I1 packet was altered by an attacker. In this case, the
+ Initiator can restart or abort the BEX. As mentioned before, the
+ detection of the downgrade attack is sufficient to prevent it.
+
+4.1.8. HIP Opportunistic Mode
+
+ It is possible to initiate a HIP BEX even if the Responder's HI (and
+ HIT) is unknown. In this case, the initial I1 packet contains all
+ zeros as the destination HIT. This kind of connection setup is
+ called opportunistic mode.
+
+ The Responder may have multiple HITs due to multiple supported HIT
+ Suites. Since the Responder's HIT Suite in the opportunistic mode is
+ not determined by the destination HIT of the I1 packet, the Responder
+ can freely select a HIT of any HIT Suite. The complete set of HIT
+ Suites supported by the Initiator is not known to the Responder.
+ Therefore, the Responder SHOULD select its HIT from the same HIT
+ Suite as the Initiator's HIT (indicated by the HIT Suite information
+ in the OGA ID field of the Initiator's HIT) because this HIT Suite is
+ obviously supported by the Initiator. If the Responder selects a
+
+
+
+Moskowitz, et al. Standards Track [Page 21]
+
+RFC 7401 HIPv2 April 2015
+
+
+ different HIT that is not supported by the Initiator, the Initiator
+ MAY restart the BEX with an I1 packet with a source HIT that is
+ contained in the list of the Responder's HIT Suites in the R1 packet.
+
+ Note that the Initiator cannot verify the signature of the R1 packet
+ if the Responder's HIT Suite is not supported. Therefore, the
+ Initiator MUST treat R1 packets with unsupported Responder HITs as
+ potentially forged and MUST NOT use any parameters from the
+ unverified R1 besides the HIT_SUITE_LIST. Moreover, an Initiator
+ that uses an unverified HIT_SUITE_LIST from an R1 packet to determine
+ a possible source HIT MUST verify that the HIT_SUITE_LIST in the
+ first unverified R1 packet matches the HIT_SUITE_LIST in the second
+ R1 packet for which the Initiator supports the signature algorithm.
+ The Initiator MUST restart the BEX with a new I1 packet for which the
+ algorithm was mentioned in the verifiable R1 if the two lists do not
+ match. This procedure is necessary to mitigate downgrade attacks.
+
+ There are both security and API issues involved with the
+ opportunistic mode. These issues are described in the remainder of
+ this section.
+
+ Given that the Responder's HI is not known by the Initiator, there
+ must be suitable API calls that allow the Initiator to request,
+ directly or indirectly, that the underlying system initiates the HIP
+ base exchange solely based on locators. The Responder's HI will be
+ tentatively available in the R1 packet, and in an authenticated form
+ once the R2 packet has been received and verified. Hence, the
+ Responder's HIT could be communicated to the application via new API
+ mechanisms. However, with a backwards-compatible API the application
+ sees only the locators used for the initial contact. Depending on
+ the desired semantics of the API, this can raise the following
+ issues:
+
+ o The actual locators may later change if an UPDATE message is used,
+ even if from the API perspective the association still appears to
+ be between two specific locators. However, the locator update is
+ still secure, and the association is still between the same nodes.
+
+ o Different associations between the same two locators may result in
+ connections to different nodes, if the implementation no longer
+ remembers which identifier the peer had in an earlier association.
+ This is possible when the peer's locator has changed for
+ legitimate reasons or when an attacker pretends to be a node that
+ has the peer's locator. Therefore, when using opportunistic mode,
+ HIP implementations MUST NOT place any expectation that the peer's
+ HI returned in the R1 message matches any HI previously seen from
+ that address.
+
+
+
+
+Moskowitz, et al. Standards Track [Page 22]
+
+RFC 7401 HIPv2 April 2015
+
+
+ If the HIP implementation and application do not have the same
+ understanding of what constitutes an association, this may even
+ happen within the same association. For instance, an
+ implementation may not know when HIP state can be purged for
+ UDP-based applications.
+
+ In addition, the following security considerations apply. The
+ generation counter mechanism will be less efficient in protecting
+ against replays of the R1 packet, given that the Responder can choose
+ a replay that uses an arbitrary HI, not just the one given in the I1
+ packet.
+
+ More importantly, the opportunistic exchange is vulnerable to
+ man-in-the-middle attacks, because the Initiator does not have any
+ public key information about the peer. To assess the impacts of this
+ vulnerability, we compare it to vulnerabilities in current,
+ non-HIP-capable communications.
+
+ An attacker on the path between the two peers can insert itself as a
+ man-in-the-middle by providing its own identifier to the Initiator
+ and then initiating another HIP association towards the Responder.
+ For this to be possible, the Initiator must employ opportunistic
+ mode, and the Responder must be configured to accept a connection
+ from any HIP-enabled node.
+
+ An attacker outside the path will be unable to do so, given that it
+ cannot respond to the messages in the base exchange.
+
+ These security properties are characteristic also of communications
+ in the current Internet. A client contacting a server without
+ employing end-to-end security may find itself talking to the server
+ via a man-in-the-middle, assuming again that the server is willing to
+ talk to anyone.
+
+ If end-to-end security is in place, then the worst that can happen in
+ both the opportunistic HIP and non-HIP (normal IP) cases is denial-
+ of-service; an entity on the path can disrupt communications, but
+ will be unable to successfully insert itself as a man-in-the-middle.
+
+ However, once the opportunistic exchange has successfully completed,
+ HIP provides confidentiality and integrity protection for the
+ communications, and can securely change the locators of the
+ endpoints.
+
+ As a result, opportunistic mode in HIP offers a "better than nothing"
+ security model. Initially, a base exchange authenticated in the
+ opportunistic mode involves a leap of faith subject to man-in-the-
+ middle attacks, but subsequent datagrams related to the same HIP
+
+
+
+Moskowitz, et al. Standards Track [Page 23]
+
+RFC 7401 HIPv2 April 2015
+
+
+ association cannot be compromised by a new man-in-the-middle attack.
+ Further, if the man-in-the-middle moves away from the path of the
+ active association, the attack would be exposed after the fact.
+ Thus, it can be stated that opportunistic mode in HIP is at least as
+ secure as unprotected IP-based communications.
+
+4.2. Updating a HIP Association
+
+ A HIP association between two hosts may need to be updated over time.
+ Examples include the need to rekey expiring security associations,
+ add new security associations, or change IP addresses associated with
+ hosts. The UPDATE packet is used for those and other similar
+ purposes. This document only specifies the UPDATE packet format and
+ basic processing rules, with mandatory parameters. The actual usage
+ is defined in separate specifications.
+
+ HIP provides a general-purpose UPDATE packet, which can carry
+ multiple HIP parameters, for updating the HIP state between two
+ peers. The UPDATE mechanism has the following properties:
+
+ UPDATE messages carry a monotonically increasing sequence number
+ and are explicitly acknowledged by the peer. Lost UPDATEs or
+ acknowledgments may be recovered via retransmission. Multiple
+ UPDATE messages may be outstanding under certain circumstances.
+
+ UPDATE is protected by both HIP_MAC and HIP_SIGNATURE parameters,
+ since processing UPDATE signatures alone is a potential DoS attack
+ against intermediate systems.
+
+ UPDATE packets are explicitly acknowledged by the use of an
+ acknowledgment parameter that echoes an individual sequence number
+ received from the peer. A single UPDATE packet may contain both a
+ sequence number and one or more acknowledgment numbers (i.e.,
+ piggybacked acknowledgment(s) for the peer's UPDATE).
+
+ The UPDATE packet is defined in Section 5.3.5.
+
+4.3. Error Processing
+
+ HIP error processing behavior depends on whether or not there exists
+ an active HIP association. In general, if a HIP association exists
+ between the sender and receiver of a packet causing an error
+ condition, the receiver SHOULD respond with a NOTIFY packet. On the
+ other hand, if there are no existing HIP associations between the
+ sender and receiver, or the receiver cannot reasonably determine the
+ identity of the sender, the receiver MAY respond with a suitable ICMP
+ message; see Section 5.4 for more details.
+
+
+
+
+Moskowitz, et al. Standards Track [Page 24]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The HIP protocol and state machine are designed to recover from one
+ of the parties crashing and losing its state. The following
+ scenarios describe the main use cases covered by the design.
+
+ No prior state between the two systems.
+
+ The system with data to send is the Initiator. The process
+ follows the standard four-packet base exchange, establishing
+ the HIP association.
+
+ The system with data to send has no state with the receiver, but
+ the receiver has a residual HIP association.
+
+ The system with data to send is the Initiator. The Initiator
+ acts as in no prior state, sending an I1 packet and receiving
+ an R1 packet. When the Responder receives a valid I2 packet,
+ the old association is 'discovered' and deleted, and the new
+ association is established.
+
+ The system with data to send has a HIP association, but the
+ receiver does not.
+
+ The system sends data on the outbound user data security
+ association. The receiver 'detects' the situation when it
+ receives a user data packet that it cannot match to any HIP
+ association. The receiving host MUST discard this packet.
+
+ The receiving host SHOULD send an ICMP packet, with the type
+ Parameter Problem, to inform the sender that the HIP
+ association does not exist (see Section 5.4), and it MAY
+ initiate a new HIP BEX. However, responding with these
+ optional mechanisms is implementation or policy dependent. If
+ the sending application doesn't expect a response, the system
+ could possibly send a large number of packets in this state, so
+ for this reason, the sending of one or more ICMP packets is
+ RECOMMENDED. However, any such responses MUST be rate-limited
+ to prevent abuse (see Section 5.4).
+
+4.4. HIP State Machine
+
+ HIP itself has little state. In the HIP base exchange, there is an
+ Initiator and a Responder. Once the security associations (SAs) are
+ established, this distinction is lost. If the HIP state needs to be
+ re-established, the controlling parameters are which peer still has
+ state and which has a datagram to send to its peer. The following
+ state machine attempts to capture these processes.
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 25]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The state machine is symmetric and is presented in a single system
+ view, representing either an Initiator or a Responder. The state
+ machine is not a full representation of the processing logic.
+ Additional processing rules are presented in the packet definitions.
+ Hence, both are needed to completely implement HIP.
+
+ This document extends the state machine as defined in [RFC5201] and
+ introduces a restart option to allow for the negotiation of
+ cryptographic algorithms. The extension to the previous state
+ machine in [RFC5201] is a transition from state I1-SENT back again to
+ I1-SENT; namely, the restart option. An Initiator is required to
+ restart the HIP base exchange if the Responder does not support the
+ HIT Suite of the Initiator. In this case, the Initiator restarts the
+ HIP base exchange by sending a new I1 packet with a source HIT
+ supported by the Responder.
+
+ Implementors must understand that the state machine, as described
+ here, is informational. Specific implementations are free to
+ implement the actual processing logic differently. Section 6
+ describes the packet processing rules in more detail. This state
+ machine focuses on the HIP I1, R1, I2, and R2 packets only. New
+ states and state transitions may be introduced by mechanisms in other
+ specifications (such as mobility and multihoming).
+
+4.4.1. State Machine Terminology
+
+ Unused Association Lifetime (UAL): Implementation-specific time for
+ which, if no packet is sent or received for this time interval, a
+ host MAY begin to tear down an active HIP association.
+
+ Maximum Segment Lifetime (MSL): Maximum time that a HIP packet is
+ expected to spend in the network. A default value of 2 minutes
+ has been borrowed from [RFC0793] because it is a prevailing
+ assumption for packet lifetimes.
+
+ Exchange Complete (EC): Time that the host spends at the R2-SENT
+ state before it moves to the ESTABLISHED state. The time is n *
+ I2 retransmission timeout, where n is about I2_RETRIES_MAX.
+
+ Receive ANYOTHER: Any received packet for which no state transitions
+ or processing rules are defined for a given state.
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 26]
+
+RFC 7401 HIPv2 April 2015
+
+
+4.4.2. HIP States
+
+ +---------------------+---------------------------------------------+
+ | State | Explanation |
+ +---------------------+---------------------------------------------+
+ | UNASSOCIATED | State machine start |
+ | | |
+ | I1-SENT | Initiating base exchange |
+ | | |
+ | I2-SENT | Waiting to complete base exchange |
+ | | |
+ | R2-SENT | Waiting to complete base exchange |
+ | | |
+ | ESTABLISHED | HIP association established |
+ | | |
+ | CLOSING | HIP association closing, no data can be |
+ | | sent |
+ | | |
+ | CLOSED | HIP association closed, no data can be sent |
+ | | |
+ | E-FAILED | HIP base exchange failed |
+ +---------------------+---------------------------------------------+
+
+ Table 1: HIP States
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 27]
+
+RFC 7401 HIPv2 April 2015
+
+
+4.4.3. HIP State Processes
+
+ System behavior in state UNASSOCIATED, Table 2.
+
+ +----------------------------+--------------------------------------+
+ | Trigger | Action |
+ +----------------------------+--------------------------------------+
+ | User data to send, | Send I1 and go to I1-SENT |
+ | requiring a new HIP | |
+ | association | |
+ | | |
+ | Receive I1 | Send R1 and stay at UNASSOCIATED |
+ | | |
+ | Receive I2, process | If successful, send R2 and go to |
+ | | R2-SENT |
+ | | |
+ | | If fail, stay at UNASSOCIATED |
+ | | |
+ | Receive user data for an | Optionally send ICMP as defined in |
+ | unknown HIP association | Section 5.4 and stay at UNASSOCIATED |
+ | | |
+ | Receive CLOSE | Optionally send ICMP Parameter |
+ | | Problem and stay at UNASSOCIATED |
+ | | |
+ | Receive ANYOTHER | Drop and stay at UNASSOCIATED |
+ +----------------------------+--------------------------------------+
+
+ Table 2: UNASSOCIATED - Start State
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 28]
+
+RFC 7401 HIPv2 April 2015
+
+
+ System behavior in state I1-SENT, Table 3.
+
+ +---------------------+---------------------------------------------+
+ | Trigger | Action |
+ +---------------------+---------------------------------------------+
+ | Receive I1 from | If the local HIT is smaller than the peer |
+ | Responder | HIT, drop I1 and stay at I1-SENT (see |
+ | | Section 6.5 for HIT comparison) |
+ | | |
+ | | If the local HIT is greater than the peer |
+ | | HIT, send R1 and stay at I1-SENT |
+ | | |
+ | Receive I2, process | If successful, send R2 and go to R2-SENT |
+ | | |
+ | | If fail, stay at I1-SENT |
+ | | |
+ | Receive R1, process | If the HIT Suite of the local HIT is not |
+ | | supported by the peer, select supported |
+ | | local HIT, send I1, and stay at I1-SENT |
+ | | |
+ | | If successful, send I2 and go to I2-SENT |
+ | | |
+ | | If fail, stay at I1-SENT |
+ | | |
+ | Receive ANYOTHER | Drop and stay at I1-SENT |
+ | | |
+ | Timeout | Increment trial counter |
+ | | |
+ | | If counter is less than I1_RETRIES_MAX, |
+ | | send I1 and stay at I1-SENT |
+ | | |
+ | | If counter is greater than I1_RETRIES_MAX, |
+ | | go to E-FAILED |
+ +---------------------+---------------------------------------------+
+
+ Table 3: I1-SENT - Initiating the HIP Base Exchange
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 29]
+
+RFC 7401 HIPv2 April 2015
+
+
+ System behavior in state I2-SENT, Table 4.
+
+ +---------------------+---------------------------------------------+
+ | Trigger | Action |
+ +---------------------+---------------------------------------------+
+ | Receive I1 | Send R1 and stay at I2-SENT |
+ | | |
+ | Receive R1, process | If successful, send I2 and stay at I2-SENT |
+ | | |
+ | | If fail, stay at I2-SENT |
+ | | |
+ | Receive I2, process | If successful and local HIT is smaller than |
+ | | the peer HIT, drop I2 and stay at I2-SENT |
+ | | |
+ | | If successful and local HIT is greater than |
+ | | the peer HIT, send R2 and go to R2-SENT |
+ | | |
+ | | If fail, stay at I2-SENT |
+ | | |
+ | Receive R2, process | If successful, go to ESTABLISHED |
+ | | |
+ | | If fail, stay at I2-SENT |
+ | | |
+ | Receive CLOSE, | If successful, send CLOSE_ACK and go to |
+ | process | CLOSED |
+ | | |
+ | | If fail, stay at I2-SENT |
+ | | |
+ | Receive ANYOTHER | Drop and stay at I2-SENT |
+ | | |
+ | Timeout | Increment trial counter |
+ | | |
+ | | If counter is less than I2_RETRIES_MAX, |
+ | | send I2 and stay at I2-SENT |
+ | | |
+ | | If counter is greater than I2_RETRIES_MAX, |
+ | | go to E-FAILED |
+ +---------------------+---------------------------------------------+
+
+ Table 4: I2-SENT - Waiting to Finish the HIP Base Exchange
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 30]
+
+RFC 7401 HIPv2 April 2015
+
+
+ System behavior in state R2-SENT, Table 5.
+
+ +------------------------+------------------------------------------+
+ | Trigger | Action |
+ +------------------------+------------------------------------------+
+ | Receive I1 | Send R1 and stay at R2-SENT |
+ | | |
+ | Receive I2, process | If successful, send R2 and stay at |
+ | | R2-SENT |
+ | | |
+ | | If fail, stay at R2-SENT |
+ | | |
+ | Receive R1 | Drop and stay at R2-SENT |
+ | | |
+ | Receive R2 | Drop and stay at R2-SENT |
+ | | |
+ | Receive data or UPDATE | Move to ESTABLISHED |
+ | | |
+ | Exchange Complete | Move to ESTABLISHED |
+ | Timeout | |
+ | | |
+ | Receive CLOSE, process | If successful, send CLOSE_ACK and go to |
+ | | CLOSED |
+ | | |
+ | | If fail, stay at ESTABLISHED |
+ | | |
+ | Receive CLOSE_ACK | Drop and stay at R2-SENT |
+ | | |
+ | Receive NOTIFY | Process and stay at R2-SENT |
+ +------------------------+------------------------------------------+
+
+ Table 5: R2-SENT - Waiting to Finish HIP
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 31]
+
+RFC 7401 HIPv2 April 2015
+
+
+ System behavior in state ESTABLISHED, Table 6.
+
+ +---------------------+---------------------------------------------+
+ | Trigger | Action |
+ +---------------------+---------------------------------------------+
+ | Receive I1 | Send R1 and stay at ESTABLISHED |
+ | | |
+ | Receive I2 | Process with puzzle and possible Opaque |
+ | | data verification |
+ | | |
+ | | If successful, send R2, drop old HIP |
+ | | association, establish a new HIP |
+ | | association, and go to R2-SENT |
+ | | |
+ | | If fail, stay at ESTABLISHED |
+ | | |
+ | Receive R1 | Drop and stay at ESTABLISHED |
+ | | |
+ | Receive R2 | Drop and stay at ESTABLISHED |
+ | | |
+ | Receive user data | Process and stay at ESTABLISHED |
+ | for HIP association | |
+ | | |
+ | No packet | Send CLOSE and go to CLOSING |
+ | sent/received | |
+ | during UAL minutes | |
+ | | |
+ | Receive UPDATE | Process and stay at ESTABLISHED |
+ | | |
+ | Receive CLOSE, | If successful, send CLOSE_ACK and go to |
+ | process | CLOSED |
+ | | |
+ | | If fail, stay at ESTABLISHED |
+ | | |
+ | Receive CLOSE_ACK | Drop and stay at ESTABLISHED |
+ | | |
+ | Receive NOTIFY | Process and stay at ESTABLISHED |
+ +---------------------+---------------------------------------------+
+
+ Table 6: ESTABLISHED - HIP Association Established
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 32]
+
+RFC 7401 HIPv2 April 2015
+
+
+ System behavior in state CLOSING, Table 7.
+
+ +----------------------------+--------------------------------------+
+ | Trigger | Action |
+ +----------------------------+--------------------------------------+
+ | User data to send, | Send I1 and go to I1-SENT |
+ | requires the creation of | |
+ | another incarnation of the | |
+ | HIP association | |
+ | | |
+ | Receive I1 | Send R1 and stay at CLOSING |
+ | | |
+ | Receive I2, process | If successful, send R2 and go to |
+ | | R2-SENT |
+ | | |
+ | | If fail, stay at CLOSING |
+ | | |
+ | Receive R1, process | If successful, send I2 and go to |
+ | | I2-SENT |
+ | | |
+ | | If fail, stay at CLOSING |
+ | | |
+ | Receive CLOSE, process | If successful, send CLOSE_ACK, |
+ | | discard state, and go to CLOSED |
+ | | |
+ | | If fail, stay at CLOSING |
+ | | |
+ | Receive CLOSE_ACK, process | If successful, discard state and go |
+ | | to UNASSOCIATED |
+ | | |
+ | | If fail, stay at CLOSING |
+ | | |
+ | Receive ANYOTHER | Drop and stay at CLOSING |
+ | | |
+ | Timeout | Increment timeout sum and reset |
+ | | timer. If timeout sum is less than |
+ | | UAL+MSL minutes, retransmit CLOSE |
+ | | and stay at CLOSING. |
+ | | |
+ | | If timeout sum is greater than |
+ | | UAL+MSL minutes, go to UNASSOCIATED |
+ +----------------------------+--------------------------------------+
+
+ Table 7: CLOSING - HIP Association Has Not Been Used for UAL Minutes
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 33]
+
+RFC 7401 HIPv2 April 2015
+
+
+ System behavior in state CLOSED, Table 8.
+
+ +----------------------------------------+--------------------------+
+ | Trigger | Action |
+ +----------------------------------------+--------------------------+
+ | Datagram to send, requires the | Send I1 and stay at |
+ | creation of another incarnation of the | CLOSED |
+ | HIP association | |
+ | | |
+ | Receive I1 | Send R1 and stay at |
+ | | CLOSED |
+ | | |
+ | Receive I2, process | If successful, send R2 |
+ | | and go to R2-SENT |
+ | | |
+ | | If fail, stay at CLOSED |
+ | | |
+ | Receive R1, process | If successful, send I2 |
+ | | and go to I2-SENT |
+ | | |
+ | | If fail, stay at CLOSED |
+ | | |
+ | Receive CLOSE, process | If successful, send |
+ | | CLOSE_ACK and stay at |
+ | | CLOSED |
+ | | |
+ | | If fail, stay at CLOSED |
+ | | |
+ | Receive CLOSE_ACK, process | If successful, discard |
+ | | state and go to |
+ | | UNASSOCIATED |
+ | | |
+ | | If fail, stay at CLOSED |
+ | | |
+ | Receive ANYOTHER | Drop and stay at CLOSED |
+ | | |
+ | Timeout (UAL+2MSL) | Discard state and go to |
+ | | UNASSOCIATED |
+ +----------------------------------------+--------------------------+
+
+ Table 8: CLOSED - CLOSE_ACK Sent, Resending CLOSE_ACK if Necessary
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 34]
+
+RFC 7401 HIPv2 April 2015
+
+
+ System behavior in state E-FAILED, Table 9.
+
+ +-------------------------+-----------------------------------------+
+ | Trigger | Action |
+ +-------------------------+-----------------------------------------+
+ | Wait for | Go to UNASSOCIATED. Renegotiation is |
+ | implementation-specific | possible after moving to UNASSOCIATED |
+ | time | state. |
+ +-------------------------+-----------------------------------------+
+
+ Table 9: E-FAILED - HIP Failed to Establish Association with Peer
+
+4.4.4. Simplified HIP State Diagram
+
+ The following diagram (Figure 2) shows the major state transitions.
+ Transitions based on received packets implicitly assume that the
+ packets are successfully authenticated or processed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 35]
+
+RFC 7401 HIPv2 April 2015
+
+
+ +--+ +----------------------------+
+ recv I1, send R1 | | | |
+ | v v |
+ +--------------+ recv I2, send R2 |
+ +----------------| UNASSOCIATED |----------------+ |
+ datagram | +--+ +--------------+ | |
+ to send, | | | Alg. not supported, | |
+ send I1 | | | send I1 | |
+ . v | v | |
+ . +---------+ recv I2, send R2 | |
+ +---->| I1-SENT |--------------------------------------+ | |
+ | +---------+ +----------------------+ | | |
+ | | recv R2, | recv I2, send R2 | | | |
+ | v send I2 | v v v |
+ | +---------+ | +---------+ |
+ | +--->| I2-SENT |----------+ +--------------| R2-SENT |<---+ |
+ | | +---------+ | +---------+ | |
+ | | | |recv R2 | data or| | |
+ | |recv R1, | | | EC timeout| | |
+ | |send I2 +--|-----------------+ | receive I2,| |
+ | | | | +-------------+ | send R2| |
+ | | | +------>| ESTABLISHED |<----------+ | |
+ | | | +-------------+ | |
+ | | | | | | receive I2, send R2 | |
+ | | +------------+ | +-------------------------------+ |
+ | | | +-----------+ | |
+ | | | no packet sent/received| +---+ | |
+ | | | for UAL min, send CLOSE| | |timeout | |
+ | | | v v |(UAL+MSL) | |
+ | | | +---------+ |retransmit | |
+ +--|----------|------------------------| CLOSING |-+CLOSE | |
+ | | +---------+ | |
+ | | | | | | | |
+ +----------|-------------------------+ | | +----------------+ |
+ | | +-----------+ +------------------|--+
+ | | |recv CLOSE, recv CLOSE_ACK | |
+ | +-------------+ |send CLOSE_ACK or timeout | |
+ | recv CLOSE, | | (UAL+MSL) | |
+ | send CLOSE_ACK v v | |
+ | +--------+ receive I2, send R2 | |
+ +---------------------| CLOSED |------------------------------+ |
+ +--------+ |
+ ^ | | |
+ recv CLOSE, send CLOSE_ACK| | | timeout (UAL+2MSL) |
+ +-+ +------------------------------------+
+
+ Figure 2
+
+
+
+
+Moskowitz, et al. Standards Track [Page 36]
+
+RFC 7401 HIPv2 April 2015
+
+
+4.5. User Data Considerations
+
+4.5.1. TCP and UDP Pseudo Header Computation for User Data
+
+ When computing TCP and UDP checksums on user data packets that flow
+ through sockets bound to HITs, the IPv6 pseudo header format
+ [RFC2460] MUST be used, even if the actual addresses in the header of
+ the packet are IPv4 addresses. Additionally, the HITs MUST be used
+ in place of the IPv6 addresses in the IPv6 pseudo header. Note that
+ the pseudo header for actual HIP payloads is computed differently;
+ see Section 5.1.1.
+
+4.5.2. Sending Data on HIP Packets
+
+ Other documents may define how to include user data in various HIP
+ packets. However, currently the HIP header is a terminal header, and
+ not followed by any other headers.
+
+4.5.3. Transport Formats
+
+ The actual data transmission format, used for user data after the HIP
+ base exchange, is not defined in this document. Such transport
+ formats and methods are described in separate specifications. All
+ HIP implementations MUST implement, at minimum, the ESP transport
+ format for HIP [RFC7402]. The transport format to be chosen is
+ negotiated in the base exchange. The Responder expresses its
+ preference regarding the transport format in the
+ TRANSPORT_FORMAT_LIST in the R1 packet, and the Initiator selects one
+ transport format and adds the respective HIP parameter to the I2
+ packet.
+
+4.5.4. Reboot, Timeout, and Restart of HIP
+
+ Simulating a loss of state is a potential DoS attack. The following
+ process has been crafted to manage state recovery without presenting
+ a DoS opportunity.
+
+ If a host reboots or the HIP association times out, it has lost its
+ HIP state. If the host that lost state has a datagram to send to the
+ peer, it simply restarts the HIP base exchange. After the base
+ exchange has completed, the Initiator can create a new payload
+ association and start sending data. The peer does not reset its
+ state until it receives a valid I2 packet.
+
+ If a system receives a user data packet that cannot be matched to any
+ existing HIP association, it is possible that it has lost the state
+ and its peer has not. It MAY send an ICMP packet with the Parameter
+ Problem type, and with the Pointer pointing to the referred
+
+
+
+Moskowitz, et al. Standards Track [Page 37]
+
+RFC 7401 HIPv2 April 2015
+
+
+ HIP-related association information. Reacting to such traffic
+ depends on the implementation and the environment where the
+ implementation is used.
+
+ If the host that apparently has lost its state decides to restart the
+ HIP base exchange, it sends an I1 packet to the peer. After the base
+ exchange has been completed successfully, the Initiator can create a
+ new HIP association, and the peer drops its old payload associations
+ and creates a new one.
+
+4.6. Certificate Distribution
+
+ This document does not define how to use certificates or how to
+ transfer them between hosts. These functions are expected to be
+ defined in a future specification, as was done for HIP version 1 (see
+ [RFC6253]). A parameter type value, meant to be used for carrying
+ certificates, is reserved, though: CERT, Type 768; see Section 5.2.
+
+5. Packet Formats
+
+5.1. Payload Format
+
+ All HIP packets start with a fixed header.
+
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Next Header | Header Length |0| Packet Type |Version| RES.|1|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Checksum | Controls |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Sender's Host Identity Tag (HIT) |
+ | |
+ | |
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Receiver's Host Identity Tag (HIT) |
+ | |
+ | |
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ / HIP Parameters /
+ / /
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 38]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The HIP header is logically an IPv6 extension header. However, this
+ document does not describe processing for Next Header values other
+ than decimal 59, IPPROTO_NONE, the IPv6 'no next header' value.
+ Future documents MAY define behavior for other values. However,
+ current implementations MUST ignore trailing data if an unimplemented
+ Next Header value is received.
+
+ The Header Length field contains the combined length of the HIP
+ Header and HIP parameters in 8-byte units, excluding the first
+ 8 bytes. Since all HIP headers MUST contain the sender's and
+ receiver's HIT fields, the minimum value for this field is 4, and
+ conversely, the maximum length of the HIP Parameters field is
+ (255 * 8) - 32 = 2008 bytes (see Section 5.1.3 regarding HIP
+ fragmentation). Note: this sets an additional limit for sizes of
+ parameters included in the Parameters field, independent of the
+ individual parameter maximum lengths.
+
+ The Packet Type indicates the HIP packet type. The individual packet
+ types are defined in the relevant sections. If a HIP host receives a
+ HIP packet that contains an unrecognized packet type, it MUST drop
+ the packet.
+
+ The HIP Version field is four bits. The version defined in this
+ document is 2. The version number is expected to be incremented only
+ if there are incompatible changes to the protocol. Most extensions
+ can be handled by defining new packet types, new parameter types, or
+ new Controls (see Section 5.1.2).
+
+ The following three bits are reserved for future use. They MUST be
+ zero when sent, and they MUST be ignored when handling a received
+ packet.
+
+ The two fixed bits in the header are reserved for SHIM6 compatibility
+ [RFC5533], Section 5.3. For implementations adhering (only) to this
+ specification, they MUST be set as shown when sending and MUST be
+ ignored when receiving. This is to ensure optimal forward
+ compatibility. Note that for implementations that implement other
+ compatible specifications in addition to this specification, the
+ corresponding rules may well be different. For example, an
+ implementation that implements both this specification and the SHIM6
+ protocol may need to check these bits in order to determine how to
+ handle the packet.
+
+ The HIT fields are always 128 bits (16 bytes) long.
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 39]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.1.1. Checksum
+
+ Since the checksum covers the source and destination addresses in the
+ IP header, it MUST be recomputed on HIP-aware NAT devices.
+
+ If IPv6 is used to carry the HIP packet, the pseudo header [RFC2460]
+ contains the source and destination IPv6 addresses, HIP packet length
+ in the pseudo header Length field, a zero field, and the HIP protocol
+ number (see Section 5.1) in the Next Header field. The Length field
+ is in bytes and can be calculated from the HIP Header Length field:
+
+ (HIP Header Length + 1) * 8.
+
+ In case of using IPv4, the IPv4 UDP pseudo header format [RFC0768] is
+ used. In the pseudo header, the source and destination addresses are
+ those used in the IP header, the zero field is obviously zero, the
+ protocol is the HIP protocol number (see Section 4), and the length
+ is calculated as in the IPv6 case.
+
+5.1.2. HIP Controls
+
+ The HIP Controls field conveys information about the structure of the
+ packet and capabilities of the host.
+
+ The following fields have been defined:
+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | | | | | | | | | | | | | | | |A|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ A - Anonymous: If this is set, the sender's HI in this packet is
+ anonymous, i.e., one not listed in a directory. Anonymous HIs
+ SHOULD NOT be stored. This control is set in packets using
+ anonymous sender HIs. The peer receiving an anonymous HI in an R1
+ or I2 may choose to refuse it.
+
+ The rest of the fields are reserved for future use, and MUST be set
+ to zero in sent packets and MUST be ignored in received packets.
+
+5.1.3. HIP Fragmentation Support
+
+ A HIP implementation MUST support IP fragmentation/reassembly.
+ Fragment reassembly MUST be implemented in both IPv4 and IPv6, but
+ fragment generation is REQUIRED to be implemented in IPv4 (IPv4
+ stacks and networks will usually do this by default) and RECOMMENDED
+ to be implemented in IPv6. In IPv6 networks, the minimum MTU is
+ larger, 1280 bytes, than in IPv4 networks. The larger MTU size is
+ usually sufficient for most HIP packets, and therefore fragment
+
+
+
+Moskowitz, et al. Standards Track [Page 40]
+
+RFC 7401 HIPv2 April 2015
+
+
+ generation may not be needed. If it is expected that a host will
+ send HIP packets that are larger than the minimum IPv6 MTU, the
+ implementation MUST implement fragment generation even for IPv6.
+
+ In IPv4 networks, HIP packets may encounter low MTUs along their
+ routed path. Since basic HIP, as defined in this document, does not
+ provide a mechanism to use multiple IP datagrams for a single HIP
+ packet, support for path MTU discovery does not bring any value to
+ HIP in IPv4 networks. HIP-aware NAT devices SHOULD perform IPv4
+ reassembly/fragmentation for HIP packets.
+
+ All HIP implementations have to be careful while employing a
+ reassembly algorithm so that the algorithm is sufficiently resistant
+ to DoS attacks.
+
+ Certificate chains can cause the packet to be fragmented, and
+ fragmentation can open implementations to denial-of-service attacks
+ [KAU03]. "Hash and URL" schemes as defined in [RFC6253] for HIP
+ version 1 may be used to avoid fragmentation and mitigate resulting
+ DoS attacks.
+
+5.2. HIP Parameters
+
+ The HIP parameters carry information that is necessary for
+ establishing and maintaining a HIP association. For example, the
+ peer's public keys as well as the signaling for negotiating ciphers
+ and payload handling are encapsulated in HIP parameters. Additional
+ information, meaningful for end hosts or middleboxes, may also be
+ included in HIP parameters. The specification of the HIP parameters
+ and their mapping to HIP packets and packet types is flexible to
+ allow HIP extensions to define new parameters and new protocol
+ behavior.
+
+ In HIP packets, HIP parameters are ordered according to their numeric
+ type number and encoded in TLV format.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 41]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The following parameter types are currently defined.
+
+ +------------------------+-------+-----------+----------------------+
+ | TLV | Type | Length | Data |
+ +------------------------+-------+-----------+----------------------+
+ | R1_COUNTER | 129 | 12 | Puzzle generation |
+ | | | | counter |
+ | | | | |
+ | PUZZLE | 257 | 12 | #K and Random #I |
+ | | | | |
+ | SOLUTION | 321 | 20 | #K, Random #I and |
+ | | | | puzzle solution #J |
+ | | | | |
+ | SEQ | 385 | 4 | UPDATE packet ID |
+ | | | | number |
+ | | | | |
+ | ACK | 449 | variable | UPDATE packet ID |
+ | | | | number |
+ | | | | |
+ | DH_GROUP_LIST | 511 | variable | Ordered list of DH |
+ | | | | Group IDs supported |
+ | | | | by a host |
+ | | | | |
+ | DIFFIE_HELLMAN | 513 | variable | public key |
+ | | | | |
+ | HIP_CIPHER | 579 | variable | List of HIP |
+ | | | | encryption |
+ | | | | algorithms |
+ | | | | |
+ | ENCRYPTED | 641 | variable | Encrypted part of a |
+ | | | | HIP packet |
+ | | | | |
+ | HOST_ID | 705 | variable | Host Identity with |
+ | | | | Fully Qualified |
+ | | | | Domain Name (FQDN) |
+ | | | | or Network Access |
+ | | | | Identifier (NAI) |
+ | | | | |
+ | HIT_SUITE_LIST | 715 | variable | Ordered list of the |
+ | | | | HIT Suites supported |
+ | | | | by the Responder |
+ | | | | |
+ | CERT | 768 | variable | HI Certificate; used |
+ | | | | to transfer |
+ | | | | certificates. |
+ | | | | Specified in a |
+ | | | | separate document. |
+ | | | | |
+
+
+
+Moskowitz, et al. Standards Track [Page 42]
+
+RFC 7401 HIPv2 April 2015
+
+
+ | NOTIFICATION | 832 | variable | Informational data |
+ | | | | |
+ | ECHO_REQUEST_SIGNED | 897 | variable | Opaque data to be |
+ | | | | echoed back; signed |
+ | | | | |
+ | ECHO_RESPONSE_SIGNED | 961 | variable | Opaque data echoed |
+ | | | | back by request; |
+ | | | | signed |
+ | | | | |
+ | TRANSPORT_FORMAT_LIST | 2049 | Ordered | variable |
+ | | | list of | |
+ | | | preferred | |
+ | | | HIP | |
+ | | | transport | |
+ | | | type | |
+ | | | numbers | |
+ | | | | |
+ | HIP_MAC | 61505 | variable | HMAC-based message |
+ | | | | authentication code, |
+ | | | | with key material |
+ | | | | from KEYMAT |
+ | | | | |
+ | HIP_MAC_2 | 61569 | variable | HMAC-based message |
+ | | | | authentication code, |
+ | | | | with key material |
+ | | | | from KEYMAT. Unlike |
+ | | | | HIP_MAC, the HOST_ID |
+ | | | | parameter is |
+ | | | | included in |
+ | | | | HIP_MAC_2 |
+ | | | | calculation. |
+ | | | | |
+ | HIP_SIGNATURE_2 | 61633 | variable | Signature used in R1 |
+ | | | | packet |
+ | | | | |
+ | HIP_SIGNATURE | 61697 | variable | Signature of the |
+ | | | | packet |
+ | | | | |
+ | ECHO_REQUEST_UNSIGNED | 63661 | variable | Opaque data to be |
+ | | | | echoed back; after |
+ | | | | signature |
+ | | | | |
+ | ECHO_RESPONSE_UNSIGNED | 63425 | variable | Opaque data echoed |
+ | | | | back by request; |
+ | | | | after signature |
+ +------------------------+-------+-----------+----------------------+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 43]
+
+RFC 7401 HIPv2 April 2015
+
+
+ As the ordering (from lowest to highest) of HIP parameters is
+ strictly enforced (see Section 5.2.1), the parameter type values for
+ existing parameters have been spaced to allow for future protocol
+ extensions.
+
+ The following parameter type number ranges are defined.
+
+ +---------------+---------------------------------------------------+
+ | Type Range | Purpose |
+ +---------------+---------------------------------------------------+
+ | 0 - 1023 | Handshake |
+ | | |
+ | 1024 - 2047 | Reserved |
+ | | |
+ | 2048 - 4095 | Parameters related to HIP transport formats |
+ | | |
+ | 4096 - 8191 | Signed parameters allocated through specification |
+ | | documents |
+ | | |
+ | 8192 - 32767 | Reserved |
+ | | |
+ | 32768 - 49151 | Reserved for Private Use. Signed parameters. |
+ | | |
+ | 49152 - 61439 | Reserved |
+ | | |
+ | 61440 - 62463 | Signatures and (signed) MACs |
+ | | |
+ | 62464 - 63487 | Parameters that are neither signed nor MACed |
+ | | |
+ | 63488 - 64511 | Rendezvous and relaying |
+ | | |
+ | 64512 - 65023 | Parameters that are neither signed nor MACed |
+ | | |
+ | 65024 - 65535 | Reserved |
+ +---------------+---------------------------------------------------+
+
+ The process for defining new parameters is described in Section 5.2.2
+ of this document.
+
+ The range between 32768 (2^15) and 49151 (2^15 + 2^14) is Reserved
+ for Private Use. Types from this range SHOULD be selected in a
+ random fashion to reduce the probability of collisions.
+
+5.2.1. TLV Format
+
+ The TLV-encoded parameters are described in the following
+ subsections. The Type field value also describes the order of these
+ fields in the packet. The parameters MUST be included in the packet
+
+
+
+Moskowitz, et al. Standards Track [Page 44]
+
+RFC 7401 HIPv2 April 2015
+
+
+ so that their types form an increasing order. If multiple parameters
+ with the same type number are in one packet, the parameters with the
+ same type MUST be consecutive in the packet. If the order does not
+ follow this rule, the packet is considered to be malformed and it
+ MUST be discarded.
+
+ Parameters using type values from 2048 up to 4095 are related to
+ transport formats. Currently, one transport format is defined: the
+ ESP transport format [RFC7402].
+
+ All of the encoded TLV parameters have a length (that includes the
+ Type and Length fields), which is a multiple of 8 bytes. When
+ needed, padding MUST be added to the end of the parameter so that the
+ total length is a multiple of 8 bytes. This rule ensures proper
+ alignment of data. Any added padding bytes MUST be zeroed by the
+ sender, and their values SHOULD NOT be checked by the receiver.
+
+ The Length field indicates the length of the Contents field (in
+ bytes). Consequently, the total length of the TLV parameter
+ (including Type, Length, Contents, and Padding) is related to the
+ Length field according to the following formula:
+
+ Total Length = 11 + Length - (Length + 3) % 8;
+
+ where % is the modulo operator.
+
+ 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 |C| Length |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ / Contents /
+ / +-+-+-+-+-+-+-+-+
+ | | Padding |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type Type code for the parameter. 16 bits long, C-bit
+ being part of the Type code.
+ C Critical. One if this parameter is critical and
+ MUST be recognized by the recipient, zero otherwise.
+ The C-bit is considered to be a part of the Type
+ field. Consequently, critical parameters are always
+ odd, and non-critical ones have an even value.
+ Length Length of the Contents, in bytes, excluding Type,
+ Length, and Padding
+ Contents Parameter specific, defined by Type
+ Padding Padding, 0-7 bytes, added if needed
+
+
+
+Moskowitz, et al. Standards Track [Page 45]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Critical parameters (indicated by the odd type number value) MUST be
+ recognized by the recipient. If a recipient encounters a critical
+ parameter that it does not recognize, it MUST NOT process the packet
+ any further. It MAY send an ICMP or NOTIFY, as defined in
+ Section 4.3.
+
+ Non-critical parameters MAY be safely ignored. If a recipient
+ encounters a non-critical parameter that it does not recognize, it
+ SHOULD proceed as if the parameter was not present in the received
+ packet.
+
+5.2.2. Defining New Parameters
+
+ Future specifications may define new parameters as needed. When
+ defining new parameters, care must be taken to ensure that the
+ parameter type values are appropriate and leave suitable space for
+ other future extensions. One must remember that the parameters MUST
+ always be arranged in numerically increasing order by Type code,
+ thereby limiting the order of parameters (see Section 5.2.1).
+
+ The following rules MUST be followed when defining new parameters.
+
+ 1. The low-order bit C of the Type code is used to distinguish
+ between critical and non-critical parameters. Hence, even
+ parameter type numbers indicate non-critical parameters while odd
+ parameter type numbers indicate critical parameters.
+
+ 2. A new parameter MAY be critical only if an old implementation
+ that ignored it would cause security problems. In general, new
+ parameters SHOULD be defined as non-critical, and expect a reply
+ from the recipient.
+
+ 3. If a system implements a new critical parameter, it MUST provide
+ the ability to set the associated feature off, such that the
+ critical parameter is not sent at all. The configuration option
+ MUST be well documented. Implementations operating in a mode
+ adhering to this specification MUST disable the sending of new
+ critical parameters by default. In other words, the management
+ interface MUST allow vanilla standards-only mode as a default
+ configuration setting, and MAY allow new critical payloads to be
+ configured on (and off).
+
+ 4. See Section 9 for allocation rules regarding Type codes.
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 46]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.2.3. R1_COUNTER
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Reserved, 4 bytes |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | R1 generation counter, 8 bytes |
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 129
+ Length 12
+ R1 generation
+ counter The current generation of valid puzzles
+
+ The R1_COUNTER parameter contains a 64-bit unsigned integer in
+ network byte order, indicating the current generation of valid
+ puzzles. The sender SHOULD increment this counter periodically. It
+ is RECOMMENDED that the counter value is incremented at least as
+ often as old PUZZLE values are deprecated so that SOLUTIONs to them
+ are no longer accepted.
+
+ Support for the R1_COUNTER parameter is mandatory, although its
+ inclusion in the R1 packet is optional. It SHOULD be included in the
+ R1 (in which case it is covered by the signature), and if present in
+ the R1, it MUST be echoed (including the Reserved field verbatim) by
+ the Initiator in the I2 packet.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 47]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.2.4. PUZZLE
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | #K, 1 byte | Lifetime | Opaque, 2 bytes |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Random #I, RHASH_len / 8 bytes |
+ / /
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 257
+ Length 4 + RHASH_len / 8
+ #K #K is the number of verified bits
+ Lifetime puzzle lifetime 2^(value - 32) seconds
+ Opaque data set by the Responder, indexing the puzzle
+ Random #I random number of size RHASH_len bits
+
+ Random #I is represented as an n-bit integer (where n is RHASH_len),
+ and #K and Lifetime as 8-bit integers, all in network byte order.
+
+ The PUZZLE parameter contains the puzzle difficulty #K and an n-bit
+ random integer #I. The Puzzle Lifetime indicates the time during
+ which the puzzle solution is valid, and sets a time limit that should
+ not be exceeded by the Initiator while it attempts to solve the
+ puzzle. The lifetime is indicated as a power of 2 using the formula
+ 2^(Lifetime - 32) seconds. A puzzle MAY be augmented with an
+ ECHO_REQUEST_SIGNED or an ECHO_REQUEST_UNSIGNED parameter included in
+ the R1; the contents of the echo request are then echoed back in the
+ ECHO_RESPONSE_SIGNED or in the ECHO_RESPONSE_UNSIGNED parameter,
+ allowing the Responder to use the included information as a part of
+ its puzzle processing.
+
+ The Opaque and Random #I fields are not covered by the
+ HIP_SIGNATURE_2 parameter.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 48]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.2.5. SOLUTION
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | #K, 1 byte | Reserved | Opaque, 2 bytes |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Random #I, n bytes |
+ / /
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Puzzle solution #J, RHASH_len / 8 bytes |
+ / /
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 321
+ Length 4 + RHASH_len / 4
+ #K #K is the number of verified bits
+ Reserved zero when sent, ignored when received
+ Opaque copied unmodified from the received PUZZLE
+ parameter
+ Random #I random number of size RHASH_len bits
+ Puzzle solution #J random number of size RHASH_len bits
+
+ Random #I and Random #J are represented as n-bit unsigned integers
+ (where n is RHASH_len), and #K as an 8-bit unsigned integer, all in
+ network byte order.
+
+ The SOLUTION parameter contains a solution to a puzzle. It also
+ echoes back the random difficulty #K, the Opaque field, and the
+ puzzle integer #I.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 49]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.2.6. DH_GROUP_LIST
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | DH GROUP ID #1| DH GROUP ID #2| DH GROUP ID #3| DH GROUP ID #4|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | DH GROUP ID #n| Padding |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 511
+ Length number of DH Group IDs
+ DH GROUP ID identifies a DH GROUP ID supported by the host.
+ The list of IDs is ordered by preference of the
+ host. The possible DH Group IDs are defined
+ in the DIFFIE_HELLMAN parameter. Each DH
+ Group ID is one octet long.
+
+ The DH_GROUP_LIST parameter contains the list of supported DH Group
+ IDs of a host. The Initiator sends the DH_GROUP_LIST in the I1
+ packet, and the Responder sends its own list in the signed part of
+ the R1 packet. The DH Group IDs in the DH_GROUP_LIST are listed in
+ the order of their preference of the host sending the list. DH Group
+ IDs that are listed first are preferred over the DH Group IDs listed
+ later. The information in the DH_GROUP_LIST allows the Responder to
+ select the DH group preferred by itself and supported by the
+ Initiator. Based on the DH_GROUP_LIST in the R1 packet, the
+ Initiator can determine if the Responder has selected the best
+ possible choice based on the Initiator's and Responder's preferences.
+ If the Responder's choice differs from the best choice, the Initiator
+ can conclude that there was an attempted downgrade attack (see
+ Section 4.1.7).
+
+ When selecting the DH group for the DIFFIE_HELLMAN parameter in the
+ R1 packet, the Responder MUST select the first DH Group ID in its
+ DH_GROUP_LIST in the R1 packet that is compatible with one of the
+ Suite IDs in the Initiator's DH_GROUP_LIST in the I1 packet. The
+ Responder MUST NOT select any other DH Group ID that is contained in
+ both lists, because then a downgrade attack cannot be detected.
+
+ In general, hosts SHOULD prefer stronger groups over weaker ones if
+ the computation overhead is not prohibitively high for the intended
+ application.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 50]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.2.7. DIFFIE_HELLMAN
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Group ID | Public Value Length | Public Value /
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ / |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ / | Padding |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 513
+ Length length in octets, excluding Type, Length, and
+ Padding
+ Group ID identifies values for p and g as well as the KDF
+ Public Value length of the following Public Value in octets
+ Length
+ Public Value the sender's public Diffie-Hellman key
+
+ A single DIFFIE_HELLMAN parameter may be included in selected HIP
+ packets based on the DH Group ID selected (Section 5.2.6). The
+ following Group IDs have been defined; values are assigned by this
+ document:
+
+ Group KDF Value
+
+ Reserved 0
+ DEPRECATED 1
+ DEPRECATED 2
+ 1536-bit MODP group [RFC3526] HKDF [RFC5869] 3
+ 3072-bit MODP group [RFC3526] HKDF [RFC5869] 4
+ DEPRECATED 5
+ DEPRECATED 6
+ NIST P-256 [RFC5903] HKDF [RFC5869] 7
+ NIST P-384 [RFC5903] HKDF [RFC5869] 8
+ NIST P-521 [RFC5903] HKDF [RFC5869] 9
+ SECP160R1 [SECG] HKDF [RFC5869] 10
+ 2048-bit MODP group [RFC3526] HKDF [RFC5869] 11
+
+ The MODP Diffie-Hellman groups are defined in [RFC3526]. ECDH
+ groups 7-9 are defined in [RFC5903] and [RFC6090]. ECDH group 10
+ is covered in Appendix D. Any ECDH used with HIP MUST have a
+ co-factor of 1.
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 51]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The Group ID also defines the key derivation function that is to be
+ used for deriving the symmetric keys for the HMAC and symmetric
+ encryption from the keying material from the Diffie-Hellman key
+ exchange (see Section 6.5).
+
+ A HIP implementation MUST implement Group ID 3. The 160-bit
+ SECP160R1 group can be used when lower security is enough (e.g., web
+ surfing) and when the equipment is not powerful enough (e.g., some
+ PDAs). Implementations SHOULD implement Group IDs 4 and 8.
+
+ To avoid unnecessary failures during the base exchange, the rest of
+ the groups SHOULD be implemented in hosts where resources are
+ adequate.
+
+5.2.8. HIP_CIPHER
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Cipher ID #1 | Cipher ID #2 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Cipher ID #n | Padding |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 579
+ Length length in octets, excluding Type, Length, and
+ Padding
+ Cipher ID identifies the cipher algorithm to be used for
+ encrypting the contents of the ENCRYPTED parameter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 52]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The following Cipher IDs are defined:
+
+ Suite ID Value
+
+ RESERVED 0
+ NULL-ENCRYPT 1 ([RFC2410])
+ AES-128-CBC 2 ([RFC3602])
+ RESERVED 3 (unused value)
+ AES-256-CBC 4 ([RFC3602])
+
+ The sender of a HIP_CIPHER parameter MUST make sure that there are no
+ more than six (6) Cipher IDs in one HIP_CIPHER parameter.
+
+ Conversely, a recipient MUST be prepared to handle received transport
+ parameters that contain more than six Cipher IDs by accepting the
+ first six Cipher IDs and dropping the rest. The limited number of
+ Cipher IDs sets the maximum size of the HIP_CIPHER parameter. As the
+ default configuration, the HIP_CIPHER parameter MUST contain at least
+ one of the mandatory Cipher IDs. There MAY be a configuration option
+ that allows the administrator to override this default.
+
+ The Responder lists supported and desired Cipher IDs in order of
+ preference in the R1, up to the maximum of six Cipher IDs. The
+ Initiator MUST choose only one of the corresponding Cipher IDs. This
+ Cipher ID will be used for generating the ENCRYPTED parameter.
+
+ Mandatory implementation: AES-128-CBC. Implementors SHOULD support
+ NULL-ENCRYPT for testing/debugging purposes but MUST NOT offer or
+ accept this value unless explicitly configured for testing/debugging
+ of HIP.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 53]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.2.9. HOST_ID
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | HI Length |DI-Type| DI Length |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Algorithm | Host Identity /
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ / | Domain Identifier /
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ / | Padding |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 705
+ Length length in octets, excluding Type, Length, and
+ Padding
+ HI Length length of the Host Identity in octets
+ DI-Type type of the following Domain Identifier field
+ DI Length length of the Domain Identifier field in octets
+ Algorithm index to the employed algorithm
+ Host Identity actual Host Identity
+ Domain Identifier the identifier of the sender
+
+ The following DI-Types have been defined:
+
+ Type Value
+
+ none included 0
+ FQDN 1
+ NAI 2
+
+ FQDN Fully Qualified Domain Name, in binary format
+ NAI Network Access Identifier
+
+ The format for the FQDN is defined in RFC 1035 [RFC1035],
+ Section 3.1. The format for the NAI is defined in [RFC4282].
+
+ A host MAY optionally associate the Host Identity with a single
+ Domain Identifier in the HOST_ID parameter. If there is no Domain
+ Identifier, i.e., the DI-Type field is zero, the DI Length field is
+ set to zero as well.
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 54]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The following HI Algorithms have been defined:
+
+ Algorithm profiles Values
+
+ RESERVED 0
+ DSA 3 [FIPS.186-4.2013] (RECOMMENDED)
+ RSA 5 [RFC3447] (REQUIRED)
+ ECDSA 7 [RFC4754] (REQUIRED)
+ ECDSA_LOW 9 [SECG] (RECOMMENDED)
+
+ For DSA, RSA, and ECDSA key types, profiles containing at least
+ 112 bits of security strength (as defined by [NIST.800-131A.2011])
+ should be used. For RSA signature padding, the Probabilistic
+ Signature Scheme (PSS) method of padding [RFC3447] MUST be used.
+
+ The Host Identity is derived from the DNSKEY format for RSA and DSA.
+ For these, the Public Key field of the RDATA part from RFC 4034
+ [RFC4034] is used. For Elliptic Curve Cryptography (ECC), we
+ distinguish two different profiles: ECDSA and ECDSA_LOW. ECC
+ contains curves approved by NIST and defined in RFC 4754 [RFC4754].
+ ECDSA_LOW is defined for devices with low computational capabilities
+ and uses shorter curves from the Standards for Efficient Cryptography
+ Group [SECG]. Any ECDSA used with HIP MUST have a co-factor of 1.
+
+ For ECDSA and ECDSA_LOW, Host Identities are represented by the
+ following fields:
+
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | ECC Curve | /
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ / Public Key |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ ECC Curve Curve label
+ Public Key Represented in octet-string format [RFC6090]
+
+ For hosts that implement ECDSA as the algorithm, the following ECC
+ curves are required:
+
+ Algorithm Curve Values
+
+ ECDSA RESERVED 0
+ ECDSA NIST P-256 1 [RFC4754]
+ ECDSA NIST P-384 2 [RFC4754]
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 55]
+
+RFC 7401 HIPv2 April 2015
+
+
+ For hosts that implement the ECDSA_LOW algorithm profile, the
+ following curve is required:
+
+ Algorithm Curve Values
+
+ ECDSA_LOW RESERVED 0
+ ECDSA_LOW SECP160R1 1 [SECG]
+
+5.2.10. HIT_SUITE_LIST
+
+ The HIT_SUITE_LIST parameter contains a list of the supported HIT
+ Suite IDs of the Responder. The Responder sends the HIT_SUITE_LIST
+ in the signed part of the R1 packet. Based on the HIT_SUITE_LIST,
+ the Initiator can determine which source HIT Suite IDs are supported
+ by the Responder.
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | ID #1 | ID #2 | ID #3 | ID #4 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | ID #n | Padding |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 715
+ Length number of HIT Suite IDs
+ ID identifies a HIT Suite ID supported by the host.
+ The list of IDs is ordered by preference of the
+ host. Each HIT Suite ID is one octet long. The
+ four higher-order bits of the ID field correspond
+ to the HIT Suite ID in the ORCHID OGA ID field. The
+ four lower-order bits are reserved and set to 0
+ by the sender. The reception of an ID with the
+ four lower-order bits not set to 0 SHOULD be
+ considered as an error that MAY result in a
+ NOTIFICATION of type UNSUPPORTED_HIT_SUITE.
+
+ The HIT Suite ID indexes a HIT Suite. HIT Suites are composed of
+ signature algorithms as defined in Section 5.2.9, and hash functions.
+
+ The ID field in the HIT_SUITE_LIST is defined as an eight-bit field,
+ as opposed to the four-bit HIT Suite ID and OGA ID field in the
+ ORCHID. This difference is a measure to accommodate larger HIT Suite
+ IDs if the 16 available values prove insufficient. In that case, one
+ of the 16 values, zero, will be used to indicate that four additional
+ bits of the ORCHID will be used to encode the HIT Suite ID. Hence,
+
+
+
+Moskowitz, et al. Standards Track [Page 56]
+
+RFC 7401 HIPv2 April 2015
+
+
+ the current four-bit HIT Suite IDs only use the four higher-order
+ bits in the ID field. Future documents may define the use of the
+ four lower-order bits in the ID field.
+
+ The following HIT Suite IDs are defined, and the relationship between
+ the four-bit ID value used in the OGA ID field and the eight-bit
+ encoding within the HIT_SUITE_LIST ID field is clarified:
+
+ HIT Suite Four-bit ID Eight-bit encoding
+
+ RESERVED 0 0x00
+ RSA,DSA/SHA-256 1 0x10 (REQUIRED)
+ ECDSA/SHA-384 2 0x20 (RECOMMENDED)
+ ECDSA_LOW/SHA-1 3 0x30 (RECOMMENDED)
+
+ The following table provides more detail on the above HIT Suite
+ combinations. The input for each generation algorithm is the
+ encoding of the HI as defined in Section 3.2. The output is 96 bits
+ long and is directly used in the ORCHID.
+
+ +-------+----------+--------------+------------+--------------------+
+ | Index | Hash | HMAC | Signature | Description |
+ | | function | | algorithm | |
+ | | | | family | |
+ +-------+----------+--------------+------------+--------------------+
+ | 0 | | | | Reserved |
+ | | | | | |
+ | 1 | SHA-256 | HMAC-SHA-256 | RSA, DSA | RSA or DSA HI |
+ | | | | | hashed with |
+ | | | | | SHA-256, truncated |
+ | | | | | to 96 bits |
+ | | | | | |
+ | 2 | SHA-384 | HMAC-SHA-384 | ECDSA | ECDSA HI hashed |
+ | | | | | with SHA-384, |
+ | | | | | truncated to 96 |
+ | | | | | bits |
+ | | | | | |
+ | 3 | SHA-1 | HMAC-SHA-1 | ECDSA_LOW | ECDSA_LOW HI |
+ | | | | | hashed with SHA-1, |
+ | | | | | truncated to 96 |
+ | | | | | bits |
+ +-------+----------+--------------+------------+--------------------+
+
+ Table 10: HIT Suites
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 57]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The hash of the Responder as defined in the HIT Suite determines the
+ HMAC to be used for the RHASH function. The HMACs currently defined
+ here are HMAC-SHA-256 [RFC4868], HMAC-SHA-384 [RFC4868], and
+ HMAC-SHA-1 [RFC2404].
+
+5.2.11. TRANSPORT_FORMAT_LIST
+
+ The TRANSPORT_FORMAT_LIST parameter contains a list of the supported
+ HIP transport formats (TFs) of the Responder. The Responder sends
+ the TRANSPORT_FORMAT_LIST in the signed part of the R1 packet. Based
+ on the TRANSPORT_FORMAT_LIST, the Initiator chooses one suitable
+ transport format and includes the respective HIP transport format
+ parameter in its response packet.
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | TF type #1 | TF type #2 /
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ / TF type #n | Padding |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 2049
+ Length 2x number of TF types
+ TF Type identifies a transport format (TF) type supported
+ by the host. The TF type numbers correspond to
+ the HIP parameter type numbers of the respective
+ transport format parameters. The list of TF types
+ is ordered by preference of the sender.
+
+ The TF type numbers index the respective HIP parameters for the
+ transport formats in the type number range between 2050 and 4095.
+ The parameters and their use are defined in separate documents.
+ Currently, the only transport format defined is IPsec ESP [RFC7402].
+
+ For each listed TF type, the sender of the TRANSPORT_FORMAT_LIST
+ parameter MUST include the respective transport format parameter in
+ the HIP packet. The receiver MUST ignore the TF type in the
+ TRANSPORT_FORMAT_LIST if no matching transport format parameter is
+ present in the packet.
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 58]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.2.12. HIP_MAC
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ | HMAC |
+ / /
+ / +-------------------------------+
+ | | Padding |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 61505
+ Length length in octets, excluding Type, Length, and
+ Padding
+ HMAC HMAC computed over the HIP packet, excluding the
+ HIP_MAC parameter and any following parameters,
+ such as HIP_SIGNATURE, HIP_SIGNATURE_2,
+ ECHO_REQUEST_UNSIGNED, or ECHO_RESPONSE_UNSIGNED.
+ The Checksum field MUST be set to zero, and the
+ HIP header length in the HIP common header MUST be
+ calculated not to cover any excluded parameters
+ when the HMAC is calculated. The size of the
+ HMAC is the natural size of the hash computation
+ output depending on the used hash function.
+
+ The HMAC uses RHASH as the hash algorithm. The calculation and
+ verification process is presented in Section 6.4.1.
+
+5.2.13. HIP_MAC_2
+
+ HIP_MAC_2 is a MAC of the packet and the HI of the sender in the form
+ of a HOST_ID parameter when that parameter is not actually included
+ in the packet. The parameter structure is the same as the structure
+ shown in Section 5.2.12. The fields are as follows:
+
+ Type 61569
+ Length length in octets, excluding Type, Length, and
+ Padding
+ HMAC HMAC computed over the HIP packet, excluding the
+ HIP_MAC_2 parameter and any following parameters
+ such as HIP_SIGNATURE, HIP_SIGNATURE_2,
+ ECHO_REQUEST_UNSIGNED, or ECHO_RESPONSE_UNSIGNED,
+ and including an additional sender's HOST_ID
+ parameter during the HMAC calculation. The
+ Checksum field MUST be set to zero, and the HIP
+
+
+
+Moskowitz, et al. Standards Track [Page 59]
+
+RFC 7401 HIPv2 April 2015
+
+
+ header length in the HIP common header MUST be
+ calculated not to cover any excluded parameters
+ when the HMAC is calculated. The size of the
+ HMAC is the natural size of the hash computation
+ output depending on the used hash function.
+
+ The HMAC uses RHASH as the hash algorithm. The calculation and
+ verification process is presented in Section 6.4.1.
+
+5.2.14. HIP_SIGNATURE
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | SIG alg | Signature /
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ / | Padding |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 61697
+ Length length in octets, excluding Type, Length, and
+ Padding
+ SIG alg signature algorithm
+ Signature the signature is calculated over the HIP packet,
+ excluding the HIP_SIGNATURE parameter and any
+ parameters that follow the HIP_SIGNATURE
+ parameter. When the signature is calculated, the
+ Checksum field MUST be set to zero, and the HIP
+ header length in the HIP common header MUST be
+ calculated only up to the beginning of the
+ HIP_SIGNATURE parameter.
+
+ The signature algorithms are defined in Section 5.2.9. The signature
+ in the Signature field is encoded using the method depending on the
+ signature algorithm (e.g., according to [RFC3110] in the case of RSA/
+ SHA-1, [RFC5702] in the case of RSA/SHA-256, [RFC2536] in the case of
+ DSA, or [RFC6090] in the case of ECDSA).
+
+ HIP_SIGNATURE calculation and verification follow the process defined
+ in Section 6.4.2.
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 60]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.2.15. HIP_SIGNATURE_2
+
+ HIP_SIGNATURE_2 excludes the variable parameters in the R1 packet to
+ allow R1 pre-creation. The parameter structure is the same as the
+ structure shown in Section 5.2.14. The fields are as follows:
+
+ Type 61633
+ Length length in octets, excluding Type, Length, and
+ Padding
+ SIG alg signature algorithm
+ Signature Within the R1 packet that contains the
+ HIP_SIGNATURE_2 parameter, the Initiator's HIT, the
+ Checksum field, and the Opaque and Random #I fields
+ in the PUZZLE parameter MUST be set to zero while
+ computing the HIP_SIGNATURE_2 signature. Further,
+ the HIP packet length in the HIP header MUST be
+ adjusted as if the HIP_SIGNATURE_2 was not in the
+ packet during the signature calculation, i.e., the
+ HIP packet length points to the beginning of
+ the HIP_SIGNATURE_2 parameter during signing and
+ verification.
+
+ Zeroing the Initiator's HIT makes it possible to create R1 packets
+ beforehand, to minimize the effects of possible DoS attacks. Zeroing
+ the Random #I and Opaque fields within the PUZZLE parameter allows
+ these fields to be populated dynamically on precomputed R1s.
+
+ Signature calculation and verification follow the process defined in
+ Section 6.4.2.
+
+5.2.16. SEQ
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Update ID |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 385
+ Length 4
+ Update ID 32-bit sequence number
+
+ The Update ID is an unsigned number in network byte order,
+ initialized by a host to zero upon moving to ESTABLISHED state. The
+ Update ID has scope within a single HIP association, and not across
+
+
+
+
+Moskowitz, et al. Standards Track [Page 61]
+
+RFC 7401 HIPv2 April 2015
+
+
+ multiple associations or multiple hosts. The Update ID is
+ incremented by one before each new UPDATE that is sent by the host;
+ the first UPDATE packet originated by a host has an Update ID of 0.
+
+5.2.17. ACK
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | peer Update ID 1 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ / peer Update ID n |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 449
+ Length length in octets, excluding Type and Length
+ peer Update ID 32-bit sequence number corresponding to the
+ Update ID being ACKed
+
+ The ACK parameter includes one or more Update IDs that have been
+ received from the peer. The number of peer Update IDs can be
+ inferred from the length by dividing it by 4.
+
+5.2.18. ENCRYPTED
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Reserved |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | IV /
+ / /
+ / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /
+ / Encrypted data /
+ / /
+ / +-------------------------------+
+ / | Padding |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 641
+ Length length in octets, excluding Type, Length, and
+ Padding
+ Reserved zero when sent, ignored when received
+
+
+
+Moskowitz, et al. Standards Track [Page 62]
+
+RFC 7401 HIPv2 April 2015
+
+
+ IV Initialization vector, if needed, otherwise
+ nonexistent. The length of the IV is inferred from
+ the HIP_CIPHER.
+ Encrypted The data is encrypted using the encryption algorithm
+ data defined in the HIP_CIPHER parameter.
+
+ The ENCRYPTED parameter encapsulates other parameters, the encrypted
+ data, which holds one or more HIP parameters in block encrypted form.
+
+ Consequently, the first fields in the encapsulated parameter(s) are
+ Type and Length of the first such parameter, allowing the contents to
+ be easily parsed after decryption.
+
+ The field labeled "Encrypted data" consists of the output of one or
+ more HIP parameters concatenated together that have been passed
+ through an encryption algorithm. Each of these inner parameters is
+ padded according to the rules of Section 5.2.1 for padding individual
+ parameters. As a result, the concatenated parameters will be a block
+ of data that is 8-byte aligned.
+
+ Some encryption algorithms require that the data to be encrypted must
+ be a multiple of the cipher algorithm block size. In this case, the
+ above block of data MUST include additional padding, as specified by
+ the encryption algorithm. The size of the extra padding is selected
+ so that the length of the unencrypted data block is a multiple of the
+ cipher block size. The encryption algorithm may specify padding
+ bytes other than zero; for example, AES [FIPS.197.2001] uses the
+ PKCS5 padding scheme (see Section 6.1.1 of [RFC2898]) where the
+ remaining n bytes to fill the block each have the value of n. This
+ yields an "unencrypted data" block that is transformed to an
+ "encrypted data" block by the cipher suite. This extra padding added
+ to the set of parameters to satisfy the cipher block alignment rules
+ is not counted in HIP TLV Length fields, and this extra padding
+ should be removed by the cipher suite upon decryption.
+
+ Note that the length of the cipher suite output may be smaller or
+ larger than the length of the set of parameters to be encrypted,
+ since the encryption process may compress the data or add additional
+ padding to the data.
+
+ Once this encryption process is completed, the Encrypted data field
+ is ready for inclusion in the parameter. If necessary, additional
+ Padding for 8-byte alignment is then added according to the rules of
+ Section 5.2.1.
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 63]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.2.19. NOTIFICATION
+
+ The NOTIFICATION parameter is used to transmit informational data,
+ such as error conditions and state transitions, to a HIP peer. A
+ NOTIFICATION parameter may appear in NOTIFY packets. The use of the
+ NOTIFICATION parameter in other packet types is for further study.
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Reserved | Notify Message Type |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | /
+ / Notification Data /
+ / +---------------+
+ / | Padding |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 832
+ Length length in octets, excluding Type, Length, and
+ Padding
+ Reserved zero when sent, ignored when received
+ Notify Message specifies the type of notification
+ Type
+ Notification informational or error data transmitted in
+ Data addition to the Notify Message Type. Values
+ for this field are type specific (see below).
+
+ Notification information can be error messages specifying why a HIP
+ Security Association could not be established. It can also be status
+ data that a HIP implementation wishes to communicate with a peer
+ process. The table below lists the notification messages and their
+ Notify Message Types. HIP packets MAY contain multiple NOTIFICATION
+ parameters if several problems exist or several independent pieces of
+ information must be transmitted.
+
+ To avoid certain types of attacks, a Responder SHOULD avoid sending a
+ NOTIFICATION to any host with which it has not successfully verified
+ a puzzle solution.
+
+ Notify Message Types in the range 0-16383 are intended for reporting
+ errors, and those in the range 16384-65535 are for other status
+ information. An implementation that receives a NOTIFY packet with a
+ Notify Message Type that indicates an error in response to a request
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 64]
+
+RFC 7401 HIPv2 April 2015
+
+
+ packet (e.g., I1, I2, UPDATE) SHOULD assume that the corresponding
+ request has failed entirely. Unrecognized error types MUST be
+ ignored, except that they SHOULD be logged.
+
+ As currently defined, Notify Message Type values 1-10 are used for
+ informing about errors in packet structures, and values 11-20 for
+ informing about problems in parameters.
+
+ Notification Data in NOTIFICATION parameters where the Notify Message
+ Type is in the status range MUST be ignored if not recognized.
+
+ Notify Message Types - Errors Value
+ ----------------------------- -----
+
+ UNSUPPORTED_CRITICAL_PARAMETER_TYPE 1
+
+ Sent if the parameter type has the "critical" bit set and the
+ parameter type is not recognized. Notification Data contains the
+ two-octet parameter type.
+
+ INVALID_SYNTAX 7
+
+ Indicates that the HIP message received was invalid because some
+ type, length, or value was out of range or because the request
+ was otherwise malformed. To avoid a denial-of-service
+ attack using forged messages, this status may only be returned
+ for packets whose HIP_MAC (if present) and SIGNATURE have been
+ verified. This status MUST be sent in response to any error not
+ covered by one of the other status types and SHOULD NOT contain
+ details, to avoid leaking information to someone probing a node.
+ To aid debugging, more detailed error information SHOULD be
+ written to a console or log.
+
+ NO_DH_PROPOSAL_CHOSEN 14
+
+ None of the proposed Group IDs were acceptable.
+
+ INVALID_DH_CHOSEN 15
+
+ The DH Group ID field does not correspond to one offered
+ by the Responder.
+
+ NO_HIP_PROPOSAL_CHOSEN 16
+
+ None of the proposed HIT Suites or HIP Encryption Algorithms were
+ acceptable.
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 65]
+
+RFC 7401 HIPv2 April 2015
+
+
+ INVALID_HIP_CIPHER_CHOSEN 17
+
+ The HIP_CIPHER Crypto ID does not correspond to one offered by
+ the Responder.
+
+ UNSUPPORTED_HIT_SUITE 20
+
+ Sent in response to an I1 or R1 packet for which the HIT Suite
+ is not supported.
+
+ AUTHENTICATION_FAILED 24
+
+ Sent in response to a HIP signature failure, except when
+ the signature verification fails in a NOTIFY message.
+
+ CHECKSUM_FAILED 26
+
+ Sent in response to a HIP checksum failure.
+
+ HIP_MAC_FAILED 28
+
+ Sent in response to a HIP HMAC failure.
+
+ ENCRYPTION_FAILED 32
+
+ The Responder could not successfully decrypt the
+ ENCRYPTED parameter.
+
+ INVALID_HIT 40
+
+ Sent in response to a failure to validate the peer's
+ HIT from the corresponding HI.
+
+ BLOCKED_BY_POLICY 42
+
+ The Responder is unwilling to set up an association
+ for some policy reason (e.g., the received HIT is NULL
+ and the policy does not allow opportunistic mode).
+
+ RESPONDER_BUSY_PLEASE_RETRY 44
+
+ The Responder is unwilling to set up an association, as it is
+ suffering under some kind of overload and has chosen to shed load
+ by rejecting the Initiator's request. The Initiator may retry;
+ however, the Initiator MUST find another (different) puzzle
+ solution for any such retries. Note that the Initiator may need
+ to obtain a new puzzle with a new I1/R1 exchange.
+
+
+
+
+Moskowitz, et al. Standards Track [Page 66]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Notify Message Types - Status Value
+ ----------------------------- -----
+
+ I2_ACKNOWLEDGEMENT 16384
+
+ The Responder has an I2 packet from the Initiator but had to
+ queue the I2 packet for processing. The puzzle was correctly
+ solved, and the Responder is willing to set up an association but
+ currently has a number of I2 packets in the processing queue.
+ The R2 packet is sent after the I2 packet was processed.
+
+5.2.20. ECHO_REQUEST_SIGNED
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Opaque data (variable length) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 897
+ Length length of the opaque data in octets
+ Opaque data opaque data, supposed to be meaningful only to
+ the node that sends ECHO_REQUEST_SIGNED and
+ receives a corresponding ECHO_RESPONSE_SIGNED or
+ ECHO_RESPONSE_UNSIGNED
+
+ The ECHO_REQUEST_SIGNED parameter contains an opaque blob of data
+ that the sender wants to get echoed back in the corresponding reply
+ packet.
+
+ The ECHO_REQUEST_SIGNED and corresponding echo response parameters
+ MAY be used for any purpose where a node wants to carry some state in
+ a request packet and get it back in a response packet. The
+ ECHO_REQUEST_SIGNED is covered by the HIP_MAC and SIGNATURE. A HIP
+ packet can contain only one ECHO_REQUEST_SIGNED parameter and MAY
+ contain multiple ECHO_REQUEST_UNSIGNED parameters. The
+ ECHO_REQUEST_SIGNED parameter MUST be responded to with an
+ ECHO_RESPONSE_SIGNED.
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 67]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.2.21. ECHO_REQUEST_UNSIGNED
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Opaque data (variable length) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 63661
+ Length length of the opaque data in octets
+ Opaque data opaque data, supposed to be meaningful only to
+ the node that sends ECHO_REQUEST_UNSIGNED and
+ receives a corresponding ECHO_RESPONSE_UNSIGNED
+
+ The ECHO_REQUEST_UNSIGNED parameter contains an opaque blob of data
+ that the sender wants to get echoed back in the corresponding reply
+ packet.
+
+ The ECHO_REQUEST_UNSIGNED and corresponding echo response parameters
+ MAY be used for any purpose where a node wants to carry some state in
+ a request packet and get it back in a response packet. The
+ ECHO_REQUEST_UNSIGNED is not covered by the HIP_MAC and SIGNATURE. A
+ HIP packet can contain one or more ECHO_REQUEST_UNSIGNED parameters.
+ It is possible that middleboxes add ECHO_REQUEST_UNSIGNED parameters
+ in HIP packets passing by. The creator of the ECHO_REQUEST_UNSIGNED
+ (end host or middlebox) has to create the Opaque field so that it can
+ later identify and remove the corresponding ECHO_RESPONSE_UNSIGNED
+ parameter.
+
+ The ECHO_REQUEST_UNSIGNED parameter MUST be responded to with an
+ ECHO_RESPONSE_UNSIGNED parameter.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 68]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.2.22. ECHO_RESPONSE_SIGNED
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Opaque data (variable length) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 961
+ Length length of the opaque data in octets
+ Opaque data opaque data, copied unmodified from the
+ ECHO_REQUEST_SIGNED or ECHO_REQUEST_UNSIGNED
+ parameter that triggered this response
+
+ The ECHO_RESPONSE_SIGNED parameter contains an opaque blob of data
+ that the sender of the ECHO_REQUEST_SIGNED wants to get echoed back.
+ The opaque data is copied unmodified from the ECHO_REQUEST_SIGNED
+ parameter.
+
+ The ECHO_REQUEST_SIGNED and ECHO_RESPONSE_SIGNED parameters MAY be
+ used for any purpose where a node wants to carry some state in a
+ request packet and get it back in a response packet. The
+ ECHO_RESPONSE_SIGNED is covered by the HIP_MAC and SIGNATURE.
+
+5.2.23. ECHO_RESPONSE_UNSIGNED
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Opaque data (variable length) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type 63425
+ Length length of the opaque data in octets
+ Opaque data opaque data, copied unmodified from the
+ ECHO_REQUEST_SIGNED or ECHO_REQUEST_UNSIGNED
+ parameter that triggered this response
+
+ The ECHO_RESPONSE_UNSIGNED parameter contains an opaque blob of data
+ that the sender of the ECHO_REQUEST_SIGNED or ECHO_REQUEST_UNSIGNED
+ wants to get echoed back. The opaque data is copied unmodified from
+ the corresponding echo request parameter.
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 69]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The echo request and ECHO_RESPONSE_UNSIGNED parameters MAY be used
+ for any purpose where a node wants to carry some state in a request
+ packet and get it back in a response packet. The
+ ECHO_RESPONSE_UNSIGNED is not covered by the HIP_MAC and SIGNATURE.
+
+5.3. HIP Packets
+
+ There are eight basic HIP packets (see Table 11). Four are for the
+ HIP base exchange, one is for updating, one is for sending
+ notifications, and two are for closing a HIP association. Support
+ for the NOTIFY packet type is optional, but support for all other HIP
+ packet types listed below is mandatory.
+
+ +------------------+------------------------------------------------+
+ | Packet type | Packet name |
+ +------------------+------------------------------------------------+
+ | 1 | I1 - the HIP Initiator Packet |
+ | | |
+ | 2 | R1 - the HIP Responder Packet |
+ | | |
+ | 3 | I2 - the Second HIP Initiator Packet |
+ | | |
+ | 4 | R2 - the Second HIP Responder Packet |
+ | | |
+ | 16 | UPDATE - the HIP Update Packet |
+ | | |
+ | 17 | NOTIFY - the HIP Notify Packet |
+ | | |
+ | 18 | CLOSE - the HIP Association Closing Packet |
+ | | |
+ | 19 | CLOSE_ACK - the HIP Closing Acknowledgment |
+ | | Packet |
+ +------------------+------------------------------------------------+
+
+ Table 11: HIP Packets and Packet Type Values
+
+ Packets consist of the fixed header as described in Section 5.1,
+ followed by the parameters. The parameter part, in turn, consists of
+ zero or more TLV-coded parameters.
+
+ In addition to the base packets, other packet types may be defined
+ later in separate specifications. For example, support for mobility
+ and multihoming is not included in this specification.
+
+ See "Notation" (Section 2.2) for the notation used in the operations.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 70]
+
+RFC 7401 HIPv2 April 2015
+
+
+ In the future, an optional upper-layer payload MAY follow the HIP
+ header. The Next Header field in the header indicates if there is
+ additional data following the HIP header. The HIP packet, however,
+ MUST NOT be fragmented into multiple extension headers by setting the
+ Next Header field in a HIP header to the HIP protocol number. This
+ limits the size of the possible additional data in the packet.
+
+5.3.1. I1 - the HIP Initiator Packet
+
+ The HIP header values for the I1 packet:
+
+ Header:
+ Packet Type = 1
+ SRC HIT = Initiator's HIT
+ DST HIT = Responder's HIT, or NULL
+
+ IP ( HIP ( DH_GROUP_LIST ) )
+
+ The I1 packet contains the fixed HIP header and the Initiator's
+ DH_GROUP_LIST.
+
+ Valid control bits: None
+
+ The Initiator receives the Responder's HIT from either a DNS lookup
+ of the Responder's FQDN (see [HIP-DNS-EXT]), some other repository,
+ or a local table. If the Initiator does not know the Responder's
+ HIT, it may attempt to use opportunistic mode by using NULL (all
+ zeros) as the Responder's HIT. See also "HIP Opportunistic Mode"
+ (Section 4.1.8).
+
+ Since the I1 packet is so easy to spoof even if it were signed, no
+ attempt is made to add to its generation or processing cost.
+
+ The Initiator includes a DH_GROUP_LIST parameter in the I1 packet to
+ inform the Responder of its preferred DH Group IDs. Note that the
+ DH_GROUP_LIST in the I1 packet is not protected by a signature.
+
+ Implementations MUST be able to handle a storm of received I1
+ packets, discarding those with common content that arrive within a
+ small time delta.
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 71]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.3.2. R1 - the HIP Responder Packet
+
+ The HIP header values for the R1 packet:
+
+ Header:
+ Packet Type = 2
+ SRC HIT = Responder's HIT
+ DST HIT = Initiator's HIT
+
+ IP ( HIP ( [ R1_COUNTER, ]
+ PUZZLE,
+ DIFFIE_HELLMAN,
+ HIP_CIPHER,
+ HOST_ID,
+ HIT_SUITE_LIST,
+ DH_GROUP_LIST,
+ [ ECHO_REQUEST_SIGNED, ]
+ TRANSPORT_FORMAT_LIST,
+ HIP_SIGNATURE_2 )
+ <, ECHO_REQUEST_UNSIGNED >i)
+
+ Valid control bits: A
+
+ If the Responder's HI is an anonymous one, the A control MUST be set.
+
+ The Initiator's HIT MUST match the one received in the I1 packet if
+ the R1 is a response to an I1. If the Responder has multiple HIs,
+ the Responder's HIT used MUST match the Initiator's request. If the
+ Initiator used opportunistic mode, the Responder may select freely
+ among its HIs. See also "HIP Opportunistic Mode" (Section 4.1.8).
+
+ The R1 packet generation counter is used to determine the currently
+ valid generation of puzzles. The value is increased periodically,
+ and it is RECOMMENDED that it is increased at least as often as
+ solutions to old puzzles are no longer accepted.
+
+ The puzzle contains a Random #I and the difficulty #K. The
+ difficulty #K indicates the number of lower-order bits, in the puzzle
+ hash result, that must be zeros; see Section 4.1.2. The Random #I is
+ not covered by the signature and must be zeroed during the signature
+ calculation, allowing the sender to select and set the #I into a
+ precomputed R1 packet just prior to sending it to the peer.
+
+ The Responder selects the DIFFIE_HELLMAN Group ID and Public Value
+ based on the Initiator's preference expressed in the DH_GROUP_LIST
+ parameter in the I1 packet. The Responder sends back its own
+ preference based on which it chose the DH public value as
+
+
+
+
+Moskowitz, et al. Standards Track [Page 72]
+
+RFC 7401 HIPv2 April 2015
+
+
+ DH_GROUP_LIST. This allows the Initiator to determine whether its
+ own DH_GROUP_LIST in the sent I1 packet was manipulated by an
+ attacker.
+
+ The Diffie-Hellman public value is ephemeral, and values SHOULD NOT
+ be reused across different HIP associations. Once the Responder has
+ received a valid response to an R1 packet, that Diffie-Hellman value
+ SHOULD be deprecated. It is possible that the Responder has sent the
+ same Diffie-Hellman value to different hosts simultaneously in
+ corresponding R1 packets, and those responses should also be
+ accepted. However, as a defense against I1 packet storms, an
+ implementation MAY propose, and reuse unless avoidable, the same
+ Diffie-Hellman value for a period of time -- for example, 15 minutes.
+ By using a small number of different puzzles for a given
+ Diffie-Hellman value, the R1 packets can be precomputed and delivered
+ as quickly as I1 packets arrive. A scavenger process should clean up
+ unused Diffie-Hellman values and puzzles.
+
+ Reusing Diffie-Hellman public values opens up the potential security
+ risk of more than one Initiator ending up with the same keying
+ material (due to faulty random number generators). Also, more than
+ one Initiator using the same Responder public key half may lead to
+ potentially easier cryptographic attacks and to imperfect forward
+ security.
+
+ However, these risks involved in reusing the same public value are
+ statistical; that is, the authors are not aware of any mechanism that
+ would allow manipulation of the protocol so that the risk of the
+ reuse of any given Responder Diffie-Hellman public key would differ
+ from the base probability. Consequently, it is RECOMMENDED that
+ Responders avoid reusing the same DH key with multiple Initiators,
+ but because the risk is considered statistical and not known to be
+ manipulable, the implementations MAY reuse a key in order to ease
+ resource-constrained implementations and to increase the probability
+ of successful communication with legitimate clients even under an I1
+ packet storm. In particular, when it is too expensive to generate
+ enough precomputed R1 packets to supply each potential Initiator with
+ a different DH key, the Responder MAY send the same DH key to several
+ Initiators, thereby creating the possibility of multiple legitimate
+ Initiators ending up using the same Responder-side public key.
+ However, as soon as the Responder knows that it will use a particular
+ DH key, it SHOULD stop offering it. This design is aimed to allow
+ resource-constrained Responders to offer services under I1 packet
+ storms and to simultaneously make the probability of DH key reuse
+ both statistical and as low as possible.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 73]
+
+RFC 7401 HIPv2 April 2015
+
+
+ If the Responder uses the same DH key pair for multiple handshakes,
+ it must take care to avoid small subgroup attacks [RFC2785]. To
+ avoid these attacks, when receiving the I2 message, the Responder
+ SHOULD validate the Initiator's DH public key as described in
+ [RFC2785], Section 3.1. If the validation fails, the Responder MUST
+ NOT generate a DH shared key and MUST silently abort the HIP BEX.
+
+ The HIP_CIPHER parameter contains the encryption algorithms supported
+ by the Responder to encrypt the contents of the ENCRYPTED parameter,
+ in the order of preference. All implementations MUST support AES
+ [RFC3602].
+
+ The HIT_SUITE_LIST parameter is an ordered list of the Responder's
+ preferred and supported HIT Suites. The list allows the Initiator to
+ determine whether its own source HIT matches any suite supported by
+ the Responder.
+
+ The ECHO_REQUEST_SIGNED and ECHO_REQUEST_UNSIGNED parameters contain
+ data that the sender wants to receive unmodified in the corresponding
+ response packet in the ECHO_RESPONSE_SIGNED or ECHO_RESPONSE_UNSIGNED
+ parameter. The R1 packet may contain zero or more
+ ECHO_REQUEST_UNSIGNED parameters as described in Section 5.2.21.
+
+ The TRANSPORT_FORMAT_LIST parameter is an ordered list of the
+ Responder's preferred and supported transport format types. The list
+ allows the Initiator and the Responder to agree on a common type for
+ payload protection. This parameter is described in Section 5.2.11.
+
+ The signature is calculated over the whole HIP packet as described in
+ Section 5.2.15. This allows the Responder to use precomputed R1s.
+ The Initiator SHOULD validate this signature. It MUST check that the
+ Responder's HI matches with the one expected, if any.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 74]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.3.3. I2 - the Second HIP Initiator Packet
+
+ The HIP header values for the I2 packet:
+
+ Header:
+ Packet Type = 3
+ SRC HIT = Initiator's HIT
+ DST HIT = Responder's HIT
+
+ IP ( HIP ( [R1_COUNTER,]
+ SOLUTION,
+ DIFFIE_HELLMAN,
+ HIP_CIPHER,
+ ENCRYPTED { HOST_ID } or HOST_ID,
+ [ ECHO_RESPONSE_SIGNED, ]
+ TRANSPORT_FORMAT_LIST,
+ HIP_MAC,
+ HIP_SIGNATURE
+ <, ECHO_RESPONSE_UNSIGNED>i ) )
+
+ Valid control bits: A
+
+ The HITs used MUST match the ones used in the R1.
+
+ If the Initiator's HI is an anonymous one, the A control bit MUST
+ be set.
+
+ If present in the I1 packet, the Initiator MUST include an unmodified
+ copy of the R1_COUNTER parameter received in the corresponding R1
+ packet into the I2 packet.
+
+ The Solution contains the Random #I from R1 and the computed #J. The
+ low-order #K bits of the RHASH( #I | ... | #J ) MUST be zero.
+
+ The Diffie-Hellman value is ephemeral. If precomputed, a scavenger
+ process should clean up unused Diffie-Hellman values. The Responder
+ MAY reuse Diffie-Hellman values under some conditions as specified in
+ Section 5.3.2.
+
+ The HIP_CIPHER contains the single encryption suite selected by the
+ Initiator, that it uses to encrypt the ENCRYPTED parameters. The
+ chosen cipher MUST correspond to one of the ciphers offered by the
+ Responder in the R1. All implementations MUST support AES [RFC3602].
+
+ The Initiator's HI MAY be encrypted using the HIP_CIPHER encryption
+ algorithm. The keying material is derived from the Diffie-Hellman
+ exchange as defined in Section 6.5.
+
+
+
+
+Moskowitz, et al. Standards Track [Page 75]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The ECHO_RESPONSE_SIGNED and ECHO_RESPONSE_UNSIGNED contain the
+ unmodified opaque data copied from the corresponding echo request
+ parameter(s).
+
+ The TRANSPORT_FORMAT_LIST contains the single transport format type
+ selected by the Initiator. The chosen type MUST correspond to one of
+ the types offered by the Responder in the R1. Currently, the only
+ transport format defined is the ESP transport format ([RFC7402]).
+
+ The HMAC value in the HIP_MAC parameter is calculated over the whole
+ HIP packet, excluding any parameters after the HIP_MAC, as described
+ in Section 6.4.1. The Responder MUST validate the HIP_MAC.
+
+ The signature is calculated over the whole HIP packet, excluding any
+ parameters after the HIP_SIGNATURE, as described in Section 5.2.14.
+ The Responder MUST validate this signature. The Responder uses the
+ HI in the packet or an HI acquired by some other means for verifying
+ the signature.
+
+5.3.4. R2 - the Second HIP Responder Packet
+
+ The HIP header values for the R2 packet:
+
+ Header:
+ Packet Type = 4
+ SRC HIT = Responder's HIT
+ DST HIT = Initiator's HIT
+
+ IP ( HIP ( HIP_MAC_2, HIP_SIGNATURE ) )
+
+ Valid control bits: None
+
+ The HIP_MAC_2 is calculated over the whole HIP packet, with the
+ Responder's HOST_ID parameter concatenated with the HIP packet. The
+ HOST_ID parameter is removed after the HMAC calculation. The
+ procedure is described in Section 6.4.1.
+
+ The signature is calculated over the whole HIP packet.
+
+ The Initiator MUST validate both the HIP_MAC and the signature.
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 76]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.3.5. UPDATE - the HIP Update Packet
+
+ The HIP header values for the UPDATE packet:
+
+ Header:
+ Packet Type = 16
+ SRC HIT = Sender's HIT
+ DST HIT = Recipient's HIT
+
+ IP ( HIP ( [SEQ, ACK, ] HIP_MAC, HIP_SIGNATURE ) )
+
+ Valid control bits: None
+
+ The UPDATE packet contains mandatory HIP_MAC and HIP_SIGNATURE
+ parameters, and other optional parameters.
+
+ The UPDATE packet contains zero or one SEQ parameter. The presence
+ of a SEQ parameter indicates that the receiver MUST acknowledge the
+ UPDATE. An UPDATE that does not contain a SEQ but only an ACK
+ parameter is simply an acknowledgment of a previous UPDATE and itself
+ MUST NOT be acknowledged by a separate ACK parameter. Such UPDATE
+ packets containing only an ACK parameter do not require processing in
+ relative order to other UPDATE packets. An UPDATE packet without
+ either a SEQ or an ACK parameter is invalid; such unacknowledged
+ updates MUST instead use a NOTIFY packet.
+
+ An UPDATE packet contains zero or one ACK parameter. The ACK
+ parameter echoes the SEQ sequence number of the UPDATE packet being
+ ACKed. A host MAY choose to acknowledge more than one UPDATE packet
+ at a time; e.g., the ACK parameter may contain the last two SEQ
+ values received, for resilience against packet loss. ACK values are
+ not cumulative; each received unique SEQ value requires at least one
+ corresponding ACK value in reply. Received ACK parameters that are
+ redundant are ignored. Hosts MUST implement the processing of ACK
+ parameters with multiple SEQ sequence numbers even if they do not
+ implement sending ACK parameters with multiple SEQ sequence numbers.
+
+ The UPDATE packet may contain both a SEQ and an ACK parameter. In
+ this case, the ACK parameter is being piggybacked on an outgoing
+ UPDATE. In general, UPDATEs carrying SEQ SHOULD be ACKed upon
+ completion of the processing of the UPDATE. A host MAY choose to
+ hold the UPDATE carrying an ACK parameter for a short period of time
+ to allow for the possibility of piggybacking the ACK parameter, in a
+ manner similar to TCP delayed acknowledgments.
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 77]
+
+RFC 7401 HIPv2 April 2015
+
+
+ A sender MAY choose to forego reliable transmission of a particular
+ UPDATE (e.g., it becomes overcome by events). The semantics are such
+ that the receiver MUST acknowledge the UPDATE, but the sender MAY
+ choose to not care about receiving the ACK parameter.
+
+ UPDATEs MAY be retransmitted without incrementing SEQ. If the same
+ subset of parameters is included in multiple UPDATEs with different
+ SEQs, the host MUST ensure that the receiver's processing of the
+ parameters multiple times will not result in a protocol error.
+
+5.3.6. NOTIFY - the HIP Notify Packet
+
+ The NOTIFY packet MAY be used to provide information to a peer.
+ Typically, NOTIFY is used to indicate some type of protocol error or
+ negotiation failure. NOTIFY packets are unacknowledged. The
+ receiver can handle the packet only as informational, and SHOULD NOT
+ change its HIP state (see Section 4.4.2) based purely on a received
+ NOTIFY packet.
+
+ The HIP header values for the NOTIFY packet:
+
+ Header:
+ Packet Type = 17
+ SRC HIT = Sender's HIT
+ DST HIT = Recipient's HIT, or zero if unknown
+
+ IP ( HIP (<NOTIFICATION>i, [HOST_ID, ] HIP_SIGNATURE) )
+
+ Valid control bits: None
+
+ The NOTIFY packet is used to carry one or more NOTIFICATION
+ parameters.
+
+5.3.7. CLOSE - the HIP Association Closing Packet
+
+ The HIP header values for the CLOSE packet:
+
+ Header:
+ Packet Type = 18
+ SRC HIT = Sender's HIT
+ DST HIT = Recipient's HIT
+
+ IP ( HIP ( ECHO_REQUEST_SIGNED, HIP_MAC, HIP_SIGNATURE ) )
+
+ Valid control bits: None
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 78]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The sender MUST include an ECHO_REQUEST_SIGNED used to validate
+ CLOSE_ACK received in response, and both a HIP_MAC and a signature
+ (calculated over the whole HIP packet).
+
+ The receiver peer MUST reply with a CLOSE_ACK containing an
+ ECHO_RESPONSE_SIGNED corresponding to the received
+ ECHO_REQUEST_SIGNED.
+
+5.3.8. CLOSE_ACK - the HIP Closing Acknowledgment Packet
+
+ The HIP header values for the CLOSE_ACK packet:
+
+ Header:
+ Packet Type = 19
+ SRC HIT = Sender's HIT
+ DST HIT = Recipient's HIT
+
+ IP ( HIP ( ECHO_RESPONSE_SIGNED, HIP_MAC, HIP_SIGNATURE ) )
+
+ Valid control bits: None
+
+ The sender MUST include both an HMAC and signature (calculated over
+ the whole HIP packet).
+
+ The receiver peer MUST validate the ECHO_RESPONSE_SIGNED and validate
+ both the HIP_MAC and the signature if the receiver has state for a
+ HIP association.
+
+5.4. ICMP Messages
+
+ When a HIP implementation detects a problem with an incoming packet,
+ and it either cannot determine the identity of the sender of the
+ packet or does not have any existing HIP association with the sender
+ of the packet, it MAY respond with an ICMP packet. Any such replies
+ MUST be rate-limited as described in [RFC4443]. In most cases, the
+ ICMP packet has the Parameter Problem type (12 for ICMPv4, 4 for
+ ICMPv6), with the Pointer pointing to the field that caused the ICMP
+ message to be generated.
+
+5.4.1. Invalid Version
+
+ If a HIP implementation receives a HIP packet that has an
+ unrecognized HIP version number, it SHOULD respond, rate-limited,
+ with an ICMP packet with type Parameter Problem, with the Pointer
+ pointing to the Version/RES. byte in the HIP header.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 79]
+
+RFC 7401 HIPv2 April 2015
+
+
+5.4.2. Other Problems with the HIP Header and Packet Structure
+
+ If a HIP implementation receives a HIP packet that has other
+ unrecoverable problems in the header or packet format, it MAY
+ respond, rate-limited, with an ICMP packet with type Parameter
+ Problem, with the Pointer pointing to the field that failed to pass
+ the format checks. However, an implementation MUST NOT send an ICMP
+ message if the checksum fails; instead, it MUST silently drop the
+ packet.
+
+5.4.3. Invalid Puzzle Solution
+
+ If a HIP implementation receives an I2 packet that has an invalid
+ puzzle solution, the behavior depends on the underlying version of
+ IP. If IPv6 is used, the implementation SHOULD respond with an ICMP
+ packet with type Parameter Problem, with the Pointer pointing to the
+ beginning of the Puzzle solution #J field in the SOLUTION payload in
+ the HIP message.
+
+ If IPv4 is used, the implementation MAY respond with an ICMP packet
+ with the type Parameter Problem, copying enough bytes from the I2
+ message so that the SOLUTION parameter fits into the ICMP message,
+ with the Pointer pointing to the beginning of the Puzzle solution #J
+ field, as in the IPv6 case. Note, however, that the resulting ICMPv4
+ message exceeds the typical ICMPv4 message size as defined in
+ [RFC0792].
+
+5.4.4. Non-existing HIP Association
+
+ If a HIP implementation receives a CLOSE or UPDATE packet, or any
+ other packet whose handling requires an existing association, that
+ has either a Receiver or Sender HIT that does not match with any
+ existing HIP association, the implementation MAY respond, rate-
+ limited, with an ICMP packet with the type Parameter Problem. The
+ Pointer of the ICMP Parameter Problem packet is set pointing to the
+ beginning of the first HIT that does not match.
+
+ A host MUST NOT reply with such an ICMP if it receives any of the
+ following messages: I1, R2, I2, R2, and NOTIFY packet. When
+ introducing new packet types, a specification SHOULD define the
+ appropriate rules for sending or not sending this kind of ICMP reply.
+
+6. Packet Processing
+
+ Each host is assumed to have a single HIP implementation that manages
+ the host's HIP associations and handles requests for new ones. Each
+ HIP association is governed by a conceptual state machine, with
+ states defined above in Section 4.4. The HIP implementation can
+
+
+
+Moskowitz, et al. Standards Track [Page 80]
+
+RFC 7401 HIPv2 April 2015
+
+
+ simultaneously maintain HIP associations with more than one host.
+ Furthermore, the HIP implementation may have more than one active HIP
+ association with another host; in this case, HIP associations are
+ distinguished by their respective HITs. It is not possible to have
+ more than one HIP association between any given pair of HITs.
+ Consequently, the only way for two hosts to have more than one
+ parallel association is to use different HITs, at least at one end.
+
+ The processing of packets depends on the state of the HIP
+ association(s) with respect to the authenticated or apparent
+ originator of the packet. A HIP implementation determines whether it
+ has an active association with the originator of the packet based on
+ the HITs. In the case of user data carried in a specific transport
+ format, the transport format document specifies how the incoming
+ packets are matched with the active associations.
+
+6.1. Processing Outgoing Application Data
+
+ In a HIP host, an application can send application-level data using
+ an identifier specified via the underlying API. The API can be a
+ backwards-compatible API (see [RFC5338]), using identifiers that look
+ similar to IP addresses, or a completely new API, providing enhanced
+ services related to Host Identities. Depending on the HIP
+ implementation, the identifier provided to the application may be
+ different; for example, it can be a HIT or an IP address.
+
+ The exact format and method for transferring the user data from the
+ source HIP host to the destination HIP host are defined in the
+ corresponding transport format document. The actual data is
+ transferred in the network using the appropriate source and
+ destination IP addresses.
+
+ In this document, conceptual processing rules are defined only for
+ the base case where both hosts have only single usable IP addresses;
+ the multi-address multihoming case is specified separately.
+
+ The following conceptual algorithm describes the steps that are
+ required for handling outgoing datagrams destined to a HIT.
+
+ 1. If the datagram has a specified source address, it MUST be a HIT.
+ If it is not, the implementation MAY replace the source address
+ with a HIT. Otherwise, it MUST drop the packet.
+
+ 2. If the datagram has an unspecified source address, the
+ implementation MUST choose a suitable source HIT for the
+ datagram. Selecting the source HIT is subject to local policy.
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 81]
+
+RFC 7401 HIPv2 April 2015
+
+
+ 3. If there is no active HIP association with the given <source,
+ destination> HIT pair, one MUST be created by running the base
+ exchange. While waiting for the base exchange to complete, the
+ implementation SHOULD queue at least one user data packet per HIP
+ association to be formed, and it MAY queue more than one.
+
+ 4. Once there is an active HIP association for the given <source,
+ destination> HIT pair, the outgoing datagram is passed to
+ transport handling. The possible transport formats are defined
+ in separate documents, of which the ESP transport format for HIP
+ is mandatory for all HIP implementations.
+
+ 5. Before sending the packet, the HITs in the datagram are replaced
+ with suitable IP addresses. For IPv6, the rules defined in
+ [RFC6724] SHOULD be followed. Note that this HIT-to-IP-address
+ conversion step MAY also be performed at some other point in the
+ stack, e.g., before wrapping the packet into the output format.
+
+6.2. Processing Incoming Application Data
+
+ The following conceptual algorithm describes the incoming datagram
+ handling when HITs are used at the receiving host as application-
+ level identifiers. More detailed steps for processing packets are
+ defined in corresponding transport format documents.
+
+ 1. The incoming datagram is mapped to an existing HIP association,
+ typically using some information from the packet. For example,
+ such mapping may be based on the ESP Security Parameter Index
+ (SPI).
+
+ 2. The specific transport format is unwrapped, in a way depending on
+ the transport format, yielding a packet that looks like a
+ standard (unencrypted) IP packet. If possible, this step SHOULD
+ also verify that the packet was indeed (once) sent by the remote
+ HIP host, as identified by the HIP association.
+
+ Depending on the used transport mode, the verification method can
+ vary. While the HI (as well as the HIT) is used as the higher-
+ layer identifier, the verification method has to verify that the
+ data packet was sent by the correct node identity and that the
+ actual identity maps to this particular HIT. When using the ESP
+ transport format [RFC7402], the verification is done using the
+ SPI value in the data packet to find the corresponding SA with
+ associated HIT and key, and decrypting the packet with that
+ associated key.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 82]
+
+RFC 7401 HIPv2 April 2015
+
+
+ 3. The IP addresses in the datagram are replaced with the HITs
+ associated with the HIP association. Note that this IP-address-
+ to-HIT conversion step MAY also be performed at some other point
+ in the stack.
+
+ 4. The datagram is delivered to the upper layer (e.g., UDP or TCP).
+ When demultiplexing the datagram, the right upper-layer socket is
+ selected based on the HITs.
+
+6.3. Solving the Puzzle
+
+ This subsection describes the details for solving the puzzle.
+
+ In the R1 packet, the values #I and #K are sent in network byte
+ order. Similarly, in the I2 packet, the values #I and #J are sent in
+ network byte order. The hash is created by concatenating, in network
+ byte order, the following data, in the following order and using the
+ RHASH algorithm:
+
+ n-bit random value #I (where n is RHASH_len), in network byte
+ order, as appearing in the R1 and I2 packets.
+
+ 128-bit Initiator's HIT, in network byte order, as appearing in
+ the HIP Payload in the R1 and I2 packets.
+
+ 128-bit Responder's HIT, in network byte order, as appearing in
+ the HIP Payload in the R1 and I2 packets.
+
+ n-bit random value #J (where n is RHASH_len), in network byte
+ order, as appearing in the I2 packet.
+
+ In a valid response puzzle, the #K low-order bits of the resulting
+ RHASH digest MUST be zero.
+
+ Notes:
+
+ i) The length of the data to be hashed is variable, depending on
+ the output length of the Responder's hash function RHASH.
+
+ ii) All the data in the hash input MUST be in network byte order.
+
+ iii) The orderings of the Initiator's and Responder's HITs are
+ different in the R1 and I2 packets; see Section 5.1. Care
+ must be taken to copy the values in the right order to the
+ hash input.
+
+ iv) For a puzzle #I, there may exist multiple valid puzzle
+ solutions #J.
+
+
+
+Moskowitz, et al. Standards Track [Page 83]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The following procedure describes the processing steps involved,
+ assuming that the Responder chooses to precompute the R1 packets:
+
+ Precomputation by the Responder:
+ Sets up the puzzle difficulty #K.
+ Creates a signed R1 and caches it.
+
+ Responder:
+ Selects a suitable cached R1.
+ Generates a random number #I.
+ Sends #I and #K in an R1.
+ Saves #I and #K for a delta time.
+
+ Initiator:
+ Generates repeated attempts to solve the puzzle until a matching
+ #J is found:
+ Ltrunc( RHASH( #I | HIT-I | HIT-R | #J ), #K ) == 0
+ Sends #I and #J in an I2.
+
+ Responder:
+ Verifies that the received #I is a saved one.
+ Finds the right #K based on #I.
+ Computes V := Ltrunc( RHASH( #I | HIT-I | HIT-R | #J ), #K )
+ Rejects if V != 0
+ Accepts if V == 0
+
+6.4. HIP_MAC and SIGNATURE Calculation and Verification
+
+ The following subsections define the actions for processing HIP_MAC,
+ HIP_MAC_2, HIP_SIGNATURE, and HIP_SIGNATURE_2 parameters. The
+ HIP_MAC_2 parameter is contained in the R2 packet. The
+ HIP_SIGNATURE_2 parameter is contained in the R1 packet. The
+ HIP_SIGNATURE and HIP_MAC parameters are contained in other HIP
+ packets.
+
+6.4.1. HMAC Calculation
+
+ The HMAC uses RHASH as the underlying hash function. The type of
+ RHASH depends on the HIT Suite of the Responder. Hence, HMAC-SHA-256
+ [RFC4868] is used for HIT Suite RSA/DSA/SHA-256, HMAC-SHA-1 [RFC2404]
+ is used for HIT Suite ECDSA_LOW/SHA-1, and HMAC-SHA-384 [RFC4868] is
+ used for HIT Suite ECDSA/SHA-384.
+
+ The following process applies both to the HIP_MAC and HIP_MAC_2
+ parameters. When processing HIP_MAC_2, the difference is that the
+ HIP_MAC calculation includes a pseudo HOST_ID field containing the
+ Responder's information as sent in the R1 packet earlier.
+
+
+
+
+Moskowitz, et al. Standards Track [Page 84]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Both the Initiator and the Responder should take some care when
+ verifying or calculating the HIP_MAC_2. Specifically, the Initiator
+ has to preserve the HOST_ID exactly as it was received in the R1
+ packet until it receives the HIP_MAC_2 in the R2 packet.
+
+ The scope of the calculation for HIP_MAC is as follows:
+
+ HMAC: { HIP header | [ Parameters ] }
+
+ where Parameters include all of the packet's HIP parameters with type
+ values ranging from 1 to (HIP_MAC's type value - 1), and excluding
+ those parameters with type values greater than or equal to HIP_MAC's
+ type value.
+
+ During HIP_MAC calculation, the following apply:
+
+ o In the HIP header, the Checksum field is set to zero.
+
+ o In the HIP header, the Header Length field value is calculated to
+ the beginning of the HIP_MAC parameter.
+
+ Parameter order is described in Section 5.2.1.
+
+ The scope of the calculation for HIP_MAC_2 is as follows:
+
+ HIP_MAC_2: { HIP header | [ Parameters ] | HOST_ID }
+
+ where Parameters include all of the packet's HIP parameters with type
+ values from 1 to (HIP_MAC_2's type value - 1), and excluding those
+ parameters with type values greater than or equal to HIP_MAC_2's type
+ value.
+
+ During HIP_MAC_2 calculation, the following apply:
+
+ o In the HIP header, the Checksum field is set to zero.
+
+ o In the HIP header, the Header Length field value is calculated to
+ the beginning of the HIP_MAC_2 parameter and increased by the
+ length of the concatenated HOST_ID parameter length (including the
+ Type and Length fields).
+
+ o The HOST_ID parameter is exactly in the form it was received in
+ the R1 packet from the Responder.
+
+ Parameter order is described in Section 5.2.1, except that the
+ HOST_ID parameter in this calculation is added to the end.
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 85]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The HIP_MAC parameter is defined in Section 5.2.12 and the HIP_MAC_2
+ parameter in Section 5.2.13. The HMAC calculation and verification
+ process (the process applies both to HIP_MAC and HIP_MAC_2, except
+ where HIP_MAC_2 is mentioned separately) is as follows:
+
+ Packet sender:
+
+ 1. Create the HIP packet, without the HIP_MAC, HIP_SIGNATURE,
+ HIP_SIGNATURE_2, or any other parameter with greater type value
+ than the HIP_MAC parameter has.
+
+ 2. In case of HIP_MAC_2 calculation, add a HOST_ID (Responder)
+ parameter to the end of the packet.
+
+ 3. Calculate the Header Length field in the HIP header, including
+ the added HOST_ID parameter in case of HIP_MAC_2.
+
+ 4. Compute the HMAC using either the HIP-gl or HIP-lg integrity key
+ retrieved from KEYMAT as defined in Section 6.5.
+
+ 5. In case of HIP_MAC_2, remove the HOST_ID parameter from the
+ packet.
+
+ 6. Add the HIP_MAC parameter to the packet and any parameter with
+ greater type value than the HIP_MAC's (HIP_MAC_2's) that may
+ follow, including possible HIP_SIGNATURE or HIP_SIGNATURE_2
+ parameters.
+
+ 7. Recalculate the Length field in the HIP header.
+
+ Packet receiver:
+
+ 1. Verify the HIP Header Length field.
+
+ 2. Remove the HIP_MAC or HIP_MAC_2 parameter, as well as all other
+ parameters that follow it with greater type value including
+ possible HIP_SIGNATURE or HIP_SIGNATURE_2 fields, saving the
+ contents if they are needed later.
+
+ 3. In case of HIP_MAC_2, build and add a HOST_ID parameter (with
+ Responder information) to the packet. The HOST_ID parameter
+ should be identical to the one previously received from the
+ Responder.
+
+ 4. Recalculate the HIP packet length in the HIP header and clear the
+ Checksum field (set it to all zeros). In case of HIP_MAC_2, the
+ length is calculated with the added HOST_ID parameter.
+
+
+
+
+Moskowitz, et al. Standards Track [Page 86]
+
+RFC 7401 HIPv2 April 2015
+
+
+ 5. Compute the HMAC using either the HIP-gl or HIP-lg integrity key
+ as defined in Section 6.5 and verify it against the received
+ HMAC.
+
+ 6. Set the Checksum and Header Length fields in the HIP header to
+ original values. Note that the Checksum and Length fields
+ contain incorrect values after this step.
+
+ 7. In case of HIP_MAC_2, remove the HOST_ID parameter from the
+ packet before further processing.
+
+6.4.2. Signature Calculation
+
+ The following process applies both to the HIP_SIGNATURE and
+ HIP_SIGNATURE_2 parameters. When processing the HIP_SIGNATURE_2
+ parameter, the only difference is that instead of the HIP_SIGNATURE
+ parameter, the HIP_SIGNATURE_2 parameter is used, and the Initiator's
+ HIT and PUZZLE Opaque and Random #I fields are cleared (set to all
+ zeros) before computing the signature. The HIP_SIGNATURE parameter
+ is defined in Section 5.2.14 and the HIP_SIGNATURE_2 parameter in
+ Section 5.2.15.
+
+ The scope of the calculation for HIP_SIGNATURE and HIP_SIGNATURE_2 is
+ as follows:
+
+ HIP_SIGNATURE: { HIP header | [ Parameters ] }
+
+ where Parameters include all of the packet's HIP parameters with type
+ values from 1 to (HIP_SIGNATURE's type value - 1).
+
+ During signature calculation, the following apply:
+
+ o In the HIP header, the Checksum field is set to zero.
+
+ o In the HIP header, the Header Length field value is calculated to
+ the beginning of the HIP_SIGNATURE parameter.
+
+ Parameter order is described in Section 5.2.1.
+
+ HIP_SIGNATURE_2: { HIP header | [ Parameters ] }
+
+ where Parameters include all of the packet's HIP parameters with type
+ values ranging from 1 to (HIP_SIGNATURE_2's type value - 1).
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 87]
+
+RFC 7401 HIPv2 April 2015
+
+
+ During signature calculation, the following apply:
+
+ o In the HIP header, both the Checksum and the Receiver's HIT fields
+ are set to zero.
+
+ o In the HIP header, the Header Length field value is calculated to
+ the beginning of the HIP_SIGNATURE_2 parameter.
+
+ o The PUZZLE parameter's Opaque and Random #I fields are set to
+ zero.
+
+ Parameter order is described in Section 5.2.1.
+
+ The signature calculation and verification process (the process
+ applies both to HIP_SIGNATURE and HIP_SIGNATURE_2, except in the case
+ where HIP_SIGNATURE_2 is separately mentioned) is as follows:
+
+ Packet sender:
+
+ 1. Create the HIP packet without the HIP_SIGNATURE parameter or any
+ other parameters that follow the HIP_SIGNATURE parameter.
+
+ 2. Calculate the Length field and zero the Checksum field in the HIP
+ header. In case of HIP_SIGNATURE_2, set the Initiator's HIT
+ field in the HIP header as well as the PUZZLE parameter's Opaque
+ and Random #I fields to zero.
+
+ 3. Compute the signature using the private key corresponding to the
+ Host Identifier (public key).
+
+ 4. Add the HIP_SIGNATURE parameter to the packet.
+
+ 5. Add any parameters that follow the HIP_SIGNATURE parameter.
+
+ 6. Recalculate the Length field in the HIP header, and calculate the
+ Checksum field.
+
+ Packet receiver:
+
+ 1. Verify the HIP Header Length field and checksum.
+
+ 2. Save the contents of the HIP_SIGNATURE parameter and any other
+ parameters following the HIP_SIGNATURE parameter, and remove them
+ from the packet.
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 88]
+
+RFC 7401 HIPv2 April 2015
+
+
+ 3. Recalculate the HIP packet Length in the HIP header and clear the
+ Checksum field (set it to all zeros). In case of
+ HIP_SIGNATURE_2, set the Initiator's HIT field in the HIP header
+ as well as the PUZZLE parameter's Opaque and Random #I fields
+ to zero.
+
+ 4. Compute the signature and verify it against the received
+ signature using the packet sender's Host Identity (public key).
+
+ 5. Restore the original packet by adding removed parameters (in
+ step 2) and resetting the values that were set to zero (in
+ step 3).
+
+ The verification can use either the HI received from a HIP packet;
+ the HI retrieved from a DNS query, if the FQDN has been received in
+ the HOST_ID parameter; or an HI received by some other means.
+
+6.5. HIP KEYMAT Generation
+
+ HIP keying material is derived from the Diffie-Hellman session key,
+ Kij, produced during the HIP base exchange (see Section 4.1.3). The
+ Initiator has Kij during the creation of the I2 packet, and the
+ Responder has Kij once it receives the I2 packet. This is why I2 can
+ already contain encrypted information.
+
+ The KEYMAT is derived by feeding Kij into the key derivation function
+ defined by the DH Group ID. Currently, the only key derivation
+ function defined in this document is the Hash-based Key Derivation
+ Function (HKDF) [RFC5869] using the RHASH hash function. Other
+ documents may define new DH Group IDs and corresponding key
+ distribution functions.
+
+ In the following, we provide the details for deriving the keying
+ material using HKDF.
+
+ where
+
+ info = sort(HIT-I | HIT-R)
+ salt = #I | #J
+
+ Sort(HIT-I | HIT-R) is defined as the network byte order
+ concatenation of the two HITs, with the smaller HIT preceding the
+ larger HIT, resulting from the numeric comparison of the two HITs
+ interpreted as positive (unsigned) 128-bit integers in network byte
+ order. The #I and #J values are from the puzzle and its solution
+ that were exchanged in R1 and I2 messages when this HIP association
+ was set up. Both hosts have to store #I and #J values for the HIP
+ association for future use.
+
+
+
+Moskowitz, et al. Standards Track [Page 89]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The initial keys are drawn sequentially in the order that is
+ determined by the numeric comparison of the two HITs, with the
+ comparison method described in the previous paragraph. HOST_g
+ denotes the host with the greater HIT value, and HOST_l the host with
+ the lower HIT value.
+
+ The drawing order for the four initial keys is as follows:
+
+ HIP-gl encryption key for HOST_g's ENCRYPTED parameter
+
+ HIP-gl integrity (HMAC) key for HOST_g's outgoing HIP packets
+
+ HIP-lg encryption key for HOST_l's ENCRYPTED parameter
+
+ HIP-lg integrity (HMAC) key for HOST_l's outgoing HIP packets
+
+ The number of bits drawn for a given algorithm is the "natural" size
+ of the keys. For the mandatory algorithms, the following sizes
+ apply:
+
+ AES 128 or 256 bits
+
+ SHA-1 160 bits
+
+ SHA-256 256 bits
+
+ SHA-384 384 bits
+
+ NULL 0 bits
+
+ If other key sizes are used, they MUST be treated as different
+ encryption algorithms and defined separately.
+
+6.6. Initiation of a HIP Base Exchange
+
+ An implementation may originate a HIP base exchange to another host
+ based on a local policy decision, usually triggered by an application
+ datagram, in much the same way that an IPsec IKE key exchange can
+ dynamically create a Security Association. Alternatively, a system
+ may initiate a HIP exchange if it has rebooted or timed out, or
+ otherwise lost its HIP state, as described in Section 4.5.4.
+
+ The implementation prepares an I1 packet and sends it to the IP
+ address that corresponds to the peer host. The IP address of the
+ peer host may be obtained via conventional mechanisms, such as DNS
+ lookup. The I1 packet contents are specified in Section 5.3.1. The
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 90]
+
+RFC 7401 HIPv2 April 2015
+
+
+ selection of which source or destination Host Identity to use, if an
+ Initiator or Responder has more than one to choose from, is typically
+ a policy decision.
+
+ The following steps define the conceptual processing rules for
+ initiating a HIP base exchange:
+
+ 1. The Initiator receives one or more of the Responder's HITs and
+ one or more addresses from either a DNS lookup of the Responder's
+ FQDN, some other repository, or a local database. If the
+ Initiator does not know the Responder's HIT, it may attempt
+ opportunistic mode by using NULL (all zeros) as the Responder's
+ HIT (see also "HIP Opportunistic Mode" (Section 4.1.8)). If the
+ Initiator can choose from multiple Responder HITs, it selects a
+ HIT for which the Initiator supports the HIT Suite.
+
+ 2. The Initiator sends an I1 packet to one of the Responder's
+ addresses. The selection of which address to use is a local
+ policy decision.
+
+ 3. The Initiator includes the DH_GROUP_LIST in the I1 packet. The
+ selection and order of DH Group IDs in the DH_GROUP_LIST MUST be
+ stored by the Initiator, because this list is needed for later R1
+ processing. In most cases, the preferences regarding the DH
+ groups will be static, so no per-association storage is
+ necessary.
+
+ 4. Upon sending an I1 packet, the sender transitions to state
+ I1-SENT and starts a timer for which the timeout value SHOULD be
+ larger than the worst-case anticipated RTT. The sender SHOULD
+ also increment the trial counter associated with the I1.
+
+ 5. Upon timeout, the sender SHOULD retransmit the I1 packet and
+ restart the timer, up to a maximum of I1_RETRIES_MAX tries.
+
+6.6.1. Sending Multiple I1 Packets in Parallel
+
+ For the sake of minimizing the association establishment latency, an
+ implementation MAY send the same I1 packet to more than one of the
+ Responder's addresses. However, it MUST NOT send to more than three
+ (3) Responder addresses in parallel. Furthermore, upon timeout, the
+ implementation MUST refrain from sending the same I1 packet to
+ multiple addresses. That is, if it retries to initialize the
+ connection after a timeout, it MUST NOT send the I1 packet to more
+ than one destination address. These limitations are placed in order
+ to avoid congestion of the network, and potential DoS attacks that
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 91]
+
+RFC 7401 HIPv2 April 2015
+
+
+ might occur, e.g., because someone's claim to have hundreds or
+ thousands of addresses could generate a huge number of I1 packets
+ from the Initiator.
+
+ As the Responder is not guaranteed to distinguish the duplicate I1
+ packets it receives at several of its addresses (because it avoids
+ storing states when it answers back an R1 packet), the Initiator may
+ receive several duplicate R1 packets.
+
+ The Initiator SHOULD then select the initial preferred destination
+ address using the source address of the selected received R1, and use
+ the preferred address as a source address for the I2 packet.
+ Processing rules for received R1s are discussed in Section 6.8.
+
+6.6.2. Processing Incoming ICMP Protocol Unreachable Messages
+
+ A host may receive an ICMP 'Destination Protocol Unreachable' message
+ as a response to sending a HIP I1 packet. Such a packet may be an
+ indication that the peer does not support HIP, or it may be an
+ attempt to launch an attack by making the Initiator believe that the
+ Responder does not support HIP.
+
+ When a system receives an ICMP 'Destination Protocol Unreachable'
+ message while it is waiting for an R1 packet, it MUST NOT terminate
+ waiting. It MAY continue as if it had not received the ICMP message,
+ and send a few more I1 packets. Alternatively, it MAY take the ICMP
+ message as a hint that the peer most probably does not support HIP,
+ and return to state UNASSOCIATED earlier than otherwise. However, at
+ minimum, it MUST continue waiting for an R1 packet for a reasonable
+ time before returning to UNASSOCIATED.
+
+6.7. Processing of Incoming I1 Packets
+
+ An implementation SHOULD reply to an I1 with an R1 packet, unless the
+ implementation is unable or unwilling to set up a HIP association.
+ If the implementation is unable to set up a HIP association, the host
+ SHOULD send an 'ICMP Destination Protocol Unreachable,
+ Administratively Prohibited' message to the I1 packet source IP
+ address. If the implementation is unwilling to set up a HIP
+ association, the host MAY ignore the I1 packet. This latter case may
+ occur during a DoS attack such as an I1 packet flood.
+
+ The implementation SHOULD be able to handle a storm of received I1
+ packets, discarding those with common content that arrive within a
+ small time delta.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 92]
+
+RFC 7401 HIPv2 April 2015
+
+
+ A spoofed I1 packet can result in an R1 attack on a system. An R1
+ packet sender MUST have a mechanism to rate-limit R1 packets sent to
+ an address.
+
+ It is RECOMMENDED that the HIP state machine does not transition upon
+ sending an R1 packet.
+
+ The following steps define the conceptual processing rules for
+ responding to an I1 packet:
+
+ 1. The Responder MUST check that the Responder's HIT in the received
+ I1 packet is either one of its own HITs or NULL. Otherwise, it
+ must drop the packet.
+
+ 2. If the Responder is in ESTABLISHED state, the Responder MAY
+ respond to this with an R1 packet, prepare to drop an existing
+ HIP security association with the peer, and stay at ESTABLISHED
+ state.
+
+ 3. If the Responder is in I1-SENT state, it MUST make a comparison
+ between the sender's HIT and its own (i.e., the receiver's) HIT.
+ If the sender's HIT is greater than its own HIT, it should drop
+ the I1 packet and stay at I1-SENT. If the sender's HIT is
+ smaller than its own HIT, it SHOULD send the R1 packet and stay
+ at I1-SENT. The HIT comparison is performed as defined in
+ Section 6.5.
+
+ 4. If the implementation chooses to respond to the I1 packet with an
+ R1 packet, it creates a new R1 or selects a precomputed R1
+ according to the format described in Section 5.3.2. It creates
+ or chooses an R1 that contains its most preferred DH public value
+ that is also contained in the DH_GROUP_LIST in the I1 packet. If
+ no suitable DH Group ID was contained in the DH_GROUP_LIST in the
+ I1 packet, it sends an R1 with any suitable DH public key.
+
+ 5. If the received Responder's HIT in the I1 is NULL, the Responder
+ selects a HIT with the same HIT Suite as the Initiator's HIT. If
+ this HIT Suite is not supported by the Responder, it SHOULD
+ select a REQUIRED HIT Suite from Section 5.2.10, which is
+ currently RSA/DSA/SHA-256. Other than that, selecting the HIT is
+ a local policy matter.
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 93]
+
+RFC 7401 HIPv2 April 2015
+
+
+ 6. The Responder expresses its supported HIP transport formats in
+ the TRANSPORT_FORMAT_LIST as described in Section 5.2.11. The
+ Responder MUST provide at least one payload transport format
+ type.
+
+ 7. The Responder sends the R1 packet to the source IP address of the
+ I1 packet.
+
+6.7.1. R1 Management
+
+ All compliant implementations MUST be able to produce R1 packets;
+ even if a device is configured by policy to only initiate
+ associations, it must be able to process I1s in cases of recovery
+ from loss of state or key exhaustion. An R1 packet MAY be
+ precomputed. An R1 packet MAY be reused for a short time period,
+ denoted here as "Delta T", which is implementation dependent, and
+ SHOULD be deprecated and not used once a valid response I2 packet has
+ been received from an Initiator. During an I1 message storm, an R1
+ packet MAY be reused beyond the normal Delta T. R1 information MUST
+ NOT be discarded until a time period "Delta S" (again, implementation
+ dependent) after the R1 packet is no longer being offered. Delta S
+ is the assumed maximum time needed for the last I2 packet in response
+ to the R1 packet to arrive back at the Responder.
+
+ Implementations that support multiple DH groups MAY precompute R1
+ packets for each supported group so that incoming I1 packets with
+ different DH Group IDs in the DH_GROUP_LIST can be served quickly.
+
+ An implementation MAY keep state about received I1 packets and match
+ the received I2 packets against the state, as discussed in
+ Section 4.1.1.
+
+6.7.2. Handling of Malformed Messages
+
+ If an implementation receives a malformed I1 packet, it SHOULD NOT
+ respond with a NOTIFY message, as such a practice could open up a
+ potential denial-of-service threat. Instead, it MAY respond with an
+ ICMP packet, as defined in Section 5.4.
+
+6.8. Processing of Incoming R1 Packets
+
+ A system receiving an R1 packet MUST first check to see if it has
+ sent an I1 packet to the originator of the R1 packet (i.e., it is in
+ state I1-SENT). If so, it SHOULD process the R1 as described below,
+ send an I2 packet, and transition to state I2-SENT, setting a timer
+ to protect the I2 packet. If the system is in state I2-SENT, it MAY
+ respond to the R1 packet if the R1 packet has a larger R1 generation
+ counter; if so, it should drop its state due to processing the
+
+
+
+Moskowitz, et al. Standards Track [Page 94]
+
+RFC 7401 HIPv2 April 2015
+
+
+ previous R1 packet and start over from state I1-SENT. If the system
+ is in any other state with respect to that host, the system SHOULD
+ silently drop the R1 packet.
+
+ When sending multiple I1 packets, an Initiator SHOULD wait for a
+ small amount of time after the first R1 reception to allow possibly
+ multiple R1 packets to arrive, and it SHOULD respond to an R1 packet
+ among the set with the largest R1 generation counter.
+
+ The following steps define the conceptual processing rules for
+ responding to an R1 packet:
+
+ 1. A system receiving an R1 MUST first check to see if it has sent
+ an I1 packet to the originator of the R1 packet (i.e., it has a
+ HIP association that is in state I1-SENT and that is associated
+ with the HITs in the R1). Unless the I1 packet was sent in
+ opportunistic mode (see Section 4.1.8), the IP addresses in the
+ received R1 packet SHOULD be ignored by the R1 processing and,
+ when looking up the right HIP association, the received R1
+ packet SHOULD be matched against the associations using only the
+ HITs. If a match exists, the system should process the R1
+ packet as described below.
+
+ 2. Otherwise, if the system is in any state other than I1-SENT or
+ I2-SENT with respect to the HITs included in the R1 packet, it
+ SHOULD silently drop the R1 packet and remain in the current
+ state.
+
+ 3. If the HIP association state is I1-SENT or I2-SENT, the received
+ Initiator's HIT MUST correspond to the HIT used in the original
+ I1. Also, the Responder's HIT MUST correspond to the one used
+ in the I1, unless the I1 packet contained a NULL HIT.
+
+ 4. The system SHOULD validate the R1 signature before applying
+ further packet processing, according to Section 5.2.15.
+
+ 5. If the HIP association state is I1-SENT, and multiple valid R1
+ packets are present, the system MUST select from among the R1
+ packets with the largest R1 generation counter.
+
+ 6. The system MUST check that the Initiator's HIT Suite is
+ contained in the HIT_SUITE_LIST parameter in the R1 packet
+ (i.e., the Initiator's HIT Suite is supported by the Responder).
+ If the HIT Suite is supported by the Responder, the system
+ proceeds normally. Otherwise, the system MAY stay in state
+ I1-SENT and restart the BEX by sending a new I1 packet with an
+ Initiator HIT that is supported by the Responder and hence is
+ contained in the HIT_SUITE_LIST in the R1 packet. The system
+
+
+
+Moskowitz, et al. Standards Track [Page 95]
+
+RFC 7401 HIPv2 April 2015
+
+
+ MAY abort the BEX if no suitable source HIT is available. The
+ system SHOULD wait for an acceptable time span to allow further
+ R1 packets with higher R1 generation counters or different HIT
+ and HIT Suites to arrive before restarting or aborting the BEX.
+
+ 7. The system MUST check that the DH Group ID in the DIFFIE_HELLMAN
+ parameter in the R1 matches the first DH Group ID in the
+ Responder's DH_GROUP_LIST in the R1 packet, and also that this
+ Group ID corresponds to a value that was included in the
+ Initiator's DH_GROUP_LIST in the I1 packet. If the DH Group ID
+ of the DIFFIE_HELLMAN parameter does not express the Responder's
+ best choice, the Initiator can conclude that the DH_GROUP_LIST
+ in the I1 packet was adversely modified. In such a case, the
+ Initiator MAY send a new I1 packet; however, it SHOULD NOT
+ change its preference in the DH_GROUP_LIST in the new I1 packet.
+ Alternatively, the Initiator MAY abort the HIP base exchange.
+
+ 8. If the HIP association state is I2-SENT, the system MAY re-enter
+ state I1-SENT and process the received R1 packet if it has a
+ larger R1 generation counter than the R1 packet responded to
+ previously.
+
+ 9. The R1 packet may have the A-bit set -- in this case, the system
+ MAY choose to refuse it by dropping the R1 packet and returning
+ to state UNASSOCIATED. The system SHOULD consider dropping the
+ R1 packet only if it used a NULL HIT in the I1 packet. If the
+ A-bit is set, the Responder's HIT is anonymous and SHOULD NOT be
+ stored permanently.
+
+ 10. The system SHOULD attempt to validate the HIT against the
+ received Host Identity by using the received Host Identity to
+ construct a HIT and verify that it matches the Sender's HIT.
+
+ 11. The system MUST store the received R1 generation counter for
+ future reference.
+
+ 12. The system attempts to solve the puzzle in the R1 packet. The
+ system MUST terminate the search after exceeding the remaining
+ lifetime of the puzzle. If the puzzle is not successfully
+ solved, the implementation MAY either resend the I1 packet
+ within the retry bounds or abandon the HIP base exchange.
+
+ 13. The system computes standard Diffie-Hellman keying material
+ according to the public value and Group ID provided in the
+ DIFFIE_HELLMAN parameter. The Diffie-Hellman keying material
+ Kij is used for key extraction as specified in Section 6.5.
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 96]
+
+RFC 7401 HIPv2 April 2015
+
+
+ 14. The system selects the HIP_CIPHER ID from the choices presented
+ in the R1 packet and uses the selected values subsequently when
+ generating and using encryption keys, and when sending the I2
+ packet. If the proposed alternatives are not acceptable to the
+ system, it may either resend an I1 within the retry bounds or
+ abandon the HIP base exchange.
+
+ 15. The system chooses one suitable transport format from the
+ TRANSPORT_FORMAT_LIST and includes the respective transport
+ format parameter in the subsequent I2 packet.
+
+ 16. The system initializes the remaining variables in the associated
+ state, including Update ID counters.
+
+ 17. The system prepares and sends an I2 packet, as described in
+ Section 5.3.3.
+
+ 18. The system SHOULD start a timer whose timeout value SHOULD be
+ larger than the worst-case anticipated RTT, and MUST increment a
+ trial counter associated with the I2 packet. The sender SHOULD
+ retransmit the I2 packet upon a timeout and restart the timer,
+ up to a maximum of I2_RETRIES_MAX tries.
+
+ 19. If the system is in state I1-SENT, it SHALL transition to state
+ I2-SENT. If the system is in any other state, it remains in the
+ current state.
+
+6.8.1. Handling of Malformed Messages
+
+ If an implementation receives a malformed R1 message, it MUST
+ silently drop the packet. Sending a NOTIFY or ICMP would not help,
+ as the sender of the R1 packet typically doesn't have any state. An
+ implementation SHOULD wait for some more time for a possibly well-
+ formed R1, after which it MAY try again by sending a new I1 packet.
+
+6.9. Processing of Incoming I2 Packets
+
+ Upon receipt of an I2 packet, the system MAY perform initial checks
+ to determine whether the I2 packet corresponds to a recent R1 packet
+ that has been sent out, if the Responder keeps such state. For
+ example, the sender could check whether the I2 packet is from an
+ address or HIT for which the Responder has recently received an I1.
+ The R1 packet may have had opaque data included that was echoed back
+ in the I2 packet. If the I2 packet is considered to be suspect, it
+ MAY be silently discarded by the system.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 97]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Otherwise, the HIP implementation SHOULD process the I2 packet. This
+ includes validation of the puzzle solution, generating the
+ Diffie-Hellman key, possibly decrypting the Initiator's Host
+ Identity, verifying the signature, creating state, and finally
+ sending an R2 packet.
+
+ The following steps define the conceptual processing rules for
+ responding to an I2 packet:
+
+ 1. The system MAY perform checks to verify that the I2 packet
+ corresponds to a recently sent R1 packet. Such checks are
+ implementation dependent. See Appendix A for a description of
+ an example implementation.
+
+ 2. The system MUST check that the Responder's HIT corresponds to
+ one of its own HITs and MUST drop the packet otherwise.
+
+ 3. The system MUST further check that the Initiator's HIT Suite is
+ supported. The Responder SHOULD silently drop I2 packets with
+ unsupported Initiator HITs.
+
+ 4. If the system's state machine is in the R2-SENT state, the
+ system MAY check to see if the newly received I2 packet is
+ similar to the one that triggered moving to R2-SENT. If so, it
+ MAY retransmit a previously sent R2 packet and reset the R2-SENT
+ timer, and the state machine stays in R2-SENT.
+
+ 5. If the system's state machine is in the I2-SENT state, the
+ system MUST make a comparison between its local and sender's
+ HITs (similar to the comparison method described in
+ Section 6.5). If the local HIT is smaller than the sender's
+ HIT, it should drop the I2 packet, use the peer Diffie-Hellman
+ key and nonce #I from the R1 packet received earlier, and get
+ the local Diffie-Hellman key and nonce #J from the I2 packet
+ sent to the peer earlier. Otherwise, the system should process
+ the received I2 packet and drop any previously derived
+ Diffie-Hellman keying material Kij it might have formed upon
+ sending the I2 packet previously. The peer Diffie-Hellman key
+ and the nonce #J are taken from the I2 packet that just arrived.
+ The local Diffie-Hellman key and the nonce #I are the ones that
+ were sent earlier in the R1 packet.
+
+ 6. If the system's state machine is in the I1-SENT state, and the
+ HITs in the I2 packet match those used in the previously sent I1
+ packet, the system uses this received I2 packet as the basis for
+ the HIP association it was trying to form, and stops
+ retransmitting I1 packets (provided that the I2 packet passes
+ the additional checks below).
+
+
+
+Moskowitz, et al. Standards Track [Page 98]
+
+RFC 7401 HIPv2 April 2015
+
+
+ 7. If the system's state machine is in any state other than
+ R2-SENT, the system SHOULD check that the echoed R1 generation
+ counter in the I2 packet is within the acceptable range if the
+ counter is included. Implementations MUST accept puzzles from
+ the current generation and MAY accept puzzles from earlier
+ generations. If the generation counter in the newly received I2
+ packet is outside the accepted range, the I2 packet is stale
+ (and perhaps replayed) and SHOULD be dropped.
+
+ 8. The system MUST validate the solution to the puzzle by computing
+ the hash described in Section 5.3.3 using the same RHASH
+ algorithm.
+
+ 9. The I2 packet MUST have a single value in the HIP_CIPHER
+ parameter, which MUST match one of the values offered to the
+ Initiator in the R1 packet.
+
+ 10. The system must derive Diffie-Hellman keying material Kij based
+ on the public value and Group ID in the DIFFIE_HELLMAN
+ parameter. This key is used to derive the HIP association keys,
+ as described in Section 6.5. If the Diffie-Hellman Group ID is
+ unsupported, the I2 packet is silently dropped.
+
+ 11. The encrypted HOST_ID is decrypted by the Initiator's encryption
+ key defined in Section 6.5. If the decrypted data is not a
+ HOST_ID parameter, the I2 packet is silently dropped.
+
+ 12. The implementation SHOULD also verify that the Initiator's HIT
+ in the I2 packet corresponds to the Host Identity sent in the I2
+ packet. (Note: some middleboxes may not be able to make this
+ verification.)
+
+ 13. The system MUST process the TRANSPORT_FORMAT_LIST parameter.
+ Other documents specifying transport formats (e.g., [RFC7402])
+ contain specifications for handling any specific transport
+ selected.
+
+ 14. The system MUST verify the HIP_MAC according to the procedures
+ in Section 5.2.12.
+
+ 15. The system MUST verify the HIP_SIGNATURE according to
+ Sections 5.2.14 and 5.3.3.
+
+ 16. If the checks above are valid, then the system proceeds with
+ further I2 processing; otherwise, it discards the I2 and its
+ state machine remains in the same state.
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 99]
+
+RFC 7401 HIPv2 April 2015
+
+
+ 17. The I2 packet may have the A-bit set -- in this case, the system
+ MAY choose to refuse it by dropping the I2 and the state machine
+ returns to state UNASSOCIATED. If the A-bit is set, the
+ Initiator's HIT is anonymous and should not be stored
+ permanently.
+
+ 18. The system initializes the remaining variables in the associated
+ state, including Update ID counters.
+
+ 19. Upon successful processing of an I2 message when the system's
+ state machine is in state UNASSOCIATED, I1-SENT, I2-SENT, or
+ R2-SENT, an R2 packet is sent and the system's state machine
+ transitions to state R2-SENT.
+
+ 20. Upon successful processing of an I2 packet when the system's
+ state machine is in state ESTABLISHED, the old HIP association
+ is dropped and a new one is installed, an R2 packet is sent, and
+ the system's state machine transitions to R2-SENT.
+
+ 21. Upon the system's state machine transitioning to R2-SENT, the
+ system starts a timer. The state machine transitions to
+ ESTABLISHED if some data has been received on the incoming HIP
+ association, or an UPDATE packet has been received (or some
+ other packet that indicates that the peer system's state machine
+ has moved to ESTABLISHED). If the timer expires (allowing for a
+ maximal amount of retransmissions of I2 packets), the state
+ machine transitions to ESTABLISHED.
+
+6.9.1. Handling of Malformed Messages
+
+ If an implementation receives a malformed I2 message, the behavior
+ SHOULD depend on how many checks the message has already passed. If
+ the puzzle solution in the message has already been checked, the
+ implementation SHOULD report the error by responding with a NOTIFY
+ packet. Otherwise, the implementation MAY respond with an ICMP
+ message as defined in Section 5.4.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 100]
+
+RFC 7401 HIPv2 April 2015
+
+
+6.10. Processing of Incoming R2 Packets
+
+ An R2 packet received in state UNASSOCIATED, I1-SENT, or ESTABLISHED
+ results in the R2 packet being dropped and the state machine staying
+ in the same state. If an R2 packet is received in state I2-SENT, it
+ MUST be processed.
+
+ The following steps define the conceptual processing rules for an
+ incoming R2 packet:
+
+ 1. If the system is in any state other than I2-SENT, the R2 packet
+ is silently dropped.
+
+ 2. The system MUST verify that the HITs in use correspond to the
+ HITs that were received in the R1 packet that caused the
+ transition to the I1-SENT state.
+
+ 3. The system MUST verify the HIP_MAC_2 according to the procedures
+ in Section 5.2.13.
+
+ 4. The system MUST verify the HIP signature according to the
+ procedures in Section 5.2.14.
+
+ 5. If any of the checks above fail, there is a high probability of
+ an ongoing man-in-the-middle or other security attack. The
+ system SHOULD act accordingly, based on its local policy.
+
+ 6. Upon successful processing of the R2 packet, the state machine
+ transitions to state ESTABLISHED.
+
+6.11. Sending UPDATE Packets
+
+ A host sends an UPDATE packet when it intends to update some
+ information related to a HIP association. There are a number of
+ possible scenarios when this can occur, e.g., mobility management and
+ rekeying of an existing ESP Security Association. The following
+ paragraphs define the conceptual rules for sending an UPDATE packet
+ to the peer. Additional steps can be defined in other documents
+ where the UPDATE packet is used.
+
+ The sequence of UPDATE messages is indicated by their SEQ parameter.
+ Before sending an UPDATE message, the system first determines whether
+ there are any outstanding UPDATE messages that may conflict with the
+ new UPDATE message under consideration. When multiple UPDATEs are
+ outstanding (not yet acknowledged), the sender must assume that such
+ UPDATEs may be processed in an arbitrary order by the receiver.
+ Therefore, any new UPDATEs that depend on a previous outstanding
+ UPDATE being successfully received and acknowledged MUST be postponed
+
+
+
+Moskowitz, et al. Standards Track [Page 101]
+
+RFC 7401 HIPv2 April 2015
+
+
+ until reception of the necessary ACK(s) occurs. One way to prevent
+ any conflicts is to only allow one outstanding UPDATE at a time.
+ However, allowing multiple UPDATEs may improve the performance of
+ mobility and multihoming protocols.
+
+ The following steps define the conceptual processing rules for
+ sending UPDATE packets:
+
+ 1. The first UPDATE packet is sent with an Update ID of zero.
+ Otherwise, the system increments its own Update ID value by one
+ before continuing the steps below.
+
+ 2. The system creates an UPDATE packet that contains a SEQ parameter
+ with the current value of the Update ID. The UPDATE packet MAY
+ also include zero or more ACKs of the peer's Update ID(s) from
+ previously received UPDATE SEQ parameter(s).
+
+ 3. The system sends the created UPDATE packet and starts an UPDATE
+ timer. The default value for the timer is 2 * RTT estimate. If
+ multiple UPDATEs are outstanding, multiple timers are in effect.
+
+ 4. If the UPDATE timer expires, the UPDATE is resent. The UPDATE
+ can be resent UPDATE_RETRY_MAX times. The UPDATE timer SHOULD be
+ exponentially backed off for subsequent retransmissions. If no
+ acknowledgment is received from the peer after UPDATE_RETRY_MAX
+ times, the HIP association is considered to be broken and the
+ state machine SHOULD move from state ESTABLISHED to state CLOSING
+ as depicted in Section 4.4.4. The UPDATE timer is cancelled upon
+ receiving an ACK from the peer that acknowledges receipt of the
+ UPDATE.
+
+6.12. Receiving UPDATE Packets
+
+ When a system receives an UPDATE packet, its processing depends on
+ the state of the HIP association and the presence and values of the
+ SEQ and ACK parameters. Typically, an UPDATE message also carries
+ optional parameters whose handling is defined in separate documents.
+
+ For each association, a host stores the peer's next expected
+ in-sequence Update ID ("peer Update ID"). Initially, this value is
+ zero. Update ID comparisons of "less than" and "greater than" are
+ performed with respect to a circular sequence number space. Hence, a
+ wraparound after 2^32 updates has to be expected and MUST be handled
+ accordingly.
+
+ The sender MAY send multiple outstanding UPDATE messages. These
+ messages are processed in the order in which they are received at the
+ receiver (i.e., no resequencing is performed). When processing
+
+
+
+Moskowitz, et al. Standards Track [Page 102]
+
+RFC 7401 HIPv2 April 2015
+
+
+ UPDATEs out of order, the receiver MUST keep track of which UPDATEs
+ were previously processed, so that duplicates or retransmissions are
+ ACKed and not reprocessed. A receiver MAY choose to define a receive
+ window of Update IDs that it is willing to process at any given time,
+ and discard received UPDATEs falling outside of that window.
+
+ The following steps define the conceptual processing rules for
+ receiving UPDATE packets:
+
+ 1. If there is no corresponding HIP association, the implementation
+ MAY reply with an ICMP Parameter Problem, as specified in
+ Section 5.4.4.
+
+ 2. If the association is in the ESTABLISHED state and the SEQ (but
+ not ACK) parameter is present, the UPDATE is processed and
+ replied to as described in Section 6.12.1.
+
+ 3. If the association is in the ESTABLISHED state and the ACK (but
+ not SEQ) parameter is present, the UPDATE is processed as
+ described in Section 6.12.2.
+
+ 4. If the association is in the ESTABLISHED state and there are both
+ an ACK and SEQ in the UPDATE, the ACK is first processed as
+ described in Section 6.12.2, and then the rest of the UPDATE is
+ processed as described in Section 6.12.1.
+
+6.12.1. Handling a SEQ Parameter in a Received UPDATE Message
+
+ The following steps define the conceptual processing rules for
+ handling a SEQ parameter in a received UPDATE packet:
+
+ 1. If the Update ID in the received SEQ is not the next in the
+ sequence of Update IDs and is greater than the receiver's window
+ for new UPDATEs, the packet MUST be dropped.
+
+ 2. If the Update ID in the received SEQ corresponds to an UPDATE
+ that has recently been processed, the packet is treated as a
+ retransmission. The HIP_MAC verification (next step) MUST NOT be
+ skipped. (A byte-by-byte comparison of the received packet and a
+ stored packet would be acceptable, though.) It is recommended
+ that a host caches UPDATE packets sent with ACKs to avoid the
+ cost of generating a new ACK packet to respond to a replayed
+ UPDATE. The system MUST acknowledge, again, such (apparent)
+ UPDATE message retransmissions but SHOULD also consider rate-
+ limiting such retransmission responses to guard against replay
+ attacks.
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 103]
+
+RFC 7401 HIPv2 April 2015
+
+
+ 3. The system MUST verify the HIP_MAC in the UPDATE packet. If the
+ verification fails, the packet MUST be dropped.
+
+ 4. The system MAY verify the SIGNATURE in the UPDATE packet. If the
+ verification fails, the packet SHOULD be dropped and an error
+ message logged.
+
+ 5. If a new SEQ parameter is being processed, the parameters in the
+ UPDATE are then processed. The system MUST record the Update ID
+ in the received SEQ parameter, for replay protection.
+
+ 6. An UPDATE acknowledgment packet with the ACK parameter is
+ prepared and sent to the peer. This ACK parameter MAY be
+ included in a separate UPDATE or piggybacked in an UPDATE with
+ the SEQ parameter, as described in Section 5.3.5. The ACK
+ parameter MAY acknowledge more than one of the peer's Update IDs.
+
+6.12.2. Handling an ACK Parameter in a Received UPDATE Packet
+
+ The following steps define the conceptual processing rules for
+ handling an ACK parameter in a received UPDATE packet:
+
+ 1. The sequence number reported in the ACK must match with an UPDATE
+ packet sent earlier that has not already been acknowledged. If
+ no match is found or if the ACK does not acknowledge a new
+ UPDATE, then either the packet MUST be dropped if no SEQ
+ parameter is present, or the processing steps in Section 6.12.1
+ are followed.
+
+ 2. The system MUST verify the HIP_MAC in the UPDATE packet. If the
+ verification fails, the packet MUST be dropped.
+
+ 3. The system MAY verify the SIGNATURE in the UPDATE packet. If the
+ verification fails, the packet SHOULD be dropped and an error
+ message logged.
+
+ 4. The corresponding UPDATE timer is stopped (see Section 6.11) so
+ that the now-acknowledged UPDATE is no longer retransmitted. If
+ multiple UPDATEs are acknowledged, multiple timers are stopped.
+
+6.13. Processing of NOTIFY Packets
+
+ Processing of NOTIFY packets is OPTIONAL. If processed, any errors
+ in a received NOTIFICATION parameter SHOULD be logged. Received
+ errors MUST be considered only as informational, and the receiver
+ SHOULD NOT change its HIP state (see Section 4.4.2) purely based on
+ the received NOTIFY message.
+
+
+
+
+Moskowitz, et al. Standards Track [Page 104]
+
+RFC 7401 HIPv2 April 2015
+
+
+6.14. Processing of CLOSE Packets
+
+ When the host receives a CLOSE message, it responds with a CLOSE_ACK
+ message and moves to the CLOSED state. (The authenticity of the
+ CLOSE message is verified using both HIP_MAC and SIGNATURE.) This
+ processing applies whether or not the HIP association state is
+ CLOSING, in order to handle simultaneous CLOSE messages from both
+ ends that cross in flight.
+
+ The HIP association is not discarded before the host moves to the
+ UNASSOCIATED state.
+
+ Once the closing process has started, any new need to send data
+ packets triggers the creation and establishment of a new HIP
+ association, starting with sending an I1 packet.
+
+ If there is no corresponding HIP association, the CLOSE packet is
+ dropped.
+
+6.15. Processing of CLOSE_ACK Packets
+
+ When a host receives a CLOSE_ACK message, it verifies that it is in
+ the CLOSING or CLOSED state and that the CLOSE_ACK was in response to
+ the CLOSE. A host can map CLOSE_ACK messages to CLOSE messages by
+ comparing the value of ECHO_REQUEST_SIGNED (in the CLOSE packet) to
+ the value of ECHO_RESPONSE_SIGNED (in the CLOSE_ACK packet).
+
+ The CLOSE_ACK contains the HIP_MAC and the SIGNATURE parameters for
+ verification. The state is discarded when the state changes to
+ UNASSOCIATED and, after that, the host MAY respond with an ICMP
+ Parameter Problem to an incoming CLOSE message (see Section 5.4.4).
+
+6.16. Handling State Loss
+
+ In the case of a system crash and unanticipated state loss, the
+ system SHOULD delete the corresponding HIP state, including the
+ keying material. That is, the state SHOULD NOT be stored in
+ long-term storage. If the implementation does drop the state
+ (as RECOMMENDED), it MUST also drop the peer's R1 generation counter
+ value, unless a local policy explicitly defines that the value of
+ that particular host is stored. An implementation MUST NOT store a
+ peer's R1 generation counters by default, but storing R1 generation
+ counter values, if done, MUST be configured by explicit HITs.
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 105]
+
+RFC 7401 HIPv2 April 2015
+
+
+7. HIP Policies
+
+ There are a number of variables that will influence the HIP base
+ exchanges that each host must support. All HIP implementations MUST
+ support more than one simultaneous HI, at least one of which SHOULD
+ be reserved for anonymous usage. Although anonymous HIs will be
+ rarely used as Responders' HIs, they will be common for Initiators.
+ Support for more than two HIs is RECOMMENDED.
+
+ Initiators MAY use a different HI for different Responders to provide
+ basic privacy. Whether such private HIs are used repeatedly with the
+ same Responder, and how long these HIs are used, are decided by local
+ policy and depend on the privacy requirements of the Initiator.
+
+ The value of #K used in the HIP R1 must be chosen with care. Values
+ of #K that are too high will exclude clients with weak CPUs because
+ these devices cannot solve the puzzle within a reasonable amount of
+ time. #K should only be raised if a Responder is under high load,
+ i.e., it cannot process all incoming HIP handshakes any more. If a
+ Responder is not under high load, #K SHOULD be 0.
+
+ Responders that only respond to selected Initiators require an Access
+ Control List (ACL), representing for which hosts they accept HIP base
+ exchanges, and the preferred transport format and local lifetimes.
+ Wildcarding SHOULD be supported for such ACLs, and also for
+ Responders that offer public or anonymous services.
+
+8. Security Considerations
+
+ HIP is designed to provide secure authentication of hosts. HIP also
+ attempts to limit the exposure of the host to various denial-of-
+ service and man-in-the-middle (MitM) attacks. In doing so, HIP
+ itself is subject to its own DoS and MitM attacks that potentially
+ could be more damaging to a host's ability to conduct business as
+ usual.
+
+ Denial-of-service attacks often take advantage of asymmetries in the
+ cost of starting an association. One example of such asymmetry is
+ the need of a Responder to store local state while a malicious
+ Initiator can stay stateless. HIP makes no attempt to increase the
+ cost of the start of state at the Initiator, but makes an effort to
+ reduce the cost for the Responder. This is accomplished by having
+ the Responder start the 3-way exchange instead of the Initiator,
+ making the HIP exchange 4 packets long. In doing this, the first
+ packet from the Responder, R1, becomes a 'stock' packet that the
+ Responder MAY use many times, until some Initiator has provided a
+ valid response to such an R1 packet. During an I1 packet storm, the
+ host may reuse the same DH value also, even if some Initiator has
+
+
+
+Moskowitz, et al. Standards Track [Page 106]
+
+RFC 7401 HIPv2 April 2015
+
+
+ provided a valid response using that particular DH value. However,
+ such behavior is discouraged and should be avoided. Using the same
+ Diffie-Hellman values and random puzzle #I value has some risks.
+ This risk needs to be balanced against a potential storm of HIP I1
+ packets.
+
+ This shifting of the start of state cost to the Initiator in creating
+ the I2 HIP packet presents another DoS attack. The attacker can
+ spoof the I1 packet, and the Responder sends out the R1 HIP packet.
+ This could conceivably tie up the 'Initiator' with evaluating the R1
+ HIP packet, and creating the I2 packet. The defense against this
+ attack is to simply ignore any R1 packet where a corresponding I1
+ packet was not sent (as defined in Section 6.8, step 1).
+
+ The R1 packet is considerably larger than the I1 packet. This
+ asymmetry can be exploited in a reflection attack. A malicious
+ attacker could spoof the IP address of a victim and send a flood of
+ I1 messages to a powerful Responder. For each small I1 packet, the
+ Responder would send a larger R1 packet to the victim. The
+ difference in packet sizes can further amplify a flooding attack
+ against the victim. To avoid such reflection attacks, the Responder
+ SHOULD rate-limit the sending of R1 packets in general or SHOULD
+ rate-limit the sending of R1 packets to a specific IP address.
+
+ Floods of forged I2 packets form a second kind of DoS attack. Once
+ the attacking Initiator has solved the puzzle, it can send packets
+ with spoofed IP source addresses with either an invalid HIP signature
+ or invalid encrypted HIP payload (in the ENCRYPTED parameter). This
+ would take resources in the Responder's part to reach the point to
+ discover that the I2 packet cannot be completely processed. The
+ defense against this attack is that after N bad I2 packets with the
+ same puzzle solution, the Responder would discard any I2 packets that
+ contain the given solution. This will shut down the attack. The
+ attacker would have to request another R1 packet and use that to
+ launch a new attack. The Responder could increase the value of #K
+ while under attack. Keeping a list of solutions from malformed
+ packets requires that the Responder keeps state for these malformed
+ I2 packets. This state has to be kept until the R1 counter is
+ increased. As malformed packets are generally filtered by their
+ checksum before signature verification, only solutions in packets
+ that are forged to pass the checksum and puzzle are put into the
+ blacklist. In addition, a valid puzzle is required before a new list
+ entry is created. Hence, attackers that intend to flood the
+ blacklist must solve puzzles first.
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 107]
+
+RFC 7401 HIPv2 April 2015
+
+
+ A third form of DoS attack is emulating the restart of state after a
+ reboot of one of the peers. A restarting host would send an I1
+ packet to the peers, which would respond with an R1 packet even if it
+ were in the ESTABLISHED state. If the I1 packet were spoofed, the
+ resulting R1 packet would be received unexpectedly by the spoofed
+ host and would be dropped, as in the first case above.
+
+ A fourth form of DoS attack is emulating the closing of the HIP
+ association. HIP relies on timers and a CLOSE/CLOSE_ACK handshake to
+ explicitly signal the end of a HIP association. Because both CLOSE
+ and CLOSE_ACK messages contain a HIP_MAC, an outsider cannot close a
+ connection. The presence of an additional SIGNATURE allows
+ middleboxes to inspect these messages and discard the associated
+ state (e.g., for firewalling, SPI-based NATing, etc.). However, the
+ optional behavior of replying to CLOSE with an ICMP Parameter Problem
+ packet (as described in Section 5.4.4) might allow an attacker
+ spoofing the source IP address to send CLOSE messages to launch
+ reflection attacks.
+
+ A fifth form of DoS attack is replaying R1s to cause the Initiator to
+ solve stale puzzles and become out of synchronization with the
+ Responder. The R1 generation counter is a monotonically increasing
+ counter designed to protect against this attack, as described in
+ Section 4.1.4.
+
+ Man-in-the-middle attacks are difficult to defend against, without
+ third-party authentication. A skillful MitM could easily handle all
+ parts of HIP, but HIP indirectly provides the following protection
+ from a MitM attack. If the Responder's HI is retrieved from a signed
+ DNS zone, a certificate, or through some other secure means, the
+ Initiator can use this to validate the R1 HIP packet.
+
+ Likewise, if the Initiator's HI is in a secure DNS zone, a trusted
+ certificate, or otherwise securely available, the Responder can
+ retrieve the HI (after having got the I2 HIP packet) and verify that
+ the HI indeed can be trusted.
+
+ The HIP "opportunistic mode" concept has been introduced in this
+ document, but this document does not specify what the semantics of
+ such a connection setup are for applications. There are certain
+ concerns with opportunistic mode, as discussed in Section 4.1.8.
+
+ NOTIFY messages are used only for informational purposes, and they
+ are unacknowledged. A HIP implementation cannot rely solely on the
+ information received in a NOTIFY message because the packet may have
+ been replayed. An implementation SHOULD NOT change any state
+ information purely based on a received NOTIFY message.
+
+
+
+
+Moskowitz, et al. Standards Track [Page 108]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Since not all hosts will ever support HIP, ICMP 'Destination Protocol
+ Unreachable' messages are to be expected and may be used for a DoS
+ attack. Against an Initiator, the attack would look like the
+ Responder does not support HIP, but shortly after receiving the ICMP
+ message, the Initiator would receive a valid R1 HIP packet. Thus, to
+ protect against this attack, an Initiator SHOULD NOT react to an ICMP
+ message until a reasonable delta time to get the real Responder's R1
+ HIP packet. A similar attack against the Responder is more involved.
+ Normally, if an I1 message received by a Responder was a bogus one
+ sent by an attacker, the Responder may receive an ICMP message from
+ the IP address the R1 message was sent to. However, a sophisticated
+ attacker can try to take advantage of such behavior and try to break
+ up the HIP base exchange by sending such an ICMP message to the
+ Responder before the Initiator has a chance to send a valid I2
+ message. Hence, the Responder SHOULD NOT act on such an ICMP
+ message. Especially, it SHOULD NOT remove any minimal state created
+ when it sent the R1 HIP packet (if it did create one), but wait for
+ either a valid I2 HIP packet or the natural timeout (that is, if R1
+ packets are tracked at all). Likewise, the Initiator SHOULD ignore
+ any ICMP message while waiting for an R2 HIP packet, and SHOULD
+ delete any pending state only after a natural timeout.
+
+9. IANA Considerations
+
+ IANA has reserved protocol number 139 for the Host Identity Protocol
+ and included it in the "IPv6 Extension Header Types" registry
+ [RFC7045] and the "Assigned Internet Protocol Numbers" registry. The
+ reference in both of these registries has been updated from [RFC5201]
+ to this specification.
+
+ The reference to the 128-bit value under the CGA Message Type
+ namespace [RFC3972] of "0xF0EF F02F BFF4 3D0F E793 0C3C 6E61 74EA"
+ has been changed from [RFC5201] to this specification.
+
+ The following changes to the "Host Identity Protocol (HIP)
+ Parameters" have been made. In many cases, the changes involved
+ updating the reference from [RFC5201] to this specification, but
+ there are some differences as outlined below. Allocation terminology
+ is defined in [RFC5226]; any existing references to "IETF Consensus"
+ can be replaced with "IETF Review" as per [RFC5226].
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 109]
+
+RFC 7401 HIPv2 April 2015
+
+
+ HIP Version
+
+ This document adds the value "2" to the existing registry. The
+ value of "1" has been left with a reference to [RFC5201].
+
+ Packet Type
+
+ The 7-bit Packet Type field in a HIP protocol packet describes the
+ type of a HIP protocol message. It is defined in Section 5.1.
+ All existing values referring to [RFC5201] have been updated to
+ refer to this specification. Other values have been left
+ unchanged.
+
+ HIT Suite ID
+
+ This specification creates a new registry for "HIT Suite ID".
+ This is different than the existing registry for "Suite ID", which
+ can be left unmodified for version 1 of the protocol ([RFC5201]).
+ The registry has been closed to new registrations.
+
+ The four-bit HIT Suite ID uses the OGA ID field in the ORCHID to
+ express the type of the HIT. This document defines three HIT
+ Suites (see Section 5.2.10).
+
+ The HIT Suite ID is also carried in the four higher-order bits of
+ the ID field in the HIT_SUITE_LIST parameter. The four
+ lower-order bits are reserved for future extensions of the HIT
+ Suite ID space beyond 16 values.
+
+ For the time being, the HIT Suite uses only four bits because
+ these bits have to be carried in the HIT. Using more bits for the
+ HIT Suite ID reduces the cryptographic strength of the HIT. HIT
+ Suite IDs must be allocated carefully to avoid namespace
+ exhaustion. Moreover, deprecated IDs should be reused after an
+ appropriate time span. If 15 Suite IDs (the zero value is
+ initially reserved) prove to be insufficient and more HIT Suite
+ IDs are needed concurrently, more bits can be used for the HIT
+ Suite ID by using one HIT Suite ID (0) to indicate that more bits
+ should be used. The HIT_SUITE_LIST parameter already supports
+ 8-bit HIT Suite IDs, should longer IDs be needed. However,
+ RFC 7343 [RFC7343] does not presently support such an extension.
+ We suggest trying the rollover approach described in Appendix E
+ first. Possible extensions of the HIT Suite ID space to
+ accommodate eight bits and new HIT Suite IDs are defined through
+ IETF Review.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 110]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Requests to register reused values should include a note that the
+ value is being reused after a deprecation period, to ensure
+ appropriate IETF review and approval.
+
+ Parameter Type
+
+ The 16-bit Type field in a HIP parameter describes the type of the
+ parameter. It is defined in Section 5.2.1. The current values
+ are defined in Sections 5.2.3 through 5.2.23. The existing
+ "Parameter Types" registry has been updated as follows.
+
+ A new value (129) for R1_COUNTER has been introduced, with a
+ reference to this specification, and the existing value (128) for
+ R1_COUNTER has been left in place with a reference to [RFC5201].
+ This documents the change in value that has occurred in version 2
+ of this protocol. For clarity, the name for the value 128 has
+ been changed from "R1_COUNTER" to "R1_Counter (v1 only)".
+
+ A new value (579) for a new Parameter Type HIP_CIPHER has been
+ added, with reference to this specification. This Parameter Type
+ functionally replaces the HIP_TRANSFORM Parameter Type
+ (value 577), which has been left in the table with the existing
+ reference to [RFC5201]. For clarity, the name for the
+ value 577 has been changed from "HIP_TRANSFORM" to
+ "HIP_TRANSFORM (v1 only)".
+
+ A new value (715) for a new Parameter Type HIT_SUITE_LIST has been
+ added, with reference to this specification.
+
+ A new value (2049) for a new Parameter Type TRANSPORT_FORMAT_LIST
+ has been added, with reference to this specification.
+
+ The name of the HMAC Parameter Type (value 61505) has been changed
+ to HIP_MAC. The name of the HMAC_2 Parameter Type (value 61569)
+ has been changed to HIP_MAC_2. The reference has been changed to
+ this specification.
+
+ All other Parameter Types that reference [RFC5201] have been
+ updated to refer to this specification, and Parameter Types that
+ reference other RFCs are unchanged.
+
+ The Type codes 32768 through 49151 (not 49141: a value corrected
+ from a previous version of this table) have been Reserved for
+ Private Use. Implementors SHOULD select types in a random fashion
+ from this range, thereby reducing the probability of collisions.
+ A method employing genuine randomness (such as flipping a coin)
+ SHOULD be used.
+
+
+
+
+Moskowitz, et al. Standards Track [Page 111]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Where the existing ranges once stated "First Come First Served
+ with Specification Required", this has been changed to
+ "Specification Required".
+
+ Group ID
+
+ The eight-bit Group ID values appear in the DIFFIE_HELLMAN
+ parameter and the DH_GROUP_LIST parameter and are defined in
+ Section 5.2.7. This registry has been updated based on the new
+ values specified in Section 5.2.7; values noted as being
+ DEPRECATED can be left in the table with reference to [RFC5201].
+ New values are assigned through IETF Review.
+
+ HIP Cipher ID
+
+ The 16-bit Cipher ID values in a HIP_CIPHER parameter are defined
+ in Section 5.2.8. This is a new registry. New values from either
+ the reserved or unassigned space are assigned through IETF Review.
+
+ DI-Type
+
+ The four-bit DI-Type values in a HOST_ID parameter are defined in
+ Section 5.2.9. New values are assigned through IETF Review. All
+ existing values referring to [RFC5201] have been updated to refer
+ to this specification.
+
+ HI Algorithm
+
+ The 16-bit Algorithm values in a HOST_ID parameter are defined in
+ Section 5.2.9. This is a new registry. New values from either
+ the reserved or unassigned space are assigned through IETF Review.
+
+ ECC Curve Label
+
+ When the HI Algorithm values in a HOST_ID parameter are defined to
+ the values of either "ECDSA" or "ECDSA_LOW", a new registry is
+ needed to maintain the values for the ECC Curve Label as defined
+ in Section 5.2.9. This might be handled by specifying two
+ algorithm-specific subregistries named "ECDSA Curve Label" and
+ "ECDSA_LOW Curve Label". New values are to be assigned through
+ IETF Review.
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 112]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Notify Message Type
+
+ The 16-bit Notify Message Type values in a NOTIFICATION parameter
+ are defined in Section 5.2.19.
+
+ Notify Message Type values 1-10 are used for informing about
+ errors in packet structures, values 11-20 for informing about
+ problems in parameters containing cryptographic related material,
+ and values 21-30 for informing about problems in authentication or
+ packet integrity verification. Parameter numbers above 30 can be
+ used for informing about other types of errors or events.
+
+ The existing registration procedures have been updated as follows.
+ The range from 1-50 can remain as "IETF Review". The range from
+ 51-8191 has been marked as "Specification Required". Values
+ 8192-16383 remain as "Reserved for Private Use". Values
+ 16384-40959 have been marked as "Specification Required". Values
+ 40960-65535 remain as "Reserved for Private Use".
+
+ The following updates to the values have been made to the existing
+ registry. All existing values referring to [RFC5201] have been
+ updated to refer to this specification.
+
+ INVALID_HIP_TRANSFORM_CHOSEN has been renamed to
+ INVALID_HIP_CIPHER_CHOSEN with the same value (17).
+
+ A new value of 20 for the type UNSUPPORTED_HIT_SUITE has been
+ added.
+
+ HMAC_FAILED has been renamed to HIP_MAC_FAILED with the same
+ value (28).
+
+ SERVER_BUSY_PLEASE_RETRY has been renamed to
+ RESPONDER_BUSY_PLEASE_RETRY with the same value (44).
+
+10. Differences from RFC 5201
+
+ This section summarizes the technical changes made from [RFC5201].
+ This section is informational, intended to help implementors of the
+ previous protocol version. If any text in this section contradicts
+ text in other portions of this specification, the text found outside
+ of this section should be considered normative.
+
+ This document specifies the HIP Version 2 protocol, which is not
+ interoperable with the HIP Version 1 protocol specified in [RFC5201].
+ The main technical changes are the inclusion of additional
+ cryptographic agility features, and an update of the mandatory and
+ optional algorithms, including Elliptic Curve support via the
+
+
+
+Moskowitz, et al. Standards Track [Page 113]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Elliptic Curve DSA (ECDSA) and Elliptic Curve Diffie-Hellman (ECDH)
+ algorithms. The mandatory cryptographic algorithm implementations
+ have been updated, such as replacing HMAC-SHA-1 with HMAC-SHA-256 and
+ the RSA/SHA-1 signature algorithm with RSASSA-PSS, and adding ECDSA
+ to RSA as mandatory public key types. This version of HIP is also
+ aligned with the ORCHID revision [RFC7343].
+
+ The following changes have been made to the protocol operation.
+
+ o Section 4.1.3 describes the new process for Diffie-Hellman group
+ negotiation, an aspect of cryptographic agility. The Initiator
+ may express a preference for the choice of a DH group in the I1
+ packet and may suggest multiple possible choices. The Responder
+ replies with a preference based on local policy and the options
+ provided by the Initiator. The Initiator may restart the base
+ exchange if the option chosen by the Responder is unsuitable
+ (unsupported algorithms).
+
+ o Another aspect of cryptographic agility that has been added is the
+ ability to use different cryptographic hash functions to generate
+ the HIT. The Responder's HIT hash algorithm (RHASH) terminology
+ was introduced to support this. In addition, HIT Suites have been
+ introduced to group the set of cryptographic algorithms used
+ together for public key signature, hash function, and hash
+ truncation. The use of HIT Suites constrains the combinatorial
+ possibilities of algorithm selection for different functions. HIT
+ Suite IDs are related to the ORCHID OGA ID field ([RFC7343]).
+
+ o The puzzle mechanism has been slightly changed, in that the #I
+ parameter depends on the HIT hash function (RHASH) selected, and
+ the specification now advises against reusing the same #I value to
+ the same Initiator; more details are provided in Sections 4.1.2
+ and 5.2.4).
+
+ o Section 4.1.4 was extended to cover details about R1 generation
+ counter rollover or reset.
+
+ o Section 4.1.6 was added to describe procedures for aborting a HIP
+ base exchange.
+
+ o Section 4.1.7 provides guidance on avoiding downgrade attacks on
+ the cryptographic algorithms.
+
+ o Section 4.1.8 on opportunistic mode has been updated to account
+ for cryptographic agility by adding HIT selection procedures.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 114]
+
+RFC 7401 HIPv2 April 2015
+
+
+ o The HIP KEYMAT generation has been updated as described in
+ Section 6.5 to make the key derivation function a negotiable
+ aspect of the protocol.
+
+ o Packet processing for the I1, R1, and I2 packets has been updated
+ to account for new parameter processing.
+
+ o This specification adds a requirement that hosts MUST support
+ processing of ACK parameters with several SEQ sequence numbers
+ even when they do not support sending such parameters.
+
+ o This document now clarifies that several ECHO_REQUEST_UNSIGNED
+ parameters may be present in an R1 and that several ECHO_RESPONSE
+ parameters may be present in an I2.
+
+ o Procedures for responding to version mismatches with an ICMP
+ Parameter Problem have been added.
+
+ o The security considerations section (Section 8) has been updated
+ to remove possible attacks no longer considered applicable.
+
+ o The use of the Anonymous bit for making the sender's Host Identity
+ anonymous is now supported in packets other than the R1 and I2.
+
+ o Support for the use of a NULL HIP CIPHER is explicitly limited to
+ debugging and testing HIP and is no longer a mandatory algorithm
+ to support.
+
+ The following changes have been made to the parameter types and
+ encodings (Section 5.2).
+
+ o Four new parameter types have been added: DH_GROUP_LIST,
+ HIP_CIPHER, HIT_SUITE_LIST, and TRANSPORT_FORMAT_LIST.
+
+ o Two parameter types have been renamed: HMAC has been renamed to
+ HIP_MAC, and HMAC2 has been renamed to HIP_MAC_2.
+
+ o One parameter type is deprecated: HIP_TRANSFORM. Functionally, it
+ has been replaced by the HIP_CIPHER but with slightly different
+ semantics (hashes have been removed and are now determined by
+ RHASH).
+
+ o The TRANSPORT_FORMAT_LIST parameter allows transports to be
+ negotiated with the list instead of by their order in the
+ HIP packet.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 115]
+
+RFC 7401 HIPv2 April 2015
+
+
+ o The type code for the R1_COUNTER has been changed from 128 to 129
+ to reflect that it is now considered a Critical parameter and must
+ be echoed when present in R1.
+
+ o The PUZZLE and SOLUTION parameter lengths are now variable and
+ dependent on the RHASH length.
+
+ o The Diffie-Hellman Group IDs supported have been updated.
+
+ o The HOST_ID parameter now requires specification of an Algorithm.
+
+ o The NOTIFICATION parameter supports new Notify Message Type
+ values.
+
+ o The HIP_SIGNATURE algorithm field has been changed from 8 bits to
+ 16 bits to achieve alignment with the HOST_ID parameters.
+
+ o The specification clarifies that the SEQ parameter always contains
+ one update ID but that the ACK parameter may acknowledge several
+ update IDs.
+
+ o The restriction that only one ECHO_RESPONSE_UNSIGNED parameter
+ must be present in each HIP packet has been removed.
+
+ o The document creates a new type range allocation for parameters
+ that are only covered by a signature if a signature is present and
+ applies it to the newly created DH_GROUP_LIST parameter.
+
+ o The document clarifies that several NOTIFY parameters may be
+ present in a packet.
+
+ The following changes have been made to the packet contents
+ (Section 5.3).
+
+ o The I1 packet now carries the Initiator's DH_GROUP_LIST.
+
+ o The R1 packet now carries the HIP_CIPHER, HIT_SUITE_LIST,
+ DH_GROUP_LIST, and TRANSPORT_FORMAT_LIST parameters.
+
+ o The I2 packet now carries the HIP_CIPHER and TRANSPORT_FORMAT_LIST
+ parameters.
+
+ o This document clarifies that UPDATE packets that do not contain
+ either a SEQ or ACK parameter are invalid.
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 116]
+
+RFC 7401 HIPv2 April 2015
+
+
+11. References
+
+11.1. Normative References
+
+ [FIPS.180-4.2012]
+ National Institute of Standards and Technology, "Secure
+ Hash Standard (SHS)", FIPS PUB 180-4, March 2012,
+ <http://csrc.nist.gov/publications/fips/fips180-4/
+ fips-180-4.pdf>.
+
+ [NIST.800-131A.2011]
+ National Institute of Standards and Technology,
+ "Transitions: Recommendation for Transitioning the Use of
+ Cryptographic Algorithms and Key Lengths", NIST
+ SP 800-131A, January 2011, <http://csrc.nist.gov/
+ publications/nistpubs/800-131A/sp800-131A.pdf>.
+
+ [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768,
+ August 1980, <http://www.rfc-editor.org/info/rfc768>.
+
+ [RFC0793] Postel, J., "Transmission Control Protocol", STD 7,
+ RFC 793, September 1981, <http://www.rfc-editor.org/
+ info/rfc793>.
+
+ [RFC1035] Mockapetris, P., "Domain names - implementation and
+ specification", STD 13, RFC 1035, 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, March 1997,
+ <http://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC2404] Madson, C. and R. Glenn, "The Use of HMAC-SHA-1-96 within
+ ESP and AH", RFC 2404, November 1998,
+ <http://www.rfc-editor.org/info/rfc2404>.
+
+ [RFC2410] Glenn, R. and S. Kent, "The NULL Encryption Algorithm and
+ Its Use With IPsec", RFC 2410, November 1998,
+ <http://www.rfc-editor.org/info/rfc2410>.
+
+ [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6
+ (IPv6) Specification", RFC 2460, December 1998,
+ <http://www.rfc-editor.org/info/rfc2460>.
+
+ [RFC2536] Eastlake 3rd, D., "DSA KEYs and SIGs in the Domain Name
+ System (DNS)", RFC 2536, March 1999,
+ <http://www.rfc-editor.org/info/rfc2536>.
+
+
+
+
+Moskowitz, et al. Standards Track [Page 117]
+
+RFC 7401 HIPv2 April 2015
+
+
+ [RFC3110] Eastlake 3rd, D., "RSA/SHA-1 SIGs and RSA KEYs in the
+ Domain Name System (DNS)", RFC 3110, May 2001,
+ <http://www.rfc-editor.org/info/rfc3110>.
+
+ [RFC3526] Kivinen, T. and M. Kojo, "More Modular Exponential (MODP)
+ Diffie-Hellman groups for Internet Key Exchange (IKE)",
+ RFC 3526, May 2003, <http://www.rfc-editor.org/
+ info/rfc3526>.
+
+ [RFC3602] Frankel, S., Glenn, R., and S. Kelly, "The AES-CBC Cipher
+ Algorithm and Its Use with IPsec", RFC 3602,
+ September 2003, <http://www.rfc-editor.org/info/rfc3602>.
+
+ [RFC3972] Aura, T., "Cryptographically Generated Addresses (CGA)",
+ RFC 3972, March 2005, <http://www.rfc-editor.org/
+ info/rfc3972>.
+
+ [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S.
+ Rose, "Resource Records for the DNS Security Extensions",
+ RFC 4034, March 2005, <http://www.rfc-editor.org/
+ info/rfc4034>.
+
+ [RFC4282] Aboba, B., Beadles, M., Arkko, J., and P. Eronen, "The
+ Network Access Identifier", RFC 4282, December 2005,
+ <http://www.rfc-editor.org/info/rfc4282>.
+
+ [RFC4443] Conta, A., Deering, S., and M. Gupta, "Internet Control
+ Message Protocol (ICMPv6) for the Internet Protocol
+ Version 6 (IPv6) Specification", RFC 4443, March 2006,
+ <http://www.rfc-editor.org/info/rfc4443>.
+
+ [RFC4754] Fu, D. and J. Solinas, "IKE and IKEv2 Authentication Using
+ the Elliptic Curve Digital Signature Algorithm (ECDSA)",
+ RFC 4754, January 2007, <http://www.rfc-editor.org/
+ info/rfc4754>.
+
+ [RFC4868] Kelly, S. and S. Frankel, "Using HMAC-SHA-256,
+ HMAC-SHA-384, and HMAC-SHA-512 with IPsec", RFC 4868,
+ May 2007, <http://www.rfc-editor.org/info/rfc4868>.
+
+ [RFC5702] Jansen, J., "Use of SHA-2 Algorithms with RSA in DNSKEY
+ and RRSIG Resource Records for DNSSEC", RFC 5702,
+ October 2009, <http://www.rfc-editor.org/info/rfc5702>.
+
+ [RFC6724] Thaler, D., Draves, R., Matsumoto, A., and T. Chown,
+ "Default Address Selection for Internet Protocol Version 6
+ (IPv6)", RFC 6724, September 2012,
+ <http://www.rfc-editor.org/info/rfc6724>.
+
+
+
+Moskowitz, et al. Standards Track [Page 118]
+
+RFC 7401 HIPv2 April 2015
+
+
+ [RFC7343] Laganier, J. and F. Dupont, "An IPv6 Prefix for Overlay
+ Routable Cryptographic Hash Identifiers Version 2
+ (ORCHIDv2)", RFC 7343, September 2014,
+ <http://www.rfc-editor.org/info/rfc7343>.
+
+ [RFC7402] Jokela, P., Moskowitz, R., and J. Melen, "Using the
+ Encapsulating Security Payload (ESP) Transport Format with
+ the Host Identity Protocol (HIP)", RFC 7402, April 2015,
+ <http://www.rfc-editor.org/info/rfc7402>.
+
+11.2. Informative References
+
+ [AUR05] Aura, T., Nagarajan, A., and A. Gurtov, "Analysis of the
+ HIP Base Exchange Protocol", in Proceedings of the 10th
+ Australasian Conference on Information Security and
+ Privacy, July 2005.
+
+ [CRO03] Crosby, S. and D. Wallach, "Denial of Service via
+ Algorithmic Complexity Attacks", in Proceedings of the
+ 12th USENIX Security Symposium, Washington, D.C.,
+ August 2003.
+
+ [DIF76] Diffie, W. and M. Hellman, "New Directions in
+ Cryptography", IEEE Transactions on Information Theory
+ Volume IT-22, Number 6, pages 644-654, November 1976.
+
+ [FIPS.186-4.2013]
+ National Institute of Standards and Technology, "Digital
+ Signature Standard (DSS)", FIPS PUB 186-4, July 2013,
+ <http://nvlpubs.nist.gov/nistpubs/FIPS/
+ NIST.FIPS.186-4.pdf>.
+
+ [FIPS.197.2001]
+ National Institute of Standards and Technology, "Advanced
+ Encryption Standard (AES)", FIPS PUB 197, November 2001,
+ <http://csrc.nist.gov/publications/fips/fips197/
+ fips-197.pdf>.
+
+ [HIP-ARCH] Moskowitz, R., Ed., and M. Komu, "Host Identity Protocol
+ Architecture", Work in Progress,
+ draft-ietf-hip-rfc4423-bis-09, October 2014.
+
+ [HIP-DNS-EXT]
+ Laganier, J., "Host Identity Protocol (HIP) Domain Name
+ System (DNS) Extension", Work in Progress,
+ draft-ietf-hip-rfc5205-bis-06, January 2015.
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 119]
+
+RFC 7401 HIPv2 April 2015
+
+
+ [HIP-HOST-MOB]
+ Henderson, T., Ed., Vogt, C., and J. Arkko, "Host Mobility
+ with the Host Identity Protocol", Work in Progress,
+ draft-ietf-hip-rfc5206-bis-08, January 2015.
+
+ [HIP-REND-EXT]
+ Laganier, J. and L. Eggert, "Host Identity Protocol (HIP)
+ Rendezvous Extension", Work in Progress,
+ draft-ietf-hip-rfc5204-bis-05, December 2014.
+
+ [KAU03] Kaufman, C., Perlman, R., and B. Sommerfeld, "DoS
+ protection for UDP-based protocols", in Proceedings of the
+ 10th ACM Conference on Computer and Communications
+ Security, October 2003.
+
+ [KRA03] Krawczyk, H., "SIGMA: The 'SIGn-and-MAc' Approach to
+ Authenticated Diffie-Hellman and Its Use in the IKE
+ Protocols", in Proceedings of CRYPTO 2003, pages 400-425,
+ August 2003.
+
+ [RFC0792] Postel, J., "Internet Control Message Protocol", STD 5,
+ RFC 792, September 1981, <http://www.rfc-editor.org/
+ info/rfc792>.
+
+ [RFC2785] Zuccherato, R., "Methods for Avoiding the "Small-Subgroup"
+ Attacks on the Diffie-Hellman Key Agreement Method for
+ S/MIME", RFC 2785, March 2000,
+ <http://www.rfc-editor.org/info/rfc2785>.
+
+ [RFC2898] Kaliski, B., "PKCS #5: Password-Based Cryptography
+ Specification Version 2.0", RFC 2898, September 2000,
+ <http://www.rfc-editor.org/info/rfc2898>.
+
+ [RFC3447] Jonsson, J. and B. Kaliski, "Public-Key Cryptography
+ Standards (PKCS) #1: RSA Cryptography Specifications
+ Version 2.1", RFC 3447, February 2003,
+ <http://www.rfc-editor.org/info/rfc3447>.
+
+ [RFC3849] Huston, G., Lord, A., and P. Smith, "IPv6 Address Prefix
+ Reserved for Documentation", RFC 3849, July 2004,
+ <http://www.rfc-editor.org/info/rfc3849>.
+
+ [RFC5201] Moskowitz, R., Nikander, P., Jokela, P., and T. Henderson,
+ "Host Identity Protocol", RFC 5201, April 2008,
+ <http://www.rfc-editor.org/info/rfc5201>.
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 120]
+
+RFC 7401 HIPv2 April 2015
+
+
+ [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
+ IANA Considerations Section in RFCs", BCP 26, RFC 5226,
+ May 2008, <http://www.rfc-editor.org/info/rfc5226>.
+
+ [RFC5338] Henderson, T., Nikander, P., and M. Komu, "Using the Host
+ Identity Protocol with Legacy Applications", RFC 5338,
+ September 2008, <http://www.rfc-editor.org/info/rfc5338>.
+
+ [RFC5533] Nordmark, E. and M. Bagnulo, "Shim6: Level 3 Multihoming
+ Shim Protocol for IPv6", RFC 5533, June 2009,
+ <http://www.rfc-editor.org/info/rfc5533>.
+
+ [RFC5737] Arkko, J., Cotton, M., and L. Vegoda, "IPv4 Address Blocks
+ Reserved for Documentation", RFC 5737, January 2010,
+ <http://www.rfc-editor.org/info/rfc5737>.
+
+ [RFC5869] Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand
+ Key Derivation Function (HKDF)", RFC 5869, May 2010,
+ <http://www.rfc-editor.org/info/rfc5869>.
+
+ [RFC5903] Fu, D. and J. Solinas, "Elliptic Curve Groups modulo a
+ Prime (ECP Groups) for IKE and IKEv2", RFC 5903,
+ June 2010, <http://www.rfc-editor.org/info/rfc5903>.
+
+ [RFC6090] McGrew, D., Igoe, K., and M. Salter, "Fundamental Elliptic
+ Curve Cryptography Algorithms", RFC 6090, February 2011,
+ <http://www.rfc-editor.org/info/rfc6090>.
+
+ [RFC6253] Heer, T. and S. Varjonen, "Host Identity Protocol
+ Certificates", RFC 6253, May 2011,
+ <http://www.rfc-editor.org/info/rfc6253>.
+
+ [RFC7045] Carpenter, B. and S. Jiang, "Transmission and Processing
+ of IPv6 Extension Headers", RFC 7045, December 2013,
+ <http://www.rfc-editor.org/info/rfc7045>.
+
+ [RFC7296] Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T.
+ Kivinen, "Internet Key Exchange Protocol Version 2
+ (IKEv2)", STD 79, RFC 7296, October 2014,
+ <http://www.rfc-editor.org/info/rfc7296>.
+
+ [RSA] Rivest, R., Shamir, A., and L. Adleman, "A Method for
+ Obtaining Digital Signatures and Public-Key
+ Cryptosystems", Communications of the ACM 21 (2),
+ pp. 120-126, February 1978.
+
+ [SECG] SECG, "Recommended Elliptic Curve Domain Parameters",
+ SEC 2 Version 2.0, January 2010, <http://www.secg.org/>.
+
+
+
+Moskowitz, et al. Standards Track [Page 121]
+
+RFC 7401 HIPv2 April 2015
+
+
+Appendix A. Using Responder Puzzles
+
+ As mentioned in Section 4.1.1, the Responder may delay state creation
+ and still reject most spoofed I2 packets by using a number of
+ pre-calculated R1 packets and a local selection function. This
+ appendix defines one possible implementation in detail. The purpose
+ of this appendix is to give the implementors an idea of how to
+ implement the mechanism. If the implementation is based on this
+ appendix, it MAY contain some local modification that makes an
+ attacker's task harder.
+
+ The Responder creates a secret value S, that it regenerates
+ periodically. The Responder needs to remember the two latest values
+ of S. Each time the S is regenerated, the R1 generation counter
+ value is incremented by one.
+
+ The Responder generates a pre-signed R1 packet. The signature for
+ pre-generated R1s must be recalculated when the Diffie-Hellman key is
+ recomputed or when the R1_COUNTER value changes due to S value
+ regeneration.
+
+ When the Initiator sends the I1 packet for initializing a connection,
+ the Responder receives the HIT and IP address from the packet, and
+ generates an #I value for the puzzle. The #I value is set to the
+ pre-signed R1 packet.
+
+ #I value calculation:
+ #I = Ltrunc( RHASH ( S | HIT-I | HIT-R | IP-I | IP-R ), n)
+ where n = RHASH_len
+
+ The RHASH algorithm is the same as is used to generate the
+ Responder's HIT value.
+
+ From an incoming I2 packet, the Responder receives the required
+ information to validate the puzzle: HITs, IP addresses, and the
+ information of the used S value from the R1_COUNTER. Using these
+ values, the Responder can regenerate the #I, and verify it against
+ the #I received in the I2 packet. If the #I values match, it can
+ verify the solution using #I, #J, and difficulty #K. If the #I
+ values do not match, the I2 is dropped.
+
+ puzzle_check:
+ V := Ltrunc( RHASH( I2.I | I2.hit_i | I2.hit_r | I2.J ), #K )
+ if V != 0, drop the packet
+
+ If the puzzle solution is correct, the #I and #J values are stored
+ for later use. They are used as input material when keying material
+ is generated.
+
+
+
+Moskowitz, et al. Standards Track [Page 122]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Keeping state about failed puzzle solutions depends on the
+ implementation. Although it is possible for the Responder not to
+ keep any state information, it still may do so to protect itself
+ against certain attacks (see Section 4.1.1).
+
+Appendix B. Generating a Public Key Encoding from an HI
+
+ The following pseudo-code illustrates the process to generate a
+ public key encoding from an HI for both RSA and DSA.
+
+ The symbol ":=" denotes assignment; the symbol "+=" denotes
+ appending. The pseudo-function "encode_in_network_byte_order" takes
+ two parameters, an integer (bignum) and a length in bytes, and
+ returns the integer encoded into a byte string of the given length.
+
+ switch ( HI.algorithm )
+ {
+
+ case RSA:
+ buffer := encode_in_network_byte_order ( HI.RSA.e_len,
+ ( HI.RSA.e_len > 255 ) ? 3 : 1 )
+ buffer += encode_in_network_byte_order ( HI.RSA.e, HI.RSA.e_len )
+ buffer += encode_in_network_byte_order ( HI.RSA.n, HI.RSA.n_len )
+
+ break;
+
+ case DSA:
+ buffer := encode_in_network_byte_order ( HI.DSA.T , 1 )
+ buffer += encode_in_network_byte_order ( HI.DSA.Q , 20 )
+ buffer += encode_in_network_byte_order ( HI.DSA.P , 64 +
+ 8 * HI.DSA.T )
+ buffer += encode_in_network_byte_order ( HI.DSA.G , 64 +
+ 8 * HI.DSA.T )
+ buffer += encode_in_network_byte_order ( HI.DSA.Y , 64 +
+ 8 * HI.DSA.T )
+
+ break;
+
+ }
+
+Appendix C. Example Checksums for HIP Packets
+
+ The HIP checksum for HIP packets is specified in Section 5.1.1.
+ Checksums for TCP and UDP packets running over HIP-enabled security
+ associations are specified in Section 4.5.1. The examples below use
+ [RFC3849] and [RFC5737] addresses, and HITs with the prefix of
+ 2001:20 followed by zeros, followed by a decimal 1 or 2,
+ respectively.
+
+
+
+Moskowitz, et al. Standards Track [Page 123]
+
+RFC 7401 HIPv2 April 2015
+
+
+ The following example is defined only for testing the checksum
+ calculation.
+
+C.1. IPv6 HIP Example (I1 Packet)
+
+ Source Address: 2001:db8::1
+ Destination Address: 2001:db8::2
+ Upper-Layer Packet Length: 48 0x30
+ Next Header: 139 0x8b
+ Payload Protocol: 59 0x3b
+ Header Length: 5 0x5
+ Packet Type: 1 0x1
+ Version: 2 0x2
+ Reserved: 1 0x1
+ Control: 0 0x0
+ Checksum: 6750 0x1a5e
+ Sender's HIT: 2001:20::1
+ Receiver's HIT: 2001:20::2
+ DH_GROUP_LIST type: 511 0x1ff
+ DH_GROUP_LIST length: 3 0x3
+ DH_GROUP_LIST Group IDs: 3,4,8
+
+C.2. IPv4 HIP Packet (I1 Packet)
+
+ The IPv4 checksum value for the example I1 packet is shown below.
+
+ Source Address: 192.0.2.1
+ Destination Address: 192.0.2.2
+ Upper-Layer Packet Length: 48 0x30
+ Next Header: 139 0x8b
+ Payload Protocol: 59 0x3b
+ Header Length: 5 0x5
+ Packet Type: 1 0x1
+ Version: 2 0x2
+ Reserved: 1 0x1
+ Control: 0 0x0
+ Checksum: 61902 0xf1ce
+ Sender's HIT: 2001:20::1
+ Receiver's HIT: 2001:20::2
+ DH_GROUP_LIST type: 511 0x1ff
+ DH_GROUP_LIST length: 3 0x3
+ DH_GROUP_LIST Group IDs: 3,4,8
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 124]
+
+RFC 7401 HIPv2 April 2015
+
+
+C.3. TCP Segment
+
+ Regardless of whether IPv6 or IPv4 is used, the TCP and UDP sockets
+ use the IPv6 pseudo header format [RFC2460], with the HITs used in
+ place of the IPv6 addresses.
+
+ Sender's HIT: 2001:20::1
+ Receiver's HIT: 2001:20::2
+ Upper-Layer Packet Length: 20 0x14
+ Next Header: 6 0x06
+ Source port: 65500 0xffdc
+ Destination port: 22 0x0016
+ Sequence number: 1 0x00000001
+ Acknowledgment number: 0 0x00000000
+ Data offset: 5 0x5
+ Flags: SYN 0x02
+ Window size: 65535 0xffff
+ Checksum: 28586 0x6faa
+ Urgent pointer: 0 0x0000
+
+Appendix D. ECDH and ECDSA 160-Bit Groups
+
+ The ECDH and ECDSA 160-bit group SECP160R1 is rated at 80 bits
+ symmetric strength. This was once considered appropriate for one
+ year of security. Today, these groups should be used only when the
+ host is not powerful enough (e.g., some embedded devices) and when
+ security requirements are low (e.g., long-term confidentiality is not
+ required).
+
+Appendix E. HIT Suites and HIT Generation
+
+ The HIT as an ORCHID [RFC7343] consists of three parts: A 28-bit
+ prefix, a 4-bit encoding of the ORCHID generation algorithm (OGA),
+ and a hash that includes the Host Identity and a context ID. The OGA
+ is an index pointing to the specific algorithm by which the public
+ key and the 96-bit hashed encoding are generated. The OGA is
+ protocol specific and is to be interpreted as defined below for all
+ protocols that use the same context ID as HIP. HIP groups sets of
+ valid combinations of signature and hash algorithms into HIT Suites.
+ These HIT Suites are addressed by an index, which is transmitted in
+ the OGA ID field of the ORCHID.
+
+ The set of used HIT Suites will be extended to counter the progress
+ in computation capabilities and vulnerabilities in the employed
+ algorithms. The intended use of the HIT Suites is to introduce a new
+ HIT Suite and phase out an old one before it becomes insecure. Since
+ the 4-bit OGA ID field only permits 15 HIT Suites to be used at the
+ same time (the HIT Suite with ID 0 is reserved), phased-out HIT
+
+
+
+Moskowitz, et al. Standards Track [Page 125]
+
+RFC 7401 HIPv2 April 2015
+
+
+ Suites must be reused at some point. In such a case, there will be a
+ rollover of the HIT Suite ID and the next newly introduced HIT Suite
+ will start with a lower HIT Suite index than the previously
+ introduced one. The rollover effectively deprecates the reused HIT
+ Suite. For a smooth transition, the HIT Suite should be deprecated a
+ considerable time before the HIT Suite index is reused.
+
+ Since the number of HIT Suites is tightly limited to 16, the HIT
+ Suites must be assigned carefully. Hence, sets of suitable
+ algorithms are grouped in a HIT Suite.
+
+ The HIT Suite of the Responder's HIT determines the RHASH and the
+ hash function to be used for the HMAC in HIP packets as well as the
+ signature algorithm family used for generating the HI. The list of
+ HIT Suites is defined in Table 10.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 126]
+
+RFC 7401 HIPv2 April 2015
+
+
+Acknowledgments
+
+ The drive to create HIP came to being after attending the MALLOC
+ meeting at the 43rd IETF meeting. Baiju Patel and Hilarie Orman
+ really gave the original author, Bob Moskowitz, the assist to get HIP
+ beyond 5 paragraphs of ideas. It has matured considerably since the
+ early versions thanks to extensive input from IETFers. Most
+ importantly, its design goals are articulated and are different from
+ other efforts in this direction. Particular mention goes to the
+ members of the NameSpace Research Group of the IRTF. Noel Chiappa
+ provided valuable input at early stages of discussions about
+ identifier handling and Keith Moore the impetus to provide
+ resolvability. Steve Deering provided encouragement to keep working,
+ as a solid proposal can act as a proof of ideas for a research group.
+
+ Many others contributed; extensive security tips were provided by
+ Steve Bellovin. Rob Austein kept the DNS parts on track. Paul
+ Kocher taught Bob Moskowitz how to make the puzzle exchange expensive
+ for the Initiator to respond, but easy for the Responder to validate.
+ Bill Sommerfeld supplied the Birthday concept, which later evolved
+ into the R1 generation counter, to simplify reboot management. Erik
+ Nordmark supplied the CLOSE-mechanism for closing connections.
+ Rodney Thayer and Hugh Daniels provided extensive feedback. In the
+ early times of this document, John Gilmore kept Bob Moskowitz
+ challenged to provide something of value.
+
+ During the later stages of this document, when the editing baton was
+ transferred to Pekka Nikander, the input from the early implementors
+ was invaluable. Without having actual implementations, this document
+ would not be on the level it is now.
+
+ In the usual IETF fashion, a large number of people have contributed
+ to the actual text or ideas. The list of these people includes Jeff
+ Ahrenholz, Francis Dupont, Derek Fawcus, George Gross, Xin Gu, Rene
+ Hummen, Miika Komu, Mika Kousa, Julien Laganier, Andrew McGregor, Jan
+ Melen, Henrik Petander, Michael Richardson, Tim Shepard, Jorma Wall,
+ and Jukka Ylitalo. Our apologies to anyone whose name is missing.
+
+ Once the HIP Working Group was founded in early 2004, a number of
+ changes were introduced through the working group process. Most
+ notably, the original document was split in two, one containing the
+ base exchange and the other one defining how to use ESP. Some
+ modifications to the protocol proposed by Aura, et al. [AUR05] were
+ added at a later stage.
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 127]
+
+RFC 7401 HIPv2 April 2015
+
+
+Authors' Addresses
+
+ Robert Moskowitz (editor)
+ HTT Consulting
+ Oak Park, MI
+ United States
+
+ EMail: rgm@labs.htt-consult.com
+
+
+ Tobias Heer
+ Hirschmann Automation and Control
+ Stuttgarter Strasse 45-51
+ Neckartenzlingen 72654
+ Germany
+
+ EMail: tobias.heer@belden.com
+
+
+ Petri Jokela
+ Ericsson Research NomadicLab
+ Jorvas FIN-02420
+ Finland
+
+ Phone: +358 9 299 1
+ EMail: petri.jokela@nomadiclab.com
+
+
+ Thomas R. Henderson
+ University of Washington
+ Campus Box 352500
+ Seattle, WA
+ United States
+
+ EMail: tomhend@u.washington.edu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Moskowitz, et al. Standards Track [Page 128]
+