|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Internet Engineering Task Force (IETF) C. Kaufman
|
|
|
Request for Comments: 5996 Microsoft
|
|
|
Obsoletes: 4306, 4718 P. Hoffman
|
|
|
Category: Standards Track VPN Consortium
|
|
|
ISSN: 2070-1721 Y. Nir
|
|
|
Check Point
|
|
|
P. Eronen
|
|
|
Independent
|
|
|
September 2010
|
|
|
|
|
|
|
|
|
Internet Key Exchange Protocol Version 2 (IKEv2)
|
|
|
|
|
|
Abstract
|
|
|
|
|
|
This document describes version 2 of the Internet Key Exchange (IKE)
|
|
|
protocol. IKE is a component of IPsec used for performing mutual
|
|
|
authentication and establishing and maintaining Security Associations
|
|
|
(SAs). This document replaces and updates RFC 4306, and includes all
|
|
|
of the clarifications from RFC 4718.
|
|
|
|
|
|
Status of This Memo
|
|
|
|
|
|
This is an Internet Standards Track document.
|
|
|
|
|
|
This document is a product of the Internet Engineering Task Force
|
|
|
(IETF). It represents the consensus of the IETF community. It has
|
|
|
received public review and has been approved for publication by the
|
|
|
Internet Engineering Steering Group (IESG). Further information on
|
|
|
Internet Standards is available in Section 2 of RFC 5741.
|
|
|
|
|
|
Information about the current status of this document, any errata,
|
|
|
and how to provide feedback on it may be obtained at
|
|
|
http://www.rfc-editor.org/info/rfc5996.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 1]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
Copyright Notice
|
|
|
|
|
|
Copyright (c) 2010 IETF Trust and the persons identified as the
|
|
|
document authors. All rights reserved.
|
|
|
|
|
|
This document is subject to BCP 78 and the IETF Trust's Legal
|
|
|
Provisions Relating to IETF Documents
|
|
|
(http://trustee.ietf.org/license-info) in effect on the date of
|
|
|
publication of this document. Please review these documents
|
|
|
carefully, as they describe your rights and restrictions with respect
|
|
|
to this document. Code Components extracted from this document must
|
|
|
include Simplified BSD License text as described in Section 4.e of
|
|
|
the Trust Legal Provisions and are provided without warranty as
|
|
|
described in the Simplified BSD License.
|
|
|
|
|
|
This document may contain material from IETF Documents or IETF
|
|
|
Contributions published or made publicly available before November
|
|
|
10, 2008. The person(s) controlling the copyright in some of this
|
|
|
material may not have granted the IETF Trust the right to allow
|
|
|
modifications of such material outside the IETF Standards Process.
|
|
|
Without obtaining an adequate license from the person(s) controlling
|
|
|
the copyright in such materials, this document may not be modified
|
|
|
outside the IETF Standards Process, and derivative works of it may
|
|
|
not be created outside the IETF Standards Process, except to format
|
|
|
it for publication as an RFC or to translate it into languages other
|
|
|
than English.
|
|
|
|
|
|
Table of Contents
|
|
|
|
|
|
1. Introduction ....................................................5
|
|
|
1.1. Usage Scenarios ............................................6
|
|
|
1.1.1. Security Gateway to Security Gateway in
|
|
|
Tunnel Mode .........................................7
|
|
|
1.1.2. Endpoint-to-Endpoint Transport Mode .................7
|
|
|
1.1.3. Endpoint to Security Gateway in Tunnel Mode .........8
|
|
|
1.1.4. Other Scenarios .....................................9
|
|
|
1.2. The Initial Exchanges ......................................9
|
|
|
1.3. The CREATE_CHILD_SA Exchange ..............................13
|
|
|
1.3.1. Creating New Child SAs with the
|
|
|
CREATE_CHILD_SA Exchange ...........................14
|
|
|
1.3.2. Rekeying IKE SAs with the CREATE_CHILD_SA
|
|
|
Exchange ...........................................15
|
|
|
1.3.3. Rekeying Child SAs with the CREATE_CHILD_SA
|
|
|
Exchange ...........................................16
|
|
|
1.4. The INFORMATIONAL Exchange ................................17
|
|
|
1.4.1. Deleting an SA with INFORMATIONAL Exchanges ........17
|
|
|
1.5. Informational Messages outside of an IKE SA ...............18
|
|
|
1.6. Requirements Terminology ..................................19
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 2]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
1.7. Significant Differences between RFC 4306 and This
|
|
|
Document ..................................................20
|
|
|
2. IKE Protocol Details and Variations ............................22
|
|
|
2.1. Use of Retransmission Timers ..............................23
|
|
|
2.2. Use of Sequence Numbers for Message ID ....................24
|
|
|
2.3. Window Size for Overlapping Requests ......................25
|
|
|
2.4. State Synchronization and Connection Timeouts .............26
|
|
|
2.5. Version Numbers and Forward Compatibility .................28
|
|
|
2.6. IKE SA SPIs and Cookies ...................................30
|
|
|
2.6.1. Interaction of COOKIE and INVALID_KE_PAYLOAD .......33
|
|
|
2.7. Cryptographic Algorithm Negotiation .......................34
|
|
|
2.8. Rekeying ..................................................34
|
|
|
2.8.1. Simultaneous Child SA Rekeying .....................36
|
|
|
2.8.2. Simultaneous IKE SA Rekeying .......................39
|
|
|
2.8.3. Rekeying the IKE SA versus Reauthentication ........40
|
|
|
2.9. Traffic Selector Negotiation ..............................40
|
|
|
2.9.1. Traffic Selectors Violating Own Policy .............43
|
|
|
2.10. Nonces ...................................................44
|
|
|
2.11. Address and Port Agility .................................44
|
|
|
2.12. Reuse of Diffie-Hellman Exponentials .....................44
|
|
|
2.13. Generating Keying Material ...............................45
|
|
|
2.14. Generating Keying Material for the IKE SA ................46
|
|
|
2.15. Authentication of the IKE SA .............................47
|
|
|
2.16. Extensible Authentication Protocol Methods ...............50
|
|
|
2.17. Generating Keying Material for Child SAs .................52
|
|
|
2.18. Rekeying IKE SAs Using a CREATE_CHILD_SA Exchange ........53
|
|
|
2.19. Requesting an Internal Address on a Remote Network .......53
|
|
|
2.20. Requesting the Peer's Version ............................55
|
|
|
2.21. Error Handling ...........................................56
|
|
|
2.21.1. Error Handling in IKE_SA_INIT .....................56
|
|
|
2.21.2. Error Handling in IKE_AUTH ........................57
|
|
|
2.21.3. Error Handling after IKE SA is Authenticated ......58
|
|
|
2.21.4. Error Handling Outside IKE SA .....................58
|
|
|
2.22. IPComp ...................................................59
|
|
|
2.23. NAT Traversal ............................................60
|
|
|
2.23.1. Transport Mode NAT Traversal ......................64
|
|
|
2.24. Explicit Congestion Notification (ECN) ...................68
|
|
|
2.25. Exchange Collisions ......................................68
|
|
|
2.25.1. Collisions while Rekeying or Closing Child SAs ....69
|
|
|
2.25.2. Collisions while Rekeying or Closing IKE SAs ......69
|
|
|
3. Header and Payload Formats .....................................69
|
|
|
3.1. The IKE Header ............................................70
|
|
|
3.2. Generic Payload Header ....................................73
|
|
|
3.3. Security Association Payload ..............................75
|
|
|
3.3.1. Proposal Substructure ..............................78
|
|
|
3.3.2. Transform Substructure .............................79
|
|
|
3.3.3. Valid Transform Types by Protocol ..................82
|
|
|
3.3.4. Mandatory Transform IDs ............................83
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 3]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
3.3.5. Transform Attributes ...............................84
|
|
|
3.3.6. Attribute Negotiation ..............................86
|
|
|
3.4. Key Exchange Payload ......................................87
|
|
|
3.5. Identification Payloads ...................................87
|
|
|
3.6. Certificate Payload .......................................90
|
|
|
3.7. Certificate Request Payload ...............................93
|
|
|
3.8. Authentication Payload ....................................95
|
|
|
3.9. Nonce Payload .............................................96
|
|
|
3.10. Notify Payload ...........................................97
|
|
|
3.10.1. Notify Message Types ..............................98
|
|
|
3.11. Delete Payload ..........................................101
|
|
|
3.12. Vendor ID Payload .......................................102
|
|
|
3.13. Traffic Selector Payload ................................103
|
|
|
3.13.1. Traffic Selector .................................105
|
|
|
3.14. Encrypted Payload .......................................107
|
|
|
3.15. Configuration Payload ...................................109
|
|
|
3.15.1. Configuration Attributes .........................110
|
|
|
3.15.2. Meaning of INTERNAL_IP4_SUBNET and
|
|
|
INTERNAL_IP6_SUBNET ..............................113
|
|
|
3.15.3. Configuration Payloads for IPv6 ..................115
|
|
|
3.15.4. Address Assignment Failures ......................116
|
|
|
3.16. Extensible Authentication Protocol (EAP) Payload ........117
|
|
|
4. Conformance Requirements ......................................118
|
|
|
5. Security Considerations .......................................120
|
|
|
5.1. Traffic Selector Authorization ...........................123
|
|
|
6. IANA Considerations ...........................................124
|
|
|
7. Acknowledgements ..............................................125
|
|
|
8. References ....................................................126
|
|
|
8.1. Normative References .....................................126
|
|
|
8.2. Informative References ...................................127
|
|
|
Appendix A. Summary of Changes from IKEv1 ........................132
|
|
|
Appendix B. Diffie-Hellman Groups ................................133
|
|
|
B.1. Group 1 - 768-bit MODP ....................................133
|
|
|
B.2. Group 2 - 1024-bit MODP ...................................133
|
|
|
Appendix C. Exchanges and Payloads ..............................134
|
|
|
C.1. IKE_SA_INIT Exchange .....................................134
|
|
|
C.2. IKE_AUTH Exchange without EAP .............................135
|
|
|
C.3. IKE_AUTH Exchange with EAP ...............................136
|
|
|
C.4. CREATE_CHILD_SA Exchange for Creating or Rekeying
|
|
|
Child SAs .................................................137
|
|
|
C.5. CREATE_CHILD_SA Exchange for Rekeying the IKE SA ..........137
|
|
|
C.6. INFORMATIONAL Exchange ....................................137
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 4]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
1. Introduction
|
|
|
|
|
|
IP Security (IPsec) provides confidentiality, data integrity, access
|
|
|
control, and data source authentication to IP datagrams. These
|
|
|
services are provided by maintaining shared state between the source
|
|
|
and the sink of an IP datagram. This state defines, among other
|
|
|
things, the specific services provided to the datagram, which
|
|
|
cryptographic algorithms will be used to provide the services, and
|
|
|
the keys used as input to the cryptographic algorithms.
|
|
|
|
|
|
Establishing this shared state in a manual fashion does not scale
|
|
|
well. Therefore, a protocol to establish this state dynamically is
|
|
|
needed. This document describes such a protocol -- the Internet Key
|
|
|
Exchange (IKE). Version 1 of IKE was defined in RFCs 2407 [DOI],
|
|
|
2408 [ISAKMP], and 2409 [IKEV1]. IKEv2 replaced all of those RFCs.
|
|
|
IKEv2 was defined in [IKEV2] (RFC 4306) and was clarified in [Clarif]
|
|
|
(RFC 4718). This document replaces and updates RFC 4306 and RFC
|
|
|
4718. IKEv2 was a change to the IKE protocol that was not backward
|
|
|
compatible. In contrast, the current document not only provides a
|
|
|
clarification of IKEv2, but makes minimum changes to the IKE
|
|
|
protocol. A list of the significant differences between RFC 4306 and
|
|
|
this document is given in Section 1.7.
|
|
|
|
|
|
IKE performs mutual authentication between two parties and
|
|
|
establishes an IKE security association (SA) that includes shared
|
|
|
secret information that can be used to efficiently establish SAs for
|
|
|
Encapsulating Security Payload (ESP) [ESP] or Authentication Header
|
|
|
(AH) [AH] and a set of cryptographic algorithms to be used by the SAs
|
|
|
to protect the traffic that they carry. In this document, the term
|
|
|
"suite" or "cryptographic suite" refers to a complete set of
|
|
|
algorithms used to protect an SA. An initiator proposes one or more
|
|
|
suites by listing supported algorithms that can be combined into
|
|
|
suites in a mix-and-match fashion. IKE can also negotiate use of IP
|
|
|
Compression (IPComp) [IP-COMP] in connection with an ESP or AH SA.
|
|
|
The SAs for ESP or AH that get set up through that IKE SA we call
|
|
|
"Child SAs".
|
|
|
|
|
|
All IKE communications consist of pairs of messages: a request and a
|
|
|
response. The pair is called an "exchange", and is sometimes called
|
|
|
a "request/response pair". The first exchange of messages
|
|
|
establishing an IKE SA are called the IKE_SA_INIT and IKE_AUTH
|
|
|
exchanges; subsequent IKE exchanges are called the CREATE_CHILD_SA or
|
|
|
INFORMATIONAL exchanges. In the common case, there is a single
|
|
|
IKE_SA_INIT exchange and a single IKE_AUTH exchange (a total of four
|
|
|
messages) to establish the IKE SA and the first Child SA. In
|
|
|
exceptional cases, there may be more than one of each of these
|
|
|
exchanges. In all cases, all IKE_SA_INIT exchanges MUST complete
|
|
|
before any other exchange type, then all IKE_AUTH exchanges MUST
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 5]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
complete, and following that, any number of CREATE_CHILD_SA and
|
|
|
INFORMATIONAL exchanges may occur in any order. In some scenarios,
|
|
|
only a single Child SA is needed between the IPsec endpoints, and
|
|
|
therefore there would be no additional exchanges. Subsequent
|
|
|
exchanges MAY be used to establish additional Child SAs between the
|
|
|
same authenticated pair of endpoints and to perform housekeeping
|
|
|
functions.
|
|
|
|
|
|
An IKE message flow always consists of a request followed by a
|
|
|
response. It is the responsibility of the requester to ensure
|
|
|
reliability. If the response is not received within a timeout
|
|
|
interval, the requester needs to retransmit the request (or abandon
|
|
|
the connection).
|
|
|
|
|
|
The first exchange of an IKE session, IKE_SA_INIT, negotiates
|
|
|
security parameters for the IKE SA, sends nonces, and sends Diffie-
|
|
|
Hellman values.
|
|
|
|
|
|
The second exchange, IKE_AUTH, transmits identities, proves knowledge
|
|
|
of the secrets corresponding to the two identities, and sets up an SA
|
|
|
for the first (and often only) AH or ESP Child SA (unless there is
|
|
|
failure setting up the AH or ESP Child SA, in which case the IKE SA
|
|
|
is still established without the Child SA).
|
|
|
|
|
|
The types of subsequent exchanges are CREATE_CHILD_SA (which creates
|
|
|
a Child SA) and INFORMATIONAL (which deletes an SA, reports error
|
|
|
conditions, or does other housekeeping). Every request requires a
|
|
|
response. An INFORMATIONAL request with no payloads (other than the
|
|
|
empty Encrypted payload required by the syntax) is commonly used as a
|
|
|
check for liveness. These subsequent exchanges cannot be used until
|
|
|
the initial exchanges have completed.
|
|
|
|
|
|
In the description that follows, we assume that no errors occur.
|
|
|
Modifications to the flow when errors occur are described in
|
|
|
Section 2.21.
|
|
|
|
|
|
1.1. Usage Scenarios
|
|
|
|
|
|
IKE is used to negotiate ESP or AH SAs in a number of different
|
|
|
scenarios, each with its own special requirements.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 6]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
1.1.1. Security Gateway to Security Gateway in Tunnel Mode
|
|
|
|
|
|
+-+-+-+-+-+ +-+-+-+-+-+
|
|
|
| | IPsec | |
|
|
|
Protected |Tunnel | tunnel |Tunnel | Protected
|
|
|
Subnet <-->|Endpoint |<---------->|Endpoint |<--> Subnet
|
|
|
| | | |
|
|
|
+-+-+-+-+-+ +-+-+-+-+-+
|
|
|
|
|
|
Figure 1: Security Gateway to Security Gateway Tunnel
|
|
|
|
|
|
In this scenario, neither endpoint of the IP connection implements
|
|
|
IPsec, but network nodes between them protect traffic for part of the
|
|
|
way. Protection is transparent to the endpoints, and depends on
|
|
|
ordinary routing to send packets through the tunnel endpoints for
|
|
|
processing. Each endpoint would announce the set of addresses
|
|
|
"behind" it, and packets would be sent in tunnel mode where the inner
|
|
|
IP header would contain the IP addresses of the actual endpoints.
|
|
|
|
|
|
1.1.2. Endpoint-to-Endpoint Transport Mode
|
|
|
|
|
|
+-+-+-+-+-+ +-+-+-+-+-+
|
|
|
| | IPsec transport | |
|
|
|
|Protected| or tunnel mode SA |Protected|
|
|
|
|Endpoint |<---------------------------------------->|Endpoint |
|
|
|
| | | |
|
|
|
+-+-+-+-+-+ +-+-+-+-+-+
|
|
|
|
|
|
Figure 2: Endpoint to Endpoint
|
|
|
|
|
|
In this scenario, both endpoints of the IP connection implement
|
|
|
IPsec, as required of hosts in [IPSECARCH]. Transport mode will
|
|
|
commonly be used with no inner IP header. A single pair of addresses
|
|
|
will be negotiated for packets to be protected by this SA. These
|
|
|
endpoints MAY implement application-layer access controls based on
|
|
|
the IPsec authenticated identities of the participants. This
|
|
|
scenario enables the end-to-end security that has been a guiding
|
|
|
principle for the Internet since [ARCHPRINC], [TRANSPARENCY], and a
|
|
|
method of limiting the inherent problems with complexity in networks
|
|
|
noted by [ARCHGUIDEPHIL]. Although this scenario may not be fully
|
|
|
applicable to the IPv4 Internet, it has been deployed successfully in
|
|
|
specific scenarios within intranets using IKEv1. It should be more
|
|
|
broadly enabled during the transition to IPv6 and with the adoption
|
|
|
of IKEv2.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 7]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
It is possible in this scenario that one or both of the protected
|
|
|
endpoints will be behind a network address translation (NAT) node, in
|
|
|
which case the tunneled packets will have to be UDP encapsulated so
|
|
|
that port numbers in the UDP headers can be used to identify
|
|
|
individual endpoints "behind" the NAT (see Section 2.23).
|
|
|
|
|
|
1.1.3. Endpoint to Security Gateway in Tunnel Mode
|
|
|
|
|
|
+-+-+-+-+-+ +-+-+-+-+-+
|
|
|
| | IPsec | | Protected
|
|
|
|Protected| tunnel |Tunnel | Subnet
|
|
|
|Endpoint |<------------------------>|Endpoint |<--- and/or
|
|
|
| | | | Internet
|
|
|
+-+-+-+-+-+ +-+-+-+-+-+
|
|
|
|
|
|
Figure 3: Endpoint to Security Gateway Tunnel
|
|
|
|
|
|
In this scenario, a protected endpoint (typically a portable roaming
|
|
|
computer) connects back to its corporate network through an IPsec-
|
|
|
protected tunnel. It might use this tunnel only to access
|
|
|
information on the corporate network, or it might tunnel all of its
|
|
|
traffic back through the corporate network in order to take advantage
|
|
|
of protection provided by a corporate firewall against Internet-based
|
|
|
attacks. In either case, the protected endpoint will want an IP
|
|
|
address associated with the security gateway so that packets returned
|
|
|
to it will go to the security gateway and be tunneled back. This IP
|
|
|
address may be static or may be dynamically allocated by the security
|
|
|
gateway. In support of the latter case, IKEv2 includes a mechanism
|
|
|
(namely, configuration payloads) for the initiator to request an IP
|
|
|
address owned by the security gateway for use for the duration of its
|
|
|
SA.
|
|
|
|
|
|
In this scenario, packets will use tunnel mode. On each packet from
|
|
|
the protected endpoint, the outer IP header will contain the source
|
|
|
IP address associated with its current location (i.e., the address
|
|
|
that will get traffic routed to the endpoint directly), while the
|
|
|
inner IP header will contain the source IP address assigned by the
|
|
|
security gateway (i.e., the address that will get traffic routed to
|
|
|
the security gateway for forwarding to the endpoint). The outer
|
|
|
destination address will always be that of the security gateway,
|
|
|
while the inner destination address will be the ultimate destination
|
|
|
for the packet.
|
|
|
|
|
|
In this scenario, it is possible that the protected endpoint will be
|
|
|
behind a NAT. In that case, the IP address as seen by the security
|
|
|
gateway will not be the same as the IP address sent by the protected
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 8]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
endpoint, and packets will have to be UDP encapsulated in order to be
|
|
|
routed properly. Interaction with NATs is covered in detail in
|
|
|
Section 2.23.
|
|
|
|
|
|
1.1.4. Other Scenarios
|
|
|
|
|
|
Other scenarios are possible, as are nested combinations of the
|
|
|
above. One notable example combines aspects of Sections 1.1.1 and
|
|
|
1.1.3. A subnet may make all external accesses through a remote
|
|
|
security gateway using an IPsec tunnel, where the addresses on the
|
|
|
subnet are routed to the security gateway by the rest of the
|
|
|
Internet. An example would be someone's home network being virtually
|
|
|
on the Internet with static IP addresses even though connectivity is
|
|
|
provided by an ISP that assigns a single dynamically assigned IP
|
|
|
address to the user's security gateway (where the static IP addresses
|
|
|
and an IPsec relay are provided by a third party located elsewhere).
|
|
|
|
|
|
1.2. The Initial Exchanges
|
|
|
|
|
|
Communication using IKE always begins with IKE_SA_INIT and IKE_AUTH
|
|
|
exchanges (known in IKEv1 as Phase 1). These initial exchanges
|
|
|
normally consist of four messages, though in some scenarios that
|
|
|
number can grow. All communications using IKE consist of request/
|
|
|
response pairs. We'll describe the base exchange first, followed by
|
|
|
variations. The first pair of messages (IKE_SA_INIT) negotiate
|
|
|
cryptographic algorithms, exchange nonces, and do a Diffie-Hellman
|
|
|
exchange [DH].
|
|
|
|
|
|
The second pair of messages (IKE_AUTH) authenticate the previous
|
|
|
messages, exchange identities and certificates, and establish the
|
|
|
first Child SA. Parts of these messages are encrypted and integrity
|
|
|
protected with keys established through the IKE_SA_INIT exchange, so
|
|
|
the identities are hidden from eavesdroppers and all fields in all
|
|
|
the messages are authenticated. See Section 2.14 for information on
|
|
|
how the encryption keys are generated. (A man-in-the-middle attacker
|
|
|
who cannot complete the IKE_AUTH exchange can nonetheless see the
|
|
|
identity of the initiator.)
|
|
|
|
|
|
All messages following the initial exchange are cryptographically
|
|
|
protected using the cryptographic algorithms and keys negotiated in
|
|
|
the IKE_SA_INIT exchange. These subsequent messages use the syntax
|
|
|
of the Encrypted payload described in Section 3.14, encrypted with
|
|
|
keys that are derived as described in Section 2.14. All subsequent
|
|
|
messages include an Encrypted payload, even if they are referred to
|
|
|
in the text as "empty". For the CREATE_CHILD_SA, IKE_AUTH, or
|
|
|
INFORMATIONAL exchanges, the message following the header is
|
|
|
encrypted and the message including the header is integrity protected
|
|
|
using the cryptographic algorithms negotiated for the IKE SA.
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 9]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
Every IKE message contains a Message ID as part of its fixed header.
|
|
|
This Message ID is used to match up requests and responses, and to
|
|
|
identify retransmissions of messages.
|
|
|
|
|
|
In the following descriptions, the payloads contained in the message
|
|
|
are indicated by names as listed below.
|
|
|
|
|
|
Notation Payload
|
|
|
-----------------------------------------
|
|
|
AUTH Authentication
|
|
|
CERT Certificate
|
|
|
CERTREQ Certificate Request
|
|
|
CP Configuration
|
|
|
D Delete
|
|
|
EAP Extensible Authentication
|
|
|
HDR IKE header (not a payload)
|
|
|
IDi Identification - Initiator
|
|
|
IDr Identification - Responder
|
|
|
KE Key Exchange
|
|
|
Ni, Nr Nonce
|
|
|
N Notify
|
|
|
SA Security Association
|
|
|
SK Encrypted and Authenticated
|
|
|
TSi Traffic Selector - Initiator
|
|
|
TSr Traffic Selector - Responder
|
|
|
V Vendor ID
|
|
|
|
|
|
The details of the contents of each payload are described in section
|
|
|
3. Payloads that may optionally appear will be shown in brackets,
|
|
|
such as [CERTREQ]; this indicates that a Certificate Request payload
|
|
|
can optionally be included.
|
|
|
|
|
|
The initial exchanges are as follows:
|
|
|
|
|
|
Initiator Responder
|
|
|
-------------------------------------------------------------------
|
|
|
HDR, SAi1, KEi, Ni -->
|
|
|
|
|
|
HDR contains the Security Parameter Indexes (SPIs), version numbers,
|
|
|
and flags of various sorts. The SAi1 payload states the
|
|
|
cryptographic algorithms the initiator supports for the IKE SA. The
|
|
|
KE payload sends the initiator's Diffie-Hellman value. Ni is the
|
|
|
initiator's nonce.
|
|
|
|
|
|
<-- HDR, SAr1, KEr, Nr, [CERTREQ]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 10]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
The responder chooses a cryptographic suite from the initiator's
|
|
|
offered choices and expresses that choice in the SAr1 payload,
|
|
|
completes the Diffie-Hellman exchange with the KEr payload, and sends
|
|
|
its nonce in the Nr payload.
|
|
|
|
|
|
At this point in the negotiation, each party can generate SKEYSEED,
|
|
|
from which all keys are derived for that IKE SA. The messages that
|
|
|
follow are encrypted and integrity protected in their entirety, with
|
|
|
the exception of the message headers. The keys used for the
|
|
|
encryption and integrity protection are derived from SKEYSEED and are
|
|
|
known as SK_e (encryption) and SK_a (authentication, a.k.a. integrity
|
|
|
protection); see Sections 2.13 and 2.14 for details on the key
|
|
|
derivation. A separate SK_e and SK_a is computed for each direction.
|
|
|
In addition to the keys SK_e and SK_a derived from the Diffie-Hellman
|
|
|
value for protection of the IKE SA, another quantity SK_d is derived
|
|
|
and used for derivation of further keying material for Child SAs.
|
|
|
The notation SK { ... } indicates that these payloads are encrypted
|
|
|
and integrity protected using that direction's SK_e and SK_a.
|
|
|
|
|
|
HDR, SK {IDi, [CERT,] [CERTREQ,]
|
|
|
[IDr,] AUTH, SAi2,
|
|
|
TSi, TSr} -->
|
|
|
|
|
|
The initiator asserts its identity with the IDi payload, proves
|
|
|
knowledge of the secret corresponding to IDi and integrity protects
|
|
|
the contents of the first message using the AUTH payload (see
|
|
|
Section 2.15). It might also send its certificate(s) in CERT
|
|
|
payload(s) and a list of its trust anchors in CERTREQ payload(s). If
|
|
|
any CERT payloads are included, the first certificate provided MUST
|
|
|
contain the public key used to verify the AUTH field.
|
|
|
|
|
|
The optional payload IDr enables the initiator to specify to which of
|
|
|
the responder's identities it wants to talk. This is useful when the
|
|
|
machine on which the responder is running is hosting multiple
|
|
|
identities at the same IP address. If the IDr proposed by the
|
|
|
initiator is not acceptable to the responder, the responder might use
|
|
|
some other IDr to finish the exchange. If the initiator then does
|
|
|
not accept the fact that responder used an IDr different than the one
|
|
|
that was requested, the initiator can close the SA after noticing the
|
|
|
fact.
|
|
|
|
|
|
The Traffic Selectors (TSi and TSr) are discussed in Section 2.9.
|
|
|
|
|
|
The initiator begins negotiation of a Child SA using the SAi2
|
|
|
payload. The final fields (starting with SAi2) are described in the
|
|
|
description of the CREATE_CHILD_SA exchange.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 11]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
<-- HDR, SK {IDr, [CERT,] AUTH,
|
|
|
SAr2, TSi, TSr}
|
|
|
|
|
|
The responder asserts its identity with the IDr payload, optionally
|
|
|
sends one or more certificates (again with the certificate containing
|
|
|
the public key used to verify AUTH listed first), authenticates its
|
|
|
identity and protects the integrity of the second message with the
|
|
|
AUTH payload, and completes negotiation of a Child SA with the
|
|
|
additional fields described below in the CREATE_CHILD_SA exchange.
|
|
|
|
|
|
Both parties in the IKE_AUTH exchange MUST verify that all signatures
|
|
|
and Message Authentication Codes (MACs) are computed correctly. If
|
|
|
either side uses a shared secret for authentication, the names in the
|
|
|
ID payload MUST correspond to the key used to generate the AUTH
|
|
|
payload.
|
|
|
|
|
|
Because the initiator sends its Diffie-Hellman value in the
|
|
|
IKE_SA_INIT, it must guess the Diffie-Hellman group that the
|
|
|
responder will select from its list of supported groups. If the
|
|
|
initiator guesses wrong, the responder will respond with a Notify
|
|
|
payload of type INVALID_KE_PAYLOAD indicating the selected group. In
|
|
|
this case, the initiator MUST retry the IKE_SA_INIT with the
|
|
|
corrected Diffie-Hellman group. The initiator MUST again propose its
|
|
|
full set of acceptable cryptographic suites because the rejection
|
|
|
message was unauthenticated and otherwise an active attacker could
|
|
|
trick the endpoints into negotiating a weaker suite than a stronger
|
|
|
one that they both prefer.
|
|
|
|
|
|
If creating the Child SA during the IKE_AUTH exchange fails for some
|
|
|
reason, the IKE SA is still created as usual. The list of Notify
|
|
|
message types in the IKE_AUTH exchange that do not prevent an IKE SA
|
|
|
from being set up include at least the following: NO_PROPOSAL_CHOSEN,
|
|
|
TS_UNACCEPTABLE, SINGLE_PAIR_REQUIRED, INTERNAL_ADDRESS_FAILURE, and
|
|
|
FAILED_CP_REQUIRED.
|
|
|
|
|
|
If the failure is related to creating the IKE SA (for example, an
|
|
|
AUTHENTICATION_FAILED Notify error message is returned), the IKE SA
|
|
|
is not created. Note that although the IKE_AUTH messages are
|
|
|
encrypted and integrity protected, if the peer receiving this Notify
|
|
|
error message has not yet authenticated the other end (or if the peer
|
|
|
fails to authenticate the other end for some reason), the information
|
|
|
needs to be treated with caution. More precisely, assuming that the
|
|
|
MAC verifies correctly, the sender of the error Notify message is
|
|
|
known to be the responder of the IKE_SA_INIT exchange, but the
|
|
|
sender's identity cannot be assured.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 12]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
Note that IKE_AUTH messages do not contain KEi/KEr or Ni/Nr payloads.
|
|
|
Thus, the SA payloads in the IKE_AUTH exchange cannot contain
|
|
|
Transform Type 4 (Diffie-Hellman group) with any value other than
|
|
|
NONE. Implementations SHOULD omit the whole transform substructure
|
|
|
instead of sending value NONE.
|
|
|
|
|
|
1.3. The CREATE_CHILD_SA Exchange
|
|
|
|
|
|
The CREATE_CHILD_SA exchange is used to create new Child SAs and to
|
|
|
rekey both IKE SAs and Child SAs. This exchange consists of a single
|
|
|
request/response pair, and some of its function was referred to as a
|
|
|
Phase 2 exchange in IKEv1. It MAY be initiated by either end of the
|
|
|
IKE SA after the initial exchanges are completed.
|
|
|
|
|
|
An SA is rekeyed by creating a new SA and then deleting the old one.
|
|
|
This section describes the first part of rekeying, the creation of
|
|
|
new SAs; Section 2.8 covers the mechanics of rekeying, including
|
|
|
moving traffic from old to new SAs and the deletion of the old SAs.
|
|
|
The two sections must be read together to understand the entire
|
|
|
process of rekeying.
|
|
|
|
|
|
Either endpoint may initiate a CREATE_CHILD_SA exchange, so in this
|
|
|
section the term initiator refers to the endpoint initiating this
|
|
|
exchange. An implementation MAY refuse all CREATE_CHILD_SA requests
|
|
|
within an IKE SA.
|
|
|
|
|
|
The CREATE_CHILD_SA request MAY optionally contain a KE payload for
|
|
|
an additional Diffie-Hellman exchange to enable stronger guarantees
|
|
|
of forward secrecy for the Child SA. The keying material for the
|
|
|
Child SA is a function of SK_d established during the establishment
|
|
|
of the IKE SA, the nonces exchanged during the CREATE_CHILD_SA
|
|
|
exchange, and the Diffie-Hellman value (if KE payloads are included
|
|
|
in the CREATE_CHILD_SA exchange).
|
|
|
|
|
|
If a CREATE_CHILD_SA exchange includes a KEi payload, at least one of
|
|
|
the SA offers MUST include the Diffie-Hellman group of the KEi. The
|
|
|
Diffie-Hellman group of the KEi MUST be an element of the group the
|
|
|
initiator expects the responder to accept (additional Diffie-Hellman
|
|
|
groups can be proposed). If the responder selects a proposal using a
|
|
|
different Diffie-Hellman group (other than NONE), the responder MUST
|
|
|
reject the request and indicate its preferred Diffie-Hellman group in
|
|
|
the INVALID_KE_PAYLOAD Notify payload. There are two octets of data
|
|
|
associated with this notification: the accepted Diffie-Hellman group
|
|
|
number in big endian order. In the case of such a rejection, the
|
|
|
CREATE_CHILD_SA exchange fails, and the initiator will probably retry
|
|
|
the exchange with a Diffie-Hellman proposal and KEi in the group that
|
|
|
the responder gave in the INVALID_KE_PAYLOAD Notify payload.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 13]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
The responder sends a NO_ADDITIONAL_SAS notification to indicate that
|
|
|
a CREATE_CHILD_SA request is unacceptable because the responder is
|
|
|
unwilling to accept any more Child SAs on this IKE SA. This
|
|
|
notification can also be used to reject IKE SA rekey. Some minimal
|
|
|
implementations may only accept a single Child SA setup in the
|
|
|
context of an initial IKE exchange and reject any subsequent attempts
|
|
|
to add more.
|
|
|
|
|
|
1.3.1. Creating New Child SAs with the CREATE_CHILD_SA Exchange
|
|
|
|
|
|
A Child SA may be created by sending a CREATE_CHILD_SA request. The
|
|
|
CREATE_CHILD_SA request for creating a new Child SA is:
|
|
|
|
|
|
Initiator Responder
|
|
|
-------------------------------------------------------------------
|
|
|
HDR, SK {SA, Ni, [KEi],
|
|
|
TSi, TSr} -->
|
|
|
|
|
|
The initiator sends SA offer(s) in the SA payload, a nonce in the Ni
|
|
|
payload, optionally a Diffie-Hellman value in the KEi payload, and
|
|
|
the proposed Traffic Selectors for the proposed Child SA in the TSi
|
|
|
and TSr payloads.
|
|
|
|
|
|
The CREATE_CHILD_SA response for creating a new Child SA is:
|
|
|
|
|
|
<-- HDR, SK {SA, Nr, [KEr],
|
|
|
TSi, TSr}
|
|
|
|
|
|
The responder replies (using the same Message ID to respond) with the
|
|
|
accepted offer in an SA payload, and a Diffie-Hellman value in the
|
|
|
KEr payload if KEi was included in the request and the selected
|
|
|
cryptographic suite includes that group.
|
|
|
|
|
|
The Traffic Selectors for traffic to be sent on that SA are specified
|
|
|
in the TS payloads in the response, which may be a subset of what the
|
|
|
initiator of the Child SA proposed.
|
|
|
|
|
|
The USE_TRANSPORT_MODE notification MAY be included in a request
|
|
|
message that also includes an SA payload requesting a Child SA. It
|
|
|
requests that the Child SA use transport mode rather than tunnel mode
|
|
|
for the SA created. If the request is accepted, the response MUST
|
|
|
also include a notification of type USE_TRANSPORT_MODE. If the
|
|
|
responder declines the request, the Child SA will be established in
|
|
|
tunnel mode. If this is unacceptable to the initiator, the initiator
|
|
|
MUST delete the SA. Note: Except when using this option to negotiate
|
|
|
transport mode, all Child SAs will use tunnel mode.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 14]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
The ESP_TFC_PADDING_NOT_SUPPORTED notification asserts that the
|
|
|
sending endpoint will not accept packets that contain Traffic Flow
|
|
|
Confidentiality (TFC) padding over the Child SA being negotiated. If
|
|
|
neither endpoint accepts TFC padding, this notification is included
|
|
|
in both the request and the response. If this notification is
|
|
|
included in only one of the messages, TFC padding can still be sent
|
|
|
in the other direction.
|
|
|
|
|
|
The NON_FIRST_FRAGMENTS_ALSO notification is used for fragmentation
|
|
|
control. See [IPSECARCH] for a fuller explanation. Both parties
|
|
|
need to agree to sending non-first fragments before either party does
|
|
|
so. It is enabled only if NON_FIRST_FRAGMENTS_ALSO notification is
|
|
|
included in both the request proposing an SA and the response
|
|
|
accepting it. If the responder does not want to send or receive non-
|
|
|
first fragments, it only omits NON_FIRST_FRAGMENTS_ALSO notification
|
|
|
from its response, but does not reject the whole Child SA creation.
|
|
|
|
|
|
An IPCOMP_SUPPORTED notification, covered in Section 2.22, can also
|
|
|
be included in the exchange.
|
|
|
|
|
|
A failed attempt to create a Child SA SHOULD NOT tear down the IKE
|
|
|
SA: there is no reason to lose the work done to set up the IKE SA.
|
|
|
See Section 2.21 for a list of error messages that might occur if
|
|
|
creating a Child SA fails.
|
|
|
|
|
|
1.3.2. Rekeying IKE SAs with the CREATE_CHILD_SA Exchange
|
|
|
|
|
|
The CREATE_CHILD_SA request for rekeying an IKE SA is:
|
|
|
|
|
|
Initiator Responder
|
|
|
-------------------------------------------------------------------
|
|
|
HDR, SK {SA, Ni, KEi} -->
|
|
|
|
|
|
The initiator sends SA offer(s) in the SA payload, a nonce in the Ni
|
|
|
payload, and a Diffie-Hellman value in the KEi payload. The KEi
|
|
|
payload MUST be included. A new initiator SPI is supplied in the SPI
|
|
|
field of the SA payload. Once a peer receives a request to rekey an
|
|
|
IKE SA or sends a request to rekey an IKE SA, it SHOULD NOT start any
|
|
|
new CREATE_CHILD_SA exchanges on the IKE SA that is being rekeyed.
|
|
|
|
|
|
The CREATE_CHILD_SA response for rekeying an IKE SA is:
|
|
|
|
|
|
<-- HDR, SK {SA, Nr, KEr}
|
|
|
|
|
|
The responder replies (using the same Message ID to respond) with the
|
|
|
accepted offer in an SA payload, and a Diffie-Hellman value in the
|
|
|
KEr payload if the selected cryptographic suite includes that group.
|
|
|
A new responder SPI is supplied in the SPI field of the SA payload.
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 15]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
The new IKE SA has its message counters set to 0, regardless of what
|
|
|
they were in the earlier IKE SA. The first IKE requests from both
|
|
|
sides on the new IKE SA will have Message ID 0. The old IKE SA
|
|
|
retains its numbering, so any further requests (for example, to
|
|
|
delete the IKE SA) will have consecutive numbering. The new IKE SA
|
|
|
also has its window size reset to 1, and the initiator in this rekey
|
|
|
exchange is the new "original initiator" of the new IKE SA.
|
|
|
|
|
|
Section 2.18 also covers IKE SA rekeying in detail.
|
|
|
|
|
|
1.3.3. Rekeying Child SAs with the CREATE_CHILD_SA Exchange
|
|
|
|
|
|
The CREATE_CHILD_SA request for rekeying a Child SA is:
|
|
|
|
|
|
Initiator Responder
|
|
|
-------------------------------------------------------------------
|
|
|
HDR, SK {N(REKEY_SA), SA, Ni, [KEi],
|
|
|
TSi, TSr} -->
|
|
|
|
|
|
The initiator sends SA offer(s) in the SA payload, a nonce in the Ni
|
|
|
payload, optionally a Diffie-Hellman value in the KEi payload, and
|
|
|
the proposed Traffic Selectors for the proposed Child SA in the TSi
|
|
|
and TSr payloads.
|
|
|
|
|
|
The notifications described in Section 1.3.1 may also be sent in a
|
|
|
rekeying exchange. Usually, these will be the same notifications
|
|
|
that were used in the original exchange; for example, when rekeying a
|
|
|
transport mode SA, the USE_TRANSPORT_MODE notification will be used.
|
|
|
|
|
|
The REKEY_SA notification MUST be included in a CREATE_CHILD_SA
|
|
|
exchange if the purpose of the exchange is to replace an existing ESP
|
|
|
or AH SA. The SA being rekeyed is identified by the SPI field in the
|
|
|
Notify payload; this is the SPI the exchange initiator would expect
|
|
|
in inbound ESP or AH packets. There is no data associated with this
|
|
|
Notify message type. The Protocol ID field of the REKEY_SA
|
|
|
notification is set to match the protocol of the SA we are rekeying,
|
|
|
for example, 3 for ESP and 2 for AH.
|
|
|
|
|
|
The CREATE_CHILD_SA response for rekeying a Child SA is:
|
|
|
|
|
|
<-- HDR, SK {SA, Nr, [KEr],
|
|
|
TSi, TSr}
|
|
|
|
|
|
The responder replies (using the same Message ID to respond) with the
|
|
|
accepted offer in an SA payload, and a Diffie-Hellman value in the
|
|
|
KEr payload if KEi was included in the request and the selected
|
|
|
cryptographic suite includes that group.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 16]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
The Traffic Selectors for traffic to be sent on that SA are specified
|
|
|
in the TS payloads in the response, which may be a subset of what the
|
|
|
initiator of the Child SA proposed.
|
|
|
|
|
|
1.4. The INFORMATIONAL Exchange
|
|
|
|
|
|
At various points during the operation of an IKE SA, peers may desire
|
|
|
to convey control messages to each other regarding errors or
|
|
|
notifications of certain events. To accomplish this, IKE defines an
|
|
|
INFORMATIONAL exchange. INFORMATIONAL exchanges MUST ONLY occur
|
|
|
after the initial exchanges and are cryptographically protected with
|
|
|
the negotiated keys. Note that some informational messages, not
|
|
|
exchanges, can be sent outside the context of an IKE SA. Section
|
|
|
2.21 also covers error messages in great detail.
|
|
|
|
|
|
Control messages that pertain to an IKE SA MUST be sent under that
|
|
|
IKE SA. Control messages that pertain to Child SAs MUST be sent
|
|
|
under the protection of the IKE SA that generated them (or its
|
|
|
successor if the IKE SA was rekeyed).
|
|
|
|
|
|
Messages in an INFORMATIONAL exchange contain zero or more
|
|
|
Notification, Delete, and Configuration payloads. The recipient of
|
|
|
an INFORMATIONAL exchange request MUST send some response; otherwise,
|
|
|
the sender will assume the message was lost in the network and will
|
|
|
retransmit it. That response MAY be an empty message. The request
|
|
|
message in an INFORMATIONAL exchange MAY also contain no payloads.
|
|
|
This is the expected way an endpoint can ask the other endpoint to
|
|
|
verify that it is alive.
|
|
|
|
|
|
The INFORMATIONAL exchange is defined as:
|
|
|
|
|
|
Initiator Responder
|
|
|
-------------------------------------------------------------------
|
|
|
HDR, SK {[N,] [D,]
|
|
|
[CP,] ...} -->
|
|
|
<-- HDR, SK {[N,] [D,]
|
|
|
[CP], ...}
|
|
|
|
|
|
The processing of an INFORMATIONAL exchange is determined by its
|
|
|
component payloads.
|
|
|
|
|
|
1.4.1. Deleting an SA with INFORMATIONAL Exchanges
|
|
|
|
|
|
ESP and AH SAs always exist in pairs, with one SA in each direction.
|
|
|
When an SA is closed, both members of the pair MUST be closed (that
|
|
|
is, deleted). Each endpoint MUST close its incoming SAs and allow
|
|
|
the other endpoint to close the other SA in each pair. To delete an
|
|
|
SA, an INFORMATIONAL exchange with one or more Delete payloads is
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 17]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
sent listing the SPIs (as they would be expected in the headers of
|
|
|
inbound packets) of the SAs to be deleted. The recipient MUST close
|
|
|
the designated SAs. Note that one never sends Delete payloads for
|
|
|
the two sides of an SA in a single message. If there are many SAs to
|
|
|
delete at the same time, one includes Delete payloads for the inbound
|
|
|
half of each SA pair in the INFORMATIONAL exchange.
|
|
|
|
|
|
Normally, the response in the INFORMATIONAL exchange will contain
|
|
|
Delete payloads for the paired SAs going in the other direction.
|
|
|
There is one exception. If, by chance, both ends of a set of SAs
|
|
|
independently decide to close them, each may send a Delete payload
|
|
|
and the two requests may cross in the network. If a node receives a
|
|
|
delete request for SAs for which it has already issued a delete
|
|
|
request, it MUST delete the outgoing SAs while processing the request
|
|
|
and the incoming SAs while processing the response. In that case,
|
|
|
the responses MUST NOT include Delete payloads for the deleted SAs,
|
|
|
since that would result in duplicate deletion and could in theory
|
|
|
delete the wrong SA.
|
|
|
|
|
|
Similar to ESP and AH SAs, IKE SAs are also deleted by sending an
|
|
|
Informational exchange. Deleting an IKE SA implicitly closes any
|
|
|
remaining Child SAs negotiated under it. The response to a request
|
|
|
that deletes the IKE SA is an empty INFORMATIONAL response.
|
|
|
|
|
|
Half-closed ESP or AH connections are anomalous, and a node with
|
|
|
auditing capability should probably audit their existence if they
|
|
|
persist. Note that this specification does not specify time periods,
|
|
|
so it is up to individual endpoints to decide how long to wait. A
|
|
|
node MAY refuse to accept incoming data on half-closed connections
|
|
|
but MUST NOT unilaterally close them and reuse the SPIs. If
|
|
|
connection state becomes sufficiently messed up, a node MAY close the
|
|
|
IKE SA, as described above. It can then rebuild the SAs it needs on
|
|
|
a clean base under a new IKE SA.
|
|
|
|
|
|
1.5. Informational Messages outside of an IKE SA
|
|
|
|
|
|
There are some cases in which a node receives a packet that it cannot
|
|
|
process, but it may want to notify the sender about this situation.
|
|
|
|
|
|
o If an ESP or AH packet arrives with an unrecognized SPI. This
|
|
|
might be due to the receiving node having recently crashed and
|
|
|
lost state, or because of some other system malfunction or attack.
|
|
|
|
|
|
o If an encrypted IKE request packet arrives on port 500 or 4500
|
|
|
with an unrecognized IKE SPI. This might be due to the receiving
|
|
|
node having recently crashed and lost state, or because of some
|
|
|
other system malfunction or attack.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 18]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
o If an IKE request packet arrives with a higher major version
|
|
|
number than the implementation supports.
|
|
|
|
|
|
In the first case, if the receiving node has an active IKE SA to the
|
|
|
IP address from whence the packet came, it MAY send an INVALID_SPI
|
|
|
notification of the wayward packet over that IKE SA in an
|
|
|
INFORMATIONAL exchange. The Notification Data contains the SPI of
|
|
|
the invalid packet. The recipient of this notification cannot tell
|
|
|
whether the SPI is for AH or ESP, but this is not important because
|
|
|
the SPIs are supposed to be different for the two. If no suitable
|
|
|
IKE SA exists, the node MAY send an informational message without
|
|
|
cryptographic protection to the source IP address, using the source
|
|
|
UDP port as the destination port if the packet was UDP (UDP-
|
|
|
encapsulated ESP or AH). In this case, it should only be used by the
|
|
|
recipient as a hint that something might be wrong (because it could
|
|
|
easily be forged). This message is not part of an INFORMATIONAL
|
|
|
exchange, and the receiving node MUST NOT respond to it because doing
|
|
|
so could cause a message loop. The message is constructed as
|
|
|
follows: there are no IKE SPI values that would be meaningful to the
|
|
|
recipient of such a notification; using zero values or random values
|
|
|
are both acceptable, this being the exception to the rule in
|
|
|
Section 3.1 that prohibits zero IKE Initiator SPIs. The Initiator
|
|
|
flag is set to 1, the Response flag is set to 0, and the version
|
|
|
flags are set in the normal fashion; these flags are described in
|
|
|
Section 3.1.
|
|
|
|
|
|
In the second and third cases, the message is always sent without
|
|
|
cryptographic protection (outside of an IKE SA), and includes either
|
|
|
an INVALID_IKE_SPI or an INVALID_MAJOR_VERSION notification (with no
|
|
|
notification data). The message is a response message, and thus it
|
|
|
is sent to the IP address and port from whence it came with the same
|
|
|
IKE SPIs and the Message ID and Exchange Type are copied from the
|
|
|
request. The Response flag is set to 1, and the version flags are
|
|
|
set in the normal fashion.
|
|
|
|
|
|
1.6. Requirements Terminology
|
|
|
|
|
|
Definitions of the primitive terms in this document (such as Security
|
|
|
Association or SA) can be found in [IPSECARCH]. It should be noted
|
|
|
that parts of IKEv2 rely on some of the processing rules in
|
|
|
[IPSECARCH], as described in various sections of this document.
|
|
|
|
|
|
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
|
|
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
|
|
document are to be interpreted as described in [MUSTSHOULD].
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 19]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
1.7. Significant Differences between RFC 4306 and This Document
|
|
|
|
|
|
This document contains clarifications and amplifications to IKEv2
|
|
|
[IKEV2]. Many of the clarifications are based on [Clarif]. The
|
|
|
changes listed in that document were discussed in the IPsec Working
|
|
|
Group and, after the Working Group was disbanded, on the IPsec
|
|
|
mailing list. That document contains detailed explanations of areas
|
|
|
that were unclear in IKEv2, and is thus useful to implementers of
|
|
|
IKEv2.
|
|
|
|
|
|
The protocol described in this document retains the same major
|
|
|
version number (2) and minor version number (0) as was used in RFC
|
|
|
4306. That is, the version number is *not* changed from RFC 4306.
|
|
|
The small number of technical changes listed here are not expected to
|
|
|
affect RFC 4306 implementations that have already been deployed at
|
|
|
the time of publication of this document.
|
|
|
|
|
|
This document makes the figures and references a bit more consistent
|
|
|
than they were in [IKEV2].
|
|
|
|
|
|
IKEv2 developers have noted that the SHOULD-level requirements in RFC
|
|
|
4306 are often unclear in that they don't say when it is OK to not
|
|
|
obey the requirements. They also have noted that there are MUST-
|
|
|
level requirements that are not related to interoperability. This
|
|
|
document has more explanation of some of these requirements. All
|
|
|
non-capitalized uses of the words SHOULD and MUST now mean their
|
|
|
normal English sense, not the interoperability sense of [MUSTSHOULD].
|
|
|
|
|
|
IKEv2 (and IKEv1) developers have noted that there is a great deal of
|
|
|
material in the tables of codes in Section 3.10.1 in RFC 4306. This
|
|
|
leads to implementers not having all the needed information in the
|
|
|
main body of the document. Much of the material from those tables
|
|
|
has been moved into the associated parts of the main body of the
|
|
|
document.
|
|
|
|
|
|
This document removes discussion of nesting AH and ESP. This was a
|
|
|
mistake in RFC 4306 caused by the lag between finishing RFC 4306 and
|
|
|
RFC 4301. Basically, IKEv2 is based on RFC 4301, which does not
|
|
|
include "SA bundles" that were part of RFC 2401. While a single
|
|
|
packet can go through IPsec processing multiple times, each of these
|
|
|
passes uses a separate SA, and the passes are coordinated by the
|
|
|
forwarding tables. In IKEv2, each of these SAs has to be created
|
|
|
using a separate CREATE_CHILD_SA exchange.
|
|
|
|
|
|
This document removes discussion of the INTERNAL_ADDRESS_EXPIRY
|
|
|
configuration attribute because its implementation was very
|
|
|
problematic. Implementations that conform to this document MUST
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 20]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
ignore proposals that have configuration attribute type 5, the old
|
|
|
value for INTERNAL_ADDRESS_EXPIRY. This document also removed
|
|
|
INTERNAL_IP6_NBNS as a configuration attribute.
|
|
|
|
|
|
This document removes the allowance for rejecting messages in which
|
|
|
the payloads were not in the "right" order; now implementations MUST
|
|
|
NOT reject them. This is due to the lack of clarity where the orders
|
|
|
for the payloads are described.
|
|
|
|
|
|
The lists of items from RFC 4306 that ended up in the IANA registry
|
|
|
were trimmed to only include items that were actually defined in RFC
|
|
|
4306. Also, many of those lists are now preceded with the very
|
|
|
important instruction to developers that they really should look at
|
|
|
the IANA registry at the time of development because new items have
|
|
|
been added since RFC 4306.
|
|
|
|
|
|
This document adds clarification on when notifications are and are
|
|
|
not sent encrypted, depending on the state of the negotiation at the
|
|
|
time.
|
|
|
|
|
|
This document discusses more about how to negotiate combined-mode
|
|
|
ciphers.
|
|
|
|
|
|
In Section 1.3.2, "The KEi payload SHOULD be included" was changed to
|
|
|
be "The KEi payload MUST be included". This also led to changes in
|
|
|
Section 2.18.
|
|
|
|
|
|
In Section 2.1, there is new material covering how the initiator's
|
|
|
SPI and/or IP is used to differentiate if this is a "half-open" IKE
|
|
|
SA or a new request.
|
|
|
|
|
|
This document clarifies the use of the critical flag in Section 2.5.
|
|
|
|
|
|
In Section 2.8, "Note that, when rekeying, the new Child SA MAY have
|
|
|
different Traffic Selectors and algorithms than the old one" was
|
|
|
changed to "Note that, when rekeying, the new Child SA SHOULD NOT
|
|
|
have different Traffic Selectors and algorithms than the old one".
|
|
|
|
|
|
The new Section 2.8.2 covers simultaneous IKE SA rekeying.
|
|
|
|
|
|
The new Section 2.9.2 covers Traffic Selectors in rekeying.
|
|
|
|
|
|
This document adds the restriction in Section 2.13 that all
|
|
|
pseudorandom functions (PRFs) used with IKEv2 MUST take variable-
|
|
|
sized keys. This should not affect any implementations because there
|
|
|
were no standardized PRFs that have fixed-size keys.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 21]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
Section 2.18 requires doing a Diffie-Hellman exchange when rekeying
|
|
|
the IKE_SA. In theory, RFC 4306 allowed a policy where the Diffie-
|
|
|
Hellman exchange was optional, but this was not useful (or
|
|
|
appropriate) when rekeying the IKE_SA.
|
|
|
|
|
|
Section 2.21 has been greatly expanded to cover the different cases
|
|
|
where error responses are needed and the appropriate responses to
|
|
|
them.
|
|
|
|
|
|
Section 2.23 clarified that, in NAT traversal, now both UDP-
|
|
|
encapsulated IPsec packets and non-UDP-encapsulated IPsec packets
|
|
|
need to be understood when receiving.
|
|
|
|
|
|
Added Section 2.23.1 to describe NAT traversal when transport mode is
|
|
|
requested.
|
|
|
|
|
|
Added Section 2.25 to explain how to act when there are timing
|
|
|
collisions when deleting and/or rekeying SAs, and two new error
|
|
|
notifications (TEMPORARY_FAILURE and CHILD_SA_NOT_FOUND) were
|
|
|
defined.
|
|
|
|
|
|
In Section 3.6, "Implementations MUST support the HTTP method for
|
|
|
hash-and-URL lookup. The behavior of other URL methods is not
|
|
|
currently specified, and such methods SHOULD NOT be used in the
|
|
|
absence of a document specifying them" was added.
|
|
|
|
|
|
In Section 3.15.3, a pointer to a new document that is related to
|
|
|
configuration of IPv6 addresses was added.
|
|
|
|
|
|
Appendix C was expanded and clarified.
|
|
|
|
|
|
2. IKE Protocol Details and Variations
|
|
|
|
|
|
IKE normally listens and sends on UDP port 500, though IKE messages
|
|
|
may also be received on UDP port 4500 with a slightly different
|
|
|
format (see Section 2.23). Since UDP is a datagram (unreliable)
|
|
|
protocol, IKE includes in its definition recovery from transmission
|
|
|
errors, including packet loss, packet replay, and packet forgery.
|
|
|
IKE is designed to function so long as (1) at least one of a series
|
|
|
of retransmitted packets reaches its destination before timing out;
|
|
|
and (2) the channel is not so full of forged and replayed packets so
|
|
|
as to exhaust the network or CPU capacities of either endpoint. Even
|
|
|
in the absence of those minimum performance requirements, IKE is
|
|
|
designed to fail cleanly (as though the network were broken).
|
|
|
|
|
|
Although IKEv2 messages are intended to be short, they contain
|
|
|
structures with no hard upper bound on size (in particular, digital
|
|
|
certificates), and IKEv2 itself does not have a mechanism for
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 22]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
fragmenting large messages. IP defines a mechanism for fragmentation
|
|
|
of oversized UDP messages, but implementations vary in the maximum
|
|
|
message size supported. Furthermore, use of IP fragmentation opens
|
|
|
an implementation to denial-of-service (DoS) attacks [DOSUDPPROT].
|
|
|
Finally, some NAT and/or firewall implementations may block IP
|
|
|
fragments.
|
|
|
|
|
|
All IKEv2 implementations MUST be able to send, receive, and process
|
|
|
IKE messages that are up to 1280 octets long, and they SHOULD be able
|
|
|
to send, receive, and process messages that are up to 3000 octets
|
|
|
long. IKEv2 implementations need to be aware of the maximum UDP
|
|
|
message size supported and MAY shorten messages by leaving out some
|
|
|
certificates or cryptographic suite proposals if that will keep
|
|
|
messages below the maximum. Use of the "Hash and URL" formats rather
|
|
|
than including certificates in exchanges where possible can avoid
|
|
|
most problems. Implementations and configuration need to keep in
|
|
|
mind, however, that if the URL lookups are possible only after the
|
|
|
Child SA is established, recursion issues could prevent this
|
|
|
technique from working.
|
|
|
|
|
|
The UDP payload of all packets containing IKE messages sent on port
|
|
|
4500 MUST begin with the prefix of four zeros; otherwise, the
|
|
|
receiver won't know how to handle them.
|
|
|
|
|
|
2.1. Use of Retransmission Timers
|
|
|
|
|
|
All messages in IKE exist in pairs: a request and a response. The
|
|
|
setup of an IKE SA normally consists of two exchanges. Once the IKE
|
|
|
SA is set up, either end of the Security Association may initiate
|
|
|
requests at any time, and there can be many requests and responses
|
|
|
"in flight" at any given moment. But each message is labeled as
|
|
|
either a request or a response, and for each exchange, one end of the
|
|
|
Security Association is the initiator and the other is the responder.
|
|
|
|
|
|
For every pair of IKE messages, the initiator is responsible for
|
|
|
retransmission in the event of a timeout. The responder MUST never
|
|
|
retransmit a response unless it receives a retransmission of the
|
|
|
request. In that event, the responder MUST ignore the retransmitted
|
|
|
request except insofar as it causes a retransmission of the response.
|
|
|
The initiator MUST remember each request until it receives the
|
|
|
corresponding response. The responder MUST remember each response
|
|
|
until it receives a request whose sequence number is larger than or
|
|
|
equal to the sequence number in the response plus its window size
|
|
|
(see Section 2.3). In order to allow saving memory, responders are
|
|
|
allowed to forget the response after a timeout of several minutes.
|
|
|
If the responder receives a retransmitted request for which it has
|
|
|
already forgotten the response, it MUST ignore the request (and not,
|
|
|
for example, attempt constructing a new response).
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 23]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
IKE is a reliable protocol: the initiator MUST retransmit a request
|
|
|
until it either receives a corresponding response or deems the IKE SA
|
|
|
to have failed. In the latter case, the initiator discards all state
|
|
|
associated with the IKE SA and any Child SAs that were negotiated
|
|
|
using that IKE SA. A retransmission from the initiator MUST be
|
|
|
bitwise identical to the original request. That is, everything
|
|
|
starting from the IKE header (the IKE SA initiator's SPI onwards)
|
|
|
must be bitwise identical; items before it (such as the IP and UDP
|
|
|
headers) do not have to be identical.
|
|
|
|
|
|
Retransmissions of the IKE_SA_INIT request require some special
|
|
|
handling. When a responder receives an IKE_SA_INIT request, it has
|
|
|
to determine whether the packet is a retransmission belonging to an
|
|
|
existing "half-open" IKE SA (in which case the responder retransmits
|
|
|
the same response), or a new request (in which case the responder
|
|
|
creates a new IKE SA and sends a fresh response), or it belongs to an
|
|
|
existing IKE SA where the IKE_AUTH request has been already received
|
|
|
(in which case the responder ignores it).
|
|
|
|
|
|
It is not sufficient to use the initiator's SPI and/or IP address to
|
|
|
differentiate between these three cases because two different peers
|
|
|
behind a single NAT could choose the same initiator SPI. Instead, a
|
|
|
robust responder will do the IKE SA lookup using the whole packet,
|
|
|
its hash, or the Ni payload.
|
|
|
|
|
|
The retransmission policy for one-way messages is somewhat different
|
|
|
from that for regular messages. Because no acknowledgement is ever
|
|
|
sent, there is no reason to gratuitously retransmit one-way messages.
|
|
|
Given that all these messages are errors, it makes sense to send them
|
|
|
only once per "offending" packet, and only retransmit if further
|
|
|
offending packets are received. Still, it also makes sense to limit
|
|
|
retransmissions of such error messages.
|
|
|
|
|
|
2.2. Use of Sequence Numbers for Message ID
|
|
|
|
|
|
Every IKE message contains a Message ID as part of its fixed header.
|
|
|
This Message ID is used to match up requests and responses and to
|
|
|
identify retransmissions of messages. Retransmission of a message
|
|
|
MUST use the same Message ID as the original message.
|
|
|
|
|
|
The Message ID is a 32-bit quantity, which is zero for the
|
|
|
IKE_SA_INIT messages (including retries of the message due to
|
|
|
responses such as COOKIE and INVALID_KE_PAYLOAD), and incremented for
|
|
|
each subsequent exchange. Thus, the first pair of IKE_AUTH messages
|
|
|
will have an ID of 1, the second (when EAP is used) will be 2, and so
|
|
|
on. The Message ID is reset to zero in the new IKE SA after the IKE
|
|
|
SA is rekeyed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 24]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
Each endpoint in the IKE Security Association maintains two "current"
|
|
|
Message IDs: the next one to be used for a request it initiates and
|
|
|
the next one it expects to see in a request from the other end.
|
|
|
These counters increment as requests are generated and received.
|
|
|
Responses always contain the same Message ID as the corresponding
|
|
|
request. That means that after the initial exchange, each integer n
|
|
|
may appear as the Message ID in four distinct messages: the nth
|
|
|
request from the original IKE initiator, the corresponding response,
|
|
|
the nth request from the original IKE responder, and the
|
|
|
corresponding response. If the two ends make a very different number
|
|
|
of requests, the Message IDs in the two directions can be very
|
|
|
different. There is no ambiguity in the messages, however, because
|
|
|
the Initiator and Response flags in the message header specify which
|
|
|
of the four messages a particular one is.
|
|
|
|
|
|
Throughout this document, "initiator" refers to the party who
|
|
|
initiated the exchange being described. The "original initiator"
|
|
|
always refers to the party who initiated the exchange that resulted
|
|
|
in the current IKE SA. In other words, if the "original responder"
|
|
|
starts rekeying the IKE SA, that party becomes the "original
|
|
|
initiator" of the new IKE SA.
|
|
|
|
|
|
Note that Message IDs are cryptographically protected and provide
|
|
|
protection against message replays. In the unlikely event that
|
|
|
Message IDs grow too large to fit in 32 bits, the IKE SA MUST be
|
|
|
closed or rekeyed.
|
|
|
|
|
|
2.3. Window Size for Overlapping Requests
|
|
|
|
|
|
The SET_WINDOW_SIZE notification asserts that the sending endpoint is
|
|
|
capable of keeping state for multiple outstanding exchanges,
|
|
|
permitting the recipient to send multiple requests before getting a
|
|
|
response to the first. The data associated with a SET_WINDOW_SIZE
|
|
|
notification MUST be 4 octets long and contain the big endian
|
|
|
representation of the number of messages the sender promises to keep.
|
|
|
The window size is always one until the initial exchanges complete.
|
|
|
|
|
|
An IKE endpoint MUST wait for a response to each of its messages
|
|
|
before sending a subsequent message unless it has received a
|
|
|
SET_WINDOW_SIZE Notify message from its peer informing it that the
|
|
|
peer is prepared to maintain state for multiple outstanding messages
|
|
|
in order to allow greater throughput.
|
|
|
|
|
|
After an IKE SA is set up, in order to maximize IKE throughput, an
|
|
|
IKE endpoint MAY issue multiple requests before getting a response to
|
|
|
any of them, up to the limit set by its peer's SET_WINDOW_SIZE.
|
|
|
These requests may pass one another over the network. An IKE
|
|
|
endpoint MUST be prepared to accept and process a request while it
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 25]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
has a request outstanding in order to avoid a deadlock in this
|
|
|
situation. An IKE endpoint may also accept and process multiple
|
|
|
requests while it has a request outstanding.
|
|
|
|
|
|
An IKE endpoint MUST NOT exceed the peer's stated window size for
|
|
|
transmitted IKE requests. In other words, if the responder stated
|
|
|
its window size is N, then when the initiator needs to make a request
|
|
|
X, it MUST wait until it has received responses to all requests up
|
|
|
through request X-N. An IKE endpoint MUST keep a copy of (or be able
|
|
|
to regenerate exactly) each request it has sent until it receives the
|
|
|
corresponding response. An IKE endpoint MUST keep a copy of (or be
|
|
|
able to regenerate exactly) the number of previous responses equal to
|
|
|
its declared window size in case its response was lost and the
|
|
|
initiator requests its retransmission by retransmitting the request.
|
|
|
|
|
|
An IKE endpoint supporting a window size greater than one ought to be
|
|
|
capable of processing incoming requests out of order to maximize
|
|
|
performance in the event of network failures or packet reordering.
|
|
|
|
|
|
The window size is normally a (possibly configurable) property of a
|
|
|
particular implementation, and is not related to congestion control
|
|
|
(unlike the window size in TCP, for example). In particular, what
|
|
|
the responder should do when it receives a SET_WINDOW_SIZE
|
|
|
notification containing a smaller value than is currently in effect
|
|
|
is not defined. Thus, there is currently no way to reduce the window
|
|
|
size of an existing IKE SA; you can only increase it. When rekeying
|
|
|
an IKE SA, the new IKE SA starts with window size 1 until it is
|
|
|
explicitly increased by sending a new SET_WINDOW_SIZE notification.
|
|
|
|
|
|
The INVALID_MESSAGE_ID notification is sent when an IKE Message ID
|
|
|
outside the supported window is received. This Notify message MUST
|
|
|
NOT be sent in a response; the invalid request MUST NOT be
|
|
|
acknowledged. Instead, inform the other side by initiating an
|
|
|
INFORMATIONAL exchange with Notification data containing the four-
|
|
|
octet invalid Message ID. Sending this notification is OPTIONAL, and
|
|
|
notifications of this type MUST be rate limited.
|
|
|
|
|
|
2.4. State Synchronization and Connection Timeouts
|
|
|
|
|
|
An IKE endpoint is allowed to forget all of its state associated with
|
|
|
an IKE SA and the collection of corresponding Child SAs at any time.
|
|
|
This is the anticipated behavior in the event of an endpoint crash
|
|
|
and restart. It is important when an endpoint either fails or
|
|
|
reinitializes its state that the other endpoint detect those
|
|
|
conditions and not continue to waste network bandwidth by sending
|
|
|
packets over discarded SAs and having them fall into a black hole.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 26]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
The INITIAL_CONTACT notification asserts that this IKE SA is the only
|
|
|
IKE SA currently active between the authenticated identities. It MAY
|
|
|
be sent when an IKE SA is established after a crash, and the
|
|
|
recipient MAY use this information to delete any other IKE SAs it has
|
|
|
to the same authenticated identity without waiting for a timeout.
|
|
|
This notification MUST NOT be sent by an entity that may be
|
|
|
replicated (e.g., a roaming user's credentials where the user is
|
|
|
allowed to connect to the corporate firewall from two remote systems
|
|
|
at the same time). The INITIAL_CONTACT notification, if sent, MUST
|
|
|
be in the first IKE_AUTH request or response, not as a separate
|
|
|
exchange afterwards; receiving parties MAY ignore it in other
|
|
|
messages.
|
|
|
|
|
|
Since IKE is designed to operate in spite of DoS attacks from the
|
|
|
network, an endpoint MUST NOT conclude that the other endpoint has
|
|
|
failed based on any routing information (e.g., ICMP messages) or IKE
|
|
|
messages that arrive without cryptographic protection (e.g., Notify
|
|
|
messages complaining about unknown SPIs). An endpoint MUST conclude
|
|
|
that the other endpoint has failed only when repeated attempts to
|
|
|
contact it have gone unanswered for a timeout period or when a
|
|
|
cryptographically protected INITIAL_CONTACT notification is received
|
|
|
on a different IKE SA to the same authenticated identity. An
|
|
|
endpoint should suspect that the other endpoint has failed based on
|
|
|
routing information and initiate a request to see whether the other
|
|
|
endpoint is alive. To check whether the other side is alive, IKE
|
|
|
specifies an empty INFORMATIONAL message that (like all IKE requests)
|
|
|
requires an acknowledgement (note that within the context of an IKE
|
|
|
SA, an "empty" message consists of an IKE header followed by an
|
|
|
Encrypted payload that contains no payloads). If a cryptographically
|
|
|
protected (fresh, i.e., not retransmitted) message has been received
|
|
|
from the other side recently, unprotected Notify messages MAY be
|
|
|
ignored. Implementations MUST limit the rate at which they take
|
|
|
actions based on unprotected messages.
|
|
|
|
|
|
The number of retries and length of timeouts are not covered in this
|
|
|
specification because they do not affect interoperability. It is
|
|
|
suggested that messages be retransmitted at least a dozen times over
|
|
|
a period of at least several minutes before giving up on an SA, but
|
|
|
different environments may require different rules. To be a good
|
|
|
network citizen, retransmission times MUST increase exponentially to
|
|
|
avoid flooding the network and making an existing congestion
|
|
|
situation worse. If there has only been outgoing traffic on all of
|
|
|
the SAs associated with an IKE SA, it is essential to confirm
|
|
|
liveness of the other endpoint to avoid black holes. If no
|
|
|
cryptographically protected messages have been received on an IKE SA
|
|
|
or any of its Child SAs recently, the system needs to perform a
|
|
|
liveness check in order to prevent sending messages to a dead peer.
|
|
|
(This is sometimes called "dead peer detection" or "DPD", although it
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 27]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
is really detecting live peers, not dead ones.) Receipt of a fresh
|
|
|
cryptographically protected message on an IKE SA or any of its Child
|
|
|
SAs ensures liveness of the IKE SA and all of its Child SAs. Note
|
|
|
that this places requirements on the failure modes of an IKE
|
|
|
endpoint. An implementation needs to stop sending over any SA if
|
|
|
some failure prevents it from receiving on all of the associated SAs.
|
|
|
If a system creates Child SAs that can fail independently from one
|
|
|
another without the associated IKE SA being able to send a delete
|
|
|
message, then the system MUST negotiate such Child SAs using separate
|
|
|
IKE SAs.
|
|
|
|
|
|
There is a DoS attack on the initiator of an IKE SA that can be
|
|
|
avoided if the initiator takes the proper care. Since the first two
|
|
|
messages of an SA setup are not cryptographically protected, an
|
|
|
attacker could respond to the initiator's message before the genuine
|
|
|
responder and poison the connection setup attempt. To prevent this,
|
|
|
the initiator MAY be willing to accept multiple responses to its
|
|
|
first message, treat each as potentially legitimate, respond to it,
|
|
|
and then discard all the invalid half-open connections when it
|
|
|
receives a valid cryptographically protected response to any one of
|
|
|
its requests. Once a cryptographically valid response is received,
|
|
|
all subsequent responses should be ignored whether or not they are
|
|
|
cryptographically valid.
|
|
|
|
|
|
Note that with these rules, there is no reason to negotiate and agree
|
|
|
upon an SA lifetime. If IKE presumes the partner is dead, based on
|
|
|
repeated lack of acknowledgement to an IKE message, then the IKE SA
|
|
|
and all Child SAs set up through that IKE SA are deleted.
|
|
|
|
|
|
An IKE endpoint may at any time delete inactive Child SAs to recover
|
|
|
resources used to hold their state. If an IKE endpoint chooses to
|
|
|
delete Child SAs, it MUST send Delete payloads to the other end
|
|
|
notifying it of the deletion. It MAY similarly time out the IKE SA.
|
|
|
Closing the IKE SA implicitly closes all associated Child SAs. In
|
|
|
this case, an IKE endpoint SHOULD send a Delete payload indicating
|
|
|
that it has closed the IKE SA unless the other endpoint is no longer
|
|
|
responding.
|
|
|
|
|
|
2.5. Version Numbers and Forward Compatibility
|
|
|
|
|
|
This document describes version 2.0 of IKE, meaning the major version
|
|
|
number is 2 and the minor version number is 0. This document is a
|
|
|
replacement for [IKEV2]. It is likely that some implementations will
|
|
|
want to support version 1.0 and version 2.0, and in the future, other
|
|
|
versions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 28]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
The major version number should be incremented only if the packet
|
|
|
formats or required actions have changed so dramatically that an
|
|
|
older version node would not be able to interoperate with a newer
|
|
|
version node if it simply ignored the fields it did not understand
|
|
|
and took the actions specified in the older specification. The minor
|
|
|
version number indicates new capabilities, and MUST be ignored by a
|
|
|
node with a smaller minor version number, but used for informational
|
|
|
purposes by the node with the larger minor version number. For
|
|
|
example, it might indicate the ability to process a newly defined
|
|
|
Notify message type. The node with the larger minor version number
|
|
|
would simply note that its correspondent would not be able to
|
|
|
understand that message and therefore would not send it.
|
|
|
|
|
|
If an endpoint receives a message with a higher major version number,
|
|
|
it MUST drop the message and SHOULD send an unauthenticated Notify
|
|
|
message of type INVALID_MAJOR_VERSION containing the highest
|
|
|
(closest) version number it supports. If an endpoint supports major
|
|
|
version n, and major version m, it MUST support all versions between
|
|
|
n and m. If it receives a message with a major version that it
|
|
|
supports, it MUST respond with that version number. In order to
|
|
|
prevent two nodes from being tricked into corresponding with a lower
|
|
|
major version number than the maximum that they both support, IKE has
|
|
|
a flag that indicates that the node is capable of speaking a higher
|
|
|
major version number.
|
|
|
|
|
|
Thus, the major version number in the IKE header indicates the
|
|
|
version number of the message, not the highest version number that
|
|
|
the transmitter supports. If the initiator is capable of speaking
|
|
|
versions n, n+1, and n+2, and the responder is capable of speaking
|
|
|
versions n and n+1, then they will negotiate speaking n+1, where the
|
|
|
initiator will set a flag indicating its ability to speak a higher
|
|
|
version. If they mistakenly (perhaps through an active attacker
|
|
|
sending error messages) negotiate to version n, then both will notice
|
|
|
that the other side can support a higher version number, and they
|
|
|
MUST break the connection and reconnect using version n+1.
|
|
|
|
|
|
Note that IKEv1 does not follow these rules, because there is no way
|
|
|
in v1 of noting that you are capable of speaking a higher version
|
|
|
number. So an active attacker can trick two v2-capable nodes into
|
|
|
speaking v1. When a v2-capable node negotiates down to v1, it should
|
|
|
note that fact in its logs.
|
|
|
|
|
|
Also, for forward compatibility, all fields marked RESERVED MUST be
|
|
|
set to zero by an implementation running version 2.0, and their
|
|
|
content MUST be ignored by an implementation running version 2.0 ("Be
|
|
|
conservative in what you send and liberal in what you receive" [IP]).
|
|
|
In this way, future versions of the protocol can use those fields in
|
|
|
a way that is guaranteed to be ignored by implementations that do not
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 29]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
understand them. Similarly, payload types that are not defined are
|
|
|
reserved for future use; implementations of a version where they are
|
|
|
undefined MUST skip over those payloads and ignore their contents.
|
|
|
|
|
|
IKEv2 adds a "critical" flag to each payload header for further
|
|
|
flexibility for forward compatibility. If the critical flag is set
|
|
|
and the payload type is unrecognized, the message MUST be rejected
|
|
|
and the response to the IKE request containing that payload MUST
|
|
|
include a Notify payload UNSUPPORTED_CRITICAL_PAYLOAD, indicating an
|
|
|
unsupported critical payload was included. In that Notify payload,
|
|
|
the notification data contains the one-octet payload type. If the
|
|
|
critical flag is not set and the payload type is unsupported, that
|
|
|
payload MUST be ignored. Payloads sent in IKE response messages MUST
|
|
|
NOT have the critical flag set. Note that the critical flag applies
|
|
|
only to the payload type, not the contents. If the payload type is
|
|
|
recognized, but the payload contains something that is not (such as
|
|
|
an unknown transform inside an SA payload, or an unknown Notify
|
|
|
Message Type inside a Notify payload), the critical flag is ignored.
|
|
|
|
|
|
Although new payload types may be added in the future and may appear
|
|
|
interleaved with the fields defined in this specification,
|
|
|
implementations SHOULD send the payloads defined in this
|
|
|
specification in the order shown in the figures in Sections 1 and 2;
|
|
|
implementations MUST NOT reject as invalid a message with those
|
|
|
payloads in any other order.
|
|
|
|
|
|
2.6. IKE SA SPIs and Cookies
|
|
|
|
|
|
The initial two eight-octet fields in the header, called the "IKE
|
|
|
SPIs", are used as a connection identifier at the beginning of IKE
|
|
|
packets. Each endpoint chooses one of the two SPIs and MUST choose
|
|
|
them so as to be unique identifiers of an IKE SA. An SPI value of
|
|
|
zero is special: it indicates that the remote SPI value is not yet
|
|
|
known by the sender.
|
|
|
|
|
|
Incoming IKE packets are mapped to an IKE SA only using the packet's
|
|
|
SPI, not using (for example) the source IP address of the packet.
|
|
|
|
|
|
Unlike ESP and AH where only the recipient's SPI appears in the
|
|
|
header of a message, in IKE the sender's SPI is also sent in every
|
|
|
message. Since the SPI chosen by the original initiator of the IKE
|
|
|
SA is always sent first, an endpoint with multiple IKE SAs open that
|
|
|
wants to find the appropriate IKE SA using the SPI it assigned must
|
|
|
look at the Initiator flag in the header to determine whether it
|
|
|
assigned the first or the second eight octets.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 30]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
In the first message of an initial IKE exchange, the initiator will
|
|
|
not know the responder's SPI value and will therefore set that field
|
|
|
to zero. When the IKE_SA_INIT exchange does not result in the
|
|
|
creation of an IKE SA due to INVALID_KE_PAYLOAD, NO_PROPOSAL_CHOSEN,
|
|
|
or COOKIE (see Section 2.6), the responder's SPI will be zero also in
|
|
|
the response message. However, if the responder sends a non-zero
|
|
|
responder SPI, the initiator should not reject the response for only
|
|
|
that reason.
|
|
|
|
|
|
Two expected attacks against IKE are state and CPU exhaustion, where
|
|
|
the target is flooded with session initiation requests from forged IP
|
|
|
addresses. These attacks can be made less effective if a responder
|
|
|
uses minimal CPU and commits no state to an SA until it knows the
|
|
|
initiator can receive packets at the address from which it claims to
|
|
|
be sending them.
|
|
|
|
|
|
When a responder detects a large number of half-open IKE SAs, it
|
|
|
SHOULD reply to IKE_SA_INIT requests with a response containing the
|
|
|
COOKIE notification. The data associated with this notification MUST
|
|
|
be between 1 and 64 octets in length (inclusive), and its generation
|
|
|
is described later in this section. If the IKE_SA_INIT response
|
|
|
includes the COOKIE notification, the initiator MUST then retry the
|
|
|
IKE_SA_INIT request, and include the COOKIE notification containing
|
|
|
the received data as the first payload, and all other payloads
|
|
|
unchanged. The initial exchange will then be as follows:
|
|
|
|
|
|
Initiator Responder
|
|
|
-------------------------------------------------------------------
|
|
|
HDR(A,0), SAi1, KEi, Ni -->
|
|
|
<-- HDR(A,0), N(COOKIE)
|
|
|
HDR(A,0), N(COOKIE), SAi1,
|
|
|
KEi, Ni -->
|
|
|
<-- HDR(A,B), SAr1, KEr,
|
|
|
Nr, [CERTREQ]
|
|
|
HDR(A,B), SK {IDi, [CERT,]
|
|
|
[CERTREQ,] [IDr,] AUTH,
|
|
|
SAi2, TSi, TSr} -->
|
|
|
<-- HDR(A,B), SK {IDr, [CERT,]
|
|
|
AUTH, SAr2, TSi, TSr}
|
|
|
|
|
|
The first two messages do not affect any initiator or responder state
|
|
|
except for communicating the cookie. In particular, the message
|
|
|
sequence numbers in the first four messages will all be zero and the
|
|
|
message sequence numbers in the last two messages will be one. 'A'
|
|
|
is the SPI assigned by the initiator, while 'B' is the SPI assigned
|
|
|
by the responder.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 31]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
An IKE implementation can implement its responder cookie generation
|
|
|
in such a way as to not require any saved state to recognize its
|
|
|
valid cookie when the second IKE_SA_INIT message arrives. The exact
|
|
|
algorithms and syntax used to generate cookies do not affect
|
|
|
interoperability and hence are not specified here. The following is
|
|
|
an example of how an endpoint could use cookies to implement limited
|
|
|
DoS protection.
|
|
|
|
|
|
A good way to do this is to set the responder cookie to be:
|
|
|
|
|
|
Cookie = <VersionIDofSecret> | Hash(Ni | IPi | SPIi | <secret>)
|
|
|
|
|
|
where <secret> is a randomly generated secret known only to the
|
|
|
responder and periodically changed and | indicates concatenation.
|
|
|
<VersionIDofSecret> should be changed whenever <secret> is
|
|
|
regenerated. The cookie can be recomputed when the IKE_SA_INIT
|
|
|
arrives the second time and compared to the cookie in the received
|
|
|
message. If it matches, the responder knows that the cookie was
|
|
|
generated since the last change to <secret> and that IPi must be the
|
|
|
same as the source address it saw the first time. Incorporating SPIi
|
|
|
into the calculation ensures that if multiple IKE SAs are being set
|
|
|
up in parallel they will all get different cookies (assuming the
|
|
|
initiator chooses unique SPIi's). Incorporating Ni in the hash
|
|
|
ensures that an attacker who sees only message 2 can't successfully
|
|
|
forge a message 3. Also, incorporating SPIi in the hash prevents an
|
|
|
attacker from fetching one cookie from the other end, and then
|
|
|
initiating many IKE_SA_INIT exchanges all with different initiator
|
|
|
SPIs (and perhaps port numbers) so that the responder thinks that
|
|
|
there are a lot of machines behind one NAT box that are all trying to
|
|
|
connect.
|
|
|
|
|
|
If a new value for <secret> is chosen while there are connections in
|
|
|
the process of being initialized, an IKE_SA_INIT might be returned
|
|
|
with other than the current <VersionIDofSecret>. The responder in
|
|
|
that case MAY reject the message by sending another response with a
|
|
|
new cookie or it MAY keep the old value of <secret> around for a
|
|
|
short time and accept cookies computed from either one. The
|
|
|
responder should not accept cookies indefinitely after <secret> is
|
|
|
changed, since that would defeat part of the DoS protection. The
|
|
|
responder should change the value of <secret> frequently, especially
|
|
|
if under attack.
|
|
|
|
|
|
When one party receives an IKE_SA_INIT request containing a cookie
|
|
|
whose contents do not match the value expected, that party MUST
|
|
|
ignore the cookie and process the message as if no cookie had been
|
|
|
included; usually this means sending a response containing a new
|
|
|
cookie. The initiator should limit the number of cookie exchanges it
|
|
|
tries before giving up, possibly using exponential back-off. An
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 32]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
attacker can forge multiple cookie responses to the initiator's
|
|
|
IKE_SA_INIT message, and each of those forged cookie replies will
|
|
|
cause two packets to be sent: one packet from the initiator to the
|
|
|
responder (which will reject those cookies), and one response from
|
|
|
responder to initiator that includes the correct cookie.
|
|
|
|
|
|
A note on terminology: the term "cookies" originates with Karn and
|
|
|
Simpson [PHOTURIS] in Photuris, an early proposal for key management
|
|
|
with IPsec, and it has persisted. The Internet Security Association
|
|
|
and Key Management Protocol (ISAKMP) [ISAKMP] fixed message header
|
|
|
includes two eight-octet fields called "cookies", and that syntax is
|
|
|
used by both IKEv1 and IKEv2, although in IKEv2 they are referred to
|
|
|
as the "IKE SPI" and there is a new separate field in a Notify
|
|
|
payload holding the cookie.
|
|
|
|
|
|
2.6.1. Interaction of COOKIE and INVALID_KE_PAYLOAD
|
|
|
|
|
|
There are two common reasons why the initiator may have to retry the
|
|
|
IKE_SA_INIT exchange: the responder requests a cookie or wants a
|
|
|
different Diffie-Hellman group than was included in the KEi payload.
|
|
|
If the initiator receives a cookie from the responder, the initiator
|
|
|
needs to decide whether or not to include the cookie in only the next
|
|
|
retry of the IKE_SA_INIT request, or in all subsequent retries as
|
|
|
well.
|
|
|
|
|
|
If the initiator includes the cookie only in the next retry, one
|
|
|
additional round trip may be needed in some cases. An additional
|
|
|
round trip is needed also if the initiator includes the cookie in all
|
|
|
retries, but the responder does not support this. For instance, if
|
|
|
the responder includes the KEi payloads in cookie calculation, it
|
|
|
will reject the request by sending a new cookie.
|
|
|
|
|
|
If both peers support including the cookie in all retries, a slightly
|
|
|
shorter exchange can happen.
|
|
|
|
|
|
Initiator Responder
|
|
|
-----------------------------------------------------------
|
|
|
HDR(A,0), SAi1, KEi, Ni -->
|
|
|
<-- HDR(A,0), N(COOKIE)
|
|
|
HDR(A,0), N(COOKIE), SAi1, KEi, Ni -->
|
|
|
<-- HDR(A,0), N(INVALID_KE_PAYLOAD)
|
|
|
HDR(A,0), N(COOKIE), SAi1, KEi', Ni -->
|
|
|
<-- HDR(A,B), SAr1, KEr, Nr
|
|
|
|
|
|
Implementations SHOULD support this shorter exchange, but MUST NOT
|
|
|
fail if other implementations do not support this shorter exchange.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 33]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
2.7. Cryptographic Algorithm Negotiation
|
|
|
|
|
|
The payload type known as "SA" indicates a proposal for a set of
|
|
|
choices of IPsec protocols (IKE, ESP, or AH) for the SA as well as
|
|
|
cryptographic algorithms associated with each protocol.
|
|
|
|
|
|
An SA payload consists of one or more proposals. Each proposal
|
|
|
includes one protocol. Each protocol contains one or more transforms
|
|
|
-- each specifying a cryptographic algorithm. Each transform
|
|
|
contains zero or more attributes (attributes are needed only if the
|
|
|
Transform ID does not completely specify the cryptographic
|
|
|
algorithm).
|
|
|
|
|
|
This hierarchical structure was designed to efficiently encode
|
|
|
proposals for cryptographic suites when the number of supported
|
|
|
suites is large because multiple values are acceptable for multiple
|
|
|
transforms. The responder MUST choose a single suite, which may be
|
|
|
any subset of the SA proposal following the rules below.
|
|
|
|
|
|
Each proposal contains one protocol. If a proposal is accepted, the
|
|
|
SA response MUST contain the same protocol. The responder MUST
|
|
|
accept a single proposal or reject them all and return an error. The
|
|
|
error is given in a notification of type NO_PROPOSAL_CHOSEN.
|
|
|
|
|
|
Each IPsec protocol proposal contains one or more transforms. Each
|
|
|
transform contains a Transform Type. The accepted cryptographic
|
|
|
suite MUST contain exactly one transform of each type included in the
|
|
|
proposal. For example: if an ESP proposal includes transforms
|
|
|
ENCR_3DES, ENCR_AES w/keysize 128, ENCR_AES w/keysize 256,
|
|
|
AUTH_HMAC_MD5, and AUTH_HMAC_SHA, the accepted suite MUST contain one
|
|
|
of the ENCR_ transforms and one of the AUTH_ transforms. Thus, six
|
|
|
combinations are acceptable.
|
|
|
|
|
|
If an initiator proposes both normal ciphers with integrity
|
|
|
protection as well as combined-mode ciphers, then two proposals are
|
|
|
needed. One of the proposals includes the normal ciphers with the
|
|
|
integrity algorithms for them, and the other proposal includes all
|
|
|
the combined-mode ciphers without the integrity algorithms (because
|
|
|
combined-mode ciphers are not allowed to have any integrity algorithm
|
|
|
other than "none").
|
|
|
|
|
|
2.8. Rekeying
|
|
|
|
|
|
IKE, ESP, and AH Security Associations use secret keys that should be
|
|
|
used only for a limited amount of time and to protect a limited
|
|
|
amount of data. This limits the lifetime of the entire Security
|
|
|
Association. When the lifetime of a Security Association expires,
|
|
|
the Security Association MUST NOT be used. If there is demand, new
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 34]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
Security Associations MAY be established. Reestablishment of
|
|
|
Security Associations to take the place of ones that expire is
|
|
|
referred to as "rekeying".
|
|
|
|
|
|
To allow for minimal IPsec implementations, the ability to rekey SAs
|
|
|
without restarting the entire IKE SA is optional. An implementation
|
|
|
MAY refuse all CREATE_CHILD_SA requests within an IKE SA. If an SA
|
|
|
has expired or is about to expire and rekeying attempts using the
|
|
|
mechanisms described here fail, an implementation MUST close the IKE
|
|
|
SA and any associated Child SAs and then MAY start new ones.
|
|
|
Implementations may wish to support in-place rekeying of SAs, since
|
|
|
doing so offers better performance and is likely to reduce the number
|
|
|
of packets lost during the transition.
|
|
|
|
|
|
To rekey a Child SA within an existing IKE SA, create a new,
|
|
|
equivalent SA (see Section 2.17 below), and when the new one is
|
|
|
established, delete the old one. Note that, when rekeying, the new
|
|
|
Child SA SHOULD NOT have different Traffic Selectors and algorithms
|
|
|
than the old one.
|
|
|
|
|
|
To rekey an IKE SA, establish a new equivalent IKE SA (see
|
|
|
Section 2.18 below) with the peer to whom the old IKE SA is shared
|
|
|
using a CREATE_CHILD_SA within the existing IKE SA. An IKE SA so
|
|
|
created inherits all of the original IKE SA's Child SAs, and the new
|
|
|
IKE SA is used for all control messages needed to maintain those
|
|
|
Child SAs. After the new equivalent IKE SA is created, the initiator
|
|
|
deletes the old IKE SA, and the Delete payload to delete itself MUST
|
|
|
be the last request sent over the old IKE SA.
|
|
|
|
|
|
SAs should be rekeyed proactively, i.e., the new SA should be
|
|
|
established before the old one expires and becomes unusable. Enough
|
|
|
time should elapse between the time the new SA is established and the
|
|
|
old one becomes unusable so that traffic can be switched over to the
|
|
|
new SA.
|
|
|
|
|
|
A difference between IKEv1 and IKEv2 is that in IKEv1 SA lifetimes
|
|
|
were negotiated. In IKEv2, each end of the SA is responsible for
|
|
|
enforcing its own lifetime policy on the SA and rekeying the SA when
|
|
|
necessary. If the two ends have different lifetime policies, the end
|
|
|
with the shorter lifetime will end up always being the one to request
|
|
|
the rekeying. If an SA has been inactive for a long time and if an
|
|
|
endpoint would not initiate the SA in the absence of traffic, the
|
|
|
endpoint MAY choose to close the SA instead of rekeying it when its
|
|
|
lifetime expires. It can also do so if there has been no traffic
|
|
|
since the last time the SA was rekeyed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 35]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
Note that IKEv2 deliberately allows parallel SAs with the same
|
|
|
Traffic Selectors between common endpoints. One of the purposes of
|
|
|
this is to support traffic quality of service (QoS) differences among
|
|
|
the SAs (see [DIFFSERVFIELD], [DIFFSERVARCH], and Section 4.1 of
|
|
|
[DIFFTUNNEL]). Hence unlike IKEv1, the combination of the endpoints
|
|
|
and the Traffic Selectors may not uniquely identify an SA between
|
|
|
those endpoints, so the IKEv1 rekeying heuristic of deleting SAs on
|
|
|
the basis of duplicate Traffic Selectors SHOULD NOT be used.
|
|
|
|
|
|
There are timing windows -- particularly in the presence of lost
|
|
|
packets -- where endpoints may not agree on the state of an SA. The
|
|
|
responder to a CREATE_CHILD_SA MUST be prepared to accept messages on
|
|
|
an SA before sending its response to the creation request, so there
|
|
|
is no ambiguity for the initiator. The initiator MAY begin sending
|
|
|
on an SA as soon as it processes the response. The initiator,
|
|
|
however, cannot receive on a newly created SA until it receives and
|
|
|
processes the response to its CREATE_CHILD_SA request. How, then, is
|
|
|
the responder to know when it is OK to send on the newly created SA?
|
|
|
|
|
|
From a technical correctness and interoperability perspective, the
|
|
|
responder MAY begin sending on an SA as soon as it sends its response
|
|
|
to the CREATE_CHILD_SA request. In some situations, however, this
|
|
|
could result in packets unnecessarily being dropped, so an
|
|
|
implementation MAY defer such sending.
|
|
|
|
|
|
The responder can be assured that the initiator is prepared to
|
|
|
receive messages on an SA if either (1) it has received a
|
|
|
cryptographically valid message on the other half of the SA pair, or
|
|
|
(2) the new SA rekeys an existing SA and it receives an IKE request
|
|
|
to close the replaced SA. When rekeying an SA, the responder
|
|
|
continues to send traffic on the old SA until one of those events
|
|
|
occurs. When establishing a new SA, the responder MAY defer sending
|
|
|
messages on a new SA until either it receives one or a timeout has
|
|
|
occurred. If an initiator receives a message on an SA for which it
|
|
|
has not received a response to its CREATE_CHILD_SA request, it
|
|
|
interprets that as a likely packet loss and retransmits the
|
|
|
CREATE_CHILD_SA request. An initiator MAY send a dummy ESP message
|
|
|
on a newly created ESP SA if it has no messages queued in order to
|
|
|
assure the responder that the initiator is ready to receive messages.
|
|
|
|
|
|
2.8.1. Simultaneous Child SA Rekeying
|
|
|
|
|
|
If the two ends have the same lifetime policies, it is possible that
|
|
|
both will initiate a rekeying at the same time (which will result in
|
|
|
redundant SAs). To reduce the probability of this happening, the
|
|
|
timing of rekeying requests SHOULD be jittered (delayed by a random
|
|
|
amount of time after the need for rekeying is noticed).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 36]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
This form of rekeying may temporarily result in multiple similar SAs
|
|
|
between the same pairs of nodes. When there are two SAs eligible to
|
|
|
receive packets, a node MUST accept incoming packets through either
|
|
|
SA. If redundant SAs are created though such a collision, the SA
|
|
|
created with the lowest of the four nonces used in the two exchanges
|
|
|
SHOULD be closed by the endpoint that created it. "Lowest" means an
|
|
|
octet-by-octet comparison (instead of, for instance, comparing the
|
|
|
nonces as large integers). In other words, start by comparing the
|
|
|
first octet; if they're equal, move to the next octet, and so on. If
|
|
|
you reach the end of one nonce, that nonce is the lower one. The
|
|
|
node that initiated the surviving rekeyed SA should delete the
|
|
|
replaced SA after the new one is established.
|
|
|
|
|
|
The following is an explanation on the impact this has on
|
|
|
implementations. Assume that hosts A and B have an existing Child SA
|
|
|
pair with SPIs (SPIa1,SPIb1), and both start rekeying it at the same
|
|
|
time:
|
|
|
|
|
|
Host A Host B
|
|
|
-------------------------------------------------------------------
|
|
|
send req1: N(REKEY_SA,SPIa1),
|
|
|
SA(..,SPIa2,..),Ni1,.. -->
|
|
|
<-- send req2: N(REKEY_SA,SPIb1),
|
|
|
SA(..,SPIb2,..),Ni2
|
|
|
recv req2 <--
|
|
|
|
|
|
At this point, A knows there is a simultaneous rekeying happening.
|
|
|
However, it cannot yet know which of the exchanges will have the
|
|
|
lowest nonce, so it will just note the situation and respond as
|
|
|
usual.
|
|
|
|
|
|
send resp2: SA(..,SPIa3,..),
|
|
|
Nr1,.. -->
|
|
|
--> recv req1
|
|
|
|
|
|
Now B also knows that simultaneous rekeying is going on. It responds
|
|
|
as usual.
|
|
|
|
|
|
<-- send resp1: SA(..,SPIb3,..),
|
|
|
Nr2,..
|
|
|
recv resp1 <--
|
|
|
--> recv resp2
|
|
|
|
|
|
At this point, there are three Child SA pairs between A and B (the
|
|
|
old one and two new ones). A and B can now compare the nonces.
|
|
|
Suppose that the lowest nonce was Nr1 in message resp2; in this case,
|
|
|
B (the sender of req2) deletes the redundant new SA, and A (the node
|
|
|
that initiated the surviving rekeyed SA), deletes the old one.
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 37]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
send req3: D(SPIa1) -->
|
|
|
<-- send req4: D(SPIb2)
|
|
|
--> recv req3
|
|
|
<-- send resp3: D(SPIb1)
|
|
|
recv req4 <--
|
|
|
send resp4: D(SPIa3) -->
|
|
|
|
|
|
The rekeying is now finished.
|
|
|
|
|
|
However, there is a second possible sequence of events that can
|
|
|
happen if some packets are lost in the network, resulting in
|
|
|
retransmissions. The rekeying begins as usual, but A's first packet
|
|
|
(req1) is lost.
|
|
|
|
|
|
Host A Host B
|
|
|
-------------------------------------------------------------------
|
|
|
send req1: N(REKEY_SA,SPIa1),
|
|
|
SA(..,SPIa2,..),
|
|
|
Ni1,.. --> (lost)
|
|
|
<-- send req2: N(REKEY_SA,SPIb1),
|
|
|
SA(..,SPIb2,..),Ni2
|
|
|
recv req2 <--
|
|
|
send resp2: SA(..,SPIa3,..),
|
|
|
Nr1,.. -->
|
|
|
--> recv resp2
|
|
|
<-- send req3: D(SPIb1)
|
|
|
recv req3 <--
|
|
|
send resp3: D(SPIa1) -->
|
|
|
--> recv resp3
|
|
|
|
|
|
From B's point of view, the rekeying is now completed, and since it
|
|
|
has not yet received A's req1, it does not even know that there was
|
|
|
simultaneous rekeying. However, A will continue retransmitting the
|
|
|
message, and eventually it will reach B.
|
|
|
|
|
|
resend req1 -->
|
|
|
--> recv req1
|
|
|
|
|
|
To B, it looks like A is trying to rekey an SA that no longer exists;
|
|
|
thus, B responds to the request with something non-fatal such as
|
|
|
CHILD_SA_NOT_FOUND.
|
|
|
|
|
|
<-- send resp1: N(CHILD_SA_NOT_FOUND)
|
|
|
recv resp1 <--
|
|
|
|
|
|
When A receives this error, it already knows there was simultaneous
|
|
|
rekeying, so it can ignore the error message.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 38]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
2.8.2. Simultaneous IKE SA Rekeying
|
|
|
|
|
|
Probably the most complex case occurs when both peers try to rekey
|
|
|
the IKE_SA at the same time. Basically, the text in Section 2.8
|
|
|
applies to this case as well; however, it is important to ensure that
|
|
|
the Child SAs are inherited by the correct IKE_SA.
|
|
|
|
|
|
The case where both endpoints notice the simultaneous rekeying works
|
|
|
the same way as with Child SAs. After the CREATE_CHILD_SA exchanges,
|
|
|
three IKE SAs exist between A and B: the old IKE SA and two new IKE
|
|
|
SAs. The new IKE SA containing the lowest nonce SHOULD be deleted by
|
|
|
the node that created it, and the other surviving new IKE SA MUST
|
|
|
inherit all the Child SAs.
|
|
|
|
|
|
In addition to normal simultaneous rekeying cases, there is a special
|
|
|
case where one peer finishes its rekey before it even notices that
|
|
|
other peer is doing a rekey. If only one peer detects a simultaneous
|
|
|
rekey, redundant SAs are not created. In this case, when the peer
|
|
|
that did not notice the simultaneous rekey gets the request to rekey
|
|
|
the IKE SA that it has already successfully rekeyed, it SHOULD return
|
|
|
TEMPORARY_FAILURE because it is an IKE SA that it is currently trying
|
|
|
to close (whether or not it has already sent the delete notification
|
|
|
for the SA). If the peer that did notice the simultaneous rekey gets
|
|
|
the delete request from the other peer for the old IKE SA, it knows
|
|
|
that the other peer did not detect the simultaneous rekey, and the
|
|
|
first peer can forget its own rekey attempt.
|
|
|
|
|
|
Host A Host B
|
|
|
-------------------------------------------------------------------
|
|
|
send req1:
|
|
|
SA(..,SPIa1,..),Ni1,.. -->
|
|
|
<-- send req2: SA(..,SPIb1,..),Ni2,..
|
|
|
--> recv req1
|
|
|
<-- send resp1: SA(..,SPIb2,..),Nr2,..
|
|
|
recv resp1 <--
|
|
|
send req3: D() -->
|
|
|
--> recv req3
|
|
|
|
|
|
At this point, host B sees a request to close the IKE_SA. There's
|
|
|
not much more to do than to reply as usual. However, at this point
|
|
|
host B should stop retransmitting req2, since once host A receives
|
|
|
resp3, it will delete all the state associated with the old IKE_SA
|
|
|
and will not be able to reply to it.
|
|
|
|
|
|
<-- send resp3: ()
|
|
|
|
|
|
The TEMPORARY_FAILURE notification was not included in RFC 4306, and
|
|
|
support of the TEMPORARY_FAILURE notification is not negotiated.
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 39]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
Thus, older peers that implement RFC 4306 but not this document may
|
|
|
receive these notifications. In that case, they will treat it the
|
|
|
same as any other unknown error notification, and will stop the
|
|
|
exchange. Because the other peer has already rekeyed the exchange,
|
|
|
doing so does not have any ill effects.
|
|
|
|
|
|
2.8.3. Rekeying the IKE SA versus Reauthentication
|
|
|
|
|
|
Rekeying the IKE SA and reauthentication are different concepts in
|
|
|
IKEv2. Rekeying the IKE SA establishes new keys for the IKE SA and
|
|
|
resets the Message ID counters, but it does not authenticate the
|
|
|
parties again (no AUTH or EAP payloads are involved).
|
|
|
|
|
|
Although rekeying the IKE SA may be important in some environments,
|
|
|
reauthentication (the verification that the parties still have access
|
|
|
to the long-term credentials) is often more important.
|
|
|
|
|
|
IKEv2 does not have any special support for reauthentication.
|
|
|
Reauthentication is done by creating a new IKE SA from scratch (using
|
|
|
IKE_SA_INIT/IKE_AUTH exchanges, without any REKEY_SA Notify
|
|
|
payloads), creating new Child SAs within the new IKE SA (without
|
|
|
REKEY_SA Notify payloads), and finally deleting the old IKE SA (which
|
|
|
deletes the old Child SAs as well).
|
|
|
|
|
|
This means that reauthentication also establishes new keys for the
|
|
|
IKE SA and Child SAs. Therefore, while rekeying can be performed
|
|
|
more often than reauthentication, the situation where "authentication
|
|
|
lifetime" is shorter than "key lifetime" does not make sense.
|
|
|
|
|
|
While creation of a new IKE SA can be initiated by either party
|
|
|
(initiator or responder in the original IKE SA), the use of EAP
|
|
|
and/or Configuration payloads means in practice that reauthentication
|
|
|
has to be initiated by the same party as the original IKE SA. IKEv2
|
|
|
does not currently allow the responder to request reauthentication in
|
|
|
this case; however, there are extensions that add this functionality
|
|
|
such as [REAUTH].
|
|
|
|
|
|
2.9. Traffic Selector Negotiation
|
|
|
|
|
|
When an RFC4301-compliant IPsec subsystem receives an IP packet that
|
|
|
matches a "protect" selector in its Security Policy Database (SPD),
|
|
|
the subsystem protects that packet with IPsec. When no SA exists
|
|
|
yet, it is the task of IKE to create it. Maintenance of a system's
|
|
|
SPD is outside the scope of IKE, although some implementations might
|
|
|
update their SPD in connection with the running of IKE (for an
|
|
|
example scenario, see Section 1.1.3).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 40]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
Traffic Selector (TS) payloads allow endpoints to communicate some of
|
|
|
the information from their SPD to their peers. These must be
|
|
|
communicated to IKE from the SPD (for example, the PF_KEY API [PFKEY]
|
|
|
uses the SADB_ACQUIRE message). TS payloads specify the selection
|
|
|
criteria for packets that will be forwarded over the newly set up SA.
|
|
|
This can serve as a consistency check in some scenarios to assure
|
|
|
that the SPDs are consistent. In others, it guides the dynamic
|
|
|
update of the SPD.
|
|
|
|
|
|
Two TS payloads appear in each of the messages in the exchange that
|
|
|
creates a Child SA pair. Each TS payload contains one or more
|
|
|
Traffic Selectors. Each Traffic Selector consists of an address
|
|
|
range (IPv4 or IPv6), a port range, and an IP protocol ID.
|
|
|
|
|
|
The first of the two TS payloads is known as TSi (Traffic Selector-
|
|
|
initiator). The second is known as TSr (Traffic Selector-responder).
|
|
|
TSi specifies the source address of traffic forwarded from (or the
|
|
|
destination address of traffic forwarded to) the initiator of the
|
|
|
Child SA pair. TSr specifies the destination address of the traffic
|
|
|
forwarded to (or the source address of the traffic forwarded from)
|
|
|
the responder of the Child SA pair. For example, if the original
|
|
|
initiator requests the creation of a Child SA pair, and wishes to
|
|
|
tunnel all traffic from subnet 198.51.100.* on the initiator's side
|
|
|
to subnet 192.0.2.* on the responder's side, the initiator would
|
|
|
include a single Traffic Selector in each TS payload. TSi would
|
|
|
specify the address range (198.51.100.0 - 198.51.100.255) and TSr
|
|
|
would specify the address range (192.0.2.0 - 192.0.2.255). Assuming
|
|
|
that proposal was acceptable to the responder, it would send
|
|
|
identical TS payloads back.
|
|
|
|
|
|
IKEv2 allows the responder to choose a subset of the traffic proposed
|
|
|
by the initiator. This could happen when the configurations of the
|
|
|
two endpoints are being updated but only one end has received the new
|
|
|
information. Since the two endpoints may be configured by different
|
|
|
people, the incompatibility may persist for an extended period even
|
|
|
in the absence of errors. It also allows for intentionally different
|
|
|
configurations, as when one end is configured to tunnel all addresses
|
|
|
and depends on the other end to have the up-to-date list.
|
|
|
|
|
|
When the responder chooses a subset of the traffic proposed by the
|
|
|
initiator, it narrows the Traffic Selectors to some subset of the
|
|
|
initiator's proposal (provided the set does not become the null set).
|
|
|
If the type of Traffic Selector proposed is unknown, the responder
|
|
|
ignores that Traffic Selector, so that the unknown type is not
|
|
|
returned in the narrowed set.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 41]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
To enable the responder to choose the appropriate range in this case,
|
|
|
if the initiator has requested the SA due to a data packet, the
|
|
|
initiator SHOULD include as the first Traffic Selector in each of TSi
|
|
|
and TSr a very specific Traffic Selector including the addresses in
|
|
|
the packet triggering the request. In the example, the initiator
|
|
|
would include in TSi two Traffic Selectors: the first containing the
|
|
|
address range (198.51.100.43 - 198.51.100.43) and the source port and
|
|
|
IP protocol from the packet and the second containing (198.51.100.0 -
|
|
|
198.51.100.255) with all ports and IP protocols. The initiator would
|
|
|
similarly include two Traffic Selectors in TSr. If the initiator
|
|
|
creates the Child SA pair not in response to an arriving packet, but
|
|
|
rather, say, upon startup, then there may be no specific addresses
|
|
|
the initiator prefers for the initial tunnel over any other. In that
|
|
|
case, the first values in TSi and TSr can be ranges rather than
|
|
|
specific values.
|
|
|
|
|
|
The responder performs the narrowing as follows:
|
|
|
|
|
|
o If the responder's policy does not allow it to accept any part of
|
|
|
the proposed Traffic Selectors, it responds with a TS_UNACCEPTABLE
|
|
|
Notify message.
|
|
|
|
|
|
o If the responder's policy allows the entire set of traffic covered
|
|
|
by TSi and TSr, no narrowing is necessary, and the responder can
|
|
|
return the same TSi and TSr values.
|
|
|
|
|
|
o If the responder's policy allows it to accept the first selector
|
|
|
of TSi and TSr, then the responder MUST narrow the Traffic
|
|
|
Selectors to a subset that includes the initiator's first choices.
|
|
|
In this example above, the responder might respond with TSi being
|
|
|
(198.51.100.43 - 198.51.100.43) with all ports and IP protocols.
|
|
|
|
|
|
o If the responder's policy does not allow it to accept the first
|
|
|
selector of TSi and TSr, the responder narrows to an acceptable
|
|
|
subset of TSi and TSr.
|
|
|
|
|
|
When narrowing is done, there may be several subsets that are
|
|
|
acceptable but their union is not. In this case, the responder
|
|
|
arbitrarily chooses one of them, and MAY include an
|
|
|
ADDITIONAL_TS_POSSIBLE notification in the response. The
|
|
|
ADDITIONAL_TS_POSSIBLE notification asserts that the responder
|
|
|
narrowed the proposed Traffic Selectors but that other Traffic
|
|
|
Selectors would also have been acceptable, though only in a separate
|
|
|
SA. There is no data associated with this Notify type. This case
|
|
|
will occur only when the initiator and responder are configured
|
|
|
differently from one another. If the initiator and responder agree
|
|
|
on the granularity of tunnels, the initiator will never request a
|
|
|
tunnel wider than the responder will accept.
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 42]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
It is possible for the responder's policy to contain multiple smaller
|
|
|
ranges, all encompassed by the initiator's Traffic Selector, and with
|
|
|
the responder's policy being that each of those ranges should be sent
|
|
|
over a different SA. Continuing the example above, the responder
|
|
|
might have a policy of being willing to tunnel those addresses to and
|
|
|
from the initiator, but might require that each address pair be on a
|
|
|
separately negotiated Child SA. If the initiator didn't generate its
|
|
|
request based on the packet, but (for example) upon startup, there
|
|
|
would not be the very specific first Traffic Selectors helping the
|
|
|
responder to select the correct range. There would be no way for the
|
|
|
responder to determine which pair of addresses should be included in
|
|
|
this tunnel, and it would have to make a guess or reject the request
|
|
|
with a SINGLE_PAIR_REQUIRED Notify message.
|
|
|
|
|
|
The SINGLE_PAIR_REQUIRED error indicates that a CREATE_CHILD_SA
|
|
|
request is unacceptable because its sender is only willing to accept
|
|
|
Traffic Selectors specifying a single pair of addresses. The
|
|
|
requestor is expected to respond by requesting an SA for only the
|
|
|
specific traffic it is trying to forward.
|
|
|
|
|
|
Few implementations will have policies that require separate SAs for
|
|
|
each address pair. Because of this, if only some parts of the TSi
|
|
|
and TSr proposed by the initiator are acceptable to the responder,
|
|
|
responders SHOULD narrow the selectors to an acceptable subset rather
|
|
|
than use SINGLE_PAIR_REQUIRED.
|
|
|
|
|
|
2.9.1. Traffic Selectors Violating Own Policy
|
|
|
|
|
|
When creating a new SA, the initiator needs to avoid proposing
|
|
|
Traffic Selectors that violate its own policy. If this rule is not
|
|
|
followed, valid traffic may be dropped. If you use decorrelated
|
|
|
policies from [IPSECARCH], this kind of policy violations cannot
|
|
|
happen.
|
|
|
|
|
|
This is best illustrated by an example. Suppose that host A has a
|
|
|
policy whose effect is that traffic to 198.51.100.66 is sent via host
|
|
|
B encrypted using AES, and traffic to all other hosts in
|
|
|
198.51.100.0/24 is also sent via B, but must use 3DES. Suppose also
|
|
|
that host B accepts any combination of AES and 3DES.
|
|
|
|
|
|
If host A now proposes an SA that uses 3DES, and includes TSr
|
|
|
containing (198.51.100.0-198.51.100.255), this will be accepted by
|
|
|
host B. Now, host B can also use this SA to send traffic from
|
|
|
198.51.100.66, but those packets will be dropped by A since it
|
|
|
requires the use of AES for this traffic. Even if host A creates a
|
|
|
new SA only for 198.51.100.66 that uses AES, host B may freely
|
|
|
continue to use the first SA for the traffic. In this situation,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 43]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
when proposing the SA, host A should have followed its own policy,
|
|
|
and included a TSr containing ((198.51.100.0-
|
|
|
198.51.100.65),(198.51.100.67-198.51.100.255)) instead.
|
|
|
|
|
|
In general, if (1) the initiator makes a proposal "for traffic X
|
|
|
(TSi/TSr), do SA", and (2) for some subset X' of X, the initiator
|
|
|
does not actually accept traffic X' with SA, and (3) the initiator
|
|
|
would be willing to accept traffic X' with some SA' (!=SA), valid
|
|
|
traffic can be unnecessarily dropped since the responder can apply
|
|
|
either SA or SA' to traffic X'.
|
|
|
|
|
|
2.10. Nonces
|
|
|
|
|
|
The IKE_SA_INIT messages each contain a nonce. These nonces are used
|
|
|
as inputs to cryptographic functions. The CREATE_CHILD_SA request
|
|
|
and the CREATE_CHILD_SA response also contain nonces. These nonces
|
|
|
are used to add freshness to the key derivation technique used to
|
|
|
obtain keys for Child SA, and to ensure creation of strong
|
|
|
pseudorandom bits from the Diffie-Hellman key. Nonces used in IKEv2
|
|
|
MUST be randomly chosen, MUST be at least 128 bits in size, and MUST
|
|
|
be at least half the key size of the negotiated pseudorandom function
|
|
|
(PRF). However, the initiator chooses the nonce before the outcome
|
|
|
of the negotiation is known. Because of that, the nonce has to be
|
|
|
long enough for all the PRFs being proposed. If the same random
|
|
|
number source is used for both keys and nonces, care must be taken to
|
|
|
ensure that the latter use does not compromise the former.
|
|
|
|
|
|
2.11. Address and Port Agility
|
|
|
|
|
|
IKE runs over UDP ports 500 and 4500, and implicitly sets up ESP and
|
|
|
AH associations for the same IP addresses over which it runs. The IP
|
|
|
addresses and ports in the outer header are, however, not themselves
|
|
|
cryptographically protected, and IKE is designed to work even through
|
|
|
Network Address Translation (NAT) boxes. An implementation MUST
|
|
|
accept incoming requests even if the source port is not 500 or 4500,
|
|
|
and MUST respond to the address and port from which the request was
|
|
|
received. It MUST specify the address and port at which the request
|
|
|
was received as the source address and port in the response. IKE
|
|
|
functions identically over IPv4 or IPv6.
|
|
|
|
|
|
2.12. Reuse of Diffie-Hellman Exponentials
|
|
|
|
|
|
IKE generates keying material using an ephemeral Diffie-Hellman
|
|
|
exchange in order to gain the property of "perfect forward secrecy".
|
|
|
This means that once a connection is closed and its corresponding
|
|
|
keys are forgotten, even someone who has recorded all of the data
|
|
|
from the connection and gets access to all of the long-term keys of
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 44]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
the two endpoints cannot reconstruct the keys used to protect the
|
|
|
conversation without doing a brute force search of the session key
|
|
|
space.
|
|
|
|
|
|
Achieving perfect forward secrecy requires that when a connection is
|
|
|
closed, each endpoint MUST forget not only the keys used by the
|
|
|
connection but also any information that could be used to recompute
|
|
|
those keys.
|
|
|
|
|
|
Because computing Diffie-Hellman exponentials is computationally
|
|
|
expensive, an endpoint may find it advantageous to reuse those
|
|
|
exponentials for multiple connection setups. There are several
|
|
|
reasonable strategies for doing this. An endpoint could choose a new
|
|
|
exponential only periodically though this could result in less-than-
|
|
|
perfect forward secrecy if some connection lasts for less than the
|
|
|
lifetime of the exponential. Or it could keep track of which
|
|
|
exponential was used for each connection and delete the information
|
|
|
associated with the exponential only when some corresponding
|
|
|
connection was closed. This would allow the exponential to be reused
|
|
|
without losing perfect forward secrecy at the cost of maintaining
|
|
|
more state.
|
|
|
|
|
|
Whether and when to reuse Diffie-Hellman exponentials are private
|
|
|
decisions in the sense that they will not affect interoperability.
|
|
|
An implementation that reuses exponentials MAY choose to remember the
|
|
|
exponential used by the other endpoint on past exchanges and if one
|
|
|
is reused to avoid the second half of the calculation. See [REUSE]
|
|
|
for a security analysis of this practice and for additional security
|
|
|
considerations when reusing ephemeral Diffie-Hellman keys.
|
|
|
|
|
|
2.13. Generating Keying Material
|
|
|
|
|
|
In the context of the IKE SA, four cryptographic algorithms are
|
|
|
negotiated: an encryption algorithm, an integrity protection
|
|
|
algorithm, a Diffie-Hellman group, and a pseudorandom function (PRF).
|
|
|
The PRF is used for the construction of keying material for all of
|
|
|
the cryptographic algorithms used in both the IKE SA and the Child
|
|
|
SAs.
|
|
|
|
|
|
We assume that each encryption algorithm and integrity protection
|
|
|
algorithm uses a fixed-size key and that any randomly chosen value of
|
|
|
that fixed size can serve as an appropriate key. For algorithms that
|
|
|
accept a variable-length key, a fixed key size MUST be specified as
|
|
|
part of the cryptographic transform negotiated (see Section 3.3.5 for
|
|
|
the definition of the Key Length transform attribute). For
|
|
|
algorithms for which not all values are valid keys (such as DES or
|
|
|
3DES with key parity), the algorithm by which keys are derived from
|
|
|
arbitrary values MUST be specified by the cryptographic transform.
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 45]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
For integrity protection functions based on Hashed Message
|
|
|
Authentication Code (HMAC), the fixed key size is the size of the
|
|
|
output of the underlying hash function.
|
|
|
|
|
|
It is assumed that PRFs accept keys of any length, but have a
|
|
|
preferred key size. The preferred key size MUST be used as the
|
|
|
length of SK_d, SK_pi, and SK_pr (see Section 2.14). For PRFs based
|
|
|
on the HMAC construction, the preferred key size is equal to the
|
|
|
length of the output of the underlying hash function. Other types of
|
|
|
PRFs MUST specify their preferred key size.
|
|
|
|
|
|
Keying material will always be derived as the output of the
|
|
|
negotiated PRF algorithm. Since the amount of keying material needed
|
|
|
may be greater than the size of the output of the PRF, the PRF is
|
|
|
used iteratively. The term "prf+" describes a function that outputs
|
|
|
a pseudorandom stream based on the inputs to a pseudorandom function
|
|
|
called "prf".
|
|
|
|
|
|
In the following, | indicates concatenation. prf+ is defined as:
|
|
|
|
|
|
prf+ (K,S) = T1 | T2 | T3 | T4 | ...
|
|
|
|
|
|
where:
|
|
|
T1 = prf (K, S | 0x01)
|
|
|
T2 = prf (K, T1 | S | 0x02)
|
|
|
T3 = prf (K, T2 | S | 0x03)
|
|
|
T4 = prf (K, T3 | S | 0x04)
|
|
|
...
|
|
|
|
|
|
This continues until all the material needed to compute all required
|
|
|
keys has been output from prf+. The keys are taken from the output
|
|
|
string without regard to boundaries (e.g., if the required keys are a
|
|
|
256-bit Advanced Encryption Standard (AES) key and a 160-bit HMAC
|
|
|
key, and the prf function generates 160 bits, the AES key will come
|
|
|
from T1 and the beginning of T2, while the HMAC key will come from
|
|
|
the rest of T2 and the beginning of T3).
|
|
|
|
|
|
The constant concatenated to the end of each prf function is a single
|
|
|
octet. The prf+ function is not defined beyond 255 times the size of
|
|
|
the prf function output.
|
|
|
|
|
|
2.14. Generating Keying Material for the IKE SA
|
|
|
|
|
|
The shared keys are computed as follows. A quantity called SKEYSEED
|
|
|
is calculated from the nonces exchanged during the IKE_SA_INIT
|
|
|
exchange and the Diffie-Hellman shared secret established during that
|
|
|
exchange. SKEYSEED is used to calculate seven other secrets: SK_d
|
|
|
used for deriving new keys for the Child SAs established with this
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 46]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
IKE SA; SK_ai and SK_ar used as a key to the integrity protection
|
|
|
algorithm for authenticating the component messages of subsequent
|
|
|
exchanges; SK_ei and SK_er used for encrypting (and of course
|
|
|
decrypting) all subsequent exchanges; and SK_pi and SK_pr, which are
|
|
|
used when generating an AUTH payload. The lengths of SK_d, SK_pi,
|
|
|
and SK_pr MUST be the preferred key length of the PRF agreed upon.
|
|
|
|
|
|
SKEYSEED and its derivatives are computed as follows:
|
|
|
|
|
|
SKEYSEED = prf(Ni | Nr, g^ir)
|
|
|
|
|
|
{SK_d | SK_ai | SK_ar | SK_ei | SK_er | SK_pi | SK_pr }
|
|
|
= prf+ (SKEYSEED, Ni | Nr | SPIi | SPIr )
|
|
|
|
|
|
(indicating that the quantities SK_d, SK_ai, SK_ar, SK_ei, SK_er,
|
|
|
SK_pi, and SK_pr are taken in order from the generated bits of the
|
|
|
prf+). g^ir is the shared secret from the ephemeral Diffie-Hellman
|
|
|
exchange. g^ir is represented as a string of octets in big endian
|
|
|
order padded with zeros if necessary to make it the length of the
|
|
|
modulus. Ni and Nr are the nonces, stripped of any headers. For
|
|
|
historical backward-compatibility reasons, there are two PRFs that
|
|
|
are treated specially in this calculation. If the negotiated PRF is
|
|
|
AES-XCBC-PRF-128 [AESXCBCPRF128] or AES-CMAC-PRF-128 [AESCMACPRF128],
|
|
|
only the first 64 bits of Ni and the first 64 bits of Nr are used in
|
|
|
calculating SKEYSEED, but all the bits are used for input to the prf+
|
|
|
function.
|
|
|
|
|
|
The two directions of traffic flow use different keys. The keys used
|
|
|
to protect messages from the original initiator are SK_ai and SK_ei.
|
|
|
The keys used to protect messages in the other direction are SK_ar
|
|
|
and SK_er.
|
|
|
|
|
|
2.15. Authentication of the IKE SA
|
|
|
|
|
|
When not using extensible authentication (see Section 2.16), the
|
|
|
peers are authenticated by having each sign (or MAC using a padded
|
|
|
shared secret as the key, as described later in this section) a block
|
|
|
of data. In these calculations, IDi' and IDr' are the entire ID
|
|
|
payloads excluding the fixed header. For the responder, the octets
|
|
|
to be signed start with the first octet of the first SPI in the
|
|
|
header of the second message (IKE_SA_INIT response) and end with the
|
|
|
last octet of the last payload in the second message. Appended to
|
|
|
this (for the purposes of computing the signature) are the
|
|
|
initiator's nonce Ni (just the value, not the payload containing it),
|
|
|
and the value prf(SK_pr, IDr'). Note that neither the nonce Ni nor
|
|
|
the value prf(SK_pr, IDr') are transmitted. Similarly, the initiator
|
|
|
signs the first message (IKE_SA_INIT request), starting with the
|
|
|
first octet of the first SPI in the header and ending with the last
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 47]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
octet of the last payload. Appended to this (for purposes of
|
|
|
computing the signature) are the responder's nonce Nr, and the value
|
|
|
prf(SK_pi, IDi'). It is critical to the security of the exchange
|
|
|
that each side sign the other side's nonce.
|
|
|
|
|
|
The initiator's signed octets can be described as:
|
|
|
|
|
|
InitiatorSignedOctets = RealMessage1 | NonceRData | MACedIDForI
|
|
|
GenIKEHDR = [ four octets 0 if using port 4500 ] | RealIKEHDR
|
|
|
RealIKEHDR = SPIi | SPIr | . . . | Length
|
|
|
RealMessage1 = RealIKEHDR | RestOfMessage1
|
|
|
NonceRPayload = PayloadHeader | NonceRData
|
|
|
InitiatorIDPayload = PayloadHeader | RestOfInitIDPayload
|
|
|
RestOfInitIDPayload = IDType | RESERVED | InitIDData
|
|
|
MACedIDForI = prf(SK_pi, RestOfInitIDPayload)
|
|
|
|
|
|
The responder's signed octets can be described as:
|
|
|
|
|
|
ResponderSignedOctets = RealMessage2 | NonceIData | MACedIDForR
|
|
|
GenIKEHDR = [ four octets 0 if using port 4500 ] | RealIKEHDR
|
|
|
RealIKEHDR = SPIi | SPIr | . . . | Length
|
|
|
RealMessage2 = RealIKEHDR | RestOfMessage2
|
|
|
NonceIPayload = PayloadHeader | NonceIData
|
|
|
ResponderIDPayload = PayloadHeader | RestOfRespIDPayload
|
|
|
RestOfRespIDPayload = IDType | RESERVED | RespIDData
|
|
|
MACedIDForR = prf(SK_pr, RestOfRespIDPayload)
|
|
|
|
|
|
Note that all of the payloads are included under the signature,
|
|
|
including any payload types not defined in this document. If the
|
|
|
first message of the exchange is sent multiple times (such as with a
|
|
|
responder cookie and/or a different Diffie-Hellman group), it is the
|
|
|
latest version of the message that is signed.
|
|
|
|
|
|
Optionally, messages 3 and 4 MAY include a certificate, or
|
|
|
certificate chain providing evidence that the key used to compute a
|
|
|
digital signature belongs to the name in the ID payload. The
|
|
|
signature or MAC will be computed using algorithms dictated by the
|
|
|
type of key used by the signer, and specified by the Auth Method
|
|
|
field in the Authentication payload. There is no requirement that
|
|
|
the initiator and responder sign with the same cryptographic
|
|
|
algorithms. The choice of cryptographic algorithms depends on the
|
|
|
type of key each has. In particular, the initiator may be using a
|
|
|
shared key while the responder may have a public signature key and
|
|
|
certificate. It will commonly be the case (but it is not required)
|
|
|
that, if a shared secret is used for authentication, the same key is
|
|
|
used in both directions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 48]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
Note that it is a common but typically insecure practice to have a
|
|
|
shared key derived solely from a user-chosen password without
|
|
|
incorporating another source of randomness. This is typically
|
|
|
insecure because user-chosen passwords are unlikely to have
|
|
|
sufficient unpredictability to resist dictionary attacks and these
|
|
|
attacks are not prevented in this authentication method.
|
|
|
(Applications using password-based authentication for bootstrapping
|
|
|
and IKE SA should use the authentication method in Section 2.16,
|
|
|
which is designed to prevent off-line dictionary attacks.) The pre-
|
|
|
shared key needs to contain as much unpredictability as the strongest
|
|
|
key being negotiated. In the case of a pre-shared key, the AUTH
|
|
|
value is computed as:
|
|
|
|
|
|
For the initiator:
|
|
|
AUTH = prf( prf(Shared Secret, "Key Pad for IKEv2"),
|
|
|
<InitiatorSignedOctets>)
|
|
|
For the responder:
|
|
|
AUTH = prf( prf(Shared Secret, "Key Pad for IKEv2"),
|
|
|
<ResponderSignedOctets>)
|
|
|
|
|
|
where the string "Key Pad for IKEv2" is 17 ASCII characters without
|
|
|
null termination. The shared secret can be variable length. The pad
|
|
|
string is added so that if the shared secret is derived from a
|
|
|
password, the IKE implementation need not store the password in
|
|
|
cleartext, but rather can store the value prf(Shared Secret,"Key Pad
|
|
|
for IKEv2"), which could not be used as a password equivalent for
|
|
|
protocols other than IKEv2. As noted above, deriving the shared
|
|
|
secret from a password is not secure. This construction is used
|
|
|
because it is anticipated that people will do it anyway. The
|
|
|
management interface by which the shared secret is provided MUST
|
|
|
accept ASCII strings of at least 64 octets and MUST NOT add a null
|
|
|
terminator before using them as shared secrets. It MUST also accept
|
|
|
a hex encoding of the shared secret. The management interface MAY
|
|
|
accept other encodings if the algorithm for translating the encoding
|
|
|
to a binary string is specified.
|
|
|
|
|
|
There are two types of EAP authentication (described in
|
|
|
Section 2.16), and each type uses different values in the AUTH
|
|
|
computations shown above. If the EAP method is key-generating,
|
|
|
substitute master session key (MSK) for the shared secret in the
|
|
|
computation. For non-key-generating methods, substitute SK_pi and
|
|
|
SK_pr, respectively, for the shared secret in the two AUTH
|
|
|
computations.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 49]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
2.16. Extensible Authentication Protocol Methods
|
|
|
|
|
|
In addition to authentication using public key signatures and shared
|
|
|
secrets, IKE supports authentication using methods defined in RFC
|
|
|
3748 [EAP]. Typically, these methods are asymmetric (designed for a
|
|
|
user authenticating to a server), and they may not be mutual. For
|
|
|
this reason, these protocols are typically used to authenticate the
|
|
|
initiator to the responder and MUST be used in conjunction with a
|
|
|
public-key-signature-based authentication of the responder to the
|
|
|
initiator. These methods are often associated with mechanisms
|
|
|
referred to as "Legacy Authentication" mechanisms.
|
|
|
|
|
|
While this document references [EAP] with the intent that new methods
|
|
|
can be added in the future without updating this specification, some
|
|
|
simpler variations are documented here. [EAP] defines an
|
|
|
authentication protocol requiring a variable number of messages.
|
|
|
Extensible Authentication is implemented in IKE as additional
|
|
|
IKE_AUTH exchanges that MUST be completed in order to initialize the
|
|
|
IKE SA.
|
|
|
|
|
|
An initiator indicates a desire to use EAP by leaving out the AUTH
|
|
|
payload from the first message in the IKE_AUTH exchange. (Note that
|
|
|
the AUTH payload is required for non-EAP authentication, and is thus
|
|
|
not marked as optional in the rest of this document.) By including
|
|
|
an IDi payload but not an AUTH payload, the initiator has declared an
|
|
|
identity but has not proven it. If the responder is willing to use
|
|
|
an EAP method, it will place an Extensible Authentication Protocol
|
|
|
(EAP) payload in the response of the IKE_AUTH exchange and defer
|
|
|
sending SAr2, TSi, and TSr until initiator authentication is complete
|
|
|
in a subsequent IKE_AUTH exchange. In the case of a minimal EAP
|
|
|
method, the initial SA establishment will appear as follows:
|
|
|
|
|
|
Initiator Responder
|
|
|
-------------------------------------------------------------------
|
|
|
HDR, SAi1, KEi, Ni -->
|
|
|
<-- HDR, SAr1, KEr, Nr, [CERTREQ]
|
|
|
HDR, SK {IDi, [CERTREQ,]
|
|
|
[IDr,] SAi2,
|
|
|
TSi, TSr} -->
|
|
|
<-- HDR, SK {IDr, [CERT,] AUTH,
|
|
|
EAP }
|
|
|
HDR, SK {EAP} -->
|
|
|
<-- HDR, SK {EAP (success)}
|
|
|
HDR, SK {AUTH} -->
|
|
|
<-- HDR, SK {AUTH, SAr2, TSi, TSr }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 50]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
As described in Section 2.2, when EAP is used, each pair of IKE SA
|
|
|
initial setup messages will have their message numbers incremented;
|
|
|
the first pair of AUTH messages will have an ID of 1, the second will
|
|
|
be 2, and so on.
|
|
|
|
|
|
For EAP methods that create a shared key as a side effect of
|
|
|
authentication, that shared key MUST be used by both the initiator
|
|
|
and responder to generate AUTH payloads in messages 7 and 8 using the
|
|
|
syntax for shared secrets specified in Section 2.15. The shared key
|
|
|
from EAP is the field from the EAP specification named MSK. This
|
|
|
shared key generated during an IKE exchange MUST NOT be used for any
|
|
|
other purpose.
|
|
|
|
|
|
EAP methods that do not establish a shared key SHOULD NOT be used, as
|
|
|
they are subject to a number of man-in-the-middle attacks [EAPMITM]
|
|
|
if these EAP methods are used in other protocols that do not use a
|
|
|
server-authenticated tunnel. Please see the Security Considerations
|
|
|
section for more details. If EAP methods that do not generate a
|
|
|
shared key are used, the AUTH payloads in messages 7 and 8 MUST be
|
|
|
generated using SK_pi and SK_pr, respectively.
|
|
|
|
|
|
The initiator of an IKE SA using EAP needs to be capable of extending
|
|
|
the initial protocol exchange to at least ten IKE_AUTH exchanges in
|
|
|
the event the responder sends notification messages and/or retries
|
|
|
the authentication prompt. Once the protocol exchange defined by the
|
|
|
chosen EAP authentication method has successfully terminated, the
|
|
|
responder MUST send an EAP payload containing the Success message.
|
|
|
Similarly, if the authentication method has failed, the responder
|
|
|
MUST send an EAP payload containing the Failure message. The
|
|
|
responder MAY at any time terminate the IKE exchange by sending an
|
|
|
EAP payload containing the Failure message.
|
|
|
|
|
|
Following such an extended exchange, the EAP AUTH payloads MUST be
|
|
|
included in the two messages following the one containing the EAP
|
|
|
Success message.
|
|
|
|
|
|
When the initiator authentication uses EAP, it is possible that the
|
|
|
contents of the IDi payload is used only for Authentication,
|
|
|
Authorization, and Accounting (AAA) routing purposes and selecting
|
|
|
which EAP method to use. This value may be different from the
|
|
|
identity authenticated by the EAP method. It is important that
|
|
|
policy lookups and access control decisions use the actual
|
|
|
authenticated identity. Often the EAP server is implemented in a
|
|
|
separate AAA server that communicates with the IKEv2 responder. In
|
|
|
this case, the authenticated identity, if different from that in the
|
|
|
IDi payload, has to be sent from the AAA server to the IKEv2
|
|
|
responder.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 51]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
2.17. Generating Keying Material for Child SAs
|
|
|
|
|
|
A single Child SA is created by the IKE_AUTH exchange, and additional
|
|
|
Child SAs can optionally be created in CREATE_CHILD_SA exchanges.
|
|
|
Keying material for them is generated as follows:
|
|
|
|
|
|
KEYMAT = prf+(SK_d, Ni | Nr)
|
|
|
|
|
|
Where Ni and Nr are the nonces from the IKE_SA_INIT exchange if this
|
|
|
request is the first Child SA created or the fresh Ni and Nr from the
|
|
|
CREATE_CHILD_SA exchange if this is a subsequent creation.
|
|
|
|
|
|
For CREATE_CHILD_SA exchanges including an optional Diffie-Hellman
|
|
|
exchange, the keying material is defined as:
|
|
|
|
|
|
KEYMAT = prf+(SK_d, g^ir (new) | Ni | Nr )
|
|
|
|
|
|
where g^ir (new) is the shared secret from the ephemeral Diffie-
|
|
|
Hellman exchange of this CREATE_CHILD_SA exchange (represented as an
|
|
|
octet string in big endian order padded with zeros in the high-order
|
|
|
bits if necessary to make it the length of the modulus).
|
|
|
|
|
|
A single CHILD_SA negotiation may result in multiple Security
|
|
|
Associations. ESP and AH SAs exist in pairs (one in each direction),
|
|
|
so two SAs are created in a single Child SA negotiation for them.
|
|
|
Furthermore, Child SA negotiation may include some future IPsec
|
|
|
protocol(s) in addition to, or instead of, ESP or AH (for example,
|
|
|
ROHC_INTEG as described in [ROHCV2]). In any case, keying material
|
|
|
for each Child SA MUST be taken from the expanded KEYMAT using the
|
|
|
following rules:
|
|
|
|
|
|
o All keys for SAs carrying data from the initiator to the responder
|
|
|
are taken before SAs going from the responder to the initiator.
|
|
|
|
|
|
o If multiple IPsec protocols are negotiated, keying material for
|
|
|
each Child SA is taken in the order in which the protocol headers
|
|
|
will appear in the encapsulated packet.
|
|
|
|
|
|
o If an IPsec protocol requires multiple keys, the order in which
|
|
|
they are taken from the SA's keying material needs to be described
|
|
|
in the protocol's specification. For ESP and AH, [IPSECARCH]
|
|
|
defines the order, namely: the encryption key (if any) MUST be
|
|
|
taken from the first bits and the integrity key (if any) MUST be
|
|
|
taken from the remaining bits.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 52]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
Each cryptographic algorithm takes a fixed number of bits of keying
|
|
|
material specified as part of the algorithm, or negotiated in SA
|
|
|
payloads (see Section 2.13 for description of key lengths, and
|
|
|
Section 3.3.5 for the definition of the Key Length transform
|
|
|
attribute).
|
|
|
|
|
|
2.18. Rekeying IKE SAs Using a CREATE_CHILD_SA Exchange
|
|
|
|
|
|
The CREATE_CHILD_SA exchange can be used to rekey an existing IKE SA
|
|
|
(see Sections 1.3.2 and 2.8). New initiator and responder SPIs are
|
|
|
supplied in the SPI fields in the Proposal structures inside the
|
|
|
Security Association (SA) payloads (not the SPI fields in the IKE
|
|
|
header). The TS payloads are omitted when rekeying an IKE SA.
|
|
|
SKEYSEED for the new IKE SA is computed using SK_d from the existing
|
|
|
IKE SA as follows:
|
|
|
|
|
|
SKEYSEED = prf(SK_d (old), g^ir (new) | Ni | Nr)
|
|
|
|
|
|
where g^ir (new) is the shared secret from the ephemeral Diffie-
|
|
|
Hellman exchange of this CREATE_CHILD_SA exchange (represented as an
|
|
|
octet string in big endian order padded with zeros if necessary to
|
|
|
make it the length of the modulus) and Ni and Nr are the two nonces
|
|
|
stripped of any headers.
|
|
|
|
|
|
The old and new IKE SA may have selected a different PRF. Because
|
|
|
the rekeying exchange belongs to the old IKE SA, it is the old IKE
|
|
|
SA's PRF that is used to generate SKEYSEED.
|
|
|
|
|
|
The main reason for rekeying the IKE SA is to ensure that the
|
|
|
compromise of old keying material does not provide information about
|
|
|
the current keys, or vice versa. Therefore, implementations MUST
|
|
|
perform a new Diffie-Hellman exchange when rekeying the IKE SA. In
|
|
|
other words, an initiator MUST NOT propose the value "NONE" for the
|
|
|
Diffie-Hellman transform, and a responder MUST NOT accept such a
|
|
|
proposal. This means that a successful exchange rekeying the IKE SA
|
|
|
always includes the KEi/KEr payloads.
|
|
|
|
|
|
The new IKE SA MUST reset its message counters to 0.
|
|
|
|
|
|
SK_d, SK_ai, SK_ar, SK_ei, and SK_er are computed from SKEYSEED as
|
|
|
specified in Section 2.14, using SPIi, SPIr, Ni, and Nr from the new
|
|
|
exchange, and using the new IKE SA's PRF.
|
|
|
|
|
|
2.19. Requesting an Internal Address on a Remote Network
|
|
|
|
|
|
Most commonly occurring in the endpoint-to-security-gateway scenario,
|
|
|
an endpoint may need an IP address in the network protected by the
|
|
|
security gateway and may need to have that address dynamically
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 53]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
assigned. A request for such a temporary address can be included in
|
|
|
any request to create a Child SA (including the implicit request in
|
|
|
message 3) by including a CP payload. Note, however, it is usual to
|
|
|
only assign one IP address during the IKE_AUTH exchange. That
|
|
|
address persists at least until the deletion of the IKE SA.
|
|
|
|
|
|
This function provides address allocation to an IPsec Remote Access
|
|
|
Client (IRAC) trying to tunnel into a network protected by an IPsec
|
|
|
Remote Access Server (IRAS). Since the IKE_AUTH exchange creates an
|
|
|
IKE SA and a Child SA, the IRAC MUST request the IRAS-controlled
|
|
|
address (and optionally other information concerning the protected
|
|
|
network) in the IKE_AUTH exchange. The IRAS may procure an address
|
|
|
for the IRAC from any number of sources such as a DHCP/BOOTP
|
|
|
(Bootstrap Protocol) server or its own address pool.
|
|
|
|
|
|
Initiator Responder
|
|
|
-------------------------------------------------------------------
|
|
|
HDR, SK {IDi, [CERT,]
|
|
|
[CERTREQ,] [IDr,] AUTH,
|
|
|
CP(CFG_REQUEST), SAi2,
|
|
|
TSi, TSr} -->
|
|
|
<-- HDR, SK {IDr, [CERT,] AUTH,
|
|
|
CP(CFG_REPLY), SAr2,
|
|
|
TSi, TSr}
|
|
|
|
|
|
In all cases, the CP payload MUST be inserted before the SA payload.
|
|
|
In variations of the protocol where there are multiple IKE_AUTH
|
|
|
exchanges, the CP payloads MUST be inserted in the messages
|
|
|
containing the SA payloads.
|
|
|
|
|
|
CP(CFG_REQUEST) MUST contain at least an INTERNAL_ADDRESS attribute
|
|
|
(either IPv4 or IPv6) but MAY contain any number of additional
|
|
|
attributes the initiator wants returned in the response.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 54]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
For example, message from initiator to responder:
|
|
|
|
|
|
CP(CFG_REQUEST)=
|
|
|
INTERNAL_ADDRESS()
|
|
|
TSi = (0, 0-65535,0.0.0.0-255.255.255.255)
|
|
|
TSr = (0, 0-65535,0.0.0.0-255.255.255.255)
|
|
|
|
|
|
NOTE: Traffic Selectors contain (protocol, port range, address
|
|
|
range).
|
|
|
|
|
|
Message from responder to initiator:
|
|
|
|
|
|
CP(CFG_REPLY)=
|
|
|
INTERNAL_ADDRESS(192.0.2.202)
|
|
|
INTERNAL_NETMASK(255.255.255.0)
|
|
|
INTERNAL_SUBNET(192.0.2.0/255.255.255.0)
|
|
|
TSi = (0, 0-65535,192.0.2.202-192.0.2.202)
|
|
|
TSr = (0, 0-65535,192.0.2.0-192.0.2.255)
|
|
|
|
|
|
All returned values will be implementation dependent. As can be seen
|
|
|
in the above example, the IRAS MAY also send other attributes that
|
|
|
were not included in CP(CFG_REQUEST) and MAY ignore the non-
|
|
|
mandatory attributes that it does not support.
|
|
|
|
|
|
The responder MUST NOT send a CFG_REPLY without having first received
|
|
|
a CP(CFG_REQUEST) from the initiator, because we do not want the IRAS
|
|
|
to perform an unnecessary configuration lookup if the IRAC cannot
|
|
|
process the REPLY.
|
|
|
|
|
|
In the case where the IRAS's configuration requires that CP be used
|
|
|
for a given identity IDi, but IRAC has failed to send a
|
|
|
CP(CFG_REQUEST), IRAS MUST fail the request, and terminate the Child
|
|
|
SA creation with a FAILED_CP_REQUIRED error. The FAILED_CP_REQUIRED
|
|
|
is not fatal to the IKE SA; it simply causes the Child SA creation to
|
|
|
fail. The initiator can fix this by later starting a new
|
|
|
Configuration payload request. There is no associated data in the
|
|
|
FAILED_CP_REQUIRED error.
|
|
|
|
|
|
2.20. Requesting the Peer's Version
|
|
|
|
|
|
An IKE peer wishing to inquire about the other peer's IKE software
|
|
|
version information MAY use the method below. This is an example of
|
|
|
a configuration request within an INFORMATIONAL exchange, after the
|
|
|
IKE SA and first Child SA have been created.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kaufman, et al. Standards Track [Page 55]
|
|
|
|
|
|
RFC 5996 IKEv2bis September 2010
|
|
|
|
|
|
|
|
|
An IKE implementation MAY decline to give out version information
|
|
|
prior to authentication or even after authentication in case some
|
|
|
implementation is known to have some security weakness. In that
|
|
|
case, it MUST either return an empty string or no CP payload if CP is
|
|
|
not supported.
|
|
|
|
|
|
Initiator Responder
|
|
|
-------------------------------------------------------------------
|
|
|
HDR, SK{CP(CFG_REQUEST)} -->
|
|
|
<-- HDR, SK{CP(CFG_REPLY)}
|
|
|
|
|
|
CP(CFG_REQUEST)=
|
|
|
APPLICATION_VERSION("")
|
|
|
|