rfc9370.original | rfc9370.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) C. Tjhai | Internet Engineering Task Force (IETF) CJ. Tjhai | |||
Internet-Draft M. Tomlinson | Request for Comments: 9370 M. Tomlinson | |||
Updates: 7296 (if approved) Post-Quantum | Updates: 7296 Post-Quantum | |||
Intended status: Standards Track G. Bartlett | Category: Standards Track G. Bartlett | |||
Expires: 4 June 2023 Quantum Secret | ISSN: 2070-1721 Quantum Secret | |||
S. Fluhrer | S. Fluhrer | |||
Cisco Systems | Cisco Systems | |||
D. Van Geest | D. Van Geest | |||
ISARA Corporation | ISARA Corporation | |||
O. Garcia-Morchon | O. Garcia-Morchon | |||
Philips | Philips | |||
V. Smyslov | V. Smyslov | |||
ELVIS-PLUS | ELVIS-PLUS | |||
1 December 2022 | May 2023 | |||
Multiple Key Exchanges in IKEv2 | Multiple Key Exchanges in the Internet Key Exchange Protocol Version 2 | |||
draft-ietf-ipsecme-ikev2-multiple-ke-12 | (IKEv2) | |||
Abstract | Abstract | |||
This document describes how to extend the Internet Key Exchange | This document describes how to extend the Internet Key Exchange | |||
Protocol Version 2 (IKEv2) to allow multiple key exchanges to take | Protocol Version 2 (IKEv2) to allow multiple key exchanges to take | |||
place while computing a shared secret during a Security Association | place while computing a shared secret during a Security Association | |||
(SA) setup. | (SA) setup. | |||
The primary application of this feature in IKEv2 is the ability to | This document utilizes the IKE_INTERMEDIATE exchange, where multiple | |||
perform one or more post-quantum key exchanges in conjunction with | key exchanges are performed when an IKE SA is being established. It | |||
the classical (Elliptic Curve) Diffie-Hellman (EC)DH key exchange, so | also introduces a new IKEv2 exchange, IKE_FOLLOWUP_KE, which is used | |||
that the resulting shared key is resistant against quantum computer | for the same purpose when the IKE SA is being rekeyed or is creating | |||
attacks. Since there is currently no post-quantum key exchange that | additional Child SAs. | |||
is as well-studied as (EC)DH, performing multiple key exchanges with | ||||
different post-quantum algorithms along with the well-established | ||||
classical key exchange algorithms addresses this concern, since the | ||||
overall security is at least as strong as each individual primitive. | ||||
Another possible application for this extension is the ability to | ||||
combine several key exchanges in situations when no single key | ||||
exchange algorithm is trusted by both initiator and responder. | ||||
This document utilizes the IKE_INTERMEDIATE exchange, by means of | ||||
which multiple key exchanges are performed when an IKE SA is being | ||||
established. It also introduces a new IKEv2 exchange | ||||
IKE_FOLLOWUP_KE, which is used for the same purpose when the IKE SA | ||||
is up (during rekeys or creating additional Child SAs). | ||||
This document updates RFC7296 by renaming a transform type 4 from | This document updates RFC 7296 by renaming a Transform Type 4 from | |||
"Diffie-Hellman Group (D-H)" to "Key Exchange Method (KE)" and | "Diffie-Hellman Group (D-H)" to "Key Exchange Method (KE)" and | |||
renaming a field in the Key Exchange Payload from "Diffie-Hellman | renaming a field in the Key Exchange Payload from "Diffie-Hellman | |||
Group Num" to "Key Exchange Method". It also renames an IANA | Group Num" to "Key Exchange Method". It also renames an IANA | |||
registry for this transform type from "Transform Type 4 - Diffie- | registry for this Transform Type from "Transform Type 4 - Diffie- | |||
Hellman Group Transform IDs" to "Transform Type 4 - Key Exchange | Hellman Group Transform IDs" to "Transform Type 4 - Key Exchange | |||
Method Transform IDs". These changes generalize key exchange | Method Transform IDs". These changes generalize key exchange | |||
algorithms that can be used in IKEv2. | algorithms that can be used in IKEv2. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 4 June 2023. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9370. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2023 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Problem Description . . . . . . . . . . . . . . . . . . . 3 | 1.1. Problem Description | |||
1.2. Proposed Extension . . . . . . . . . . . . . . . . . . . 4 | 1.2. Proposed Extension | |||
1.3. Changes . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.3. Document Organization | |||
1.4. Document Organization . . . . . . . . . . . . . . . . . . 7 | 2. Multiple Key Exchanges | |||
2. Multiple Key Exchanges . . . . . . . . . . . . . . . . . . . 8 | 2.1. Design Overview | |||
2.1. Design Overview . . . . . . . . . . . . . . . . . . . . . 8 | 2.2. Protocol Details | |||
2.2. Protocol Details . . . . . . . . . . . . . . . . . . . . 10 | 2.2.1. IKE_SA_INIT Round: Negotiation | |||
2.2.1. IKE_SA_INIT Round: Negotiation . . . . . . . . . . . 10 | 2.2.2. IKE_INTERMEDIATE Round: Additional Key Exchanges | |||
2.2.2. IKE_INTERMEDIATE Round: Additional Key Exchanges . . 15 | 2.2.3. IKE_AUTH Exchange | |||
2.2.3. IKE_AUTH Exchange . . . . . . . . . . . . . . . . . . 16 | 2.2.4. CREATE_CHILD_SA Exchange | |||
2.2.4. CREATE_CHILD_SA Exchange . . . . . . . . . . . . . . 16 | 2.2.5. Interaction with IKEv2 Extensions | |||
2.2.5. Interaction with IKEv2 Extensions . . . . . . . . . . 19 | 3. IANA Considerations | |||
3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 | 4. Security Considerations | |||
3.1. Additional Considerations and Changes . . . . . . . . . . 21 | 5. References | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | 5.1. Normative References | |||
5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 24 | 5.2. Informative References | |||
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | Appendix A. Sample Multiple Key Exchanges | |||
6.1. Normative References . . . . . . . . . . . . . . . . . . 24 | ||||
6.2. Informative References . . . . . . . . . . . . . . . . . 25 | ||||
Appendix A. Sample Multiple Key Exchanges . . . . . . . . . . . 26 | ||||
A.1. IKE_INTERMEDIATE Exchanges Carrying Additional Key Exchange | A.1. IKE_INTERMEDIATE Exchanges Carrying Additional Key Exchange | |||
Payloads . . . . . . . . . . . . . . . . . . . . . . . . 26 | Payloads | |||
A.2. No Additional Key Exchange Used . . . . . . . . . . . . . 28 | A.2. No Additional Key Exchange Used | |||
A.3. Additional Key Exchange in the CREATE_CHILD_SA Exchange | A.3. Additional Key Exchange in the CREATE_CHILD_SA Exchange | |||
only . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | Only | |||
A.4. No Matching Proposal for Additional Key Exchanges . . . . 31 | A.4. No Matching Proposal for Additional Key Exchanges | |||
Appendix B. Design Criteria . . . . . . . . . . . . . . . . . . 31 | Appendix B. Design Criteria | |||
Appendix C. Alternative Design . . . . . . . . . . . . . . . . . 33 | Appendix C. Alternative Design | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 37 | Acknowledgements | |||
Authors' Addresses | ||||
1. Introduction | 1. Introduction | |||
1.1. Problem Description | 1.1. Problem Description | |||
Internet Key Exchange Protocol (IKEv2) as specified in [RFC7296] uses | The Internet Key Exchange Protocol version 2 (IKEv2), as specified in | |||
the Diffie-Hellman (DH) or Elliptic Curve Diffie-Hellman (ECDH) | [RFC7296], uses the Diffie-Hellman (DH) or the Elliptic Curve Diffie- | |||
algorithm, which shall be referred to as (EC)DH collectively, to | Hellman (ECDH) algorithm, which shall be referred to as "(EC)DH" | |||
establish a shared secret between an initiator and a responder. The | collectively, to establish a shared secret between an initiator and a | |||
security of the (EC)DH algorithms relies on the difficulty to solve a | responder. The security of the (EC)DH algorithms relies on the | |||
discrete logarithm problem in multiplicative (and respectively | difficulty to solve a discrete logarithm problem in multiplicative | |||
elliptic curve) groups when the order of the group parameter is large | (and, respectively, elliptic curve) groups when the order of the | |||
enough. While solving such a problem remains infeasible with current | group parameter is large enough. While solving such a problem | |||
computing power, it is believed that general purpose quantum | remains infeasible with current computing power, it is believed that | |||
computers will be able to solve this problem, implying that the | general-purpose quantum computers will be able to solve this problem, | |||
security of IKEv2 is compromised. There are, however, a number of | implying that the security of IKEv2 is compromised. There are, | |||
cryptosystems that are conjectured to be resistant against quantum | however, a number of cryptosystems that are conjectured to be | |||
computer attack. This family of cryptosystems is known as post- | resistant to quantum-computer attacks. This family of cryptosystems | |||
quantum cryptography (PQC). It is sometimes also referred to as | is known as "post-quantum cryptography" (or "PQC"). It is sometimes | |||
quantum-safe cryptography (QSC) or quantum-resistant cryptography | also referred to as "quantum-safe cryptography" (or "QSC") or | |||
(QRC). | "quantum-resistant cryptography" (or "QRC"). | |||
It is essential to have the ability to perform one or more post- | ||||
quantum key exchanges in conjunction with an (EC)DH key exchange so | ||||
that the resulting shared key is resistant to quantum-computer | ||||
attacks. Since there is currently no post-quantum key exchange that | ||||
is as well-studied as (EC)DH, performing multiple key exchanges with | ||||
different post-quantum algorithms along with the well-established | ||||
classical key-exchange algorithms addresses this concern, since the | ||||
overall security is at least as strong as each individual primitive. | ||||
1.2. Proposed Extension | 1.2. Proposed Extension | |||
This document describes a method to perform multiple successive key | This document describes a method to perform multiple successive key | |||
exchanges in IKEv2. It allows integration of PQC in IKEv2, while | exchanges in IKEv2. This method allows integration of PQC in IKEv2, | |||
maintaining backwards compatibility, to derive a set of IKE keys that | while maintaining backward compatibility, to derive a set of IKE keys | |||
is resistant to quantum computer attacks. This extension allows the | that is resistant to quantum-computer attacks. This extension allows | |||
negotiation of one or more PQC algorithm to exchange data, in | the negotiation of one or more PQC algorithms to exchange data, in | |||
addition to the existing (EC)DH key exchange data. It is believed | addition to the existing (EC)DH key exchange data. It is believed | |||
that the feature of using more than one post-quantum algorithms is | that the feature of using more than one post-quantum algorithm is | |||
important as many of these algorithms are relatively new and there | important, as many of these algorithms are relatively new, and there | |||
may be a need to hedge the security risk with multiple key exchange | may be a need to hedge the security risk with multiple key exchange | |||
data from several distinct PQC algorithms. | data from several distinct PQC algorithms. | |||
IKE peers perform multiple successive key exchanges to establish an | IKE peers perform multiple successive key exchanges to establish an | |||
IKE Security Association (SA). Each exchange produces a piece of | IKE SA. Each exchange produces some shared secret, and these secrets | |||
secret and these secrets are combined in a way such that: | are combined in a way such that: | |||
(a) the final shared secret is computed from all of the component | (a) the final shared secret is computed from all of the component | |||
key exchange secret; | key exchange secrets; | |||
(b) the shared secret as specified in [RFC7296] is obtained unless | (b) unless both peers support and agree to use the additional key | |||
both peers support and agree to use the additional key exchanges | exchanges introduced in this specification, the final shared | |||
introduced in this specification; and | secret equivalent to the shared secret specified in [RFC7296] is | |||
obtained; and | ||||
(c) if any of the component key exchange method is a post-quantum | (c) if any part of the component key exchange method is a post- | |||
algorithm, the final shared secret is post-quantum secure. | quantum algorithm, the final shared secret is post-quantum | |||
secure. | ||||
Some post-quantum key exchange payloads may have sizes larger than | Some post-quantum key exchange payloads may have sizes larger than | |||
the standard maximum transmission unit (MTU) size, and therefore | the standard maximum transmission unit (MTU) size. Therefore, there | |||
there could be issues with fragmentation at the IP layer. In order | could be issues with fragmentation at the IP layer. In order to | |||
to allow using those larger payload sizes, this mechanism relies on | allow the use of those larger payload sizes, this mechanism relies on | |||
the IKE_INTERMEDIATE exchange as specified in [RFC9242]. With this | the IKE_INTERMEDIATE exchange as specified in [RFC9242]. With this | |||
mechanism, the key exchange is initiated using a smaller, possibly | mechanism, the key exchange is initiated using a smaller, possibly | |||
classical primitive, such as (EC)DH. Then, before the IKE_AUTH | classical primitive, such as (EC)DH. Then, before the IKE_AUTH | |||
exchange, one or more IKE_INTERMEDIATE exchanges are carried out, | exchange, one or more IKE_INTERMEDIATE exchanges are carried out, | |||
each of which contains an additional key exchange. As the | each of which contains an additional key exchange. As the | |||
IKE_INTERMEDIATE exchange is encrypted, the IKE fragmentation | IKE_INTERMEDIATE exchange is encrypted, the IKE fragmentation | |||
protocol [RFC7383] can be used. The IKE SK_* values are updated | protocol [RFC7383] can be used. The IKE SK_* values are updated | |||
after each exchange as described in Section 2.2.2, and so the final | after each exchange, as described in Section 2.2.2; thus, the final | |||
IKE SA keys depend on all the key exchanges, hence they are secure if | IKE SA keys depend on all the key exchanges. Hence, the keys are | |||
any of the key exchanges are secure. | secure if any of the key exchanges are secure. | |||
While this extension is primarily aimed for IKE SAs due to the | While this extension is primarily aimed at IKE SAs due to the | |||
potential fragmentation issue discussed above, it also applies to | potential fragmentation issue discussed above, it also applies to | |||
CREATE_CHILD_SA exchanges as illustrated in Section 2.2.4 for | CREATE_CHILD_SA exchanges as illustrated in Section 2.2.4 for | |||
creating/rekeying of Child SAs and rekeying of IKE SAs. | creating/rekeying of Child SAs and rekeying of IKE SAs. | |||
Note that readers should consider the approach defined in this | Note that readers should consider the approach defined in this | |||
document as providing a long term solution in upgrading the IKEv2 | document as providing a long-term solution in upgrading the IKEv2 | |||
protocol to support post-quantum algorithms. A short term solution | protocol to support post-quantum algorithms. A short-term solution | |||
to make IKEv2 key exchange quantum secure is to use post-quantum pre- | to make IKEv2 key exchange quantum secure is to use post-quantum pre- | |||
shared keys as specified in [RFC8784]. | shared keys as specified in [RFC8784]. | |||
Note also that the proposed approach of performing multiple | Note also that the proposed approach of performing multiple | |||
successive key exchanges in such a way that resulting session keys | successive key exchanges in such a way, when the resulting session | |||
depend on all of them is not limited to only addressing the threat of | keys depend on all of them, is not limited to only addressing the | |||
quantum computer. It can also be used when all of the performed key | threat of quantum computers. It can also be used when all of the | |||
exchanges are classical (EC)DH primitives, where for some reasons | performed key exchanges are classical (EC)DH primitives, where, for | |||
(e.g. policy requirements) it is essential to perform multiple of | various reasons (e.g., policy requirements), it is essential to | |||
them. | perform multiple key exchanges. | |||
This specification does not attempt to address key exchanges with KE | This specification does not attempt to address key exchanges with KE | |||
payloads longer than 64 Kbytes; the current IKE payload format does | payloads longer than 64 KB; the current IKE payload format does not | |||
not allow such as possibility. At the time of writing, it appears | allow such a possibility. At the time of writing, it appears likely | |||
likely that there are a number of key exchanges available that would | that there are a number of key exchanges available that would not | |||
not have such a requirement. However, if such a requirement is | have such a requirement. [BEYOND-64K] discusses approaches that | |||
needed, [I-D.tjhai-ikev2-beyond-64k-limit] discusses approaches that | could be taken to exchange huge payloads if such a requirement were | |||
could be taken to exchange huge payloads. | needed. | |||
1.3. Changes | ||||
RFC EDITOR PLEASE DELETE THIS SECTION. | ||||
Changes in this draft in each version iterations. | ||||
draft-ietf-ipsecme-ikev2-multiple-ke-07 | ||||
* Editorial changes. | ||||
draft-ietf-ipsecme-ikev2-multiple-ke-06 | ||||
* Updated draft with the allocated IANA values. | ||||
* Editorial changes following AD review. | ||||
draft-ietf-ipsecme-ikev2-multiple-ke-05 | ||||
* Updated the reference to RFC9242. | ||||
* Editorial changes. | ||||
draft-ietf-ipsecme-ikev2-multiple-ke-04 | ||||
* Introduction and initial sections are reorganized. | ||||
* More clarifications for error handling added. | ||||
* ASCII arts displaying SA payload are added. | ||||
* Clarification for handling multiple round trips key exchange | ||||
methods added. | ||||
* DoS concerns added into Security Considerations section. | ||||
* Explicitly allow scenario when additional key exchanges are | ||||
performed only after peers are authenticated. | ||||
draft-ietf-ipsecme-ikev2-multiple-ke-03 | ||||
* More clarifications added. | ||||
* Figure illustrating initial exchange added. | ||||
* Minor editorial changes. | ||||
draft-ietf-ipsecme-ikev2-multiple-ke-02 | ||||
* Added a reference on the handling of KE payloads larger than 64KB. | ||||
draft-ietf-ipsecme-ikev2-multiple-ke-01 | ||||
* References are updated. | ||||
draft-ietf-ipsecme-ikev2-multiple-ke-00 | ||||
* Draft name changed as result of WG adoption and generalization of | ||||
the approach. | ||||
* New exchange IKE_FOLLOWUP_KE is defined for additional key | ||||
exchanges performed after CREATE_CHILD_SA. | ||||
* Nonces are removed from all additional key exchanges. | ||||
* Clarification that IKE_INTERMEDIATE must be negotiated is added. | ||||
draft-tjhai-ipsecme-hybrid-qske-ikev2-04 | ||||
* Clarification about key derivation in case of multiple key | ||||
exchanges in CREATE_CHILD_SA is added. | ||||
* Resolving rekey collisions in case of multiple key exchanges is | ||||
clarified. | ||||
* Using multiple key exchanges CREATE_CHILD_SA is defined. | ||||
draft-tjhai-ipsecme-hybrid-qske-ikev2-02 | ||||
* Use new transform types to negotiate additional key exchanges, | ||||
rather than using the KE payloads of IKE SA. | ||||
draft-tjhai-ipsecme-hybrid-qske-ikev2-01 | ||||
* Use IKE_INTERMEDIATE to perform multiple key exchanges in | ||||
succession. | ||||
* Handle fragmentation by keeping the first key exchange (a standard | ||||
IKE_SA_INIT with a few extra notifies) small, and encrypting the | ||||
rest of the key exchanges. | ||||
* Simplify the negotiation of the 'extra' key exchanges. | ||||
draft-tjhai-ipsecme-hybrid-qske-ikev2-00 | ||||
* Added a feature to allow more than one post-quantum key exchange | ||||
algorithms to be negotiated and used to exchange a post- quantum | ||||
shared secret. | ||||
* Instead of relying on TCP encapsulation to deal with IP level | ||||
fragmentation, a new key exchange payload that can be sent as | ||||
multiple fragments within IKE_SA_INIT message was introduced. | ||||
1.4. Document Organization | 1.3. Document Organization | |||
The remainder of this document is organized as follows. Section 2 | The remainder of this document is organized as follows. Section 2 | |||
describes how multiple key exchanges are performed between two IKE | describes how multiple key exchanges are performed between two IKE | |||
peers and how keying materials are derived for both SAs and Child | peers and how keying materials are derived for both SAs and Child | |||
SAs. Section 3 discusses IANA considerations for the namespaces | SAs. Section 3 discusses IANA considerations for the namespaces | |||
introduced in this document, and Section 4 discusses security | introduced in this document. Section 4 discusses security | |||
considerations. In the Appendices sections, some examples of | considerations. In the Appendices, some examples of multiple key | |||
multiple key exchanges are illustrated in Appendix A, Appendix B | exchanges are illustrated in Appendix A. Appendix B summarizes | |||
summarizes design criteria and a summary of alternative approaches | design criteria and alternative approaches that have been considered. | |||
that have been considered, but later discarded, are described in | These approaches are later discarded, as described in Appendix C. | |||
Appendix C. | ||||
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 | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Multiple Key Exchanges | 2. Multiple Key Exchanges | |||
2.1. Design Overview | 2.1. Design Overview | |||
Most post-quantum key agreement algorithms are relatively new, and | Most post-quantum key agreement algorithms are relatively new. Thus, | |||
thus are not fully trusted. There are also many proposed algorithms, | they are not fully trusted. There are also many proposed algorithms | |||
with different trade-offs and relying on different hard problems. | that have different trade-offs and that rely on different hard | |||
The concern is that some of these hard problems may turn out to be | problems. The concern is that some of these hard problems may turn | |||
easier to solve than anticipated and thus the key agreement algorithm | out to be easier to solve than anticipated; thus, the key agreement | |||
may not be as secure as expected. A hybrid solution, when multiple | algorithm may not be as secure as expected. A hybrid solution, when | |||
key exchanges are performed and the calculated shared key depends on | multiple key exchanges are performed and the calculated shared key | |||
all of them, allows us to deal with this uncertainty by combining a | depends on all of them, allows us to deal with this uncertainty by | |||
classical key exchange with a post-quantum one, as well as leaving | combining a classical key exchange with a post-quantum one, as well | |||
open the possibility of multiple post-quantum key exchanges. | as leaving open the possibility of combining it with multiple post- | |||
quantum key exchanges. | ||||
In order to be able to use IKE fragmentation [RFC7383] for those key | In order to be able to use IKE fragmentation [RFC7383] for those key | |||
exchanges that may have long public keys, this specification utilizes | exchanges that may have long public keys, this specification utilizes | |||
the IKE_INTERMEDIATE exchange defined in [RFC9242]. The initial | the IKE_INTERMEDIATE exchange defined in [RFC9242]. The initial | |||
IKE_SA_INIT messages do not have any inherent fragmentation support | IKE_SA_INIT messages do not have any inherent fragmentation support | |||
within IKE; however, IKE_SA_INIT messages can include a relatively | within IKE. However, IKE_SA_INIT messages can include a relatively | |||
short KE payload. The additional key exchanges are performed using | short KE payload. The additional key exchanges are performed using | |||
IKE_INTERMEDIATE messages that follow the IKE_SA_INIT exchange. This | IKE_INTERMEDIATE messages that follow the IKE_SA_INIT exchange. This | |||
is to allow the standard IKE fragmentation mechanisms (which cannot | is to allow the standard IKE fragmentation mechanisms (which cannot | |||
be used in IKE_SA_INIT) to be available for the potentially large Key | be used in IKE_SA_INIT) to be available for the potentially large Key | |||
Exchange payloads with post-quantum algorithm data. | Exchange payloads with post-quantum algorithm data. | |||
Note that this document assumes, that each key exchange method | Note that this document assumes that each key exchange method | |||
requires one round trip and consumes exactly one IKE_INTERMEDIATE | requires one round trip and consumes exactly one IKE_INTERMEDIATE | |||
exchange. This assumption is valid for all classic key exchange | exchange. This assumption is valid for all classic key exchange | |||
methods defined so far and for all post-quantum methods currently | methods defined so far and for all post-quantum methods currently | |||
known. For hypothetical future key exchange methods requiring | known. For hypothetical future key exchange methods that require | |||
multiple round trips to complete, a separate document should define | multiple round trips to complete, a separate document should define | |||
how such methods are split into several IKE_INTERMEDIATE exchanges. | how such methods are split into several IKE_INTERMEDIATE exchanges. | |||
In order to minimize communication overhead, only the key shares that | In order to minimize communication overhead, only the key shares that | |||
are agreed to be used are actually exchanged. To negotiate | are agreed upon are actually exchanged. To negotiate additional key | |||
additional key exchanges seven new Transform Types are defined. | exchanges, seven new Transform Types are defined. These transforms | |||
These transforms and Transform Type 4 share the same Transform IDs. | and Transform Type 4 share the same Transform IDs. | |||
It is assumed that new Transform Type 4 identifiers will be assigned | It is assumed that new Transform Type 4 identifiers will be assigned | |||
later for various post-quantum key exchanges [IKEV2TYPE4ID]. This | later for various post-quantum key exchanges [IKEV2TYPE4ID]. This | |||
specification does not make a distinction between classical (EC)DH | specification does not make a distinction between classical (EC)DH | |||
and post-quantum key exchanges, nor post-quantum algorithms which are | and post-quantum key exchanges, nor between post-quantum algorithms | |||
true key exchanges versus post-quantum algorithms that act as key | that are true key exchanges and post-quantum algorithms that act as | |||
transport mechanisms; all are treated equivalently by the protocol. | key transport mechanisms: all are treated equivalently by the | |||
This document renames a field in the Key Exchange Payload from | protocol. This document renames a field in the Key Exchange Payload | |||
"Diffie-Hellman Group Num" to "Key Exchange Method". It also renames | from "Diffie-Hellman Group Num" to "Key Exchange Method". This | |||
Transform Type 4 from "Diffie-Hellman Group (D-H)" to "Key Exchange | document also renames Transform Type 4 from "Diffie-Hellman Group | |||
Method (KE)"; the corresponding renaming to the IANA registry is | (D-H)" to "Key Exchange Method (KE)". The corresponding renaming to | |||
described in Section 3. | the IANA registry is described in Section 3. | |||
The fact that newly defined transforms share the same registry for | The fact that newly defined transforms share the same registry for | |||
possible Transform IDs with Transform Type 4, allows additional key | possible Transform IDs with Transform Type 4 allows additional key | |||
exchanges to be of any type - either post-quantum or classical (EC)DH | exchanges to be of any type: either post-quantum or classical (EC)DH. | |||
one. This approach allows any combination of the defined key | This approach allows any combination of the defined key exchange | |||
exchange methods to take place. This also allows IKE peers to | methods to take place. This also allows IKE peers to perform a | |||
perform a single post-quantum key exchange in the IKE_SA_INIT without | single post-quantum key exchange in the IKE_SA_INIT without | |||
additional key exchanges, provided that the IP fragmentation is not | additional key exchanges, provided that the IP fragmentation is not | |||
an issue and that hybrid key exchange is not needed. | an issue and that hybrid key exchange is not needed. | |||
The SA payload in the IKE_SA_INIT message includes one or more newly | The SA payload in the IKE_SA_INIT message includes one or more newly | |||
defined transforms which represent the extra key exchange policy | defined transforms that represent the extra key exchange policy | |||
required by the initiator. The responder follows the usual IKEv2 | required by the initiator. The responder follows the usual IKEv2 | |||
negotiation rules: it selects a single transform of each type, and | negotiation rules: it selects a single transform of each type and | |||
returns all of them in the IKE_SA_INIT response message. | returns all of them in the IKE_SA_INIT response message. | |||
Then, provided that additional key exchanges are negotiated, the | Then, provided that additional key exchanges are negotiated, the | |||
initiator and the responder perform one or more IKE_INTERMEDIATE | initiator and the responder perform one or more IKE_INTERMEDIATE | |||
exchanges. Following that, the IKE_AUTH exchange authenticates peers | exchanges. Following that, the IKE_AUTH exchange authenticates peers | |||
and completes IKE SA establishment. | and completes IKE SA establishment. | |||
Initiator Responder | Initiator Responder | |||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | |||
<-- IKE_SA_INIT (additional key exchanges negotiation) --> | <-- IKE_SA_INIT (additional key exchanges negotiation) --> | |||
skipping to change at page 10, line 9 ¶ | skipping to change at line 309 ¶ | |||
... | ... | |||
<-- {IKE_INTERMEDIATE (additional key exchange)} --> | <-- {IKE_INTERMEDIATE (additional key exchange)} --> | |||
<-- {IKE_AUTH} --> | <-- {IKE_AUTH} --> | |||
2.2. Protocol Details | 2.2. Protocol Details | |||
In the simplest case, the initiator starts a single key exchange (and | In the simplest case, the initiator starts a single key exchange (and | |||
has no interest in supporting multiple), and it is not concerned with | has no interest in supporting multiple), and it is not concerned with | |||
possible fragmentation of the IKE_SA_INIT messages (either because | possible fragmentation of the IKE_SA_INIT messages (because either | |||
the key exchange it selects is small enough not to fragment, or the | the key exchange that it selects is small enough not to fragment or | |||
initiator is confident that fragmentation will be handled either by | the initiator is confident that fragmentation will be handled either | |||
IP fragmentation, or transport via TCP). | by IP fragmentation or by transport via TCP). | |||
In this case, the initiator performs the IKE_SA_INIT for a single key | In this case, the initiator performs the IKE_SA_INIT for a single key | |||
exchange using a Transform Type 4 (possibly with a post quantum | exchange using a Transform Type 4 (possibly with a post-quantum | |||
algorithm), and including the initator KE payload. If the responder | algorithm) and including the initiator KE payload. If the responder | |||
accepts the policy, it responds with an IKE_SA_INIT response, and IKE | accepts the policy, it responds with an IKE_SA_INIT response, and IKE | |||
continues as usual. | continues as usual. | |||
If the initiator desires to negotiate multiple key exchanges, then | If the initiator wants to negotiate multiple key exchanges, then the | |||
the initiator uses the protocol behavior listed below. | initiator uses the protocol behavior listed below. | |||
2.2.1. IKE_SA_INIT Round: Negotiation | 2.2.1. IKE_SA_INIT Round: Negotiation | |||
Multiple key exchanges are negotiated using the standard IKEv2 | Multiple key exchanges are negotiated using the standard IKEv2 | |||
mechanism, via SA payload. For this purpose seven new transform | mechanism via SA payload. For this purpose, seven new transform | |||
types, namely Additional Key Exchange 1 (with IANA assigned value 6), | types are defined: Additional Key Exchange 1 (ADDKE1) with IANA- | |||
Additional Key Exchange 2 (7), Additional Key Exchange 3 (8), | assigned value 6, Additional Key Exchange 2 (ADDKE2) (7), Additional | |||
Additional Key Exchange 4 (9), Additional Key Exchange 5 (10), | Key Exchange 3 (ADDKE3) (8), Additional Key Exchange 4 (ADDKE4) (9), | |||
Additional Key Exchange 6 (11) and Additional Key Exchange 7 (12) are | Additional Key Exchange 5 (ADDKE5) (10), Additional Key Exchange 6 | |||
defined. They are collectively called Additional Key Exchange | (ADDKE6) (11), and Additional Key Exchange 7 (ADDKE7) (12). They are | |||
transforms in this document and have slightly different semantics | collectively called "Additional Key Exchange (ADDKE) Transform Types" | |||
than the existing IKEv2 transform types. They are interpreted as an | in this document and have slightly different semantics than the | |||
existing IKEv2 Transform Types. They are interpreted as an | ||||
indication of additional key exchange methods that peers agree to | indication of additional key exchange methods that peers agree to | |||
perform in a series of IKE_INTERMEDIATE exchanges following the | perform in a series of IKE_INTERMEDIATE exchanges following the | |||
IKE_SA_INIT exchange. The allowed transform IDs for these transform | IKE_SA_INIT exchange. The allowed Transform IDs for these transform | |||
types are the same as the IDs for Transform Type 4, so they all share | types are the same as the IDs for Transform Type 4, so they all share | |||
a single IANA registry for transform IDs. | a single IANA registry for Transform IDs. | |||
Key exchange method negotiated via Transform Type 4 always takes | The key exchange method negotiated via Transform Type 4 always takes | |||
place in the IKE_SA_INIT exchange, as defined in [RFC7296]. | place in the IKE_SA_INIT exchange, as defined in [RFC7296]. | |||
Additional key exchanges negotiated via newly defined transforms MUST | Additional key exchanges negotiated via newly defined transforms MUST | |||
take place in a series of IKE_INTERMEDIATE exchanges following the | take place in a series of IKE_INTERMEDIATE exchanges following the | |||
IKE_SA_INIT exchange, performed in an order of the values of their | IKE_SA_INIT exchange, performed in an order of the values of their | |||
transform types, so that key exchange negotiated using Additional Key | Transform Types. This is so that the key exchange negotiated using | |||
Exchange i always precedes that of Additional Key Exchange i + 1. | Additional Key Exchange i always precedes that of Additional Key | |||
Each additional key exchange method MUST be fully completed before | Exchange i + 1. Each additional key exchange method MUST be fully | |||
the next one is started. | completed before the next one is started. | |||
Note that with these semantics, Additional Key Exchange transforms | ||||
are not associated with any particular type of key exchange and do | ||||
not have any specific per transform type transform IDs IANA registry. | ||||
Instead they all share a single registry for transform IDs, namely | With these semantics, note that ADDKE Transform Types are not | |||
"Key Exchange Method Transform IDs", which are also shared by | associated with any particular type of key exchange and do not have | |||
Transform Type 4. All key exchange algorithms (both classical or | any Transform IDs that are specific per Transform Type IANA registry. | |||
post-quantum) should be added to this registry. This approach gives | Instead, they all share a single registry for Transform IDs, namely | |||
peers flexibility in defining the ways they want to combine different | "Transform Type 4 - Key Exchange Method Transform IDs". All key | |||
key exchange methods. | exchange algorithms (both classical or post-quantum) should be added | |||
to this registry. This approach gives peers flexibility in defining | ||||
the ways they want to combine different key exchange methods. | ||||
When forming a proposal the initiator adds transforms for the | When forming a proposal, the initiator adds transforms for the | |||
IKE_SA_INIT exchange using Transform Type 4. In most cases they will | IKE_SA_INIT exchange using Transform Type 4. In most cases, they | |||
contain classical (EC)DH key exchange methods, however it is not a | will contain classical (EC)DH key exchange methods, but that is not a | |||
requirement. Additional key exchange methods are proposed using | requirement. Additional key exchange methods are proposed using | |||
Additional Key Exchange transform types. All of these transform | ADDKE Transform Types. All of these transform types are optional; | |||
types are optional, the initiator is free to select any of them for | the initiator is free to select any of them for proposing additional | |||
proposing additional key exchange methods. Consequently, if none of | key exchange methods. Consequently, if none of the ADDKE Transform | |||
the Additional Key Exchange transforms is included in the proposal, | Types are included in the proposal, then this proposal indicates the | |||
then this proposal indicates performing standard IKEv2, as defined in | performing of standard IKEv2, as defined in [RFC7296]. On the other | |||
[RFC7296]. On the other hand, if the initiator includes any | hand, if the initiator includes any ADDKE Transform Type in the | |||
Additional Key Exchange transform in the proposal, the responder MUST | proposal, the responder MUST select one of the algorithms proposed | |||
select one of the algorithms proposed using this type. Note that | using this type. Note that this is not a new requirement; this | |||
this is not a new requirement, but that this behavior is already | behavior is already specified in Section 2.7 of [RFC7296]. A | |||
specified in Section 2.7 of [RFC7296]. A transform ID NONE MAY be | Transform ID NONE MAY be added to those transform types that contain | |||
added to those transform types which contain key exchange methods | key exchange methods which the initiator believes are optional | |||
that the initiator believes is optional according to its local | according to its local policy. | |||
policy. | ||||
The responder performs the negotiation using the standard IKEv2 | The responder performs the negotiation using the standard IKEv2 | |||
procedure described in Section 3.3 of [RFC7296]. However, for the | procedure described in Section 3.3 of [RFC7296]. However, for the | |||
Additional Key Exchange types, the responder's choice MUST NOT | ADDKE Transform Types, the responder's choice MUST NOT contain | |||
contain duplicated algorithms (those with identical Transform ID and | duplicated algorithms (those with an identical Transform ID and | |||
attributes), except for the transform ID of NONE. An algorithm is | attributes), except for the Transform ID of NONE. An algorithm is | |||
represented as a transform, in some cases the transform could include | represented as a transform. In some cases, the transform could | |||
a set of associated attributes that define details of the algorithm. | include a set of associated attributes that define details of the | |||
In this case, two transforms can be the same, but the attributes must | algorithm. In this case, two transforms can be the same, but the | |||
be different. Additionally, the order of the attributes does not | attributes must be different. Additionally, the order of the | |||
affect the equality of the algorithm, so two transforms | attributes does not affect the equality of the algorithm, so the | |||
(ID=alg1,ATTR1=attr1,ATTR2=attr2) and | following two transforms define the same algorithm: "ID=alg1, | |||
(ID=alg1,ATTR2=attr2,ATTR1=attr1) define the same algorithm. If the | ATTR1=attr1, ATTR2=attr2" and "ID=alg1, ATTR2=attr2, ATTR1=attr1". | |||
responder is unable to select non-duplicated algorithm for each | If the responder is unable to select algorithms that are not | |||
proposed key exchange (either because the proposal contains too few | duplicated for each proposed key exchange (either because the | |||
choices or due to the local policy restrictions on using the proposed | proposal contains too few choices or due to the local policy | |||
algorithms), then the responder MUST reject the message with an error | restrictions on using the proposed algorithms), then the responder | |||
notification of type NO_PROPOSAL_CHOSEN. If the responder's message | MUST reject the message with an error notification of type | |||
contains one or more duplicated choices, the initiator should log the | NO_PROPOSAL_CHOSEN. If the responder's message contains one or more | |||
error and MUST treat the exchange as failed. The initiator MUST NOT | duplicated choices, the initiator should log the error and MUST treat | |||
initiate any IKE_INTERMEDIATE (or IKE_FOLLOWUP_KE) exchanges, so that | the exchange as failed. The initiator MUST NOT initiate any | |||
no new SA is created. If this happens in the CREATE_CHILD_SA | IKE_INTERMEDIATE (or IKE_FOLLOWUP_KE) exchanges so that no new SA is | |||
exchange, then the initiator MAY delete the IKE SA, over which the | created. If this happens in the CREATE_CHILD_SA exchange, then the | |||
invalid message was received, by sending a Delete payload. | initiator MAY delete the IKE SA over which the invalid message was | |||
received by sending a Delete payload. | ||||
If the responder selects NONE for some Additional Key Exchange types | If the responder selects NONE for some ADDKE Transform Types | |||
(provided they are proposed by the initiator), then the corresponding | (provided they are proposed by the initiator), then any corresponding | |||
Additional Key Exchange(s) in the IKE_INTERMEDIATE exchange(s) MUST | additional key exchanges MUST NOT take place. Therefore, if the | |||
NOT take place. Therefore if the initiator includes NONE in all of | initiator includes NONE in all of the ADDKE Transform Types and the | |||
the Additional Key Exchange transforms and the responder selects this | responder selects this value for all of them, then no | |||
value for all of them, then no IKE_INTERMEDIATE messages performing | IKE_INTERMEDIATE exchanges performing additional key exchanges will | |||
additional key exchanges will take place between the peers. Note | take place between the peers. Note that the IKE_INTERMEDIATE | |||
that the IKE_INTERMEDIATE exchanges may still take place for other | exchanges may still take place for other purposes. | |||
purposes. | ||||
The initiator MAY propose non-consecutive Additional Key Exchange | The initiator MAY propose ADDKE Transform Types that are not | |||
transforms, for example proposing Additional Key Exchange 2 and | consecutive, for example, proposing ADDKE2 and ADDKE5 Transform Types | |||
Additional Key Exchange 5 transforms only. The responder MUST treat | only. The responder MUST treat all of the omitted ADDKE transforms | |||
all of the omitted Additional Key Exchange transforms as if they are | as if they were proposed with Transform ID NONE. | |||
proposed with Transform ID NONE. | ||||
Below is an example of the SA payload in the initiator's IKE_SA_INIT | Below is an example of the SA payload in the initiator's IKE_SA_INIT | |||
request message. Here the abbreviation AKEi is used to denote the | request message. Here, the abbreviation "KE" is used for the Key | |||
i-th Additional Key Exchange transform defined in this document, and | Exchange transform, which this document renames from the Diffie- | |||
an abbreviation KE for the Key Exchange transform, that this document | Hellman Group transform. Additionally, the notations PQ_KEM_1, | |||
renames from the Diffie-Hellman Group transform. Additionally, the | PQ_KEM_2, and PQ_KEM_3 are used to represent Transform IDs that have | |||
notations PQ_KEM_1, PQ_KEM_2 and PQ_KEM_3 are used to represent some | yet to be defined of some popular post-quantum key exchange methods. | |||
not-yet defined Transform IDs of some popular post-quantum key | ||||
exchange methods. | ||||
SA Payload | SA Payload | |||
| | | | |||
+--- Proposal #1 ( Proto ID = IKE(1), SPI size = 8, | +--- Proposal #1 ( Proto ID = IKE(1), SPI Size = 8, | |||
| 9 transforms, SPI = 0x35a1d6f22564f89d ) | | 9 transforms, SPI = 0x35a1d6f22564f89d ) | |||
| | | | |||
+-- Transform ENCR ( ID = ENCR_AES_GCM_16 ) | +-- Transform ENCR ( ID = ENCR_AES_GCM_16 ) | |||
| +-- Attribute ( Key Length = 256 ) | | +-- Attribute ( Key Length = 256 ) | |||
| | | | |||
+-- Transform KE ( ID = 4096-bit MODP Group ) | +-- Transform KE ( ID = 4096-bit MODP Group ) | |||
| | | | |||
+-- Transform PRF ( ID = PRF_HMAC_SHA2_256 ) | +-- Transform PRF ( ID = PRF_HMAC_SHA2_256 ) | |||
| | | | |||
+-- Transform AKE2 ( ID = PQ_KEM_1 ) | +-- Transform ADDKE2 ( ID = PQ_KEM_1 ) | |||
| | | | |||
+-- Transform AKE2 ( ID = PQ_KEM_2 ) | +-- Transform ADDKE2 ( ID = PQ_KEM_2 ) | |||
| | | | |||
+-- Transform AKE3 ( ID = PQ_KEM_1 ) | +-- Transform ADDKE3 ( ID = PQ_KEM_1 ) | |||
| | | | |||
+-- Transform AKE3 ( ID = PQ_KEM_2 ) | +-- Transform ADDKE3 ( ID = PQ_KEM_2 ) | |||
| | | | |||
+-- Transform AKE5 ( ID = PQ_KEM_3 ) | +-- Transform ADDKE5 ( ID = PQ_KEM_3 ) | |||
| | | | |||
+-- Transform AKE5 ( ID = NONE ) | +-- Transform ADDKE5 ( ID = NONE ) | |||
In this example, the initiator proposes to perform initial key | In this example, the initiator proposes performing the initial key | |||
exchange using 4096-bit MODP group followed by two mandatory | exchange using a 4096-bit MODP Group followed by two mandatory | |||
additional key exchanges (i.e. Transforms AKE2 and AKE3) using | additional key exchanges (i.e., ADDKE2 and ADDKE3 Transform Types) | |||
PQ_KEM_1 and PQ_KEM_2 methods in any order, then followed by | using PQ_KEM_1 and PQ_KEM_2 methods in any order followed by an | |||
additional key exchange (i.e. Transform AKE5) using PQ_KEM_3 method | additional key exchange (i.e., ADDKE5 Transform Type) using the | |||
that may be omitted. | PQ_KEM_3 method that may be omitted. | |||
The responder might return the following SA payload, indicating that | The responder might return the following SA payload, indicating that | |||
it agrees to perform two additional key exchanges PQ_KEM_2 followed | it agrees to perform two additional key exchanges, PQ_KEM_2 followed | |||
by PQ_KEM_1 and does not want to perform PQ_KEM_3 additionally. | by PQ_KEM_1, and that it does not want to additionally perform | |||
PQ_KEM_3. | ||||
SA Payload | SA Payload | |||
| | | | |||
+--- Proposal #1 ( Proto ID = IKE(1), SPI size = 8, | +--- Proposal #1 ( Proto ID = IKE(1), SPI Size = 8, | |||
| 6 transforms, SPI = 0x8df52b331a196e7b ) | | 6 transforms, SPI = 0x8df52b331a196e7b ) | |||
| | | | |||
+-- Transform ENCR ( ID = ENCR_AES_GCM_16 ) | +-- Transform ENCR ( ID = ENCR_AES_GCM_16 ) | |||
| +-- Attribute ( Key Length = 256 ) | | +-- Attribute ( Key Length = 256 ) | |||
| | | | |||
+-- Transform KE ( ID = 4096-bit MODP Group ) | +-- Transform KE ( ID = 4096-bit MODP Group ) | |||
| | | | |||
+-- Transform PRF ( ID = PRF_HMAC_SHA2_256 ) | +-- Transform PRF ( ID = PRF_HMAC_SHA2_256 ) | |||
| | | | |||
+-- Transform AKE2 ( ID = PQ_KEM_2 ) | +-- Transform ADDKE2 ( ID = PQ_KEM_2 ) | |||
| | | | |||
+-- Transform AKE3 ( ID = PQ_KEM_1 ) | +-- Transform ADDKE3 ( ID = PQ_KEM_1 ) | |||
| | | | |||
+-- Transform AKE5 ( ID = NONE ) | +-- Transform ADDKE5 ( ID = NONE ) | |||
If the initiator includes any Additional Key Exchange transform types | If the initiator includes any ADDKE Transform Types into the SA | |||
into the SA payload in the IKE_SA_INIT exchange request message, then | payload in the IKE_SA_INIT exchange request message, then it MUST | |||
it MUST also negotiate the use of the IKE_INTERMEDIATE exchange as | also negotiate the use of the IKE_INTERMEDIATE exchange, as described | |||
described in [RFC9242], by including INTERMEDIATE_EXCHANGE_SUPPORTED | in [RFC9242] by including an INTERMEDIATE_EXCHANGE_SUPPORTED | |||
notification in the same message. If the responder agrees to use | notification in the same message. If the responder agrees to use | |||
additional key exchanges while establishing initial IKE SA, it MUST | additional key exchanges while establishing an initial IKE SA, it | |||
also return this notification in the IKE_SA_INIT response message, | MUST also return this notification in the IKE_SA_INIT response | |||
thus confirming that IKE_INTERMEDIATE exchange is supported and will | message, confirming that IKE_INTERMEDIATE exchange is supported and | |||
be used for transferring additional key exchange data. If the | will be used for transferring additional key exchange data. If the | |||
IKE_INTERMEDIATE exchange is not negotiated, then the peers MUST | IKE_INTERMEDIATE exchange is not negotiated, then the peers MUST | |||
treat any Additional Key Exchange transforms in the IKE_SA_INIT | treat any ADDKE Transform Types in the IKE_SA_INIT exchange messages | |||
exchange messages as unknown transform types and skip the proposals | as unknown transform types and skip the proposals they appear in. If | |||
they appear in. If no other proposals are present in the SA payload, | no other proposals are present in the SA payload, the peers will | |||
the peers will proceed as if no proposal is chosen (i.e. the | proceed as if no proposal has been chosen (i.e., the responder will | |||
responder will send NO_PROPOSAL_CHOSEN notification). | send a NO_PROPOSAL_CHOSEN notification). | |||
Initiator Responder | Initiator Responder | |||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | |||
HDR, SAi1(.. AKE*...), KEi, Ni, | HDR, SAi1(.. ADDKE*...), KEi, Ni, | |||
N(INTERMEDIATE_EXCHANGE_SUPPORTED) ---> | N(INTERMEDIATE_EXCHANGE_SUPPORTED) ---> | |||
HDR, SAr1(.. AKE*...), KEr, Nr, | HDR, SAr1(.. ADDKE*...), KEr, Nr, | |||
[CERTREQ], | [CERTREQ], | |||
<--- N(INTERMEDIATE_EXCHANGE_SUPPORTED) | <--- N(INTERMEDIATE_EXCHANGE_SUPPORTED) | |||
It is possible that an attacker manages to send a response to the | It is possible for an attacker to manage to send a response to the | |||
initiator's IKE_SA_INIT request before the legitimate responder does. | initiator's IKE_SA_INIT request before the legitimate responder does. | |||
If the initiator continues to create the IKE SA using this response, | If the initiator continues to create the IKE SA using this response, | |||
the attempt will fail. Implementers may wish to consider a possible | the attempt will fail. Implementers may wish to consider strategies | |||
defense technique described in Section 2.4 of [RFC7296]. | as described in Section 2.4 of [RFC7296] to handle such an attack. | |||
2.2.2. IKE_INTERMEDIATE Round: Additional Key Exchanges | 2.2.2. IKE_INTERMEDIATE Round: Additional Key Exchanges | |||
For each additional key exchange agreed to in the IKE_SA_INIT | For each additional key exchange agreed to in the IKE_SA_INIT | |||
exchange, the initiator and the responder perform IKE_INTERMEDIATE | exchange, the initiator and the responder perform an IKE_INTERMEDIATE | |||
exchange, as described in [RFC9242]. | exchange, as described in [RFC9242]. | |||
Initiator Responder | Initiator Responder | |||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | |||
HDR, SK {KEi(n)} --> | HDR, SK {KEi(n)} --> | |||
<-- HDR, SK {KEr(n)} | <-- HDR, SK {KEr(n)} | |||
The initiator sends key exchange data in the KEi(n) payload. This | The initiator sends key exchange data in the KEi(n) payload. This | |||
message is protected with the current SK_ei/SK_ai keys. The notation | message is protected with the current SK_ei/SK_ai keys. The notation | |||
KEi(n) denotes the n-th IKE_INTERMEDIATE KE payload from the | "KEi(n)" denotes the n-th IKE_INTERMEDIATE KE payload from the | |||
initiator and the integer n is sequential starting from 1. | initiator; the integer "n" is sequential starting from 1. | |||
On receiving this, the responder sends back key exchange payload | On receiving this, the responder sends back key exchange payload | |||
KEr(n), which denotes the n-th IKE_INTERMEDIATE KE payload from the | KEr(n); "KEr(n)" denotes the n-th IKE_INTERMEDIATE KE payload from | |||
responder. As before, this message is protected with the current | the responder. Similar to how the request is protected, this message | |||
SK_er/SK_ar keys. | is protected with the current SK_er/SK_ar keys. | |||
The former "Diffie-Hellman Group Num" (now called "Key Exchange | The former "Diffie-Hellman Group Num" (now called "Key Exchange | |||
Method") field in the KEi(n) and KEr(n) payloads MUST match the n-th | Method") field in the KEi(n) and KEr(n) payloads MUST match the n-th | |||
negotiated additional key exchange. | negotiated additional key exchange. | |||
Once this exchange is done, both sides compute an updated keying | Once this exchange is done, both sides compute an updated keying | |||
material: | material: | |||
SKEYSEED(n) = prf(SK_d(n-1), SK(n) | Ni | Nr) | SKEYSEED(n) = prf(SK_d(n-1), SK(n) | Ni | Nr) | |||
where SK(n) is the resulting shared secret of this key exchange, Ni | From this exchange, SK(n) is the resulting shared secret. Ni and Nr | |||
and Nr are nonces from the IKE_SA_INIT exchange and SK_d(n-1) is the | are nonces from the IKE_SA_INIT exchange. SK_d(n-1) is the last | |||
last generated SK_d, (derived from IKE_SA_INIT for the first use of | generated SK_d (derived from IKE_SA_INIT for the first use of | |||
IKE_INTERMEDIATE, otherwise from the previous IKE_INTERMEDIATE | IKE_INTERMEDIATE and, otherwise, from the previous IKE_INTERMEDIATE | |||
exchange). The other keying materials SK_d, SK_ai, SK_ar, SK_ei, | exchange). The other keying materials, SK_d, SK_ai, SK_ar, SK_ei, | |||
SK_er, SK_pi, SK_pr are generated from the SKEYSEED(n) as follows: | SK_er, SK_pi, and SK_pr, are generated from the SKEYSEED(n) as | |||
follows: | ||||
{SK_d(n) | SK_ai(n) | SK_ar(n) | SK_ei(n) | SK_er(n) | SK_pi(n) | | {SK_d(n) | SK_ai(n) | SK_ar(n) | SK_ei(n) | SK_er(n) | SK_pi(n) | | |||
SK_pr(n)} = prf+ (SKEYSEED(n), Ni | Nr | SPIi | SPIr) | SK_pr(n)} = prf+ (SKEYSEED(n), Ni | Nr | SPIi | SPIr) | |||
Both the initiator and the responder use these updated key values in | Both the initiator and the responder use these updated key values in | |||
the next exchange (IKE_INTERMEDIATE or IKE_AUTH). | the next exchange (IKE_INTERMEDIATE or IKE_AUTH). | |||
2.2.3. IKE_AUTH Exchange | 2.2.3. IKE_AUTH Exchange | |||
After all IKE_INTERMEDIATE exchanges have completed, the initiator | After all IKE_INTERMEDIATE exchanges have completed, the initiator | |||
and the responder perform an IKE_AUTH exchange. This exchange is the | and the responder perform an IKE_AUTH exchange. This exchange is the | |||
standard IKE exchange as described in [RFC7296] with the modification | standard IKE exchange, as described in [RFC7296], with the | |||
of AUTH payload calculation described in [RFC9242]. | modification of AUTH payload calculation described in [RFC9242]. | |||
2.2.4. CREATE_CHILD_SA Exchange | 2.2.4. CREATE_CHILD_SA Exchange | |||
The CREATE_CHILD_SA exchange is used in IKEv2 for the purposes of | The CREATE_CHILD_SA exchange is used in IKEv2 for the purposes of | |||
creating additional Child SAs, rekeying these and rekeying IKE SA | creating additional Child SAs, rekeying these Child SAs, and rekeying | |||
itself. When creating or rekeying Child SAs, the peers may | IKE SA itself. When creating or rekeying Child SAs, the peers may | |||
optionally perform a key exchange to add a fresh entropy into the | optionally perform a key exchange to add a fresh entropy into the | |||
session keys. In case of IKE SA rekey, the key exchange is | session keys. In the case of an IKE SA rekey, the key exchange is | |||
mandatory. Peers supporting this specification may want to use | mandatory. Peers supporting this specification may want to use | |||
multiple key exchanges in these situations. | multiple key exchanges in these situations. | |||
Using multiple key exchanges with CREATE_CHILD_SA exchange is | Using multiple key exchanges with a CREATE_CHILD_SA exchange is | |||
negotiated similarly as in the initial IKE exchange, see | negotiated in a similar fashion to the initial IKE exchange, see | |||
Section 2.2.1. If the initiator includes any Additional Key Exchange | Section 2.2.1. If the initiator includes any ADDKE Transform Types | |||
transform in the SA payload (along with Transform Type 4) and the | in the SA payload (along with Transform Type 4), and if the responder | |||
responder agrees to perform additional key exchanges, then the | agrees to perform additional key exchanges, then the additional key | |||
additional key exchanges are performed in a series of new | exchanges are performed in a series of new IKE_FOLLOWUP_KE exchanges | |||
IKE_FOLLOWUP_KE exchanges that follows the CREATE_CHILD_SA exchange. | that follow the CREATE_CHILD_SA exchange. The IKE_FOLLOWUP_KE | |||
The IKE_FOLLOWUP_KE exchange is introduced as a dedicated exchange | exchange is introduced especially for transferring data of additional | |||
for transferring data of additional key exchanges following the key | key exchanges following the one performed in the CREATE_CHILD_SA. | |||
exchange performed in the CREATE_CHILD_SA. Its Exchange Type value | Its Exchange Type value is 44. | |||
is 44. | ||||
Key exchange negotiated via Transform Type 4 always takes place in | The key exchange negotiated via Transform Type 4 always takes place | |||
the CREATE_CHILD_SA exchange, as per IKEv2 specification. Additional | in the CREATE_CHILD_SA exchange, as per the IKEv2 specification | |||
key exchanges are performed in an order of the values of their | [RFC7296]. Additional key exchanges are performed in an order of the | |||
transform types, so that key exchange negotiated using Transform Type | values of their Transform Types so that the key exchange negotiated | |||
n always precedes key exchange negotiated using Transform Type n + 1. | using Additional Key Exchange i always precedes the key exchange | |||
Each additional key exchange method MUST be fully completed before | negotiated using Additional Key Exchange i + 1. Each additional key | |||
the next one is started. Note, that this document assumes, that each | exchange method MUST be fully completed before the next one is | |||
key exchange method consumes exactly one IKE_FOLLOWUP_KE exchange. | started. Note that this document assumes that each key exchange | |||
For the methods requiring multiple round trips, a separate document | method consumes exactly one IKE_FOLLOWUP_KE exchange. For the | |||
should define how such methods are split into several IKE_FOLLOWUP_KE | methods that require multiple round trips, a separate document should | |||
define how such methods are split into several IKE_FOLLOWUP_KE | ||||
exchanges. | exchanges. | |||
After an IKE SA is created the window size may be greater than one | After an IKE SA is created, the window size may be greater than one; | |||
and multiple concurrent exchanges may be in progress, it is essential | thus, multiple concurrent exchanges may be in progress. Therefore, | |||
to link the IKE_FOLLOWUP_KE exchanges together with the corresponding | it is essential to link the IKE_FOLLOWUP_KE exchanges together with | |||
CREATE_CHILD_SA exchange. Due to the fact that once an IKE SA is | the corresponding CREATE_CHILD_SA exchange. Once an IKE SA is | |||
created, all IKE exchanges are independent and do not have built-in | created, all IKE exchanges are independent and IKEv2 doesn't have a | |||
means to link one with another, a new status type notification | built-in mechanism to link an exchange with another one. A new | |||
ADDITIONAL_KEY_EXCHANGE is introduced for this purpose. Its Notify | status type notification called "ADDITIONAL_KEY_EXCHANGE" is | |||
Message Type value is 16441, and Protocol ID and SPI Size are both | introduced for this purpose. Its Notify Message Type value is 16441, | |||
set to 0. The data associated with this notification is a blob | and the Protocol ID and SPI Size are both set to 0. The data | |||
meaningful only to the responder, so that the responder can correctly | associated with this notification is a blob meaningful only to the | |||
link successive exchanges. For the initiator the content of this | responder so that the responder can correctly link successive | |||
notification is an opaque blob. | exchanges. For the initiator, the content of this notification is an | |||
opaque blob. | ||||
The responder MUST include this notification in a CREATE_CHILD_SA or | The responder MUST include this notification in a CREATE_CHILD_SA or | |||
IKE_FOLLOWUP_KE response message in case the next IKE_FOLLOWUP_KE | IKE_FOLLOWUP_KE response message in case the next IKE_FOLLOWUP_KE | |||
exchange is expected, filling it with some data that would allow | exchange is expected, filling it with some data that would allow | |||
linking the current exchange to the next one. The initiator MUST | linking the current exchange to the next one. The initiator MUST | |||
send back this notification intact in the request message of the next | send back this notification intact in the request message of the next | |||
IKE_FOLLOWUP_KE exchange. | IKE_FOLLOWUP_KE exchange. | |||
Below is an example of CREATE_CHILD_SA exchange followed by three | Below is an example of CREATE_CHILD_SA exchange followed by three | |||
additional key exchanges. | additional key exchanges. | |||
skipping to change at page 17, line 44 ¶ | skipping to change at line 640 ¶ | |||
N(ADDITIONAL_KEY_EXCHANGE)(link3)} | N(ADDITIONAL_KEY_EXCHANGE)(link3)} | |||
HDR(IKE_FOLLOWUP_KE), SK {KEi(3), | HDR(IKE_FOLLOWUP_KE), SK {KEi(3), | |||
N(ADDITIONAL_KEY_EXCHANGE)(link3)} --> | N(ADDITIONAL_KEY_EXCHANGE)(link3)} --> | |||
<-- HDR(IKE_FOLLOWUP_KE), SK {KEr(3)} | <-- HDR(IKE_FOLLOWUP_KE), SK {KEr(3)} | |||
The former "Diffie-Hellman Group Num" (now called "Key Exchange | The former "Diffie-Hellman Group Num" (now called "Key Exchange | |||
Method") field in the KEi(n) and KEr(n) payloads MUST match the n-th | Method") field in the KEi(n) and KEr(n) payloads MUST match the n-th | |||
negotiated additional key exchange. | negotiated additional key exchange. | |||
It is possible that due to some unexpected events (e.g. reboot) the | Due to some unexpected events (e.g., a reboot), it is possible that | |||
initiator may lose its state and forget that it is in the process of | the initiator may lose its state, forget that it is in the process of | |||
performing additional key exchanges and thus never start the | performing additional key exchanges, and never start the remaining | |||
remaining IKE_FOLLOWUP_KE exchanges. The responder MUST handle this | IKE_FOLLOWUP_KE exchanges. The responder MUST handle this situation | |||
situation gracefully and delete the associated state if it does not | gracefully and delete the associated state if it does not receive the | |||
receive the next expected IKE_FOLLOWUP_KE request after some | next expected IKE_FOLLOWUP_KE request after some reasonable period of | |||
reasonable period of time. Note that due to various factors such as | time. Due to various factors such as computational resource and key | |||
computational resource and key exchange algorithm used, it is not | exchange algorithm used, note that it is not possible to give | |||
possible to give a normative guidance on how long this timeout period | normative guidance on how long this timeout period should be. In | |||
should be. In general, 5-20 seconds of waiting time should be | general, 5-20 seconds of waiting time should be appropriate in most | |||
appropriate in most cases. | cases. | |||
It is also possible that the initiator may take too long to prepare | It may also take too long for the initiator to prepare and to send | |||
and send the next IKE_FOLLOWUP_KE request or due to the network | the next IKE_FOLLOWUP_KE request, or, due to the network conditions, | |||
conditions, the request is retransmitted. In this case, the message | the request could be lost and retransmitted. In this case, the | |||
may reach the responder when it has already deleted the associated | message may reach the responder when it has already deleted the | |||
state following the advice above. If the responder receives an | associated state, following the advice above. If the responder | |||
IKE_FOLLOWUP_KE message for which it does not have a key exchange | receives an IKE_FOLLOWUP_KE message for which it does not have a key | |||
state, it MUST send back a new error type notification | exchange state, it MUST send back a new error type notification | |||
STATE_NOT_FOUND. This is a non-fatal error notification, its Notify | called "STATE_NOT_FOUND". This is an error notification that is not | |||
Message Type is 47, Protocol ID and SPI Size are both set to 0 and | fatal to the IKE SA. Its Notify Message Type value is 47, its | |||
the data is empty. If the initiator receives this notification in | Protocol ID and SPI Size are both set to 0, and the data is empty. | |||
response to IKE_FOLLOWUP_KE exchange performing additional key | If the initiator receives this notification in response to an | |||
exchange, it MUST cancel this exchange and MUST treat the whole | IKE_FOLLOWUP_KE exchange performing an additional key exchange, it | |||
series of exchanges started from the CREATE_CHILD_SA exchange as | MUST cancel this exchange and MUST treat the whole series of | |||
failed. In most cases, the receipt of this notification is caused by | exchanges started from the CREATE_CHILD_SA exchange as having failed. | |||
In most cases, the receipt of this notification is caused by the | ||||
premature deletion of the corresponding state on the responder (the | premature deletion of the corresponding state on the responder (the | |||
time period between IKE_FOLLOWUP_KE exchanges appeared too long from | time period between IKE_FOLLOWUP_KE exchanges appeared to be too long | |||
the responder's point of view, e.g. due to a temporary network | from the responder's point of view, e.g., due to a temporary network | |||
failure). After receiving this notification the initiator MAY start | failure). After receiving this notification, the initiator MAY start | |||
a new CREATE_CHILD_SA exchange which may eventually be followed by | a new CREATE_CHILD_SA exchange, which may eventually be followed by | |||
the IKE_FOLLOWUP_KE exchanges, to retry the failed attempt. If the | the IKE_FOLLOWUP_KE exchanges, to retry the failed attempt. If the | |||
initiator continues to receive STATE_NOT_FOUND notifications after | initiator continues to receive STATE_NOT_FOUND notifications after | |||
several retries, it MUST treat this situation as a fatal error and | several retries, it MUST treat this situation as a fatal error and | |||
delete IKE SA by sending a DELETE payload. | delete the IKE SA by sending a DELETE payload. | |||
When rekeying the IKE SA or the Child SA, it is possible that the | It is possible that the peers start rekeying the IKE SA or the Child | |||
peers start doing this at the same time, which is called simultaneous | SA at the same time, which is called "simultaneous rekeying". | |||
rekeying. Sections 2.8.1 and 2.8.2 of [RFC7296] describe how IKEv2 | Sections 2.8.1 and 2.8.2 of [RFC7296] describe how IKEv2 handles this | |||
handles this situation. In a nutshell IKEv2 follows the rule that if | situation. In a nutshell, IKEv2 follows the rule that, in the case | |||
in case of simultaneous rekeying, two identical new IKE SAs (or two | of simultaneous rekeying, if two identical new IKE SAs (or two pairs | |||
pairs of Child SAs) are created, then one of them should be deleted. | of Child SAs) are created, then one of them should be deleted. Which | |||
Which one is to be deleted is determined by comparing the values of | one to delete is determined by comparing the values of four nonces | |||
four nonces that are used in the colliding CREATE_CHILD_SA exchanges. | that are used in the colliding CREATE_CHILD_SA exchanges. The IKE SA | |||
The IKE SA (or pair of Child SAs) that is created by the exchange in | (or pair of Child SAs) created by the exchange in which the smallest | |||
which the smallest nonce is used should be deleted by the initiator | nonce is used should be deleted by the initiator of this exchange. | |||
of this exchange. | ||||
With multiple key exchanges, the SAs are not yet created when the | With multiple key exchanges, the SAs are not yet created when the | |||
CREATE_CHILD_SA is completed, they would be created only after the | CREATE_CHILD_SA is completed. Instead, they would be created only | |||
series of IKE_FOLLOWUP_KE exchanges is finished. For this reason, if | after the series of IKE_FOLLOWUP_KE exchanges is finished. For this | |||
additional key exchanges are negotiated in the CREATE_CHILD_SA | reason, if additional key exchanges are negotiated in the | |||
exchange in which the smallest nonce is used, then because there is | CREATE_CHILD_SA exchange in which the smallest nonce is used, then, | |||
nothing to delete yet, the initiator of this exchange just stops the | because there is nothing to delete yet, the initiator of this | |||
rekeying process and it MUST NOT initiate the IKE_FOLLOWUP_KE | exchange just stops the rekeying process, and it MUST NOT initiate | |||
exchange. | the IKE_FOLLOWUP_KE exchange. | |||
In most cases, rekey collisions are resolved in the CREATE_CHILD_SA | In most cases, rekey collisions are resolved in the CREATE_CHILD_SA | |||
exchange. However, a situation may occur when due to packet loss, | exchange. However, a situation may occur when, due to packet loss, | |||
one of the peers receives the CREATE_CHILD_SA message requesting | one of the peers receives the CREATE_CHILD_SA message requesting the | |||
rekey of SA that is already being rekeyed by this peer (i.e. the | rekey of an SA that is already being rekeyed by this peer (i.e., the | |||
CREATE_CHILD_SA exchange initiated by this peer has been already | CREATE_CHILD_SA exchange initiated by this peer has already been | |||
completed and the series of IKE_FOLLOWUP_KE exchanges is in | completed, and the series of IKE_FOLLOWUP_KE exchanges is in | |||
progress). In this case, a TEMPORARY_FAILURE notification MUST be | progress). In this case, a TEMPORARY_FAILURE notification MUST be | |||
sent in response to such a request. | sent in response to such a request. | |||
If multiple key exchanges are negotiated in the CREATE_CHILD_SA | If multiple key exchanges are negotiated in the CREATE_CHILD_SA | |||
exchange, then the resulting keys are computed as follows. | exchange, then the resulting keys are computed as follows. | |||
In case of IKE SA rekey: | In the case of an IKE SA rekey: | |||
SKEYSEED = prf(SK_d, SK(0) | Ni | Nr | SK(1) | ... SK(n)) | SKEYSEED = prf(SK_d, SK(0) | Ni | Nr | SK(1) | ... SK(n)) | |||
In case of Child SA creation or rekey: | In the case of a Child SA creation or rekey: | |||
KEYMAT = prf+ (SK_d, SK(0) | Ni | Nr | SK(1) | ... SK(n)) | KEYMAT = prf+ (SK_d, SK(0) | Ni | Nr | SK(1) | ... SK(n)) | |||
In both cases, SK_d is from the existing IKE SA; SK(0), Ni, Nr are | In both cases, SK_d is from the existing IKE SA; SK(0), Ni, and Nr | |||
the shared key and nonces from the CREATE_CHILD_SA respectively; | are the shared key and nonces from the CREATE_CHILD_SA, respectively; | |||
SK(1)...SK(n) are the shared keys from additional key exchanges. | SK(1)...SK(n) are the shared keys from additional key exchanges. | |||
2.2.5. Interaction with IKEv2 Extensions | 2.2.5. Interaction with IKEv2 Extensions | |||
It is believed that this specification requires no modification to | It is believed that this specification requires no modification to | |||
the IKEv2 extensions defined so far. In particular, IKE SA | the IKEv2 extensions defined so far. In particular, the IKE SA | |||
resumption mechanism defined in [RFC5723] can be used to resume IKE | resumption mechanism defined in [RFC5723] can be used to resume IKE | |||
SAs created using this specification. | SAs created using this specification. | |||
2.2.5.1. Interaction with Childless IKE SA | 2.2.5.1. Interaction with Childless IKE SA | |||
It is possible to establish IKE SAs with post-quantum algorithms only | It is possible to establish IKE SAs with post-quantum algorithms by | |||
using additional key exchanges, but without using IKE_INTERMEDIATE | only using IKE_FOLLOWUP_KE exchanges and without the use of | |||
exchanges. In this case, the IKE SA created from IKE_SA_INIT | IKE_INTERMEDIATE exchanges. In this case, the IKE SA that is created | |||
exchange can be immediately rekeyed with CREATE_CHILD_SA using | from the IKE_SA_INIT exchange, can be immediately rekeyed with | |||
additional key exchanges where IKE_FOLLOWUP_KE messages are used to | CREATE_CHILD_SA with additional key exchanges, where IKE_FOLLOWUP_KE | |||
carry the key exchange payload. If classical key exchange method is | messages are used for these additional key exchanges. If the | |||
used in the IKE_SA_INIT message, the very first Child SA created in | classical key exchange method is used in the IKE_SA_INIT message, the | |||
IKE_AUTH will offer no resistance against the quantum threats. | very first Child SA created in IKE_AUTH will offer no resistance | |||
Consequently, if the peers' local policy requires that all Child SAs | against the quantum threats. Consequently, if the peers' local | |||
to be post-quantum secure, then the peers can avoid creating the very | policy requires all Child SAs to be post-quantum secure, then the | |||
first Child SA by adopting [RFC6023]. In this case, the initiator | peers can avoid creating the very first Child SA by adopting | |||
sends two types of proposal in the IKE_SA_INIT request, one with and | [RFC6023]. In this case, the initiator sends two types of proposals | |||
another one without Additional Key Exchange transform(s). The | in the IKE_SA_INIT request: one with and another one without ADDKE | |||
responder chooses the latter proposal type and includes | Transform Types. The responder chooses the latter proposal type and | |||
CHILDLESS_IKEV2_SUPPORTED notification in the IKE_SA_INIT response. | includes a CHILDLESS_IKEV2_SUPPORTED notification in the IKE_SA_INIT | |||
response. Assuming that the initiator supports childless IKE SA | ||||
Assuming that the initiator supports childless IKE SA extension, then | extension, both peers perform the modified IKE_AUTH exchange | |||
both peers performs the modified IKE_AUTH exchange described in | described in [RFC6023], and no Child SA is created in this exchange. | |||
[RFC6023] and no Child SA is created in this exchange. The peers | The peers should then immediately rekey the IKE SA and subsequently | |||
should then immediately rekey the IKE SA and subsequently create the | create the Child SAs, all with additional key exchanges using a | |||
Child SAs, all with additional key exchanges using CREATE_CHILD_SA | CREATE_CHILD_SA exchange. | |||
exchange. | ||||
It is also possible for the initiator to send proposals without | It is also possible for the initiator to send proposals without any | |||
Additional Key Exchange transform(s) in the IKE_SA_INIT message and | ADDKE Transform Types in the IKE_SA_INIT message. In this instance, | |||
in this instance, the responder will have no information whether or | the responder will have no information about whether or not the | |||
not the initiator supports the extension in this specification. This | initiator supports the extension in this specification. This may not | |||
may not be efficient as the responder will have to wait for the | be efficient, as the responder will have to wait for the subsequent | |||
subsequent CREATE_CHILD_SA request to determine whether or not the | CREATE_CHILD_SA request to determine whether or not the initiator's | |||
initiator's request is appropriate for its local policy. | request is appropriate for its local policy. | |||
The support for childless IKE SA is not negotiated, but it is the | The support for childless IKE SA is not negotiated, but it is the | |||
responder that indicates the support for this mode. As such, the | responder that indicates the support for this mode. As such, the | |||
responder cannot enforce the initiator to use this mode and | responder cannot enforce that the initiator use this mode. | |||
therefore, it is entirely possible that the initiator does not | Therefore, it is entirely possible that the initiator does not | |||
support this extension and sends IKE_AUTH request as per [RFC7296] | support this extension and sends IKE_AUTH request as per [RFC7296] | |||
instead of [RFC6023]. In this case, the responder may respond with | instead of [RFC6023]. In this case, the responder may respond with | |||
non-fatal error such as NO_PROPOSAL_CHOSEN notify message type. | an error that is not fatal, such as the NO_PROPOSAL_CHOSEN notify | |||
message type. | ||||
Note that if the initial IKE SA is used to transfer sensitive | Note that if the initial IKE SA is used to transfer sensitive | |||
information, then this information will not be protected using the | information, then this information will not be protected using the | |||
additional key exchanges, which may use post-quantum algorithms. In | additional key exchanges, which may use post-quantum algorithms. In | |||
this arrangement, the peers will have to use post-quantum algorithm | this arrangement, the peers will have to use post-quantum algorithm | |||
in Transform Type 4 in order to mitigate the risk of quantum attack. | in Transform Type 4 in order to mitigate the risk of quantum attack. | |||
3. IANA Considerations | 3. IANA Considerations | |||
This document adds new exchange type into the "IKEv2 Exchange Types" | This document adds a new exchange type into the "IKEv2 Exchange | |||
registry: | Types" registry: | |||
44 IKE_FOLLOWUP_KE | 44 IKE_FOLLOWUP_KE | |||
This document renames Transform Type 4 defined in "Transform Type | This document renames Transform Type 4 defined in the "Transform Type | |||
Values" registry from "Diffie-Hellman Group (D-H)" to "Key Exchange | Values" registry from "Diffie-Hellman Group (D-H)" to "Key Exchange | |||
Method (KE)". | Method (KE)". | |||
This document renames IKEv2 registry "Transform Type 4 - Diffie- | This document renames the IKEv2 registry originally titled "Transform | |||
Hellman Group Transform IDs" to "Transform Type 4 - Key Exchange | Type 4 - Diffie-Hellman Group Transform IDs" to "Transform Type 4 - | |||
Method Transform IDs". | Key Exchange Method Transform IDs". | |||
This document adds the following Transform Types to the "Transform | This document adds the following Transform Types to the "Transform | |||
Type Values" registry: | Type Values" registry: | |||
Type Description Used In | +======+====================================+===============+ | |||
----------------------------------------------------------------- | | Type | Description | Used In | | |||
6 Additional Key Exchange 1 (optional in IKE, AH, ESP) | +======+====================================+===============+ | |||
7 Additional Key Exchange 2 (optional in IKE, AH, ESP) | | 6 | Additional Key Exchange 1 (ADDKE1) | (optional in | | |||
8 Additional Key Exchange 3 (optional in IKE, AH, ESP) | | | | IKE, AH, ESP) | | |||
9 Additional Key Exchange 4 (optional in IKE, AH, ESP) | +------+------------------------------------+---------------+ | |||
10 Additional Key Exchange 5 (optional in IKE, AH, ESP) | | 7 | Additional Key Exchange 2 (ADDKE2) | (optional in | | |||
11 Additional Key Exchange 6 (optional in IKE, AH, ESP) | | | | IKE, AH, ESP) | | |||
12 Additional Key Exchange 7 (optional in IKE, AH, ESP) | +------+------------------------------------+---------------+ | |||
| 8 | Additional Key Exchange 3 (ADDKE3) | (optional in | | ||||
| | | IKE, AH, ESP) | | ||||
+------+------------------------------------+---------------+ | ||||
| 9 | Additional Key Exchange 4 (ADDKE4) | (optional in | | ||||
| | | IKE, AH, ESP) | | ||||
+------+------------------------------------+---------------+ | ||||
| 10 | Additional Key Exchange 5 (ADDKE5) | (optional in | | ||||
| | | IKE, AH, ESP) | | ||||
+------+------------------------------------+---------------+ | ||||
| 11 | Additional Key Exchange 6 (ADDKE6) | (optional in | | ||||
| | | IKE, AH, ESP) | | ||||
+------+------------------------------------+---------------+ | ||||
| 12 | Additional Key Exchange 7 (ADDKE7) | (optional in | | ||||
| | | IKE, AH, ESP) | | ||||
+------+------------------------------------+---------------+ | ||||
This document defines a new Notify Message Type in the "Notify | Table 1: "Transform Type Values" Registry | |||
This document defines a new Notify Message Type in the "IKEv2 Notify | ||||
Message Types - Status Types" registry: | Message Types - Status Types" registry: | |||
16441 ADDITIONAL_KEY_EXCHANGE | 16441 ADDITIONAL_KEY_EXCHANGE | |||
and a new Notify Message Type in the "Notify Message Types - Error | This document also defines a new Notify Message Type in the "IKEv2 | |||
Types" registry: | Notify Message Types - Error Types" registry: | |||
47 STATE_NOT_FOUND | 47 STATE_NOT_FOUND | |||
3.1. Additional Considerations and Changes | IANA has added the following instructions for designated experts for | |||
the "Transform Type 4 - Key Exchange Method Transform IDs" | ||||
subregistry: | ||||
The IANA is requested to add the following instructions for | * While adding new Key Exchange (KE) methods, the following | |||
designated experts for Transform Type 4 sub-registry. | considerations must be applied. A KE method must take exactly one | |||
round-trip (one IKEv2 exchange), and at the end of this exchange, | ||||
both peers must be able to derive the shared secret. In addition, | ||||
any public value that peers exchanged during a KE method must fit | ||||
into a single IKEv2 payload. If these restrictions are not met | ||||
for a KE method, then there must be documentation on how this KE | ||||
method is used in IKEv2. | ||||
While adding new KE methods, the following considerations must be | IANA has also completed the following changes. It is assumed that | |||
applied. A KE method must take exactly one round-trip (one IKE | [RFC9370] refers to this specification. | |||
exchange) and at the end of this exchange, both peers must be able to | ||||
derive the shared secret. In addition, any public value peers | ||||
exchanged during a KE method must fit into a single IKE message. If | ||||
these restrictions are not met for a KE method, then there must be | ||||
documentation on how this KE method is used in IKEv2. | ||||
The following changes to IANA are also requested. It is assumed that | * Added a reference to [RFC9370] in what was the "Transform Type 4 - | |||
RFCXXXX refers to this specification. | Diffie-Hellman Group Transform IDs" registry. | |||
* Add a reference to RFCXXXX in the "Transform Type 4 - Diffie- | * Replaced the Note on what was the "Transform Type 4 - Diffie- | |||
Hellman Group Transform IDs" registry. | Hellman Group Transform IDs" registry with the following notes: | |||
* Replace the note on "Transform Type 4 - Diffie-Hellman Group | This registry was originally named "Transform Type 4 - Diffie- | |||
Transform IDs" registry with: This registry was originally named | Hellman Group Transform IDs" and was referenced using that name in | |||
"Transform Type 4 - Diffie-Hellman Group Transform IDs" and was | a number of RFCs published prior to [RFC9370], which gave it the | |||
renamed to its current name by [RFCXXXX]. It has been referenced | current title. | |||
in its original name in a number of RFCs prior to [RFCXXXX]. To | ||||
find out requirement levels for Key Exchange Methods for IKEv2, | This registry is used by the "Key Exchange Method (KE)" transform | |||
type and by all "Additional Key Exchange (ADDKE)" transform types. | ||||
To find out requirement levels for Key Exchange Methods for IKEv2, | ||||
see [RFC8247]. | see [RFC8247]. | |||
* Add this note to "Transform Type Values" registry: Transform Type | * Appended [RFC9370] to the Reference column of Transform Type 4 in | |||
"Transform Type 4 - Key Exchange Method Transform IDs" was | the "Transform Type Values" registry. | |||
originally named "Transform Type 4 - Diffie-Hellman Group | ||||
Transform IDs" and was renamed to its current name by [RFCXXXX]. | ||||
It has been referenced in its original name in a number of RFCs | ||||
prior to [RFCXXXX]. All "Additional Key Exchange" entries use the | ||||
same "Transform Type 4 - Key Exchange Method Transform IDs" as the | ||||
"Key Exchange Method (KE)". | ||||
* Append RFCXXXX to the Reference column of Transform Type 4 in the | * Added these notes to the "Transform Type Values" registry: | |||
Transform Type Values registry. | ||||
* Append this note to "Transform Type 4 - Diffie-Hellman Group | "Key Exchange Method (KE)" transform type was originally named | |||
Transform IDs" registry: All "Additional Key Exchange" entries use | "Diffie-Hellman Group (D-H)" and was referenced by that name in a | |||
these values as the "Key Exchange Method (KE)". | number of RFCs published prior to [RFC9370], which gave it the | |||
current title. | ||||
All "Additional Key Exchange (ADDKE)" entries use the same | ||||
"Transform Type 4 - Key Exchange Method Transform IDs" registry as | ||||
the "Key Exchange Method (KE)" entry. | ||||
4. Security Considerations | 4. Security Considerations | |||
The extension in this document is intended to mitigate two possible | The extension in this document is intended to mitigate two possible | |||
threats in IKEv2, namely the compromise of (EC)DH key exchange using | threats in IKEv2: the compromise of (EC)DH key exchange using Shor's | |||
Shor's algorithm while remaining backward compatible; and the | algorithm while remaining backward compatible and the potential | |||
potential compromise of existing or future PQC key exchange | compromise of existing or future PQC key exchange algorithms. To | |||
algorithms. To address the former threat, this extension allows the | address the former threat, this extension allows the establishment of | |||
establishment of a shared secret by using multiple key exchanges, | a shared secret by using multiple key exchanges: typically, one | |||
typically one classical (EC)DH and the other one post-quantum | classical (EC)DH and the other one post-quantum algorithm. In order | |||
algorithm. In order to address the latter threat, multiple key | to address the latter threat, multiple key exchanges using a post- | |||
exchanges using a post-quantum algorithm can be composed to form the | quantum algorithm can be performed to form the shared key. | |||
shared key. | ||||
Unlike key exchange methods (Transform Type 4), the Encryption | Unlike key exchange methods (Transform Type 4), the Encryption | |||
Algorithm (Transform Type 1), the Pseudorandom Function (Transform | Algorithm (Transform Type 1), the Pseudorandom Function (Transform | |||
Type 2) and the Integrity Algorithm (Transform Type 3) are not | Type 2), and the Integrity Algorithm (Transform Type 3) are not | |||
susceptible to Shor's algorithm. However, they are susceptible to | susceptible to Shor's algorithm. However, they are susceptible to | |||
Grover's attack [GROVER], which allows a quantum computer to perform | Grover's attack [GROVER], which allows a quantum computer to perform | |||
a brute force key search using quadratically fewer steps than the | a brute force key search, using quadratically fewer steps than the | |||
classical counterpart. Simply increasing the key length can mitigate | classical counterpart. Simply increasing the key length can mitigate | |||
this attack. It was previously believed that one needed to double | this attack. It was previously believed that one needed to double | |||
the key length of these algorithms. However, there are a number of | the key length of these algorithms. However, there are a number of | |||
factors that suggest that it is quite unlikely to achieve the | factors that suggest that it is quite unlikely to achieve the | |||
quadratic speed up using Grover's algorithm. According to NIST | quadratic speedup using Grover's algorithm. According to NIST | |||
[NISTPQCFAQ], current applications can continue using AES algorithm | [NISTPQCFAQ], current applications can continue using an AES | |||
with the minimum key length of 128 bit. Nevertheless, if the data | algorithm with the minimum key length of 128 bits. Nevertheless, if | |||
needs to remain secure for many years to come, one may want to | the data needs to remain secure for many years to come, one may want | |||
consider using a longer key size for the algorithms in Transform | to consider using a longer key size for the algorithms in Transform | |||
Types 1-3. | Types 1-3. | |||
SKEYSEED is calculated from shared SK(x) using an algorithm defined | SKEYSEED is calculated from shared SK(x), using an algorithm defined | |||
in Transform Type 2. While a quantum attacker may learn the value of | in Transform Type 2. While a quantum attacker may learn the value of | |||
SK(x), if this value is obtained by means of a classical key | SK(x), if this value is obtained by means of a classical key | |||
exchange, other SK(x) values generated by means of a post-quantum | exchange, other SK(x) values generated by means of a post-quantum | |||
algorithm ensure that the final SKEYSEED is not compromised. This | algorithm ensure that the final SKEYSEED is not compromised. This | |||
assumes that the algorithm defined in the Transform Type 2 is quantum | assumes that the algorithm defined in the Transform Type 2 is quantum | |||
resistant. | resistant. | |||
The ordering of the additional key exchanges should not matter in | The ordering of the additional key exchanges should not matter in | |||
general, as only the final shared secret is of interest. | general, as only the final shared secret is of interest. | |||
Nonetheless, because the strength of the running shared secret | Nonetheless, because the strength of the running shared secret | |||
increases with every additional key exchange, an implementer may want | increases with every additional key exchange, an implementer may want | |||
to first perform the most secure method (in some metrics) and | to first perform the most secure method (in some metrics) followed by | |||
followed by less secure one(s). | less secure methods. | |||
The main focus of this document is to prevent a passive attacker | The main focus of this document is to prevent a passive attacker from | |||
performing a "harvest and decrypt" attack. In other words, an | performing a "harvest-and-decrypt" attack: in other words, attackers | |||
attacker that records messages exchanged today and proceeds to | that record messages exchanged today and proceed to decrypt them once | |||
decrypt them once he owns a quantum computer. This attack is | they have access to cryptographically relevant quantum computers. | |||
prevented due to the hybrid nature of the key exchange. Other | This attack is prevented due to the hybrid nature of the key | |||
attacks involving an active attacker using a quantum-computer are not | exchange. Other attacks involving an active attacker using a | |||
completely solved by this document. This is for two reasons. | quantum-computer are not completely solved by this document. This is | |||
for two reasons: | ||||
The first reason is because the authentication step remains | * The first reason is that the authentication step remains | |||
classical. In particular, the authenticity of the SAs established | classical. In particular, the authenticity of the SAs established | |||
under IKEv2 is protected using a pre-shared key or digital signature | under IKEv2 is protected by using a pre-shared key or digital | |||
algorithms. Whilst the pre-shared key option, provided the key is | signature algorithms. While the pre-shared key option, provided | |||
long enough, is post-quantum secure, the other algorithms are not. | the key is long enough, is post-quantum secure, the other | |||
Moreover, in implementations where scalability is a requirement, the | algorithms are not. Moreover, in implementations where | |||
pre-shared key method may not be suitable. Post-quantum authenticity | scalability is a requirement, the pre-shared key method may not be | |||
may be provided by using a post-quantum digital signature. | suitable. Post-quantum authenticity may be provided by using a | |||
post-quantum digital signature. | ||||
Secondly, it should be noted that the purpose of post-quantum | * Secondly, it should be noted that the purpose of post-quantum | |||
algorithms is to provide resistance to attacks mounted in the future. | algorithms is to provide resistance to attacks mounted in the | |||
The current threat is that encrypted sessions are subject to | future. The current threat is that encrypted sessions are subject | |||
eavesdropping and archived with decryption by quantum computers | to eavesdropping and are archived with decryption by quantum | |||
taking place at some point in the future. Until quantum computers | computers at some point in the future. Until quantum computers | |||
become available there is no point in attacking the authenticity of a | become available, there is no point in attacking the authenticity | |||
connection because there are no possibilities for exploitation. | of a connection because there are no possibilities for | |||
These only occur at the time of the connection, for example by | exploitation. These only occur at the time of the connection, for | |||
mounting an on-path attack. Consequently there is less urgency for | example, by mounting an on-path attack. Consequently, there is | |||
post-quantum authenticity compared to post-quantum confidentiality. | less urgency for post-quantum authenticity compared to post- | |||
quantum confidentiality. | ||||
Performing multiple key exchanges while establishing IKE SA increases | Performing multiple key exchanges while establishing an IKE SA | |||
the responder's susceptibility to DoS attacks, because of an | increases the responder's susceptibility to DoS attacks because of an | |||
increased amount of resources needed before the initiator is | increased amount of resources needed before the initiator is | |||
authenticated. This is especially true for post-quantum key exchange | authenticated. This is especially true for post-quantum key exchange | |||
methods, where many of them are more memory and/or CPU intensive than | methods, where many of them are more memory and/or CPU intensive than | |||
the classical counterparts. | the classical counterparts. | |||
Responders may consider recommendations from [RFC8019] to deal with | Responders may consider recommendations from [RFC8019] to deal with | |||
increased DoS attack susceptibility. It is also possible that the | increased DoS-attack susceptibility. It is also possible that the | |||
responder only agrees to create initial IKE SA without performing | responder only agrees to create an initial IKE SA without performing | |||
additional key exchanges, provided the initiator includes such an | additional key exchanges if the initiator includes such an option in | |||
option in its proposals. Then peers immediately rekey the initial | its proposals. Then, peers immediately rekey the initial IKE SA with | |||
IKE SA with the CREATE_CHILD_SA exchange and additional key exchanges | the CREATE_CHILD_SA exchange, and additional key exchanges are | |||
performed via the IKE_FOLLOWUP_KE exchanges. In this case, at the | performed via the IKE_FOLLOWUP_KE exchanges. In this case, at the | |||
point when resource-intensive operations are required, the peers have | point when resource-intensive operations are required, the peers have | |||
already authenticated each other. However, in the context of hybrid | already authenticated each other. However, in the context of hybrid | |||
post-quantum key exchange this scenario would leave the initial IKE | post-quantum key exchanges, this scenario would leave the initial IKE | |||
SA (and initial Child SA if it is created) unprotected against | SA (and initial Child SA, if it is created) unprotected against | |||
quantum computers. Nevertheless the rekeyed IKE SA (and Child SAs | quantum computers. Nevertheless, the rekeyed IKE SA (and Child SAs | |||
that will be created over it) will have a full protection. This is | that will be created over it) will have a full protection. This is | |||
similar to the scenario described in [RFC8784]. Depending on the | similar to the scenario described in [RFC8784]. Depending on the | |||
arrangement and peers' policy, this scenario may or may not be | arrangement and peers' policy, this scenario may or may not be | |||
appropriate. For example, in the G-IKEv2 protocol | appropriate. For example, in the G-IKEv2 protocol [G-IKEV2], the | |||
[I-D.ietf-ipsecme-g-ikev2] the cryptographic materials are sent from | cryptographic materials are sent from the group controller to the | |||
the group controller to the group members when the initial IKE SA is | group members when the initial IKE SA is created. | |||
created. | ||||
5. Acknowledgements | ||||
The authors would like to thank Frederic Detienne and Olivier Pelerin | ||||
for their comments and suggestions, including the idea to negotiate | ||||
the post-quantum algorithms using the existing KE payload. The | ||||
authors are also grateful to Tobias Heider and Tobias Guggemos for | ||||
valuable comments. Thanks to Paul Wouters for reviewing the | ||||
document. | ||||
6. References | 5. References | |||
6.1. Normative References | 5.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>. | |||
[RFC7296] Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T. | [RFC7296] Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T. | |||
Kivinen, "Internet Key Exchange Protocol Version 2 | Kivinen, "Internet Key Exchange Protocol Version 2 | |||
(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>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC9242] Smyslov, V., "Intermediate Exchange in the Internet Key | [RFC9242] Smyslov, V., "Intermediate Exchange in the Internet Key | |||
Exchange Protocol Version 2 (IKEv2)", RFC 9242, | Exchange Protocol Version 2 (IKEv2)", RFC 9242, | |||
DOI 10.17487/RFC9242, May 2022, | DOI 10.17487/RFC9242, May 2022, | |||
<https://www.rfc-editor.org/info/rfc9242>. | <https://www.rfc-editor.org/info/rfc9242>. | |||
6.2. Informative References | 5.2. Informative References | |||
[GROVER] Grover, L., "A Fast Quantum Mechanical Algorithm for | [BEYOND-64K] | |||
Database Search", Proc. of the Twenty-Eighth Annual ACM | Tjhai, CJ., Heider, T., and V. Smyslov, "Beyond 64KB Limit | |||
Symposium on the Theory of Computing (STOC 1996), 1996. | of IKEv2 Payloads", Work in Progress, Internet-Draft, | |||
draft-tjhai-ikev2-beyond-64k-limit-03, 28 July 2022, | ||||
<https://datatracker.ietf.org/doc/html/draft-tjhai-ikev2- | ||||
beyond-64k-limit-03>. | ||||
[I-D.ietf-ipsecme-g-ikev2] | [G-IKEV2] Smyslov, V. and B. Weis, "Group Key Management using | |||
Smyslov, V. and B. Weis, "Group Key Management using | ||||
IKEv2", Work in Progress, Internet-Draft, draft-ietf- | IKEv2", Work in Progress, Internet-Draft, draft-ietf- | |||
ipsecme-g-ikev2-07, 6 October 2022, | ipsecme-g-ikev2-09, 19 April 2023, | |||
<https://www.ietf.org/archive/id/draft-ietf-ipsecme- | <https://datatracker.ietf.org/doc/html/draft-ietf-ipsecme- | |||
g-ikev2-07.txt>. | g-ikev2-09>. | |||
[I-D.tjhai-ikev2-beyond-64k-limit] | [GROVER] Grover, L., "A fast quantum mechanical algorithm for | |||
Tjhai, C., Heider, T., and V. Smyslov, "Beyond 64KB Limit | database search", Proc. of the Twenty-Eighth Annual ACM | |||
of IKEv2 Payloads", Work in Progress, Internet-Draft, | Symposium on the Theory of Computing (STOC), pp. 212-219, | |||
draft-tjhai-ikev2-beyond-64k-limit-03, 28 July 2022, | DOI 10.48550/arXiv.quant-ph/9605043, May 1996, | |||
<https://www.ietf.org/archive/id/draft-tjhai-ikev2-beyond- | <https://doi.org/10.48550/arXiv.quant-ph/9605043>. | |||
64k-limit-03.txt>. | ||||
[IKEV2TYPE4ID] | [IKEV2TYPE4ID] | |||
IANA, "Internet Key Exchange Version 2 (IKEv2) Parameters: | IANA, "Internet Key Exchange Version 2 (IKEv2) Parameters: | |||
Transform Type 4 - Diffie-Hellman Group Transform IDs", | Transform Type 4 - Diffie-Hellman Group Transform IDs", | |||
<https://www.iana.org/assignments/ikev2-parameters/ | <https://www.iana.org/assignments/ikev2-parameters/>. | |||
ikev2-parameters.xhtml#ikev2-parameters-8>. | ||||
[NISTPQCFAQ] | [NISTPQCFAQ] | |||
NIST, "Post-Quantum Cryptography Standardization: FAQs", | NIST, "Post-Quantum Cryptography Standard", January 2023, | |||
<https://csrc.nist.gov/Projects/post-quantum-cryptography/ | <https://csrc.nist.gov/Projects/post-quantum-cryptography/ | |||
faqs>. | faqs>. | |||
[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>. | |||
[RFC6023] Nir, Y., Tschofenig, H., Deng, H., and R. Singh, "A | [RFC6023] Nir, Y., Tschofenig, H., Deng, H., and R. Singh, "A | |||
Childless Initiation of the Internet Key Exchange Version | Childless Initiation of the Internet Key Exchange Version | |||
skipping to change at page 26, line 27 ¶ | skipping to change at line 1054 ¶ | |||
(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>. | |||
[RFC8019] Nir, Y. and V. Smyslov, "Protecting Internet Key Exchange | [RFC8019] Nir, Y. and V. Smyslov, "Protecting Internet Key Exchange | |||
Protocol Version 2 (IKEv2) Implementations from | Protocol Version 2 (IKEv2) Implementations from | |||
Distributed Denial-of-Service Attacks", RFC 8019, | Distributed Denial-of-Service Attacks", RFC 8019, | |||
DOI 10.17487/RFC8019, November 2016, | DOI 10.17487/RFC8019, November 2016, | |||
<https://www.rfc-editor.org/info/rfc8019>. | <https://www.rfc-editor.org/info/rfc8019>. | |||
[RFC8247] Nir, Y., Kivinen, T., Wouters, P., and D. Migault, | ||||
"Algorithm Implementation Requirements and Usage Guidance | ||||
for the Internet Key Exchange Protocol Version 2 (IKEv2)", | ||||
RFC 8247, DOI 10.17487/RFC8247, September 2017, | ||||
<https://www.rfc-editor.org/info/rfc8247>. | ||||
[RFC8784] Fluhrer, S., Kampanakis, P., McGrew, D., and V. Smyslov, | [RFC8784] Fluhrer, S., Kampanakis, P., McGrew, D., and V. Smyslov, | |||
"Mixing Preshared Keys in the Internet Key Exchange | "Mixing Preshared Keys in the Internet Key Exchange | |||
Protocol Version 2 (IKEv2) for Post-quantum Security", | Protocol Version 2 (IKEv2) for Post-quantum Security", | |||
RFC 8784, DOI 10.17487/RFC8784, June 2020, | RFC 8784, DOI 10.17487/RFC8784, June 2020, | |||
<https://www.rfc-editor.org/info/rfc8784>. | <https://www.rfc-editor.org/info/rfc8784>. | |||
Appendix A. Sample Multiple Key Exchanges | Appendix A. Sample Multiple Key Exchanges | |||
This appendix shows some examples of multiple key exchanges. These | This appendix shows some examples of multiple key exchanges. These | |||
examples are non-normative and they describe some message flow | examples are not normative, and they describe some message flow | |||
scenarios that may occur in establishing an IKE or CHILD SA. Note | scenarios that may occur in establishing an IKE or Child SA. Note | |||
that some payloads that are not relevant to multiple key exchanges | that some payloads that are not relevant to multiple key exchanges | |||
may be omitted for brevity. | may be omitted for brevity. | |||
A.1. IKE_INTERMEDIATE Exchanges Carrying Additional Key Exchange | A.1. IKE_INTERMEDIATE Exchanges Carrying Additional Key Exchange | |||
Payloads | Payloads | |||
The exchanges below show that the initiator proposes the use of | The exchanges below show that the initiator proposes the use of | |||
additional key exchanges to establish an IKE SA. The initiator | additional key exchanges to establish an IKE SA. The initiator | |||
proposes three sets of additional key exchanges and all of which are | proposes three sets of additional key exchanges, all of which are | |||
optional. So the responder can choose NONE for some or all of the | optional. Therefore, the responder can choose NONE for some or all | |||
additional exchanges if the proposed key exchange methods are not | of the additional exchanges if the proposed key exchange methods are | |||
supported or for whatever reasons the responder decides not to | not supported or for whatever reasons the responder decides not to | |||
perform the additional key exchange. | perform the additional key exchange. | |||
Initiator Responder | Initiator Responder | |||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | |||
HDR(IKE_SA_INIT), SAi1(.. AKE*...), ---> | HDR(IKE_SA_INIT), SAi1(.. ADDKE*...), ---> | |||
KEi(Curve25519), Ni, N(IKEV2_FRAG_SUPPORTED), | KEi(Curve25519), Ni, N(IKEV2_FRAG_SUPPORTED), | |||
N(INTERMEDIATE_EXCHANGE_SUPPORTED) | N(INTERMEDIATE_EXCHANGE_SUPPORTED) | |||
Proposal #1 | Proposal #1 | |||
Transform ECR (ID = ENCR_AES_GCM_16, | Transform ECR (ID = ENCR_AES_GCM_16, | |||
256-bit key) | 256-bit key) | |||
Transform PRF (ID = PRF_HMAC_SHA2_512) | Transform PRF (ID = PRF_HMAC_SHA2_512) | |||
Transform KE (ID = Curve25519) | Transform KE (ID = Curve25519) | |||
Transform AKE1 (ID = PQ_KEM_1) | Transform ADDKE1 (ID = PQ_KEM_1) | |||
Transform AKE1 (ID = PQ_KEM_2) | Transform ADDKE1 (ID = PQ_KEM_2) | |||
Transform AKE1 (ID = NONE) | Transform ADDKE1 (ID = NONE) | |||
Transform AKE2 (ID = PQ_KEM_3) | Transform ADDKE2 (ID = PQ_KEM_3) | |||
Transform AKE2 (ID = PQ_KEM_4) | Transform ADDKE2 (ID = PQ_KEM_4) | |||
Transform AKE2 (ID = NONE) | Transform ADDKE2 (ID = NONE) | |||
Transform AKE3 (ID = PQ_KEM_5) | Transform ADDKE3 (ID = PQ_KEM_5) | |||
Transform AKE3 (ID = PQ_KEM_6) | Transform ADDKE3 (ID = PQ_KEM_6) | |||
Transform AKE3 (ID = NONE) | Transform ADDKE3 (ID = NONE) | |||
<--- HDR(IKE_SA_INIT), SAr1(.. AKE*...), | <--- HDR(IKE_SA_INIT), SAr1(.. ADDKE*...), | |||
KEr(Curve25519), Nr, N(IKEV2_FRAG_SUPPORTED), | KEr(Curve25519), Nr, N(IKEV2_FRAG_SUPPORTED), | |||
N(INTERMEDIATE_EXCHANGE_SUPPORTED) | N(INTERMEDIATE_EXCHANGE_SUPPORTED) | |||
Proposal #1 | Proposal #1 | |||
Transform ECR (ID = ENCR_AES_GCM_16, | Transform ECR (ID = ENCR_AES_GCM_16, | |||
256-bit key) | 256-bit key) | |||
Transform PRF (ID = PRF_HMAC_SHA2_512) | Transform PRF (ID = PRF_HMAC_SHA2_512) | |||
Transform KE (ID = Curve25519) | Transform KE (ID = Curve25519) | |||
Transform AKE1 (ID = PQ_KEM_2) | Transform ADDKE1 (ID = PQ_KEM_2) | |||
Transform AKE2 (ID = NONE) | Transform ADDKE2 (ID = NONE) | |||
Transform AKE3 (ID = PQ_KEM_5) | Transform ADDKE3 (ID = PQ_KEM_5) | |||
HDR(IKE_INTERMEDIATE), SK {KEi(1)(PQ_KEM_2)} --> | HDR(IKE_INTERMEDIATE), SK {KEi(1)(PQ_KEM_2)} --> | |||
<--- HDR(IKE_INTERMEDIATE), SK {KEr(1)(PQ_KEM_2)} | <--- HDR(IKE_INTERMEDIATE), SK {KEr(1)(PQ_KEM_2)} | |||
HDR(IKE_INTERMEDIATE), SK {KEi(2)(PQ_KEM_5)} --> | HDR(IKE_INTERMEDIATE), SK {KEi(2)(PQ_KEM_5)} --> | |||
<--- HDR(IKE_INTERMEDIATE), SK {KEr(2)(PQ_KEM_5)} | <--- HDR(IKE_INTERMEDIATE), SK {KEr(2)(PQ_KEM_5)} | |||
HDR(IKE_AUTH), SK{ IDi, AUTH, SAi2, TSi, TSr } ---> | HDR(IKE_AUTH), SK{ IDi, AUTH, SAi2, TSi, TSr } ---> | |||
<--- HDR(IKE_AUTH), SK{ IDr, AUTH, SAr2, | <--- HDR(IKE_AUTH), SK{ IDr, AUTH, SAr2, | |||
TSi, TSr } | TSi, TSr } | |||
In this particular example, the responder chooses to perform two | In this particular example, the responder chooses to perform two | |||
additional key exchanges. It selects PQ_KEM_2, NONE and PQ_KEM_5 for | additional key exchanges. It selects PQ_KEM_2, NONE, and PQ_KEM_5 | |||
the first, second and third additional key exchanges respectively. | for the first, second, and third additional key exchanges, | |||
As per [RFC7296] specification, a set of keying materials are | respectively. As per [RFC7296], a set of keying materials is | |||
derived, in particular SK_d, SK_a[i/r], SK_e[i/r]. Both peers then | derived, in particular SK_d, SK_a[i/r], and SK_e[i/r]. Both peers | |||
perform an IKE_INTERMEDIATE exchange carrying PQ_KEM_2 payload which | then perform an IKE_INTERMEDIATE exchange, carrying PQ_KEM_2 payload, | |||
is protected with SK_e[i/r] and SK_a[i/r] keys. After the completion | which is protected with SK_e[i/r] and SK_a[i/r] keys. After the | |||
of this IKE_INTERMEDIATE exchange, the SKEYSEED is updated using | completion of this IKE_INTERMEDIATE exchange, the SKEYSEED is updated | |||
SK(1), which is the PQ_KEM_2 shared secret, as follows. | using SK(1), which is the PQ_KEM_2 shared secret, as follows. | |||
SKEYSEED(1) = prf(SK_d, SK(1) | Ni | Nr) | SKEYSEED(1) = prf(SK_d, SK(1) | Ni | Nr) | |||
The updated SKEYSEED value is then used to derive the following | The updated SKEYSEED value is then used to derive the following | |||
keying materials | keying materials. | |||
{SK_d(1) | SK_ai(1) | SK_ar(1) | SK_ei(1) | SK_er(1) | SK_pi(1) | | {SK_d(1) | SK_ai(1) | SK_ar(1) | SK_ei(1) | SK_er(1) | SK_pi(1) | | |||
SK_pr(1)} = prf+ (SKEYSEED(1), Ni | Nr | SPIi | SPIr) | SK_pr(1)} = prf+ (SKEYSEED(1), Ni | Nr | SPIi | SPIr) | |||
As per [RFC9242] specification, both peers compute IntAuth_i1 and | As per [RFC9242], both peers compute IntAuth_i1 and IntAuth_r1 using | |||
IntAuth_r1 using the SK_pi(1) and SK_pr(1) keys respectively. These | the SK_pi(1) and SK_pr(1) keys, respectively. These values are | |||
values are required in the IKE_AUTH phase of the exchange. | required in the IKE_AUTH phase of the exchange. | |||
In the next IKE_INTERMEDIATE exchange, the peers use SK_e[i/r](1) and | In the next IKE_INTERMEDIATE exchange, the peers use SK_e[i/r](1) and | |||
SK_a[i/r](1) keys to protect the PQ_KEM_5 payload. After completing | SK_a[i/r](1) keys to protect the PQ_KEM_5 payload. After completing | |||
this exchange, keying materials are updated as below | this exchange, keying materials are updated as follows: | |||
SKEYSEED(2) = prf(SK_d(1), SK(2) | Ni | Nr) | SKEYSEED(2) = prf(SK_d(1), SK(2) | Ni | Nr) | |||
{SK_d(2) | SK_ai(2) | SK_ar(2) | SK_ei(2) | SK_er(2) | SK_pi(2) | | {SK_d(2) | SK_ai(2) | SK_ar(2) | SK_ei(2) | SK_er(2) | SK_pi(2) | | |||
SK_pr(2)} = prf+ (SKEYSEED(2), Ni | Nr | SPIi | SPIr) | SK_pr(2)} = prf+ (SKEYSEED(2), Ni | Nr | SPIi | SPIr) | |||
where SK(2) is the shared secret from the third additional key | In this update, SK(2) is the shared secret from the third additional | |||
exchange, i.e. PQ_KEM_5. Both peers then compute the values of | key exchange, i.e., PQ_KEM_5. Then, both peers compute the values of | |||
IntAuth_[i/r]2 using the SK_p[i/r](2) keys. | IntAuth_[i/r]2 using the SK_p[i/r](2) keys. | |||
After the completion of the second IKE_INTERMEDIATE exchange, both | After the completion of the second IKE_INTERMEDIATE exchange, both | |||
peers continue to the IKE_AUTH exchange phase. As defined in | peers continue to the IKE_AUTH exchange phase. As defined in | |||
[RFC9242], the values IntAuth_[i/r]2 are used to compute IntAuth | [RFC9242], the values IntAuth_[i/r]2 are used to compute IntAuth, | |||
which in turn is used to calculate the payload to be signed or MACed, | which, in turn, is used to calculate InitiatorSignedOctets and | |||
i.e. InitiatorSignedOctets and ResponderSignedOctets. | ResponderSignedOctets blobs (see Section 3.3.2 of [RFC9242]). | |||
A.2. No Additional Key Exchange Used | A.2. No Additional Key Exchange Used | |||
The initiator proposes two sets of optional additional key exchanges, | The initiator proposes two sets of optional additional key exchanges, | |||
but the responder does not support any of them. The responder | but the responder does not support any of them. The responder | |||
chooses NONE for each set and consequently, IKE_INTERMEDIATE exchange | chooses NONE for each set. Consequently, the IKE_INTERMEDIATE | |||
does not takes place and the exchange proceeds to IKE_AUTH phase. | exchange does not take place, and the exchange proceeds to the | |||
The resulting keying materials are the same as those derived with | IKE_AUTH phase. The resulting keying materials are the same as those | |||
[RFC7296]. | derived with [RFC7296]. | |||
Initiator Responder | Initiator Responder | |||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | |||
HDR(IKE_SA_INIT), SAi1(.. AKE*...), ---> | HDR(IKE_SA_INIT), SAi1(.. ADDKE*...), ---> | |||
KEi(Curve25519), Ni, N(IKEV2_FRAG_SUPPORTED), | KEi(Curve25519), Ni, N(IKEV2_FRAG_SUPPORTED), | |||
N(INTERMEDIATE_EXCHANGE_SUPPORTED) | N(INTERMEDIATE_EXCHANGE_SUPPORTED) | |||
Proposal #1 | Proposal #1 | |||
Transform ECR (ID = ENCR_AES_GCM_16, | Transform ECR (ID = ENCR_AES_GCM_16, | |||
256-bit key) | 256-bit key) | |||
Transform PRF (ID = PRF_HMAC_SHA2_512) | Transform PRF (ID = PRF_HMAC_SHA2_512) | |||
Transform KE (ID = Curve25519) | Transform KE (ID = Curve25519) | |||
Transform AKE1 (ID = PQ_KEM_1) | Transform ADDKE1 (ID = PQ_KEM_1) | |||
Transform AKE1 (ID = PQ_KEM_2) | Transform ADDKE1 (ID = PQ_KEM_2) | |||
Transform AKE1 (ID = NONE) | Transform ADDKE1 (ID = NONE) | |||
Transform AKE2 (ID = PQ_KEM_3) | Transform ADDKE2 (ID = PQ_KEM_3) | |||
Transform AKE2 (ID = PQ_KEM_4) | Transform ADDKE2 (ID = PQ_KEM_4) | |||
Transform AKE2 (ID = NONE) | Transform ADDKE2 (ID = NONE) | |||
<--- HDR(IKE_SA_INIT), SAr1(.. AKE*...), | <--- HDR(IKE_SA_INIT), SAr1(.. ADDKE*...), | |||
KEr(Curve25519), Nr, N(IKEV2_FRAG_SUPPORTED), | KEr(Curve25519), Nr, N(IKEV2_FRAG_SUPPORTED), | |||
N(INTERMEDIATE_EXCHANGE_SUPPORTED) | N(INTERMEDIATE_EXCHANGE_SUPPORTED) | |||
Proposal #1 | Proposal #1 | |||
Transform ECR (ID = ENCR_AES_GCM_16, | Transform ECR (ID = ENCR_AES_GCM_16, | |||
256-bit key) | 256-bit key) | |||
Transform PRF (ID = PRF_HMAC_SHA2_512) | Transform PRF (ID = PRF_HMAC_SHA2_512) | |||
Transform KE (ID = Curve25519) | Transform KE (ID = Curve25519) | |||
Transform AKE1 (ID = NONE) | Transform ADDKE1 (ID = NONE) | |||
Transform AKE2 (ID = NONE) | Transform ADDKE2 (ID = NONE) | |||
HDR(IKE_AUTH), SK{ IDi, AUTH, SAi2, TSi, TSr } ---> | HDR(IKE_AUTH), SK{ IDi, AUTH, SAi2, TSi, TSr } ---> | |||
<--- HDR(IKE_AUTH), SK{ IDr, AUTH, SAr2, | <--- HDR(IKE_AUTH), SK{ IDr, AUTH, SAr2, | |||
TSi, TSr } | TSi, TSr } | |||
A.3. Additional Key Exchange in the CREATE_CHILD_SA Exchange only | A.3. Additional Key Exchange in the CREATE_CHILD_SA Exchange Only | |||
The exchanges below show that the initiator does not propose the use | The exchanges below show that the initiator does not propose the use | |||
of additional key exchanges to establish an IKE SA, but they are | of additional key exchanges to establish an IKE SA, but they are | |||
required in order to establish a Child SA. In order to establish a | required in order to establish a Child SA. In order to establish a | |||
fully quantum-resistant IPsec SA, the responder includes a | fully quantum-resistant IPsec SA, the responder includes a | |||
CHILDLESS_IKEV2_SUPPORTED notification in their IKE_SA_INIT response | CHILDLESS_IKEV2_SUPPORTED notification in their IKE_SA_INIT response | |||
message. The initiator understands and supports this notification, | message. The initiator understands and supports this notification, | |||
then exchanges a modified IKE_AUTH message with the responder and | exchanges a modified IKE_AUTH message with the responder, and rekeys | |||
rekeys the IKE SA immediately with additional key exchanges. Any | the IKE SA immediately with additional key exchanges. Any Child SA | |||
Child SA will have to be created via subsequent CREATED_CHILD_SA | will have to be created via a subsequent CREATED_CHILD_SA exchange. | |||
exchange. | ||||
Initiator Responder | Initiator Responder | |||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | |||
HDR(IKE_SA_INIT), SAi1, ---> | HDR(IKE_SA_INIT), SAi1, ---> | |||
KEi(Curve25519), Ni, N(IKEV2_FRAG_SUPPORTED) | KEi(Curve25519), Ni, N(IKEV2_FRAG_SUPPORTED) | |||
<--- HDR(IKE_SA_INIT), SAr1, | <--- HDR(IKE_SA_INIT), SAr1, | |||
KEr(Curve25519), Nr, N(IKEV2_FRAG_SUPPORTED), | KEr(Curve25519), Nr, N(IKEV2_FRAG_SUPPORTED), | |||
N(CHILDLESS_IKEV2_SUPPORTED) | N(CHILDLESS_IKEV2_SUPPORTED) | |||
HDR(IKE_AUTH), SK{ IDi, AUTH } ---> | HDR(IKE_AUTH), SK{ IDi, AUTH } ---> | |||
<--- HDR(IKE_AUTH), SK{ IDr, AUTH } | <--- HDR(IKE_AUTH), SK{ IDr, AUTH } | |||
HDR(CREATE_CHILD_SA), SK{ SAi(.. AKE*...), Ni, KEi(Curve25519) } ---> | HDR(CREATE_CHILD_SA), | |||
SK{ SAi(.. ADDKE*...), Ni, KEi(Curve25519) } ---> | ||||
Proposal #1 | Proposal #1 | |||
Transform ECR (ID = ENCR_AES_GCM_16, | Transform ECR (ID = ENCR_AES_GCM_16, | |||
256-bit key) | 256-bit key) | |||
Transform PRF (ID = PRF_HMAC_SHA2_512) | Transform PRF (ID = PRF_HMAC_SHA2_512) | |||
Transform KE (ID = Curve25519) | Transform KE (ID = Curve25519) | |||
Transform AKE1 (ID = PQ_KEM_1) | Transform ADDKE1 (ID = PQ_KEM_1) | |||
Transform AKE1 (ID = PQ_KEM_2) | Transform ADDKE1 (ID = PQ_KEM_2) | |||
Transform AKE2 (ID = PQ_KEM_5) | Transform ADDKE2 (ID = PQ_KEM_5) | |||
Transform AKE2 (ID = PQ_KEM_6) | Transform ADDKE2 (ID = PQ_KEM_6) | |||
Transform AKE2 (ID = NONE) | Transform ADDKE2 (ID = NONE) | |||
<--- HDR(CREATE_CHILD_SA), SK{ SAr(.. AKE*...), | <--- HDR(CREATE_CHILD_SA), SK{ SAr(.. ADDKE*...), | |||
Nr, KEr(Curve25519), | Nr, KEr(Curve25519), | |||
N(ADDITIONAL_KEY_EXCHANGE)(link1) } | N(ADDITIONAL_KEY_EXCHANGE)(link1) } | |||
Proposal #1 | Proposal #1 | |||
Transform ECR (ID = ENCR_AES_GCM_16, | Transform ECR (ID = ENCR_AES_GCM_16, | |||
256-bit key) | 256-bit key) | |||
Transform PRF (ID = PRF_HMAC_SHA2_512) | Transform PRF (ID = PRF_HMAC_SHA2_512) | |||
Transform KE (ID = Curve25519) | Transform KE (ID = Curve25519) | |||
Transform AKE1 (ID = PQ_KEM_2) | Transform ADDKE1 (ID = PQ_KEM_2) | |||
Transform AKE2 (ID = PQ_KEM_5) | Transform ADDKE2 (ID = PQ_KEM_5) | |||
HDR(IKE_FOLLOWUP_KE), SK{ KEi(1)(PQ_KEM_2), ---> | HDR(IKE_FOLLOWUP_KE), SK{ KEi(1)(PQ_KEM_2), ---> | |||
N(ADDITIONAL_KEY_EXCHANGE)(link1) } | N(ADDITIONAL_KEY_EXCHANGE)(link1) } | |||
<--- HDR(IKE_FOLLOWUP_KE), SK{ KEr(1)(PQ_KEM_2), | <--- HDR(IKE_FOLLOWUP_KE), SK{ KEr(1)(PQ_KEM_2), | |||
N(ADDITIONAL_KEY_EXCHANGE)(link2) } | N(ADDITIONAL_KEY_EXCHANGE)(link2) } | |||
HDR(IKE_FOLLOWUP_KE), SK{ KEi(2)(PQ_KEM_5), ---> | HDR(IKE_FOLLOWUP_KE), SK{ KEi(2)(PQ_KEM_5), ---> | |||
N(ADDITIONAL_KEY_EXCHANGE)(link2) } | N(ADDITIONAL_KEY_EXCHANGE)(link2) } | |||
<--- HDR(IKE_FOLLOWUP_KE), SK{ KEr(2)(PQ_KEM_5) } | <--- HDR(IKE_FOLLOWUP_KE), SK{ KEr(2)(PQ_KEM_5) } | |||
A.4. No Matching Proposal for Additional Key Exchanges | A.4. No Matching Proposal for Additional Key Exchanges | |||
The initiator proposes the combination of PQ_KEM_1, PQ_KEM_2, | The initiator proposes the combination of PQ_KEM_1, PQ_KEM_2, | |||
PQ_KEM_3, and PQ_KEM_4 as the additional key exchanges. The | PQ_KEM_3, and PQ_KEM_4 as the additional key exchanges. The | |||
initiator indicates that either PQ_KEM_1 or PQ_KEM_2 must be used to | initiator indicates that either PQ_KEM_1 or PQ_KEM_2 must be used to | |||
establish an IKE SA, but Additional Key Exchange 2 is optional so the | establish an IKE SA, but ADDKE2 Transform Type is optional. | |||
responder can either select PQ_KEM_3 or PQ_KEM_4 or omit this key | Therefore, the responder can either select PQ_KEM_3 or PQ_KEM_4 or | |||
exchange by selecting NONE. The responder, although supports the | omit this key exchange by selecting NONE. Although the responder | |||
optional PQ_KEM_3 and PQ_KEM_4 methods, does not support either | supports the optional PQ_KEM_3 and PQ_KEM_4 methods, it does not | |||
PQ_KEM_1 or PQ_KEM_2 mandatory method and therefore responds with | support either the PQ_KEM_1 or the PQ_KEM_2 mandatory method; | |||
NO_PROPOSAL_CHOSEN notification. | therefore, it responds with a NO_PROPOSAL_CHOSEN notification. | |||
Initiator Responder | Initiator Responder | |||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | |||
HDR(IKE_SA_INIT), SAi1(.. AKE*...), ---> | HDR(IKE_SA_INIT), SAi1(.. ADDKE*...), ---> | |||
KEi(Curve25519), Ni, N(IKEV2_FRAG_SUPPORTED), | KEi(Curve25519), Ni, N(IKEV2_FRAG_SUPPORTED), | |||
N(INTERMEDIATE_EXCHANGE_SUPPORTED) | N(INTERMEDIATE_EXCHANGE_SUPPORTED) | |||
Proposal #1 | Proposal #1 | |||
Transform ECR (ID = ENCR_AES_GCM_16, | Transform ECR (ID = ENCR_AES_GCM_16, | |||
256-bit key) | 256-bit key) | |||
Transform PRF (ID = PRF_HMAC_SHA2_512) | Transform PRF (ID = PRF_HMAC_SHA2_512) | |||
Transform KE (ID = Curve25519) | Transform KE (ID = Curve25519) | |||
Transform AKE1 (ID = PQ_KEM_1) | Transform ADDKE1 (ID = PQ_KEM_1) | |||
Transform AKE1 (ID = PQ_KEM_2) | Transform ADDKE1 (ID = PQ_KEM_2) | |||
Transform AKE2 (ID = PQ_KEM_3) | Transform ADDKE2 (ID = PQ_KEM_3) | |||
Transform AKE2 (ID = PQ_KEM_4) | Transform ADDKE2 (ID = PQ_KEM_4) | |||
Transform AKE2 (ID = NONE) | Transform ADDKE2 (ID = NONE) | |||
<--- HDR(IKE_SA_INIT), N(NO_PROPOSAL_CHOSEN) | <--- HDR(IKE_SA_INIT), N(NO_PROPOSAL_CHOSEN) | |||
Appendix B. Design Criteria | Appendix B. Design Criteria | |||
The design of the extension is driven by the following criteria: | The design of the extension is driven by the following criteria: | |||
1) Need for PQC in IPsec. Quantum computers, which might become | 1) Need for PQC in IPsec | |||
feasible in the near future, pose a threat to our classical | ||||
public key cryptography. PQC, a family of public key | ||||
cryptography that is believed to be resistant against these | ||||
computers, needs to be integrated into the IPsec protocol suite | ||||
to restore confidentiality and authenticity. | ||||
2) Hybrid. There is currently no post-quantum key exchange that is | Quantum computers, which might become feasible in the near | |||
trusted at the level that (EC)DH is trusted for against | future, pose a threat to our classical public key cryptography. | |||
PQC, a family of public key cryptography that is believed to be | ||||
resistant to these computers, needs to be integrated into the | ||||
IPsec protocol suite to restore confidentiality and | ||||
authenticity. | ||||
2) Hybrid | ||||
There is currently no post-quantum key exchange that is trusted | ||||
at the level that (EC)DH is trusted for defending against | ||||
conventional (non-quantum) adversaries. A hybrid post-quantum | conventional (non-quantum) adversaries. A hybrid post-quantum | |||
algorithm to be introduced along with the well-established | algorithm to be introduced, along with the well-established | |||
primitives addresses this concern, since the overall security is | primitives, addresses this concern, since the overall security | |||
at least as strong as each individual primitive. | is at least as strong as each individual primitive. | |||
3) Focus on post-quantum confidentiality. A passive attacker can | 3) Focus on post-quantum confidentiality | |||
store all monitored encrypted IPsec communication today and | ||||
decrypt it once a quantum computer is available in the future. | ||||
This attack can have serious consequences that will not be | ||||
visible for years to come. On the other hand, an attacker can | ||||
only perform active attacks such as impersonation of the | ||||
communicating peers once a quantum computer is available, | ||||
sometime in the future. Thus, this specification focuses on | ||||
confidentiality due to the urgency of this problem and presents | ||||
a defense against the serious attack described above, but it | ||||
does not address authentication since it is less urgent at this | ||||
stage. | ||||
4) Limit amount of exchanged data. The protocol design should be | A passive attacker can store all monitored encrypted IPsec | |||
such that the amount of exchanged data, such as public-keys, is | communication today and decrypt it once a quantum computer is | |||
kept as small as possible even if initiator and responder need | available in the future. This attack can have serious | |||
to agree on a hybrid group or multiple public-keys need to be | consequences that will not be visible for years to come. On the | |||
exchanged. | other hand, an attacker can only perform active attacks, such as | |||
impersonation of the communicating peers, once a quantum | ||||
computer is available sometime in the future. Thus, this | ||||
specification focuses on confidentiality due to the urgency of | ||||
this problem and presents a defense against the serious attack | ||||
described above, but it does not address authentication because | ||||
it is less urgent at this stage. | ||||
5) Not post-quantum specific. Any cryptographic algorithm could be | 4) Limit the amount of exchanged data | |||
potentially broken in the future by currently unknown or | ||||
impractical attacks: quantum computers are merely the most | ||||
concrete example of this. The design does not categorize | ||||
algorithms as "post-quantum" or "non post-quantum" nor does it | ||||
create assumptions about the properties of the algorithms, | ||||
meaning that if algorithms with different properties become | ||||
necessary in the future, this extension can be used unchanged to | ||||
facilitate migration to those algorithms. | ||||
6) Limited amount of changes. A key goal is to limit the number of | The protocol design should be such that the amount of exchanged | |||
changes required when enabling a post-quantum handshake. This | data, such as public keys, is kept as small as possible, even if | |||
ensures easier and quicker adoption in existing implementations. | the initiator and the responder need to agree on a hybrid group | |||
or if multiple public keys need to be exchanged. | ||||
7) Localized changes. Another key requirement is that changes to | 5) Not post-quantum specific | |||
the protocol are limited in scope, in particular, limiting | ||||
changes in the exchanged messages and in the state machine, so | ||||
that they can be easily implemented. | ||||
8) Deterministic operation. This requirement means that the hybrid | Any cryptographic algorithm could be potentially broken in the | |||
post-quantum exchange, and thus, the computed keys, will be | future by currently unknown or impractical attacks. Quantum | |||
based on algorithms that both client and server wish to support. | computers are merely the most concrete example of this. The | |||
design does not categorize algorithms as "post-quantum" or "non- | ||||
post-quantum", nor does it create assumptions about the | ||||
properties of the algorithms; meaning that if algorithms with | ||||
different properties become necessary in the future, this | ||||
extension can be used unchanged to facilitate migration to those | ||||
algorithms. | ||||
9) Fragmentation support. Some PQC algorithms could be relatively | 6) Limited amount of changes | |||
bulky and they might require fragmentation. Thus, a design goal | ||||
is the adaptation and adoption of an existing fragmentation | ||||
method or the design of a new method that allows for the | ||||
fragmentation of the key shares. | ||||
10) Backwards compatibility and interoperability. This is a | A key goal is to limit the number of changes required when | |||
fundamental requirement to ensure that hybrid post-quantum IKEv2 | enabling a post-quantum handshake. This ensures easier and | |||
and standard IKEv2 implementations as per [RFC7296] | quicker adoption in existing implementations. | |||
specification are interoperable. | ||||
11) USA Federal Information Processing Standards (FIPS) compliance. | 7) Localized changes | |||
IPsec is widely used in Federal Information Systems and FIPS | ||||
Another key requirement is that changes to the protocol are | ||||
limited in scope, in particular, limiting changes in the | ||||
exchanged messages and in the state machine, so that they can be | ||||
easily implemented. | ||||
8) Deterministic operation | ||||
This requirement means that the hybrid post-quantum exchange | ||||
and, thus, the computed keys will be based on algorithms that | ||||
both client and server wish to support. | ||||
9) Fragmentation support | ||||
Some PQC algorithms could be relatively bulky and might require | ||||
fragmentation. Thus, a design goal is the adaptation and | ||||
adoption of an existing fragmentation method or the design of a | ||||
new method that allows for the fragmentation of the key shares. | ||||
10) Backward compatibility and interoperability | ||||
This is a fundamental requirement to ensure that hybrid post- | ||||
quantum IKEv2 and standard IKEv2 implementations as per | ||||
[RFC7296] are interoperable. | ||||
11) Compliance with USA Federal Information Processing Standards | ||||
(FIPS) | ||||
IPsec is widely used in Federal Information Systems, and FIPS | ||||
certification is an important requirement. However, at the time | certification is an important requirement. However, at the time | |||
of writing, none of the algorithms that is believed to be post- | of writing, none of the algorithms that is believed to be post- | |||
quantum is FIPS compliant yet. Nonetheless, it is possible to | quantum is yet FIPS compliant. Nonetheless, it is possible to | |||
combine this post-quantum algorithm with a FIPS compliant key | combine this post-quantum algorithm with a FIPS-compliant key | |||
establishment method so that the overall design remains FIPS | establishment method so that the overall design remains FIPS | |||
compliant [NISTPQCFAQ]. | compliant [NISTPQCFAQ]. | |||
12) Ability to use this method with multiple classical (EC)DH key | 12) Ability to use this method with multiple classical (EC)DH key | |||
exchanges. In some situations peers have no single mutually | exchanges | |||
trusted key exchange algorithm (e.g., due to local policy | ||||
restrictions). The ability to combine two (or more) key | In some situations, peers have no single, mutually trusted, key | |||
exchange methods in such a way that the resulting shared key | exchange algorithm (e.g., due to local policy restrictions). | |||
depends on all of them allows peers to communicate in this | The ability to combine two (or more) key exchange methods in | |||
situation. | such a way that the resulting shared key depends on all of them | |||
allows peers to communicate in this situation. | ||||
Appendix C. Alternative Design | Appendix C. Alternative Design | |||
This section gives an overview on a number of alternative approaches | This section gives an overview on a number of alternative approaches | |||
that have been considered, but later discarded. These approaches | that have been considered but later discarded. These approaches are | |||
are: | as follows. | |||
* Sending the classical and post-quantum key exchanges as a single | * Sending the classical and post-quantum key exchanges as a single | |||
transform | transform | |||
A method to combine the various key exchanges into a single large | A method to combine the various key exchanges into a single large | |||
KE payload was considered; this effort is documented in a previous | KE payload was considered. This effort is documented in a | |||
version of this draft (draft-tjhai-ipsecme-hybrid-qske-ikev2-01). | previous version of this document (draft-tjhai-ipsecme-hybrid- | |||
This does allow us to cleanly apply hybrid key exchanges during | qske-ikev2-01). This method allows us to cleanly apply hybrid key | |||
the Child SA; however it does add considerable complexity, and | exchanges during the Child SA. However, it does add considerable | |||
requires an independent fragmentation solution. | complexity and requires an independent fragmentation solution. | |||
* Sending post-quantum proposals and policies in KE payload only | * Sending post-quantum proposals and policies in the KE payload only | |||
With the objective of not introducing unnecessary notify payloads, | With the objective of not introducing unnecessary notify payloads, | |||
a method to communicate the hybrid post-quantum proposal in the KE | a method to communicate the hybrid post-quantum proposal in the KE | |||
payload during the first pass of the protocol exchange was | payload during the first pass of the protocol exchange was | |||
considered. Unfortunately, this design is susceptible to the | considered. Unfortunately, this design is susceptible to the | |||
following downgrade attack. Consider the scenario where there is | following downgrade attack. Consider the scenario where there is | |||
an on-path attacker sitting between an initiator and a responder. | an on-path attacker sitting between an initiator and a responder. | |||
The initiator proposes, through SAi payload, to use a hybrid post- | Through the SAi payload, the initiator proposes using a hybrid | |||
quantum group and as a fallback a Diffie-Hellman group, and | post-quantum group and, as a fallback, a Diffie-Hellman group; and | |||
through KEi payload, the initiator proposes a list of hybrid post- | through the KEi payload, the initiator proposes a list of hybrid | |||
quantum proposals and policies. The on-path attacker intercepts | post-quantum proposals and policies. The on-path attacker | |||
this traffic and replies with N(INVALID_KE_PAYLOAD) suggesting to | intercepts this traffic and replies with N(INVALID_KE_PAYLOAD), | |||
downgrade to the fallback Diffie-Hellman group instead. The | suggesting a downgrade to the fallback Diffie-Hellman group | |||
initiator then resends the same SAi payload and the KEi payload | instead. The initiator then resends the same SAi payload and the | |||
containing the public value of the fallback Diffie-Hellman group. | KEi payload containing the public value of the fallback Diffie- | |||
Note that the attacker may forward the second IKE_SA_INIT message | Hellman group. Note that the attacker may forward the second | |||
only to the responder, and therefore at this point in time, the | IKE_SA_INIT message only to the responder. Therefore, at this | |||
responder will not have the information that the initiator prefers | point in time, the responder will not have the information that | |||
the hybrid group. Of course, it is possible for the responder to | the initiator prefers the hybrid group. Of course, it is possible | |||
have a policy to reject an IKE_SA_INIT message that (a) offers a | for the responder to have a policy to reject an IKE_SA_INIT | |||
hybrid group but not offering the corresponding public value in | message that (a) offers a hybrid group but does not offer the | |||
the KEi payload; and (b) the responder has not specifically | corresponding public value in the KEi payload and (b) the | |||
acknowledged that it does not supported the requested hybrid | responder has not specifically acknowledged that it does not | |||
group. However, the checking of this policy introduces | support the requested hybrid group. However, the checking of this | |||
unnecessary protocol complexity. Therefore, in order to fully | policy introduces unnecessary protocol complexity. Therefore, in | |||
prevent any downgrade attacks, using KE payload alone is not | order to fully prevent any downgrade attacks, using a KE payload | |||
sufficient and that the initiator MUST always indicate its | alone is not sufficient, and the initiator MUST always indicate | |||
preferred post-quantum proposals and policies in a notify payload | its preferred post-quantum proposals and policies in a notify | |||
in the subsequent IKE_SA_INIT messages following a | payload in the subsequent IKE_SA_INIT messages following an | |||
N(INVALID_KE_PAYLOAD) response. | N(INVALID_KE_PAYLOAD) response. | |||
* New payload types to negotiate hybrid proposal and to carry post- | * New payload types to negotiate hybrid proposals and to carry post- | |||
quantum public values | quantum public values | |||
Semantically, it makes sense to use a new payload type, which | Semantically, it makes sense to use a new payload type, which | |||
mimics the SA payload, to carry a hybrid proposal. Likewise, | mimics the SA payload, to carry a hybrid proposal. Likewise, | |||
another new payload type that mimics the KE payload, could be used | another new payload type that mimics the KE payload could be used | |||
to transport hybrid public value. Although, in theory a new | to transport hybrid public value. Although, in theory, a new | |||
payload type could be made backwards compatible by not setting its | payload type could be made backward compatible by not setting its | |||
critical flag as per Section 2.5 of [RFC7296], it is believed that | critical flag as per Section 2.5 of [RFC7296], it is believed that | |||
it may not be that simple in practice. Since the original release | it may not be that simple in practice. Since the original release | |||
of IKEv2 in RFC4306, no new payload type has ever been proposed | of IKEv2 in RFC 4306, no new payload type has ever been proposed; | |||
and therefore, this creates a potential risk of having a backward | therefore, this creates a potential risk of having a backward- | |||
compatibility issue from non-conformant IKEv2 implementations. | compatibility issue from nonconformant IKEv2 implementations. | |||
Since there appears to be no other compelling advantages apart | Since there appears to be no other compelling advantages apart | |||
from a semantic one, the existing transform type and notify | from a semantic one, the existing Transform Type and notify | |||
payloads are used instead. | payloads are used instead. | |||
* Hybrid public value payload | * Hybrid public value payload | |||
One way to transport the negotiated hybrid public payload, which | One way to transport the negotiated hybrid public payload, which | |||
contains one classical Diffie-Hellman public value and one or more | contains one classical Diffie-Hellman public value and one or more | |||
post-quantum public values, is to bundle these into a single KE | post-quantum public values, is to bundle these into a single KE | |||
payload. Alternatively, these could also be transported in a | payload. Alternatively, these could also be transported in a | |||
single new hybrid public value payload, but following the same | single new hybrid public value payload. However, following the | |||
reasoning as above, this may not be a good idea from a backward | same reasoning as above may not be a good idea from a backward- | |||
compatibility perspective. Using a single KE payload would | compatibility perspective. Using a single KE payload would | |||
require an encoding or formatting to be defined so that both peers | require encoding or formatting to be defined so that both peers | |||
are able to compose and extract the individual public values. | are able to compose and extract the individual public values. | |||
However, it is believed that it is cleaner to send the hybrid | However, it is believed that it is cleaner to send the hybrid | |||
public values in multiple KE payloads--one for each group or | public values in multiple KE payloads: one for each group or | |||
algorithm. Furthermore, at this point in the protocol exchange, | algorithm. Furthermore, at this point in the protocol exchange, | |||
both peers should have indicated support of handling multiple KE | both peers should have indicated support for handling multiple KE | |||
payloads. | payloads. | |||
* Fragmentation | * Fragmentation | |||
Handling of large IKE_SA_INIT messages has been one of the most | The handling of large IKE_SA_INIT messages has been one of the | |||
challenging tasks. A number of approaches have been considered | most challenging tasks. A number of approaches have been | |||
and the two prominent ones that have been discarded are outlined | considered, and the two prominent ones that have been discarded | |||
as follows. | are outlined as follows. | |||
The first approach is to treat the entire IKE_SA_INIT message as a | The first approach is to treat the entire IKE_SA_INIT message as a | |||
stream of bytes, which is then split it into a number of | stream of bytes, which is then split into a number of fragments, | |||
fragments, each of which is wrapped onto a payload that will fit | each of which is wrapped onto a payload that will fit into the | |||
into the size of the network MTU. The payload that wraps each | size of the network MTU. The payload that wraps each fragment has | |||
fragment has a new payload type and it is envisaged that this new | a new payload type, and it is envisaged that this new payload type | |||
payload type will not cause a backward compatibility issue because | will not cause a backward-compatibility issue because, at this | |||
at this stage of the protocol, both peers should have indicated | stage of the protocol, both peers should have indicated support of | |||
support of fragmentation in the first pass of the IKE_SA_INIT | fragmentation in the first pass of the IKE_SA_INIT exchange. The | |||
exchange. The negotiation of fragmentation is performed using a | negotiation of fragmentation is performed using a notify payload, | |||
notify payload, which also defines supporting parameters such as | which also defines supporting parameters, such as the size of | |||
the size of fragment in octets and the fragment identifier. The | fragment in octets and the fragment identifier. The new payload | |||
new payload that wraps each fragment of the messages in this | that wraps each fragment of the messages in this exchange is | |||
exchange is assigned the same fragment identifier. Furthermore, | assigned the same fragment identifier. Furthermore, it also has | |||
it also has other parameters such as a fragment index and total | other parameters, such as a fragment index and total number of | |||
number of fragments. This approach has been discarded due to its | fragments. This approach has been discarded due to its blanket | |||
blanket approach to fragmentation. In cases where only a few | approach to fragmentation. In cases where only a few payloads | |||
payloads need to be fragmented, this approach appears to be overly | need to be fragmented, this approach appears to be overly | |||
complicated. | complicated. | |||
Another idea that has been discarded was fragmenting an individual | Another idea that has been discarded is fragmenting an individual | |||
payload without introducing a new payload type. The idea is to | payload without introducing a new payload type. The idea is to | |||
use the 9-th bit (the bit after the critical flag in the RESERVED | use the 9-th bit (the bit after the critical flag in the RESERVED | |||
field) in the generic payload header as a flag to mark that this | field) in the generic payload header as a flag to mark that this | |||
payload is fragmented. As an example, if a KE payload is to be | payload is fragmented. As an example, if a KE payload is to be | |||
fragmented, it may look as follows. | fragmented, it may look 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|F| RESERVED | Payload Length | | | Next Payload |C|F| RESERVED | Payload Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Diffie-Hellman Group Number | Fragment Identifier | | | Diffie-Hellman Group Number | Fragment Identifier | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Fragment Index | Total Fragments | | | Fragment Index | Total Fragments | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Total KE Payload Data Length | | | Total KE Payload Data Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
~ Fragmented KE Payload ~ | ~ Fragmented KE Payload ~ | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
When the flag F is set, this means the current KE payload is a | Figure 1: Example of How to Fragment a KE Payload | |||
fragment of a larger KE payload. The Payload Length field denotes | ||||
the size of this payload fragment in octets--including the size of | When the flag F is set, the current KE payload is a fragment of a | |||
the generic payload header. The two-octet RESERVED field | larger KE payload. The Payload Length field denotes the size of | |||
following Diffie-Hellman Group Number was to be used as a fragment | this payload fragment in octets: including the size of the generic | |||
identifier to help assembly and disassembly of fragments. The | payload header. The 2-octet RESERVED field following Diffie- | |||
Fragment Index and Total Fragments fields are self-explanatory. | Hellman Group Number was to be used as a fragment identifier to | |||
The Total KE Payload Data Length indicates the size of the | help the assembly and disassembly of fragments. The Fragment | |||
assembled KE payload data in octets. Finally, the actual fragment | Index and Total Fragments fields are self-explanatory. The Total | |||
is carried in Fragment KE Payload field. | KE Payload Data Length indicates the size of the assembled KE | |||
payload data in octets. Finally, the actual fragment is carried | ||||
in Fragment KE Payload field. | ||||
This approach has been discarded because it is believed that the | This approach has been discarded because it is believed that the | |||
working group may not want to use the RESERVED field to change the | working group may not want to use the RESERVED field to change the | |||
format of a packet and that implementers may not like the added | format of a packet, and that implementers may not like the added | |||
complexity from checking the fragmentation flag in each received | complexity from checking the fragmentation flag in each received | |||
payload. More importantly, fragmenting the messages in this way | payload. More importantly, fragmenting the messages in this way | |||
may leave the system to be more prone to denial of service (DoS) | may leave the system to be more prone to denial-of-service (DoS) | |||
attacks. By using IKE_INTERMEDIATE to transport the large post- | attacks. This issue can be solved using IKE_INTERMEDIATE | |||
quantum key exchange payloads, and using the generic IKEv2 | [RFC9242] to transport the large post-quantum key exchange | |||
fragmentation protocol [RFC7383] solve the issue. | payloads and using the generic IKEv2 fragmentation protocol | |||
[RFC7383]. | ||||
* Group sub-identifier | * Group sub-identifier | |||
As discussed before, each group identifier is used to distinguish | As discussed before, each group identifier is used to distinguish | |||
a post-quantum algorithm. Further classification could be made on | a post-quantum algorithm. Further classification could be made on | |||
a particular post-quantum algorithm by assigning additional value | a particular post-quantum algorithm by assigning an additional | |||
alongside the group identifier. This sub- identifier value may be | value alongside the group identifier. This sub-identifier value | |||
used to assign different security parameter sets to a given post- | may be used to assign different security-parameter sets to a given | |||
quantum algorithm. However, this level of details does not fit | post-quantum algorithm. However, this level of detail does not | |||
the principles of the document where it should deal with generic | fit the principles of the document where it should deal with | |||
hybrid key exchange protocol, not a specific ciphersuite. | generic hybrid key exchange protocol and not a specific | |||
Furthermore, there are enough Diffie- Hellman group identifiers | ciphersuite. Furthermore, there are enough Diffie-Hellman group | |||
should this be required in the future. | identifiers should this be required in the future. | |||
Acknowledgements | ||||
The authors would like to thank Frederic Detienne and Olivier Pelerin | ||||
for their comments and suggestions, including the idea to negotiate | ||||
the post-quantum algorithms using the existing KE payload. The | ||||
authors are also grateful to Tobias Heider and Tobias Guggemos for | ||||
valuable comments. Thanks to Paul Wouters for reviewing the | ||||
document. | ||||
Authors' Addresses | Authors' Addresses | |||
C. Tjhai | CJ. Tjhai | |||
Post-Quantum | Post-Quantum | |||
Email: cjt@post-quantum.com | Email: cjt@post-quantum.com | |||
M. Tomlinson | Martin Tomlinson | |||
Post-Quantum | Post-Quantum | |||
Email: mt@post-quantum.com | Email: mt@post-quantum.com | |||
G. Bartlett | Graham Bartlett | |||
Quantum Secret | Quantum Secret | |||
Email: graham.ietf@gmail.com | Email: graham.ietf@gmail.com | |||
S. Fluhrer | Scott Fluhrer | |||
Cisco Systems | Cisco Systems | |||
Email: sfluhrer@cisco.com | Email: sfluhrer@cisco.com | |||
D. Van Geest | Daniel Van Geest | |||
ISARA Corporation | ISARA Corporation | |||
Email: daniel.vangeest@isara.com | Email: daniel.vangeest.ietf@gmail.com | |||
O. Garcia-Morchon | Oscar Garcia-Morchon | |||
Philips | Philips | |||
Email: oscar.garcia-morchon@philips.com | Email: oscar.garcia-morchon@philips.com | |||
Valery Smyslov | Valery Smyslov | |||
ELVIS-PLUS | ELVIS-PLUS | |||
Email: svan@elvis.ru | Email: svan@elvis.ru | |||
End of changes. 202 change blocks. | ||||
929 lines changed or deleted | 869 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |