| rfc5202.txt | draft-ietf-hip-rfc5202-bis-05.txt > | |||
|---|---|---|---|---|
| Network Working Group P. Jokela | Network Working Group P. Jokela | |||
| Request for Comments: 5202 Ericsson Research NomadicLab | Internet-Draft Ericsson Research NomadicLab | |||
| Category: Experimental R. Moskowitz | Obsoletes: 5202 (if approved) R. Moskowitz | |||
| ICSAlabs | Intended status: Standards Track ICSAlabs, An Independent | |||
| P. Nikander | Expires: May 22, 2014 Division of Verizon Business | |||
| Systems | ||||
| J. Melen | ||||
| Ericsson Research NomadicLab | Ericsson Research NomadicLab | |||
| April 2008 | November 18, 2013 | |||
| Using the Encapsulating Security Payload (ESP) Transport Format with the | Using the Encapsulating Security Payload (ESP) Transport Format with the | |||
| Host Identity Protocol (HIP) | Host Identity Protocol (HIP) | |||
| draft-ietf-hip-rfc5202-bis-05 | ||||
| Abstract | ||||
| This memo specifies an Encapsulated Security Payload (ESP) based | ||||
| mechanism for transmission of user data packets, to be used with the | ||||
| Host Identity Protocol (HIP). This document obsoletes RFC 5202. | ||||
| Status of This Memo | Status of This Memo | |||
| This memo defines an Experimental Protocol for the Internet | This Internet-Draft is submitted in full conformance with the | |||
| community. It does not specify an Internet standard of any kind. | provisions of BCP 78 and BCP 79. | |||
| Discussion and suggestions for improvement are requested. | ||||
| Distribution of this memo is unlimited. | ||||
| IESG Note | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | ||||
| The following issues describe IESG concerns about this document. The | Internet-Drafts are draft documents valid for a maximum of six months | |||
| IESG expects that these issues will be addressed when future versions | and may be updated, replaced, or obsoleted by other documents at any | |||
| of HIP are designed. | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | ||||
| In case of complex Security Policy Databases (SPDs) and the co- | This Internet-Draft will expire on May 22, 2014. | |||
| existence of HIP and security-related protocols such as IKE, | ||||
| implementors may encounter conditions that are unspecified in these | ||||
| documents. For example, when the SPD defines an IP address subnet to | ||||
| be protected and a HIP host is residing in that IP address area, | ||||
| there is a possibility that the communication is encrypted multiple | ||||
| times. Readers are advised to pay special attention when running HIP | ||||
| with complex SPD settings. Future specifications should clearly | ||||
| define when multiple encryption is intended, and when it should be | ||||
| avoided. | ||||
| Abstract | Copyright Notice | |||
| This memo specifies an Encapsulated Security Payload (ESP) based | Copyright (c) 2013 IETF Trust and the persons identified as the | |||
| mechanism for transmission of user data packets, to be used with the | document authors. All rights reserved. | |||
| Host Identity Protocol (HIP). | ||||
| 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 | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Conventions Used in This Document . . . . . . . . . . . . . . 3 | 2. Conventions Used in This Document . . . . . . . . . . . . . . 4 | |||
| 3. Using ESP with HIP . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Using ESP with HIP . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. ESP Packet Format . . . . . . . . . . . . . . . . . . . . 4 | 3.1. ESP Packet Format . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.2. Conceptual ESP Packet Processing . . . . . . . . . . . . . 4 | 3.2. Conceptual ESP Packet Processing . . . . . . . . . . . . . 5 | |||
| 3.2.1. Semantics of the Security Parameter Index (SPI) . . . 5 | 3.2.1. Semantics of the Security Parameter Index (SPI) . . . 6 | |||
| 3.3. Security Association Establishment and Maintenance . . . . 6 | 3.3. Security Association Establishment and Maintenance . . . . 7 | |||
| 3.3.1. ESP Security Associations . . . . . . . . . . . . . . 6 | 3.3.1. ESP Security Associations . . . . . . . . . . . . . . 7 | |||
| 3.3.2. Rekeying . . . . . . . . . . . . . . . . . . . . . . . 6 | 3.3.2. Rekeying . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.3.3. Security Association Management . . . . . . . . . . . 7 | 3.3.3. Security Association Management . . . . . . . . . . . 8 | |||
| 3.3.4. Security Parameter Index (SPI) . . . . . . . . . . . . 7 | 3.3.4. Security Parameter Index (SPI) . . . . . . . . . . . . 8 | |||
| 3.3.5. Supported Transforms . . . . . . . . . . . . . . . . . 7 | 3.3.5. Supported Ciphers . . . . . . . . . . . . . . . . . . 9 | |||
| 3.3.6. Sequence Number . . . . . . . . . . . . . . . . . . . 8 | 3.3.6. Sequence Number . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.3.7. Lifetimes and Timers . . . . . . . . . . . . . . . . . 8 | 3.3.7. Lifetimes and Timers . . . . . . . . . . . . . . . . . 9 | |||
| 3.4. IPsec and HIP ESP Implementation Considerations . . . . . 8 | 3.4. IPsec and HIP ESP Implementation Considerations . . . . . 9 | |||
| 4. The Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.4.1. Data Packet Processing Considerations . . . . . . . . 10 | |||
| 4.1. ESP in HIP . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.4.2. HIP Signaling Packet Considerations . . . . . . . . . 10 | |||
| 4.1.1. Setting Up an ESP Security Association . . . . . . . . 9 | 4. The Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 4.1.2. Updating an Existing ESP SA . . . . . . . . . . . . . 10 | 4.1. ESP in HIP . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5. Parameter and Packet Formats . . . . . . . . . . . . . . . . . 10 | 4.1.1. IPsec ESP Transport Format Type . . . . . . . . . . . 11 | |||
| 5.1. New Parameters . . . . . . . . . . . . . . . . . . . . . . 11 | 4.1.2. Setting Up an ESP Security Association . . . . . . . . 11 | |||
| 5.1.1. ESP_INFO . . . . . . . . . . . . . . . . . . . . . . . 11 | 4.1.3. Updating an Existing ESP SA . . . . . . . . . . . . . 12 | |||
| 5.1.2. ESP_TRANSFORM . . . . . . . . . . . . . . . . . . . . 13 | 5. Parameter and Packet Formats . . . . . . . . . . . . . . . . . 13 | |||
| 5.1.3. NOTIFY Parameter . . . . . . . . . . . . . . . . . . . 14 | 5.1. New Parameters . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5.2. HIP ESP Security Association Setup . . . . . . . . . . . . 14 | 5.1.1. ESP_INFO . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5.2.1. Setup During Base Exchange . . . . . . . . . . . . . . 14 | 5.1.2. ESP_TRANSFORM . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.3. HIP ESP Rekeying . . . . . . . . . . . . . . . . . . . . . 16 | 5.1.3. NOTIFICATION Parameter . . . . . . . . . . . . . . . . 16 | |||
| 5.3.1. Initializing Rekeying . . . . . . . . . . . . . . . . 16 | 5.2. HIP ESP Security Association Setup . . . . . . . . . . . . 16 | |||
| 5.3.2. Responding to the Rekeying Initialization . . . . . . 17 | 5.2.1. Setup During Base Exchange . . . . . . . . . . . . . . 16 | |||
| 5.4. ICMP Messages . . . . . . . . . . . . . . . . . . . . . . 17 | 5.3. HIP ESP Rekeying . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 5.4.1. Unknown SPI . . . . . . . . . . . . . . . . . . . . . 17 | 5.3.1. Initializing Rekeying . . . . . . . . . . . . . . . . 18 | |||
| 6. Packet Processing . . . . . . . . . . . . . . . . . . . . . . 18 | 5.3.2. Responding to the Rekeying Initialization . . . . . . 19 | |||
| 6.1. Processing Outgoing Application Data . . . . . . . . . . . 18 | 5.4. ICMP Messages . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 6.2. Processing Incoming Application Data . . . . . . . . . . . 19 | 5.4.1. Unknown SPI . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 6.3. HMAC and SIGNATURE Calculation and Verification . . . . . 19 | 6. Packet Processing . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 6.4. Processing Incoming ESP SA Initialization (R1) . . . . . . 19 | 6.1. Processing Outgoing Application Data . . . . . . . . . . . 20 | |||
| 6.5. Processing Incoming Initialization Reply (I2) . . . . . . 20 | 6.2. Processing Incoming Application Data . . . . . . . . . . . 20 | |||
| 6.6. Processing Incoming ESP SA Setup Finalization (R2) . . . . 20 | 6.3. HMAC and SIGNATURE Calculation and Verification . . . . . 21 | |||
| 6.7. Dropping HIP Associations . . . . . . . . . . . . . . . . 20 | 6.4. Processing Incoming ESP SA Initialization (R1) . . . . . . 21 | |||
| 6.8. Initiating ESP SA Rekeying . . . . . . . . . . . . . . . . 20 | 6.5. Processing Incoming Initialization Reply (I2) . . . . . . 22 | |||
| 6.9. Processing Incoming UPDATE Packets . . . . . . . . . . . . 22 | 6.6. Processing Incoming ESP SA Setup Finalization (R2) . . . . 22 | |||
| 6.7. Dropping HIP Associations . . . . . . . . . . . . . . . . 22 | ||||
| 6.8. Initiating ESP SA Rekeying . . . . . . . . . . . . . . . . 22 | ||||
| 6.9. Processing Incoming UPDATE Packets . . . . . . . . . . . . 24 | ||||
| 6.9.1. Processing UPDATE Packet: No Outstanding Rekeying | 6.9.1. Processing UPDATE Packet: No Outstanding Rekeying | |||
| Request . . . . . . . . . . . . . . . . . . . . . . . 22 | Request . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 6.10. Finalizing Rekeying . . . . . . . . . . . . . . . . . . . 23 | 6.10. Finalizing Rekeying . . . . . . . . . . . . . . . . . . . 25 | |||
| 6.11. Processing NOTIFY Packets . . . . . . . . . . . . . . . . 24 | 6.11. Processing NOTIFY Packets . . . . . . . . . . . . . . . . 26 | |||
| 7. Keying Material . . . . . . . . . . . . . . . . . . . . . . . 24 | 7. Keying Material . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 25 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 26 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 26 | 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 11.1. Normative references . . . . . . . . . . . . . . . . . . . 26 | 11.1. Normative references . . . . . . . . . . . . . . . . . . . 28 | |||
| 11.2. Informative references . . . . . . . . . . . . . . . . . . 26 | 11.2. Informative references . . . . . . . . . . . . . . . . . . 29 | |||
| Appendix A. A Note on Implementation Options . . . . . . . . . . 28 | Appendix A. A Note on Implementation Options . . . . . . . . . . 30 | |||
| Appendix B. Bound End-to-End Tunnel mode for ESP . . . . . . . . 30 | ||||
| B.1. Protocol definition . . . . . . . . . . . . . . . . . . . 31 | ||||
| B.1.1. Changes to Security Association data structures . . . 31 | ||||
| B.1.2. Packet format . . . . . . . . . . . . . . . . . . . . 31 | ||||
| B.1.3. Cryptographic processing . . . . . . . . . . . . . . . 33 | ||||
| B.1.4. IP header processing . . . . . . . . . . . . . . . . . 33 | ||||
| B.1.5. Handling of outgoing packets . . . . . . . . . . . . . 34 | ||||
| B.1.6. Handling of incoming packets . . . . . . . . . . . . . 35 | ||||
| B.1.7. IPv4 options handling . . . . . . . . . . . . . . . . 35 | ||||
| 1. Introduction | 1. Introduction | |||
| In the Host Identity Protocol Architecture [RFC4423], hosts are | In the Host Identity Protocol Architecture | |||
| identified with public keys. The Host Identity Protocol [RFC5201] | [I-D.ietf-hip-rfc4423-bis], hosts are identified with public keys. | |||
| base exchange allows any two HIP-supporting hosts to authenticate | The Host Identity Protocol [I-D.ietf-hip-rfc5201-bis] base exchange | |||
| each other and to create a HIP association between themselves. | allows any two HIP-supporting hosts to authenticate each other and to | |||
| During the base exchange, the hosts generate a piece of shared keying | create a HIP association between themselves. During the base | |||
| material using an authenticated Diffie-Hellman exchange. | exchange, the hosts generate a piece of shared keying material using | |||
| an authenticated Diffie-Hellman exchange. | ||||
| The HIP base exchange specification [RFC5201] does not describe any | The HIP base exchange specification [I-D.ietf-hip-rfc5201-bis] does | |||
| transport formats or methods for user data to be used during the | not describe any transport formats or methods for user data to be | |||
| actual communication; it only defines that it is mandatory to | used during the actual communication; it only defines that it is | |||
| implement the Encapsulated Security Payload (ESP) [RFC4303] based | mandatory to implement the Encapsulated Security Payload (ESP) | |||
| transport format and method. This document specifies how ESP is used | [RFC4303] based transport format and method. This document specifies | |||
| with HIP to carry actual user data. | how ESP is used with HIP to carry actual user data. | |||
| To be more specific, this document specifies a set of HIP protocol | To be more specific, this document specifies a set of HIP protocol | |||
| extensions and their handling. Using these extensions, a pair of ESP | extensions and their handling. Using these extensions, a pair of ESP | |||
| Security Associations (SAs) is created between the hosts during the | Security Associations (SAs) is created between the hosts during the | |||
| base exchange. The resulting ESP Security Associations use keys | base exchange. The resulting ESP Security Associations use keys | |||
| drawn from the keying material (KEYMAT) generated during the base | drawn from the keying material (KEYMAT) generated during the base | |||
| exchange. After the HIP association and required ESP SAs have been | exchange. After the HIP association and required ESP SAs have been | |||
| established between the hosts, the user data communication is | established between the hosts, the user data communication is | |||
| protected using ESP. In addition, this document specifies methods to | protected using ESP. In addition, this document specifies methods to | |||
| update an existing ESP Security Association. | update an existing ESP Security Association. | |||
| It should be noted that representations of Host Identity are not | It should be noted that representations of Host Identity are not | |||
| carried explicitly in the headers of user data packets. Instead, the | carried explicitly in the headers of user data packets. Instead, the | |||
| ESP Security Parameter Index (SPI) is used to indicate the right host | ESP Security Parameter Index (SPI) is used to indicate the right host | |||
| context. The SPIs are selected during the HIP ESP setup exchange. | context. The SPIs are selected during the HIP ESP setup exchange. | |||
| For user data packets, ESP SPIs (in possible combination with IP | For user data packets, ESP SPIs (in possible combination with IP | |||
| addresses) are used indirectly to identify the host context, thereby | addresses) are used indirectly to identify the host context, thereby | |||
| avoiding any additional explicit protocol headers. | avoiding any additional explicit protocol headers. | |||
| HIP and ESP traffic have known issues with middlebox traversal RFC | ||||
| 5207 [RFC5207]. Other specifications exist for operating HIP and ESP | ||||
| over UDP (RFC 5770 [RFC5770] is an experimental specification, and | ||||
| others are being developed). Middlebox traversal is out of scope for | ||||
| this document. | ||||
| This document obsoletes RFC 5202. | ||||
| 2. Conventions Used in This Document | 2. Conventions Used in This Document | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
| 3. Using ESP with HIP | 3. Using ESP with HIP | |||
| The HIP base exchange is used to set up a HIP association between two | The HIP base exchange is used to set up a HIP association between two | |||
| hosts. The base exchange provides two-way host authentication and | hosts. The base exchange provides two-way host authentication and | |||
| key material generation, but it does not provide any means for | key material generation, but it does not provide any means for | |||
| protecting data communication between the hosts. In this document, | protecting data communication between the hosts. In this document, | |||
| we specify the use of ESP for protecting user data traffic after the | we specify the use of ESP for protecting user data traffic after the | |||
| HIP base exchange. Note that this use of ESP is intended only for | HIP base exchange. Note that this use of ESP is intended only for | |||
| host-to-host traffic; security gateways are not supported. | host-to-host traffic; security gateways are not supported. | |||
| To support ESP use, the HIP base exchange messages require some minor | To support ESP use, the HIP base exchange messages require some minor | |||
| additions to the parameters transported. In the R1 packet, the | additions to the parameters transported. In the R1 packet, the | |||
| Responder adds the possible ESP transforms in a new ESP_TRANSFORM | Responder adds the possible ESP transforms in an ESP_TRANSFORM | |||
| parameter before sending it to the Initiator. The Initiator gets the | parameter before sending it to the Initiator. The Initiator gets the | |||
| proposed transforms, selects one of those proposed transforms, and | proposed transforms, selects one of those proposed transforms, and | |||
| adds it to the I2 packet in an ESP_TRANSFORM parameter. In this I2 | adds it to the I2 packet in an ESP_TRANSFORM parameter. In this I2 | |||
| packet, the Initiator also sends the SPI value that it wants to be | packet, the Initiator also sends the SPI value that it wants to be | |||
| used for ESP traffic flowing from the Responder to the Initiator. | used for ESP traffic flowing from the Responder to the Initiator. | |||
| This information is carried using the new ESP_INFO parameter. When | This information is carried using the ESP_INFO parameter. When | |||
| finalizing the ESP SA setup, the Responder sends its SPI value to the | finalizing the ESP SA setup, the Responder sends its SPI value to the | |||
| Initiator in the R2 packet, again using ESP_INFO. | Initiator in the R2 packet, again using ESP_INFO. | |||
| 3.1. ESP Packet Format | 3.1. ESP Packet Format | |||
| The ESP specification [RFC4303] defines the ESP packet format for | The ESP specification [RFC4303] defines the ESP packet format for | |||
| IPsec. The HIP ESP packet looks exactly the same as the IPsec ESP | IPsec. The HIP ESP packet looks exactly the same as the IPsec ESP | |||
| transport format packet. The semantics, however, are a bit different | transport format packet. The semantics, however, are a bit different | |||
| and are described in more detail in the next subsection. | and are described in more detail in the next subsection. | |||
| 3.2. Conceptual ESP Packet Processing | 3.2. Conceptual ESP Packet Processing | |||
| ESP packet processing can be implemented in different ways in HIP. | ESP packet processing can be implemented in different ways in HIP. | |||
| It is possible to implement it in a way that a standards compliant, | It is possible to implement it in a way that a standards compliant, | |||
| unmodified IPsec implementation [RFC4303] can be used. | unmodified IPsec implementation [RFC4303] can be used in conjunction | |||
| with some additional transport checksum processing above it, and if | ||||
| IP addresses are used as indexes to the right host context. | ||||
| When a standards compliant IPsec implementation that uses IP | When a standards compliant IPsec implementation that uses IP | |||
| addresses in the SPD and Security Association Database (SAD) is used, | addresses in the SPD and Security Association Database (SAD) is used, | |||
| the packet processing may take the following steps. For outgoing | the packet processing may take the following steps. For outgoing | |||
| packets, assuming that the upper-layer pseudoheader has been built | packets, assuming that the upper-layer pseudoheader has been built | |||
| using IP addresses, the implementation recalculates upper-layer | using IP addresses, the implementation recalculates upper-layer | |||
| checksums using Host Identity Tags (HITs) and, after that, changes | checksums using Host Identity Tags (HITs) and, after that, changes | |||
| the packet source and destination addresses back to corresponding IP | the packet source and destination addresses back to corresponding IP | |||
| addresses. The packet is sent to the IPsec ESP for transport mode | addresses. The packet is sent to the IPsec ESP for transport mode | |||
| handling and from there the encrypted packet is sent to the network. | handling and from there the encrypted packet is sent to the network. | |||
| When an ESP packet is received, the packet is first put to the IPsec | When an ESP packet is received, the packet is first put to the IPsec | |||
| ESP transport mode handling, and after decryption, the source and | ESP transport mode handling, and after decryption, the source and | |||
| destination IP addresses are replaced with HITs and finally, upper- | destination IP addresses are replaced with HITs and finally, upper- | |||
| layer checksums are verified before passing the packet to the upper | layer checksums are verified before passing the packet to the upper | |||
| layer. | layer. | |||
| An alternative way to implement packet processing is the BEET (Bound | An alternative way to implement packet processing is the BEET (Bound | |||
| End-to-End Tunnel) [ESP-BEET] mode. In BEET mode, the ESP packet is | End-to-End Tunnel) mode (see Appendix B). In BEET mode, the ESP | |||
| formatted as a transport mode packet, but the semantics of the | packet is formatted as a transport mode packet, but the semantics of | |||
| connection are the same as for tunnel mode. The "outer" addresses of | the connection are the same as for tunnel mode. The "outer" | |||
| the packet are the IP addresses and the "inner" addresses are the | addresses of the packet are the IP addresses and the "inner" | |||
| HITs. For outgoing traffic, after the packet has been encrypted, the | addresses are the HITs. For outgoing traffic, after the packet has | |||
| packet's IP header is changed to a new one that contains IP addresses | been encrypted, the packet's IP header is changed to a new one that | |||
| instead of HITs, and the packet is sent to the network. When the ESP | contains IP addresses instead of HITs, and the packet is sent to the | |||
| packet is received, the SPI value, together with the integrity | network. When the ESP packet is received, the SPI value, together | |||
| protection, allow the packet to be securely associated with the right | with the integrity protection, allow the packet to be securely | |||
| HIT pair. The packet header is replaced with a new header containing | associated with the right HIT pair. The packet header is replaced | |||
| HITs, and the packet is decrypted. | with a new header containing HITs, and the packet is decrypted. BEET | |||
| mode is completely internal for host and doesn't require that the | ||||
| corresponding host implements it, instead the corresponding host can | ||||
| have ESP transport mode and do HIT IP conversions outside ESP. | ||||
| 3.2.1. Semantics of the Security Parameter Index (SPI) | 3.2.1. Semantics of the Security Parameter Index (SPI) | |||
| SPIs are used in ESP to find the right Security Association for | SPIs are used in ESP to find the right Security Association for | |||
| received packets. The ESP SPIs have added significance when used | received packets. The ESP SPIs have added significance when used | |||
| with HIP; they are a compressed representation of a pair of HITs. | with HIP; they are a compressed representation of a pair of HITs. | |||
| Thus, SPIs MAY be used by intermediary systems in providing services | Thus, SPIs MAY be used by intermediary systems in providing services | |||
| like address mapping. Note that since the SPI has significance at | like address mapping. Note that since the SPI has significance at | |||
| the receiver, only the < DST, SPI >, where DST is a destination IP | the receiver, only the < DST, SPI >, where DST is a destination IP | |||
| address, uniquely identifies the receiver HIT at any given point of | address, uniquely identifies the receiver HIT at any given point of | |||
| time. The same SPI value may be used by several hosts. A single | time. The same SPI value may be used by several hosts. A single < | |||
| < DST, SPI > value may denote different hosts and contexts at | DST, SPI > value may denote different hosts and contexts at different | |||
| different points of time, depending on the host that is currently | points of time, depending on the host that is currently reachable at | |||
| reachable at the DST. | the DST. | |||
| Each host selects for itself the SPI it wants to see in packets | Each host selects for itself the SPI it wants to see in packets | |||
| received from its peer. This allows it to select different SPIs for | received from its peer. This allows it to select different SPIs for | |||
| different peers. The SPI selection SHOULD be random; the rules of | different peers. The SPI selection SHOULD be random; the rules of | |||
| Section 2.1 of the ESP specification [RFC4303] must be followed. A | Section 2.1 of the ESP specification [RFC4303] must be followed. A | |||
| different SPI SHOULD be used for each HIP exchange with a particular | different SPI SHOULD be used for each HIP exchange with a particular | |||
| host; this is to avoid a replay attack. Additionally, when a host | host; this is to avoid a replay attack. Additionally, when a host | |||
| rekeys, the SPI MUST be changed. Furthermore, if a host changes over | rekeys, the SPI MUST be changed. Furthermore, if a host changes over | |||
| to use a different IP address, it MAY change the SPI. | to use a different IP address, it MAY change the SPI. | |||
| skipping to change at page 6, line 10 ¶ | skipping to change at page 7, line 12 ¶ | |||
| The selected SPI is communicated to the peer in the third (I2) and | The selected SPI is communicated to the peer in the third (I2) and | |||
| fourth (R2) packets of the base HIP exchange. Changes in SPI are | fourth (R2) packets of the base HIP exchange. Changes in SPI are | |||
| signaled with ESP_INFO parameters. | signaled with ESP_INFO parameters. | |||
| 3.3. Security Association Establishment and Maintenance | 3.3. Security Association Establishment and Maintenance | |||
| 3.3.1. ESP Security Associations | 3.3.1. ESP Security Associations | |||
| In HIP, ESP Security Associations are setup between the HIP nodes | In HIP, ESP Security Associations are setup between the HIP nodes | |||
| during the base exchange [RFC5201]. Existing ESP SAs can be updated | during the base exchange [I-D.ietf-hip-rfc5201-bis]. Existing ESP | |||
| later using UPDATE messages. The reason for updating the ESP SA | SAs can be updated later using UPDATE messages. The reason for | |||
| later can be, for example, a need for rekeying the SA because of | updating the ESP SA later can be, for example, a need for rekeying | |||
| sequence number rollover. | the SA because of sequence number rollover. | |||
| Upon setting up a HIP association, each association is linked to two | Upon setting up a HIP association, each association is linked to two | |||
| ESP SAs, one for incoming packets and one for outgoing packets. The | ESP SAs, one for incoming packets and one for outgoing packets. The | |||
| Initiator's incoming SA corresponds with the Responder's outgoing | Initiator's incoming SA corresponds with the Responder's outgoing | |||
| one, and vice versa. The Initiator defines the SPI for its incoming | one, and vice versa. The Initiator defines the SPI for its incoming | |||
| association, as defined in Section 3.2.1. This SA is herein called | association, as defined in Section 3.2.1. This SA is herein called | |||
| SA-RI, and the corresponding SPI is called SPI-RI. Respectively, the | SA-RI, and the corresponding SPI is called SPI-RI. Respectively, the | |||
| Responder's incoming SA corresponds with the Initiator's outgoing SA | Responder's incoming SA corresponds with the Initiator's outgoing SA | |||
| and is called SA-IR, with the SPI being called SPI-IR. | and is called SA-IR, with the SPI being called SPI-IR. | |||
| skipping to change at page 6, line 35 ¶ | skipping to change at page 7, line 37 ¶ | |||
| sending out the I2, as explained in Section 6.4. The keys are | sending out the I2, as explained in Section 6.4. The keys are | |||
| derived from KEYMAT, as defined in Section 7. The Responder creates | derived from KEYMAT, as defined in Section 7. The Responder creates | |||
| SA-RI as a part of I2 processing; see Section 6.5. | SA-RI as a part of I2 processing; see Section 6.5. | |||
| The Responder creates SA-IR as a part of I2 processing, before | The Responder creates SA-IR as a part of I2 processing, before | |||
| sending out R2; see Section 6.5. The Initiator creates SA-IR when | sending out R2; see Section 6.5. The Initiator creates SA-IR when | |||
| processing R2; see Section 6.6. | processing R2; see Section 6.6. | |||
| The initial session keys are drawn from the generated keying | The initial session keys are drawn from the generated keying | |||
| material, KEYMAT, after the HIP keys have been drawn as specified in | material, KEYMAT, after the HIP keys have been drawn as specified in | |||
| [RFC5201]. | [I-D.ietf-hip-rfc5201-bis]. | |||
| When the HIP association is removed, the related ESP SAs MUST also be | When the HIP association is removed, the related ESP SAs MUST also be | |||
| removed. | removed. | |||
| 3.3.2. Rekeying | 3.3.2. Rekeying | |||
| After the initial HIP base exchange and SA establishment, both hosts | After the initial HIP base exchange and SA establishment, both hosts | |||
| are in the ESTABLISHED state. There are no longer Initiator and | are in the ESTABLISHED state. There are no longer Initiator and | |||
| Responder roles and the association is symmetric. In this | Responder roles and the association is symmetric. In this | |||
| subsection, the party that initiates the rekey procedure is denoted | subsection, the party that initiates the rekey procedure is denoted | |||
| skipping to change at page 7, line 41 ¶ | skipping to change at page 8, line 43 ¶ | |||
| An SA pair is indexed by the 2 SPIs and 2 HITs (both local and remote | An SA pair is indexed by the 2 SPIs and 2 HITs (both local and remote | |||
| HITs since a system can have more than one HIT). An inactivity timer | HITs since a system can have more than one HIT). An inactivity timer | |||
| is RECOMMENDED for all SAs. If the state dictates the deletion of an | is RECOMMENDED for all SAs. If the state dictates the deletion of an | |||
| SA, a timer is set to allow for any late arriving packets. | SA, a timer is set to allow for any late arriving packets. | |||
| 3.3.4. Security Parameter Index (SPI) | 3.3.4. Security Parameter Index (SPI) | |||
| The SPIs in ESP provide a simple compression of the HIP data from all | The SPIs in ESP provide a simple compression of the HIP data from all | |||
| packets after the HIP exchange. This does require a per HIT-pair | packets after the HIP exchange. This does require a per HIT-pair | |||
| Security Association (and SPI), and a decrease of policy granularity | Security Association (and SPI), and a decrease of policy granularity | |||
| over other Key Management Protocols like IKE. | over other Key Management Protocols like Internet Key Exchange (IKE) | |||
| [RFC5996]. | ||||
| When a host updates the ESP SA, it provides a new inbound SPI to and | When a host updates the ESP SA, it provides a new inbound SPI to and | |||
| gets a new outbound SPI from its partner. | gets a new outbound SPI from its peer. | |||
| 3.3.5. Supported Transforms | 3.3.5. Supported Ciphers | |||
| All HIP implementations MUST support AES-CBC [RFC3602] and HMAC-SHA- | All HIP implementations MUST support AES-128-CBC and AES-256-CBC | |||
| 1-96 [RFC2404]. If the Initiator does not support any of the | [RFC3602]. If the Initiator does not support any of the transforms | |||
| transforms offered by the Responder, it should abandon the | offered by the Responder, it should abandon the negotiation and | |||
| negotiation and inform the peer with a NOTIFY message about a non- | inform the peer with a NOTIFY message about a non-supported | |||
| supported transform. | transform. | |||
| In addition to AES-CBC, all implementations MUST implement the ESP | In addition to AES-128-CBC, all implementations MUST implement the | |||
| NULL encryption algorithm. When the ESP NULL encryption is used, it | ESP NULL encryption algorithm. When the ESP NULL encryption is used, | |||
| MUST be used together with SHA1 or MD5 authentication as specified in | it MUST be used together with SHA-256 authentication as specified in | |||
| Section 5.1.2 | Section 5.1.2 | |||
| 3.3.6. Sequence Number | 3.3.6. Sequence Number | |||
| The Sequence Number field is MANDATORY when ESP is used with HIP. | The Sequence Number field is MANDATORY when ESP is used with HIP. | |||
| Anti-replay protection MUST be used in an ESP SA established with | Anti-replay protection MUST be used in an ESP SA established with | |||
| HIP. When ESP is used with HIP, a 64-bit sequence number MUST be | HIP. When ESP is used with HIP, a 64-bit sequence number MUST be | |||
| used. This means that each host MUST rekey before its sequence | used. This means that each host MUST rekey before its sequence | |||
| number reaches 2^64. | number reaches 2^64. | |||
| When using a 64-bit sequence number, the higher 32 bits are NOT | When using a 64-bit sequence number, the higher 32 bits are NOT | |||
| included in the ESP header, but are simply kept local to both peers. | included in the ESP header, but are simply kept local to both peers. | |||
| See [RFC4301]. | See [RFC4301]. | |||
| 3.3.7. Lifetimes and Timers | 3.3.7. Lifetimes and Timers | |||
| HIP does not negotiate any lifetimes. All ESP lifetimes are local | HIP does not negotiate any lifetimes. All ESP lifetimes are local | |||
| policy. The only lifetimes a HIP implementation MUST support are | policy. The only lifetimes a HIP implementation MUST support are | |||
| sequence number rollover (for replay protection), and SHOULD support | sequence number rollover (for replay protection), and SHOULD support | |||
| timing out inactive ESP SAs. An SA times out if no packets are | timing out inactive ESP SAs. An SA times out if no packets are | |||
| received using that SA. The default timeout value is 15 minutes. | received using that SA. Implementations SHOULD support a | |||
| Implementations MAY support lifetimes for the various ESP transforms. | configurable SA timeout value. Implementations MAY support lifetimes | |||
| Each implementation SHOULD implement per-HIT configuration of the | for the various ESP transforms. Each implementation SHOULD implement | |||
| inactivity timeout, allowing statically configured HIP associations | per-HIT configuration of the inactivity timeout, allowing statically | |||
| to stay alive for days, even when inactive. | configured HIP associations to stay alive for days, even when | |||
| inactive. | ||||
| 3.4. IPsec and HIP ESP Implementation Considerations | 3.4. IPsec and HIP ESP Implementation Considerations | |||
| When HIP is run on a node where a standards compliant IPsec is used, | When HIP is run on a node where a standards compliant IPsec is used, | |||
| some issues have to be considered. | some issues have to be considered. | |||
| The HIP implementation must be able to co-exist with other IPsec | The HIP implementation must be able to co-exist with other IPsec | |||
| keying protocols. When the HIP implementation selects the SPI value, | keying protocols. When the HIP implementation selects the SPI value, | |||
| it may lead to a collision if not implemented properly. To avoid the | it may lead to a collision if not implemented properly. To avoid the | |||
| possibility for a collision, the HIP implementation MUST ensure that | possibility for a collision, the HIP implementation MUST ensure that | |||
| the SPI values used for HIP SAs are not used for IPsec or other SAs, | the SPI values used for HIP SAs are not used for IPsec or other SAs, | |||
| and vice versa. | and vice versa. | |||
| Incoming packets using an SA that is not negotiated by HIP MUST NOT | ||||
| be processed as described in Section 3.2, paragraph 2. The SPI will | ||||
| identify the correct SA for packet decryption and MUST be used to | ||||
| identify that the packet has an upper-layer checksum that is | ||||
| calculated as specified in [I-D.ietf-hip-rfc5201-bis]. | ||||
| 3.4.1. Data Packet Processing Considerations | ||||
| For outbound traffic, the SPD or (coordinated) SPDs if there are two | For outbound traffic, the SPD or (coordinated) SPDs if there are two | |||
| (one for HIP and one for IPsec) MUST ensure that packets intended for | (one for HIP and one for IPsec) MUST ensure that packets intended for | |||
| HIP processing are given a HIP-enabled SA and that packets intended | HIP processing are given a HIP-enabled SA and that packets intended | |||
| for IPsec processing are given an IPsec-enabled SA. The SP then MUST | for IPsec processing are given an IPsec-enabled SA. The SP then MUST | |||
| be bound to the matching SA and non-HIP packets will not be processed | be bound to the matching SA and non-HIP packets will not be processed | |||
| by this SA. Data originating from a socket that is not using HIP | by this SA. Data originating from a socket that is not using HIP | |||
| MUST NOT have checksum recalculated (as described in Section 3.2, | MUST NOT have checksum recalculated (as described in Section 3.2, | |||
| paragraph 2) and data MUST NOT be passed to the SP or SA created by | paragraph 2) and data MUST NOT be passed to the SP or SA created by | |||
| the HIP. | the HIP. | |||
| Incoming data packets using an SA that is not negotiated by HIP MUST | It is possible that in case of overlapping policies, the outgoing | |||
| NOT be processed as described in Section 3.2, paragraph 2. The SPI | packet would be handled both by the IPsec and HIP. In this case, it | |||
| will identify the correct SA for packet decryption and MUST be used | is possible that the HIP association is end-to-end, while the IPsec | |||
| to identify that the packet has an upper-layer checksum that is | SA is for encryption between the HIP host and a Security Gateway. In | |||
| calculated as specified in [RFC5201]. | case of a Security Gateway ESP association, the ESP uses always | |||
| tunnel mode. | ||||
| In case of IPsec tunnel mode, it is hard to see during the HIP SA | ||||
| processing if the IPsec ESP SA has the same final destination. Thus, | ||||
| traffic MUST be encrypted both with the HIP ESP SA and with the IPsec | ||||
| SA when the IPsec ESP SA is used in tunnel mode. | ||||
| In case of IPsec transport mode, the connection end-points are the | ||||
| same. However, for HIP data packets it is not possible to avoid HIP | ||||
| SA processing, while mapping the HIP data packet's IP addresses to | ||||
| the corresponding HITs requires SPI values from the ESP header. In | ||||
| case of transport mode IPsec SA, the IPsec encryption MAY be skipped | ||||
| to avoid double encryption, if the local policy allows. | ||||
| 3.4.2. HIP Signaling Packet Considerations | ||||
| In general, HIP signaling packets should follow the same processing | ||||
| as HIP data packets. | ||||
| In case of IPsec tunnel mode, the HIP signaling packets are always | ||||
| encrypted using IPsec ESP SA. Note, that this hides the HIP | ||||
| signaling packets from the eventual HIP middle boxes on the path | ||||
| between the originating host and the Security Gateway. | ||||
| In case of IPsec transport mode, the HIP signaling packets MAY skip | ||||
| the IPsec ESP SA encryption if the local policy allows. This allows | ||||
| the eventual HIP middle boxes to handle the passing HIP signaling | ||||
| packets. | ||||
| 4. The Protocol | 4. The Protocol | |||
| In this section, the protocol for setting up an ESP association to be | In this section, the protocol for setting up an ESP association to be | |||
| used with HIP association is described. | used with HIP association is described. | |||
| 4.1. ESP in HIP | 4.1. ESP in HIP | |||
| 4.1.1. Setting Up an ESP Security Association | 4.1.1. IPsec ESP Transport Format Type | |||
| The HIP handshake signals the TRANSPORT_FORMAT_LIST parameter in the | ||||
| R1 and I2 messages. This parameter contains a list of the supported | ||||
| HIP transport formats of the sending host in the order of preference. | ||||
| The transport format type for IPsec ESP is the type number of the | ||||
| ESP_TRANSFORM parameter, i.e., 4095. | ||||
| 4.1.2. Setting Up an ESP Security Association | ||||
| Setting up an ESP Security Association between hosts using HIP | Setting up an ESP Security Association between hosts using HIP | |||
| consists of three messages passed between the hosts. The parameters | consists of three messages passed between the hosts. The parameters | |||
| are included in R1, I2, and R2 messages during base exchange. | are included in R1, I2, and R2 messages during base exchange. | |||
| Initiator Responder | Initiator Responder | |||
| I1 | I1 | |||
| ----------------------------------> | ----------------------------------> | |||
| skipping to change at page 9, line 48 ¶ | skipping to change at page 12, line 6 ¶ | |||
| <---------------------------------- | <---------------------------------- | |||
| Setting up an ESP Security Association between HIP hosts requires | Setting up an ESP Security Association between HIP hosts requires | |||
| three messages to exchange the information that is required during an | three messages to exchange the information that is required during an | |||
| ESP communication. | ESP communication. | |||
| The R1 message contains the ESP_TRANSFORM parameter, in which the | The R1 message contains the ESP_TRANSFORM parameter, in which the | |||
| sending host defines the possible ESP transforms it is willing to use | sending host defines the possible ESP transforms it is willing to use | |||
| for the ESP SA. | for the ESP SA. | |||
| Including the ESP_TRANSFORM parameter in the R1 message adds clarity | ||||
| to the TRANSPORT_FORMAT_LIST, but may initiate negotiations for | ||||
| possibly unselected transforms. However, resource-constrained | ||||
| devices will most likely restrict support to a single transform for | ||||
| the sake of minimizing ROM overhead and the additional parameter adds | ||||
| negligible overhead with unconstrained devices. | ||||
| The I2 message contains the response to an ESP_TRANSFORM received in | The I2 message contains the response to an ESP_TRANSFORM received in | |||
| the R1 message. The sender must select one of the proposed ESP | the R1 message. The sender must select one of the proposed ESP | |||
| transforms from the ESP_TRANSFORM parameter in the R1 message and | transforms from the ESP_TRANSFORM parameter in the R1 message and | |||
| include the selected one in the ESP_TRANSFORM parameter in the I2 | include the selected one in the ESP_TRANSFORM parameter in the I2 | |||
| packet. In addition to the transform, the host includes the ESP_INFO | packet. In addition to the transform, the host includes the ESP_INFO | |||
| parameter containing the SPI value to be used by the peer host. | parameter containing the SPI value to be used by the peer host. | |||
| In the R2 message, the ESP SA setup is finalized. The packet | In the R2 message, the ESP SA setup is finalized. The packet | |||
| contains the SPI information required by the Initiator for the ESP | contains the SPI information required by the Initiator for the ESP | |||
| SA. | SA. | |||
| 4.1.2. Updating an Existing ESP SA | 4.1.3. Updating an Existing ESP SA | |||
| The update process is accomplished using two messages. The HIP | The update process is accomplished using two messages. The HIP | |||
| UPDATE message is used to update the parameters of an existing ESP | UPDATE message is used to update the parameters of an existing ESP | |||
| SA. The UPDATE mechanism and message is defined in [RFC5201], and | SA. The UPDATE mechanism and message is defined in | |||
| the additional parameters for updating an existing ESP SA are | [I-D.ietf-hip-rfc5201-bis], and the additional parameters for | |||
| described here. | updating an existing ESP SA are described here. | |||
| The following picture shows a typical exchange when an existing ESP | The following picture shows a typical exchange when an existing ESP | |||
| SA is updated. Messages include SEQ and ACK parameters required by | SA is updated. Messages include SEQ and ACK parameters required by | |||
| the UPDATE mechanism. | the UPDATE mechanism. | |||
| H1 H2 | H1 H2 | |||
| UPDATE: SEQ, ESP_INFO [, DIFFIE_HELLMAN] | UPDATE: SEQ, ESP_INFO [, DIFFIE_HELLMAN] | |||
| -----------------------------------------------------> | -----------------------------------------------------> | |||
| UPDATE: SEQ, ACK, ESP_INFO [, DIFFIE_HELLMAN] | UPDATE: SEQ, ACK, ESP_INFO [, DIFFIE_HELLMAN] | |||
| skipping to change at page 10, line 39 ¶ | skipping to change at page 13, line 5 ¶ | |||
| UPDATE: ACK | UPDATE: ACK | |||
| -----------------------------------------------------> | -----------------------------------------------------> | |||
| The host willing to update the ESP SA creates and sends an UPDATE | The host willing to update the ESP SA creates and sends an UPDATE | |||
| message. The message contains the ESP_INFO parameter containing the | message. The message contains the ESP_INFO parameter containing the | |||
| old SPI value that was used, the new SPI value to be used, and the | old SPI value that was used, the new SPI value to be used, and the | |||
| index value for the keying material, giving the point from where the | index value for the keying material, giving the point from where the | |||
| next keys will be drawn. If new keying material must be generated, | next keys will be drawn. If new keying material must be generated, | |||
| the UPDATE message will also contain the DIFFIE_HELLMAN parameter | the UPDATE message will also contain the DIFFIE_HELLMAN parameter | |||
| defined in [RFC5201]. | defined in [I-D.ietf-hip-rfc5201-bis]. | |||
| The host receiving the UPDATE message requesting update of an | The host receiving the UPDATE message requesting update of an | |||
| existing ESP SA MUST reply with an UPDATE message. In the reply | existing ESP SA MUST reply with an UPDATE message. In the reply | |||
| message, the host sends the ESP_INFO parameter containing the | message, the host sends the ESP_INFO parameter containing the | |||
| corresponding values: old SPI, new SPI, and the keying material | corresponding values: old SPI, new SPI, and the keying material | |||
| index. If the incoming UPDATE contained a DIFFIE_HELLMAN parameter, | index. If the incoming UPDATE contained a DIFFIE_HELLMAN parameter, | |||
| the reply packet MUST also contain a DIFFIE_HELLMAN parameter. | the reply packet MUST also contain a DIFFIE_HELLMAN parameter. | |||
| 5. Parameter and Packet Formats | 5. Parameter and Packet Formats | |||
| In this section, new and modified HIP parameters are presented, as | In this section, new and modified HIP parameters are presented, as | |||
| well as modified HIP packets. | well as modified HIP packets. | |||
| 5.1. New Parameters | 5.1. New Parameters | |||
| Two new HIP parameters are defined for setting up ESP transport | Two new HIP parameters are defined for setting up ESP transport | |||
| format associations in HIP communication and for rekeying existing | format associations in HIP communication and for rekeying existing | |||
| ones. Also, the NOTIFY parameter, described in [RFC5201], has two | ones. Also, the NOTIFICATION parameter, described in | |||
| new error parameters. | [I-D.ietf-hip-rfc5201-bis], has two new error parameters. | |||
| Parameter Type Length Data | Parameter Type Length Data | |||
| ESP_INFO 65 12 Remote's old SPI, | ESP_INFO 65 12 Remote's old SPI, | |||
| new SPI, and other info | new SPI, and other info | |||
| ESP_TRANSFORM 4095 variable ESP Encryption and | ESP_TRANSFORM 4095 variable ESP Encryption and | |||
| Authentication Transform(s) | Authentication Transform(s) | |||
| 5.1.1. ESP_INFO | 5.1.1. ESP_INFO | |||
| During the establishment and update of an ESP SA, the SPI value of | During the establishment and update of an ESP SA, the SPI value of | |||
| both hosts must be transmitted between the hosts. During the | both hosts must be transmitted between the hosts. In addition, hosts | |||
| establishment and update of an ESP SA, the SPI value of both hosts | need the index value to the KEYMAT when they are drawing keys from | |||
| must be transmitted between the hosts. In addition, hosts need the | the generated keying material. The ESP_INFO parameter is used to | |||
| index value to the KEYMAT when they are drawing keys from the | ||||
| generated keying material. The ESP_INFO parameter is used to | ||||
| transmit the SPI values and the KEYMAT index information between the | transmit the SPI values and the KEYMAT index information between the | |||
| hosts. | hosts. | |||
| During the initial ESP SA setup, the hosts send the SPI value that | During the initial ESP SA setup, the hosts send the SPI value that | |||
| they want the peer to use when sending ESP data to them. The value | they want the peer to use when sending ESP data to them. The value | |||
| is set in the NEW SPI field of the ESP_INFO parameter. In the | is set in the NEW SPI field of the ESP_INFO parameter. In the | |||
| initial setup, an old value for the SPI does not exist, thus the OLD | initial setup, an old value for the SPI does not exist, thus the OLD | |||
| SPI value field is set to zero. The OLD SPI field value may also be | SPI value field is set to zero. The OLD SPI field value may also be | |||
| zero when additional SAs are set up between HIP hosts, e.g., in case | zero when additional SAs are set up between HIP hosts, e.g., in case | |||
| of multihomed HIP hosts [RFC5206]. However, such use is beyond the | of multihomed HIP hosts [RFC5206]. However, such use is beyond the | |||
| scope of this specification. | scope of this specification. | |||
| RFC 4301 [RFC4301] describes how to establish multiple SAs to | ||||
| properly support QoS. If different classes of traffic (distinguished | ||||
| by Differentiated Services Code Point (DSCP) bits [RFC3474], | ||||
| [RFC3260]) are sent on the same SA, and if the receiver is employing | ||||
| the optional anti-replay feature available in ESP, this could result | ||||
| in inappropriate discarding of lower priority packets due to the | ||||
| windowing mechanism used by this feature. Therefore, a sender SHOULD | ||||
| put traffic of different classes but with the same selector values on | ||||
| different SAs to support Quality of Service (QoS) appropriately. To | ||||
| permit this, the implementation MUST permit establishment and | ||||
| maintenance of multiple SAs between a given sender and receiver with | ||||
| the same selectors. Distribution of traffic among these parallel SAs | ||||
| to support QoS is locally determined by the sender and is not | ||||
| negotiated by HIP. The receiver MUST process the packets from the | ||||
| different SAs without prejudice. It is possible that the DSCP value | ||||
| changes en route, but this should not cause problems with respect to | ||||
| IPsec processing since the value is not employed for SA selection and | ||||
| MUST NOT be checked as part of SA/packet validation. | ||||
| The KEYMAT index value points to the place in the KEYMAT from where | The KEYMAT index value points to the place in the KEYMAT from where | |||
| the keying material for the ESP SAs is drawn. The KEYMAT index value | the keying material for the ESP SAs is drawn. The KEYMAT index value | |||
| is zero only when the ESP_INFO is sent during a rekeying process and | is zero only when the ESP_INFO is sent during a rekeying process and | |||
| new keying material is generated. | new keying material is generated. | |||
| During the life of an SA established by HIP, one of the hosts may | During the life of an SA established by HIP, one of the hosts may | |||
| need to reset the Sequence Number to one and rekey. The reason for | need to reset the Sequence Number to one and rekey. The reason for | |||
| rekeying might be an approaching sequence number wrap in ESP, or a | rekeying might be an approaching sequence number wrap in ESP, or a | |||
| local policy on use of a key. Rekeying ends the current SAs and | local policy on use of a key. Rekeying ends the current SAs and | |||
| starts new ones on both peers. | starts new ones on both peers. | |||
| During the rekeying process, the ESP_INFO parameter is used to | During the rekeying process, the ESP_INFO parameter is used to | |||
| transmit the changed SPI values and the keying material index. | transmit the changed SPI values and the keying material index. | |||
| 0 1 2 3 | 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 | 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 | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Reserved | KEYMAT Index | | | Reserved | KEYMAT Index | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | OLD SPI | | | OLD SPI | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | NEW SPI | | | NEW SPI | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type 65 | ||||
| Length 12 | ||||
| KEYMAT Index Index, in bytes, where to continue to draw ESP keys | ||||
| from KEYMAT. If the packet includes a new | ||||
| Diffie-Hellman key and the ESP_INFO is sent in an | ||||
| UPDATE packet, the field MUST be zero. If the | ||||
| ESP_INFO is included in base exchange messages, the | ||||
| KEYMAT Index must have the index value of the point | ||||
| from where the ESP SA keys are drawn. Note that the | ||||
| length of this field limits the amount of | ||||
| keying material that can be drawn from KEYMAT. If | ||||
| that amount is exceeded, the packet MUST contain | ||||
| a new Diffie-Hellman key. | ||||
| OLD SPI old SPI for data sent to address(es) associated | ||||
| with this SA. If this is an initial SA setup, the | ||||
| OLD SPI value is zero. | ||||
| NEW SPI new SPI for data sent to address(es) associated | Type 65 | |||
| with this SA. | Length 12 | |||
| KEYMAT Index Index, in bytes, where to continue to draw ESP keys | ||||
| from KEYMAT. If the packet includes a new | ||||
| Diffie-Hellman key and the ESP_INFO is sent in an | ||||
| UPDATE packet, the field MUST be zero. If the | ||||
| ESP_INFO is included in base exchange messages, the | ||||
| KEYMAT Index must have the index value of the point | ||||
| from where the ESP SA keys are drawn. Note that | ||||
| the length of this field limits the amount of | ||||
| keying material that can be drawn from KEYMAT. If | ||||
| that amount is exceeded, the packet MUST contain | ||||
| a new Diffie-Hellman key. | ||||
| OLD SPI old SPI for data sent to address(es) associated | ||||
| with this SA. If this is an initial SA setup, the | ||||
| OLD SPI value is zero. | ||||
| NEW SPI new SPI for data sent to address(es) associated | ||||
| with this SA. | ||||
| 5.1.2. ESP_TRANSFORM | 5.1.2. ESP_TRANSFORM | |||
| The ESP_TRANSFORM parameter is used during ESP SA establishment. The | The ESP_TRANSFORM parameter is used during ESP SA establishment. The | |||
| first party sends a selection of transform families in the | first party sends a selection of transform families in the | |||
| ESP_TRANSFORM parameter, and the peer must select one of the proposed | ESP_TRANSFORM parameter, and the peer must select one of the proposed | |||
| values and include it in the response ESP_TRANSFORM parameter. | values and include it in the response ESP_TRANSFORM parameter. | |||
| 0 1 2 3 | 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 | 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 | |||
| skipping to change at page 13, line 33 ¶ | skipping to change at page 15, line 30 ¶ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Suite ID #n | Padding | | | Suite ID #n | Padding | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type 4095 | Type 4095 | |||
| Length length in octets, excluding Type, Length, and | Length length in octets, excluding Type, Length, and | |||
| padding | padding | |||
| Reserved zero when sent, ignored when received | Reserved zero when sent, ignored when received | |||
| Suite ID defines the ESP Suite to be used | Suite ID defines the ESP Suite to be used | |||
| The following Suite IDs are defined in RFC 5201 [RFC5201]: | The following Suite IDs can be used: | |||
| Suite ID Value | Suite ID Value | |||
| RESERVED 0 | RESERVED 0 | |||
| AES-CBC with HMAC-SHA1 1 | AES-128-CBC with HMAC-SHA1 1 [RFC3602], [RFC2404] | |||
| 3DES-CBC with HMAC-SHA1 2 | DEPRECATED 2 | |||
| 3DES-CBC with HMAC-MD5 3 | DEPRECATED 3 | |||
| BLOWFISH-CBC with HMAC-SHA1 4 | DEPRECATED 4 | |||
| NULL with HMAC-SHA1 5 | DEPRECATED 5 | |||
| NULL with HMAC-MD5 6 | DEPRECATED 6 | |||
| NULL-ENCRYPT with HMAC-SHA-256 7 [RFC2410], [RFC4868] | ||||
| AES-128-CBC with HMAC-SHA-256 8 [RFC3602], [RFC4868] | ||||
| AES-256-CBC with HMAC-SHA-256 9 [RFC3602], [RFC4868] | ||||
| AES-CCM-8 10 [RFC4309] | ||||
| AES-CCM-16 11 [RFC4309] | ||||
| AES-GCM with a 8 octet ICV 12 [RFC4106] | ||||
| AES-GCM with a 16 octet ICV 13 [RFC4106] | ||||
| AES-CMAC-96 14 [RFC4493], [RFC4494] | ||||
| AES-GMAC 15 [RFC4543] | ||||
| The sender of an ESP transform parameter MUST make sure that there | The sender of an ESP transform parameter MUST make sure that there | |||
| are no more than six (6) Suite IDs in one ESP transform parameter. | are no more than six (6) Suite IDs in one ESP transform parameter. | |||
| Conversely, a recipient MUST be prepared to handle received transport | ||||
| Conversely, a recipient MUST be prepared to handle received transform | ||||
| parameters that contain more than six Suite IDs. The limited number | parameters that contain more than six Suite IDs. The limited number | |||
| of Suite IDs sets the maximum size of the ESP_TRANSFORM parameter. | of Suite IDs sets the maximum size of the ESP_TRANSFORM parameter. | |||
| As the default configuration, the ESP_TRANSFORM parameter MUST | As the default configuration, the ESP_TRANSFORM parameter MUST | |||
| contain at least one of the mandatory Suite IDs. There MAY be a | contain at least one of the mandatory Suite IDs. There MAY be a | |||
| configuration option that allows the administrator to override this | configuration option that allows the administrator to override this | |||
| default. | default. | |||
| Mandatory implementations: AES-CBC with HMAC-SHA1 and NULL with HMAC- | Mandatory implementations: AES-128-CBC with HMAC-SHA-256 and NULL | |||
| SHA1. | with HMAC-SHA-256. | |||
| Under some conditions, it is possible to use Traffic Flow | Under some conditions, it is possible to use Traffic Flow | |||
| Confidentiality (TFC) [RFC4303] with ESP in BEET mode. However, the | Confidentiality (TFC) [RFC4303] with ESP in BEET mode. However, the | |||
| definition of such operation is future work and must be done in a | definition of such operation is future work and must be done in a | |||
| separate specification. | separate specification. | |||
| 5.1.3. NOTIFY Parameter | 5.1.3. NOTIFICATION Parameter | |||
| The HIP base specification defines a set of NOTIFY error types. The | The HIP base specification defines a set of NOTIFICATION error types. | |||
| following error types are required for describing errors in ESP | The following error types are required for describing errors in ESP | |||
| Transform crypto suites during negotiation. | Transform crypto suites during negotiation. | |||
| NOTIFY PARAMETER - ERROR TYPES Value | NOTIFICATION PARAMETER - ERROR TYPES Value | |||
| ------------------------------ ----- | ------------------------------------ ----- | |||
| NO_ESP_PROPOSAL_CHOSEN 18 | NO_ESP_PROPOSAL_CHOSEN 18 | |||
| None of the proposed ESP Transform crypto suites was | None of the proposed ESP Transform crypto suites was | |||
| acceptable. | acceptable. | |||
| INVALID_ESP_TRANSFORM_CHOSEN 19 | INVALID_ESP_TRANSFORM_CHOSEN 19 | |||
| The ESP Transform crypto suite does not correspond to | The ESP Transform crypto suite does not correspond to | |||
| one offered by the Responder. | one offered by the Responder. | |||
| skipping to change at page 14, line 46 ¶ | skipping to change at page 16, line 51 ¶ | |||
| The ESP Security Association is set up during the base exchange. The | The ESP Security Association is set up during the base exchange. The | |||
| following subsections define the ESP SA setup procedure using both | following subsections define the ESP SA setup procedure using both | |||
| base exchange messages (R1, I2, R2) and UPDATE messages. | base exchange messages (R1, I2, R2) and UPDATE messages. | |||
| 5.2.1. Setup During Base Exchange | 5.2.1. Setup During Base Exchange | |||
| 5.2.1.1. Modifications in R1 | 5.2.1.1. Modifications in R1 | |||
| The ESP_TRANSFORM contains the ESP modes supported by the sender, in | The ESP_TRANSFORM contains the ESP modes supported by the sender, in | |||
| the order of preference. All implementations MUST support AES-CBC | the order of preference. All implementations MUST support AES-128- | |||
| [RFC3602] with HMAC-SHA-1-96 [RFC2404]. | CBC [RFC3602] with HMAC-SHA-256 [RFC4868]. | |||
| The following figure shows the resulting R1 packet layout. | The following figure shows the resulting R1 packet layout. | |||
| The HIP parameters for the R1 packet: | The HIP parameters for the R1 packet: | |||
| IP ( HIP ( [ R1_COUNTER, ] | IP ( HIP ( [ R1_COUNTER, ] | |||
| PUZZLE, | PUZZLE, | |||
| DIFFIE_HELLMAN, | DIFFIE_HELLMAN, | |||
| HIP_TRANSFORM, | HIP_CIPHER, | |||
| ESP_TRANSFORM, | ESP_TRANSFORM, | |||
| HOST_ID, | HOST_ID, | |||
| [ ECHO_REQUEST, ] | [ ECHO_REQUEST, ] | |||
| HIP_SIGNATURE_2 ) | HIP_SIGNATURE_2 ) | |||
| [, ECHO_REQUEST ]) | [, ECHO_REQUEST ]) | |||
| 5.2.1.2. Modifications in I2 | 5.2.1.2. Modifications in I2 | |||
| The ESP_INFO contains the sender's SPI for this association as well | The ESP_INFO contains the sender's SPI for this association as well | |||
| as the KEYMAT index from where the ESP SA keys will be drawn. The | as the KEYMAT index from where the ESP SA keys will be drawn. The | |||
| old SPI value is set to zero. | old SPI value is set to zero. | |||
| The ESP_TRANSFORM contains the ESP mode selected by the sender of R1. | The ESP_TRANSFORM contains the ESP mode selected by the sender of R1. | |||
| All implementations MUST support AES-CBC [RFC3602] with HMAC-SHA-1-96 | All implementations MUST support AES-128-CBC [RFC3602] with HMAC-SHA- | |||
| [RFC2404]. | 256 [RFC4868]. | |||
| The following figure shows the resulting I2 packet layout. | The following figure shows the resulting I2 packet layout. | |||
| The HIP parameters for the I2 packet: | The HIP parameters for the I2 packet: | |||
| IP ( HIP ( ESP_INFO, | IP ( HIP ( ESP_INFO, | |||
| [R1_COUNTER,] | [R1_COUNTER,] | |||
| SOLUTION, | SOLUTION, | |||
| DIFFIE_HELLMAN, | DIFFIE_HELLMAN, | |||
| HIP_TRANSFORM, | HIP_CIPHER, | |||
| ESP_TRANSFORM, | ESP_TRANSFORM, | |||
| ENCRYPTED { HOST_ID }, | ENCRYPTED { HOST_ID }, | |||
| [ ECHO_RESPONSE ,] | [ ECHO_RESPONSE ,] | |||
| HMAC, | HMAC, | |||
| HIP_SIGNATURE | HIP_SIGNATURE | |||
| [, ECHO_RESPONSE] ) ) | [, ECHO_RESPONSE] ) ) | |||
| 5.2.1.3. Modifications in R2 | 5.2.1.3. Modifications in R2 | |||
| The R2 contains an ESP_INFO parameter, which has the SPI value of the | The R2 contains an ESP_INFO parameter, which has the SPI value of the | |||
| skipping to change at page 17, line 43 ¶ | skipping to change at page 19, line 40 ¶ | |||
| IP ( HIP ( ESP_INFO, | IP ( HIP ( ESP_INFO, | |||
| SEQ, | SEQ, | |||
| ACK, | ACK, | |||
| [ DIFFIE_HELLMAN, ] | [ DIFFIE_HELLMAN, ] | |||
| HMAC, | HMAC, | |||
| HIP_SIGNATURE ) ) | HIP_SIGNATURE ) ) | |||
| 5.4. ICMP Messages | 5.4. ICMP Messages | |||
| ICMP message handling is mainly described in the HIP base | ICMP message handling is mainly described in the HIP base | |||
| specification [RFC5201]. In this section, we describe the actions | specification [I-D.ietf-hip-rfc5201-bis]. In this section, we | |||
| related to ESP security associations. | describe the actions related to ESP security associations. | |||
| 5.4.1. Unknown SPI | 5.4.1. Unknown SPI | |||
| If a HIP implementation receives an ESP packet that has an | If a HIP implementation receives an ESP packet that has an | |||
| unrecognized SPI number, it MAY respond (subject to rate limiting the | unrecognized SPI number, it MAY respond (subject to rate limiting the | |||
| responses) with an ICMP packet with type "Parameter Problem", with | responses) with an ICMP packet with type "Parameter Problem", with | |||
| the pointer pointing to the beginning of SPI field in the ESP header. | the pointer pointing to the beginning of SPI field in the ESP header. | |||
| 6. Packet Processing | 6. Packet Processing | |||
| Packet processing is mainly defined in the HIP base specification | Packet processing is mainly defined in the HIP base specification | |||
| [RFC5201]. This section describes the changes and new requirements | [I-D.ietf-hip-rfc5201-bis]. This section describes the changes and | |||
| for packet handling when the ESP transport format is used. Note that | new requirements for packet handling when the ESP transport format is | |||
| all HIP packets (currently protocol 253) MUST bypass ESP processing. | used. Note that all HIP packets (currently protocol 139) MUST bypass | |||
| ESP processing. | ||||
| 6.1. Processing Outgoing Application Data | 6.1. Processing Outgoing Application Data | |||
| Outgoing application data handling is specified in the HIP base | Outgoing application data handling is specified in the HIP base | |||
| specification [RFC5201]. When the ESP transport format is used, and | specification [I-D.ietf-hip-rfc5201-bis]. When the ESP transport | |||
| there is an active HIP session for the given < source, destination > | format is used, and there is an active HIP session for the given < | |||
| HIT pair, the outgoing datagram is protected using the ESP security | source, destination > HIT pair, the outgoing datagram is protected | |||
| association. In a typical implementation, this will result in a | using the ESP security association. The following additional steps | |||
| BEET-mode ESP packet being sent. BEET-mode [ESP-BEET] was introduced | define the conceptual processing rules for outgoing ESP protected | |||
| above in Section 3.2. The following additional steps define the | datagrams. | |||
| conceptual processing rules for outgoing ESP protected datagrams. | ||||
| 1. Detect the proper ESP SA using the HITs in the packet header or | 1. Detect the proper ESP SA using the HITs in the packet header or | |||
| other information associated with the packet | other information associated with the packet | |||
| 2. Process the packet normally, as if the SA was a transport mode | 2. Process the packet normally, as if the SA was a transport mode | |||
| SA. | SA. | |||
| 3. Ensure that the outgoing ESP protected packet has proper IP | 3. Ensure that the outgoing ESP protected packet has proper IP | |||
| header format depending on the used IP address family, and proper | header format depending on the used IP address family, and proper | |||
| IP addresses in its IP header, e.g., by replacing HITs left by | IP addresses in its IP header, e.g., by replacing HITs left by | |||
| skipping to change at page 19, line 33 ¶ | skipping to change at page 21, line 33 ¶ | |||
| datagram to the right upper layer socket is performed as usual, | datagram to the right upper layer socket is performed as usual, | |||
| except that the HITs are used in place of IP addresses during the | except that the HITs are used in place of IP addresses during the | |||
| demultiplexing. | demultiplexing. | |||
| 6.3. HMAC and SIGNATURE Calculation and Verification | 6.3. HMAC and SIGNATURE Calculation and Verification | |||
| The new HIP parameters described in this document, ESP_INFO and | The new HIP parameters described in this document, ESP_INFO and | |||
| ESP_TRANSFORM, must be protected using HMAC and signature | ESP_TRANSFORM, must be protected using HMAC and signature | |||
| calculations. In a typical implementation, they are included in R1, | calculations. In a typical implementation, they are included in R1, | |||
| I2, R2, and UPDATE packet HMAC and SIGNATURE calculations as | I2, R2, and UPDATE packet HMAC and SIGNATURE calculations as | |||
| described in [RFC5201]. | described in [I-D.ietf-hip-rfc5201-bis]. | |||
| 6.4. Processing Incoming ESP SA Initialization (R1) | 6.4. Processing Incoming ESP SA Initialization (R1) | |||
| The ESP SA setup is initialized in the R1 message. The receiving | The ESP SA setup is initialized in the R1 message. The receiving | |||
| host (Initiator) selects one of the ESP transforms from the presented | host (Initiator) selects one of the ESP transforms from the presented | |||
| values. If no suitable value is found, the negotiation is | values. If no suitable value is found, the negotiation is | |||
| terminated. The selected values are subsequently used when | terminated. The selected values are subsequently used when | |||
| generating and using encryption keys, and when sending the reply | generating and using encryption keys, and when sending the reply | |||
| packet. If the proposed alternatives are not acceptable to the | packet. If the proposed alternatives are not acceptable to the | |||
| system, it may abandon the ESP SA establishment negotiation, or it | system, it may abandon the ESP SA establishment negotiation, or it | |||
| skipping to change at page 20, line 10 ¶ | skipping to change at page 22, line 10 ¶ | |||
| the system prepares and creates an incoming ESP security association. | the system prepares and creates an incoming ESP security association. | |||
| It may also prepare a security association for outgoing traffic, but | It may also prepare a security association for outgoing traffic, but | |||
| since it does not have the correct SPI value yet, it cannot activate | since it does not have the correct SPI value yet, it cannot activate | |||
| it. | it. | |||
| 6.5. Processing Incoming Initialization Reply (I2) | 6.5. Processing Incoming Initialization Reply (I2) | |||
| The following steps are required to process the incoming ESP SA | The following steps are required to process the incoming ESP SA | |||
| initialization replies in I2. The steps below assume that the I2 has | initialization replies in I2. The steps below assume that the I2 has | |||
| been accepted for processing (e.g., has not been dropped due to HIT | been accepted for processing (e.g., has not been dropped due to HIT | |||
| comparisons as described in [RFC5201]). | comparisons as described in [I-D.ietf-hip-rfc5201-bis]). | |||
| o The ESP_TRANSFORM parameter is verified and it MUST contain a | o The ESP_TRANSFORM parameter is verified and it MUST contain a | |||
| single value in the parameter, and it MUST match one of the values | single value in the parameter, and it MUST match one of the values | |||
| offered in the initialization packet. | offered in the initialization packet. | |||
| o The ESP_INFO NEW SPI field is parsed to obtain the SPI that will | o The ESP_INFO NEW SPI field is parsed to obtain the SPI that will | |||
| be used for the Security Association outbound from the Responder | be used for the Security Association outbound from the Responder | |||
| and inbound to the Initiator. For this initial ESP SA | and inbound to the Initiator. For this initial ESP SA | |||
| establishment, the old SPI value MUST be zero. The KEYMAT Index | establishment, the old SPI value MUST be zero. The KEYMAT Index | |||
| field MUST contain the index value to the KEYMAT from where the | field MUST contain the index value to the KEYMAT from where the | |||
| skipping to change at page 21, line 12 ¶ | skipping to change at page 23, line 12 ¶ | |||
| A system may initiate the SA rekeying procedure at any time. It MUST | A system may initiate the SA rekeying procedure at any time. It MUST | |||
| initiate a rekey if its incoming ESP sequence counter is about to | initiate a rekey if its incoming ESP sequence counter is about to | |||
| overflow. The system MUST NOT replace its keying material until the | overflow. The system MUST NOT replace its keying material until the | |||
| rekeying packet exchange successfully completes. | rekeying packet exchange successfully completes. | |||
| Optionally, a system may include a new Diffie-Hellman key for use in | Optionally, a system may include a new Diffie-Hellman key for use in | |||
| new KEYMAT generation. New KEYMAT generation occurs prior to drawing | new KEYMAT generation. New KEYMAT generation occurs prior to drawing | |||
| the new keys. | the new keys. | |||
| The rekeying procedure uses the UPDATE mechanism defined in | The rekeying procedure uses the UPDATE mechanism defined in | |||
| [RFC5201]. Because each peer must update its half of the security | [I-D.ietf-hip-rfc5201-bis]. Because each peer must update its half | |||
| association pair (including new SPI creation), the rekeying process | of the security association pair (including new SPI creation), the | |||
| requires that each side both send and receive an UPDATE. A system | rekeying process requires that each side both send and receive an | |||
| will then rekey the ESP SA when it has sent parameters to the peer | UPDATE. A system will then rekey the ESP SA when it has sent | |||
| and has received both an ACK of the relevant UPDATE message and | parameters to the peer and has received both an ACK of the relevant | |||
| corresponding peer's parameters. It may be that the ACK and the | UPDATE message and corresponding peer's parameters. It may be that | |||
| required HIP parameters arrive in different UPDATE messages. This is | the ACK and the required HIP parameters arrive in different UPDATE | |||
| always true if a system does not initiate ESP SA update but responds | messages. This is always true if a system does not initiate ESP SA | |||
| to an update request from the peer, and may also occur if two systems | update but responds to an update request from the peer, and may also | |||
| initiate update nearly simultaneously. In such a case, if the system | occur if two systems initiate update nearly simultaneously. In such | |||
| has an outstanding update request, it saves the one parameter and | a case, if the system has an outstanding update request, it saves the | |||
| waits for the other before completing rekeying. | one parameter and waits for the other before completing rekeying. | |||
| The following steps define the processing rules for initiating an ESP | The following steps define the processing rules for initiating an ESP | |||
| SA update: | SA update: | |||
| 1. The system decides whether to continue to use the existing KEYMAT | 1. The system decides whether to continue to use the existing KEYMAT | |||
| or to generate a new KEYMAT. In the latter case, the system MUST | or to generate a new KEYMAT. In the latter case, the system MUST | |||
| generate a new Diffie-Hellman public key. | generate a new Diffie-Hellman public key. | |||
| 2. The system creates an UPDATE packet, which contains the ESP_INFO | 2. The system creates an UPDATE packet, which contains the ESP_INFO | |||
| parameter. In addition, the host may include the optional | parameter. In addition, the host may include the optional | |||
| skipping to change at page 22, line 19 ¶ | skipping to change at page 24, line 19 ¶ | |||
| outstanding ESP SA update request for an indefinite time. | outstanding ESP SA update request for an indefinite time. | |||
| To simplify the state machine, a host MUST NOT generate new UPDATEs | To simplify the state machine, a host MUST NOT generate new UPDATEs | |||
| while it has an outstanding ESP SA update request, unless it is | while it has an outstanding ESP SA update request, unless it is | |||
| restarting the update process. | restarting the update process. | |||
| 6.9. Processing Incoming UPDATE Packets | 6.9. Processing Incoming UPDATE Packets | |||
| When a system receives an UPDATE packet, it must be processed if the | When a system receives an UPDATE packet, it must be processed if the | |||
| following conditions hold (in addition to the generic conditions | following conditions hold (in addition to the generic conditions | |||
| specified for UPDATE processing in Section 6.12 of [RFC5201]): | specified for UPDATE processing in Section 6.12 of | |||
| [I-D.ietf-hip-rfc5201-bis]): | ||||
| 1. A corresponding HIP association must exist. This is usually | 1. A corresponding HIP association must exist. This is usually | |||
| ensured by the underlying UPDATE mechanism. | ensured by the underlying UPDATE mechanism. | |||
| 2. The state of the HIP association is ESTABLISHED or R2-SENT. | 2. The state of the HIP association is ESTABLISHED or R2-SENT. | |||
| If the above conditions hold, the following steps define the | If the above conditions hold, the following steps define the | |||
| conceptual processing rules for handling the received UPDATE packet: | conceptual processing rules for handling the received UPDATE packet: | |||
| 1. If the received UPDATE contains a DIFFIE_HELLMAN parameter, the | 1. If the received UPDATE contains a DIFFIE_HELLMAN parameter, the | |||
| skipping to change at page 24, line 44 ¶ | skipping to change at page 26, line 44 ¶ | |||
| denotes the host with the lower HIT value. When HIT values are | denotes the host with the lower HIT value. When HIT values are | |||
| compared, they are interpreted as positive (unsigned) 128-bit | compared, they are interpreted as positive (unsigned) 128-bit | |||
| integers in network byte order. | integers in network byte order. | |||
| The four HIP keys are only drawn from KEYMAT during a HIP I1->R2 | The four HIP keys are only drawn from KEYMAT during a HIP I1->R2 | |||
| exchange. Subsequent rekeys using UPDATE will only draw the four ESP | exchange. Subsequent rekeys using UPDATE will only draw the four ESP | |||
| keys from KEYMAT. Section 6.9 describes the rules for reusing or | keys from KEYMAT. Section 6.9 describes the rules for reusing or | |||
| regenerating KEYMAT based on the rekeying. | regenerating KEYMAT based on the rekeying. | |||
| The number of bits drawn for a given algorithm is the "natural" size | The number of bits drawn for a given algorithm is the "natural" size | |||
| of the keys. For the mandatory algorithms, the following sizes | of the keys, as specified in Section 6.5 of | |||
| apply: | [I-D.ietf-hip-rfc5201-bis]. | |||
| AES 128 bits | ||||
| SHA-1 160 bits | ||||
| NULL 0 bits | ||||
| 8. Security Considerations | 8. Security Considerations | |||
| In this document, the usage of ESP [RFC4303] between HIP hosts to | In this document, the usage of ESP [RFC4303] between HIP hosts to | |||
| protect data traffic is introduced. The Security Considerations for | protect data traffic is introduced. The Security Considerations for | |||
| ESP are discussed in the ESP specification. | ESP are discussed in the ESP specification. | |||
| There are different ways to establish an ESP Security Association | There are different ways to establish an ESP Security Association | |||
| between two nodes. This can be done, e.g., using IKE [RFC4306]. | between two nodes. This can be done, e.g., using IKE [RFC5996]. | |||
| This document specifies how the Host Identity Protocol is used to | This document specifies how the Host Identity Protocol is used to | |||
| establish ESP Security Associations. | establish ESP Security Associations. | |||
| The following issues are new or have changed from the standard ESP | The following issues are new or have changed from the standard ESP | |||
| usage: | usage: | |||
| o Initial keying material generation | o Initial keying material generation | |||
| o Updating the keying material | o Updating the keying material | |||
| The initial keying material is generated using the Host Identity | The initial keying material is generated using the Host Identity | |||
| Protocol [RFC5201] using the Diffie-Hellman procedure. This document | Protocol [I-D.ietf-hip-rfc5201-bis] using the Diffie-Hellman | |||
| extends the usage of the UPDATE packet, defined in the base | procedure. This document extends the usage of the UPDATE packet, | |||
| specification, to modify existing ESP SAs. The hosts may rekey, | defined in the base specification, to modify existing ESP SAs. The | |||
| i.e., force the generation of new keying material using the Diffie- | hosts may rekey, i.e., force the generation of new keying material | |||
| Hellman procedure. The initial setup of ESP SA between the hosts is | using the Diffie-Hellman procedure. The initial setup of ESP SA | |||
| done during the base exchange, and the message exchange is protected | between the hosts is done during the base exchange, and the message | |||
| using methods provided by base exchange. Changes in connection | exchange is protected using methods provided by base exchange. | |||
| parameters means basically that the old ESP SA is removed and a new | Changes in connection parameters means basically that the old ESP SA | |||
| one is generated once the UPDATE message exchange has been completed. | is removed and a new one is generated once the UPDATE message | |||
| The message exchange is protected using the HIP association keys. | exchange has been completed. The message exchange is protected using | |||
| Both HMAC and signing of packets is used. | the HIP association keys. Both HMAC and signing of packets is used. | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| This document defines additional parameters and NOTIFY error types | This document defines additional parameters and NOTIFY error types | |||
| for the Host Identity Protocol [RFC5201]. | for the Host Identity Protocol [I-D.ietf-hip-rfc5201-bis]. | |||
| The new parameters and their type numbers are defined in | The new parameters and their type numbers are defined in | |||
| Section 5.1.1 and Section 5.1.2, and they have been added to the | Section 5.1.1 and Section 5.1.2, and they have been added to the | |||
| Parameter Type namespace specified in [RFC5201]. | Parameter Type namespace specified in [I-D.ietf-hip-rfc5201-bis]. | |||
| The new NOTIFY error types and their values are defined in | The new NOTIFY error types and their values are defined in | |||
| Section 5.1.3, and they have been added to the Notify Message Type | Section 5.1.3, and they have been added to the Notify Message Type | |||
| namespace specified in [RFC5201]. | namespace specified in [I-D.ietf-hip-rfc5201-bis]. | |||
| 10. Acknowledgments | 10. Acknowledgments | |||
| This document was separated from the base "Host Identity Protocol" | This document was separated from the base "Host Identity Protocol" | |||
| specification in the beginning of 2005. Since then, a number of | specification in the beginning of 2005. Since then, a number of | |||
| people have contributed to the text by providing comments and | people have contributed to the text by providing comments and | |||
| modification proposals. The list of people include Tom Henderson, | modification proposals. The list of people include Tom Henderson, | |||
| Jeff Ahrenholz, Jan Melen, Jukka Ylitalo, and Miika Komu. The | Jeff Ahrenholz, Jan Melen, Jukka Ylitalo, and Miika Komu. | |||
| authors also want to thank Charlie Kaufman for reviewing the document | Especially, the authors want to thank Pekka Nikander for his | |||
| with his eye on the usage of crypto algorithms. | invaluable contributions to the document since the first draft | |||
| version. The authors want to thank also Charlie Kaufman for | ||||
| reviewing the document with his eye on the usage of crypto | ||||
| algorithms. | ||||
| Due to the history of this document, most of the ideas are inherited | Due to the history of this document, most of the ideas are inherited | |||
| from the base "Host Identity Protocol" specification. Thus, the list | from the base "Host Identity Protocol" specification. Thus, the list | |||
| of people in the Acknowledgments section of that specification is | of people in the Acknowledgments section of that specification is | |||
| also valid for this document. Many people have given valuable | also valid for this document. Many people have given valuable | |||
| feedback, and our apologies to anyone whose name is missing. | feedback, and our apologies to anyone whose name is missing. | |||
| 11. References | 11. References | |||
| 11.1. Normative references | 11.1. Normative references | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [I-D.ietf-hip-rfc5201-bis] Moskowitz, R., Heer, T., Jokela, P., and | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | T. Henderson, "Host Identity Protocol | |||
| Version 2 (HIPv2)", | ||||
| draft-ietf-hip-rfc5201-bis-14 (work in | ||||
| progress), October 2013. | ||||
| [RFC2404] Madson, C. and R. Glenn, "The Use of HMAC-SHA-1-96 within | [RFC2119] Bradner, S., "Key words for use in RFCs | |||
| ESP and AH", RFC 2404, November 1998. | to Indicate Requirement Levels", BCP 14, | |||
| RFC 2119, March 1997. | ||||
| [RFC3602] Frankel, S., Glenn, R., and S. Kelly, "The AES-CBC Cipher | [RFC2404] Madson, C. and R. Glenn, "The Use of | |||
| Algorithm and Its Use with IPsec", RFC 3602, | HMAC-SHA-1-96 within ESP and AH", | |||
| September 2003. | RFC 2404, November 1998. | |||
| [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", | [RFC2410] Glenn, R. and S. Kent, "The NULL | |||
| RFC 4303, December 2005. | Encryption Algorithm and Its Use With | |||
| IPsec", RFC 2410, November 1998. | ||||
| [RFC5201] Moskowitz, R., Nikander, P., Jokela, P., Ed., and T. | [RFC3602] Frankel, S., Glenn, R., and S. Kelly, | |||
| Henderson, "Host Identity Protocol", RFC 5201, | "The AES-CBC Cipher Algorithm and Its Use | |||
| April 2008. | with IPsec", RFC 3602, September 2003. | |||
| [RFC4106] Viega, J. and D. McGrew, "The Use of | ||||
| Galois/Counter Mode (GCM) in IPsec | ||||
| Encapsulating Security Payload (ESP)", | ||||
| RFC 4106, June 2005. | ||||
| [RFC4303] Kent, S., "IP Encapsulating Security | ||||
| Payload (ESP)", RFC 4303, December 2005. | ||||
| [RFC4309] Housley, R., "Using Advanced Encryption | ||||
| Standard (AES) CCM Mode with IPsec | ||||
| Encapsulating Security Payload (ESP)", | ||||
| RFC 4309, December 2005. | ||||
| [RFC4493] Song, JH., Poovendran, R., Lee, J., and | ||||
| T. Iwata, "The AES-CMAC Algorithm", | ||||
| RFC 4493, June 2006. | ||||
| [RFC4494] Song, JH., Poovendran, R., and J. Lee, | ||||
| "The AES-CMAC-96 Algorithm and Its Use | ||||
| with IPsec", RFC 4494, June 2006. | ||||
| [RFC4543] McGrew, D. and J. Viega, "The Use of | ||||
| Galois Message Authentication Code (GMAC) | ||||
| in IPsec ESP and AH", RFC 4543, May 2006. | ||||
| [RFC4868] Kelly, S. and S. Frankel, "Using HMAC- | ||||
| SHA-256, HMAC-SHA-384, and HMAC-SHA-512 | ||||
| with IPsec", RFC 4868, May 2007. | ||||
| 11.2. Informative references | 11.2. Informative references | |||
| [ESP-BEET] Nikander, P. and J. Melen, "A Bound End-to-End Tunnel | [I-D.ietf-hip-rfc4423-bis] Moskowitz, R. and M. Komu, "Host Identity | |||
| (BEET) mode for ESP", Work in Progress, November 2007. | Protocol Architecture", | |||
| draft-ietf-hip-rfc4423-bis-06 (work in | ||||
| progress), November 2013. | ||||
| [RFC3260] Grossman, D., "New Terminology and Clarifications for | [RFC0791] Postel, J., "Internet Protocol", STD 5, | |||
| Diffserv", RFC 3260, April 2002. | RFC 791, September 1981. | |||
| [RFC3474] Lin, Z. and D. Pendarakis, "Documentation of IANA | [RFC4301] Kent, S. and K. Seo, "Security | |||
| assignments for Generalized MultiProtocol Label Switching | Architecture for the Internet Protocol", | |||
| (GMPLS) Resource Reservation Protocol - Traffic | RFC 4301, December 2005. | |||
| Engineering (RSVP-TE) Usage and Extensions for | ||||
| Automatically Switched Optical Network (ASON)", RFC 3474, | ||||
| March 2003. | ||||
| [RFC4301] Kent, S. and K. Seo, "Security Architecture for the | [RFC5206] Henderson, T., Ed., "End-Host Mobility | |||
| Internet Protocol", RFC 4301, December 2005. | and Multihoming with the Host Identity | |||
| Protocol", RFC 5206, April 2008. | ||||
| [RFC4306] Kaufman, C., "Internet Key Exchange (IKEv2) Protocol", | [RFC5207] Stiemerling, M., Quittek, J., and L. | |||
| RFC 4306, December 2005. | Eggert, "NAT and Firewall Traversal | |||
| Issues of Host Identity Protocol (HIP) | ||||
| Communication", RFC 5207, April 2008. | ||||
| [RFC4423] Moskowitz, R. and P. Nikander, "Host Identity Protocol | [RFC5770] Komu, M., Henderson, T., Tschofenig, H., | |||
| (HIP) Architecture", RFC 4423, May 2006. | Melen, J., and A. Keranen, "Basic Host | |||
| Identity Protocol (HIP) Extensions for | ||||
| Traversal of Network Address | ||||
| Translators", RFC 5770, April 2010. | ||||
| [RFC5206] Henderson, T., Ed., "End-Host Mobility and Multihoming | [RFC5996] Kaufman, C., Hoffman, P., Nir, Y., and P. | |||
| with the Host Identity Protocol", RFC 5206, April 2008. | Eronen, "Internet Key Exchange Protocol | |||
| Version 2 (IKEv2)", RFC 5996, | ||||
| September 2010. | ||||
| Appendix A. A Note on Implementation Options | Appendix A. A Note on Implementation Options | |||
| It is possible to implement this specification in multiple different | It is possible to implement this specification in multiple different | |||
| ways. As noted above, one possible way of implementing this is to | ways. As noted above, one possible way of implementing this is to | |||
| rewrite IP headers below IPsec. In such an implementation, IPsec is | rewrite IP headers below IPsec. In such an implementation, IPsec is | |||
| used as if it was processing IPv6 transport mode packets, with the | used as if it was processing IPv6 transport mode packets, with the | |||
| IPv6 header containing HITs instead of IP addresses in the source and | IPv6 header containing HITs instead of IP addresses in the source and | |||
| destination address fields. In outgoing packets, after IPsec | destination address fields. In outgoing packets, after IPsec | |||
| processing, the HITs are replaced with actual IP addresses, based on | processing, the HITs are replaced with actual IP addresses, based on | |||
| the HITs and the SPI. In incoming packets, before IPsec processing, | the HITs and the SPI. In incoming packets, before IPsec processing, | |||
| the IP addresses are replaced with HITs, based on the SPI in the | the IP addresses are replaced with HITs, based on the SPI in the | |||
| incoming packet. In such an implementation, all IPsec policies are | incoming packet. In such an implementation, all IPsec policies are | |||
| based on HITs and the upper layers only see packets with HITs in the | based on HITs and the upper layers only see packets with HITs in the | |||
| place of IP addresses. Consequently, support of HIP does not | place of IP addresses. Consequently, support of HIP does not | |||
| conflict with other uses of IPsec as long as the SPI spaces are kept | conflict with other uses of IPsec as long as the SPI spaces are kept | |||
| separate. | separate. Appendix B describes another way to implement this | |||
| specification. | ||||
| Another way to implement this specification is to use the proposed | Appendix B. Bound End-to-End Tunnel mode for ESP | |||
| BEET mode (A Bound End-to-End mode for ESP, [ESP-BEET]). The BEET | ||||
| mode provides some features from both IPsec tunnel and transport | ||||
| modes. The HIP uses HITs as the "inner" addresses and IP addresses | ||||
| as "outer" addresses, like IP addresses are used in the tunnel mode. | ||||
| Instead of tunneling packets between hosts, a conversion between | ||||
| inner and outer addresses is made at end-hosts and the inner address | ||||
| is never sent on the wire after the initial HIP negotiation. BEET | ||||
| provides IPsec transport mode syntax (no inner headers) with limited | ||||
| tunnel mode semantics (fixed logical inner addresses - the HITs - and | ||||
| changeable outer IP addresses). | ||||
| Compared to the option of implementing the required address rewrites | This section introduces an alternative way of implementing the | |||
| outside of IPsec, BEET has one implementation level benefit. The | necessary functions for HIP ESP transport. Compared to the option of | |||
| BEET-way of implementing the address rewriting keeps all the | implementing the required address rewrites outside of IPsec, BEET has | |||
| configuration information in one place, at the SAD. On the other | one implementation level benefit. In BEET-way of implementing, the | |||
| hand, when address rewriting is implemented separately, the | address rewriting information is kept in one place, at the SAD. On | |||
| implementation must make sure that the information in the SAD and the | the other hand, when address rewriting is implemented separately, the | |||
| implementation MUST make sure that the information in the SAD and the | ||||
| separate address rewriting DB are kept in synchrony. As a result, | separate address rewriting DB are kept in synchrony. As a result, | |||
| the BEET-mode-based way of implementing this specification is | the BEET-mode-based way of implementing this specification is | |||
| RECOMMENDED over the separate implementation. | RECOMMENDED over the separate implementation as it keeps the binds | |||
| the identities, encryption and locators tightly together. It should | ||||
| be noted that implementing BEET mode doesn't require that | ||||
| corresponding hosts implement it as the behavior is only visible | ||||
| internally in a host. | ||||
| The BEET mode is a combination of IPsec tunnel and transport modes | ||||
| and provides some of the features from both. The HIP uses HITs as | ||||
| the "inner" addresses and IP addresses as "outer" addresses, like IP | ||||
| addresses are used in the tunnel mode. Instead of tunneling packets | ||||
| between hosts, a conversion between inner and outer addresses is made | ||||
| at end-hosts and the inner address is never sent on the wire after | ||||
| the initial HIP negotiation. BEET provides IPsec transport mode | ||||
| syntax (no inner headers) with limited tunnel mode semantics (fixed | ||||
| logical inner addresses - the HITs - and changeable outer IP | ||||
| addresses). | ||||
| B.1. Protocol definition | ||||
| In this section we define the exact protocol formats and operations. | ||||
| B.1.1. Changes to Security Association data structures | ||||
| A BEET mode Security Association contains the same data as a regular | ||||
| tunnel mode Security Association, with the exception that the inner | ||||
| selectors must be single addresses and cannot be subnets. The data | ||||
| includes the following: | ||||
| A pair of inner IP addresses. | ||||
| A pair of outer IP addresses. | ||||
| Cryptographic keys and other data as defined in RFC4301 [RFC4301] | ||||
| Section 4.4.2. | ||||
| A conforming implementation MAY store the data in a way similar to a | ||||
| regular tunnel mode Security Association. | ||||
| Note that in a conforming implementation the inner and outer | ||||
| addresses MAY belong to different address families. All | ||||
| implementations that support both IPv4 and IPv6 SHOULD support both | ||||
| IPv4-over-IPv6 and IPv6-over-IPv4 tunneling. | ||||
| B.1.2. Packet format | ||||
| The wire packet format is identical to the ESP transport mode wire | ||||
| format as defined in [RFC4303] Section 3.1.1. However, the resulting | ||||
| packet contains outer IP addresses instead of the inner IP addresses | ||||
| received from the upper layer. The construction of the outer headers | ||||
| is defined in RFC4301 [RFC4301] Section 5.1.2. The following diagram | ||||
| illustrates ESP BEET mode positioning for typical IPv4 and IPv6 | ||||
| packets. | ||||
| IPv4 INNER ADDRESSES | ||||
| -------------------- | ||||
| BEFORE APPLYING ESP | ||||
| ------------------------------ | ||||
| | inner IP hdr | | | | ||||
| | | TCP | Data | | ||||
| ------------------------------ | ||||
| AFTER APPLYING ESP, OUTER v4 ADDRESSES | ||||
| ---------------------------------------------------- | ||||
| | outer IP hdr | | | | ESP | ESP | | ||||
| | (any options) | ESP | TCP | Data | Trailer | ICV | | ||||
| ---------------------------------------------------- | ||||
| |<---- encryption ---->| | ||||
| |<-------- integrity ------->| | ||||
| AFTER APPLYING ESP, OUTER v6 ADDRESSES | ||||
| ------------------------------------------------------ | ||||
| | outer | new ext | | | | ESP | ESP | | ||||
| | IP hdr | hdrs. | ESP | TCP | Data | Trailer| ICV | | ||||
| ------------------------------------------------------ | ||||
| |<--- encryption ---->| | ||||
| |<------- integrity ------->| | ||||
| IPv4 INNER ADDRESSES with options | ||||
| --------------------------------- | ||||
| BEFORE APPLYING ESP | ||||
| ------------------------------ | ||||
| | inner IP hdr | | | | ||||
| | + options | TCP | Data | | ||||
| ------------------------------ | ||||
| AFTER APPLYING ESP, OUTER v4 ADDRESSES | ||||
| ---------------------------------------------------------- | ||||
| | outer IP hdr | | | | | ESP | ESP | | ||||
| | (any options) | ESP | PH | TCP | Data | Trailer | ICV | | ||||
| ---------------------------------------------------------- | ||||
| |<------- encryption ------->| | ||||
| |<----------- integrity ---------->| | ||||
| AFTER APPLYING ESP, OUTER v6 ADDRESSES | ||||
| ------------------------------------------------------------ | ||||
| | outer | new ext | | | | | ESP | ESP | | ||||
| | IP hdr | hdrs. | ESP | PH | TCP | Data | Trailer| ICV | | ||||
| ------------------------------------------------------------ | ||||
| |<------ encryption ------->| | ||||
| |<---------- integrity ---------->| | ||||
| PH Pseudo Header for IPv4 options | ||||
| IPv6 INNER ADDRESSES | ||||
| -------------------- | ||||
| BEFORE APPLYING ESP | ||||
| ------------------------------------------ | ||||
| | | ext hdrs | | | | ||||
| | inner IP hdr | if present | TCP | Data | | ||||
| ------------------------------------------ | ||||
| AFTER APPLYING ESP, OUTER v6 ADDRESSES | ||||
| -------------------------------------------------------------- | ||||
| | outer | new ext | | dest | | | ESP | ESP | | ||||
| | IP hdr | hdrs. | ESP | opts.| TCP | Data | Trailer | ICV | | ||||
| -------------------------------------------------------------- | ||||
| |<---- encryption ---->| | ||||
| |<------- integrity ------>| | ||||
| AFTER APPLYING ESP, OUTER v4 ADDRESSES | ||||
| ---------------------------------------------------- | ||||
| | outer | | dest | | | ESP | ESP | | ||||
| | IP hdr | ESP | opts.| TCP | Data | Trailer | ICV | | ||||
| ---------------------------------------------------- | ||||
| |<------- encryption -------->| | ||||
| |<----------- integrity ----------->| | ||||
| B.1.3. Cryptographic processing | ||||
| The outgoing packets MUST be protected exactly as in ESP transport | ||||
| mode [RFC4303]. That is, the upper layer protocol packet is wrapped | ||||
| into an ESP header, encrypted, and authenticated exactly as if | ||||
| regular transport mode was used. The resulting ESP packet is subject | ||||
| to IP header processing as defined in Appendix B.1.4 and | ||||
| Appendix B.1.5. The incoming ESP protected messages are verified and | ||||
| decrypted exactly as if regular transport mode was used. The | ||||
| resulting clear text packet is subject to IP header processing as | ||||
| defined in Appendix B.1.4 and Appendix B.1.6. | ||||
| B.1.4. IP header processing | ||||
| The biggest difference between the BEET mode and the other two modes | ||||
| is in IP header processing. In the regular transport mode the IP | ||||
| header is kept intact. In the regular tunnel mode an outer IP header | ||||
| is created on output and discarded on input. In the BEET mode the IP | ||||
| header is replaced with another one on both input and output. | ||||
| On the BEET mode output side, the IP header processing MUST first | ||||
| ensure that the IP addresses in the original IP header contain the | ||||
| inner addresses as specified in the SA. This MAY be ensured by | ||||
| proper policy processing, and it is possible that no checks are | ||||
| needed at the SA processing time. Once the IP header has been | ||||
| verified to contain the right IP inner addresses, it is discarded. A | ||||
| new IP header is created, using the discarded inner header as a hint | ||||
| for other fields but the IP addresses. The IP addresses in the new | ||||
| header MUST be the outer tunnel addresses. | ||||
| On input side, the received IP header is simply discarded. Since the | ||||
| packet has been decrypted and verified, no further checks are | ||||
| necessary. A new IP header, corresponding to a tunnel mode inner | ||||
| header, is created, using the discarded outer header as a hint for | ||||
| other fields but the IP addresses. The IP addresses in the new | ||||
| header MUST be the inner addresses. | ||||
| As the outer header fields are used as hint for creating inner | ||||
| header, it must be noted that inner header differs as compared to | ||||
| tunnel-mode inner header. In BEET mode the inner header will have | ||||
| the TTL, DF-bit and other option values from the outer header. The | ||||
| TTL, DF-bit and other option values of the inner header MUST be | ||||
| processed by the stack. | ||||
| B.1.5. Handling of outgoing packets | ||||
| The outgoing BEET mode packets are processed as follows: | ||||
| 1. The system MUST verify that the IP header contains the inner | ||||
| source and destination addresses, exactly as defined in the SA. | ||||
| This verification MAY be explicit, or it MAY be implicit, for | ||||
| example, as a result of prior policy processing. Note that in | ||||
| some implementations there may be no real IP header at this time | ||||
| but the source and destination addresses may be carried out-of- | ||||
| band. In case the source address is still unassigned, it SHOULD | ||||
| be ensured that the designated inner source address would be | ||||
| selected at a later stage. | ||||
| 2. The IP payload (the contents of the packet beyond the IP header) | ||||
| is wrapped into an ESP header as defined in [RFC4303] Section | ||||
| 3.3. | ||||
| 3. A new IP header is constructed, replacing the original one. The | ||||
| new IP header MUST contain the outer source and destination | ||||
| addresses, as defined in the SA. Note that in some | ||||
| implementations there may be no real IP header at this time but | ||||
| the source and destination addresses may be carried out-of-band. | ||||
| In the case where the source address must be left unassigned, it | ||||
| SHOULD be made sure that the right source address is selected at | ||||
| a later stage. Other than the addresses, it is RECOMMENDED that | ||||
| the new IP header copies the fields from the original IP header. | ||||
| 4. If there are any IPv4 options in the original packet, it is | ||||
| RECOMMENDED that they are discarded. If the inner header | ||||
| contains one or more options that need to be transported between | ||||
| the tunnel end-points, sender MUST encapsulate the options as | ||||
| defined in Appendix B.1.7 | ||||
| Instead of literally discarding the IP header and constructing a new | ||||
| one, a conforming implementation MAY simply replace the addresses in | ||||
| an existing header. However, if the RECOMMENDED feature of allowing | ||||
| the inner and outer addresses from different address families is | ||||
| used, this simple strategy does not work. | ||||
| B.1.6. Handling of incoming packets | ||||
| The incoming BEET mode packets are processed as follows: | ||||
| 1. The system MUST verify and decrypt the incoming packet | ||||
| successfully, as defined in [RFC4303] section 3.4. If the | ||||
| verification or decryption fails, the packet MUST be discarded. | ||||
| 2. The original IP header is simply discarded, without any checks. | ||||
| Since the ESP verification succeeded, the packet can be safely | ||||
| assumed to have arrived from the right sender. | ||||
| 3. A new IP header is constructed, replacing the original one. The | ||||
| new IP header MUST contain the inner source and destination | ||||
| addresses, as defined in the SA. If the sender has set the ESP | ||||
| next protocol field to 94 and included the pseudo header as | ||||
| described in Appendix B.1.7, the receiver MUST include the | ||||
| options after the constructed IP header. Note, that in some | ||||
| implementations the real IP header may have already been | ||||
| discarded and the source and destination addresses are carried | ||||
| out-of-band. In such case the out-of-band addresses MUST be the | ||||
| inner addresses. Other than the addresses, it is RECOMMENDED | ||||
| that the new IP header copies the fields from the original IP | ||||
| header. | ||||
| Instead of literally discarding the IP header and constructing a new | ||||
| one a conforming implementation MAY simply replace the addresses in | ||||
| an existing header. However, if the RECOMMENDED feature of allowing | ||||
| the inner and outer addresses from different address families is | ||||
| used, this simple strategy does not work. | ||||
| B.1.7. IPv4 options handling | ||||
| In BEET mode, if IPv4 options are transported inside the tunnel, the | ||||
| sender MUST include a pseudo-header after ESP header. The pseudo- | ||||
| header identifies that IPv4 options from the original packet are to | ||||
| be applied on the packet on input side. | ||||
| The sender MUST set the next protocol field on the ESP header as 94. | ||||
| The resulting pseudo header including the IPv4 options MUST be padded | ||||
| to 8 octet boundary. The padding length is expressed in octets, | ||||
| valid padding lengths are 0 or 4 octets as the original IPv4 options | ||||
| are already padded to 4 octet boundary. The padding MUST be filled | ||||
| with NOP options as defined in Internet Protocol [RFC0791] section | ||||
| 3.1 Internet header format. The padding is added in front of the | ||||
| original options to ensure that the receiver is able to reconstruct | ||||
| the original IPv4 datagram. The Header Length field contains the | ||||
| length of the IPv4 options, and padding in 8 octets units. | ||||
| 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 Len | Pad Len | Reserved | | ||||
| +---------------+---------------+-------------------------------+ | ||||
| | Padding (if needed) | | ||||
| +---------------------------------------------------------------+ | ||||
| | IPv4 options ... | | ||||
| | | | ||||
| +---------------------------------------------------------------+ | ||||
| Next Header Identifies the data following this header | ||||
| Length in octets 8-bit unsigned integer. Length of the | ||||
| pseudo header in 8-octet units, not | ||||
| including the first 8 octets. | ||||
| The receiver MUST remove this pseudo-header and padding as a part of | ||||
| BEET processing, in order reconstruct the original IPv4 datagram. | ||||
| The IPv4 options included into the pseudo-header MUST be added after | ||||
| the reconstructed IPv4 (inner) header on the receiving side. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Petri Jokela | Petri Jokela | |||
| Ericsson Research NomadicLab | Ericsson Research NomadicLab | |||
| JORVAS FIN-02420 | JORVAS FIN-02420 | |||
| FINLAND | FINLAND | |||
| Phone: +358 9 299 1 | Phone: +358 9 299 1 | |||
| EMail: petri.jokela@nomadiclab.com | EMail: petri.jokela@nomadiclab.com | |||
| Robert Moskowitz | Robert Moskowitz | |||
| ICSAlabs, An Independent Division of Verizon Business Systems | ICSAlabs, An Independent Division of Verizon Business Systems | |||
| 1000 Bent Creek Blvd, Suite 200 | 1000 Bent Creek Blvd, Suite 200 | |||
| Mechanicsburg, PA | Mechanicsburg, PA | |||
| USA | USA | |||
| EMail: rgm@icsalabs.com | EMail: rgm@icsalabs.com | |||
| Jan Melen | ||||
| Pekka Nikander | ||||
| Ericsson Research NomadicLab | Ericsson Research NomadicLab | |||
| JORVAS FIN-02420 | JORVAS FIN-02420 | |||
| FINLAND | FINLAND | |||
| Phone: +358 9 299 1 | Phone: +358 9 299 1 | |||
| EMail: pekka.nikander@nomadiclab.com | EMail: jan.melen@nomadiclab.com | |||
| Full Copyright Statement | ||||
| Copyright (C) The IETF Trust (2008). | ||||
| This document is subject to the rights, licenses and restrictions | ||||
| contained in BCP 78, and except as set forth therein, the authors | ||||
| retain all their rights. | ||||
| This document and the information contained herein are provided on an | ||||
| "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | ||||
| OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | ||||
| THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | ||||
| OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | ||||
| THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | ||||
| WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | ||||
| Intellectual Property | ||||
| The IETF takes no position regarding the validity or scope of any | ||||
| Intellectual Property Rights or other rights that might be claimed to | ||||
| pertain to the implementation or use of the technology described in | ||||
| this document or the extent to which any license under such rights | ||||
| might or might not be available; nor does it represent that it has | ||||
| made any independent effort to identify any such rights. Information | ||||
| on the procedures with respect to rights in RFC documents can be | ||||
| found in BCP 78 and BCP 79. | ||||
| Copies of IPR disclosures made to the IETF Secretariat and any | ||||
| assurances of licenses to be made available, or the result of an | ||||
| attempt made to obtain a general license or permission for the use of | ||||
| such proprietary rights by implementers or users of this | ||||
| specification can be obtained from the IETF on-line IPR repository at | ||||
| http://www.ietf.org/ipr. | ||||
| The IETF invites any interested party to bring to its attention any | ||||
| copyrights, patents or patent applications, or other proprietary | ||||
| rights that may cover technology that may be required to implement | ||||
| this standard. Please address the information to the IETF at | ||||
| ietf-ipr@ietf.org. | ||||
| End of changes. 82 change blocks. | ||||
| 322 lines changed or deleted | 712 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||