| < draft-ietf-ipsec-ikev2-11.txt | draft-ietf-ipsec-ikev2-12.txt > | |||
|---|---|---|---|---|
| INTERNET-DRAFT Charlie Kaufman, Editor | INTERNET-DRAFT Charlie Kaufman, Editor | |||
| draft-ietf-ipsec-ikev2-11.txt | draft-ietf-ipsec-ikev2-12.txt | |||
| Obsoletes: 2407, 2408, 2409 October 9, 2003 | Obsoletes: 2407, 2408, 2409 January 6, 2004 | |||
| Expires: April 2004 | Expires: July 2004 | |||
| Internet Key Exchange (IKEv2) Protocol | Internet Key Exchange (IKEv2) Protocol | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is subject to all provisions | This document is an Internet-Draft and is subject to all provisions | |||
| of Section 10 of RFC2026. Internet-Drafts are working documents of | of Section 10 of RFC2026. Internet-Drafts are working documents of | |||
| the Internet Engineering Task Force (IETF), its areas, and its | the Internet Engineering Task Force (IETF), its areas, and its | |||
| working groups. Note that other groups may also distribute working | working groups. Note that other groups may also distribute working | |||
| documents as Internet-Drafts. | documents as Internet-Drafts. | |||
| skipping to change at page 1, line 35 ¶ | skipping to change at page 1, line 35 ¶ | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html | http://www.ietf.org/shadow.html | |||
| This document is a submission by the IPSEC Working Group of the | This document is a submission by the IPSEC Working Group of the | |||
| Internet Engineering Task Force (IETF). Comments should be submitted | Internet Engineering Task Force (IETF). Comments should be submitted | |||
| to the ipsec@lists.tislabs.com mailing list. | to the ipsec@lists.tislabs.com mailing list. | |||
| Distribution of this memo is unlimited. | Distribution of this memo is unlimited. | |||
| This Internet-Draft expires in April 2004. | This Internet-Draft expires in July 2004. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2003). All Rights Reserved. | Copyright (C) The Internet Society (2004). All Rights Reserved. | |||
| Abstract | Abstract | |||
| This document describes version 2 of the Internet Key Exchange (IKE) | This document describes version 2 of the Internet Key Exchange (IKE) | |||
| protocol. IKE is a component of IPsec used for performing mutual | protocol. IKE is a component of IPsec used for performing mutual | |||
| authentication and establishing and maintaining security | authentication and establishing and maintaining security | |||
| associations. | associations. | |||
| This version of the IKE specification combines the contents of what | This version of the IKE specification combines the contents of what | |||
| were previously separate documents, including ISAKMP (RFC 2408), IKE | were previously separate documents, including ISAKMP (RFC 2408), IKE | |||
| (RFC 2409), the Internet DOI (RFC 2407), NAT Traversal, Legacy | (RFC 2409), the Internet DOI (RFC 2407), NAT Traversal, Legacy | |||
| authentication, and remote address acquisition. | authentication, and remote address acquisition. | |||
| Version 2 of IKE does not interoperate with version 1, but it has | Version 2 of IKE does not interoperate with version 1, but it has | |||
| enough of the header format in common that both versions can | enough of the header format in common that both versions can | |||
| unambiguously run over the same UDP port. | unambiguously run over the same UDP port. | |||
| Table of Contents | Table of Contents | |||
| 1 Introduction | 1 Introduction...............................................3 | |||
| 1.1 Usage Scenarios | 1.1 Usage Scenarios..........................................5 | |||
| 1.2 The Initial Exchange | 1.2 The Initial Exchange.....................................7 | |||
| 1.3 The CREATE_CHILD_SA Exchange | 1.3 The CREATE_CHILD_SA Exchange.............................9 | |||
| 1.4 The INFORMATIONAL Exchange | 1.4 The INFORMATIONAL Exchange..............................10 | |||
| 1.5 Informational Messages outside of an IKE_SA | 1.5 Informational Messages outside of an IKE_SA.............12 | |||
| 2 IKE Protocol Details and Variations | 2 IKE Protocol Details and Variations.......................12 | |||
| 2.1 Use of Retransmission Timers | 2.1 Use of Retransmission Timers............................12 | |||
| 2.2 Use of Sequence Numbers for Message ID | 2.2 Use of Sequence Numbers for Message ID..................13 | |||
| 2.3 Window Size for overlapping requests | 2.3 Window Size for overlapping requests....................13 | |||
| 2.4 State Synchronization and Connection Timeouts | 2.4 State Synchronization and Connection Timeouts...........14 | |||
| 2.5 Version Numbers and Forward Compatibility | 2.5 Version Numbers and Forward Compatibility...............16 | |||
| 2.6 Cookies | 2.6 Cookies.................................................17 | |||
| 2.7 Cryptographic Algorithm Negotiation | 2.7 Cryptographic Algorithm Negotiation.....................19 | |||
| 2.8 Rekeying | 2.8 Rekeying................................................20 | |||
| 2.9 Traffic Selector Negotiation | 2.9 Traffic Selector Negotiation............................22 | |||
| 2.10 Nonces | 2.10 Nonces.................................................24 | |||
| 2.11 Address and Port Agility | 2.11 Address and Port Agility...............................25 | |||
| 2.12 Reuse of Diffie-Hellman Exponentials | 2.12 Reuse of Diffie-Hellman Exponentials...................25 | |||
| 2.13 Generating Keying Material | 2.13 Generating Keying Material.............................26 | |||
| 2.14 Generating Keying Material for the IKE_SA | 2.14 Generating Keying Material for the IKE_SA..............27 | |||
| 2.15 Authentication of the IKE_SA | 2.15 Authentication of the IKE_SA...........................28 | |||
| 2.16 Extended Authentication Protocol Methods | 2.16 Extended Authentication Protocol Methods...............29 | |||
| 2.17 Generating Keying Material for CHILD_SAs | 2.17 Generating Keying Material for CHILD_SAs...............31 | |||
| 2.18 Rekeying IKE_SAs using a CREATE_CHILD_SA exchange | 2.18 Rekeying IKE_SAs using a CREATE_CHILD_SA exchange......32 | |||
| 2.19 Requesting an internal address on a remote network | 2.19 Requesting an internal address on a remote network.....32 | |||
| 2.20 Requesting a Peer's Version | 2.20 Requesting a Peer's Version............................33 | |||
| 2.21 Error Handling | 2.21 Error Handling.........................................34 | |||
| 2.22 IPComp | 2.22 IPComp.................................................35 | |||
| 2.23 NAT Traversal | 2.23 NAT Traversal..........................................36 | |||
| 2.24 ECN (Explicit Congestion Notification) | 2.24 ECN (Explicit Congestion Notification).................38 | |||
| 3 Header and Payload Formats | 3 Header and Payload Formats................................39 | |||
| 3.1 The IKE Header | 3.1 The IKE Header..........................................39 | |||
| 3.2 Generic Payload Header | 3.2 Generic Payload Header..................................42 | |||
| 3.3 Security Association Payload | 3.3 Security Association Payload............................43 | |||
| 3.4 Key Exchange Payload | 3.4 Key Exchange Payload....................................53 | |||
| 3.5 Identification Payloads | 3.5 Identification Payloads.................................54 | |||
| 3.6 Certificate Payload | 3.6 Certificate Payload.....................................56 | |||
| 3.7 Certificate Request Payload | 3.7 Certificate Request Payload.............................58 | |||
| 3.8 Authentication Payload | 3.8 Authentication Payload..................................60 | |||
| 3.9 Nonce Payload | 3.9 Nonce Payload...........................................61 | |||
| 3.10 Notify Payload | 3.10 Notify Payload.........................................61 | |||
| 3.11 Delete Payload | 3.11 Delete Payload.........................................68 | |||
| 3.12 Vendor ID Payload | 3.12 Vendor ID Payload......................................70 | |||
| 3.13 Traffic Selector Payload | 3.13 Traffic Selector Payload...............................71 | |||
| 3.14 Encrypted Payload | 3.14 Encrypted Payload......................................73 | |||
| 3.15 Configuration Payload | 3.15 Configuration Payload..................................75 | |||
| 3.16 Extended Authentication Protocol (EAP) Payload | 3.16 Extended Authentication Protocol (EAP) Payload.........80 | |||
| 4 Conformance Requirements | 4 Conformance Requirements..................................82 | |||
| 5 Security Considerations | 5 Security Considerations...................................84 | |||
| 6 IANA Considerations | 6 IANA Considerations.......................................86 | |||
| 7 Intellectual property rights | 7 Intellectual property rights..............................86 | |||
| 8 Acknowledgements | 8 Acknowledgements..........................................86 | |||
| 9 References | 9 References................................................87 | |||
| 9.1 Normative References | 9.1 Normative References....................................87 | |||
| 9.2 Informative References | 9.2 Informative References..................................88 | |||
| Appendix A: Summary of Changes from IKEv1 | Appendix A: Summary of Changes from IKEv1...................91 | |||
| Appendix B: Diffie-Hellman Groups | Appendix B: Diffie-Hellman Groups...........................93 | |||
| Change History (To be removed from RFC) | Change History (To be removed from RFC).....................95 | |||
| Editor's Address | Editor's Address...........................................102 | |||
| Full Copyright Statement | Full Copyright Statement...................................102 | |||
| Requirements Terminology | Requirements Terminology | |||
| Keywords "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT" and | Keywords "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT" and | |||
| "MAY" that appear in this document are to be interpreted as described | "MAY" that appear in this document are to be interpreted as described | |||
| in [Bra97]. | in [Bra97]. | |||
| 1 Introduction | 1 Introduction | |||
| IP Security (IPsec) provides confidentiality, data integrity, access | IP Security (IPsec) provides confidentiality, data integrity, access | |||
| skipping to change at page 4, line 9 ¶ | skipping to change at page 4, line 9 ¶ | |||
| well. Therefore a protocol to establish this state dynamically is | well. Therefore a protocol to establish this state dynamically is | |||
| needed. This memo describes such a protocol-- the Internet Key | needed. This memo describes such a protocol-- the Internet Key | |||
| Exchange (IKE). This is version 2 of IKE. Version 1 of IKE was | Exchange (IKE). This is version 2 of IKE. Version 1 of IKE was | |||
| defined in RFCs 2407, 2408, and 2409. This single document is | defined in RFCs 2407, 2408, and 2409. This single document is | |||
| intended to replace all three of those RFCs. | intended to replace all three of those RFCs. | |||
| IKE performs mutual authentication between two parties and | IKE performs mutual authentication between two parties and | |||
| establishes an IKE security association that includes shared secret | establishes an IKE security association that includes shared secret | |||
| information that can be used to efficiently establish SAs for ESP | information that can be used to efficiently establish SAs for ESP | |||
| [RFC2406] and/or AH [RFC2402] and a set of cryptographic algorithms | [RFC2406] and/or AH [RFC2402] and a set of cryptographic algorithms | |||
| to be used to protect the SAs. In this document, the term "suite" or | to be used by the SAs to protect the traffic that they carry. In | |||
| "cryptographic suite" refers to a complete set of algorithms used to | this document, the term "suite" or "cryptographic suite" refers to a | |||
| protect an SA. An initiator proposes one or more suites by listing | complete set of algorithms used to protect an SA. An initiator | |||
| supported algorithms that can be combined into suites in a mix and | proposes one or more suites by listing supported algorithms that can | |||
| match fashion. IKE can also negotiate use of IPComp [IPCOMP] in | be combined into suites in a mix and match fashion. IKE can also | |||
| connection with an ESP and/or AH SA. We call the IKE SA an "IKE_SA". | negotiate use of IPComp [IPCOMP] in connection with an ESP and/or AH | |||
| The SAs for ESP and/or AH that get set up through that IKE_SA we call | SA. We call the IKE SA an "IKE_SA". The SAs for ESP and/or AH that | |||
| "CHILD_SA"s. | get set up through that IKE_SA we call "CHILD_SA"s. | |||
| All IKE communications consist of pairs of messages: a request and a | All IKE communications consist of pairs of messages: a request and a | |||
| response. The pair is called an "exchange". We call the first | response. The pair is called an "exchange". We call the first | |||
| messages establishing an IKE_SA IKE_SA_INIT and IKE_AUTH exchanges | messages establishing an IKE_SA IKE_SA_INIT and IKE_AUTH exchanges | |||
| and subsequent IKE exchanges CREATE_CHILD_SA or INFORMATIONAL | and subsequent IKE exchanges CREATE_CHILD_SA or INFORMATIONAL | |||
| exchanges. In the common case, there is a single IKE_SA_INIT exchange | 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 | and a single IKE_AUTH exchange (a total of four messages) to | |||
| establish the IKE_SA and the first CHILD_SA. In exceptional cases, | 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, | 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 | all IKE_SA_INIT exchanges MUST complete before any other exchange | |||
| skipping to change at page 5, line 31 ¶ | skipping to change at page 5, line 31 ¶ | |||
| Protected !Tunnel ! Tunnel !Tunnel ! Protected | Protected !Tunnel ! Tunnel !Tunnel ! Protected | |||
| Subnet <-->!Endpoint !<---------->!Endpoint !<--> Subnet | Subnet <-->!Endpoint !<---------->!Endpoint !<--> Subnet | |||
| ! ! ! ! | ! ! ! ! | |||
| +-+-+-+-+-+ +-+-+-+-+-+ | +-+-+-+-+-+ +-+-+-+-+-+ | |||
| Figure 1: Security Gateway to Security Gateway Tunnel | Figure 1: Security Gateway to Security Gateway Tunnel | |||
| In this scenario, neither endpoint of the IP connection implements | In this scenario, neither endpoint of the IP connection implements | |||
| IPsec, but network nodes between them protect traffic for part of the | IPsec, but network nodes between them protect traffic for part of the | |||
| way. Protection is transparent to the endpoints, and depends on | way. Protection is transparent to the endpoints, and depends on | |||
| ordinary routing sending packets through the tunnel endpoints for | ordinary routing to send packets through the tunnel endpoints for | |||
| processing. Each endpoint would announce the set of addresses | processing. Each endpoint would announce the set of addresses | |||
| "behind" it, and packets would be sent in Tunnel Mode where the inner | "behind" it, and packets would be sent in Tunnel Mode where the inner | |||
| IP header would contain the IP addresses of the actual endpoints. | IP header would contain the IP addresses of the actual endpoints. | |||
| 1.1.2 Endpoint to Endpoint Transport | 1.1.2 Endpoint to Endpoint Transport | |||
| +-+-+-+-+-+ +-+-+-+-+-+ | +-+-+-+-+-+ +-+-+-+-+-+ | |||
| ! ! IPsec ! ! | ! ! IPsec ! ! | |||
| !Protected! Tunnel !Protected! | !Protected! Tunnel !Protected! | |||
| !Endpoint !<---------------------------------------->!Endpoint ! | !Endpoint !<---------------------------------------->!Endpoint ! | |||
| skipping to change at page 6, line 5 ¶ | skipping to change at page 6, line 5 ¶ | |||
| +-+-+-+-+-+ +-+-+-+-+-+ | +-+-+-+-+-+ +-+-+-+-+-+ | |||
| Figure 2: Endpoint to Endpoint | Figure 2: Endpoint to Endpoint | |||
| In this scenario, both endpoints of the IP connection implement | In this scenario, both endpoints of the IP connection implement | |||
| IPsec. These endpoints may implement application layer access | IPsec. These endpoints may implement application layer access | |||
| controls based on the authenticated identities of the participants. | controls based on the authenticated identities of the participants. | |||
| Transport mode will commonly be used with no inner IP header. If | Transport mode will commonly be used with no inner IP header. If | |||
| there is an inner IP header, the inner addresses will be the same as | there is an inner IP header, the inner addresses will be the same as | |||
| the outer addresses. A single pair of addresses will be negotiated | the outer addresses. A single pair of addresses will be negotiated | |||
| for packets to be sent over this SA. | for packets to be protected by this SA. | |||
| It is possible in this scenario that one or both of the protected | It is possible in this scenario that one or both of the protected | |||
| endpoints will be behind a network address translation (NAT) node, in | endpoints will be behind a network address translation (NAT) node, in | |||
| which case the tunnelled packets will have to be UDP encapsulated so | which case the tunnelled packets will have to be UDP encapsulated so | |||
| that port numbers in the UDP headers can be used to identify | that port numbers in the UDP headers can be used to identify | |||
| individual endpoints "behind" the NAT. | individual endpoints "behind" the NAT (see section 2.23). | |||
| 1.1.3 Endpoint to Security Gateway Transport | 1.1.3 Endpoint to Security Gateway Transport | |||
| +-+-+-+-+-+ +-+-+-+-+-+ | +-+-+-+-+-+ +-+-+-+-+-+ | |||
| ! ! IPsec ! ! Protected | ! ! IPsec ! ! Protected | |||
| !Protected! Tunnel !Tunnel ! Subnet | !Protected! Tunnel !Tunnel ! Subnet | |||
| !Endpoint !<------------------------>!Endpoint !<--- and/or | !Endpoint !<------------------------>!Endpoint !<--- and/or | |||
| ! ! ! ! Internet | ! ! ! ! Internet | |||
| +-+-+-+-+-+ +-+-+-+-+-+ | +-+-+-+-+-+ +-+-+-+-+-+ | |||
| skipping to change at page 7, line 44 ¶ | skipping to change at page 7, line 44 ¶ | |||
| protected with keys established through the IKE_SA_INIT exchange, so | protected with keys established through the IKE_SA_INIT exchange, so | |||
| the identities are hidden from eavesdroppers and all fields in all | the identities are hidden from eavesdroppers and all fields in all | |||
| the messages are authenticated. | the messages are authenticated. | |||
| In the following description, the payloads contained in the message | In the following description, the payloads contained in the message | |||
| are indicated by names such as SA. The details of the contents of | are indicated by names such as SA. The details of the contents of | |||
| each payload are described later. Payloads which may optionally | each payload are described later. Payloads which may optionally | |||
| appear will be shown in brackets, such as [CERTREQ], would indicate | appear will be shown in brackets, such as [CERTREQ], would indicate | |||
| that optionally a certificate request payload can be included. | that optionally a certificate request payload can be included. | |||
| To simplify the descriptions that follow by allowing the use of | ||||
| gender specific personal pronouns, the initiator is assumed to be | ||||
| named "Alice" and the responder "Bob". | ||||
| The initial exchanges are as follows: | The initial exchanges are as follows: | |||
| Initiator Responder | Initiator Responder | |||
| ----------- ----------- | ----------- ----------- | |||
| HDR, SAi1, KEi, Ni --> | HDR, SAi1, KEi, Ni --> | |||
| HDR contains the SPIs, version numbers, and flags of various sorts. | HDR contains the SPIs, version numbers, and flags of various sorts. | |||
| The SAi1 payload states the cryptographic algorithms the Initiator | The SAi1 payload states the cryptographic algorithms the Initiator | |||
| supports for the IKE_SA. The KE payload sends the Initiator's | supports for the IKE_SA. The KE payload sends the Initiator's | |||
| Diffie-Hellman value. Ni is the Initiator's nonce. | Diffie-Hellman value. Ni is the Initiator's nonce. | |||
| skipping to change at page 8, line 32 ¶ | skipping to change at page 8, line 36 ¶ | |||
| another quantity SK_d is derived and used for derivation of further | another quantity SK_d is derived and used for derivation of further | |||
| keying material for CHILD_SAs. The notation SK { ... } indicates | keying material for CHILD_SAs. The notation SK { ... } indicates | |||
| that these payloads are encrypted and integrity protected using that | that these payloads are encrypted and integrity protected using that | |||
| direction's SK_e and SK_a. | direction's SK_e and SK_a. | |||
| HDR, SK {IDi, [CERT,] [CERTREQ,] [IDr,] | HDR, SK {IDi, [CERT,] [CERTREQ,] [IDr,] | |||
| AUTH, SAi2, TSi, TSr} --> | AUTH, SAi2, TSi, TSr} --> | |||
| The Initiator asserts her identity with the IDi payload, proves | The Initiator asserts her identity with the IDi payload, proves | |||
| knowledge of the secret corresponding to IDi and integrity protects | knowledge of the secret corresponding to IDi and integrity protects | |||
| the contents of the first two messages using the AUTH payload (see | the contents of the first message using the AUTH payload (see section | |||
| section 2.15). She might also send her certificate(s) in CERT | 2.15). She might also send her certificate(s) in CERT payload(s) and | |||
| payload(s) and a list of her trust anchors in CERTREQ payload(s). If | a list of her trust anchors in CERTREQ payload(s). If any CERT | |||
| any CERT payloads are included, the first certificate provided MUST | payloads are included, the first certificate provided MUST contain | |||
| contain the public key used to verify the AUTH field. The optional | the public key used to verify the AUTH field. The optional payload | |||
| payload IDr enables Alice to specify which of Bob's identities she | IDr enables Alice to specify which of Bob's identities she wants to | |||
| wants to talk to. This is useful when Bob is hosting multiple | talk to. This is useful when Bob is hosting multiple identities at | |||
| identities at the same IP address. She begins negotiation of a | the same IP address. She begins negotiation of a CHILD_SA using the | |||
| CHILD_SA using the SAi2 payload. The final fields (starting with | SAi2 payload. The final fields (starting with SAi2) are described in | |||
| SAi2) are described in the description of the CREATE_CHILD_SA | the description of the CREATE_CHILD_SA exchange. | |||
| exchange. | ||||
| <-- HDR, SK {IDr, [CERT,] AUTH, | <-- HDR, SK {IDr, [CERT,] AUTH, | |||
| SAr2, TSi, TSr} | SAr2, TSi, TSr} | |||
| The Responder asserts his identity with the IDr payload, optionally | The Responder asserts his identity with the IDr payload, optionally | |||
| sends one or more certificates (again with the certificate containing | sends one or more certificates (again with the certificate containing | |||
| the public key used to verify AUTH listed first), authenticates his | the public key used to verify AUTH listed first), authenticates his | |||
| identity with the AUTH payload, and completes negotiation of a | identity and protects the integrity of the second message with the | |||
| CHILD_SA with the additional fields described below in the | AUTH payload, and completes negotiation of a CHILD_SA with the | |||
| CREATE_CHILD_SA exchange. | additional fields described below in the CREATE_CHILD_SA exchange. | |||
| The recipients of messages 3 and 4 MUST verify that all signatures | The recipients of messages 3 and 4 MUST verify that all signatures | |||
| and MACs are computed correctly and that the names in the ID payloads | and MACs are computed correctly and that the names in the ID payloads | |||
| correspond to the keys used to generate the AUTH payload. | correspond to the keys used to generate the AUTH payload. | |||
| 1.3 The CREATE_CHILD_SA Exchange | 1.3 The CREATE_CHILD_SA Exchange | |||
| This exchange consists of a single request/response pair, and was | This exchange consists of a single request/response pair, and was | |||
| referred to as a phase 2 exchange in IKEv1. It MAY be initiated by | 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. | either end of the IKE_SA after the initial exchanges are completed. | |||
| All messages following the initial exchange are cryptographically | All messages following the initial exchange are cryptographically | |||
| protected using the cryptographic algorithms and keys negotiated in | protected using the cryptographic algorithms and keys negotiated in | |||
| the first two messages of the IKE exchange using a syntax described | the first two messages of the IKE exchange. These subsequent | |||
| in section 3.14. | messages use the syntax of the Encrypted Payload described in section | |||
| 3.14. | ||||
| Either endpoint may initiate a CREATE_CHILD_SA exchange, so in this | Either endpoint may initiate a CREATE_CHILD_SA exchange, so in this | |||
| section the term Initiator refers to the endpoint initiating this | section the term initiator refers to the endpoint initiating this | |||
| exchange. | exchange. The term "Alice" will always refer to the initiator of the | |||
| outer IKE_SA. | ||||
| A CHILD_SA is created by sending a CREATE_CHILD_SA request. The | A CHILD_SA is created by sending a CREATE_CHILD_SA request. The | |||
| CREATE_CHILD_SA request MAY optionally contain a KE payload for an | CREATE_CHILD_SA request MAY optionally contain a KE payload for an | |||
| additional Diffie-Hellman exchange to enable stronger guarantees of | additional Diffie-Hellman exchange to enable stronger guarantees of | |||
| forward secrecy for the CHILD_SA. The keying material for the | forward secrecy for the CHILD_SA. The keying material for the | |||
| CHILD_SA is a function of SK_d established during the establishment | CHILD_SA is a function of SK_d established during the establishment | |||
| of the IKE_SA, the nonces exchanged during the CREATE_CHILD_SA | of the IKE_SA, the nonces exchanged during the CREATE_CHILD_SA | |||
| exchange, and the Diffie-Hellman value (if KE payloads are included | exchange, and the Diffie-Hellman value (if KE payloads are included | |||
| in the CREATE_CHILD_SA exchange). | in the CREATE_CHILD_SA exchange). | |||
| skipping to change at page 9, line 45 ¶ | skipping to change at page 9, line 50 ¶ | |||
| payload and nonce MUST NOT be sent. The nonces from the initial | payload and nonce MUST NOT be sent. The nonces from the initial | |||
| exchange are used in computing the keys for the CHILD_SA. | exchange are used in computing the keys for the CHILD_SA. | |||
| The CREATE_CHILD_SA request contains: | The CREATE_CHILD_SA request contains: | |||
| Initiator Responder | Initiator Responder | |||
| ----------- ----------- | ----------- ----------- | |||
| HDR, SK {[N], SA, Ni, [KEi], | HDR, SK {[N], SA, Ni, [KEi], | |||
| [TSi, TSr]} --> | [TSi, TSr]} --> | |||
| The Initiator sends SA offer(s) in the SA payload, a nonce in the Ni | 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 | payload, optionally a Diffie-Hellman value in the KEi payload, and | |||
| the proposed traffic selectors in the TSi and TSr payloads. If this | the proposed traffic selectors in the TSi and TSr payloads. If this | |||
| CREATE_CHILD_SA exchange is rekeying an existing SA other than the | CREATE_CHILD_SA exchange is rekeying an existing SA other than the | |||
| IKE_SA, the leading N payload of type REKEY_SA MUST identify the SA | IKE_SA, the leading N payload of type REKEY_SA MUST identify the SA | |||
| being rekeyed. If this CREATE_CHILD_SA exchange is not rekeying and | being rekeyed. If this CREATE_CHILD_SA exchange is not rekeying and | |||
| existing SA, the N payload MUST be omitted. If the SA offers include | existing SA, the N payload MUST be omitted. If the SA offers include | |||
| different Diffie-Hellman groups, KEi MUST be an element of the group | different Diffie-Hellman groups, KEi MUST be an element of the group | |||
| the Initiator expects the responder to accept. If she guesses wrong, | the initiator expects the responder to accept. If it guesses wrong, | |||
| the CREATE_CHILD_SA exchange will fail and she will have to retry | the CREATE_CHILD_SA exchange will fail and it will have to retry with | |||
| with a different KEi. | a different KEi. | |||
| The message following the header is encrypted and the message | The message following the header is encrypted and the message | |||
| including the header is integrity protected using the cryptographic | including the header is integrity protected using the cryptographic | |||
| algorithms negotiated for the IKE_SA. | algorithms negotiated for the IKE_SA. | |||
| The CREATE_CHILD_SA response contains: | The CREATE_CHILD_SA response contains: | |||
| <-- HDR, SK {SA, Nr, [KEr], | <-- HDR, SK {SA, Nr, [KEr], | |||
| [TSi, TSr]} | [TSi, TSr]} | |||
| The Responder replies (using the same Message ID to respond) with the | 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 | 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 | KEr payload if KEi was included in the request and the selected | |||
| cryptographic suite includes that group. If the responder chooses a | cryptographic suite includes that group. If the responder chooses a | |||
| cryptographic suite with a different group, it MUST reject the | cryptographic suite with a different group, it MUST reject the | |||
| request. The initiator SHOULD repeat the request, but now with a KEi | request. The initiator SHOULD repeat the request, but now with a KEi | |||
| payload from the group the responder selected. | payload from the group the responder selected. | |||
| The traffic selectors for traffic to be sent on that SA are specified | The traffic selectors for traffic to be sent on that SA are specified | |||
| in the TS payloads, which may be a subset of what the Initiator of | in the TS payloads, which may be a subset of what the initiator of | |||
| the CHILD_SA proposed. Traffic selectors are omitted if this | the CHILD_SA proposed. Traffic selectors are omitted if this | |||
| CREATE_CHILD_SA request is being used to change the key of the | CREATE_CHILD_SA request is being used to change the key of the | |||
| IKE_SA. | IKE_SA. | |||
| 1.4 The INFORMATIONAL Exchange | 1.4 The INFORMATIONAL Exchange | |||
| At various points during the operation of an IKE_SA, peers may desire | At various points during the operation of an IKE_SA, peers may desire | |||
| to convey control messages to each other regarding errors or | to convey control messages to each other regarding errors or | |||
| notifications of certain events. To accomplish this IKE defines an | notifications of certain events. To accomplish this IKE defines an | |||
| INFORMATIONAL exchange. INFORMATIONAL exchanges MAY ONLY occur after | INFORMATIONAL exchange. INFORMATIONAL exchanges MAY ONLY occur after | |||
| skipping to change at page 16, line 38 ¶ | skipping to change at page 16, line 39 ¶ | |||
| supports. If an endpoint supports major version n, and major version | 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 | 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 | message with a major version that it supports, it MUST respond with | |||
| that version number. In order to prevent two nodes from being tricked | that version number. In order to prevent two nodes from being tricked | |||
| into corresponding with a lower major version number than the maximum | into corresponding with a lower major version number than the maximum | |||
| that they both support, IKE has a flag that indicates that the node | that they both support, IKE has a flag that indicates that the node | |||
| is capable of speaking a higher major version number. | is capable of speaking a higher major version number. | |||
| Thus the major version number in the IKE header indicates the version | Thus the major version number in the IKE header indicates the version | |||
| number of the message, not the highest version number that the | number of the message, not the highest version number that the | |||
| transmitter supports. If A is capable of speaking versions n, n+1, | transmitter supports. If Alice is capable of speaking versions n, | |||
| and n+2, and B is capable of speaking versions n and n+1, then they | n+1, and n+2, and Bob is capable of speaking versions n and n+1, then | |||
| will negotiate speaking n+1, where A will set the flag indicating | they will negotiate speaking n+1, where Alice will set the flag | |||
| ability to speak a higher version. If they mistakenly (perhaps | indicating ability to speak a higher version. If they mistakenly | |||
| through an active attacker sending error messages) negotiate to | (perhaps through an active attacker sending error messages) negotiate | |||
| version n, then both will notice that the other side can support a | to version n, then both will notice that the other side can support a | |||
| higher version number, and they MUST break the connection and | higher version number, and they MUST break the connection and | |||
| reconnect using version n+1. | reconnect using version n+1. | |||
| Note that IKEv1 does not follow these rules, because there is no way | 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 | 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 | 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 | speaking v1. When a v2-capable node negotiates down to v1, it SHOULD | |||
| note that fact in its logs. | note that fact in its logs. | |||
| Also for forward compatibility, all fields marked RESERVED MUST be | Also for forward compatibility, all fields marked RESERVED MUST be | |||
| skipping to change at page 17, line 34 ¶ | skipping to change at page 17, line 35 ¶ | |||
| While new payload types may be added in the future and may appear | While new payload types may be added in the future and may appear | |||
| interleaved with the fields defined in this specification, | interleaved with the fields defined in this specification, | |||
| implementations MUST send the payloads defined in this specification | implementations MUST send the payloads defined in this specification | |||
| in the order shown in the figures in section 2 and implementations | in the order shown in the figures in section 2 and implementations | |||
| SHOULD reject as invalid a message with those payloads in any other | SHOULD reject as invalid a message with those payloads in any other | |||
| order. | order. | |||
| 2.6 Cookies | 2.6 Cookies | |||
| The term "cookies" originates with Karn and Simpson [RFC 2522] in | The term "cookies" originates with Karn and Simpson [RFC 2522] in | |||
| Photuris, an early proposal for key management with IPsec. It has | Photuris, an early proposal for key management with IPsec, and it has | |||
| persisted because the IETF has never rejected a proposal involving | persisted. The ISAKMP fixed message header includes two eight octet | |||
| cookies. The ISAKMP fixed message header includes two eight octet | ||||
| fields titled "cookies", and that syntax is used by both IKEv1 and | fields titled "cookies", and that syntax is used by both IKEv1 and | |||
| IKEv2 though in IKEv2 they are referred to as the IKE SPI and there | IKEv2 though in IKEv2 they are referred to as the IKE SPI and there | |||
| is a new separate field in a Notify payload holding the cookie. The | is a new separate field in a Notify payload holding the cookie. The | |||
| initial two eight octet fields in the header are used as a connection | initial two eight octet fields in the header are used as a connection | |||
| identifier at the beginning of IKE packets. Each endpoint chooses one | identifier at the beginning of IKE packets. Each endpoint chooses one | |||
| of the two SPIs and SHOULD choose them so as to be unique identifiers | of the two SPIs and SHOULD choose them so as to be unique identifiers | |||
| of an IKE_SA. An SPI value of zero is special and indicates that the | of an IKE_SA. An SPI value of zero is special and indicates that the | |||
| remote SPI value is not yet known by the sender. | remote SPI value is not yet known by the sender. | |||
| Unlike ESP and AH where only the recipient's SPI appears in the | Unlike ESP and AH where only the recipient's SPI appears in the | |||
| skipping to change at page 19, line 13 ¶ | skipping to change at page 19, line 15 ¶ | |||
| arrives. The exact algorithms and syntax they use to generate | arrives. The exact algorithms and syntax they use to generate | |||
| cookies does not affect interoperability and hence is not specified | cookies does not affect interoperability and hence is not specified | |||
| here. The following is an example of how an endpoint could use | here. The following is an example of how an endpoint could use | |||
| cookies to implement limited DOS protection. | cookies to implement limited DOS protection. | |||
| A good way to do this is to set the responder cookie to be: | A good way to do this is to set the responder cookie to be: | |||
| Cookie = <VersionIDofSecret> | Hash(Ni | IPi | SPIi | <secret>) | Cookie = <VersionIDofSecret> | Hash(Ni | IPi | SPIi | <secret>) | |||
| where <secret> is a randomly generated secret known only to the | where <secret> is a randomly generated secret known only to the | |||
| responder and periodically changed. <VersionIDofSecret> should be | responder and periodically changed and | indicates concatenation. | |||
| changed whenever <secret> is regenerated. The cookie can be | <VersionIDofSecret> should be changed whenever <secret> is | |||
| recomputed when the IKE_SA_INIT arrives the second time and compared | regenerated. The cookie can be recomputed when the IKE_SA_INIT | |||
| to the cookie in the received message. If it matches, the responder | arrives the second time and compared to the cookie in the received | |||
| knows that SPIr was generated since the last change to <secret> and | message. If it matches, the responder knows that SPIr was generated | |||
| that IPi must be the same as the source address it saw the first | since the last change to <secret> and that IPi must be the same as | |||
| time. Incorporating SPIi into the calculation assures that if | the source address it saw the first time. Incorporating SPIi into the | |||
| multiple IKE_SAs are being set up in parallel they will all get | calculation assures that if multiple IKE_SAs are being set up in | |||
| different cookies (assuming the initiator chooses unique SPIi's). | parallel they will all get different cookies (assuming the initiator | |||
| Incorporating Ni into the hash assures that an attacker who sees only | chooses unique SPIi's). Incorporating Ni into the hash assures that | |||
| message 2 can't successfully forge a message 3. | an attacker who sees only message 2 can't successfully forge a | |||
| message 3. | ||||
| If a new value for <secret> is chosen while there are connections in | 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 | the process of being initialized, an IKE_SA_INIT might be returned | |||
| with other than the current <VersionIDofSecret>. The responder in | with other than the current <VersionIDofSecret>. The responder in | |||
| that case MAY reject the message by sending another response with a | 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 | new cookie or it MAY keep the old value of <secret> around for a | |||
| short time and accept cookies computed from either one. The | short time and accept cookies computed from either one. The | |||
| responder SHOULD NOT accept cookies indefinitely after <secret> is | responder SHOULD NOT accept cookies indefinitely after <secret> is | |||
| changed, since that would defeat part of the denial of service | changed, since that would defeat part of the denial of service | |||
| protection. The responder SHOULD change the value of <secret> | protection. The responder SHOULD change the value of <secret> | |||
| frequently, especially if under attack. | frequently, especially if under attack. | |||
| 2.7 Cryptographic Algorithm Negotiation | 2.7 Cryptographic Algorithm Negotiation | |||
| The payload type known as "SA" indicates a proposal for a set of | The payload type known as "SA" indicates a proposal for a set of | |||
| choices of protocols (IKE, ESP, and/or AH) for the SA as well as | choices of IPsec protocols (IKE, ESP, and/or AH) for the SA as well | |||
| cryptographic algorithms associated with each protocol. | as cryptographic algorithms associated with each protocol. | |||
| An SA consists of one or more proposals. Each proposal includes one | An SA consists of one or more proposals. Each proposal includes one | |||
| or more protocols (usually one). Each protocol contains one or more | or more protocols (usually one). Each protocol contains one or more | |||
| transforms - each specifying a cryptographic algorithm. Each | transforms - each specifying a cryptographic algorithm. Each | |||
| transform contains zero or more attributes (attributes are only | transform contains zero or more attributes (attributes are only | |||
| needed if the transform identifier does not completely specify the | needed if the transform identifier does not completely specify the | |||
| cryptographic algorithm). | cryptographic algorithm). | |||
| This hierarchical structure was designed to be able to efficiently | This hierarchical structure was designed to efficiently encode | |||
| encode proposals for cryptographic suites when the number of | proposals for cryptographic suites when the number of supported | |||
| supported suites is large because multiple values are acceptable for | suites is large because multiple values are acceptable for multiple | |||
| multiple transforms. The responder MUST choose a single suite, which | transforms. The responder MUST choose a single suite, which MAY be | |||
| MAY be any subset of the SA proposal following the rules below: | any subset of the SA proposal following the rules below: | |||
| Each proposal contains one or more protocols. If a proposal is | Each proposal contains one or more protocols. If a proposal is | |||
| accepted, the SA response MUST contain the same protocols in the | accepted, the SA response MUST contain the same protocols in the | |||
| same order as the proposal. At most one proposal MAY be accepted. | same order as the proposal. The responder MUST accept a single | |||
| (Example: if a single proposal contains ESP and AH and that | proposal or reject them all and return an error. (Example: if a | |||
| proposal is accepted, both ESP and AH MUST be accepted. If ESP and | single proposal contains ESP and AH and that proposal is accepted, | |||
| AH are included in separate proposals, only one of them MAY be | both ESP and AH MUST be accepted. If ESP and AH are included in | |||
| accepted). | separate proposals, the responder MUST accept only one of them). | |||
| Each protocol in a proposal contains one or more transforms. Each | Each IPsec protocol proposal contains one or more transforms. Each | |||
| transform contains a transform type. The accepted cryptographic | transform contains a transform type. The accepted cryptographic | |||
| suite MUST contain exactly one transform of each type included in | suite MUST contain exactly one transform of each type included in | |||
| the proposal. For example: if an ESP proposal includes transforms | the proposal. For example: if an ESP proposal includes transforms | |||
| ENCR_3DES, ENCR_AES w/keysize 128, ENCR_AES w/keysize 256, | ENCR_3DES, ENCR_AES w/keysize 128, ENCR_AES w/keysize 256, | |||
| AUTH_HMAC_MD5, and AUTH_HMAC_SHA, the accepted suite MUST contain | AUTH_HMAC_MD5, and AUTH_HMAC_SHA, the accepted suite MUST contain | |||
| one of the ENCR_ transforms and one of the AUTH_ transforms. Thus | one of the ENCR_ transforms and one of the AUTH_ transforms. Thus | |||
| six combinations are acceptable). | six combinations are acceptable. | |||
| Since Alice sends her Diffie-Hellman value in the IKE_SA_INIT, she | Since Alice sends her Diffie-Hellman value in the IKE_SA_INIT, she | |||
| must guess at the Diffie-Hellman group that Bob will select from her | must guess at the Diffie-Hellman group that Bob will select from her | |||
| list of supported groups. If she guesses wrong, Bob will respond | list of supported groups. If she guesses wrong, Bob will respond | |||
| with a Notify payload of type INVALID_KE_PAYLOAD indicating the | with a Notify payload of type INVALID_KE_PAYLOAD indicating the | |||
| selected group. In this case, Alice MUST retry the IKE_SA_INIT with | selected group. In this case, Alice MUST retry the IKE_SA_INIT with | |||
| the corrected Diffie-Hellman group. Alice MUST again propose her full | the corrected Diffie-Hellman group. Alice MUST again propose her full | |||
| set of acceptable cryptographic suites because the rejection message | set of acceptable cryptographic suites because the rejection message | |||
| was unauthenticated and otherwise an active attacker could trick | was unauthenticated and otherwise an active attacker could trick | |||
| Alice and Bob into negotiating a weaker suite than a stronger one | Alice and Bob into negotiating a weaker suite than a stronger one | |||
| that they both prefer. | that they both prefer. | |||
| 2.8 Rekeying | 2.8 Rekeying | |||
| IKE, ESP, and AH security associations use secret keys which SHOULD | IKE, ESP, and AH security associations use secret keys which SHOULD | |||
| only be used for a limited amount of time and to protect a limited | only be used for a limited amount of time and to protect a limited | |||
| amount of data. This limits the lifetime of the entire security | amount of data. This limits the lifetime of the entire security | |||
| association. When the lifetime of a security association expires the | association. When the lifetime of a security association expires the | |||
| security association must not be used. If there is demand, new | security association MUST NOT be used. If there is demand, new | |||
| security associations MAY be established. Reestablishment of | security associations MAY be established. Reestablishment of | |||
| security associations to take the place of ones which expire is | security associations to take the place of ones which expire is | |||
| referred to as "rekeying". | referred to as "rekeying". | |||
| To allow for minimal IPsec implementations, the ability to rekey SAs | To allow for minimal IPsec implementations, the ability to rekey SAs | |||
| without restarting the entire IKE_SA is optional. An implementation | without restarting the entire IKE_SA is optional. An implementation | |||
| MAY refuse all CREATE_CHILD_SA requests within an IKE_SA. If an SA | 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 | has expired or is about to expire and rekeying attempts using the | |||
| mechanisms described here fail, an implementation MUST close the | mechanisms described here fail, an implementation MUST close the | |||
| IKE_SA and any associated CHILD_SAs and then MAY start new ones. | IKE_SA and any associated CHILD_SAs and then MAY start new ones. | |||
| skipping to change at page 22, line 17 ¶ | skipping to change at page 22, line 20 ¶ | |||
| between those endpoints, so the IKEv1 rekeying heuristic of deleting | between those endpoints, so the IKEv1 rekeying heuristic of deleting | |||
| SAs on the basis of duplicate traffic selectors SHOULD NOT be used. | SAs on the basis of duplicate traffic selectors SHOULD NOT be used. | |||
| The node that initiated the surviving rekeyed SA SHOULD delete the | The node that initiated the surviving rekeyed SA SHOULD delete the | |||
| replaced SA after the new one is established. | replaced SA after the new one is established. | |||
| There are timing windows - particularly in the presence of lost | There are timing windows - particularly in the presence of lost | |||
| packets - where endpoints may not agree on the state of an SA. The | 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 | 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 | an SA before sending its response to the creation request, so there | |||
| is no ambiguity for the initiator. The initiator may begin sending on | is no ambiguity for the initiator. The initiator MAY begin sending on | |||
| an SA as soon as it processes the response. The initiator, however, | an SA as soon as it processes the response. The initiator, however, | |||
| cannot receive on a newly created SA until it receives and processes | cannot receive on a newly created SA until it receives and processes | |||
| the response to its CREATE_CHILD_SA request. How, then, is the | 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? | responder to know when it is OK to send on the newly created SA? | |||
| From a technical correctness and interoperability perspective, the | From a technical correctness and interoperability perspective, the | |||
| responder MAY begin sending on an SA as soon as it sends its response | 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 | to the CREATE_CHILD_SA request. In some situations, however, this | |||
| could result in packets unnecessarily being dropped, so an | could result in packets unnecessarily being dropped, so an | |||
| implementation MAY want to defer such sending. | implementation MAY want to defer such sending. | |||
| skipping to change at page 23, line 16 ¶ | skipping to change at page 23, line 18 ¶ | |||
| Traffic Selector (TS) payloads allow endpoints to communicate some of | Traffic Selector (TS) payloads allow endpoints to communicate some of | |||
| the information from their SPD to their peers. TS payloads specify | the information from their SPD to their peers. TS payloads specify | |||
| the selection criteria for packets that will be forwarded over the | the selection criteria for packets that will be forwarded over the | |||
| newly set up SA. This can serve as a consistency check in some | newly set up SA. This can serve as a consistency check in some | |||
| scenarios to assure that the SPDs are consistent. In others, it | scenarios to assure that the SPDs are consistent. In others, it | |||
| guides the dynamic update of the SPD. | guides the dynamic update of the SPD. | |||
| Two TS payloads appear in each of the messages in the exchange that | 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 | creates a CHILD_SA pair. Each TS payload contains one or more Traffic | |||
| Selectors. Each Traffic Selector consists of an address range (IPv4 | Selectors. Each Traffic Selector consists of an address range (IPv4 | |||
| or IPv6), a port range, and a protocol ID. In support of the scenario | or IPv6), a port range, and an IP protocol ID. In support of the | |||
| described in section 1.1.3, an initiator may request that the | scenario described in section 1.1.3, an initiator may request that | |||
| responder assign an IP address and tell the initiator what it is. | the responder assign an IP address and tell the initiator what it is. | |||
| IKEv2 allows the responder to choose a subset of the traffic proposed | IKEv2 allows the responder to choose a subset of the traffic proposed | |||
| by the initiator. This could happen when the configuration of the | by the initiator. This could happen when the configuration of the | |||
| two endpoints are being updated but only one end has received the new | two endpoints are being updated but only one end has received the new | |||
| information. Since the two endpoints may be configured by different | information. Since the two endpoints may be configured by different | |||
| people, the incompatibility may persist for an extended period even | people, the incompatibility may persist for an extended period even | |||
| in the absence of errors. It also allows for intentionally different | in the absence of errors. It also allows for intentionally different | |||
| configurations, as when one end is configured to tunnel all addresses | configurations, as when one end is configured to tunnel all addresses | |||
| and depends on the other end to have the up to date list. | and depends on the other end to have the up to date list. | |||
| The first of the two TS payloads is known as TSi (Traffic Selector- | The first of the two TS payloads is known as TSi (Traffic Selector- | |||
| initiator). The second is known as TSr (Traffic Selector-responder). | initiator). The second is known as TSr (Traffic Selector-responder). | |||
| TSi specifies the source address of traffic forwarded from (or the | TSi specifies the source address of traffic forwarded from (or the | |||
| destination address of traffic forwarded to) the initiator of the | destination address of traffic forwarded to) the initiator of the | |||
| CHILD_SA pair. TSr specifies the destination address of the traffic | CHILD_SA pair. TSr specifies the destination address of the traffic | |||
| forwarded from (or the source address of the traffic forwarded to) | forwarded from (or the source address of the traffic forwarded to) | |||
| the responder of the CHILD_SA pair. For example, if Alice initiates | the responder of the CHILD_SA pair. For example, if Alice initiates | |||
| the creation of the CHILD_SA pair from Alice to Bob, and wishes to | the creation of the CHILD_SA pair from Alice to Bob, and wishes to | |||
| tunnel all traffic from subnet 10.2.16.* on Alice's side to subnet | tunnel all traffic from subnet 10.2.16.* on Alice's side to subnet | |||
| 18.16.*.* on Bob's side, Alice would include a single traffic | 10.16.*.* on Bob's side, Alice would include a single traffic | |||
| selector in each TS payload. TSi would specify the address range | selector in each TS payload. TSi would specify the address range | |||
| (10.2.16.0 - 10.2.16.255) and TSr would specify the address range | (10.2.16.0 - 10.2.16.255) and TSr would specify the address range | |||
| (18.16.0.0 - 18.16.255.255). Assuming that proposal was acceptable to | (10.16.0.0 - 10.16.255.255). Assuming that proposal was acceptable to | |||
| Bob, he would send identical TS payloads back. | Bob, he would send identical TS payloads back. | |||
| The Responder is allowed to narrow the choices by selecting a subset | The Responder is allowed to narrow the choices by selecting a subset | |||
| of the traffic, for instance by eliminating or narrowing the range of | of the traffic, for instance by eliminating or narrowing the range of | |||
| one or more members of the set of traffic selectors, provided the set | one or more members of the set of traffic selectors, provided the set | |||
| does not become the NULL set. | does not become the NULL set. | |||
| It is possible for the Responder's policy to contain multiple smaller | It is possible for the Responder's policy to contain multiple smaller | |||
| ranges, all encompassed by the Initiator's traffic selector, and with | ranges, all encompassed by the Initiator's traffic selector, and with | |||
| the Responder's policy being that each of those ranges should be sent | the Responder's policy being that each of those ranges should be sent | |||
| over a different SA. Continuing the example above, Bob might have a | over a different SA. Continuing the example above, Bob might have a | |||
| policy of being willing to tunnel those addresses to and from Alice, | policy of being willing to tunnel those addresses to and from Alice, | |||
| but might require that each address pair be on a separately | but might require that each address pair be on a separately | |||
| negotiated CHILD_SA. If Alice generated her request in response to an | negotiated CHILD_SA. If Alice generated her request in response to an | |||
| incoming packet from 10.2.16.43 to 18.16.2.123, there would be no way | incoming packet from 10.2.16.43 to 10.16.2.123, there would be no way | |||
| for Bob to determine which pair of addresses should be included in | for Bob to determine which pair of addresses should be included in | |||
| this tunnel, and he would have to make his best guess or reject the | this tunnel, and he would have to make his best guess or reject the | |||
| request with a status of SINGLE_PAIR_REQUIRED. | request with a status of SINGLE_PAIR_REQUIRED. | |||
| To enable Bob to choose the appropriate range in this case, if Alice | To enable Bob to choose the appropriate range in this case, if Alice | |||
| has initiated the SA due to a data packet, Alice SHOULD include as | has initiated the SA due to a data packet, Alice SHOULD include as | |||
| the first traffic selector in each of TSi and TSr a very specific | the first traffic selector in each of TSi and TSr a very specific | |||
| traffic selector including the addresses in the packet triggering the | traffic selector including the addresses in the packet triggering the | |||
| request. In the example, Alice would include in TSi two traffic | request. In the example, Alice would include in TSi two traffic | |||
| selectors: the first containing the address range (10.2.16.43 - | selectors: the first containing the address range (10.2.16.43 - | |||
| 10.2.16.43) and the source port and protocol from the packet and the | 10.2.16.43) and the source port and IP protocol from the packet and | |||
| second containing (10.2.16.0 - 10.2.16.255) with all ports and | the second containing (10.2.16.0 - 10.2.16.255) with all ports and IP | |||
| protocols. She would similarly include two traffic selectors in TSr. | protocols. She would similarly include two traffic selectors in TSr. | |||
| If Bob's policy does not allow him to accept the entire set of | If Bob's policy does not allow him to accept the entire set of | |||
| traffic selectors in Alice's request, but does allow him to accept | traffic selectors in Alice's request, but does allow him to accept | |||
| the first selector of TSi and TSr, then Bob MUST narrow the traffic | the first selector of TSi and TSr, then Bob MUST narrow the traffic | |||
| selectors to a subset that includes Alice's first choices. In this | selectors to a subset that includes Alice's first choices. In this | |||
| example, Bob might respond with TSi being (10.2.16.43 - 10.2.16.43) | example, Bob might respond with TSi being (10.2.16.43 - 10.2.16.43) | |||
| with all ports and protocols. | with all ports and IP protocols. | |||
| If Alice creates the CHILD_SA pair not in response to an arriving | If Alice creates the CHILD_SA pair not in response to an arriving | |||
| packet, but rather - say - upon startup, then there may be no | packet, but rather - say - upon startup, then there may be no | |||
| specific addresses Alice prefers for the initial tunnel over any | specific addresses Alice prefers for the initial tunnel over any | |||
| other. In that case, the first values in TSi and TSr MAY be ranges | other. In that case, the first values in TSi and TSr MAY be ranges | |||
| rather than specific values, and Bob chooses a subset of Alice's TSi | rather than specific values, and Bob chooses a subset of Alice's TSi | |||
| and TSr that are acceptable to him. If more than one subset is | and TSr that are acceptable to him. If more than one subset is | |||
| acceptable but their union is not, Bob MUST accept some subset and | acceptable but their union is not, Bob MUST accept some subset and | |||
| MAY include a Notify payload of type ADDITIONAL_TS_POSSIBLE to | MAY include a Notify payload of type ADDITIONAL_TS_POSSIBLE to | |||
| indicate that Alice might want to try again. This case will only | indicate that Alice might want to try again. This case will only | |||
| occur when Alice and Bob are configured differently from one another. | occur when Alice and Bob are configured differently from one another. | |||
| If Alice and Bob agree on the granularity of tunnels, she will never | If Alice and Bob agree on the granularity of tunnels, she will never | |||
| request a tunnel wider than Bob will accept. | request a tunnel wider than Bob will accept. | |||
| 2.10 Nonces | 2.10 Nonces | |||
| The IKE_SA_INIT messages each contain a nonce. These nonces are used | The IKE_SA_INIT messages each contain a nonce. These nonces are used | |||
| as inputs to cryptographic functions. The CREATE_CHILD_SA request | as inputs to cryptographic functions. The CREATE_CHILD_SA request | |||
| and the CREATE_CHILD_SA response also contain nonces. These nonces | and the CREATE_CHILD_SA response also contain nonces. These nonces | |||
| are used to add freshness to the key derivation technique used to | are used to add freshness to the key derivation technique used to | |||
| obtain keys for CHILD_SA, and to extract strong pseudorandom bits | obtain keys for CHILD_SA, and to ensure creation of strong | |||
| from the Diffie-Hellman key. Nonces used in IKEv2 MUST be randomly | pseudorandom bits from the Diffie-Hellman key. Nonces used in IKEv2 | |||
| chosen, MUST be at least 128 bits in size, and MUST be at least half | MUST be randomly chosen, MUST be at least 128 bits in size, and MUST | |||
| the key size of the negotiated prf. If the same random number source | be at least half the key size of the negotiated prf. ("prf" refers to | |||
| is used for both keys and nonces, care must be taken to ensure that | "pseudo-random function", one of the cryptographic algorithms | |||
| the latter use does not compromise the former. | negotiated in the IKE exchange). 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 | 2.11 Address and Port Agility | |||
| IKE runs over UDP ports 500 and 4500, and implicitly sets up ESP and | IKE runs over UDP ports 500 and 4500, and implicitly sets up ESP and | |||
| AH associations for the same IP addresses it runs over. The IP | AH associations for the same IP addresses it runs over. The IP | |||
| addresses and ports in the outer header are, however, not themselves | addresses and ports in the outer header are, however, not themselves | |||
| cryptographically protected, and IKE is designed to work even through | cryptographically protected, and IKE is designed to work even through | |||
| Network Address Translation (NAT) boxes. An implementation MUST | Network Address Translation (NAT) boxes. An implementation MUST | |||
| accept incoming requests even if not received from UDP port 500 or | accept incoming requests even if the source port is not 500 or 4500, | |||
| 4500, and MUST respond to the address and port from which the request | and MUST respond to the address and port from which the request was | |||
| was received, and from the address and port at which the request was | received. It MUST specify the address and port at which the request | |||
| received. IKE functions identically over IPv4 or IPv6. | 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 | 2.12 Reuse of Diffie-Hellman Exponentials | |||
| IKE generates keying material using an ephemeral Diffie-Hellman | IKE generates keying material using an ephemeral Diffie-Hellman | |||
| exchange in order to gain the property of "perfect forward secrecy". | exchange in order to gain the property of "perfect forward secrecy". | |||
| This means that once a connection is closed and its corresponding | This means that once a connection is closed and its corresponding | |||
| keys are forgotten, even someone who has recorded all of the data | 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 | from the connection and gets access to all of the long-term keys of | |||
| the two endpoints cannot reconstruct the keys used to protect the | the two endpoints cannot reconstruct the keys used to protect the | |||
| conversation. | conversation without doing a brute force search of the session key | |||
| space. | ||||
| Achieving perfect forward secrecy requires that when a connection is | Achieving perfect forward secrecy requires that when a connection is | |||
| closed, each endpoint MUST forget not only the keys used by the | closed, each endpoint MUST forget not only the keys used by the | |||
| connection but any information that could be used to recompute those | connection but any information that could be used to recompute those | |||
| keys. In particular, it MUST forget the secrets used in the Diffie- | keys. In particular, it MUST forget the secrets used in the Diffie- | |||
| Hellman calculation and any state that may persist in the state of a | Hellman calculation and any state that may persist in the state of a | |||
| pseudo-random number generator that could be used to recompute the | pseudo-random number generator that could be used to recompute the | |||
| Diffie-Hellman secrets. | Diffie-Hellman secrets. | |||
| Since the computing of Diffie-Hellman exponentials is computationally | Since the computing of Diffie-Hellman exponentials is computationally | |||
| skipping to change at page 26, line 23 ¶ | skipping to change at page 26, line 29 ¶ | |||
| negotiated: an encryption algorithm, an integrity protection | negotiated: an encryption algorithm, an integrity protection | |||
| algorithm, a Diffie-Hellman group, and a pseudo-random function | algorithm, a Diffie-Hellman group, and a pseudo-random function | |||
| (prf). The pseudo-random function is used for the construction of | (prf). The pseudo-random function is used for the construction of | |||
| keying material for all of the cryptographic algorithms used in both | keying material for all of the cryptographic algorithms used in both | |||
| the IKE_SA and the CHILD_SAs. | the IKE_SA and the CHILD_SAs. | |||
| We assume that each encryption algorithm and integrity protection | We assume that each encryption algorithm and integrity protection | |||
| algorithm uses a fixed size key, and that any randomly chosen value | algorithm uses a fixed size key, and that any randomly chosen value | |||
| of that fixed size can serve as an appropriate key. For algorithms | 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 | that accept a variable length key, a fixed key size MUST be specified | |||
| as part of the cryptographic transform negotiated. For integrity | as part of the cryptographic transform negotiated. For algorithms | |||
| protection functions based on HMAC, the fixed key size is the size of | for which not all values are valid keys (such as DES or 3DES with key | |||
| the output of the underlying hash function. When the prf function | parity), they algorithm by which keys are derived from arbitrary | |||
| takes a variable length key, variable length data, and produces a | values MUST be specified by the cryptographic transform. For | |||
| fixed length output (e.g., when using HMAC), the formulas in this | integrity protection functions based on HMAC, the fixed key size is | |||
| document apply. When the key for the prf function has fixed length, | the size of the output of the underlying hash function. When the prf | |||
| the data provided as a key is truncated or padded with zeros as | function takes a variable length key, variable length data, and | |||
| necessary unless exceptional processing is explained following the | produces a fixed length output (e.g., when using HMAC), the formulas | |||
| in this document apply. When the key for the prf function has fixed | ||||
| length, the data provided as a key is truncated or padded with zeros | ||||
| as necessary unless exceptional processing is explained following the | ||||
| formula. | formula. | |||
| Keying material will always be derived as the output of the | Keying material will always be derived as the output of the | |||
| negotiated prf algorithm. Since the amount of keying material needed | negotiated prf algorithm. Since the amount of keying material needed | |||
| may be greater than the size of the output of the prf algorithm, we | may be greater than the size of the output of the prf algorithm, we | |||
| will use the prf iteratively. We will use the terminology prf+ to | will use the prf iteratively. We will use the terminology prf+ to | |||
| describe the function that outputs a pseudo-random stream based on | describe the function that outputs a pseudo-random stream based on | |||
| the inputs to a prf as follows: (where | indicates concatenation) | the inputs to a prf as follows: (where | indicates concatenation) | |||
| prf+ (K,S) = T1 | T2 | T3 | T4 | ... | prf+ (K,S) = T1 | T2 | T3 | T4 | ... | |||
| skipping to change at page 27, line 39 ¶ | skipping to change at page 27, line 49 ¶ | |||
| (indicating that the quantities SK_d, SK_ai, SK_ar, SK_ei, and SK_er | (indicating that the quantities SK_d, SK_ai, SK_ar, SK_ei, and SK_er | |||
| are taken in order from the generated bits of the prf+). g^ir is the | 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 | shared secret from the ephemeral Diffie-Hellman exchange. g^ir is | |||
| represented as a string of octets in big endian order padded with | 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 | zeros if necessary to make it the length of the modulus. Ni and Nr | |||
| are the nonces, stripped of any headers. If the negotiated prf takes | are the nonces, stripped of any headers. If the negotiated prf takes | |||
| a fixed length key and the lengths of Ni and Nr do not add up to that | a fixed length key and the lengths of Ni and Nr do not add up to that | |||
| length, half the bits must come from Ni and half from Nr, taking the | length, half the bits must come from Ni and half from Nr, taking the | |||
| first bits of each. | first bits of each. | |||
| The two directions of flow use different keys. The keys used to | The two directions of traffic flow use different keys. The keys used | |||
| protect messages from the original initiator are SK_ai and SK_ei. The | to protect messages from the original initiator are SK_ai and SK_ei. | |||
| keys used to protect messages in the other direction are SK_ar and | The keys used to protect messages in the other direction are SK_ar | |||
| SK_er. Each algorithm takes a fixed number of bits of keying | and SK_er. Each algorithm takes a fixed number of bits of keying | |||
| material, which is specified as part of the algorithm. For integrity | material, which is specified as part of the algorithm. For integrity | |||
| algorithms based on HMAC, the key size is always equal to the length | algorithms based on HMAC, the key size is always equal to the length | |||
| of the output of the underlying hash function. | of the output of the underlying hash function. | |||
| 2.15 Authentication of the IKE_SA | 2.15 Authentication of the IKE_SA | |||
| When not using extended authentication (see section 2.16), the peers | When not using extended authentication (see section 2.16), the peers | |||
| are authenticated by having each sign (or MAC using a shared secret | are authenticated by having each sign (or MAC using a shared secret | |||
| as the key) a block of data. For the responder, the octets to be | as the key) a block of data. For the responder, the octets to be | |||
| signed start with the first octet of the first SPI in the header of | signed start with the first octet of the first SPI in the header of | |||
| skipping to change at page 28, line 17 ¶ | skipping to change at page 28, line 26 ¶ | |||
| signature) are the initiator's nonce Ni (just the value, not the | signature) are the initiator's nonce Ni (just the value, not the | |||
| payload containing it), and the value prf(SK_ar,IDr') where IDr' is | payload containing it), and the value prf(SK_ar,IDr') where IDr' is | |||
| the responder's ID payload excluding the fixed header. Note that | the responder's ID payload excluding the fixed header. Note that | |||
| neither the nonce Ni nor the value prf(SK_ar,IDr') are transmitted. | neither the nonce Ni nor the value prf(SK_ar,IDr') are transmitted. | |||
| Similarly, the initiator signs the first message, starting with the | Similarly, the initiator signs the first message, starting with the | |||
| first octet of the first SPI in the header and ending with the last | first octet of the first SPI in the header and ending with the last | |||
| octet of the last payload. Appended to this (for purposes of | octet of the last payload. Appended to this (for purposes of | |||
| computing the signature) are the responder's nonce Nr, and the value | computing the signature) are the responder's nonce Nr, and the value | |||
| prf(SK_ai,IDi'). In the above calculation, IDi' and IDr' are the | prf(SK_ai,IDi'). In the above calculation, IDi' and IDr' are the | |||
| entire ID payloads excluding the fixed header. It is critical to the | entire ID payloads excluding the fixed header. It is critical to the | |||
| security of the exchange that each side sign the other side's nonce | security of the exchange that each side sign the other side's nonce. | |||
| (see [SIGMA]). | ||||
| Note that all of the payloads are included under the signature, | Note that all of the payloads are included under the signature, | |||
| including any payload types not defined in this document. If the | including any payload types not defined in this document. If the | |||
| first message of the exchange is sent twice (the second time with a | first message of the exchange is sent twice (the second time with a | |||
| responder cookie and/or a different Diffie-Hellman group), it is the | responder cookie and/or a different Diffie-Hellman group), it is the | |||
| second version of the message that is signed. | second version of the message that is signed. | |||
| Optionally, messages 3 and 4 MAY include a certificate, or | Optionally, messages 3 and 4 MAY include a certificate, or | |||
| certificate chain providing evidence that the key used to compute a | certificate chain providing evidence that the key used to compute a | |||
| digital signature belongs to the name in the ID payload. The | digital signature belongs to the name in the ID payload. The | |||
| skipping to change at page 28, line 44 ¶ | skipping to change at page 29, line 4 ¶ | |||
| type of key each has. In particular, the initiator may be using a | 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 | shared key while the responder may have a public signature key and | |||
| certificate. It will commonly be the case (but it is not required) | certificate. It will commonly be the case (but it is not required) | |||
| that if a shared secret is used for authentication that the same key | that if a shared secret is used for authentication that the same key | |||
| is used in both directions. Note that it is a common but typically | is used in both directions. Note that it is a common but typically | |||
| insecure practice to have a shared key derived solely from a user | insecure practice to have a shared key derived solely from a user | |||
| chosen password without incorporating another source of randomness. | chosen password without incorporating another source of randomness. | |||
| This is typically insecure because user chosen passwords are unlikely | This is typically insecure because user chosen passwords are unlikely | |||
| to have sufficient unpredictability to resist dictionary attacks and | to have sufficient unpredictability to resist dictionary attacks and | |||
| these attacks are not prevented in this authentication method. | these attacks are not prevented in this authentication method. | |||
| (Applications using password-based authentication for bootstrapping | (Applications using password-based authentication for bootstrapping | |||
| and IKE_SA should use the authentication method in section 2.16, | and IKE_SA should use the authentication method in section 2.16, | |||
| which is designed to prevent off-line dictionary attacks). The pre- | which is designed to prevent off-line dictionary attacks). The pre- | |||
| shared key SHOULD contain as much unpredictability as the strongest | shared key SHOULD contain as much unpredictability as the strongest | |||
| key being negotiated. In the case of a pre-shared key, the AUTH | key being negotiated. In the case of a pre-shared key, the AUTH | |||
| value is computed as: | value is computed as: | |||
| AUTH = prf(prf(Shared Secret,"Key Pad for IKEv2"), <message | AUTH = prf(prf(Shared Secret,"Key Pad for IKEv2"), <message | |||
| octets>) | octets>) | |||
| where the string "Key Pad for IKEv2" is ASCII encoded and not null | where the string "Key Pad for IKEv2" is 17 ASCII characters without | |||
| terminated. The shared secret can be variable length. The pad string | null termination. The shared secret can be variable length. The pad | |||
| is added so that if the shared secret is derived from a password, the | string is added so that if the shared secret is derived from a | |||
| IKE implementation need not store the password in cleartext, but | password, the IKE implementation need not store the password in | |||
| rather can store the value prf(Shared Secret,"Key Pad for IKEv2"), | cleartext, but rather can store the value prf(Shared Secret,"Key Pad | |||
| which could not be used as a password equivalent for protocols other | for IKEv2"), which could not be used as a password equivalent for | |||
| than IKEv2. As noted above, deriving the shared secret from a | protocols other than IKEv2. As noted above, deriving the shared | |||
| password is not secure. This construction is used because it is | secret from a password is not secure. This construction is used | |||
| anticipated that people will do it anyway. The management interface | because it is anticipated that people will do it anyway. The | |||
| by which the Shared Secret is provided MUST accept ASCII strings of | management interface by which the Shared Secret is provided MUST | |||
| at least 64 octets and MUST NOT add a null terminator before using | accept ASCII strings of at least 64 octets and MUST NOT add a null | |||
| them as shared secrets. The management interface MAY accept other | terminator before using them as shared secrets. The management | |||
| forms, like hex encoding. If the negotiated prf takes a fixed size | interface MAY accept other forms, like hex encoding. If the | |||
| key, the shared secret MUST be of that fixed size. | negotiated prf takes a fixed size key, the shared secret MUST be of | |||
| that fixed size. | ||||
| 2.16 Extended Authentication Protocol Methods | 2.16 Extended Authentication Protocol Methods | |||
| In addition to authentication using public key signatures and shared | In addition to authentication using public key signatures and shared | |||
| secrets, IKE supports authentication using methods defined in RFC | secrets, IKE supports authentication using methods defined in RFC | |||
| 2284 [EAP]. Typically, these methods are asymmetric (designed for a | 2284 [EAP]. Typically, these methods are asymmetric (designed for a | |||
| user authenticating to a server), and they may not be mutual. For | user authenticating to a server), and they may not be mutual. For | |||
| this reason, these protocols are typically used to authenticate the | this reason, these protocols are typically used to authenticate the | |||
| initiator to the responder and are used in addition to a public key | initiator to the responder and MUST be used in conjunction with a | |||
| signature based authentication of the responder to the initiator. | public key signature based authentication of the responder to the | |||
| These methods are also referred to as "Legacy Authentication" | initiator. These methods are often associated with mechanisms | |||
| mechanisms. | referred to as "Legacy Authentication" mechanisms. | |||
| While this memo references [EAP] with the intent that new methods can | While this memo references [EAP] with the intent that new methods can | |||
| be added in the future without updating this specification, the | be added in the future without updating this specification, the | |||
| protocols expected to be used most commonly are fully documented here | protocols expected to be used most commonly are documented here and | |||
| and in section 3.16. [EAP] defines an authentication protocol | in section 3.16. [EAP] defines an authentication protocol requiring | |||
| requiring a variable number of messages. Extended Authentication is | a variable number of messages. Extended Authentication is implemented | |||
| implemented in IKE as additional IKE_AUTH exchanges that MUST be | in IKE as additional IKE_AUTH exchanges that MUST be completed in | |||
| completed in order to initialize the IKE_SA. | order to initialize the IKE_SA. | |||
| An initiator indicates a desire to use extended authentication by | An initiator indicates a desire to use extended authentication by | |||
| leaving out the AUTH payload from message 3. By including an IDi | leaving out the AUTH payload from message 3. By including an IDi | |||
| payload but not an AUTH payload, the initiator has declared an | 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 | identity but has not proven it. If the responder is willing to use an | |||
| extended authentication method, it will place an EAP payload in | extended authentication method, it will place an EAP payload in | |||
| message 4 and defer sending SAr2, TSi, and TSr until initiator | message 4 and defer sending SAr2, TSi, and TSr until initiator | |||
| authentication is complete in a subsequent IKE_AUTH exchange. In the | authentication is complete in a subsequent IKE_AUTH exchange. In the | |||
| case of a minimal extended authentication, the initial SA | case of a minimal extended authentication, the initial SA | |||
| establishment will appear as follows: | establishment will appear as follows: | |||
| skipping to change at page 30, line 4 ¶ | skipping to change at page 30, line 13 ¶ | |||
| leaving out the AUTH payload from message 3. By including an IDi | leaving out the AUTH payload from message 3. By including an IDi | |||
| payload but not an AUTH payload, the initiator has declared an | 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 | identity but has not proven it. If the responder is willing to use an | |||
| extended authentication method, it will place an EAP payload in | extended authentication method, it will place an EAP payload in | |||
| message 4 and defer sending SAr2, TSi, and TSr until initiator | message 4 and defer sending SAr2, TSi, and TSr until initiator | |||
| authentication is complete in a subsequent IKE_AUTH exchange. In the | authentication is complete in a subsequent IKE_AUTH exchange. In the | |||
| case of a minimal extended authentication, the initial SA | case of a minimal extended authentication, the initial SA | |||
| establishment will appear as follows: | establishment will appear as follows: | |||
| Initiator Responder | Initiator Responder | |||
| ----------- ----------- | ----------- ----------- | |||
| HDR, SAi1, KEi, Ni --> | HDR, SAi1, KEi, Ni --> | |||
| <-- HDR, SAr1, KEr, Nr, [CERTREQ] | <-- HDR, SAr1, KEr, Nr, [CERTREQ] | |||
| HDR, SK {IDi, [CERTREQ,] [IDr,] | HDR, SK {IDi, [CERTREQ,] [IDr,] | |||
| SAi2, TSi, TSr} --> | SAi2, TSi, TSr} --> | |||
| <-- HDR, SK {IDr, [CERT,] AUTH, | <-- HDR, SK {IDr, [CERT,] AUTH, | |||
| EAP } | EAP } | |||
| HDR, SK {EAP, [AUTH] } --> | HDR, SK {EAP, AUTH} --> | |||
| <-- HDR, SK {EAP, [AUTH], | <-- HDR, SK {EAP, AUTH, | |||
| SAr2, TSi, TSr } | SAr2, TSi, TSr } | |||
| For EAP methods that create a shared key as a side effect of | For EAP methods that create a shared key as a side effect of | |||
| authentication, that shared key MUST be used by both the Initiator | authentication, that shared key MUST be used by both the Initiator | |||
| and Responder to generate an AUTH payload using the syntax for shared | and Responder to generate AUTH payloads in messages 5 and 6 using the | |||
| secrets specified in section 2.15. The shared key generated during an | syntax for shared secrets specified in section 2.15. The shared key | |||
| IKE exchange MUST NOT be used for any other purpose. | 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 | 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 if these | they are subject to a number of man-in-the-middle attacks [EAPMITM] | |||
| EAP methods are used in other protocols that do not use a server- | if these EAP methods are used in other protocols that do not use a | |||
| authenticated tunnel. Please see the Security Considerations section | server-authenticated tunnel. Please see the Security Considerations | |||
| for more details. If EAP methods that do not generate a shared key | section for more details. If EAP methods that do not generate a | |||
| are used, there will be no AUTH payloads in the final messages. | shared key are used, the AUTH payloads in messages 5 and 6 MUST be | |||
| generated using SK_ai and SK_ar respectively. | ||||
| The Initiator of an IKE_SA using EAP SHOULD be capable of extending | The Initiator of an IKE_SA using EAP SHOULD be capable of extending | |||
| the initial protocol exchange to at least ten IKE_AUTH exchanges in | the initial protocol exchange to at least ten IKE_AUTH exchanges in | |||
| the event the Responder sends notification messages and/or retries | the event the Responder sends notification messages and/or retries | |||
| the authentication prompt. The protocol terminates when the Responder | the authentication prompt. The protocol terminates when the Responder | |||
| sends the Initiator an EAP payload containing either a success or | sends the Initiator an EAP payload containing either a success or | |||
| failure type. | failure type. In such an extended exchange, the EAP AUTH payloads | |||
| MUST be included in the first message each end sends after having | ||||
| sufficient information to compute the key. This will usually be in | ||||
| the last two messages of the exchange. | ||||
| 2.17 Generating Keying Material for CHILD_SAs | 2.17 Generating Keying Material for CHILD_SAs | |||
| CHILD_SAs are created either by being piggybacked on the IKE_AUTH | CHILD_SAs are created either by being piggybacked on the IKE_AUTH | |||
| exchange, or in a CREATE_CHILD_SA exchange. Keying material for them | exchange, or in a CREATE_CHILD_SA exchange. Keying material for them | |||
| is generated as follows: | is generated as follows: | |||
| KEYMAT = prf+(SK_d, Ni | Nr) | KEYMAT = prf+(SK_d, Ni | Nr) | |||
| Where Ni and Nr are the Nonces from the IKE_SA_INIT exchange if this | 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 | 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. | CREATE_CHILD_SA exchange if this is a subsequent creation. | |||
| For CREATE_CHILD_SA exchanges with PFS the keying material is defined | For CREATE_CHILD_SA exchanges with PFS the keying material is defined | |||
| as: | as: | |||
| KEYMAT = prf+(SK_d, g^ir (new) | Ni | Nr ) | KEYMAT = prf+(SK_d, g^ir (new) | Ni | Nr ) | |||
| where g^ir (new) is the shared secret from the ephemeral Diffie- | where g^ir (new) is the shared secret from the ephemeral Diffie- | |||
| Hellman exchange of this CREATE_CHILD_SA exchange (represented as an | Hellman exchange of this CREATE_CHILD_SA exchange (represented as an | |||
| octet string in big endian order padded with zeros if necessary to | octet string in big endian order padded with zeros in the high order | |||
| make it the length of the modulus), | bits if necessary to make it the length of the modulus). | |||
| A single CHILD_SA negotiation may result in multiple security | A single CHILD_SA negotiation may result in multiple security | |||
| associations. ESP and AH SAs exist in pairs (one in each direction), | associations. ESP and AH SAs exist in pairs (one in each direction), | |||
| and four SAs could be created in a single CHILD_SA negotiation if a | and four SAs could be created in a single CHILD_SA negotiation if a | |||
| combination of ESP and AH is being negotiated. | combination of ESP and AH is being negotiated. | |||
| Keying material is taken from the expanded KEYMAT in the following | Keying material MUST be taken from the expanded KEYMAT in the | |||
| order: | following order: | |||
| All keys for SAs carrying data from the initiator to the responder | All keys for SAs carrying data from the initiator to the responder | |||
| are taken before SAs going in the reverse direction. | are taken before SAs going in the reverse direction. | |||
| If multiple protocols are negotiated, keying material is taken in | If multiple IPsec protocols are negotiated, keying material is | |||
| the order in which the protocol headers will appear in the | taken in the order in which the protocol headers will appear in | |||
| encapsulated packet. | the encapsulated packet. | |||
| If a single protocol has both encryption and authentication keys, | If a single protocol has both encryption and authentication keys, | |||
| the encryption key is taken from the first octets of KEYMAT and | the encryption key is taken from the first octets of KEYMAT and | |||
| the authentication key is taken from the next octets. | the authentication key is taken from the next octets. | |||
| Each cryptographic algorithm takes a fixed number of bits of keying | Each cryptographic algorithm takes a fixed number of bits of keying | |||
| material specified as part of the algorithm. | material specified as part of the algorithm. | |||
| 2.18 Rekeying IKE_SAs using a CREATE_CHILD_SA exchange | 2.18 Rekeying IKE_SAs using a CREATE_CHILD_SA exchange | |||
| The CREATE_CHILD_SA exchange can be used to re-key an existing IKE_SA | The CREATE_CHILD_SA exchange can be used to rekey an existing IKE_SA | |||
| (see section 2.8). New Initiator and Responder SPIs are supplied in | (see section 2.8). New Initiator and Responder SPIs are supplied in | |||
| the SPI fields. The TS payloads are omitted when rekeying an IKE_SA. | the SPI fields. The TS payloads are omitted when rekeying an IKE_SA. | |||
| SKEYSEED for the new IKE_SA is computed using SK_d from the existing | SKEYSEED for the new IKE_SA is computed using SK_d from the existing | |||
| IKE_SA as follows: | IKE_SA as follows: | |||
| SKEYSEED = prf(SK_d (old), [g^ir (new)] | Ni | Nr) | SKEYSEED = prf(SK_d (old), [g^ir (new)] | Ni | Nr) | |||
| where g^ir (new) is the shared secret from the ephemeral Diffie- | where g^ir (new) is the shared secret from the ephemeral Diffie- | |||
| Hellman exchange of this CREATE_CHILD_SA exchange (represented as an | Hellman exchange of this CREATE_CHILD_SA exchange (represented as an | |||
| octet string in big endian order padded with zeros if necessary to | octet string in big endian order padded with zeros if necessary to | |||
| skipping to change at page 33, line 6 ¶ | skipping to change at page 33, line 22 ¶ | |||
| attributes the initiator wants returned in the response. | attributes the initiator wants returned in the response. | |||
| For example, message from Initiator to Responder: | For example, message from Initiator to Responder: | |||
| CP(CFG_REQUEST)= | CP(CFG_REQUEST)= | |||
| INTERNAL_ADDRESS(0.0.0.0) | INTERNAL_ADDRESS(0.0.0.0) | |||
| INTERNAL_NETMASK(0.0.0.0) | INTERNAL_NETMASK(0.0.0.0) | |||
| INTERNAL_DNS(0.0.0.0) | INTERNAL_DNS(0.0.0.0) | |||
| TSi = (0, 0-65536,0.0.0.0-255.255.255.255) | TSi = (0, 0-65536,0.0.0.0-255.255.255.255) | |||
| TSr = (0, 0-65536,0.0.0.0-255.255.255.255) | TSr = (0, 0-65536,0.0.0.0-255.255.255.255) | |||
| NOTE: Traffic Selectors are a (protocol, port range, address range) | NOTE: Traffic Selectors contain (protocol, port range, address range) | |||
| Message from Responder to Initiator: | Message from Responder to Initiator: | |||
| CP(CFG_REPLY)= | CP(CFG_REPLY)= | |||
| INTERNAL_ADDRESS(192.168.219.202) | INTERNAL_ADDRESS(10.168.219.202) | |||
| INTERNAL_NETMASK(255.255.255.0) | INTERNAL_NETMASK(255.255.255.0) | |||
| INTERNAL_SUBNET(192.168.219.0/255.255.255.0) | INTERNAL_SUBNET(10.168.219.0/255.255.255.0) | |||
| TSi = (0, 0-65536,192.168.219.202-192.168.219.202) | TSi = (0, 0-65536,10.168.219.202-10.168.219.202) | |||
| TSr = (0, 0-65536,192.168.219.0-192.168.219.255) | TSr = (0, 0-65536,10.168.219.0-10.168.219.255) | |||
| All returned values will be implementation dependent. As can be seen | All returned values will be implementation dependent. As can be seen | |||
| in the above example, the IRAS MAY also send other attributes that | in the above example, the IRAS MAY also send other attributes that | |||
| were not included in CP(CFG_REQUEST) and MAY ignore the non- | were not included in CP(CFG_REQUEST) and MAY ignore the non- | |||
| mandatory attributes that it does not support. | mandatory attributes that it does not support. | |||
| The responder MUST not send a CFG_REPLY without having first received | 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 | a CP(CFG_REQUEST) from the initiator, because we do not want the IRAS | |||
| to perform an unnecessary configuration lookup if the IRAC cannot | to perform an unnecessary configuration lookup if the IRAC cannot | |||
| process the REPLY. In the case where the IRAS's configuration | process the REPLY. In the case where the IRAS's configuration | |||
| requires that CP be used for a given identity IDi, but IRAC has | 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 | failed to send a CP(CFG_REQUEST), IRAS MUST fail the request, and | |||
| terminate the IKE exchange with a FAILED_CP_REQUIRED error. | terminate the IKE exchange with a FAILED_CP_REQUIRED error. | |||
| 2.20 Requesting the Peer's Version | 2.20 Requesting the Peer's Version | |||
| An IKE peer wishing to inquire about the other peer's IKE software | An IKE peer wishing to inquire about the other peer's IKE software | |||
| skipping to change at page 35, line 21 ¶ | skipping to change at page 35, line 34 ¶ | |||
| contains it. Compression associations disappear when the | contains it. Compression associations disappear when the | |||
| corresponding ESP or AH SA goes away, and is not explicitly mentioned | corresponding ESP or AH SA goes away, and is not explicitly mentioned | |||
| in any DELETE payload. | in any DELETE payload. | |||
| Negotiation of IP compression is separate from the negotiation of | Negotiation of IP compression is separate from the negotiation of | |||
| cryptographic parameters associated with a CHILD_SA. A node | cryptographic parameters associated with a CHILD_SA. A node | |||
| requesting a CHILD_SA MAY advertise its support for one or more | requesting a CHILD_SA MAY advertise its support for one or more | |||
| compression algorithms though one or more Notify payloads of type | compression algorithms though one or more Notify payloads of type | |||
| IPCOMP_SUPPORTED. The response MAY indicate acceptance of a single | IPCOMP_SUPPORTED. The response MAY indicate acceptance of a single | |||
| compression algorithm with a Notify payload of type IPCOMP_SUPPORTED. | compression algorithm with a Notify payload of type IPCOMP_SUPPORTED. | |||
| These payloads MAY ONLY occur in the same messages that contain SA | These payloads MUST NOT occur messages that do not contain SA | |||
| payloads. | payloads. | |||
| While there has been discussion of allowing multiple compression | While there has been discussion of allowing multiple compression | |||
| algorithms to be accepted and to have different compression | algorithms to be accepted and to have different compression | |||
| algorithms available for the two directions of a CHILD_SA, | algorithms available for the two directions of a CHILD_SA, | |||
| implementations of this specification MUST NOT accept an IPComp | implementations of this specification MUST NOT accept an IPComp | |||
| algorithm that was not proposed, MUST NOT accept more than one, and | algorithm that was not proposed, MUST NOT accept more than one, and | |||
| MUST NOT compress using an algorithm other than one proposed and | MUST NOT compress using an algorithm other than one proposed and | |||
| accepted in the setup of the CHILD_SA. | accepted in the setup of the CHILD_SA. | |||
| skipping to change at page 37, line 15 ¶ | skipping to change at page 37, line 31 ¶ | |||
| port 500). | port 500). | |||
| The specific requirements for supporting NAT traversal are listed | The specific requirements for supporting NAT traversal are listed | |||
| below. Support for NAT traversal is optional. In this section only, | below. Support for NAT traversal is optional. In this section only, | |||
| requirements listed as MUST only apply to implementations supporting | requirements listed as MUST only apply to implementations supporting | |||
| NAT traversal. | NAT traversal. | |||
| IKE MUST listen on port 4500 as well as port 500. IKE MUST respond | IKE MUST listen on port 4500 as well as port 500. IKE MUST respond | |||
| to the IP address and port from which packets arrived. | to the IP address and port from which packets arrived. | |||
| The IKE responder MUST include in its IKE_SA_INIT response Notify | Both IKE initiator and responder MUST include in their IKE_SA_INIT | |||
| payloads of type NAT_DETECTION_SOURCE_IP and | packets Notify payloads of type NAT_DETECTION_SOURCE_IP and | |||
| NAT_DETECTION_DESTINATION_IP. The IKE initiator MUST check these | NAT_DETECTION_DESTINATION_IP. Those payloads can be used to detect | |||
| payloads if present and if they do not match the addresses in the | if there is NAT between the hosts, and which end is behind the | |||
| outer packet MUST tunnel all future IKE, ESP, and AH packets | NAT. The location of the payloads in the IKE_SA_INIT packets are | |||
| associated with this IKE_SA over UDP port 4500. To tunnel IKE | just after the Ni and Nr payloads (before the optional CERTREQ | |||
| packets over UDP port 4500, the IKE header has four octets of zero | payload). | |||
| prepended and the result immediately follows the UDP header. To | ||||
| tunnel ESP packets over UDP port 4500, the ESP header immediately | If none of the NAT_DETECTION_SOURCE_IP payload(s) received matches | |||
| follows the UDP header. Since the first four bytes of the ESP | the hash of the source IP and port found from the IP header of the | |||
| header contain the SPI, and the SPI cannot validly be zero, it is | packet containing the payload, it means that the the other end is | |||
| always possible to distinguish ESP and IKE messages. | behind NAT (i.e someone along the route changed the source address | |||
| of the original packet to match the address of the NAT box). In | ||||
| this case this end should allow dynamic update of the other ends | ||||
| IP address, as described later. | ||||
| If the NAT_DETECTION_DESTINATION_IP payload received does not | ||||
| match the hash of the destination IP and port found from the IP | ||||
| header of the packet containing the payload, it means that this | ||||
| end is behind NAT (i.e the original sender sent the packet to | ||||
| address of the NAT box, which then changed the destination address | ||||
| to this host). In this case the this end should start sending | ||||
| keepalive packets as explaind in [Hutt02]. | ||||
| The IKE initiator MUST check these payloads if present and if they | ||||
| do not match the addresses in the outer packet MUST tunnel all | ||||
| future IKE, ESP, and AH packets associated with this IKE_SA over | ||||
| UDP port 4500. | ||||
| To tunnel IKE packets over UDP port 4500, the IKE header has four | ||||
| octets of zero prepended and the result immediately follows the | ||||
| UDP header. To tunnel ESP packets over UDP port 4500, the ESP | ||||
| header immediately follows the UDP header. Since the first four | ||||
| bytes of the ESP header contain the SPI, and the SPI cannot | ||||
| validly be zero, it is always possible to distinguish ESP and IKE | ||||
| messages. | ||||
| The original source and destination IP address required for the | The original source and destination IP address required for the | |||
| transport mode TCP and UDP packet checksum fixup (see [Hutt02]) | transport mode TCP and UDP packet checksum fixup (see [Hutt02]) | |||
| obtained from the Traffic Selectors associated with the exchange. | are obtained from the Traffic Selectors associated with the | |||
| In the case of NAT-T, the Traffic Selectors MUST contain exactly | exchange. In the case of NAT-T, the Traffic Selectors MUST contain | |||
| one IP address which is then used as the original IP address. | exactly one IP address which is then used as the original IP | |||
| address. | ||||
| There are cases where a NAT box decides to remove mappings that | There are cases where a NAT box decides to remove mappings that | |||
| are still alive (for example, the keepalive interval is too long, | are still alive (for example, the keepalive interval is too long, | |||
| or the NAT box is rebooted). To recover in these cases, hosts that | or the NAT box is rebooted). To recover in these cases, hosts that | |||
| are not behind a NAT SHOULD send all packets (including retried | are not behind a NAT SHOULD send all packets (including | |||
| packets) to the IP address and port from the last valid | retranmission packets) to the IP address and port from the last | |||
| authenticated packet from the other end. A host behind a NAT | valid authenticated packet from the other end (i.e dynamically | |||
| SHOULD NOT do this because it opens a DoS attack possibility. Any | update the address). A host behind a NAT SHOULD NOT do this | |||
| authenticated IKE packet or any authenticated UDP encapsulated ESP | because it opens a DoS attack possibility. Any authenticated IKE | |||
| packet can be used to detect that the IP address or the port has | packet or any authenticated UDP encapsulated ESP packet can be | |||
| changed. | used to detect that the IP address or the port has changed. | |||
| Note that similar but probably not identical actions will likely | Note that similar but probably not identical actions will likely | |||
| be needed to make IKE work with Mobile IP, but such processing is | be needed to make IKE work with Mobile IP, but such processing is | |||
| not addressed by this document. | not addressed by this document. | |||
| 2.24 ECN (Explicit Congestion Notification) | 2.24 ECN (Explicit Congestion Notification) | |||
| When IPsec tunnels behave as originally specified in [RFC 2401], ECN | When IPsec tunnels behave as originally specified in [RFC 2401], ECN | |||
| usage is not appropriate for the outer IP headers because tunnel | usage is not appropriate for the outer IP headers because tunnel | |||
| decapsulation processing discards ECN congestion indications to the | decapsulation processing discards ECN congestion indications to the | |||
| skipping to change at page 43, line 5 ¶ | skipping to change at page 44, line 5 ¶ | |||
| o RESERVED (7 bits) - MUST be sent as zero; MUST be ignored on | o RESERVED (7 bits) - MUST be sent as zero; MUST be ignored on | |||
| receipt. | receipt. | |||
| o Payload Length (2 octets) - Length in octets of the current | o Payload Length (2 octets) - Length in octets of the current | |||
| payload, including the generic payload header. | payload, including the generic payload header. | |||
| 3.3 Security Association Payload | 3.3 Security Association Payload | |||
| The Security Association Payload, denoted SA in this memo, is used to | The Security Association Payload, denoted SA in this memo, is used to | |||
| negotiate attributes of a security association. Assembly of Security | negotiate attributes of a security association. Assembly of Security | |||
| Association Payloads requires great peace of mind. An SA may contain | Association Payloads requires great peace of mind. An SA payload MAY | |||
| multiple proposals, ordered from most preferred to least preferred. | contain multiple proposals. If there is more than one, they MUST be | |||
| Each proposal may contain multiple protocols (where a protocol is | ordered from most preferred to least preferred. Each proposal may | |||
| IKE, ESP, or AH), each protocol may contain multiple transforms, and | contain multiple IPsec protocols (where a protocol is IKE, ESP, or | |||
| each transform may contain multiple attributes. When parsing an SA, | AH), each protocol MAY contain multiple transforms, and each | |||
| an implementation MUST check that the total Payload Length is | transform MAY contain multiple attributes. When parsing an SA, an | |||
| consistent with the payload's internal lengths and counts. | implementation MUST check that the total Payload Length is consistent | |||
| Proposals, Transforms, and Attributes each have their own variable | with the payload's internal lengths and counts. Proposals, | |||
| length encodings. They are nested such that the Payload Length of an | Transforms, and Attributes each have their own variable length | |||
| SA includes the combined contents of the SA, Proposal, Transform, and | encodings. They are nested such that the Payload Length of an SA | |||
| includes the combined contents of the SA, Proposal, Transform, and | ||||
| Attribute information. The length of a Proposal includes the lengths | Attribute information. The length of a Proposal includes the lengths | |||
| of all Transforms and Attributes it contains. The length of a | of all Transforms and Attributes it contains. The length of a | |||
| Transform includes the lengths of all Attributes it contains. | Transform includes the lengths of all Attributes it contains. | |||
| The syntax of Security Associations, Proposals, Transforms, and | The syntax of Security Associations, Proposals, Transforms, and | |||
| Attributes is based on ISAKMP, however the semantics are somewhat | Attributes is based on ISAKMP, however the semantics are somewhat | |||
| different. The reason for the complexity and the hierarchy is to | different. The reason for the complexity and the hierarchy is to | |||
| allow for multiple possible combinations of algorithms to be encoded | allow for multiple possible combinations of algorithms to be encoded | |||
| in a single SA. Sometimes there is a choice of multiple algorithms, | in a single SA. Sometimes there is a choice of multiple algorithms, | |||
| while other times there is a combination of algorithms. For example, | while other times there is a combination of algorithms. For example, | |||
| an Initiator might want to propose using (AH w/MD5 and ESP w/3DES) OR | an Initiator might want to propose using (AH w/MD5 and ESP w/3DES) OR | |||
| (ESP w/MD5 and 3DES). | (ESP w/MD5 and 3DES). | |||
| One of the reasons the semantics of the SA payload has changed from | One of the reasons the semantics of the SA payload has changed from | |||
| ISAKMP and IKEv1 is to make the encodings more compact in common | ISAKMP and IKEv1 is to make the encodings more compact in common | |||
| cases. | cases. | |||
| The Proposal structure contains within it a Proposal # and a | The Proposal structure contains within it a Proposal # and an IPsec | |||
| SECURITY_PROTOCOL_ID. Each structure MUST have the same Proposal # | protocol ID. Each structure MUST have the same Proposal # as the | |||
| as the previous one or be one (1) greater. The first Proposal MUST | previous one or be one (1) greater. The first Proposal MUST have a | |||
| have a Proposal # of one (1). If two successive structures have the | Proposal # of one (1). If two successive structures have the same | |||
| same Proposal number, it means that the proposal consists of the | Proposal number, it means that the proposal consists of the first | |||
| first structure AND the second. So a proposal of AH AND ESP would | structure AND the second. So a proposal of AH AND ESP would have two | |||
| have two proposal structures, one for AH and one for ESP and both | proposal structures, one for AH and one for ESP and both would have | |||
| would have Proposal #1. A proposal of AH OR ESP would have two | Proposal #1. A proposal of AH OR ESP would have two proposal | |||
| proposal structures, one for AH with proposal #1 and one for ESP with | structures, one for AH with proposal #1 and one for ESP with proposal | |||
| proposal #2. | #2. | |||
| Each Proposal/Protocol structure is followed by one or more transform | Each Proposal/Protocol structure is followed by one or more transform | |||
| structures. The number of different transforms is generally | structures. The number of different transforms is generally | |||
| determined by the Protocol. AH generally has a single transform: an | determined by the Protocol. AH generally has a single transform: an | |||
| integrity check algorithm. ESP generally has two: an encryption | integrity check algorithm. ESP generally has two: an encryption | |||
| algorithm AND an integrity check algorithm. IKE generally has four | algorithm and an integrity check algorithm. IKE generally has four | |||
| transforms: a Diffie-Hellman group, an integrity check algorithm, a | transforms: a Diffie-Hellman group, an integrity check algorithm, a | |||
| prf algorithm, and an encryption algorithm. For each Protocol, the | prf algorithm, and an encryption algorithm. If an algorithm that | |||
| set of permissible transforms are assigned transform ID numbers, | combines encryption and integrity protection is proposed, it MUST be | |||
| which appear in the header of each transform. | proposed as an encryption algorithm and an integrity protection | |||
| algorithm MUST NOT be proposed. For each Protocol, the set of | ||||
| permissible transforms are assigned transform ID numbers, which | ||||
| appear in the header of each transform. | ||||
| If there are multiple transforms with the same Transform Type, the | If there are multiple transforms with the same Transform Type, the | |||
| proposal is an OR of those transforms. If there are multiple | proposal is an OR of those transforms. If there are multiple | |||
| Transforms with different Transform Types, the proposal is an AND of | Transforms with different Transform Types, the proposal is an AND of | |||
| the different groups. For example, to propose ESP with (3DES or IDEA) | the different groups. For example, to propose ESP with (3DES or IDEA) | |||
| and (HMAC_MD5 or HMAC_SHA), the ESP proposal would contain two | and (HMAC_MD5 or HMAC_SHA), the ESP proposal would contain two | |||
| Transform Type 1 candidates (one for 3DES and one for IDEA) and two | Transform Type 1 candidates (one for 3DES and one for IDEA) and two | |||
| Transform Type 2 candidates (one for HMAC_MD5 and one for HMAC_SHA). | Transform Type 2 candidates (one for HMAC_MD5 and one for HMAC_SHA). | |||
| This effectively proposes four combinations of algorithms. If the | This effectively proposes four combinations of algorithms. If the | |||
| Initiator wanted to propose only a subset of those - say (3DES and | Initiator wanted to propose only a subset of those - say (3DES and | |||
| HMAC_MD5) or (IDEA and HMAC_SHA), there is no way to encode that as | HMAC_MD5) or (IDEA and HMAC_SHA), there is no way to encode that as | |||
| multiple transforms within a single Proposal. Instead, the Initiator | multiple transforms within a single Proposal. Instead, the Initiator | |||
| would have to construct two different Proposals, each with two | would have to construct two different Proposals, each with two | |||
| transforms. | transforms. | |||
| A given transform MAY have one or more Attributes. Attributes are | A given transform MAY have one or more Attributes. Attributes are | |||
| necessary when the transform can be used in more than one way, as | necessary when the transform can be used in more than one way, as | |||
| when an encryption algorithm has a variable key size. The transform | when an encryption algorithm has a variable key size. The transform | |||
| would specify the algorithm and the attribute would specify the key | would specify the algorithm and the attribute would specify the key | |||
| size. Most transforms do not have attributes. | size. Most transforms do not have attributes. A transform MUST NOT | |||
| have multiple attributes of the same type. To propose alternate | ||||
| values for an attribute (for example, multiple key sizes for the AES | ||||
| encryption algorithm), and implementation MUST include multiple | ||||
| Transorms with the same Transform Type each with a single Attribute. | ||||
| Note that the semantics of Transforms and Attributes are quite | Note that the semantics of Transforms and Attributes are quite | |||
| different than in IKEv1. In IKEv1, a single Transform carried | different than in IKEv1. In IKEv1, a single Transform carried | |||
| multiple algorithms for a protocol with one carried in the Transform | multiple algorithms for a protocol with one carried in the Transform | |||
| and the others carried in the Attributes. | and the others carried in the Attributes. | |||
| 1 2 3 | 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! Next Payload !C! RESERVED ! Payload Length ! | ! Next Payload !C! RESERVED ! Payload Length ! | |||
| skipping to change at page 45, line 12 ¶ | skipping to change at page 46, line 15 ¶ | |||
| The payload type for the Security Association Payload is thirty | The payload type for the Security Association Payload is thirty | |||
| three (33). | three (33). | |||
| 3.3.1 Proposal Substructure | 3.3.1 Proposal Substructure | |||
| 1 2 3 | 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! 0 (last) or 2 ! RESERVED ! Proposal Length ! | ! 0 (last) or 2 ! RESERVED ! Proposal Length ! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! Proposal # ! Protocol-Id ! SPI Size !# of Transforms! | ! Proposal # ! Protocol ID ! SPI Size !# of Transforms! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ~ SPI (variable) ~ | ~ SPI (variable) ~ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! ! | ! ! | |||
| ~ <Transforms> ~ | ~ <Transforms> ~ | |||
| ! ! | ! ! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 7: Proposal Substructure | Figure 7: Proposal Substructure | |||
| skipping to change at page 45, line 46 ¶ | skipping to change at page 46, line 49 ¶ | |||
| o Proposal # (1 octet) - When a proposal is made, the first | o Proposal # (1 octet) - When a proposal is made, the first | |||
| proposal in an SA MUST be #1, and subsequent proposals | proposal in an SA MUST be #1, and subsequent proposals | |||
| MUST either be the same as the previous proposal (indicating | MUST either be the same as the previous proposal (indicating | |||
| an AND of the two proposals) or one more than the previous | an AND of the two proposals) or one more than the previous | |||
| proposal (indicating an OR of the two proposals). When a | proposal (indicating an OR of the two proposals). When a | |||
| proposal is accepted, all of the proposal numbers in the | proposal is accepted, all of the proposal numbers in the | |||
| SA MUST be the same and MUST match the number on the | SA MUST be the same and MUST match the number on the | |||
| proposal sent that was accepted. | proposal sent that was accepted. | |||
| o Protocol-Id (1 octet) - Specifies the protocol identifier | o Protocol ID (1 octet) - Specifies the IPsec protocol | |||
| for the current negotiation. Zero (0) indicates IKE, | identifier for the current negotiation. One (1) indicates | |||
| one (1) indicated ESP, and two (2) indicates AH. | IKE, two (2) indicates AH, and three (3) indicates ESP. | |||
| o SPI Size (1 octet) - For an initial IKE_SA negotiation, | o SPI Size (1 octet) - For an initial IKE_SA negotiation, | |||
| this field MUST be zero; the SPI is obtained from the | this field MUST be zero; the SPI is obtained from the | |||
| outer header. During subsequent negotiations, | outer header. During subsequent negotiations, | |||
| it is equal to the size, in octets, of the SPI of the | it is equal to the size, in octets, of the SPI of the | |||
| corresponding protocol (8 for IKE, 4 for ESP and AH). | corresponding protocol (8 for IKE, 4 for ESP and AH). | |||
| o # of Transforms (1 octet) - Specifies the number of | o # of Transforms (1 octet) - Specifies the number of | |||
| transforms in this proposal. | transforms in this proposal. | |||
| skipping to change at page 47, line 10 ¶ | skipping to change at page 48, line 13 ¶ | |||
| o Transform Type (1 octet) - The type of transform being specified | o Transform Type (1 octet) - The type of transform being specified | |||
| in this transform. Different protocols support different | in this transform. Different protocols support different | |||
| transform types. For some protocols, some of the transforms | transform types. For some protocols, some of the transforms | |||
| may be optional. If a transform is optional and the initiator | may be optional. If a transform is optional and the initiator | |||
| wishes to propose that the transform be omitted, no transform | wishes to propose that the transform be omitted, no transform | |||
| of the given type is included in the proposal. If the | of the given type is included in the proposal. If the | |||
| initiator wishes to make use of the transform optional to | initiator wishes to make use of the transform optional to | |||
| the responder, she includes a transform substructure with | the responder, she includes a transform substructure with | |||
| transform ID = 0 as one of the options. | transform ID = 0 as one of the options. | |||
| o Transform ID (1 octet) - The specific instance of the transform | o Transform ID (2 octets) - The specific instance of the transform | |||
| type being proposed. | type being proposed. | |||
| Transform Type Values | Transform Type Values | |||
| Transform Used In | Transform Used In | |||
| Type | Type | |||
| Encryption Algorithm 1 (IKE and ESP) | Encryption Algorithm 1 (IKE and ESP) | |||
| Pseudo-random Function 2 (IKE) | Pseudo-random Function 2 (IKE) | |||
| Integrity Algorithm 3 (IKE, AH, and optional in ESP) | Integrity Algorithm 3 (IKE, AH, and optional in ESP) | |||
| Diffie-Hellman Group 4 (IKE and optional in AH and ESP) | Diffie-Hellman Group 4 (IKE and optional in AH and ESP) | |||
| skipping to change at page 51, line 49 ¶ | skipping to change at page 53, line 4 ¶ | |||
| acceptable). If there are multiple proposals, the Responder MUST | acceptable). If there are multiple proposals, the Responder MUST | |||
| choose a single proposal number and return all of the Proposal | choose a single proposal number and return all of the Proposal | |||
| substructures with that Proposal number. If there are multiple | substructures with that Proposal number. If there are multiple | |||
| Transforms with the same type the Responder MUST choose a single one. | Transforms with the same type the Responder MUST choose a single one. | |||
| Any attributes of a selected transform MUST be returned unmodified. | Any attributes of a selected transform MUST be returned unmodified. | |||
| The Initiator of an exchange MUST check that the accepted offer is | The Initiator of an exchange MUST check that the accepted offer is | |||
| consistent with one of its proposals, and if not that response MUST | consistent with one of its proposals, and if not that response MUST | |||
| be rejected. | be rejected. | |||
| Negotiating Diffie-Hellman groups presents some special challenges. | Negotiating Diffie-Hellman groups presents some special challenges. | |||
| SA offers include proposed attributes and a Diffie-Hellman public | SA offers include proposed attributes and a Diffie-Hellman public | |||
| number (KE) in the same message. If in the initial exchange the | number (KE) in the same message. If in the initial exchange the | |||
| Initiator offers to use one of several Diffie-Hellman groups, it | Initiator offers to use one of several Diffie-Hellman groups, it | |||
| SHOULD pick the one the Responder is most likely to accept and | SHOULD pick the one the Responder is most likely to accept and | |||
| include a KE corresponding to that group. If the guess turns out to | include a KE corresponding to that group. If the guess turns out to | |||
| be wrong, the Responder will indicate the correct group in the | be wrong, the Responder will indicate the correct group in the | |||
| response and the Initiator SHOULD pick an element of that group for | response and the Initiator SHOULD pick an element of that group for | |||
| its KE value when retrying the first message. It SHOULD, however, | its KE value when retrying the first message. It SHOULD, however, | |||
| continue to propose its full supported set of groups in order to | continue to propose its full supported set of groups in order to | |||
| prevent a man in the middle downgrade attack. | prevent a man in the middle downgrade attack. | |||
| Implementation Note: | Implementation Note: | |||
| Certain negotiable attributes can have ranges or could have | Certain negotiable attributes can have ranges or could have | |||
| multiple acceptable values. These include the key length of a | multiple acceptable values. These include the key length of a | |||
| variable key length symmetric cipher. To further interoperability | variable key length symmetric cipher. To further interoperability | |||
| and to support upgrading endpoints independently, implementers of | and to support upgrading endpoints independently, implementers of | |||
| this protocol SHOULD accept values which they deem to supply | this protocol SHOULD accept values which they deem to supply | |||
| greater security. For instance if a peer is configured to accept a | greater security. For instance if a peer is configured to accept a | |||
| variable lengthed cipher with a key length of X bits and is | variable lengthed cipher with a key length of X bits and is | |||
| offered that cipher with a larger key length an implementation | offered that cipher with a larger key length, the implementation | |||
| SHOULD accept the offer. | SHOULD accept the offer if it supports use of the longer key. | |||
| Support of this capability allows an implementation to express a | Support of this capability allows an implementation to express a | |||
| concept of "at least" a certain level of security-- "a key length of | concept of "at least" a certain level of security-- "a key length of | |||
| _at least_ X bits for cipher foo". | _at least_ X bits for cipher Y". | |||
| 3.4 Key Exchange Payload | 3.4 Key Exchange Payload | |||
| The Key Exchange Payload, denoted KE in this memo, is used to | The Key Exchange Payload, denoted KE in this memo, is used to | |||
| exchange Diffie-Hellman public numbers as part of a Diffie-Hellman | exchange Diffie-Hellman public numbers as part of a Diffie-Hellman | |||
| key exchange. The Key Exchange Payload consists of the IKE generic | key exchange. The Key Exchange Payload consists of the IKE generic | |||
| payload header followed by the Diffie-Hellman public value itself. | payload header followed by the Diffie-Hellman public value itself. | |||
| 1 2 3 | 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| skipping to change at page 53, line 8 ¶ | skipping to change at page 54, line 12 ¶ | |||
| Figure 10: Key Exchange Payload Format | Figure 10: Key Exchange Payload Format | |||
| A key exchange payload is constructed by copying one's Diffie-Hellman | A key exchange payload is constructed by copying one's Diffie-Hellman | |||
| public value into the "Key Exchange Data" portion of the payload. | public value into the "Key Exchange Data" portion of the payload. | |||
| The length of the Diffie-Hellman public value MUST be equal to the | The length of the Diffie-Hellman public value MUST be equal to the | |||
| length of the prime modulus over which the exponentiation was | length of the prime modulus over which the exponentiation was | |||
| performed, prepending zero bits to the value if necessary. | performed, prepending zero bits to the value if necessary. | |||
| The DH Group # identifies the Diffie-Hellman group in which the Key | The DH Group # identifies the Diffie-Hellman group in which the Key | |||
| Exchange Data was computed (see Appendix B). If the selected | Exchange Data was computed (see section 3.3.2). If the selected | |||
| proposal uses a different Diffie-Hellman group, the message MUST be | proposal uses a different Diffie-Hellman group, the message MUST be | |||
| rejected with a Notify payload of type INVALID_KE_PAYLOAD. | rejected with a Notify payload of type INVALID_KE_PAYLOAD. | |||
| The payload type for the Key Exchange payload is thirty four (34). | The payload type for the Key Exchange payload is thirty four (34). | |||
| 3.5 Identification Payloads | 3.5 Identification Payloads | |||
| The Identification Payloads, denoted IDi and IDr in this memo, allow | The Identification Payloads, denoted IDi and IDr in this memo, allow | |||
| peers to assert an identity to one another. This identity may be used | peers to assert an identity to one another. This identity may be used | |||
| for policy lookup, but does not necessarily have to match anything in | for policy lookup, but does not necessarily have to match anything in | |||
| skipping to change at page 54, line 52 ¶ | skipping to change at page 56, line 7 ¶ | |||
| The binary DER encoding of an ASN.1 X.500 GeneralName | The binary DER encoding of an ASN.1 X.500 GeneralName | |||
| [X.509]. | [X.509]. | |||
| ID_KEY_ID 11 | ID_KEY_ID 11 | |||
| An opaque octet stream which may be used to pass an account | An opaque octet stream which may be used to pass an account | |||
| name or to pass vendor-specific information necessary to do | name or to pass vendor-specific information necessary to do | |||
| certain proprietary types of identification. | certain proprietary types of identification. | |||
| Reserved to IANA 12-200 | ||||
| Reserved for private use 201-255 | ||||
| Two implementations will interoperate only if each can generate a | Two implementations will interoperate only if each can generate a | |||
| type of ID acceptable to the other. To assure maximum | type of ID acceptable to the other. To assure maximum | |||
| interoperability, implementations MUST be configurable to send at | interoperability, implementations MUST be configurable to send at | |||
| least one of ID_IPV4_ADDR, ID_FQDN, ID_RFC822_ADDR, or ID_KEY_ID, and | least one of ID_IPV4_ADDR, ID_FQDN, ID_RFC822_ADDR, or ID_KEY_ID, and | |||
| MUST be configurable to accept all of these types. Implementations | MUST be configurable to accept all of these types. Implementations | |||
| SHOULD be capable of generating and accepting all of these types. | SHOULD be capable of generating and accepting all of these types. | |||
| 3.6 Certificate Payload | 3.6 Certificate Payload | |||
| The Certificate Payload, denoted CERT in this memo, provides a means | The Certificate Payload, denoted CERT in this memo, provides a means | |||
| skipping to change at page 56, line 7 ¶ | skipping to change at page 57, line 15 ¶ | |||
| PKCS #7 wrapped X.509 certificate 1 | PKCS #7 wrapped X.509 certificate 1 | |||
| PGP Certificate 2 | PGP Certificate 2 | |||
| DNS Signed Key 3 | DNS Signed Key 3 | |||
| X.509 Certificate - Signature 4 | X.509 Certificate - Signature 4 | |||
| Kerberos Token 6 | Kerberos Token 6 | |||
| Certificate Revocation List (CRL) 7 | Certificate Revocation List (CRL) 7 | |||
| Authority Revocation List (ARL) 8 | Authority Revocation List (ARL) 8 | |||
| SPKI Certificate 9 | SPKI Certificate 9 | |||
| X.509 Certificate - Attribute 10 | X.509 Certificate - Attribute 10 | |||
| Raw RSA Key 11 | Raw RSA Key 11 | |||
| Hash and URL of PKIX certificate 12 | Hash and URL of X.509 certificate 12 | |||
| Hash and URL of PKIX bundle 13 | Hash and URL of X.509 bundle 13 | |||
| RESERVED 14 - 200 | RESERVED to IANA 14 - 200 | |||
| PRIVATE USE 201 - 255 | PRIVATE USE 201 - 255 | |||
| o Certificate Data (variable length) - Actual encoding of | o Certificate Data (variable length) - Actual encoding of | |||
| certificate data. The type of certificate is indicated | certificate data. The type of certificate is indicated | |||
| by the Certificate Encoding field. | by the Certificate Encoding field. | |||
| The payload type for the Certificate Payload is thirty seven (37). | The payload type for the Certificate Payload is thirty seven (37). | |||
| Specific syntax is for some of the certificate type codes above is | Specific syntax is for some of the certificate type codes above is | |||
| not defined in this document. The types whose syntax is defined in | not defined in this document. The types whose syntax is defined in | |||
| this document are: | this document are: | |||
| X.509 Certificate - Signature (4) contains a BER encoded X.509 | X.509 Certificate - Signature (4) contains a BER encoded X.509 | |||
| certificate. | certificate whose public key is used to validate the sender's AUTH | |||
| payload. | ||||
| Certificate Revocation List (7) contains a BER encoded X.509 | Certificate Revocation List (7) contains a BER encoded X.509 | |||
| certificate revocation list. | certificate revocation list. | |||
| Raw RSA Key (11) contains a PKCS #1 encoded RSA key. | Raw RSA Key (11) contains a PKCS #1 encoded RSA key. | |||
| Hash and URL of PKIX certificate (12) contains a 20 octet SHA-1 | Hash and URL encodings (12-13) allow IKE messages to remain short | |||
| hash of a PKIX certificate followed by a variable length URL that | by replacing long data structures with a 20 octet SHA-1 hash of | |||
| resolves to the BER encoded certificate itself. | the replaced value followed by a variable length URL that resolves | |||
| to the BER encoded data structure itself. This improves efficiency | ||||
| when the endpoints have certificate data cached and makes IKE less | ||||
| subject to denial of service attacks that become easier to mount | ||||
| when IKE messages are large enough to require IP fragmentation | ||||
| [KPS03]. | ||||
| Hash and URL of PKIX bundle (13) contains a 20 octet SHA-1 hash of | Use the following ASN.1 definition for an X.509 bundle: | |||
| a PKIX certificate bundle followed by a variable length URL the | ||||
| resolves to the BER encoded certificate bundle itself. The bundle | ||||
| is a BER encoded SEQUENCE of certificates and CRLs. | ||||
| Use the following ASN.1 definition (suggested by Nicholas | CertBundle | |||
| Williams): | { iso(1) identified-organization(3) dod(6) internet(1) | |||
| security(5) mechanisms(5) pkix(7) id-mod(0) | ||||
| id-mod-cert-bundle(TBD) } | ||||
| DEFINITION EXPLICIT TAGS ::= | DEFINITIONS EXPLICIT TAGS ::= | |||
| BEGIN | BEGIN | |||
| IMPORTS Certificate, CertificateList FROM PKIX1Explicit93 | IMPORTS | |||
| Certificate, CertificateList | ||||
| FROM PKIX1Explicit88 | ||||
| { iso(1) identified-organization(3) dod(6) | ||||
| internet(1) security(5) mechanisms(5) pkix(7) | ||||
| id-mod(0) id-pkix1-explicit(18) } ; | ||||
| CertificateOrCRL ::= CHOICE { | CertificateOrCRL ::= CHOICE { | |||
| cert [0] Certificate, | cert [0] Certificate, | |||
| crl [1] CertificateList | crl [1] CertificateList } | |||
| } | ||||
| CertificateBundle ::= SEQUENCE OF CertificateOrCRL | CertificateBundle ::= SEQUENCE OF CertificateOrCRL | |||
| END | ||||
| END | ||||
| Implementations MUST be capable of being configured to send and | Implementations MUST be capable of being configured to send and | |||
| accept up to four X.509 certificates in support of authentication. | accept up to four X.509 certificates in support of authentication. | |||
| Implementations SHOULD be capable of being configured to send and | Implementations SHOULD be capable of being configured to send and | |||
| accept Raw RSA keys and the two Hash and URL formats. If multiple | accept Raw RSA keys and the first two Hash and URL formats. If | |||
| certificates are sent, the first certificate MUST contain the public | multiple certificates are sent, the first certificate MUST contain | |||
| key used to sign the AUTH payload. The other certificates may be sent | the public key used to sign the AUTH payload. The other certificates | |||
| in any order. | may be sent in any order. | |||
| 3.7 Certificate Request Payload | 3.7 Certificate Request Payload | |||
| The Certificate Request Payload, denoted CERTREQ in this memo, | The Certificate Request Payload, denoted CERTREQ in this memo, | |||
| provides a means to request preferred certificates via IKE and can | provides a means to request preferred certificates via IKE and can | |||
| appear in the IKE_INIT_SA response and/or the IKE_AUTH request. | appear in the IKE_INIT_SA response and/or the IKE_AUTH request. | |||
| Certificate Request payloads MAY be included in an exchange when the | Certificate Request payloads MAY be included in an exchange when the | |||
| sender needs to get the certificate of the receiver. If multiple CAs | sender needs to get the certificate of the receiver. If multiple CAs | |||
| are trusted and the cert encoding does not allow a list, then | are trusted and the cert encoding does not allow a list, then | |||
| multiple Certificate Request payloads SHOULD be transmitted. | multiple Certificate Request payloads SHOULD be transmitted. | |||
| skipping to change at page 61, line 12 ¶ | skipping to change at page 62, line 12 ¶ | |||
| message to indicate sender capabilities or to modify the meaning of | message to indicate sender capabilities or to modify the meaning of | |||
| the request. | the request. | |||
| The Notify Payload is defined as follows: | The Notify Payload is defined as follows: | |||
| 1 2 3 | 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! Next Payload !C! RESERVED ! Payload Length ! | ! Next Payload !C! RESERVED ! Payload Length ! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! S_Protocol_ID ! SPI Size ! Notify Message Type ! | ! Protocol ID ! SPI Size ! Notify Message Type ! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! ! | ! ! | |||
| ~ Security Parameter Index (SPI) ~ | ~ Security Parameter Index (SPI) ~ | |||
| ! ! | ! ! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! ! | ! ! | |||
| ~ Notification Data ~ | ~ Notification Data ~ | |||
| ! ! | ! ! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 16: Notification Payload Format | Figure 16: Notification Payload Format | |||
| o SECURITY_PROTOCOL_ID (1 octet) - If this notification concerns | o Protocol ID (1 octet) - If this notification concerns | |||
| an existing SA, this field indicates the type of that SA. | an existing SA, this field indicates the type of that SA. | |||
| For IKE_SA notifications, this field MUST be one (1). For | For IKE_SA notifications, this field MUST be one (1). For | |||
| notifications concerning IPsec SAs this field MUST contain | notifications concerning IPsec SAs this field MUST contain | |||
| either (2) to indicate AH or (3) to indicate ESP. For | either (2) to indicate AH or (3) to indicate ESP. For | |||
| notifications which do not relate to an existing SA, this | notifications which do not relate to an existing SA, this | |||
| field MUST be sent as zero and MUST be ignored on receipt. | field MUST be sent as zero and MUST be ignored on receipt. | |||
| All other values for this field are reserved to IANA for future | All other values for this field are reserved to IANA for future | |||
| assignment. | assignment. | |||
| o SPI Size (1 octet) - Length in octets of the SPI as defined by | o SPI Size (1 octet) - Length in octets of the SPI as defined by | |||
| the SECURITY_PROTOCOL_ID or zero if no SPI is applicable. For a | the IPsec protocol ID or zero if no SPI is applicable. For a | |||
| notification concerning the IKE_SA, the SPI Size MUST be zero. | notification concerning the IKE_SA, the SPI Size MUST be zero. | |||
| o Notify Message Type (2 octets) - Specifies the type of | o Notify Message Type (2 octets) - Specifies the type of | |||
| notification message. | notification message. | |||
| o SPI (variable length) - Security Parameter Index. | o SPI (variable length) - Security Parameter Index. | |||
| o Notification Data (variable length) - Informational or error data | o Notification Data (variable length) - Informational or error data | |||
| transmitted in addition to the Notify Message Type. Values for | transmitted in addition to the Notify Message Type. Values for | |||
| this field are type specific (see below). | this field are type specific (see below). | |||
| skipping to change at page 63, line 5 ¶ | skipping to change at page 64, line 5 ¶ | |||
| specified in the header. The closest version number that the | specified in the header. The closest version number that the | |||
| recipient can support will be in the reply header. | recipient can support will be in the reply header. | |||
| INVALID_SYNTAX 7 | INVALID_SYNTAX 7 | |||
| Indicates the IKE message was received was invalid because | Indicates the IKE message was received was invalid because | |||
| some type, length, or value was out of range or because the | some type, length, or value was out of range or because the | |||
| request was rejected for policy reasons. To avoid a denial | request was rejected for policy reasons. To avoid a denial | |||
| of service attack using forged messages, this status may | of service attack using forged messages, this status may | |||
| only be returned for and in an encrypted packet if the | only be returned for and in an encrypted packet if the | |||
| MESSAGE_ID and cryptographic checksum were valid. To avoid | message ID and cryptographic checksum were valid. To avoid | |||
| leaking information to someone probing a node, this status | leaking information to someone probing a node, this status | |||
| MUST be sent in response to any error not covered by one of | MUST be sent in response to any error not covered by one of | |||
| the other status types. To aid debugging, more detailed | the other status types. To aid debugging, more detailed | |||
| error information SHOULD be written to a console or log. | error information SHOULD be written to a console or log. | |||
| INVALID_MESSAGE_ID 9 | INVALID_MESSAGE_ID 9 | |||
| Sent when an IKE MESSAGE_ID outside the supported window is | Sent when an IKE message ID outside the supported window is | |||
| received. This Notify MUST NOT be sent in a response; the | received. This Notify MUST NOT be sent in a response; the | |||
| invalid request MUST NOT be acknowledged. Instead, inform | invalid request MUST NOT be acknowledged. Instead, inform | |||
| the other side by initiating an INFORMATIONAL exchange with | the other side by initiating an INFORMATIONAL exchange with | |||
| Notification data containing the four octet invalid | Notification data containing the four octet invalid message | |||
| MESSAGE_ID. Sending this notification is optional and | ID. Sending this notification is optional and notifications | |||
| notifications of this type MUST be rate limited. | of this type MUST be rate limited. | |||
| INVALID_SPI 11 | INVALID_SPI 11 | |||
| MAY be sent in an IKE INFORMATIONAL Exchange when a node | MAY be sent in an IKE INFORMATIONAL Exchange when a node | |||
| receives an ESP or AH packet with an invalid SPI. The | receives an ESP or AH packet with an invalid SPI. The | |||
| Notification Data contains the SPI of the invalid packet. | Notification Data contains the SPI of the invalid packet. | |||
| This usually indicates a node has rebooted and forgotten an | This usually indicates a node has rebooted and forgotten an | |||
| SA. If this Informational Message is sent outside the | SA. If this Informational Message is sent outside the | |||
| context of an IKE_SA, it should only be used by the | context of an IKE_SA, it should only be used by the | |||
| recipient as a "hint" that something might be wrong (because | recipient as a "hint" that something might be wrong (because | |||
| skipping to change at page 64, line 37 ¶ | skipping to change at page 65, line 37 ¶ | |||
| Sent by responder in the case where CP(CFG_REQUEST) was | Sent by responder in the case where CP(CFG_REQUEST) was | |||
| expected but not received, and so is a conflict with locally | expected but not received, and so is a conflict with locally | |||
| configured policy. There is no associated data. | configured policy. There is no associated data. | |||
| TS_UNACCEPTABLE 38 | TS_UNACCEPTABLE 38 | |||
| Indicates that none of the addresses/protocols/ports in the | Indicates that none of the addresses/protocols/ports in the | |||
| supplied traffic selectors is acceptable. | supplied traffic selectors is acceptable. | |||
| INVALID_SELECTORS 39 | ||||
| MAY be sent in an IKE INFORMATIONAL Exchange when a node | ||||
| receives an ESP or AH packet whose selectors do not match | ||||
| those of the SA on which it was delivered (and which caused | ||||
| the packet to be dropped). The Notification Data contains | ||||
| the start of the offending packet (as in ICMP messages) and | ||||
| the SPI field of the notification is set to match the SPI of | ||||
| the IPsec SA. | ||||
| RESERVED TO IANA - Error types 39 - 8191 | RESERVED TO IANA - Error types 39 - 8191 | |||
| Private Use - Errors 8192 - 16383 | Private Use - Errors 8192 - 16383 | |||
| NOTIFY MESSAGES - STATUS TYPES Value | NOTIFY MESSAGES - STATUS TYPES Value | |||
| ------------------------------ ----- | ------------------------------ ----- | |||
| INITIAL_CONTACT 16384 | INITIAL_CONTACT 16384 | |||
| This notification asserts that this IKE_SA is the only | This notification asserts that this IKE_SA is the only | |||
| IKE_SA currently active between the authenticated | IKE_SA currently active between the authenticated | |||
| identities. It MAY be sent when an IKE_SA is established | identities. It MAY be sent when an IKE_SA is established | |||
| after a crash, and the recipient MAY use this information to | after a crash, and the recipient MAY use this information to | |||
| delete any other IKE_SAs it has to the same authenticated | delete any other IKE_SAs it has to the same authenticated | |||
| skipping to change at page 67, line 45 ¶ | skipping to change at page 69, line 5 ¶ | |||
| Private Use - STATUS TYPES 40960 - 65535 | Private Use - STATUS TYPES 40960 - 65535 | |||
| 3.11 Delete Payload | 3.11 Delete Payload | |||
| The Delete Payload, denoted D in this memo, contains a protocol | The Delete Payload, denoted D in this memo, contains a protocol | |||
| specific security association identifier that the sender has removed | specific security association identifier that the sender has removed | |||
| from its security association database and is, therefore, no longer | from its security association database and is, therefore, no longer | |||
| valid. Figure 17 shows the format of the Delete Payload. It is | valid. Figure 17 shows the format of the Delete Payload. It is | |||
| possible to send multiple SPIs in a Delete payload, however, each SPI | possible to send multiple SPIs in a Delete payload, however, each SPI | |||
| MUST be for the same protocol. Mixing of Protocol Identifiers MUST | MUST be for the same protocol. Mixing of protocol identifiers MUST | |||
| NOT be performed in a the Delete payload. It is permitted, however, | NOT be performed in a the Delete payload. It is permitted, however, | |||
| to include multiple Delete payloads in a single INFORMATIONAL | to include multiple Delete payloads in a single INFORMATIONAL | |||
| Exchange where each Delete payload lists SPIs for a different | Exchange where each Delete payload lists SPIs for a different | |||
| protocol. | protocol. | |||
| Deletion of the IKE_SA is indicated by a SECURITY_PROTOCOL_ID of 1 | Deletion of the IKE_SA is indicated by a protocol ID of 1 (IKE) but | |||
| (IKE) but no SPIs. Deletion of a CHILD_SA, such as ESP or AH, will | no SPIs. Deletion of a CHILD_SA, such as ESP or AH, will contain the | |||
| contain the SECURITY_PROTOCOL_ID of that protocol (2 for AH, 3 for | IPsec protocol ID of that protocol (2 for AH, 3 for ESP) and the SPI | |||
| ESP) and the SPI is the SPI the sending endpoint would expect in | is the SPI the sending endpoint would expect in inbound ESP or AH | |||
| inbound ESP or AH packets. | packets. | |||
| The Delete Payload is defined as follows: | The Delete Payload is defined as follows: | |||
| 1 2 3 | 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! Next Payload !C! RESERVED ! Payload Length ! | ! Next Payload !C! RESERVED ! Payload Length ! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! S_PROTOCOL_ID ! SPI Size ! # of SPIs ! | ! Protocol ID ! SPI Size ! # of SPIs ! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! ! | ! ! | |||
| ~ Security Parameter Index(es) (SPI) ~ | ~ Security Parameter Index(es) (SPI) ~ | |||
| ! ! | ! ! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 17: Delete Payload Format | Figure 17: Delete Payload Format | |||
| o SECURITY_PROTOCOL_ID (1 octet) - Must be 1 for an IKE_SA, 2 | o Protocol ID (1 octet) - Must be 1 for an IKE_SA, 2 for AH, or | |||
| for AH, or 3 for ESP. | 3 for ESP. | |||
| o SPI Size (1 octet) - Length in octets of the SPI as defined by | o SPI Size (1 octet) - Length in octets of the SPI as defined by | |||
| the SECURITY_PROTOCOL_ID. Zero for IKE (SPI is in message | the protocol ID. It MUST be zero for IKE (SPI is in message | |||
| header) or four for AH and ESP. | header) or four for AH and ESP. | |||
| o # of SPIs (2 octets) - The number of SPIs contained in the Delete | o # of SPIs (2 octets) - The number of SPIs contained in the Delete | |||
| payload. The size of each SPI is defined by the SPI Size field. | payload. The size of each SPI is defined by the SPI Size field. | |||
| o Security Parameter Index(es) (variable length) - Identifies the | o Security Parameter Index(es) (variable length) - Identifies the | |||
| specific security association(s) to delete. The length of this | specific security association(s) to delete. The length of this | |||
| field is determined by the SPI Size and # of SPIs fields. | field is determined by the SPI Size and # of SPIs fields. | |||
| The payload type for the Delete Payload is forty two (42). | The payload type for the Delete Payload is forty two (42). | |||
| skipping to change at page 71, line 10 ¶ | skipping to change at page 72, line 10 ¶ | |||
| The payload type for the Traffic Selector payload is forty four (44) | The payload type for the Traffic Selector payload is forty four (44) | |||
| for addresses at the initiator's end of the SA and forty five (45) | for addresses at the initiator's end of the SA and forty five (45) | |||
| for addresses at the responder's end. | for addresses at the responder's end. | |||
| 3.13.1 Traffic Selector | 3.13.1 Traffic Selector | |||
| 1 2 3 | 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! TS Type ! Protocol_ID* | Selector Length | | ! TS Type !IP Protocol ID*| Selector Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Start_Port* | End_Port* | | | Start Port* | End Port* | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! ! | ! ! | |||
| ~ Starting Address* ~ | ~ Starting Address* ~ | |||
| ! ! | ! ! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ! ! | ! ! | |||
| ~ Ending Address* ~ | ~ Ending Address* ~ | |||
| ! ! | ! ! | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 20: Traffic Selector | Figure 20: Traffic Selector | |||
| *Note: all fields other than TS Type and Selector Length depend on | *Note: all fields other than TS Type and Selector Length depend on | |||
| the TS Type. The fields shown are for TS Types 7 and 8, the only two | the TS Type. The fields shown are for TS Types 7 and 8, the only two | |||
| values currently defined. | values currently defined. | |||
| o TS Type (one octet) - Specifies the type of traffic selector. | o TS Type (one octet) - Specifies the type of traffic selector. | |||
| o Protocol ID (1 octet) - Value specifying an associated IP | o IP protocol ID (1 octet) - Value specifying an associated IP | |||
| protocol ID (e.g., UDP/TCP/ICMP). A value of zero means that | protocol ID (e.g., UDP/TCP/ICMP). A value of zero means that | |||
| the Protocol ID is not relevant to this traffic selector-- | the protocol ID is not relevant to this traffic selector-- | |||
| the SA can carry all protocols. | the SA can carry all protocols. | |||
| o Selector Length - Specifies the length of this Traffic | o Selector Length - Specifies the length of this Traffic | |||
| Selector Substructure including the header. | Selector Substructure including the header. | |||
| o Start_Port (2 octets) - Value specifying the smallest port | o Start Port (2 octets) - Value specifying the smallest port | |||
| number allowed by this Traffic Selector. For protocols for | number allowed by this Traffic Selector. For protocols for | |||
| which port is undefined, or if all ports are allowed by | which port is undefined, or if all ports are allowed by | |||
| this Traffic Selector, this field MUST be zero. For the | this Traffic Selector, this field MUST be zero. For the | |||
| ICMP protocol, the two one octet fields Type and Code are | ICMP protocol, the two one octet fields Type and Code are | |||
| treated as a single 16 bit integer port number for the | treated as a single 16 bit integer port number for the | |||
| purposes of filtering based on this field. | purposes of filtering based on this field. | |||
| o End_Port (2 octets) - Value specifying the largest port | o End Port (2 octets) - Value specifying the largest port | |||
| number allowed by this Traffic Selector. For protocols for | number allowed by this Traffic Selector. For protocols for | |||
| which port is undefined, or if all ports are allowed by | which port is undefined, or if all ports are allowed by | |||
| this Traffic Selector, this field MUST be 65535. For the | this Traffic Selector, this field MUST be 65535. For the | |||
| ICMP protocol, the two one octet fields Type and Code are | ICMP protocol, the two one octet fields Type and Code are | |||
| treated as a single 16 bit integer port number for the | treated as a single 16 bit integer port number for the | |||
| purposed of filtering based on this field. | purposed of filtering based on this field. | |||
| o Starting Address - The smallest address included in this | o Starting Address - The smallest address included in this | |||
| Traffic Selector (length determined by TS type). | Traffic Selector (length determined by TS type). | |||
| skipping to change at page 81, line 11 ¶ | skipping to change at page 82, line 11 ¶ | |||
| Note that since IKE passes an indication of initiator identity in | Note that since IKE passes an indication of initiator identity in | |||
| message 3 of the protocol, EAP based prompts for Identity SHOULD NOT | message 3 of the protocol, EAP based prompts for Identity SHOULD NOT | |||
| be used. | be used. | |||
| 4 Conformance Requirements | 4 Conformance Requirements | |||
| In order to assure that all implementations of IKEv2 can | In order to assure that all implementations of IKEv2 can | |||
| interoperate, there are MUST support requirements in addition to | interoperate, there are MUST support requirements in addition to | |||
| those listed elsewhere. Of course, IKEv2 is a security protocol, and | those listed elsewhere. Of course, IKEv2 is a security protocol, and | |||
| one of its major functions is preventing the bad guys from | one of its major functions is to only allow authorized parties to | |||
| interoperating with one's systems. So a particular implementation may | successfully complete establishment of SAs. So a particular | |||
| be configured with any of a number of restrictions concerning | implementation may be configured with any of a number of restrictions | |||
| algorithms and trusted authorities that will prevent universal | concerning algorithms and trusted authorities that will prevent | |||
| interoperability. | universal interoperability. | |||
| IKEv2 is designed to permit minimal implementations that can | IKEv2 is designed to permit minimal implementations that can | |||
| interoperate with all compliant implementations. There are a series | interoperate with all compliant implementations. There are a series | |||
| of optional features that can easily be ignored by a particular | of optional features that can easily be ignored by a particular | |||
| implementation if it does not support that feature. Those features | implementation if it does not support that feature. Those features | |||
| include: | include: | |||
| Ability to negotiate SAs through a NAT and tunnel the resulting ESP | Ability to negotiate SAs through a NAT and tunnel the resulting | |||
| SA over UDP. | ESP SA over UDP. | |||
| Ability to request (and respond to a request for) a temporary IP | Ability to request (and respond to a request for) a temporary IP | |||
| address on the remote end of a tunnel. | address on the remote end of a tunnel. | |||
| Ability to support various types of legacy authentication. | Ability to support various types of legacy authentication. | |||
| Ability to support window sizes greater than one. | Ability to support window sizes greater than one. | |||
| Ability to establish multiple ESP and/or AH SAs within a single | Ability to establish multiple ESP and/or AH SAs within a single | |||
| IKE_SA. | IKE_SA. | |||
| Ability to rekey SAs. | Ability to rekey SAs. | |||
| To assure interoperability, all implementations MUST be capable of | To assure interoperability, all implementations MUST be capable of | |||
| parsing all payload types (if only to skip over them) and to ignore | parsing all payload types (if only to skip over them) and to ignore | |||
| payload types that it does not support unless the critical bit is set | payload types that it does not support unless the critical bit is set | |||
| in the payload header. If the critical bit is set in an unsupported | in the payload header. If the critical bit is set in an unsupported | |||
| payload header, all implementations MUST reject the messages | payload header, all implementations MUST reject the messages | |||
| containing those payloads. | containing those payloads. | |||
| Every implementation MUST be capable of doing four message | Every implementation MUST be capable of doing four message | |||
| IKE_SA_INIT and IKE_AUTH exchanges establishing two SAs (one for IKE, | IKE_SA_INIT and IKE_AUTH exchanges establishing two SAs (one for IKE, | |||
| skipping to change at page 83, line 11 ¶ | skipping to change at page 84, line 11 ¶ | |||
| Shared key authentication where the ID passes is any of ID_KEY_ID, | Shared key authentication where the ID passes is any of ID_KEY_ID, | |||
| ID_FQDN, or ID_RFC822_ADDR. | ID_FQDN, or ID_RFC822_ADDR. | |||
| Authentication where the responder is authenticated using PKIX | Authentication where the responder is authenticated using PKIX | |||
| Certificates and the initiator is authenticated using shared key | Certificates and the initiator is authenticated using shared key | |||
| authentication. | authentication. | |||
| 5 Security Considerations | 5 Security Considerations | |||
| Repeated re-keying using CREATE_CHILD_SA without PFS leaves all SAs | Repeated rekeying using CREATE_CHILD_SA without PFS leaves all SAs | |||
| vulnerable to cryptanalysis of a single key or overrun of either | vulnerable to cryptanalysis of a single key or overrun of either | |||
| endpoint. Implementers should take note of this fact and set a limit | endpoint. Implementers should take note of this fact and set a limit | |||
| on CREATE_CHILD_SA exchanges between exponentiations. This memo does | on CREATE_CHILD_SA exchanges between exponentiations. This memo does | |||
| not prescribe such a limit. | not prescribe such a limit. | |||
| The strength of a key derived from a Diffie-Hellman exchange using | The strength of a key derived from a Diffie-Hellman exchange using | |||
| any of the groups defined here depends on the inherent strength of | any of the groups defined here depends on the inherent strength of | |||
| the group, the size of the exponent used, and the entropy provided by | the group, the size of the exponent used, and the entropy provided by | |||
| the random number generator used. Due to these inputs it is difficult | the random number generator used. Due to these inputs it is difficult | |||
| to determine the strength of a key for any of the defined groups. | to determine the strength of a key for any of the defined groups. | |||
| skipping to change at page 83, line 47 ¶ | skipping to change at page 84, line 47 ¶ | |||
| elliptical curve groups may greatly increase strength using much | elliptical curve groups may greatly increase strength using much | |||
| smaller numbers. | smaller numbers. | |||
| It is assumed that all Diffie-Hellman exponents are erased from | It is assumed that all Diffie-Hellman exponents are erased from | |||
| memory after use. In particular, these exponents MUST NOT be derived | memory after use. In particular, these exponents MUST NOT be derived | |||
| from long-lived secrets like the seed to a pseudo-random generator | from long-lived secrets like the seed to a pseudo-random generator | |||
| that is not erased after use. | that is not erased after use. | |||
| The strength of all keys are limited by the size of the output of the | The strength of all keys are limited by the size of the output of the | |||
| negotiated prf function. For this reason, a prf function whose output | negotiated prf function. For this reason, a prf function whose output | |||
| is less than 128 bits (e.g., 3DES-CBC) MUST never be used with this | is less than 128 bits (e.g., 3DES-CBC) MUST NOT be used with this | |||
| protocol. | protocol. | |||
| The security of this protocol is critically dependent on the | The security of this protocol is critically dependent on the | |||
| randomness of the randomly chosen parameters. These should be | randomness of the randomly chosen parameters. These should be | |||
| generated by a strong random or properly seeded pseudo-random source | generated by a strong random or properly seeded pseudo-random source | |||
| (see [RFC1750]). Implementers should take care to ensure that use of | (see [RFC1750]). Implementers should take care to ensure that use of | |||
| random numbers for both keys and nonces is engineered in a fashion | random numbers for both keys and nonces is engineered in a fashion | |||
| that does not undermine the security of the keys. | that does not undermine the security of the keys. | |||
| For information on the rationale of many of the cryptographic design | For information on the rationale of many of the cryptographic design | |||
| choices in this protocol, see [SIGMA]. | choices in this protocol, see [SIGMA]. | |||
| When using pre-shared keys, a critical consideration is how to assure | When using pre-shared keys, a critical consideration is how to assure | |||
| the randomness of these secrets. The strongest practice is to ensure | the randomness of these secrets. The strongest practice is to ensure | |||
| that any pre-shared key contain as much randomness as the strongest | that any pre-shared key contain as much randomness as the strongest | |||
| key being negotiated. Deriving a shared secret from a password, name, | key being negotiated. Deriving a shared secret from a password, name, | |||
| or other low entropy source is not secure. These sources are subject | or other low entropy source is not secure. These sources are subject | |||
| to dictionary and social engineering attacks, among others. | to dictionary and social engineering attacks, among others. | |||
| The NAT_DETECTION_*_IP notifications contain a hash of the addresses | The NAT_DETECTION_*_IP notifications contain a hash of the addresses | |||
| and ports in an attempt to hide internal IP addresses behind a NAT | and ports in an attempt to hide internal IP addresses behind a NAT. | |||
| from the IKE peer. As the IPv4 address space is only 32 bits, and it | Since the IPv4 address space is only 32 bits, and it is usually very | |||
| is usually very sparse, it might be possible for the attacker to find | sparse, it would be possible for an attacker to find out the internal | |||
| out the internal address used behind the NAT box by trying all | address used behind the NAT box by trying all possible IP-addresses | |||
| possible IP-addresses and trying to find the matching hash. The port | and trying to find the matching hash. The port numbers are normally | |||
| numbers are normally fixed to 500, and the SPIs can be extracted from | fixed to 500, and the SPIs can be extracted from the packet. This | |||
| the packet. This limits the hash calculations down to 2^32. If | reduces the number of hash calculations to 2^32. With an educated | |||
| educated guess of use of private address space is done, then the | guess of the use of private address space, the number of hash | |||
| number of hash calculations needed to find out the internal IP | calculations is much smaller. Designers should therefore not assume | |||
| address goes down to the 2^24 + 2 * (2^16). | that use of IKE will not leak internal address information. | |||
| When using an EAP authentication method that does not generate a | When using an EAP authentication method that does not generate a | |||
| shared key for protecting a subsequent AUTH payload, certain man-in- | shared key for protecting a subsequent AUTH payload, certain man-in- | |||
| the-middle and server impersonation attacks are possible [EAPMITM]. | the-middle and server impersonation attacks are possible [EAPMITM]. | |||
| These vulnerabilities occur when EAP is also used in protocols which | These vulnerabilities occur when EAP is also used in protocols which | |||
| are not protected with a secure tunnel. Since EAP is a general- | are not protected with a secure tunnel. Since EAP is a general- | |||
| purpose authentication protocol, which is often used to provide | purpose authentication protocol, which is often used to provide | |||
| single-signon facilities, a deployed IPsec solution which relies on | single-signon facilities, a deployed IPsec solution which relies on | |||
| an EAP authentication method that does not generate a shared key | an EAP authentication method that does not generate a shared key | |||
| (also known as a non-key-generating EAP method) can become | (also known as a non-key-generating EAP method) can become | |||
| skipping to change at page 85, line 8 ¶ | skipping to change at page 86, line 8 ¶ | |||
| authentication exchange, and use it to initiate an IKEv2 connection. | authentication exchange, and use it to initiate an IKEv2 connection. | |||
| For this reason, use of non-key-generating EAP methods SHOULD be | For this reason, use of non-key-generating EAP methods SHOULD be | |||
| avoided where possible. Where they are used, it is extremely | avoided where possible. Where they are used, it is extremely | |||
| important that all usages of these EAP methods SHOULD utilize a | important that all usages of these EAP methods SHOULD utilize a | |||
| protected tunnel, where the initiator validates the responder's | protected tunnel, where the initiator validates the responder's | |||
| certificate before initiating the EAP exchange. Implementors SHOULD | certificate before initiating the EAP exchange. Implementors SHOULD | |||
| describe the vulnerabilities of using non-key-generating EAP methods | describe the vulnerabilities of using non-key-generating EAP methods | |||
| in the documentation of their implementations so that the | in the documentation of their implementations so that the | |||
| administrators deploying IPsec solutions are aware of these dangers. | administrators deploying IPsec solutions are aware of these dangers. | |||
| 6 IANA Considerations | An implementation using EAP MUST also use a public key based | |||
| authentication of the server to the client before the EAP exchange | ||||
| begins, even if the EAP method offers mutual authentication. This | ||||
| avoids having additional IKEv2 protocol variations and protects the | ||||
| EAP data from active attackers. | ||||
| This document contains many "magic numbers" to be maintained by the | 6 IANA Considerations | |||
| Internet Assigned Numbers Authority (IANA). While in many cases the | ||||
| values were chosen so as to avoid collisions with other | ||||
| specifications, these should be considered a new IANA registry for | ||||
| IKEv2. The tables to be maintained are: | ||||
| Payload Types | This document defines a number of new field types and values where | |||
| Transform Types | future assignments will be managed by the IANA. The initial IANA | |||
| For each Transform Type defined, the assigned Transform values | registry values are documented in [IKEv2IANA]. | |||
| Authentication Method | ||||
| Security Protocol ID | ||||
| Error types | ||||
| Status types | ||||
| IPComp Transform IDs | ||||
| Configuration request types | ||||
| Configuration attribute types | ||||
| 7 Intellectual Property Rights | 7 Intellectual Property Rights | |||
| The IETF takes no position regarding the validity or scope of any | The IETF takes no position regarding the validity or scope of any | |||
| intellectual property or other rights that might be claimed to | intellectual property or other rights that might be claimed to | |||
| pertain to the implementation or use of the technology described in | pertain to the implementation or use of the technology described in | |||
| this document or the extent to which any license under such rights | this document or the extent to which any license under such rights | |||
| might or might not be available; neither does it represent that it | might or might not be available; neither does it represent that it | |||
| has made any effort to identify any such rights. Information on the | has made any effort to identify any such rights. Information on the | |||
| IETF's procedures with respect to rights in standards-track and | IETF's procedures with respect to rights in standards-track and | |||
| skipping to change at page 87, line 10 ¶ | skipping to change at page 88, line 7 ¶ | |||
| "The Addition of Explicit Congestion Notification (ECN) | "The Addition of Explicit Congestion Notification (ECN) | |||
| to IP", RFC 3168, September 2001. | to IP", RFC 3168, September 2001. | |||
| [RFC3280] Housley, R., Polk, W., Ford, W., Solo, D., "Internet | [RFC3280] Housley, R., Polk, W., Ford, W., Solo, D., "Internet | |||
| X.509 Public Key Infrastructure Certificate and | X.509 Public Key Infrastructure Certificate and | |||
| Certificate Revocation List (CRL) Profile", RFC 3280, | Certificate Revocation List (CRL) Profile", RFC 3280, | |||
| April 2002. | April 2002. | |||
| 9.2 Informative References | 9.2 Informative References | |||
| [Ble98] Bleichenbacher, D., "Chosen Ciphertext Attacks against | ||||
| Protocols Based on RSA Encryption Standard PKCS#1", | ||||
| Advances in Cryptology Eurocrypt '98, Springer-Verlag, | ||||
| 1998. | ||||
| [BR94] Bellare, M., and Rogaway P., "Optimal Asymmetric | ||||
| Encryption", Advances in Cryptology Eurocrypt '94, | ||||
| Springer-Verlag, 1994. | ||||
| [DES] ANSI X3.106, "American National Standard for Information | [DES] ANSI X3.106, "American National Standard for Information | |||
| Systems-Data Link Encryption", American National Standards | Systems-Data Link Encryption", American National Standards | |||
| Institute, 1983. | Institute, 1983. | |||
| [DH] Diffie, W., and Hellman M., "New Directions in | [DH] Diffie, W., and Hellman M., "New Directions in | |||
| Cryptography", IEEE Transactions on Information Theory, V. | Cryptography", IEEE Transactions on Information Theory, V. | |||
| IT-22, n. 6, June 1977. | IT-22, n. 6, June 1977. | |||
| [DHCP] R. Droms, "Dynamic Host Configuration Protocol", | [DHCP] R. Droms, "Dynamic Host Configuration Protocol", | |||
| RFC2131 | RFC2131 | |||
| skipping to change at page 87, line 49 ¶ | skipping to change at page 88, line 37 ¶ | |||
| (IKE)", RFC 2409, November 1998. | (IKE)", RFC 2409, November 1998. | |||
| [Hutt02] Huttunen, A. et. al., "UDP Encapsulation of IPsec | [Hutt02] Huttunen, A. et. al., "UDP Encapsulation of IPsec | |||
| Packets", draft-ietf-ipsec-udp-encaps-05.txt, December | Packets", draft-ietf-ipsec-udp-encaps-05.txt, December | |||
| 2002. | 2002. | |||
| [IDEA] Lai, X., "On the Design and Security of Block Ciphers," | [IDEA] Lai, X., "On the Design and Security of Block Ciphers," | |||
| ETH Series in Information Processing, v. 1, Konstanz: | ETH Series in Information Processing, v. 1, Konstanz: | |||
| Hartung-Gorre Verlag, 1992 | Hartung-Gorre Verlag, 1992 | |||
| [IKEv2IANA]Richardson, M., "Initial IANA registry contents", | ||||
| draft-ietf-ipsec-ikev2-iana-00.txt, work in progress. | ||||
| [IPCOMP] Shacham, A., Monsour, R., Pereira, R., and Thomas, M., "IP | [IPCOMP] Shacham, A., Monsour, R., Pereira, R., and Thomas, M., "IP | |||
| Payload Compression Protocol (IPComp)", RFC 3173, | Payload Compression Protocol (IPComp)", RFC 3173, | |||
| September 2001. | September 2001. | |||
| [KPS03] Kaufman, C., Perlman, R., and Sommerfeld, B., "DoS | ||||
| protection for UDP-based protocols", ACM Conference on | ||||
| Computer and Communications Security, October 2003. | ||||
| [Ker01] Keromytis, A., Sommerfeld, B., "The 'Suggested ID' | [Ker01] Keromytis, A., Sommerfeld, B., "The 'Suggested ID' | |||
| Extension for IKE", draft-keromytis-ike-id-00.txt, 2001 | Extension for IKE", draft-keromytis-ike-id-00.txt, 2001 | |||
| [KBC96] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | [KBC96] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | |||
| Hashing for Message Authentication", RFC 2104, February | Hashing for Message Authentication", RFC 2104, February | |||
| 1997. | 1997. | |||
| [LDAP] M. Wahl, T. Howes, S. Kille., "Lightweight Directory | [LDAP] M. Wahl, T. Howes, S. Kille., "Lightweight Directory | |||
| Access Protocol (v3)", RFC2251 | Access Protocol (v3)", RFC2251 | |||
| skipping to change at page 90, line 25 ¶ | skipping to change at page 91, line 25 ¶ | |||
| with a single four message exchange (with changes in authentication | with a single four message exchange (with changes in authentication | |||
| mechanisms affecting only a single AUTH payload rather than | mechanisms affecting only a single AUTH payload rather than | |||
| restructuring the entire exchange); | restructuring the entire exchange); | |||
| 3) To remove the Domain of Interpretation (DOI), Situation (SIT), and | 3) To remove the Domain of Interpretation (DOI), Situation (SIT), and | |||
| Labeled Domain Identifier fields, and the Commit and Authentication | Labeled Domain Identifier fields, and the Commit and Authentication | |||
| only bits; | only bits; | |||
| 4) To decrease IKE's latency in the common case by making the initial | 4) To decrease IKE's latency in the common case by making the initial | |||
| exchange be 2 round trips (4 messages), and allowing the ability to | exchange be 2 round trips (4 messages), and allowing the ability to | |||
| piggyback setup of a CHILD-SA on that exchange; | piggyback setup of a CHILD_SA on that exchange; | |||
| 5) To replace the cryptographic syntax for protecting the IKE | 5) To replace the cryptographic syntax for protecting the IKE | |||
| messages themselves with one based closely on ESP to simplify | messages themselves with one based closely on ESP to simplify | |||
| implementation and security analysis; | implementation and security analysis; | |||
| 6) To reduce the number of possible error states by making the | 6) To reduce the number of possible error states by making the | |||
| protocol reliable (all messages are acknowledged) and sequenced. This | protocol reliable (all messages are acknowledged) and sequenced. This | |||
| allows shortening CREATE_CHILD_SA exchanges from 3 messages to 2; | allows shortening CREATE_CHILD_SA exchanges from 3 messages to 2; | |||
| 7) To increase robustness by allowing the responder to not do | 7) To increase robustness by allowing the responder to not do | |||
| skipping to change at page 98, line 48 ¶ | skipping to change at page 99, line 48 ¶ | |||
| 9) Removed ability to negotiate Diffie-Hellman groups by explicitly | 9) Removed ability to negotiate Diffie-Hellman groups by explicitly | |||
| passing parameters. They must now be negotiated using Transform IDs. | passing parameters. They must now be negotiated using Transform IDs. | |||
| 10) Renumbered status codes to be contiguous. | 10) Renumbered status codes to be contiguous. | |||
| 11) Specified the meaning of the "Port" fields in Traffic Selectors | 11) Specified the meaning of the "Port" fields in Traffic Selectors | |||
| when the ICMP protocol is being used. | when the ICMP protocol is being used. | |||
| 12) Removed the specification of D-H Group #5 since it is already | 12) Removed the specification of D-H Group #5 since it is already | |||
| specified in [ADDGROUP]. | specified in [ADDGROUP. | |||
| H.10 Changes from IKEv2-09 to IKEv2-10 August 2003 | H.10 Changes from IKEv2-09 to IKEv2-10 August 2003 | |||
| 1) Numerous boilerplate and formatting corrections to comply with RFC | 1) Numerous boilerplate and formatting corrections to comply with RFC | |||
| Editorial Guidelines and procedures. | Editorial Guidelines and procedures. | |||
| 2) Fixed five typographical errors. | 2) Fixed five typographical errors. | |||
| 3) Added a sentence to the end of "Security considerations" | 3) Added a sentence to the end of "Security considerations" | |||
| discouraging the use of non-key-generating EAP mechanisms. | discouraging the use of non-key-generating EAP mechanisms. | |||
| skipping to change at page 100, line 5 ¶ | skipping to change at page 100, line 31 ¶ | |||
| purposes of QoS handling. | purposes of QoS handling. | |||
| 3) Fixed description of ECN handling to make normative references to | 3) Fixed description of ECN handling to make normative references to | |||
| [RFC 2401bis] and [RFC 3168]. | [RFC 2401bis] and [RFC 3168]. | |||
| 4) Fixed two typos in the description of NAT traversal. | 4) Fixed two typos in the description of NAT traversal. | |||
| 5) Added specific ASN.1 encoding of certificate bundles in section | 5) Added specific ASN.1 encoding of certificate bundles in section | |||
| 3.6. | 3.6. | |||
| H.12 Changes from IKEv2-11 to IKEv2-12 January 2004 | ||||
| 1) Made the values of the one byte IPsec Protocol ID consistent | ||||
| between payloads and made the naming more nearly consistent. | ||||
| 2) Changed the specification to require that AUTH payloads be | ||||
| provided in EAP exchanges even when a non-key generating EAP method | ||||
| is used. This protects against certain obscure cryptographic | ||||
| threats. | ||||
| 3) Changed all example IP addresses to be within subnet 10. | ||||
| 4) Specified that issues surrounding weak keys and DES key parity | ||||
| must be addressed in algorithm documents. | ||||
| 5) Removed the unsupported (and probably untrue) claim that Photuris | ||||
| cookies were given that name because the IETF always supports | ||||
| proposals involving cookies. | ||||
| 6) Fixed some text that specified that Transform ID was 1 octet while | ||||
| everywhere else said it was 2 octets. | ||||
| 7) Corrected the ASN.1 specification of the encoding of X.509 | ||||
| certificate bundles. | ||||
| 8) Added an INVALID_SELECTORS error type. | ||||
| 9) Replaced IANA considerations section with a reference to draft- | ||||
| ietf-ipsec-ikev2-iana-00.txt. | ||||
| 10) Removed 2 obsolete informative references and added one to a | ||||
| paper on UDP fragmentation problems. | ||||
| 11) 41 Editorial Corrections and Clarifications. | ||||
| 12) 6 Grammatical and Spelling errors fixed. | ||||
| 13) 4 Corrected capitalizations of MAY/MUST/etc. | ||||
| 14) 4 Attempts to make capitalization and use of underscores more | ||||
| consistent. | ||||
| Editor's Address | Editor's Address | |||
| Charlie Kaufman | Charlie Kaufman | |||
| IBM | Microsoft Corporation | |||
| 5 Technology Park Drive | 1 Microsoft Way | |||
| Westford, MA 01886 | Redmond, WA 98052 | |||
| 1-978-399-5000 | 1-425-707-3335 | |||
| charlie_kaufman@notesdev.ibm.com | charliek@microsoft.com | |||
| Full Copyright Statement | Full Copyright Statement | |||
| "Copyright (C) The Internet Society (2003). All Rights Reserved. | "Copyright (C) The Internet Society (2004). All Rights Reserved. | |||
| This document and translations of it may be copied and furnished to | This document and translations of it may be copied and furnished to | |||
| others, and derivative works that comment on or otherwise explain it | others, and derivative works that comment on or otherwise explain it | |||
| or assist in its implementation may be prepared, copied, published | or assist in its implementation may be prepared, copied, published | |||
| and distributed, in whole or in part, without restriction of any | and distributed, in whole or in part, without restriction of any | |||
| kind, provided that the above copyright notice and this paragraph are | kind, provided that the above copyright notice and this paragraph are | |||
| included on all such copies and derivative works. However, this | included on all such copies and derivative works. However, this | |||
| document itself may not be modified in any way, such as by removing | document itself may not be modified in any way, such as by removing | |||
| the copyright notice or references to the Internet Society or other | the copyright notice or references to the Internet Society or other | |||
| Internet organizations, except as needed for the purpose of | Internet organizations, except as needed for the purpose of | |||
| skipping to change at page 100, line 50 ¶ | skipping to change at page 102, line 50 ¶ | |||
| HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF | HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF | |||
| MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE." | MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE." | |||
| Acknowledgement | Acknowledgement | |||
| Funding for the RFC Editor function is currently provided by the | Funding for the RFC Editor function is currently provided by the | |||
| Internet Society. | Internet Society. | |||
| Expiration | Expiration | |||
| This Internet-Draft (draft-ietf-ipsec-ikev2-10.txt) expires in | This Internet-Draft (draft-ietf-ipsec-ikev2-12.txt) expires in July | |||
| February 2004. | 2004. | |||
| End of changes. 127 change blocks. | ||||
| 387 lines changed or deleted | 494 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||