| < draft-ietf-ipsecme-ikev2-intermediate-07.txt | draft-ietf-ipsecme-ikev2-intermediate-08.txt > | |||
|---|---|---|---|---|
| Network Working Group V. Smyslov | Network Working Group V. Smyslov | |||
| Internet-Draft ELVIS-PLUS | Internet-Draft ELVIS-PLUS | |||
| Intended status: Standards Track August 3, 2021 | Intended status: Standards Track February 2, 2022 | |||
| Expires: February 4, 2022 | Expires: August 6, 2022 | |||
| Intermediate Exchange in the IKEv2 Protocol | Intermediate Exchange in the IKEv2 Protocol | |||
| draft-ietf-ipsecme-ikev2-intermediate-07 | draft-ietf-ipsecme-ikev2-intermediate-08 | |||
| Abstract | Abstract | |||
| This documents defines a new exchange, called Intermediate Exchange, | This documents defines a new exchange, called Intermediate Exchange, | |||
| for the Internet Key Exchange protocol Version 2 (IKEv2). This | for the Internet Key Exchange protocol Version 2 (IKEv2). This | |||
| exchange can be used for transferring large amount of data in the | exchange can be used for transferring large amounts of data in the | |||
| process of IKEv2 Security Association (SA) establishment. | process of IKEv2 Security Association (SA) establishment. | |||
| Introducing Intermediate Exchange allows re-using existing IKE | Introducing the Intermediate Exchange allows re-using the existing | |||
| fragmentation mechanism, that helps to avoid IP fragmentation of | IKE fragmentation mechanism, that helps to avoid IP fragmentation of | |||
| large IKE messages, but cannot be used in the initial IKEv2 exchange. | large IKE messages, but cannot be used in the initial IKEv2 exchange. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on February 4, 2022. | This Internet-Draft will expire on August 6, 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| skipping to change at page 2, line 19 ¶ | skipping to change at page 2, line 19 ¶ | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Intermediate Exchange Details . . . . . . . . . . . . . . . . 3 | 3. Intermediate Exchange Details . . . . . . . . . . . . . . . . 3 | |||
| 3.1. Support for Intermediate Exchange Negotiation . . . . . . 3 | 3.1. Support for Intermediate Exchange Negotiation . . . . . . 3 | |||
| 3.2. Using Intermediate Exchange . . . . . . . . . . . . . . . 4 | 3.2. Using Intermediate Exchange . . . . . . . . . . . . . . . 4 | |||
| 3.3. The IKE_INTERMEDIATE Exchange Protection and | 3.3. The IKE_INTERMEDIATE Exchange Protection and | |||
| Authentication . . . . . . . . . . . . . . . . . . . . . 5 | Authentication . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.3.1. Protection of the IKE_INTERMEDIATE Messages . . . . . 5 | 3.3.1. Protection of the IKE_INTERMEDIATE Messages . . . . . 5 | |||
| 3.3.2. Authentication of the IKE_INTERMEDIATE Exchanges . . 5 | 3.3.2. Authentication of the IKE_INTERMEDIATE Exchanges . . 5 | |||
| 3.4. Error Handling in the IKE_INTERMEDIATE Exchange . . . . . 9 | 3.4. Error Handling in the IKE_INTERMEDIATE Exchange . . . . . 9 | |||
| 4. Interaction with other IKEv2 Extensions . . . . . . . . . . . 9 | 4. Interaction with other IKEv2 Extensions . . . . . . . . . . . 10 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 7. Implementation Status . . . . . . . . . . . . . . . . . . . . 10 | 7. Implementation Status . . . . . . . . . . . . . . . . . . . . 11 | |||
| 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 10 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 11 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 11 | 9.2. Informative References . . . . . . . . . . . . . . . . . 12 | |||
| Appendix A. Example of IKE_INTERMEDIATE exchange . . . . . . . . 11 | Appendix A. Example of IKE_INTERMEDIATE exchange . . . . . . . . 13 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 13 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 1. Introduction | 1. Introduction | |||
| The Internet Key Exchange protocol version 2 (IKEv2) defined in | The Internet Key Exchange protocol version 2 (IKEv2) defined in | |||
| [RFC7296] uses UDP as a transport for its messages. If size of a | [RFC7296] uses UDP as a transport for its messages. If size of a | |||
| message is large enough, IP fragmentation takes place, that may | message is large enough, IP fragmentation takes place, that may | |||
| interfere badly with some network devices. The problem is described | interfere badly with some network devices. The problem is described | |||
| in more detail in [RFC7383], which also defines an extension to the | in more detail in [RFC7383], which also defines an extension to IKEv2 | |||
| IKEv2 called IKE fragmentation. This extension allows IKE messages | called IKE fragmentation. This extension allows IKE messages to be | |||
| to be fragmented at IKE level, eliminating possible issues caused by | fragmented at the IKE level, eliminating possible issues caused by IP | |||
| IP fragmentation. However, the IKE fragmentation cannot be used in | fragmentation. However, IKE fragmentation cannot be used in the | |||
| the initial IKEv2 exchange (IKE_SA_INIT). This limitation in most | initial IKEv2 exchange (IKE_SA_INIT). This limitation in most cases | |||
| cases is not a problem, since the IKE_SA_INIT messages used to be | is not a problem, since the IKE_SA_INIT messages are usually small | |||
| small enough not to cause IP fragmentation. | enough not to cause IP fragmentation. | |||
| However, the situation has been changing recently. One example of | However, the situation has been changing recently. One example of | |||
| the need to transfer large amount of data before IKE SA is created is | the need to transfer large amount of data before an IKE SA is created | |||
| using Quantum Computer resistant key exchange methods in IKEv2. | is using Quantum Computer resistant key exchange methods in IKEv2. | |||
| Recent progress in Quantum Computing has brought a concern that | Recent progress in Quantum Computing has brought a concern that | |||
| classical Diffie-Hellman key exchange methods will become insecure in | classical Diffie-Hellman key exchange methods will become insecure in | |||
| a relatively near future and should be replaced with Quantum Computer | a relatively near future and should be replaced with Quantum Computer | |||
| (QC) resistant ones. Currently most of QC-resistant key exchange | (QC) resistant ones. Currently most QC-resistant key exchange | |||
| methods have large public keys. If these keys are exchanged in the | methods have large public keys. If these keys are exchanged in the | |||
| IKE_SA_INIT, then most probably IP fragmentation will take place, | IKE_SA_INIT, then most probably IP fragmentation will take place, | |||
| therefore all the problems caused by it will become inevitable. | therefore all the problems caused by it will become inevitable. | |||
| A possible solution to the problem would be to use TCP as a transport | A possible solution to the problem would be to use TCP as a transport | |||
| for IKEv2, as defined in [RFC8229]. However this approach has | for IKEv2, as defined in [RFC8229]. However this approach has | |||
| significant drawbacks and is intended to be a "last resort" when UDP | significant drawbacks and is intended to be a "last resort" when UDP | |||
| transport is completely blocked by intermediate network devices. | transport is completely blocked by intermediate network devices. | |||
| This specification describes a way to transfer large amount of data | This specification describes a way to transfer a large amount of data | |||
| in IKEv2 using UDP transport. For this purpose the document defines | in IKEv2 using UDP transport. For this purpose the document defines | |||
| a new exchange for the IKEv2 protocol, called Intermediate Exchange | a new exchange for the IKEv2 protocol, called Intermediate Exchange | |||
| or IKE_INTERMEDIATE. One or more these exchanges may take place | or IKE_INTERMEDIATE. One or more these exchanges may take place | |||
| right after the IKE_SA_INIT exchange and prior to the IKE_AUTH | right after the IKE_SA_INIT exchange and prior to the IKE_AUTH | |||
| exchange. The IKE_INTERMEDIATE exchange messages can be fragmented | exchange. The IKE_INTERMEDIATE exchange messages can be fragmented | |||
| using IKE fragmentation mechanism, so these exchanges may be used to | using the IKE fragmentation mechanism, so these exchanges may be used | |||
| transfer large amounts of data which don't fit into the IKE_SA_INIT | to transfer large amounts of data which don't fit into the | |||
| exchange without causing IP fragmentation. | IKE_SA_INIT exchange without causing IP fragmentation. | |||
| The Intermediate Exchange can be used to transfer large public keys | The Intermediate Exchange can be used to transfer large public keys | |||
| of QC-resistant key exchange methods, but its application is not | of QC-resistant key exchange methods, but its application is not | |||
| limited to this use case. This exchange can also be used whenever | limited to this use case. This exchange can also be used whenever | |||
| some data need to be transferred before the IKE_AUTH exchange and for | some data need to be transferred before the IKE_AUTH exchange and for | |||
| some reason the IKE_SA_INIT exchange is not suited for this purpose. | some reason the IKE_SA_INIT exchange is not suited for this purpose. | |||
| This document defines the IKE_INTERMEDIATE exchange without tying it | This document defines the IKE_INTERMEDIATE exchange without tying it | |||
| to any specific use case. It is expected that separate | to any specific use case. It is expected that separate | |||
| specifications will define for which purposes and how the | specifications will define for which purposes and how the | |||
| IKE_INTERMEDIATE exchange is used in the IKEv2. | IKE_INTERMEDIATE exchange is used in IKEv2. | |||
| 2. Terminology and Notation | 2. Terminology and Notation | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| It is expected that readers are familiar with the terms used in the | It is expected that readers are familiar with the terms used in the | |||
| skipping to change at page 4, line 15 ¶ | skipping to change at page 4, line 15 ¶ | |||
| Initiator Responder | Initiator Responder | |||
| ----------- ----------- | ----------- ----------- | |||
| HDR, SAi1, KEi, Ni, | HDR, SAi1, KEi, Ni, | |||
| [N(INTERMEDIATE_EXCHANGE_SUPPORTED)] --> | [N(INTERMEDIATE_EXCHANGE_SUPPORTED)] --> | |||
| <-- HDR, SAr1, KEr, Nr, [CERTREQ], | <-- HDR, SAr1, KEr, Nr, [CERTREQ], | |||
| [N(INTERMEDIATE_EXCHANGE_SUPPORTED)] | [N(INTERMEDIATE_EXCHANGE_SUPPORTED)] | |||
| The INTERMEDIATE_EXCHANGE_SUPPORTED is a Status Type IKEv2 | The INTERMEDIATE_EXCHANGE_SUPPORTED is a Status Type IKEv2 | |||
| notification. Its Notify Message Type is 16438, Protocol ID and SPI | notification. Its Notify Message Type is 16438, Protocol ID and SPI | |||
| Size are both set to 0. This specification doesn't define any data | Size are both set to 0. This specification doesn't define any data | |||
| this notification may contain, so the Notification Data is left | that this notification may contain, so the Notification Data is left | |||
| empty. However, future enhancements of this specification may | empty. However, future enhancements to this specification may | |||
| override this. Implementations MUST ignore the non-empty | override this. Implementations MUST ignore non-empty Notification | |||
| Notification Data if they don't understand its purpose. | Data if they don't understand its purpose. | |||
| 3.2. Using Intermediate Exchange | 3.2. Using Intermediate Exchange | |||
| If both peers indicated their support for the Intermediate Exchange, | If both peers indicated their support for the Intermediate Exchange, | |||
| the initiator may use one or more these exchanges to transfer | the initiator may use one or more these exchanges to transfer | |||
| additional data. Using the Intermediate Exchange is optional, the | additional data. Using the Intermediate Exchange is optional; the | |||
| initiator may find it unnecessary even when support for this | initiator may find it unnecessary even when support for this | |||
| exchanged has been already negotiated. | exchanged has been negotiated. | |||
| The Intermediate Exchange is denoted as IKE_INTERMEDIATE, its | The Intermediate Exchange is denoted as IKE_INTERMEDIATE, its | |||
| Exchange Type is 43. | Exchange Type is 43. | |||
| Initiator Responder | Initiator Responder | |||
| ----------- ----------- | ----------- ----------- | |||
| HDR, ..., SK {...} --> | HDR, ..., SK {...} --> | |||
| <-- HDR, ..., SK {...} | <-- HDR, ..., SK {...} | |||
| The initiator may use several IKE_INTERMEDIATE exchanges if | The initiator may use several IKE_INTERMEDIATE exchanges if | |||
| necessary. Since window size is initially set to one for both peers | necessary. Since window size is initially set to one for both peers | |||
| (Section 2.3 of [RFC7296]), these exchanges MUST follow each other | (Section 2.3 of [RFC7296]), these exchanges MUST follow each other | |||
| and MUST all be completed before the IKE_AUTH exchange is initiated. | and MUST all be completed before the IKE_AUTH exchange is initiated. | |||
| The IKE SA MUST NOT be considered as established until the IKE_AUTH | The IKE SA MUST NOT be considered as established until the IKE_AUTH | |||
| exchange is successfully completed. | exchange is successfully completed. | |||
| The Message IDs for IKE_INTERMEDIATE exchanges MUST be chosen | The Message IDs for IKE_INTERMEDIATE exchanges MUST be chosen | |||
| according to the standard IKEv2 rule, described in the Section 2.2. | according to the standard IKEv2 rule, described in the Section 2.2. | |||
| of [RFC7296], i.e. it is set to 1 for the first IKE_INTERMEDIATE | of [RFC7296], i.e. it is set to 1 for the first IKE_INTERMEDIATE | |||
| exchange, 2 for the next (if any) and so on. The Message ID for the | exchange, 2 for the next (if any) and so on. Implementations MUST | |||
| first pair of the IKE_AUTH messages is one more than the value used | verify that Message IDs in the IKE_INTERMEDIATE messages they receive | |||
| in the last IKE_INTERMEDIATE exchange. | actually follow this rule. The Message ID for the first pair of the | |||
| IKE_AUTH messages is one more than the value used in the last | ||||
| IKE_INTERMEDIATE exchange. | ||||
| If the presence of NAT is detected in the IKE_SA_INIT exchange via | If the presence of NAT is detected in the IKE_SA_INIT exchange via | |||
| NAT_DETECTION_SOURCE_IP and NAT_DETECTION_DESTINATION_IP | NAT_DETECTION_SOURCE_IP and NAT_DETECTION_DESTINATION_IP | |||
| notifications, then the peers MUST switch to port 4500 and send all | notifications, then the peers switch to port 4500 in the first | |||
| IKE_INTERMEDIATE exchanges using port 4500. | IKE_INTERMEDIATE exchange and use this port for all subsequent | |||
| exchanges, as described in Section 2.23 of [RFC7296]. | ||||
| The content of the IKE_INTERMEDIATE exchange messages depends on the | The content of the IKE_INTERMEDIATE exchange messages depends on the | |||
| data being transferred and will be defined by specifications | data being transferred and will be defined by specifications | |||
| utilizing this exchange. However, since the main motivation for the | utilizing this exchange. However, since the main motivation for the | |||
| IKE_INTERMEDIATE exchange is to avoid IP fragmentation when large | IKE_INTERMEDIATE exchange is to avoid IP fragmentation when large | |||
| amount of data need to be transferred prior to IKE_AUTH, the | amounts of data need to be transferred prior to IKE_AUTH, the | |||
| Encrypted payload MUST be present in the IKE_INTERMEDIATE exchange | Encrypted payload MUST be present in the IKE_INTERMEDIATE exchange | |||
| messages and payloads containing large data MUST be placed inside it. | messages and payloads containing large data MUST be placed inside it. | |||
| This will allow IKE fragmentation [RFC7383] to take place, provided | This will allow IKE fragmentation [RFC7383] to take place, provided | |||
| it is supported by the peers and negotiated in the initial exchange. | it is supported by the peers and negotiated in the initial exchange. | |||
| Appendix A contains an example of using IKE_INTERMEDIATE exchange in | Appendix A contains an example of using an IKE_INTERMEDIATE exchange | |||
| creating IKE SA. | in creating an IKE SA. | |||
| 3.3. The IKE_INTERMEDIATE Exchange Protection and Authentication | 3.3. The IKE_INTERMEDIATE Exchange Protection and Authentication | |||
| 3.3.1. Protection of the IKE_INTERMEDIATE Messages | 3.3.1. Protection of the IKE_INTERMEDIATE Messages | |||
| The keys SK_e[i/r] and SK_a[i/r] for the IKE_INTERMEDIATE exchanges | The keys SK_e[i/r] and SK_a[i/r] for the IKE_INTERMEDIATE exchanges | |||
| protection are computed in a standard fashion, as defined in the | protection are computed in the standard fashion, as defined in the | |||
| Section 2.14 of [RFC7296]. | Section 2.14 of [RFC7296]. | |||
| Every subsequent IKE_INTERMEDIATE exchange uses the most recently | Every subsequent IKE_INTERMEDIATE exchange uses the most recently | |||
| calculated IKE SA keys before this exchange is started. So, the | calculated IKE SA keys before this exchange is started. So, the | |||
| first IKE_INTERMEDIATE exchange always uses SK_e[i/r] and SK_a[i/r] | first IKE_INTERMEDIATE exchange always uses SK_e[i/r] and SK_a[i/r] | |||
| keys that were computed as a result of the IKE_SA_INIT exchange. If | keys that were computed as a result of the IKE_SA_INIT exchange. If | |||
| additional key exchange is performed in the first IKE_INTERMEDIATE | additional key exchange is performed in the first IKE_INTERMEDIATE | |||
| exchange resulting in the update of SK_e[i/r] and SK_a[i/r], then | exchange, resulting in the update of SK_e[i/r] and SK_a[i/r], then | |||
| these updated keys are used for protection of the second | these updated keys are used for protection of the second | |||
| IKE_INTERMEDIATE exchange, otherwise the original SK_e[i/r] and | IKE_INTERMEDIATE exchange. Otherwise, the original SK_e[i/r] and | |||
| SK_a[i/r] keys are used again, and so on. | SK_a[i/r] keys are used again, and so on. | |||
| Once all the IKE_INTERMEDIATE exchanges are completed, the most | Once all the IKE_INTERMEDIATE exchanges are completed, the most | |||
| recently calculated SK_e[i/r] and SK_a[i/r] keys are used for | recently calculated SK_e[i/r] and SK_a[i/r] keys are used for | |||
| protection of the IKE_AUTH and all the subsequent exchanges. | protection of the IKE_AUTH and all the subsequent exchanges. | |||
| 3.3.2. Authentication of the IKE_INTERMEDIATE Exchanges | 3.3.2. Authentication of the IKE_INTERMEDIATE Exchanges | |||
| The IKE_INTERMEDIATE messages must be authenticated in the IKE_AUTH | The IKE_INTERMEDIATE messages must be authenticated in the IKE_AUTH | |||
| exchange, which is performed by adding their content into the AUTH | exchange, which is performed by adding their content into the AUTH | |||
| payload calculation. It is anticipated that in many use cases | payload calculation. It is anticipated that in many use cases | |||
| IKE_INTERMEDIATE messages will be fragmented using IKE fragmentation | IKE_INTERMEDIATE messages will be fragmented using IKE fragmentation | |||
| [RFC7383] mechanism. According to [RFC7383], when IKE fragmentation | [RFC7383] mechanism. According to [RFC7383], when IKE fragmentation | |||
| is negotiated, initiator may first send request message in | is negotiated, the initiator may first send a request message in | |||
| unfragmented form, but later turn IKE fragmentation on and re-send it | unfragmented form, but later turn on IKE fragmentation and re-send it | |||
| fragmented if no response is received after few retransmissions. In | fragmented if no response is received after a few retransmissions. | |||
| addition, peers may re-send fragmented message using different | In addition, peers may re-send fragmented message using different | |||
| fragment sizes to perform simple PMTU discovery. | fragment sizes to perform simple PMTU discovery. | |||
| The requirement to support this behavior makes authentication | The requirement to support this behavior makes authentication | |||
| challenging: it is not appropriate to add on-the-wire content of the | challenging: it is not appropriate to add on-the-wire content of the | |||
| IKE_INTERMEDIATE messages into the AUTH payload calculation, because | IKE_INTERMEDIATE messages into the AUTH payload calculation, because | |||
| peers generally are unaware in which form other side has received | peers generally are unaware in which form other side has received | |||
| them. Instead, a more complex scheme is used - authentication is | them. Instead, a more complex scheme is used -- authentication is | |||
| performed by adding content of these messages before their encryption | performed by adding content of these messages before their encryption | |||
| and possible fragmentation, so that data to be authenticated doesn't | and possible fragmentation, so that data to be authenticated doesn't | |||
| depend on the form the messages are delivered in. | depend on the form the messages are delivered in. | |||
| If any IKE_INTERMEDIATE exchange took place, the definition of the | If any IKE_INTERMEDIATE exchange took place, the definition of the | |||
| blob to be signed (or MAC'ed) from the Section 2.15 of [RFC7296] is | blob to be signed (or MAC'ed) from the Section 2.15 of [RFC7296] is | |||
| modified as follows: | modified as follows: | |||
| InitiatorSignedOctets = RealMsg1 | NonceRData | MACedIDForI | IntAuth | InitiatorSignedOctets = RealMsg1 | NonceRData | MACedIDForI | IntAuth | |||
| ResponderSignedOctets = RealMsg2 | NonceIData | MACedIDForR | IntAuth | ResponderSignedOctets = RealMsg2 | NonceIData | MACedIDForR | IntAuth | |||
| IntAuth = IntAuth_1 [| IntAuth_2 [| IntAuth_3 ... ]] | IntAuth = IntAuth_iN | IntAuth_rN | IKE_AUTH_MID | |||
| IntAuth_1 = IntAuth_1_I | IntAuth_1_R | IntAuth_i1 = prf(SK_pi1, IntAuth_i1A [| IntAuth_i1P]) | |||
| IntAuth_2 = IntAuth_2_I | IntAuth_2_R | IntAuth_i2 = prf(SK_pi2, IntAuth_i1 | IntAuth_i2A [| IntAuth_i2P]) | |||
| IntAuth_3 = IntAuth_3_I | IntAuth_3_R | IntAuth_i3 = prf(SK_pi3, IntAuth_i2 | IntAuth_i3A [| IntAuth_i3P]) | |||
| ... | ... | |||
| IntAuth_iN = prf(SK_piN, IntAuth_iN-1 | IntAuth_iNA [| IntAuth_iNP]) | ||||
| IntAuth_1_I = prf(SK_pi_1, IntAuth_1_I_A [| IntAuth_1_I_P]) | IntAuth_r1 = prf(SK_pr1, IntAuth_r1A [| IntAuth_r1P]) | |||
| IntAuth_2_I = prf(SK_pi_2, IntAuth_2_I_A [| IntAuth_2_I_P]) | IntAuth_r2 = prf(SK_pr2, IntAuth_r1 | IntAuth_r2A [| IntAuth_r2P]) | |||
| IntAuth_3_I = prf(SK_pi_3, IntAuth_3_I_A [| IntAuth_3_I_P]) | IntAuth_r3 = prf(SK_pr3, IntAuth_r2 | IntAuth_r3A [| IntAuth_r3P]) | |||
| ... | ... | |||
| IntAuth_rN = prf(SK_prN, IntAuth_rN-1 | IntAuth_rNA [| IntAuth_rNP]) | ||||
| IntAuth_1_R = prf(SK_pr_1, IntAuth_1_R_A [| IntAuth_1_R_P]) | The essence of this modification is that a new chunk called IntAuth | |||
| IntAuth_2_R = prf(SK_pr_2, IntAuth_2_R_A [| IntAuth_2_R_P]) | is appended to the string of octets that is signed (or MAC'ed) by the | |||
| IntAuth_3_R = prf(SK_pr_3, IntAuth_3_R_A [| IntAuth_3_R_P]) | peers. IntAuth consists of three parts: IntAuth_iN, IntAuth_rN, and | |||
| ... | IKE_AUTH_MID. | |||
| IntAuth_1_I/IntAuth_1_R, IntAuth_2_I/IntAuth_2_R, IntAuth_3_I/ | The IKE_AUTH_MID chunk is a value of the Message ID field from the | |||
| IntAuth_3_R, etc. represent the results of applying the negotiated | IKE Header of the first round of the IKE_AUTH exchange. It is | |||
| prf to the content of the IKE_INTERMEDIATE messages sent by the | represented as a four octet integer in network byte order (in other | |||
| initiator (IntAuth_*_I) and by the responder (IntAuth_*_R) in an | words, exactly as it appears on the wire). | |||
| order of increasing their Message IDs (i.e. in an order the | ||||
| IKE_INTERMEDIATE exchanges took place). The prf is applied to the | The IntAuth_iN and IntAuth_rN chunks each represent the cumulative | |||
| the concatenation of two chunks of data: mandatory IntAuth_*_[I/R]_A | result of applying the negotiated prf to all IKE_INTERMEDIATE | |||
| optionally followed by IntAuth_*_[I/R]_P. The IntAuth_*_[I/R]_A | exchange messages sent during IKE SA establishing by the initiator | |||
| chunk lasts from the first octet of the IKE Header (not including | and the responder respectively. After the first IKE_INTERMEDIATE | |||
| prepended four octets of zeros, if port 4500 is used) to the last | exchange is completed peers calculate the IntAuth_i1 value by | |||
| octet of the Encrypted payload header. The IntAuth_*_[I/R]_P chunk | applying the negotiated prf to the content of the request message | |||
| is present if the Encrypted payload is not empty. It consists of the | from this exchange and calculate the IntAuth_r1 value by applying the | |||
| content of the Encrypted payload that is fully formed, but not yet | negotiated prf to the content of the response message. For every | |||
| encrypted. The Initialization Vector, the Padding, the Pad Length | following IKE_INTERMEDIATE exchange (if any) peers re-calculate these | |||
| and the Integrity Checksum Data fields (see Section 3.14 of | values as follows. After n-th exchange is completed they compute | |||
| [RFC7296]) are not included into the calculation. In other words, | IntAuth_[i/r]n by applying the negotiated prf to the concatenation of | |||
| the IntAuth_*_[I/R]_P chunk is the inner payloads of the Encrypted | IntAuth_[i/r](n-1) (computed for the previous IKE_INTERMEDIATE | |||
| payload in plaintext form. | exchange) and the content of the request (for IntAuth_in) or response | |||
| (for IntAuth_rn) messages from this exchange. After all | ||||
| IKE_INTERMEDIATE exchanges are over the resulted IntAuth_[i/r]N | ||||
| values (assuming N exchanges took place) are used in the computing | ||||
| the AUTH payload. | ||||
| For the purpose of calculating the IntAuth_[i/r]* values the content | ||||
| of the IKE_INTERMEDIATE messages is represented as two chunks of | ||||
| data: mandatory IntAuth_[i/r]*A optionally followed by IntAuth_[i/ | ||||
| r]*P. | ||||
| The IntAuth_[i/r]*A chunk lasts from the first octet of the IKE | ||||
| Header (not including prepended four octets of zeros, if UDP | ||||
| encapsulation or TCP encapsulation of ESP packets is used) to the | ||||
| last octet of the generic header of the Encrypted payload. The scope | ||||
| of IntAuth_[i/r]*A is identical to the scope of Associated Data | ||||
| defined for use of AEAD algorithms in IKEv2 (see Section 5.1 of | ||||
| [RFC5282]), which is stressed by using "A" suffix in its name. Note, | ||||
| that calculation of IntAuth_[i/r]*A doesn't depend on whether an AEAD | ||||
| algorithm or a plain cipher is used in IKE SA. | ||||
| The IntAuth_[i/r]*P chunk is present if the Encrypted payload is not | ||||
| empty. It consists of the content of the Encrypted payload that is | ||||
| fully formed, but not yet encrypted. The Initialization Vector, the | ||||
| Padding, the Pad Length and the Integrity Checksum Data fields (see | ||||
| Section 3.14 of [RFC7296]) are not included into the calculation. In | ||||
| other words, the IntAuth_[i/r]*P chunk is the inner payloads of the | ||||
| Encrypted payload in plaintext form, which is stressed by using "P" | ||||
| suffix in its name. | ||||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ^ ^ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ^ ^ | |||
| | IKE SA Initiator's SPI | | | | | IKE SA Initiator's SPI | | | | |||
| | | | | | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ I | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ I | | |||
| | IKE SA Responder's SPI | K | | | IKE SA Responder's SPI | K | | |||
| | | E | | | | E | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| skipping to change at page 8, line 5 ¶ | skipping to change at page 8, line 44 ¶ | |||
| | Padding (0-255 octets) | Pad Length | d | | Padding (0-255 octets) | Pad Length | d | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| | | | | | | | | |||
| ~ Integrity Checksum Data ~ | | ~ Integrity Checksum Data ~ | | |||
| | | | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ v | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ v | |||
| Figure 1: Data to Authenticate in the IKE_INTERMEDIATE Exchange | Figure 1: Data to Authenticate in the IKE_INTERMEDIATE Exchange | |||
| Messages | Messages | |||
| Figure 1 illustrates the layout of the IntAuth_*_[I/R]_P (denoted as | Figure 1 illustrates the layout of the IntAuth_[i/r]*A (denoted as A) | |||
| P) and the IntAuth_*_[I/R]_A (denoted as A) chunks in case the | and the IntAuth_[i/r]*P (denoted as P) chunks in case the Encrypted | |||
| Encrypted payload is not empty. | payload is not empty. | |||
| For the purpose of prf calculation the Length field in the IKE header | For the purpose of prf calculation the Length field in the IKE Header | |||
| and the Payload Length field in the Encrypted payload header are | and the Payload Length field in the Encrypted payload header are | |||
| adjusted so that they don't count the lengths of Initialization | adjusted so that they don't count the lengths of Initialization | |||
| Vector, Integrity Checksum Data, Padding and Pad Length fields. In | Vector, Integrity Checksum Data, Padding and Pad Length fields. In | |||
| other words, the Length field in the IKE header (denoted as Adjusted | other words, the Length field in the IKE Header (denoted as Adjusted | |||
| Length in Figure 1) is set to the sum of the lengths of IntAuth_*_[I/ | Length in Figure 1) is set to the sum of the lengths of IntAuth_[i/ | |||
| R]_A and IntAuth_*_[I/R]_P, and the Payload Length field in the | r]*A and IntAuth_[i/r]*P, and the Payload Length field in the | |||
| Encrypted payload header (denoted as Adjusted Payload Length in | Encrypted payload header (denoted as Adjusted Payload Length in | |||
| Figure 1) is set to the length of IntAuth_*_[I/R]_P plus the size of | Figure 1) is set to the length of IntAuth_[i/r]*P plus the size of | |||
| the Encrypted payload header (four octets). | the Encrypted payload header (four octets). | |||
| The prf calculations MUST be applied to whole messages only, before | The prf calculations MUST be applied to whole messages only, before | |||
| possible IKE fragmentation. This ensures that the IntAuth will be | possible IKE fragmentation. This ensures that the IntAuth will be | |||
| the same regardless of whether IKE fragmentation takes place or not. | the same regardless of whether IKE fragmentation takes place or not. | |||
| If the message was received in fragmented form, it MUST be | If the message was received in fragmented form, it MUST be | |||
| reconstructed before calculating prf as if it were received | reconstructed before calculating the prf as if it were received | |||
| unfragmented. While reconstructing, the RESERVED field in the | unfragmented. While reconstructing, the RESERVED field in the | |||
| reconstructed Encrypted payload header MUST be set to the value of | reconstructed Encrypted payload header MUST be set to the value of | |||
| the RESERVED field in the Encrypted Fragment payload header from the | the RESERVED field in the Encrypted Fragment payload header from the | |||
| first fragment (with Fragment Number field set to 1). | first fragment (with Fragment Number field set to 1). | |||
| Note that it is possible to avoid actual reconstruction of the | Note that it is possible to avoid actual reconstruction of the | |||
| message by incrementally calculating prf on decrypted (or ready to be | message by incrementally calculating prf on decrypted (or ready to be | |||
| encrypted) fragments. However care must be taken to properly replace | encrypted) fragments. However care must be taken to properly replace | |||
| the content of the Next Header and the Length fields so that the | the content of the Next Header and the Length fields so that the | |||
| result of computing prf is the same as if it were computed on | result of computing the prf is the same as if it were computed on the | |||
| reconstructed message. | reconstructed message. | |||
| Each calculation of IntAuth_*_[I/R] uses its own keys SK_p[i/r]_*, | Each calculation of IntAuth_[i/r]* uses its own keys SK_p[i/r]*, | |||
| which are the most recently updated SK_p[i/r] keys available before | which are the most recently updated SK_p[i/r] keys available before | |||
| the corresponded IKE_INTERMEDIATE exchange is started. The first | the corresponded IKE_INTERMEDIATE exchange is started. The first | |||
| IKE_INTERMEDIATE exchange always uses SK_p[i/r] keys that were | IKE_INTERMEDIATE exchange always uses the SK_p[i/r] keys that were | |||
| computed in the IKE_SA_INIT as SK_p[i/r]_1. If the first | computed in the IKE_SA_INIT as SK_p[i/r]1. If the first | |||
| IKE_INTERMEDIATE exchange performs additional key exchange resulting | IKE_INTERMEDIATE exchange performs additional key exchange resulting | |||
| in SK_p[i/r] update, then this updated SK_p[i/r] are used as SK_p[i/ | in SK_p[i/r] update, then this updated SK_p[i/r] are used as SK_p[i/ | |||
| r]_2, otherwise the original SK_p[i/r] are used, and so on. Note, | r]2, otherwise the original SK_p[i/r] are used, and so on. Note that | |||
| that if keys are updated then for any given IKE_INTERMEDIATE exchange | if keys are updated, then for any given IKE_INTERMEDIATE exchange the | |||
| the keys SK_e[i/r] and SK_a[i/r] used for its messages protection | keys SK_e[i/r] and SK_a[i/r] used for its messages protection (see | |||
| (see Section 3.3.1) and the keys SK_p[i/r] for its authentication are | Section 3.3.1) and the keys SK_p[i/r] for its authentication are | |||
| always from the same generation. | always from the same generation. | |||
| 3.4. Error Handling in the IKE_INTERMEDIATE Exchange | 3.4. Error Handling in the IKE_INTERMEDIATE Exchange | |||
| Since messages of the IKE_INTERMEDIATE exchange are not authenticated | Since messages of the IKE_INTERMEDIATE exchange are not authenticated | |||
| until the IKE_AUTH exchange successfully completes, possible errors | until the IKE_AUTH exchange successfully completes, possible errors | |||
| need to be handled with care. There is a trade-off between providing | need to be handled with care. There is a trade-off between providing | |||
| a better diagnostics of the problem and a risk to become a part of | better diagnostics of the problem and risk of becoming part of DoS | |||
| DoS attack. See Section 2.21.1 and 2.21.2 of [RFC7296] describe how | attack. Section 2.21.1 and 2.21.2 of [RFC7296] describe how errors | |||
| errors are handled in initial IKEv2 exchanges, these considerations | are handled in initial IKEv2 exchanges; these considerations are also | |||
| are also applied to the IKE_INTERMEDIATE exchange. | applied to the IKE_INTERMEDIATE exchange with a qualification, that | |||
| not all error notifications may ever appear in the IKE_INTERMEDIATE | ||||
| exchange (for example, errors concerning authentication are generally | ||||
| only applicable to the IKE_AUTH exchange). | ||||
| 4. Interaction with other IKEv2 Extensions | 4. Interaction with other IKEv2 Extensions | |||
| The IKE_INTERMEDIATE exchanges MAY be used during the IKEv2 Session | The IKE_INTERMEDIATE exchanges MAY be used during the IKEv2 Session | |||
| Resumption [RFC5723] between the IKE_SESSION_RESUME and the IKE_AUTH | Resumption [RFC5723] between the IKE_SESSION_RESUME and the IKE_AUTH | |||
| exchanges. To be able to use it peers MUST negotiate support for | exchanges. To be able to use it peers MUST negotiate support for | |||
| intermediate exchange by including INTERMEDIATE_EXCHANGE_SUPPORTED | intermediate exchange by including INTERMEDIATE_EXCHANGE_SUPPORTED | |||
| notifications in the IKE_SESSION_RESUME messages. Note, that a flag | notifications in the IKE_SESSION_RESUME messages. Note, that a flag | |||
| whether peers supported the IKE_INTERMEDIATE exchange is not stored | whether peers supported the IKE_INTERMEDIATE exchange is not stored | |||
| in the resumption ticket and is determined each time from the | in the resumption ticket and is determined each time from the | |||
| IKE_SESSION_RESUME exchange. | IKE_SESSION_RESUME exchange. | |||
| 5. Security Considerations | 5. Security Considerations | |||
| The data that is transferred by means of the IKE_INTERMEDIATE | The data that is transferred by means of the IKE_INTERMEDIATE | |||
| exchanges is not authenticated until the subsequent IKE_AUTH exchange | exchanges is not authenticated until the subsequent IKE_AUTH exchange | |||
| is completed. However, if the data is placed inside the Encrypted | is completed. However, if the data is placed inside the Encrypted | |||
| payload, then it is protected from passive eavesdroppers. In | payload, then it is protected from passive eavesdroppers. In | |||
| addition the peers can be certain that they receives messages from | addition, the peers can be certain that they receives messages from | |||
| the party they performed the IKE_SA_INIT with if they can | the party they performed the IKE_SA_INIT with if they can | |||
| successfully verify the Integrity Checksum Data of the Encrypted | successfully verify the Integrity Checksum Data of the Encrypted | |||
| payload. | payload. | |||
| The main application for Intermediate Exchange is to transfer large | The main application for the Intermediate Exchange is to transfer | |||
| amount of data before IKE SA is set up without causing IP | large amounts of data before an IKE SA is set up, without causing IP | |||
| fragmentation. For that reason it is expected that in most cases IKE | fragmentation. For that reason it is expected that in most cases IKE | |||
| fragmentation will be employed in the IKE_INTERMEDIATE exchanges. | fragmentation will be employed in the IKE_INTERMEDIATE exchanges. | |||
| Section 5 of [RFC7383] contains security considerations for IKE | Section 5 of [RFC7383] contains security considerations for IKE | |||
| fragmentation. | fragmentation. | |||
| Note, that if an attacker was able to break key exchange in real time | Since authentication of the peers occurs only in the IKE_AUTH | |||
| (e.g. by means of Quantum Computer), then the security of the | exchange, malicious initiator may use the Intermediate Exchange to | |||
| mount Denial of Service attack on responder. In this case it starts | ||||
| creating IKE SA, negotiates using the Intermediate Exchanges and | ||||
| transfers a lot of data to the responder that may also require some | ||||
| computationally expensive processing. Then it aborts the SA | ||||
| establishment before the IKE_AUTH exchange. Specifications utilizing | ||||
| the Intermediate Exchange MUST NOT allow unlimited number of these | ||||
| exchanges to take place on initiator's discretion. It is RECOMMENDED | ||||
| that these specifications are defined in such a way, that the | ||||
| responder would know (possibly via negotiation with the initiator) | ||||
| the exact number of these exchanges that need to take place. In | ||||
| other words: it is preferred that both the initiator and the | ||||
| responder know after the IKE_SA_INIT is completed the exact number of | ||||
| the IKE_INTERMEDIATE exchanges they have to perform; it is allowed | ||||
| that some IKE_INTERMEDIATE exchanges are optional and are performed | ||||
| on the initiator's discretion, but in this case the maximum number of | ||||
| optional exchanges must be hard capped by the corresponding | ||||
| specification. In addition, [RFC8019] provides guidelines for the | ||||
| responder of how to deal with DoS attacks during IKE SA | ||||
| establishment. | ||||
| Note that if an attacker was able to break the key exchange in real | ||||
| time (e.g. by means of a Quantum Computer), then the security of the | ||||
| IKE_INTERMEDIATE exchange would degrade. In particular, such an | IKE_INTERMEDIATE exchange would degrade. In particular, such an | |||
| attacker would be able both to read data contained in the Encrypted | attacker would be able both to read data contained in the Encrypted | |||
| payload and to forge it. The forgery would become evident in the | payload and to forge it. The forgery would become evident in the | |||
| IKE_AUTH exchange (provided the attacker cannot break employed | IKE_AUTH exchange (provided the attacker cannot break the employed | |||
| authentication mechanism), but the ability to inject forged the | authentication mechanism), but the ability to inject forged | |||
| IKE_INTERMEDIATE exchange messages with valid ICV would allow the | IKE_INTERMEDIATE exchange messages with valid ICV would allow the | |||
| attacker to mount Denial-of-Service attack. Moreover, if in this | attacker to mount a Denial-of-Service attack. Moreover, if in this | |||
| situation the negotiated prf was not secure against preimage attack | situation the negotiated prf was not secure against second preimage | |||
| with known key, then the attacker could forge the IKE_INTERMEDIATE | attack with known key, then the attacker could forge the | |||
| exchange messages without later being detected in the IKE_AUTH | IKE_INTERMEDIATE exchange messages without later being detected in | |||
| exchange. To do this the attacker should find the same | the IKE_AUTH exchange. To do this the attacker would find the same | |||
| IntAuth_*_[I|R] value for the forged message as for original. | IntAuth_[i/r]* value for the forged message as for original. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| This document defines a new Exchange Type in the "IKEv2 Exchange | This document defines a new Exchange Type in the "IKEv2 Exchange | |||
| Types" registry: | Types" registry: | |||
| 43 IKE_INTERMEDIATE | 43 IKE_INTERMEDIATE | |||
| This document also defines a new Notify Message Type in the "Notify | This document also defines a new Notify Message Type in the "Notify | |||
| Message Types - Status Types" registry: | Message Types - Status Types" registry: | |||
| skipping to change at page 10, line 44 ¶ | skipping to change at page 12, line 12 ¶ | |||
| o libreswan (only one IKE_INTERMEDIATE exchange is supported) | o libreswan (only one IKE_INTERMEDIATE exchange is supported) | |||
| 8. Acknowledgements | 8. Acknowledgements | |||
| The idea to use an intermediate exchange between IKE_SA_INIT and | The idea to use an intermediate exchange between IKE_SA_INIT and | |||
| IKE_AUTH was first suggested by Tero Kivinen. He also helped with | IKE_AUTH was first suggested by Tero Kivinen. He also helped with | |||
| writing an example of using IKE_INTERMEDIATE exchange (shown in | writing an example of using IKE_INTERMEDIATE exchange (shown in | |||
| Appendix A). Scott Fluhrer and Daniel Van Geest identified a | Appendix A). Scott Fluhrer and Daniel Van Geest identified a | |||
| possible problem with authentication of the IKE_INTERMEDIATE exchange | possible problem with authentication of the IKE_INTERMEDIATE exchange | |||
| and helped to resolve it. Author is also grateful to Tobias Brunner | and helped to resolve it. Author is grateful to Tobias Brunner who | |||
| for raising good points concerning authentication of the | raised good questions concerning authentication of the | |||
| IKE_INTERMEDIATE exchange and to Paul Wouters who suggested text | IKE_INTERMEDIATE exchange and proposed how to make the size of | |||
| improvements for the document. | authentication chunk constant regadless of the number of exchanges. | |||
| Author is also grateful to Paul Wouters and to Benjamin Kaduk who | ||||
| suggested a lot of text improvements for the document. | ||||
| 9. References | 9. References | |||
| 9.1. Normative References | 9.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| skipping to change at page 11, line 30 ¶ | skipping to change at page 12, line 44 ¶ | |||
| (IKEv2)", STD 79, RFC 7296, DOI 10.17487/RFC7296, October | (IKEv2)", STD 79, RFC 7296, DOI 10.17487/RFC7296, October | |||
| 2014, <https://www.rfc-editor.org/info/rfc7296>. | 2014, <https://www.rfc-editor.org/info/rfc7296>. | |||
| [RFC7383] Smyslov, V., "Internet Key Exchange Protocol Version 2 | [RFC7383] Smyslov, V., "Internet Key Exchange Protocol Version 2 | |||
| (IKEv2) Message Fragmentation", RFC 7383, | (IKEv2) Message Fragmentation", RFC 7383, | |||
| DOI 10.17487/RFC7383, November 2014, | DOI 10.17487/RFC7383, November 2014, | |||
| <https://www.rfc-editor.org/info/rfc7383>. | <https://www.rfc-editor.org/info/rfc7383>. | |||
| 9.2. Informative References | 9.2. Informative References | |||
| [RFC8229] Pauly, T., Touati, S., and R. Mantha, "TCP Encapsulation | [RFC5282] Black, D. and D. McGrew, "Using Authenticated Encryption | |||
| of IKE and IPsec Packets", RFC 8229, DOI 10.17487/RFC8229, | Algorithms with the Encrypted Payload of the Internet Key | |||
| August 2017, <https://www.rfc-editor.org/info/rfc8229>. | Exchange version 2 (IKEv2) Protocol", RFC 5282, | |||
| DOI 10.17487/RFC5282, August 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5282>. | ||||
| [RFC5723] Sheffer, Y. and H. Tschofenig, "Internet Key Exchange | [RFC5723] Sheffer, Y. and H. Tschofenig, "Internet Key Exchange | |||
| Protocol Version 2 (IKEv2) Session Resumption", RFC 5723, | Protocol Version 2 (IKEv2) Session Resumption", RFC 5723, | |||
| DOI 10.17487/RFC5723, January 2010, | DOI 10.17487/RFC5723, January 2010, | |||
| <https://www.rfc-editor.org/info/rfc5723>. | <https://www.rfc-editor.org/info/rfc5723>. | |||
| [RFC8019] Nir, Y. and V. Smyslov, "Protecting Internet Key Exchange | ||||
| Protocol Version 2 (IKEv2) Implementations from | ||||
| Distributed Denial-of-Service Attacks", RFC 8019, | ||||
| DOI 10.17487/RFC8019, November 2016, | ||||
| <https://www.rfc-editor.org/info/rfc8019>. | ||||
| [RFC8229] Pauly, T., Touati, S., and R. Mantha, "TCP Encapsulation | ||||
| of IKE and IPsec Packets", RFC 8229, DOI 10.17487/RFC8229, | ||||
| August 2017, <https://www.rfc-editor.org/info/rfc8229>. | ||||
| Appendix A. Example of IKE_INTERMEDIATE exchange | Appendix A. Example of IKE_INTERMEDIATE exchange | |||
| This appendix contains an example of the messages using | This appendix contains an example of the messages using | |||
| IKE_INTERMEDIATE exchange. This appendix is purely informative; if | IKE_INTERMEDIATE exchanges. This appendix is purely informative; if | |||
| it disagrees with the body of this document, the other text is | it disagrees with the body of this document, the other text is | |||
| considered correct. | considered correct. | |||
| In this example there is one IKE_SA_INIT exchange, two | In this example there is one IKE_SA_INIT exchange and two | |||
| IKE_INTERMEDIATE exchanges followed by the IKE_AUTH exchange to | IKE_INTERMEDIATE exchanges, followed by the IKE_AUTH exchange to | |||
| authenticate all initial exchanges. The xxx in the HDR(xxx,MID=yyy) | authenticate all initial exchanges. The xxx in the HDR(xxx,MID=yyy) | |||
| indicates the exchange type, and yyy tells the message id used for | indicates the exchange type, and yyy tells the message id used for | |||
| that exchange. The keys used for each SK {} payload are indicated in | that exchange. The keys used for each SK {} payload are indicated in | |||
| the parenthesis after the SK. Otherwise payload notation is same as | the parenthesis after the SK. Otherwise, the payload notation is the | |||
| is used in [RFC7296]. | same as is used in [RFC7296]. | |||
| Initiator Responder | Initiator Responder | |||
| ----------- ----------- | ----------- ----------- | |||
| HDR(IKE_SA_INIT,MID=0), | HDR(IKE_SA_INIT,MID=0), | |||
| SAi1, KEi, Ni, | SAi1, KEi, Ni, | |||
| N(INTERMEDIATE_EXCHANGE_SUPPORTED) --> | N(INTERMEDIATE_EXCHANGE_SUPPORTED) --> | |||
| <-- HDR(IKE_SA_INIT,MID=0), | <-- HDR(IKE_SA_INIT,MID=0), | |||
| SAr1, KEr, Nr, [CERTREQ], | SAr1, KEr, Nr, [CERTREQ], | |||
| N(INTERMEDIATE_EXCHANGE_SUPPORTED) | N(INTERMEDIATE_EXCHANGE_SUPPORTED) | |||
| At this point peers calculate SK_* and store them as SK_*_1. SK_e[i/ | At this point peers calculate SK_* and store them as SK_*1. SK_e[i/ | |||
| r]_1 and SK_a[i/r]_1 will be used to protect the first | r]1 and SK_a[i/r]1 will be used to protect the first IKE_INTERMEDIATE | |||
| IKE_INTERMEDIATE exchange and SK_p[i/r]_1 will be used for its | exchange and SK_p[i/r]1 will be used for its authentication. | |||
| authentication. | ||||
| Initiator Responder | Initiator Responder | |||
| ----------- ----------- | ----------- ----------- | |||
| HDR(IKE_INTERMEDIATE,MID=1), | HDR(IKE_INTERMEDIATE,MID=1), | |||
| SK(SK_ei_1,SK_ai_1) {...} --> | SK(SK_ei1,SK_ai1) {...} --> | |||
| <Calculate IntAuth_1_I = prf(SK_pi_1, ...)> | <Calculate IntAuth_i1 = prf(SK_pi1, ...)> | |||
| <-- HDR(IKE_INTERMEDIATE,MID=1), | <-- HDR(IKE_INTERMEDIATE,MID=1), | |||
| SK(SK_er_1,SK_ar_1) {...} | SK(SK_er1,SK_ar1) {...} | |||
| <Calculate IntAuth_1_R = prf(SK_pr_1, ...)> | <Calculate IntAuth_r1 = prf(SK_pr1, ...)> | |||
| If after completing this IKE_INTERMEDIATE exchange SK_*_1 keys are | If after completing this IKE_INTERMEDIATE exchange the SK_*1 keys are | |||
| updated (e.g., as a result of a new key exchange), then peers store | updated (e.g., as a result of a new key exchange), then the peers | |||
| updated keys as SK_*_2, otherwise they use SK_*_1 as SK_*_2. SK_e[i/ | store the updated keys as SK_*2, otherwise they use SK_*1 as SK_*2. | |||
| r]_2 and SK_a[i/r]_2 will be used to protect the second | SK_e[i/r]2 and SK_a[i/r]2 will be used to protect the second | |||
| IKE_INTERMEDIATE exchange and SK_p[i/r]_2 will be used for its | IKE_INTERMEDIATE exchange and SK_p[i/r]2 will be used for its | |||
| authentication. | authentication. | |||
| Initiator Responder | Initiator Responder | |||
| ----------- ----------- | ----------- ----------- | |||
| HDR(IKE_INTERMEDIATE,MID=2), | HDR(IKE_INTERMEDIATE,MID=2), | |||
| SK(SK_ei_2,SK_ai_2) {...} --> | SK(SK_ei2,SK_ai2) {...} --> | |||
| <Calculate IntAuth_2_I = prf(SK_pi_2, ...)> | <Calculate IntAuth_i2 = prf(SK_pi2, ...)> | |||
| <-- HDR(IKE_INTERMEDIATE,MID=2), | <-- HDR(IKE_INTERMEDIATE,MID=2), | |||
| SK(SK_er_2,SK_ar_2) {...} | SK(SK_er2,SK_ar2) {...} | |||
| <Calculate IntAuth_2_R = prf(SK_pr_2, ...)> | <Calculate IntAuth_r2 = prf(SK_pr2, ...)> | |||
| If after completing the second IKE_INTERMEDIATE exchange SK_*_2 keys | If after completing the second IKE_INTERMEDIATE exchange the SK_*2 | |||
| are updated (e.g., as a result of a new key exchange), then peers | keys are updated (e.g., as a result of a new key exchange), then the | |||
| store updated keys as SK_*_3, otherwise they use SK_*_2 as SK_*_3. | peers store the updated keys as SK_*3, otherwise they use SK_*2 as | |||
| SK_e[i/r]_3 and SK_a[i/r]_3 will be used to protect the IKE_AUTH | SK_*3. SK_e[i/r]3 and SK_a[i/r]3 will be used to protect the | |||
| exchange, SK_p[i/r]_3 will be used for authentication and SK_d_3 will | IKE_AUTH exchange, SK_p[i/r]3 will be used for authentication, and | |||
| be used for derivation of other keys (e.g. for Child SAs). | SK_d3 will be used for derivation of other keys (e.g. for Child SAs). | |||
| Initiator Responder | Initiator Responder | |||
| ----------- ----------- | ----------- ----------- | |||
| HDR(IKE_AUTH,MID=3), | HDR(IKE_AUTH,MID=3), | |||
| SK(SK_ei_3,SK_ai_3) | SK(SK_ei3,SK_ai3) | |||
| {IDi, [CERT,] [CERTREQ,] | {IDi, [CERT,] [CERTREQ,] | |||
| [IDr,] AUTH, SAi2, TSi, TSr} --> | [IDr,] AUTH, SAi2, TSi, TSr} --> | |||
| <-- HDR(IKE_AUTH,MID=3), | <-- HDR(IKE_AUTH,MID=3), | |||
| SK(SK_er_3,SK_ar_3) | SK(SK_er3,SK_ar3) | |||
| {IDr, [CERT,] AUTH, SAr2, TSi, TSr} | {IDr, [CERT,] AUTH, SAr2, TSi, TSr} | |||
| In this example two IKE_INTERMEDIATE exchanges took place, therefore | In this example two IKE_INTERMEDIATE exchanges took place, therefore | |||
| SK_*_3 keys would be used as SK_* keys for further cryptographic | SK_*3 keys would be used as SK_* keys for further cryptographic | |||
| operations in the context of the created IKE SA, as defined in | operations in the context of the created IKE SA, as defined in | |||
| [RFC7296]. | [RFC7296]. | |||
| Author's Address | Author's Address | |||
| Valery Smyslov | Valery Smyslov | |||
| ELVIS-PLUS | ELVIS-PLUS | |||
| PO Box 81 | PO Box 81 | |||
| Moscow (Zelenograd) 124460 | Moscow (Zelenograd) 124460 | |||
| RU | RU | |||
| End of changes. 67 change blocks. | ||||
| 156 lines changed or deleted | 227 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/ | ||||