| rfc9370xml2.original.xml | rfc9370.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
| <!ENTITY RFC9242 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.9242.xml"> | ||||
| <!ENTITY I-D.tjhai-ikev2-beyond-64k-limit SYSTEM "https://xml2rfc.tools.ietf.org | ||||
| /public/rfc/bibxml3/reference.I-D.tjhai-ikev2-beyond-64k-limit.xml"> | ||||
| <!ENTITY I-D.ietf-ipsecme-g-ikev2 SYSTEM "https://xml2rfc.tools.ietf.org/public/ | ||||
| rfc/bibxml3/reference.I-D.ietf-ipsecme-g-ikev2.xml"> | ||||
| <!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.2119.xml"> | ||||
| <!ENTITY RFC5723 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.5723.xml"> | ||||
| <!ENTITY RFC6023 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.6023.xml"> | ||||
| <!ENTITY RFC7296 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.7296.xml"> | ||||
| <!ENTITY RFC7383 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.7383.xml"> | ||||
| <!ENTITY RFC8019 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.8019.xml"> | ||||
| <!ENTITY RFC8174 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.8174.xml"> | ||||
| <!ENTITY RFC8784 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.8784.xml"> | ||||
| ]> | ||||
| <rfc docName="draft-ietf-ipsecme-ikev2-multiple-ke-12" updates="7296" category=" | ||||
| std" ipr="*trust200902" consensus="true"><?rfc compact="yes"?> | ||||
| <?rfc text-list-symbols="ooo*-o+"?> | ||||
| <?rfc subcompact="no"?> | ||||
| <?rfc sortrefs="yes"?> | ||||
| <?rfc symrefs="yes"?> | ||||
| <?rfc strict="yes"?> | ||||
| <?rfc toc="yes"?> | ||||
| <front> | ||||
| <title abbrev="Multiple Key Exchanges in IKEv2">Multiple Key Exchanges in | ||||
| IKEv2</title> | ||||
| <author fullname="C. Tjhai" initials="C." surname="Tjhai"> | ||||
| <organization>Post-Quantum</organization> | ||||
| <address><postal><street></street> | ||||
| </postal> | ||||
| <email>cjt@post-quantum.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="M. Tomlinson" initials="M." surname="Tomlinson"> | ||||
| <organization>Post-Quantum</organization> | ||||
| <address><postal><street></street> | ||||
| </postal> | ||||
| <email>mt@post-quantum.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="G. Bartlett" initials="G." surname="Bartlett"> | ||||
| <organization>Quantum Secret</organization> | ||||
| <address><postal><street></street> | ||||
| </postal> | ||||
| <email>graham.ietf@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="S. Fluhrer" initials="S." surname="Fluhrer"> | <!DOCTYPE rfc [ | |||
| <organization>Cisco Systems</organization> | <!ENTITY nbsp " "> | |||
| <address><postal><street></street> | <!ENTITY zwsp "​"> | |||
| </postal> | <!ENTITY nbhy "‑"> | |||
| <email>sfluhrer@cisco.com</email> | <!ENTITY wj "⁠"> | |||
| </address> | ]> | |||
| </author> | ||||
| <author fullname="D. Van Geest" initials="D." surname="Van Geest"> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-ipsecme-ikev | |||
| <organization>ISARA Corporation</organization> | 2-multiple-ke-12" number="9370" submissionType="IETF" category="std" consensus=" | |||
| <address><postal><street></street> | true" ipr="trust200902" obsoletes="" updates="7296" xml:lang="en" sortRefs="true | |||
| </postal> | " symRefs="true" | |||
| <email>daniel.vangeest@isara.com</email> | tocInclude="true" version="3"> | |||
| </address> | ||||
| </author> | ||||
| <author fullname="O. Garcia-Morchon" initials="O." surname="Garcia-Morcho | <!-- xml2rfc v2v3 conversion 3.15.3 --> | |||
| n"> | <front> | |||
| <organization>Philips</organization> | ||||
| <address><postal><street></street> | ||||
| </postal> | ||||
| <email>oscar.garcia-morchon@philips.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <title abbrev="Multiple Key Exchanges in IKEv2">Multiple Key Exchanges in th | ||||
| e Internet Key Exchange Protocol Version 2 (IKEv2)</title> | ||||
| <seriesInfo name="RFC" value="9370"/> | ||||
| <author fullname="CJ. Tjhai" initials="CJ." surname="Tjhai"> | ||||
| <organization>Post-Quantum</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| </postal> | ||||
| <email>cjt@post-quantum.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Martin Tomlinson" initials="M." surname="Tomlinson"> | ||||
| <organization>Post-Quantum</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| </postal> | ||||
| <email>mt@post-quantum.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Graham Bartlett" initials="G." surname="Bartlett"> | ||||
| <organization>Quantum Secret</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| </postal> | ||||
| <email>graham.ietf@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Scott Fluhrer" initials="S." surname="Fluhrer"> | ||||
| <organization>Cisco Systems</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| </postal> | ||||
| <email>sfluhrer@cisco.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Daniel Van Geest" initials="D." surname="Van Geest"> | ||||
| <organization>ISARA Corporation</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| </postal> | ||||
| <email>daniel.vangeest.ietf@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Oscar Garcia-Morchon" initials="O." surname="Garcia-Morcho | ||||
| n"> | ||||
| <organization>Philips</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| </postal> | ||||
| <email>oscar.garcia-morchon@philips.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Valery Smyslov" initials="V." surname="Smyslov"> | <author fullname="Valery Smyslov" initials="V." surname="Smyslov"> | |||
| <organization>ELVIS-PLUS</organization> | <organization>ELVIS-PLUS</organization> | |||
| <address><postal><street></street> | <address> | |||
| </postal> | <postal> | |||
| <email>svan@elvis.ru</email> | <street/> | |||
| </address> | </postal> | |||
| <email>svan@elvis.ru</email> | ||||
| </address> | ||||
| </author> | </author> | |||
| <date year="2023" month="May" /> | ||||
| <date/> | <area>sec</area> | |||
| <workgroup>Internet Engineering Task Force (IETF)</workgroup> | <workgroup>ipsecme</workgroup> | |||
| <abstract> | <keyword>post-quantum</keyword> | |||
| <t> This document describes how to extend the Internet Key Exchange Prot | <keyword>PQC</keyword> | |||
| ocol | <keyword>hybrid</keyword> | |||
| Version 2 (IKEv2) to allow multiple key exchanges to take place | <keyword>hybridization</keyword> | |||
| while computing a shared secret during a Security Association (SA) setup | <keyword>hybrid key exchange</keyword> | |||
| . | <keyword>key encapsulation</keyword> | |||
| </t> | <keyword>quantum</keyword> | |||
| <keyword>quantum-safe</keyword> | ||||
| <t> The primary application of this feature in IKEv2 is the ability to p | <keyword>KEM</keyword> | |||
| erform one or more | <keyword>PQ</keyword> | |||
| post-quantum key exchanges in conjunction with the classical (Elliptic C | ||||
| urve) Diffie-Hellman (EC)DH key exchange, | ||||
| so that the resulting shared key is resistant against quantum computer a | ||||
| ttacks. | ||||
| 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 th | ||||
| is concern, since the | ||||
| overall security is at least as strong as each individual primitive. | ||||
| </t> | ||||
| <t> Another possible application for this extension is the ability to co | ||||
| mbine several key exchanges | ||||
| in situations when no single key exchange algorithm is trusted by both i | ||||
| nitiator and responder. | ||||
| </t> | ||||
| <t> This document utilizes the IKE_INTERMEDIATE exchange, by means of whi | ||||
| ch multiple key exchanges are | ||||
| performed when an IKE SA is being established. It also introduces a new IKE | ||||
| v2 exchange IKE_FOLLOWUP_KE, | ||||
| which is used for the same purpose when the IKE SA is up (during rekeys or c | ||||
| reating additional Child SAs). | ||||
| </t> | ||||
| <t> This document updates RFC7296 by renaming a transform type 4 from "D | <abstract> | |||
| iffie-Hellman Group (D-H)" | ||||
| to "Key Exchange Method (KE)" and renaming a field in the Key Exchange P | ||||
| ayload from "Diffie-Hellman Group Num" | ||||
| to "Key Exchange Method". It also renames an IANA registry for this tran | ||||
| sform type | ||||
| from "Transform Type 4 - Diffie-Hellman Group Transform IDs" to | ||||
| "Transform Type 4 - Key Exchange Method Transform IDs". These changes ge | ||||
| neralize | ||||
| key exchange algorithms that can be used in IKEv2. | ||||
| </t> | ||||
| </abstract> | ||||
| </front> | ||||
| <middle> | <t>This document describes how to extend the Internet Key Exchange | |||
| <section title="Introduction" > | Protocol Version 2 (IKEv2) to allow multiple key exchanges to take | |||
| <section title="Problem Description" ><t> | place while computing a shared secret during a Security Association | |||
| Internet Key Exchange Protocol (IKEv2) as specified in <x | (SA) setup.</t> | |||
| ref target="RFC7296"/> | ||||
| uses the Diffie-Hellman (DH) or Elliptic Curve | ||||
| Diffie-Hellman (ECDH) algorithm, which shall be referred | ||||
| to as (EC)DH collectively, | ||||
| to establish a shared secret | ||||
| between an initiator and a responder. The security of th | ||||
| e (EC)DH algorithms relies | ||||
| on the difficulty to solve a discrete logarithm | ||||
| problem in multiplicative (and respectively elliptic curv | ||||
| e) groups when | ||||
| the order of the group parameter is large enough. While | ||||
| solving such | ||||
| a problem remains infeasible with current computing power | ||||
| , it is | ||||
| believed that general purpose quantum computers will be a | ||||
| ble to solve | ||||
| this problem, implying that the security of IKEv2 is comp | ||||
| romised. | ||||
| There are, however, a number of cryptosystems that are co | ||||
| njectured to | ||||
| be resistant against quantum computer attack. This famil | ||||
| y of | ||||
| cryptosystems is known as post-quantum cryptography (PQC) | ||||
| . It is | ||||
| sometimes also referred to as quantum-safe cryptography ( | ||||
| QSC) or | ||||
| quantum-resistant cryptography (QRC). | ||||
| </t> | ||||
| </section> | ||||
| <section title="Proposed Extension" > | <t>This document utilizes the IKE_INTERMEDIATE exchange, where multiple key ex | |||
| <t> | changes are performed when an IKE SA is being | |||
| This document describes a method to perform multiple succ | established. It also introduces a new IKEv2 exchange, | |||
| essive key | IKE_FOLLOWUP_KE, which is used for the same purpose when the IKE SA | |||
| exchanges in IKEv2. It allows integration of PQC in IKEv2, while | is being rekeyed or is creating additional Child SAs.</t> | |||
| maintaining backwards compatibility, to derive a set of I | ||||
| KE keys that | ||||
| is resistant to quantum computer attacks. This extension | ||||
| allows the | ||||
| negotiation of one or more PQC algorithm to exchange data | ||||
| , in addition | ||||
| to the existing (EC)DH key exchange data. It is believed | ||||
| that the | ||||
| feature of using more than one post-quantum algorithms is | ||||
| important as | ||||
| many of these algorithms are relatively new and there may | ||||
| be a need to | ||||
| hedge the security risk with multiple key exchange data f | ||||
| rom several | ||||
| distinct PQC algorithms. | ||||
| </t> | ||||
| <t>IKE peers perform multiple successive key exchanges to establish | <t>This document updates RFC 7296 by renaming a Transform Type 4 from | |||
| an IKE Security Association (SA). Each exchange produces a piece of | "Diffie-Hellman Group (D-H)" to "Key Exchange Method (KE)" and | |||
| secret and | renaming a field in the Key Exchange Payload from "Diffie-Hellman | |||
| these secrets are combined in a way such that: | Group Num" to "Key Exchange Method". It also renames an IANA | |||
| <ol type="(%c)"> | registry for this Transform Type from "Transform Type 4 - Diffie- | |||
| <li>the final shared secret is computed from all of the component ke | Hellman Group Transform IDs" to "Transform Type 4 - Key Exchange | |||
| y exchange | Method Transform IDs". These changes generalize key exchange | |||
| secret;</li> | algorithms that can be used in IKEv2.</t> | |||
| <li>the shared secret as specified in <xref target="RFC7296"/> is ob | ||||
| tained | ||||
| unless both peers support and agree to use the additional key exchan | ||||
| ges introduced | ||||
| in this specification; and</li> | ||||
| <li>if any of the component key exchange method is a post-quantum al | ||||
| gorithm, | ||||
| the final shared secret is post-quantum secure.</li> | ||||
| </ol> | ||||
| </t> | ||||
| <t> | </abstract> | |||
| Some post-quantum key exchange payloads may have sizes la | </front> | |||
| rger than | <middle> | |||
| the standard maximum transmission unit (MTU) size, and th | <section numbered="true" toc="default"> | |||
| erefore there could be issues with | <name>Introduction</name> | |||
| fragmentation at the IP layer. In order to allow using t | <section numbered="true" toc="default"> | |||
| hose larger payload | <name>Problem Description</name> | |||
| sizes, this mechanism relies on the IKE_INTERMEDIATE exchange as spe | ||||
| cified | ||||
| in <xref target="RFC9242"/>. With this | ||||
| mechanism, the key exchange is initiated using a smaller, | ||||
| possibly | ||||
| classical primitive, such as (EC)DH. Then, before | ||||
| the IKE_AUTH exchange, one or more IKE_INTERMEDIATE excha | ||||
| nges are carried out, | ||||
| each of which contains an additional key exchange. As th | ||||
| e IKE_INTERMEDIATE | ||||
| exchange is encrypted, the IKE fragmentation protocol <xr | ||||
| ef target="RFC7383" /> | ||||
| can be used. The IKE SK_* values are updated after each e | ||||
| xchange as described in | ||||
| <xref target="additional_ke"/>, | ||||
| and so the final IKE SA keys depend on all the key exchan | ||||
| ges, | ||||
| hence they are secure if any of the key exchanges are sec | ||||
| ure.</t> | ||||
| <t>While this extension is primarily aimed for IKE SAs due to the | <t>The Internet Key Exchange Protocol version 2 (IKEv2), as specified in <xr | |||
| potential fragmentation issue discussed above, it also applies to | ef target="RFC7296" format="default"/>, uses | |||
| CREATE_CHILD_SA exchanges as illustrated in | the Diffie-Hellman (DH) or the Elliptic Curve Diffie-Hellman (ECDH) | |||
| <xref target="create_child_sa_exchange"/> for creating/rekeying of | algorithm, which shall be referred to as "(EC)DH" collectively, to | |||
| Child SAs and rekeying of IKE SAs.</t> | establish a shared secret between an initiator and a responder. The | |||
| security of the (EC)DH algorithms relies on the difficulty to solve a | ||||
| discrete logarithm problem in multiplicative (and, respectively, | ||||
| elliptic curve) groups when the order of the group parameter is large | ||||
| enough. While solving such a problem remains infeasible with current | ||||
| computing power, it is believed that general-purpose quantum | ||||
| computers will be able to solve this problem, implying that the | ||||
| security of IKEv2 is compromised. There are, however, a number of | ||||
| cryptosystems that are conjectured to be resistant to quantum-computer attacks | ||||
| . This family of cryptosystems is known as "post-quantum cryptography" (or "PQC | ||||
| "). It is sometimes also referred to as | ||||
| "quantum-safe cryptography" (or "QSC") or "quantum-resistant cryptography" | ||||
| (or "QRC").</t> | ||||
| <t> | <t>It is essential to have the ability to perform one or more post-quantum key | |||
| Note that readers should consider the approach defined in | exchanges in conjunction with an (EC)DH key exchange so that the resulting | |||
| this document as | shared key is resistant to quantum-computer attacks. Since there is currentl | |||
| providing a long term solution in upgrading the IKEv2 pro | y no post-quantum key exchange that | |||
| tocol to | is as well-studied as (EC)DH, performing multiple key exchanges with | |||
| support post-quantum algorithms. A short term solution t | different post-quantum algorithms along with the well-established | |||
| o make IKEv2 | classical key-exchange algorithms addresses this concern, since the | |||
| key exchange quantum secure is to use post-quantum pre-sh | overall security is at least as strong as each individual primitive. </t> | |||
| ared keys as | </section> | |||
| specified in <xref target="RFC8784"/>.</t> | <section numbered="true" toc="default"> | |||
| <name>Proposed Extension</name> | ||||
| <t>This document describes a method to perform multiple successive key | ||||
| exchanges in IKEv2. This method allows integration of PQC in IKEv2, | ||||
| while maintaining backward compatibility, to derive a set of IKE keys | ||||
| that is resistant to quantum-computer attacks. This extension allows | ||||
| the negotiation of one or more PQC algorithms to exchange data, in | ||||
| addition to the existing (EC)DH key exchange data. It is believed | ||||
| that the feature of using more than one post-quantum algorithm is | ||||
| important, as many of these algorithms are relatively new, and there may | ||||
| be a need to hedge the security risk with multiple key exchange data | ||||
| from several distinct PQC algorithms. | ||||
| </t> | ||||
| <t> Note also that the proposed approach of performing multiple successive | <t>IKE peers perform multiple successive key exchanges to establish | |||
| key exchanges | an IKE SA. Each exchange produces some shared secret, and | |||
| in such a way that resulting session keys depend on all of them is not lim | these secrets are combined in a way such that: | |||
| ited | </t> | |||
| to only addressing the threat of quantum computer. It can also be used whe | <ol type="(%c)"> | |||
| n all | <li>the final shared secret is computed from all of the component | |||
| of the performed key exchanges are classical (EC)DH primitives, where for | key exchange secrets;</li> | |||
| some reasons | <li>unless both peers support and agree to use the additional key | |||
| (e.g. policy requirements) it is essential to perform multiple of them. | exchanges introduced in this specification, the final shared | |||
| </t> | secret equivalent to the shared secret specified in <xref target="RFC7296 | |||
| " | ||||
| format="default"/> is obtained; and</li> | ||||
| <li>if any part of the component key exchange method is a post-quantum | ||||
| algorithm, the final shared secret is post-quantum secure.</li> | ||||
| </ol> | ||||
| <t>Some post-quantum key exchange payloads may have sizes larger than | ||||
| the standard maximum transmission unit (MTU) size. Therefore, there | ||||
| could be issues with fragmentation at the IP layer. In order to allow | ||||
| the use of those larger payload sizes, this mechanism relies on the | ||||
| IKE_INTERMEDIATE exchange as specified in <xref target="RFC9242" | ||||
| format="default"/>. With this mechanism, the key exchange is | ||||
| initiated using a smaller, possibly classical primitive, such as | ||||
| (EC)DH. Then, before the IKE_AUTH exchange, one or more | ||||
| IKE_INTERMEDIATE exchanges are carried out, each of which contains an | ||||
| additional key exchange. As the IKE_INTERMEDIATE exchange is | ||||
| encrypted, the IKE fragmentation protocol <xref target="RFC7383" | ||||
| format="default"/> can be used. The IKE SK_* values are updated after | ||||
| each exchange, as described in <xref target="additional_ke" | ||||
| format="default"/>; thus, the final IKE SA keys depend on all the key | ||||
| exchanges. Hence, the keys are secure if any of the key exchanges are | ||||
| secure.</t> | ||||
| <t>While this extension is primarily aimed at IKE SAs due to the | ||||
| potential fragmentation issue discussed above, it also applies to | ||||
| CREATE_CHILD_SA exchanges as illustrated in <xref | ||||
| target="create_child_sa_exchange" format="default"/> for | ||||
| creating/rekeying of Child SAs and rekeying of IKE SAs.</t> | ||||
| <t>Note that readers should consider the approach defined in this | ||||
| document as providing a long-term solution in upgrading the IKEv2 | ||||
| protocol to support post-quantum algorithms. A short-term solution to | ||||
| make IKEv2 key exchange quantum secure is to use post-quantum | ||||
| pre-shared keys as specified in <xref target="RFC8784" | ||||
| format="default"/>.</t> | ||||
| <t>This specification does not attempt to address key exchanges with KE p | <t> Note also that the proposed approach of performing multiple | |||
| ayloads | successive key exchanges in such a way, when the resulting session keys | |||
| longer than 64 Kbytes; the current IKE payload format does not allow suc | depend on all of them, is not limited to only addressing the | |||
| h as | threat of quantum computers. It can also be used when all of the performed ke | |||
| y | ||||
| exchanges are classical (EC)DH primitives, where, for various reasons | ||||
| (e.g., policy requirements), it is essential to perform multiple key | ||||
| exchanges. | ||||
| </t> | ||||
| <t>This specification does not attempt to address key exchanges with KE | ||||
| payloads | ||||
| longer than 64 KB; the current IKE payload format does not allow such a | ||||
| possibility. At the time of writing, it appears likely that there | possibility. At the time of writing, it appears likely that there | |||
| are a number of key exchanges available that would not have such | are a number of key exchanges available that would not have such | |||
| a requirement. However, if such a requirement is needed, | a requirement. <xref target="I-D.tjhai-ikev2-beyond-64k-limit" format=" | |||
| <xref target="I-D.tjhai-ikev2-beyond-64k-limit"/> discusses approaches | default"/> discusses approaches | |||
| that could be taken to exchange huge payloads.</t> | that could be taken to exchange huge payloads if such a requirement were | |||
| needed.</t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Changes" > | <name>Document Organization</name> | |||
| <t>RFC EDITOR PLEASE DELETE THIS SECTION.</t> | <t>The remainder of this document is organized as follows. <xref | |||
| target="specification" format="default"/> describes how multiple key | ||||
| <t> Changes in this draft in each version iterations.</t> | exchanges are performed between two IKE peers and how keying materials | |||
| are derived for both SAs and Child SAs. <xref target="IANA" | ||||
| <t>draft-ietf-ipsecme-ikev2-multiple-ke-07</t> | format="default"/> discusses IANA considerations for the namespaces | |||
| <t><list style="symbols"> | introduced in this document. <xref target="security" | |||
| <t>Editorial changes.</t> | format="default"/> discusses security considerations. In the | |||
| </list></t> | Appendices, some examples of multiple key exchanges are illustrated in | |||
| <xref target="sample-exchanges" format="default"/>. <xref | ||||
| <t>draft-ietf-ipsecme-ikev2-multiple-ke-06</t> | target="design" format="default"/> summarizes design criteria and | |||
| <t><list style="symbols"> | alternative approaches that have been considered. These approaches are | |||
| <t>Updated draft with the allocated IANA values.</t> | later discarded, as described in <xref target="altdesign" | |||
| <t>Editorial changes following AD review.</t> | format="default"/>. | |||
| </list></t> | </t> | |||
| <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp | ||||
| <t>draft-ietf-ipsecme-ikev2-multiple-ke-05</t> | 14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", | |||
| <t><list style="symbols"> | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDE | |||
| <t>Updated the reference to RFC9242.</t> | D</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and | |||
| <t>Editorial changes.</t> | "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as desc | |||
| </list></t> | ribed in | |||
| BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, | ||||
| <t>draft-ietf-ipsecme-ikev2-multiple-ke-04</t> | and only when, they appear in all capitals, as shown here. | |||
| <t><list style="symbols"> | </t> | |||
| <t>Introduction and initial sections are reorganized.</t> | </section> | |||
| <t>More clarifications for error handling added.</t> | </section> | |||
| <t>ASCII arts displaying SA payload are added.</t> | <section anchor="specification" numbered="true" toc="default"> | |||
| <t>Clarification for handling multiple round trips key exchange meth | <name>Multiple Key Exchanges</name> | |||
| ods added.</t> | <section numbered="true" toc="default"> | |||
| <t>DoS concerns added into Security Considerations section.</t> | <name>Design Overview</name> | |||
| <t>Explicitly allow scenario when additional key exchanges are perfo | <t> Most post-quantum key agreement algorithms are relatively new. | |||
| rmed only after peers are authenticated.</t> | Thus, they are not fully trusted. There are also many proposed | |||
| </list></t> | algorithms that have different trade-offs and that rely on different | |||
| hard problems. The concern is that some of these hard problems may | ||||
| <t>draft-ietf-ipsecme-ikev2-multiple-ke-03</t> | turn out to be easier to solve than anticipated; thus, the key | |||
| <t><list style="symbols"> | agreement algorithm may not be as secure as expected. | |||
| <t>More clarifications added.</t> | ||||
| <t>Figure illustrating initial exchange added.</t> | ||||
| <t>Minor editorial changes.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-ipsecme-ikev2-multiple-ke-02</t> | ||||
| <t><list style="symbols"> | ||||
| <t>Added a reference on the handling of KE payloads larger than 64KB | ||||
| .</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-ipsecme-ikev2-multiple-ke-01</t> | ||||
| <t><list style="symbols"> | ||||
| <t>References are updated.</t> | ||||
| </list></t> | ||||
| <t>draft-ietf-ipsecme-ikev2-multiple-ke-00</t> | ||||
| <t><list style="symbols"> | ||||
| <t>Draft name changed as result of WG adoption and generalization of | ||||
| the approach.</t> | ||||
| <t>New exchange IKE_FOLLOWUP_KE is defined for additional key exchan | ||||
| ges performed after CREATE_CHILD_SA.</t> | ||||
| <t>Nonces are removed from all additional key exchanges.</t> | ||||
| <t>Clarification that IKE_INTERMEDIATE must be negotiated is added.< | ||||
| /t> | ||||
| </list></t> | ||||
| <t>draft-tjhai-ipsecme-hybrid-qske-ikev2-04</t> | ||||
| <t><list style="symbols"> | ||||
| <t>Clarification about key derivation in case of multiple key exchan | ||||
| ges in CREATE_CHILD_SA is added.</t> | ||||
| <t>Resolving rekey collisions in case of multiple key exchanges is c | ||||
| larified.</t> | ||||
| </list></t> | ||||
| <t>draft-tjhai-ipsecme-hybrid-qske-ikev2-03</t> | ||||
| <t><list style="symbols"> | ||||
| <t>Using multiple key exchanges CREATE_CHILD_SA is defined.</t> | ||||
| </list></t> | ||||
| <t>draft-tjhai-ipsecme-hybrid-qske-ikev2-02</t> | ||||
| <t><list style="symbols"> | ||||
| <t>Use new transform types to negotiate additional key exchanges, | ||||
| rather than using the KE payloads of IKE SA.</t> | ||||
| </list></t> | ||||
| <t>draft-tjhai-ipsecme-hybrid-qske-ikev2-01</t> | ||||
| <t><list style="symbols"> | ||||
| <t>Use IKE_INTERMEDIATE to perform multiple key exchanges in succ | ||||
| ession.</t> | ||||
| <t>Handle fragmentation by keeping the first key exchange (a stan | ||||
| dard | ||||
| IKE_SA_INIT with a few extra notifies) small, and encrypting the | ||||
| rest | ||||
| of the key exchanges.</t> | ||||
| <t>Simplify the negotiation of the 'extra' key exchanges.</t> | ||||
| </list></t> | ||||
| <t>draft-tjhai-ipsecme-hybrid-qske-ikev2-00</t> | ||||
| <t><list style="symbols"> | ||||
| <t>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.</t> | ||||
| <t>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 intro | ||||
| duced.</t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| <section title="Document Organization" > | ||||
| <t> | ||||
| The remainder of this document is organized as follows. | ||||
| <xref target="specification"/> describes how | ||||
| multiple key exchanges are performed between two IKE peers and how | ||||
| keying materials are derived for both SAs and Child SAs. | ||||
| <xref target="IANA"/> discusses IANA considerations for the namespac | ||||
| es | ||||
| introduced in this document, and <xref target="security"/> discusses | ||||
| security | ||||
| considerations. In the Appendices sections, some examples of multip | ||||
| le key exchanges | ||||
| are illustrated in <xref target="sample-exchanges"/>, | ||||
| <xref target="design"/> summarizes design criteria and a summary of | ||||
| alternative | ||||
| approaches that have been considered, but later discarded, are descri | ||||
| bed | ||||
| in <xref target="altdesign"/>. | ||||
| </t> | ||||
| <t> The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NO | ||||
| T", "SHOULD", "SHOULD NOT", | ||||
| "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this docu | ||||
| ment are to be interpreted | ||||
| as described in BCP 14 <xref target="RFC2119" /> <xref target="RFC81 | ||||
| 74" /> when, and only when, | ||||
| they appear in all capitals, as shown here. | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Multiple Key Exchanges" anchor="specification"> | ||||
| <section title="Design Overview"> | ||||
| <t> Most post-quantum key agreement algorithms are relatively new, a | ||||
| nd | ||||
| thus are not fully trusted. There are also many proposed algorithms | ||||
| , | ||||
| with different trade-offs and relying on different hard problems. T | ||||
| he | ||||
| concern is that some of these hard problems may turn out to be easie | ||||
| r | ||||
| to solve than anticipated and thus the key agreement algorithm may n | ||||
| ot be | ||||
| as secure as expected. A hybrid solution, when multiple key exchang | ||||
| es are performed | ||||
| and the calculated shared key depends on all of them, allows us to d | ||||
| eal with this | ||||
| uncertainty by combining a classical key exchange with a post-quantu | ||||
| m | ||||
| one, as well as leaving open the possibility of multiple post-quantu | ||||
| m | ||||
| key exchanges.</t> | ||||
| <t> In order to be able to use IKE fragmentation <xref target="RFC73 | ||||
| 83"/> for those key exchanges | ||||
| that may have long public keys, this specification utilizes the IKE_ | ||||
| INTERMEDIATE exchange | ||||
| defined in <xref target="RFC9242"/>. | ||||
| The initial IKE_SA_INIT messages do not have any inherent fragmentat | ||||
| ion support within IKE; however, IKE_SA_INIT messages can include a | ||||
| relatively short KE payload. The additional key exchanges are perfo | ||||
| rmed using IKE_INTERMEDIATE messages | ||||
| that follow the IKE_SA_INIT exchange. This is to allow the standard | ||||
| IKE | ||||
| fragmentation mechanisms (which cannot be used in IKE_SA_INIT) to be | ||||
| available for the potentially large | ||||
| Key Exchange payloads with post-quantum algorithm data. | ||||
| </t> | ||||
| <t> Note that this document assumes, that each key exchange method r | ||||
| equires one round trip and consumes exactly one IKE_INTERMEDIATE exchange. | ||||
| This assumption is valid for all classic key exchange methods define | ||||
| d so far and for all post-quantum methods currently known. | ||||
| For hypothetical future key exchange methods requiring multiple roun | ||||
| d trips to complete, a separate document should define how such | ||||
| methods are split into several IKE_INTERMEDIATE exchanges. | ||||
| </t> | ||||
| <t> In order to minimize communication overhead, only the key shares | ||||
| that are agreed to be used | ||||
| are actually exchanged. To negotiate additional key exchanges seven | ||||
| new Transform Types are defined. | ||||
| These transforms and Transform Type 4 share the same Transform IDs. | ||||
| </t> | ||||
| <t> It is assumed that new Transform Type 4 identifiers will be assi | ||||
| gned later for | ||||
| various post-quantum key exchanges <xref target="IKEV2TYP | ||||
| E4ID"></xref>. | ||||
| This specification does not make a distinction between classical (EC | ||||
| )DH | ||||
| and post-quantum key exchanges, nor post-quantum algorith | ||||
| ms which are | ||||
| true key exchanges versus post-quantum algorithms that ac | ||||
| t as key | ||||
| transport mechanisms; all are treated equivalently by the | ||||
| protocol. This document renames a field in the Key Excha | ||||
| nge Payload from | ||||
| "Diffie-Hellman Group Num" to "Key Exchange Method". It also renames | ||||
| Transform Type 4 from "Diffie-Hellman Group (D-H)" to "Key Exchange | ||||
| Method (KE)"; | ||||
| the corresponding renaming to the IANA registry is described in <xre | ||||
| f target="IANA"/>.</t> | ||||
| <t> The fact that newly defined transforms share | ||||
| the same registry for possible Transform IDs with Transform Type 4, | ||||
| allows additional key exchanges | ||||
| to be of any type - either post-quantum or classical (EC)DH | ||||
| one. This approach allows any combination of the defined key exchan | ||||
| ge methods | ||||
| to take place. This also allows IKE peers to perform a single post- | ||||
| quantum | ||||
| key exchange in the IKE_SA_INIT without additional key exchanges, | ||||
| provided that the IP fragmentation is not an issue and that hybrid k | ||||
| ey exchange is not needed. | ||||
| </t> | ||||
| <t> The SA payload in the IKE_SA_INIT message | A hybrid solution, when multiple key exchanges are performed and the | |||
| includes one or more newly defined transforms which represent the ex | calculated shared key depends on all of them, allows us to deal with | |||
| tra key exchange policy required by the | this uncertainty by combining a classical key exchange with a | |||
| initiator. The responder follows the usual IKEv2 negotiation rules: | post-quantum one, as well as leaving open the possibility of | |||
| it selects a single transform of each type, and | combining it with multiple post-quantum key exchanges.</t> | |||
| returns all of them in the IKE_SA_INIT response message. | <t> In order to be able to use IKE fragmentation <xref | |||
| </t> | target="RFC7383" format="default"/> for those key exchanges that may | |||
| have long public keys, this specification utilizes the | ||||
| IKE_INTERMEDIATE exchange defined in <xref target="RFC9242" | ||||
| format="default"/>. The initial IKE_SA_INIT messages do not have any | ||||
| inherent fragmentation support within IKE. However, IKE_SA_INIT | ||||
| messages can include a relatively short KE payload. The additional | ||||
| key exchanges are performed using IKE_INTERMEDIATE messages that | ||||
| follow the IKE_SA_INIT exchange. This is to allow the standard IKE | ||||
| fragmentation mechanisms (which cannot be used in IKE_SA_INIT) to be | ||||
| available for the potentially large Key Exchange payloads with | ||||
| post-quantum algorithm data. | ||||
| </t> | ||||
| <t> Note that this document assumes that each key exchange method | ||||
| requires one round trip and consumes exactly one IKE_INTERMEDIATE | ||||
| exchange. This assumption is valid for all classic key exchange | ||||
| methods defined so far and for all post-quantum methods currently | ||||
| known. For hypothetical future key exchange methods that require | ||||
| multiple round trips to complete, a separate document should define | ||||
| how such methods are split into several IKE_INTERMEDIATE exchanges. | ||||
| </t> | ||||
| <t> In order to minimize communication overhead, only the key shares | ||||
| that are agreed upon are actually exchanged. To negotiate | ||||
| additional key exchanges, seven new Transform Types are defined. These | ||||
| transforms and Transform Type 4 share the same Transform IDs. | ||||
| </t> | ||||
| <t> | <t> It is assumed that new Transform Type 4 identifiers will be | |||
| Then, provided that additional key exchanges are negotiated, the ini | assigned later for various post-quantum key exchanges <xref | |||
| tiator and the responder | target="IKEV2TYPE4ID" format="default"/>. This specification does not | |||
| perform one or more IKE_INTERMEDIATE exchanges. Following that, the | make a distinction between classical (EC)DH and post-quantum key | |||
| IKE_AUTH exchange authenticates peers | exchanges, nor between post-quantum algorithms that are true key | |||
| and completes IKE SA establishment.</t> | exchanges and post-quantum algorithms that act as key transport | |||
| mechanisms: all are treated equivalently by the protocol. This | ||||
| document renames a field in the Key Exchange Payload from | ||||
| "Diffie-Hellman Group Num" to "Key Exchange Method". This document also | ||||
| renames Transform Type 4 from "Diffie-Hellman Group (D-H)" to "Key | ||||
| Exchange Method (KE)". The corresponding renaming to the IANA registry | ||||
| is described in <xref target="IANA" format="default"/>.</t> | ||||
| <t> The fact that newly defined transforms share the same registry for | ||||
| possible Transform IDs with Transform Type 4 allows additional key | ||||
| exchanges to be of any type: either post-quantum or classical | ||||
| (EC)DH. This approach allows any combination of the defined key | ||||
| exchange methods to take place. This also allows IKE peers to perform | ||||
| a single post-quantum key exchange in the IKE_SA_INIT without | ||||
| additional key exchanges, provided that the IP fragmentation is not an | ||||
| issue and that hybrid key exchange is not needed. | ||||
| </t> | ||||
| <t> The SA payload in the IKE_SA_INIT message includes one or more | ||||
| newly defined transforms that represent the extra key exchange policy | ||||
| required by the initiator. The responder follows the usual IKEv2 | ||||
| negotiation rules: it selects a single transform of each type and | ||||
| returns all of them in the IKE_SA_INIT response message. | ||||
| </t> | ||||
| <t>Then, provided that additional key exchanges are negotiated, the | ||||
| initiator and the responder perform one or more IKE_INTERMEDIATE | ||||
| exchanges. Following that, the IKE_AUTH exchange authenticates peers | ||||
| and completes IKE SA establishment.</t> | ||||
| <figure><artwork align="center"><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| Initiator Responder | Initiator Responder | |||
| --------------------------------------------------------------------- | --------------------------------------------------------------------- | |||
| <-- IKE_SA_INIT (additional key exchanges negotiation) --> | <-- IKE_SA_INIT (additional key exchanges negotiation) --> | |||
| <-- {IKE_INTERMEDIATE (additional key exchange)} --> | <-- {IKE_INTERMEDIATE (additional key exchange)} --> | |||
| ... | ... | |||
| <-- {IKE_INTERMEDIATE (additional key exchange)} --> | <-- {IKE_INTERMEDIATE (additional key exchange)} --> | |||
| <-- {IKE_AUTH} --> | <-- {IKE_AUTH} --> | |||
| ]]></artwork></figure> | ]]> | |||
| </section> | </artwork> | |||
| <section title="Protocol Details"> | ||||
| <t> In the simplest case, the initiator starts a single key exchange | ||||
| (and has no interest in supporting multiple), and it is not conce | ||||
| rned | ||||
| with possible fragmentation of the IKE_SA_INIT messages (either b | ||||
| ecause | ||||
| the key exchange it selects is small enough not to fragment, or t | ||||
| he initiator is | ||||
| confident that fragmentation will be handled either by IP fragmen | ||||
| tation, | ||||
| or transport via TCP).</t> | ||||
| <t> In this case, the initiator performs the IKE_SA_INIT for a singl | ||||
| e key exchange using a Transform Type 4 | ||||
| (possibly with a post quantum algorithm), and including the initator | ||||
| KE payload. If the responder accepts | ||||
| the policy, it responds with an IKE_SA_INIT response, and IKE contin | ||||
| ues as usual.</t> | ||||
| <t> If the initiator desires to negotiate multiple key exchanges, th | ||||
| en the initiator uses the protocol | ||||
| behavior listed below.</t> | ||||
| <section anchor="negotiation" title="IKE_SA_INIT Round: Negotiation" | ||||
| > | ||||
| <t> Multiple key exchanges are negotiated using the standard IKE | ||||
| v2 mechanism, via SA payload. | ||||
| For this purpose seven new transform types, namely Additional Ke | ||||
| y Exchange 1 (with IANA assigned value 6), | ||||
| Additional Key Exchange 2 (7), Additional Key Exchange 3 (8), Ad | ||||
| ditional Key Exchange 4 (9), | ||||
| Additional Key Exchange 5 (10), Additional Key Exchange 6 (11) a | ||||
| nd Additional Key Exchange 7 (12) | ||||
| are defined. They are collectively called Additional Key Exchan | ||||
| ge transforms in this document | ||||
| and have slightly different semantics than the existing IKEv2 tr | ||||
| ansform types. | ||||
| They are interpreted as an indication of additional key exchange | ||||
| methods that peers agree to perform | ||||
| in a series of IKE_INTERMEDIATE exchanges following the IKE_SA_I | ||||
| NIT exchange. The allowed transform IDs for these transform types | ||||
| are the same as the IDs for Transform Type 4, so they all share | ||||
| a single IANA registry for transform IDs. | ||||
| </t> | ||||
| <t> Key exchange method negotiated via Transform Type 4 always t | ||||
| akes place | ||||
| in the IKE_SA_INIT exchange, as defined in <xref target="RFC7296 | ||||
| " />. Additional key exchanges negotiated via newly | ||||
| defined transforms MUST take place in a series of IKE_INTERMEDIA | ||||
| TE exchanges following the IKE_SA_INIT exchange, | ||||
| performed in an order of the values of their transform types, so | ||||
| that key exchange negotiated using Additional Key Exchange i always precedes th | ||||
| at of | ||||
| Additional Key Exchange i + 1. Each additional key exchange meth | ||||
| od MUST be fully completed before the next one is started. | ||||
| </t> | ||||
| <t> Note that with these semantics, Additional Key Exchange tran | ||||
| sforms are not associated | ||||
| with any particular type of key exchange and do not have any spe | ||||
| cific per transform type transform IDs IANA registry. | ||||
| Instead they all share a single registry for transform IDs, name | ||||
| ly "Key Exchange Method Transform IDs", which are also shared by Transform Type | ||||
| 4. | ||||
| All key exchange algorithms (both classical or post-quantum) sho | ||||
| uld be added to this registry. | ||||
| This approach gives peers flexibility in defining the ways they | ||||
| want | ||||
| to combine different key exchange methods. | ||||
| </t> | ||||
| <t> When forming a proposal the initiator adds transforms for th | ||||
| e IKE_SA_INIT exchange | ||||
| using Transform Type 4. In most cases they will contain classic | ||||
| al (EC)DH key exchange methods, | ||||
| however it is not a requirement. Additional key exchange method | ||||
| s are proposed using Additional Key Exchange | ||||
| transform types. All of these transform types are optional, the | ||||
| initiator is free | ||||
| to select any of them for proposing additional key exchange meth | ||||
| ods. Consequently, | ||||
| if none of the Additional Key Exchange transforms is included in | ||||
| the proposal, then this proposal | ||||
| indicates performing standard IKEv2, as defined in <xref target= | ||||
| "RFC7296"/>. | ||||
| On the other hand, if the initiator includes any Additional Key | ||||
| Exchange transform in the proposal, | ||||
| the responder MUST select one of the algorithms proposed using t | ||||
| his type. Note that this is not a | ||||
| new requirement, but that this behavior is already specified in | ||||
| Section 2.7 of <xref target="RFC7296"/>. | ||||
| A transform ID NONE MAY be added to those transform types which | ||||
| contain key exchange methods that | ||||
| the initiator believes is optional according to its local policy | ||||
| . | ||||
| </t> | ||||
| <t> The responder performs the negotiation using the standard IK | ||||
| Ev2 procedure described in Section 3.3 of <xref target="RFC7296"/>. | ||||
| However, for the Additional Key Exchange types, the responder's | ||||
| choice MUST NOT contain duplicated algorithms (those with identical Transform ID | ||||
| and attributes), | ||||
| except for the transform ID of NONE. An algorithm is represente | ||||
| d as a transform, in some cases the transform | ||||
| could include a set of associated attributes that define details | ||||
| of the algorithm. In this case, two | ||||
| transforms can be the same, but the attributes must be different | ||||
| . Additionally, the order of the attributes | ||||
| does not affect the equality of the algorithm, so two transforms | ||||
| (ID=alg1,ATTR1=attr1,ATTR2=attr2) and | ||||
| (ID=alg1,ATTR2=attr2,ATTR1=attr1) define the same algorithm. If | ||||
| the responder is unable | ||||
| to select non-duplicated algorithm for each proposed key exchange | ||||
| (either | ||||
| because the proposal contains too few choices or due to the local | ||||
| policy restrictions on using the proposed algorithms), | ||||
| then the responder MUST reject the message with an error notifica | ||||
| tion of type NO_PROPOSAL_CHOSEN. | ||||
| If the responder's message contains one or more duplicated choice | ||||
| s, the initiator | ||||
| should log the error and MUST treat the exchange as failed. | ||||
| The initiator MUST NOT initiate any IKE_INTERMEDIATE (or IKE_FOLL | ||||
| OWUP_KE) exchanges, so that no new SA is created. | ||||
| If this happens in the CREATE_CHILD_SA exchange, then the initiat | ||||
| or MAY delete the IKE SA, | ||||
| over which the invalid message was received, by sending a Delete | ||||
| payload. | ||||
| </t> | ||||
| <t> If the responder selects NONE for some Additional Key Exchan | ||||
| ge types (provided they are proposed by the initiator), | ||||
| then the corresponding Additional Key Exchange(s) in the IKE_INT | ||||
| ERMEDIATE exchange(s) MUST NOT take place. | ||||
| Therefore if the initiator includes NONE in all of the Additiona | ||||
| l Key Exchange transforms and the | ||||
| responder selects this value for all of them, then no IKE_INTERM | ||||
| EDIATE messages performing additional key | ||||
| exchanges will take place between the peers. Note that the IKE_ | ||||
| INTERMEDIATE exchanges may still take place for other purposes. | ||||
| </t> | ||||
| <t>The initiator MAY propose non-consecutive Additional Key Exch | </section> | |||
| ange transforms, for example | <section numbered="true" toc="default"> | |||
| proposing Additional Key Exchange 2 and Additional Key Exchange | <name>Protocol Details</name> | |||
| 5 transforms only. The responder | <t> In the simplest case, the initiator starts a single key exchange | |||
| MUST treat all of the omitted Additional Key Exchange transforms | (and has no interest in supporting multiple), and it is not concerned | |||
| as if they are proposed with | with possible fragmentation of the IKE_SA_INIT messages (because either | |||
| Transform ID NONE.</t> | the key exchange that it selects is small enough not to fragment | |||
| or the initiator is confident that fragmentation will be handled | ||||
| either by IP fragmentation or by transport via TCP).</t> | ||||
| <t> 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 | ||||
| algorithm) and including the initiator KE payload. If the responder | ||||
| accepts the policy, it responds with an IKE_SA_INIT response, and IKE | ||||
| continues as usual.</t> | ||||
| <t> If the initiator wants to negotiate multiple key exchanges, then | ||||
| the initiator uses the protocol behavior listed below.</t> | ||||
| <section anchor="negotiation" numbered="true" toc="default"> | ||||
| <name>IKE_SA_INIT Round: Negotiation</name> | ||||
| <t> Multiple key exchanges are negotiated using the standard IKEv2 | ||||
| mechanism via SA payload. For this purpose, seven new transform | ||||
| types are defined: Additional Key Exchange 1 (ADDKE1) with IANA-assign | ||||
| ed value | ||||
| 6, Additional Key Exchange 2 (ADDKE2) (7), Additional Key Exchange 3 ( | ||||
| ADDKE3) (8), | ||||
| Additional Key Exchange 4 (ADDKE4) (9), Additional Key Exchange 5 (ADD | ||||
| KE5) (10), | ||||
| Additional Key Exchange 6 (ADDKE6) (11), and Additional Key Exchange 7 | ||||
| (ADDKE7) (12). | ||||
| They are collectively called "Additional Key Exchange (ADDKE) | ||||
| Transform Types" in this document and have slightly different semantic | ||||
| s | ||||
| than the existing IKEv2 Transform Types. They are interpreted as an | ||||
| indication of additional key exchange methods that peers agree to | ||||
| perform in a series of IKE_INTERMEDIATE exchanges following the | ||||
| 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 a single IANA registry for Transform IDs. | ||||
| </t> | ||||
| <t>The key exchange method negotiated via Transform Type 4 always | ||||
| takes place in the IKE_SA_INIT exchange, as defined in <xref | ||||
| target="RFC7296" format="default"/>. Additional key exchanges | ||||
| negotiated via newly defined transforms <bcp14>MUST</bcp14> take | ||||
| place in a series of IKE_INTERMEDIATE exchanges following the | ||||
| IKE_SA_INIT exchange, performed in an order of the values of their | ||||
| Transform Types. This is so that the key exchange negotiated using Ad | ||||
| ditional | ||||
| Key Exchange i always precedes that of Additional Key Exchange i + | ||||
| 1. Each additional key exchange method <bcp14>MUST</bcp14> be fully | ||||
| completed before the next one is started. | ||||
| </t> | ||||
| <t>With these semantics, note that ADDKE | ||||
| Transform Types are not associated with any particular type of key | ||||
| exchange and do not have any Transform IDs that are specific per | ||||
| Transform Type IANA registry. Instead, they all share a single | ||||
| registry for Transform IDs, namely "Transform Type 4 - Key Exchange Me | ||||
| thod Transform | ||||
| IDs". All key 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. | ||||
| </t> | ||||
| <t> When forming a proposal, the initiator adds transforms for the | ||||
| IKE_SA_INIT exchange using Transform Type 4. In most cases, they | ||||
| will contain classical (EC)DH key exchange methods, but that is not | ||||
| a requirement. Additional key exchange methods are proposed using | ||||
| ADDKE Transform Types. All of these transform | ||||
| types are optional; the initiator is free to select any of them for | ||||
| proposing additional key exchange methods. Consequently, if none of | ||||
| the ADDKE Transform Types are included in the proposal, | ||||
| then this proposal indicates the performing of standard IKEv2, as | ||||
| defined in <xref target="RFC7296" format="default"/>. On the other | ||||
| hand, if the initiator includes any ADDKE | ||||
| Transform Type in the proposal, the responder <bcp14>MUST</bcp14> sele | ||||
| ct | ||||
| one of the algorithms proposed using this type. Note that this is | ||||
| not a new requirement; this behavior is already specified in | ||||
| <xref target="RFC7296" sectionFormat="of" section="2.7"/>. A | ||||
| Transform ID NONE <bcp14>MAY</bcp14> be added to those transform | ||||
| types that contain key exchange methods which the initiator believes | ||||
| are optional according to its local policy. | ||||
| </t> | ||||
| <t> The responder performs the negotiation using the standard IKEv2 | ||||
| procedure described in <xref target="RFC7296" sectionFormat="of" | ||||
| section="3.3"/>. However, for the ADDKE Transform Types, | ||||
| the responder's choice <bcp14>MUST NOT</bcp14> contain duplicated | ||||
| algorithms (those with an identical Transform ID and attributes), | ||||
| except for the Transform ID of NONE. An algorithm is represented as | ||||
| a transform. In some cases, the transform could include a set of | ||||
| associated attributes that define details of the algorithm. In this | ||||
| case, two transforms can be the same, but the attributes must be | ||||
| different. Additionally, the order of the attributes does not | ||||
| affect the equality of the algorithm, so the following two | ||||
| transforms define the same algorithm: | ||||
| "ID=alg1, ATTR1=attr1, ATTR2=attr2" and | ||||
| "ID=alg1, ATTR2=attr2, ATTR1=attr1". If the | ||||
| responder is unable to select algorithms that are not duplicated for e | ||||
| ach | ||||
| proposed key exchange (either because the proposal contains too few | ||||
| choices or due to the local policy restrictions on using the | ||||
| proposed algorithms), then the responder <bcp14>MUST</bcp14> reject | ||||
| the message with an error notification of type NO_PROPOSAL_CHOSEN. | ||||
| If the responder's message contains one or more duplicated choices, | ||||
| the initiator should log the error and <bcp14>MUST</bcp14> treat the | ||||
| exchange as failed. The initiator <bcp14>MUST NOT</bcp14> initiate | ||||
| any IKE_INTERMEDIATE (or IKE_FOLLOWUP_KE) exchanges so that no new | ||||
| SA is created. If this happens in the CREATE_CHILD_SA exchange, | ||||
| then the initiator <bcp14>MAY</bcp14> delete the IKE SA over which | ||||
| the invalid message was received by sending a Delete payload. | ||||
| </t> | ||||
| <t> If the responder selects NONE for some ADDKE | ||||
| Transform Types (provided they are proposed by the initiator), then an | ||||
| y | ||||
| corresponding additional key exchanges <bcp14>MUST NOT</bcp14> take pl | ||||
| ace. | ||||
| <t> Below is an example of the SA payload in the initiator's IKE | Therefore, if the | |||
| _SA_INIT request message. | initiator includes NONE in all of the ADDKE | |||
| Here the abbreviation AKEi is used to denote the i-th Additional | Transform Types and the responder selects this value for all of them, | |||
| Key Exchange transform defined in this document, | then no IKE_INTERMEDIATE exchanges performing additional key | |||
| and an abbreviation KE for the Key Exchange transform, | exchanges will take place between the peers. Note that the | |||
| that this document renames from the Diffie-Hellman Group transfo | IKE_INTERMEDIATE exchanges may still take place for other purposes. | |||
| rm. | </t> | |||
| Additionally, the notations PQ_KEM_1, PQ_KEM_2 and PQ_KEM_3 are | <t>The initiator <bcp14>MAY</bcp14> propose | |||
| used to | ADDKE Transform Types that are not consecutive, for example, proposing | |||
| represent some not-yet defined Transform IDs of some popular pos | ADDKE2 and ADDKE5 Transform Types only. The | |||
| t-quantum | responder <bcp14>MUST</bcp14> treat all of the omitted ADDKE | |||
| key exchange methods.</t> | transforms as if they were proposed with Transform ID | |||
| NONE.</t> | ||||
| <t>Below is an example of the SA payload in the initiator's IKE_SA_INI | ||||
| T | ||||
| request message. Here, the abbreviation "KE" is used for the Key Exchange tra | ||||
| nsform, which this | ||||
| document renames from the Diffie-Hellman Group transform. Additionally, the n | ||||
| otations PQ_KEM_1, PQ_KEM_2, and | ||||
| PQ_KEM_3 are used to represent Transform IDs that have yet to be defin | ||||
| ed of | ||||
| some popular post-quantum key exchange methods.</t> | ||||
| <figure><artwork align="center" ><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| 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 ) | |||
| ]]> | ||||
| ]]></artwork></figure> | </artwork> | |||
| <t> In this example, the initiator proposes to perform initial k | ||||
| ey exchange using 4096-bit MODP group | ||||
| followed by two mandatory additional key exchanges (i.e. Transfo | ||||
| rms AKE2 and AKE3) using PQ_KEM_1 and | ||||
| PQ_KEM_2 methods in any order, then followed by additional key e | ||||
| xchange (i.e. Transform AKE5) using | ||||
| PQ_KEM_3 method that may be omitted. | ||||
| </t> | ||||
| <t> The responder might return the following SA payload, indicat | <t> In this example, the initiator proposes performing the | |||
| ing that it agrees to | initial key exchange using a 4096-bit MODP Group followed by two | |||
| perform two additional key exchanges PQ_KEM_2 followed by PQ_KEM | mandatory additional key exchanges (i.e., ADDKE2 and ADDKE3 Transform | |||
| _1 and does not | Types) | |||
| want to perform PQ_KEM_3 additionally. | using PQ_KEM_1 and PQ_KEM_2 methods in any order followed | |||
| </t> | by an additional key exchange (i.e., ADDKE5 Transform Type) using the | |||
| PQ_KEM_3 | ||||
| method that may be omitted. | ||||
| </t> | ||||
| <t> The responder might return the following SA payload, indicating | ||||
| that it agrees to perform two additional key exchanges, PQ_KEM_2 | ||||
| followed by PQ_KEM_1, and that it does not want to additionally perfor | ||||
| m | ||||
| PQ_KEM_3. | ||||
| </t> | ||||
| <figure><artwork align="center" ><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| 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 ) | |||
| ]]> | ||||
| ]]></artwork></figure> | </artwork> | |||
| <t> If the initiator includes any Additional Key Exchange transf | <t> If the initiator includes any ADDKE Transform | |||
| orm types into the SA payload in the IKE_SA_INIT exchange request message, | Types into the SA payload in the IKE_SA_INIT exchange request | |||
| then it MUST also negotiate the use of the IKE_INTERMEDIATE exch | message, then it <bcp14>MUST</bcp14> also negotiate the use of the | |||
| ange as described in <xref target="RFC9242" />, | IKE_INTERMEDIATE exchange, as described in <xref target="RFC9242" | |||
| by including INTERMEDIATE_EXCHANGE_SUPPORTED notification in the | format="default"/> by including an INTERMEDIATE_EXCHANGE_SUPPORTED | |||
| same message. | notification in the same message. If the responder agrees to use | |||
| If the responder agrees to use additional key exchanges while es | additional key exchanges while establishing an initial IKE SA, it | |||
| tablishing initial IKE SA, | <bcp14>MUST</bcp14> also return this notification in the IKE_SA_INIT | |||
| it MUST also return this notification in the IKE_SA_INIT respons | response message, confirming that IKE_INTERMEDIATE exchange is | |||
| e message, | supported and will be used for transferring additional key exchange | |||
| thus confirming that IKE_INTERMEDIATE exchange is supported and | data. If the IKE_INTERMEDIATE exchange is not negotiated, then the | |||
| will be used for transferring additional key exchange data. | peers <bcp14>MUST</bcp14> treat any ADDKE | |||
| If the IKE_INTERMEDIATE exchange is not negotiated, then the pee | Transform Types in the IKE_SA_INIT exchange messages as unknown transf | |||
| rs MUST treat any Additional Key Exchange transforms | orm | |||
| in the IKE_SA_INIT exchange messages as unknown transform types | types and skip the proposals they appear in. If no other proposals | |||
| and skip the proposals they appear in. | are present in the SA payload, the peers will proceed as if no | |||
| If no other proposals are present in the SA payload, the peers w | proposal has been chosen (i.e., the responder will send a NO_PROPOSAL_ | |||
| ill proceed as if no proposal is chosen | CHOSEN | |||
| (i.e. the responder will send NO_PROPOSAL_CHOSEN notification). | notification). | |||
| </t> | </t> | |||
| <figure><artwork align="center" ><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| 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) | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t> It is possible that an attacker manages to send a response to | ||||
| the initiator's IKE_SA_INIT request | ||||
| before the legitimate responder does. If the initiator continues | ||||
| to create the IKE SA using this response, the attempt will fail. | ||||
| Implementers may wish to consider a possible defense technique de | ||||
| scribed in Section 2.4 of <xref target="RFC7296" />. | ||||
| </t> | ||||
| </section> | ||||
| <section title="IKE_INTERMEDIATE Round: Additional Key Exchanges" | <t> It is possible for an attacker to manage to send a response to | |||
| anchor="additional_ke"> | the initiator's IKE_SA_INIT request before the legitimate responder | |||
| <t> For each additional key exchange agreed to in the IKE_SA_INI | does. If the initiator continues to create the IKE SA using this | |||
| T exchange, | response, the attempt will fail. Implementers may wish to consider | |||
| the initiator and the responder perform IKE_INTERMEDIATE | strategies as described | |||
| exchange, | in <xref target="RFC7296" | |||
| as described in <xref target="RFC9242"/>.</t> | sectionFormat="of" section="2.4"/> to handle such an attack. | |||
| </t> | ||||
| </section> | ||||
| <section anchor="additional_ke" numbered="true" toc="default"> | ||||
| <name>IKE_INTERMEDIATE Round: Additional Key Exchanges</name> | ||||
| <t> For each additional key exchange agreed to in the IKE_SA_INIT exch | ||||
| ange, | ||||
| the initiator and the responder perform an IKE_INTERMEDIA | ||||
| TE exchange, | ||||
| as described in <xref target="RFC9242" format="default"/>.</t> | ||||
| <figure><artwork align="center" ><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| Initiator Responder | Initiator Responder | |||
| --------------------------------------------------------------------- | --------------------------------------------------------------------- | |||
| HDR, SK {KEi(n)} --> | HDR, SK {KEi(n)} --> | |||
| <-- HDR, SK {KEr(n)} | <-- HDR, SK {KEr(n)} | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t> 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 KEi(n) denotes the n-th IKE_INTERMEDIATE KE payload | ||||
| from the initiator | ||||
| and the integer n is sequential starting from 1.</t> | ||||
| <t> On receiving this, the responder sends back key exchange pay | ||||
| load KEr(n), | ||||
| which denotes the n-th IKE_INTERMEDIATE KE payload from the resp | ||||
| onder. | ||||
| As before, this message is protected with the current SK_er/SK_a | ||||
| r keys.</t> | ||||
| <t> The former "Diffie-Hellman Group Num" (now called "Key Excha | ||||
| nge Method") field in the KEi(n) and KEr(n) payloads MUST match the | ||||
| n-th negotiated additional key exchange. | ||||
| <!-- Note that the negotiated transform types (the encryption t | ||||
| ype, integrity type, prf type) are not modified. (do we need to say this?) --> | ||||
| </t> | ||||
| <t> Once this exchange is done, both sides compute an updated ke | <t> The initiator sends key exchange data in the KEi(n) payload. | |||
| ying material:</t> | This 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 initiator; the integer "n" is sequential starting from | ||||
| 1.</t> | ||||
| <t> On receiving this, the responder sends back key exchange payload | ||||
| KEr(n); "KEr(n)" denotes the n-th IKE_INTERMEDIATE KE payload from the | ||||
| responder. Similar to how the request is protected, this message is p | ||||
| rotected with the current | ||||
| SK_er/SK_ar keys.</t> | ||||
| <t> The former "Diffie-Hellman Group Num" (now called "Key Exchange Me | ||||
| thod") field in the KEi(n) and KEr(n) payloads <bcp14>MUST</bcp14> match the | ||||
| n-th negotiated additional key exchange.</t> | ||||
| <t> Once this exchange is done, both sides compute an updated keying m | ||||
| aterial:</t> | ||||
| <figure><artwork align="center" ><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| SKEYSEED(n) = prf(SK_d(n-1), SK(n) | Ni | Nr) | SKEYSEED(n) = prf(SK_d(n-1), SK(n) | Ni | Nr) | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t> where SK(n) is the resulting shared secret of this key excha | <t> From this exchange, SK(n) is the resulting shared secret. Ni and N | |||
| nge, | r are nonces from the IKE_SA_INIT exchange. | |||
| Ni and Nr are nonces from the IKE_SA_INIT exchange and SK_d(n-1) | SK_d(n-1) is the last generated SK_d (derived from IKE_SA_INIT | |||
| is the | for the first use of IKE_INTERMEDIATE and, otherwise, from the | |||
| last generated SK_d, (derived from IKE_SA_INIT for the first use | previous IKE_INTERMEDIATE exchange). The other keying materials, | |||
| of IKE_INTERMEDIATE, otherwise from the previous IKE_INTERMEDIATE exchange). | SK_d, SK_ai, SK_ar, SK_ei, SK_er, SK_pi, and SK_pr, are generated | |||
| The other keying materials SK_d, SK_ai, SK_ar, SK_ei, SK_er, SK_ | from the SKEYSEED(n) as follows:</t> | |||
| pi, SK_pr are generated from the SKEYSEED(n) as follows:</t> | ||||
| <figure><artwork align="center" ><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| {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) | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t> Both the initiator and the responder use these updated key | <t> Both the initiator and the responder use these updated key | |||
| values in the next exchange (IKE_INTERMEDIATE or IKE_AUTH ).</t> | values in the next exchange (IKE_INTERMEDIATE or IKE_AUTH ).</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="IKE_AUTH Exchange"> | <name>IKE_AUTH Exchange</name> | |||
| <t> After all IKE_INTERMEDIATE exchanges have completed, the ini | <t> After all IKE_INTERMEDIATE exchanges have completed, the initiator | |||
| tiator and | and | |||
| the responder perform an IKE_AUTH exchange. This exchang e is | the responder perform an IKE_AUTH exchange. This exchang e is | |||
| the standard IKE exchange as described in <xref target="R FC7296"/> with | the standard IKE exchange, as described in <xref target=" RFC7296" format="default"/>, with | |||
| the modification of AUTH payload calculation described in | the modification of AUTH payload calculation described in | |||
| <xref target="RFC9242"/>.</t> | <xref target="RFC9242" format="default"/>.</t> | |||
| </section> | </section> | |||
| <section anchor="create_child_sa_exchange" numbered="true" toc="default" | ||||
| <section title="CREATE_CHILD_SA Exchange" anchor="create_child_sa_ex | > | |||
| change"> | <name>CREATE_CHILD_SA Exchange</name> | |||
| <t> The CREATE_CHILD_SA exchange is used in IKEv2 for the purpos | <t> The CREATE_CHILD_SA exchange is used in IKEv2 for the purposes | |||
| es | of creating additional Child SAs, rekeying these Child SAs, and | |||
| of creating additional Child SAs, rekeying these and rekeying IK | rekeying IKE SA itself. When creating or rekeying Child SAs, the | |||
| E SA itself. | peers may optionally perform a key exchange to add a fresh entropy | |||
| When creating or rekeying Child SAs, the peers may optionally | into the session keys. In the case of an IKE SA rekey, the key exchan | |||
| perform a key exchange to add a fresh entropy into the session k | ge is | |||
| eys. | mandatory. Peers supporting this specification may want to use | |||
| In case of IKE SA rekey, the key exchange is mandatory. | multiple key exchanges in these situations. | |||
| Peers supporting this specification may want to use multiple key | </t> | |||
| exchanges | <t> Using multiple key exchanges with a CREATE_CHILD_SA exchange is | |||
| in these situations. | negotiated in a similar fashion to the initial IKE exchange, see <xref | |||
| </t> | target="negotiation" format="default"/>. If the initiator includes | |||
| any ADDKE Transform Types in the SA payload (along with | ||||
| <t> Using multiple key exchanges with CREATE_CHILD_SA exchange i | Transform Type 4), and if the responder agrees to perform additional | |||
| s negotiated | key exchanges, then the additional key exchanges are performed in a | |||
| similarly as in the initial IKE exchange, see <xref target="nego | series of new IKE_FOLLOWUP_KE exchanges that follow the | |||
| tiation" />. | CREATE_CHILD_SA exchange. The IKE_FOLLOWUP_KE exchange is introduced | |||
| If the initiator includes any Additional Key Exchange transform | especially for | |||
| in the SA payload | transferring data of additional key exchanges following the one | |||
| (along with Transform Type 4) and the responder agrees to perfor | performed in the CREATE_CHILD_SA. Its Exchange Type value is | |||
| m additional | 44. | |||
| key exchanges, then the additional key exchanges are performed i | </t> | |||
| n a series | <t> | |||
| of new IKE_FOLLOWUP_KE exchanges that follows the CREATE_CHILD_S | The key exchange negotiated via Transform Type 4 always takes | |||
| A exchange. | place in the CREATE_CHILD_SA exchange, as per the IKEv2 | |||
| The IKE_FOLLOWUP_KE exchange is introduced as a dedicated exchan | specification <xref target="RFC7296" format="default"/>. Additional k | |||
| ge for transferring data of additional key exchanges | ey exchanges are performed in an order | |||
| following the key exchange performed in the CREATE_CHILD_SA. Its | of the values of their Transform Types so that the key exchange | |||
| Exchange Type value is 44. | negotiated using Additional Key Exchange i always precedes the key exc | |||
| </t> | hange | |||
| negotiated using Additional Key Exchange i + 1. Each additional key ex | ||||
| <t> Key exchange negotiated via Transform Type 4 always takes pl | change | |||
| ace in the CREATE_CHILD_SA exchange, as per IKEv2 specification. | method <bcp14>MUST</bcp14> be fully completed before the next one is | |||
| Additional key exchanges are performed in an order of the values | started. Note that this document assumes that each key exchange | |||
| of their transform types, so that | method consumes exactly one IKE_FOLLOWUP_KE exchange. For the | |||
| key exchange negotiated using Transform Type n always precedes k | methods that require multiple round trips, a separate document should | |||
| ey exchange negotiated using | define how such methods are split into several IKE_FOLLOWUP_KE | |||
| Transform Type n + 1. Each additional key exchange method MUST b | exchanges. | |||
| e fully completed before the next one is started. | </t> | |||
| Note, that this document assumes, that each key exchange method | <t>After an IKE SA is created, the window size may be greater than one | |||
| consumes exactly one IKE_FOLLOWUP_KE exchange. | ; thus, multiple concurrent exchanges may be in progress. Therefore, it is | |||
| For the methods requiring multiple round trips, a separate docum | essential to link the IKE_FOLLOWUP_KE exchanges together with the | |||
| ent should define how such | corresponding CREATE_CHILD_SA exchange. Once an IKE SA is created, all IKE | |||
| methods are split into several IKE_FOLLOWUP_KE exchanges. | exchanges are independent and IKEv2 doesn't have a built-in mechanism to link | |||
| </t> | an exchange | |||
| with another one. A new status type notification called | ||||
| <t> After an IKE SA is created the window size may be greater th | "ADDITIONAL_KEY_EXCHANGE" is introduced for this purpose. | |||
| an one and multiple | Its Notify Message Type value is 16441, and the Protocol ID and SPI | |||
| concurrent exchanges may be in progress, it is essential to link | Size are both set to 0. The data associated with this notification | |||
| the IKE_FOLLOWUP_KE exchanges together | is a blob meaningful only to the responder so that the | |||
| with the corresponding CREATE_CHILD_SA exchange. Due to the fac | responder can correctly link successive exchanges. For the | |||
| t that once an IKE SA is created, all IKE exchanges | initiator, the content of this notification is an opaque blob. | |||
| are independent and do not have built-in means to link one with a | </t> | |||
| nother, a new status type | <t> The responder <bcp14>MUST</bcp14> include this notification in a | |||
| notification ADDITIONAL_KEY_EXCHANGE is introduced for this purpo | CREATE_CHILD_SA or IKE_FOLLOWUP_KE response message in case the next | |||
| se. | IKE_FOLLOWUP_KE exchange is expected, filling it with some data that | |||
| Its Notify Message Type value is 16441, and Protocol ID and SPI S | would allow linking the current exchange to the next one. | |||
| ize | The initiator <bcp14>MUST</bcp14> send back this notification intact | |||
| are both set to 0. The data associated with this notification i | in the request message of the next IKE_FOLLOWUP_KE exchange. | |||
| s a blob meaningful | </t> | |||
| only to the responder, so that the responder can correctly link | <t> Below is an example of CREATE_CHILD_SA exchange followed by three | |||
| successive | additional key exchanges. | |||
| exchanges. For the initiator the content of this notification i | </t> | |||
| s an opaque blob. | ||||
| </t> | ||||
| <t> The responder MUST include this notification in a CREATE_CHI | ||||
| LD_SA or | ||||
| IKE_FOLLOWUP_KE response message in case the next IKE_FOLLOWUP_K | ||||
| E exchange is expected, filling it with | ||||
| some data that would allow linking the current exchange to the n | ||||
| ext one. The initiator | ||||
| MUST send back this notification intact in the request message o | ||||
| f the next IKE_FOLLOWUP_KE exchange. | ||||
| </t> | ||||
| <t> Below is an example of CREATE_CHILD_SA exchange followed by | ||||
| three additional key exchanges. | ||||
| </t> | ||||
| <figure><artwork align="center" ><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| Initiator Responder | Initiator Responder | |||
| --------------------------------------------------------------------- | --------------------------------------------------------------------- | |||
| HDR(CREATE_CHILD_SA), SK {SA, Ni, KEi} --> | HDR(CREATE_CHILD_SA), SK {SA, Ni, KEi} --> | |||
| <-- HDR(CREATE_CHILD_SA), SK {SA, Nr, KEr, | <-- HDR(CREATE_CHILD_SA), SK {SA, Nr, KEr, | |||
| N(ADDITIONAL_KEY_EXCHANGE)(link1)} | N(ADDITIONAL_KEY_EXCHANGE)(link1)} | |||
| HDR(IKE_FOLLOWUP_KE), SK {KEi(1), | HDR(IKE_FOLLOWUP_KE), SK {KEi(1), | |||
| N(ADDITIONAL_KEY_EXCHANGE)(link1)} --> | N(ADDITIONAL_KEY_EXCHANGE)(link1)} --> | |||
| <-- HDR(IKE_FOLLOWUP_KE), SK {KEr(1), | <-- HDR(IKE_FOLLOWUP_KE), SK {KEr(1), | |||
| N(ADDITIONAL_KEY_EXCHANGE)(link2)} | N(ADDITIONAL_KEY_EXCHANGE)(link2)} | |||
| HDR(IKE_FOLLOWUP_KE), SK {KEi(2), | HDR(IKE_FOLLOWUP_KE), SK {KEi(2), | |||
| N(ADDITIONAL_KEY_EXCHANGE)(link2)} --> | N(ADDITIONAL_KEY_EXCHANGE)(link2)} --> | |||
| <-- HDR(IKE_FOLLOWUP_KE), SK {KEr(2), | <-- HDR(IKE_FOLLOWUP_KE), SK {KEr(2), | |||
| 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)} | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t> The former "Diffie-Hellman Group Num" (now called "Key Excha nge Method") field in the KEi(n) and KEr(n) payloads MUST match the | <t> The former "Diffie-Hellman Group Num" (now called "Key Exchange Me thod") field in the KEi(n) and KEr(n) payloads <bcp14>MUST</bcp14> match the | |||
| n-th negotiated additional key exchange. | n-th negotiated additional key exchange. | |||
| </t> | </t> | |||
| <t>Due to some unexpected events (e.g., a | ||||
| <t> It is possible that due to some unexpected events (e.g. rebo | reboot), it is possible that the initiator may lose its state, forget | |||
| ot) | that it is in | |||
| the initiator may lose its state and forget that it is in the pr | the process of performing additional key exchanges, and never | |||
| ocess of performing | start the remaining IKE_FOLLOWUP_KE exchanges. The responder | |||
| additional key exchanges and thus never start the remaining IKE_ | <bcp14>MUST</bcp14> handle this situation gracefully and delete the | |||
| FOLLOWUP_KE exchanges. | associated state if it does not receive the next expected | |||
| The responder MUST handle this situation gracefully and delete | IKE_FOLLOWUP_KE request after some reasonable period of time. Due to | |||
| the associated state if it does not receive the next expected | various factors such as computational resource and key | |||
| IKE_FOLLOWUP_KE request after some reasonable period of time. | exchange algorithm used, note that it is not possible to give normati | |||
| Note that due to various factors such as computational resource | ve | |||
| and | guidance on how long this timeout period should be. In general, 5-20 | |||
| key exchange algorithm used, it is not possible to give a normat | seconds of waiting time should be appropriate in most cases. | |||
| ive | </t> | |||
| guidance on how long this timeout period should be. In general, | ||||
| 5-20 | ||||
| seconds of waiting time should be appropriate in most cases. | ||||
| </t> | ||||
| <t> It is also possible that the initiator may take too long to | ||||
| prepare and send the next IKE_FOLLOWUP_KE request or due to the n | ||||
| etwork | ||||
| conditions, the request is retransmitted. In this case, the messa | ||||
| ge may reach the responder | ||||
| when it has already deleted the associated state | ||||
| following the advice above. If the responder receives an IKE_FOL | ||||
| LOWUP_KE message for which it does not have a key exchange state, | ||||
| it MUST send back a new error type notification | ||||
| STATE_NOT_FOUND. This is a non-fatal error notification, its No | ||||
| tify Message Type is 47, | ||||
| Protocol ID and SPI Size are both set to 0 and the data is empty | ||||
| . If the initiator receives | ||||
| this notification in response to IKE_FOLLOWUP_KE exchange perfor | ||||
| ming additional | ||||
| key exchange, it MUST cancel this exchange and MUST treat the wh | ||||
| ole series | ||||
| of exchanges started from the CREATE_CHILD_SA exchange as failed | ||||
| . | ||||
| In most cases, the receipt of this notification is caused by pre | ||||
| mature deletion | ||||
| of the corresponding state on the responder (the time period bet | ||||
| ween | ||||
| IKE_FOLLOWUP_KE exchanges appeared too long from the responder's | ||||
| point of view, e.g. due | ||||
| to a temporary network failure). After receiving this notificat | ||||
| ion the initiator MAY | ||||
| start a new CREATE_CHILD_SA exchange which may eventually be fol | ||||
| lowed by the IKE_FOLLOWUP_KE exchanges, | ||||
| to retry the failed attempt. If the initiator continues to rece | ||||
| ive | ||||
| STATE_NOT_FOUND notifications after several retries, it MUST tre | ||||
| at this situation | ||||
| as a fatal error and delete IKE SA by sending a DELETE payload. | ||||
| </t> | ||||
| <t> When rekeying the IKE SA or the Child SA, it is possible tha | ||||
| t the peers start doing this | ||||
| at the same time, which is called simultaneous rekeying. Sectio | ||||
| ns 2.8.1 and 2.8.2 of | ||||
| <xref target="RFC7296" /> describe how IKEv2 handles this situat | ||||
| ion. In a nutshell | ||||
| IKEv2 follows the rule that if in case of simultaneous rekeying, | ||||
| two identical new | ||||
| IKE SAs (or two pairs of Child SAs) are created, then one of the | ||||
| m should be deleted. | ||||
| Which one is to be deleted is determined by comparing the values | ||||
| of four nonces | ||||
| that are used in the colliding CREATE_CHILD_SA exchanges. The IK | ||||
| E SA (or pair of Child SAs) | ||||
| that is created by the exchange in which the smallest nonce is u | ||||
| sed should be deleted by | ||||
| the initiator of this exchange. | ||||
| </t> | ||||
| <t> With multiple key exchanges, the SAs are not yet created whe | ||||
| n the CREATE_CHILD_SA is completed, | ||||
| they would be created only after the series of IKE_FOLLOWUP_KE e | ||||
| xchanges is finished. | ||||
| For this reason, if additional key exchanges are negotiated in t | ||||
| he CREATE_CHILD_SA | ||||
| exchange in which the smallest nonce is used, then because there | ||||
| is nothing to delete | ||||
| yet, the initiator of this exchange just stops the rekeying proc | ||||
| ess and it MUST NOT | ||||
| initiate the IKE_FOLLOWUP_KE exchange. | ||||
| </t> | ||||
| <t> In most cases, rekey collisions are resolved in the CREATE_C | ||||
| HILD_SA exchange. | ||||
| However, a situation may occur when due to packet loss, one of t | ||||
| he peers receives the CREATE_CHILD_SA message | ||||
| requesting rekey of SA that is already being rekeyed by this pee | ||||
| r (i.e. the CREATE_CHILD_SA | ||||
| exchange initiated by this peer has been already completed and t | ||||
| he series of IKE_FOLLOWUP_KE exchanges is in progress). | ||||
| In this case, a TEMPORARY_FAILURE notification MUST be sent in r | ||||
| esponse to such a request. | ||||
| </t> | ||||
| <t> If multiple key exchanges are negotiated in the CREATE_CHILD | <t>It may also take too long for the initiator to prepare | |||
| _SA exchange, then the resulting keys are | and to send the next IKE_FOLLOWUP_KE request, or, due to the | |||
| network conditions, the request could be lost and retransmitted. | ||||
| In | ||||
| this case, the message may reach the responder when it has already | ||||
| deleted the associated state, following the advice above. If the | ||||
| responder receives an IKE_FOLLOWUP_KE message for which it does not | ||||
| have a key exchange state, it <bcp14>MUST</bcp14> send back a new | ||||
| error type notification called "STATE_NOT_FOUND". This is an error no | ||||
| tification that is not fatal to the IKE SA. | ||||
| Its Notify Message Type value is 47, its Protocol ID and SPI Size are | ||||
| both set to 0, and the data is empty. If the | ||||
| initiator receives this notification in response to an IKE_FOLLOWUP_KE | ||||
| exchange performing an additional key exchange, it <bcp14>MUST</bcp14> | ||||
| cancel this exchange and <bcp14>MUST</bcp14> treat the whole series | ||||
| of exchanges started from the CREATE_CHILD_SA exchange as having faile | ||||
| d. | ||||
| In most cases, the receipt of this notification is caused by the | ||||
| premature deletion of the corresponding state on the responder (the | ||||
| time period between IKE_FOLLOWUP_KE exchanges appeared to be too | ||||
| long from the responder's point of view, e.g., due to a temporary | ||||
| network failure). After receiving this notification, the initiator | ||||
| <bcp14>MAY</bcp14> start a new CREATE_CHILD_SA exchange, which may | ||||
| eventually be followed by the IKE_FOLLOWUP_KE exchanges, to retry | ||||
| the failed attempt. If the initiator continues to receive | ||||
| STATE_NOT_FOUND notifications after several retries, it | ||||
| <bcp14>MUST</bcp14> treat this situation as a fatal error and delete | ||||
| the IKE SA by sending a DELETE payload. | ||||
| </t> | ||||
| <t> It is possible that | ||||
| the peers start rekeying the IKE SA or the Child SA at the same time, | ||||
| which is called | ||||
| "simultaneous rekeying". Sections <xref target="RFC7296" | ||||
| section="2.8.1" sectionFormat="bare"/> and <xref target="RFC7296" | ||||
| section="2.8.2" sectionFormat="bare"/> of <xref target="RFC7296"/> | ||||
| describe how IKEv2 handles this situation. In a nutshell, IKEv2 | ||||
| follows the rule that, in the case of simultaneous rekeying, if two | ||||
| identical new IKE SAs (or two pairs of Child SAs) are created, then | ||||
| one of them should be deleted. Which one to delete is | ||||
| determined by comparing the values of four nonces that are used in | ||||
| the colliding CREATE_CHILD_SA exchanges. The IKE SA (or pair of | ||||
| Child SAs) created by the exchange in which the smallest | ||||
| nonce is used should be deleted by the initiator of this exchange. | ||||
| </t> | ||||
| <t> With multiple key exchanges, the SAs are not yet created when | ||||
| the CREATE_CHILD_SA is completed. Instead, they would be created | ||||
| only after the series of IKE_FOLLOWUP_KE exchanges is finished. For | ||||
| this reason, if additional key exchanges are negotiated in the | ||||
| CREATE_CHILD_SA exchange in which the smallest nonce is used, then, | ||||
| because there is nothing to delete yet, the initiator of this | ||||
| exchange just stops the rekeying process, and it <bcp14>MUST | ||||
| NOT</bcp14> initiate the IKE_FOLLOWUP_KE exchange. | ||||
| </t> | ||||
| <t> In most cases, rekey collisions are resolved in the | ||||
| CREATE_CHILD_SA exchange. However, a situation may occur when, due | ||||
| to packet loss, one of the peers receives the CREATE_CHILD_SA | ||||
| message requesting 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 already been completed, and the series of IKE_FOLLOWUP_KE | ||||
| exchanges is in progress). In this case, a TEMPORARY_FAILURE | ||||
| notification <bcp14>MUST</bcp14> be sent in response to such a | ||||
| request. | ||||
| </t> | ||||
| <t> If multiple key exchanges are negotiated in the CREATE_CHILD_SA ex | ||||
| change, then the resulting keys are | ||||
| computed as follows.</t> | computed as follows.</t> | |||
| <t>In the case of an IKE SA rekey: | ||||
| </t> | ||||
| <t>In case of IKE SA rekey: | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| </t> | ||||
| <figure><artwork align="center" ><![CDATA[ | ||||
| SKEYSEED = prf(SK_d, SK(0) | Ni | Nr | SK(1) | ... SK(n)) | SKEYSEED = prf(SK_d, SK(0) | Ni | Nr | SK(1) | ... SK(n)) | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t> In case of Child SA creation or rekey: | <t> In the case of a Child SA creation or rekey: | |||
| </t> | </t> | |||
| <figure><artwork align="center" ><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| KEYMAT = prf+ (SK_d, SK(0) | Ni | Nr | SK(1) | ... SK(n)) | KEYMAT = prf+ (SK_d, SK(0) | Ni | Nr | SK(1) | ... SK(n)) | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t> In both cases, SK_d is from the existing IKE SA; SK(0), Ni, | ||||
| Nr are the shared key and nonces | ||||
| from the CREATE_CHILD_SA respectively; SK(1)...SK(n) are the sha | ||||
| red keys from additional key exchanges. | ||||
| </t> | ||||
| </section> | ||||
| <section title="Interaction with IKEv2 Extensions"> | ||||
| <t> It is believed that this specification requires no modification t | ||||
| o the IKEv2 extensions defined so far. | ||||
| In particular, IKE SA resumption mechanism defined in <xref target="R | ||||
| FC5723" /> can be used to resume | ||||
| IKE SAs created using this specification. | ||||
| </t> | ||||
| <section title="Interaction with Childless IKE SA"> | ||||
| <t>It is possible to establish IKE SAs with post-quantum algorithms | ||||
| only using additional key exchanges, | ||||
| but without using IKE_INTERMEDIATE exchanges. In this case, the IKE | ||||
| SA created from IKE_SA_INIT exchange | ||||
| can be immediately rekeyed with CREATE_CHILD_SA using additional key | ||||
| exchanges where IKE_FOLLOWUP_KE | ||||
| messages are used to carry the key exchange payload. If classical k | ||||
| ey exchange method is used in | ||||
| the IKE_SA_INIT message, the very first Child SA created in IKE_AUTH | ||||
| will offer no resistance against the | ||||
| quantum threats. Consequently, if the peers' local policy requires | ||||
| that all Child SAs to be post-quantum | ||||
| secure, then the peers can avoid creating the very first Child SA by | ||||
| adopting <xref target="RFC6023"/>. | ||||
| In this case, the initiator sends two types of | ||||
| proposal in the IKE_SA_INIT request, one with and another one withou | ||||
| t Additional | ||||
| Key Exchange transform(s). The responder chooses the latter proposa | ||||
| l type and includes | ||||
| CHILDLESS_IKEV2_SUPPORTED notification in the IKE_SA_INIT response. | ||||
| Assuming that | ||||
| the initiator supports childless IKE SA extension, then both peers p | ||||
| erforms | ||||
| the modified IKE_AUTH exchange described in <xref target="RFC6023"/> | ||||
| and no | ||||
| Child SA is created in this exchange. The peers should then immedia | ||||
| tely rekey | ||||
| the IKE SA and subsequently create the Child SAs, all with additiona | ||||
| l key | ||||
| exchanges using CREATE_CHILD_SA exchange.</t> | ||||
| <t>It is also possible for the initiator to send proposals without A | ||||
| dditional Key | ||||
| Exchange transform(s) in the IKE_SA_INIT message and in this instanc | ||||
| e, the responder will have | ||||
| no information whether or not the initiator supports the extension i | ||||
| n this | ||||
| specification. This may not be efficient as the responder will have | ||||
| to wait for | ||||
| the subsequent CREATE_CHILD_SA request to determine whether or not t | ||||
| he initiator's | ||||
| request is appropriate for its local policy.</t> | ||||
| <t>The support for childless IKE SA is not negotiated, but it is the | <t> In both cases, SK_d is from the existing IKE SA; SK(0), Ni, and | |||
| responder that | Nr are the shared key and nonces from the CREATE_CHILD_SA, | |||
| indicates the support for this mode. As such, the responder cannot | respectively; SK(1)...SK(n) are the shared keys from additional | |||
| enforce the | key exchanges. | |||
| initiator to use this mode and therefore, it is entirely possible th | </t> | |||
| at the | </section> | |||
| initiator does not support this extension and sends IKE_AUTH request | <section numbered="true" toc="default"> | |||
| as per | <name>Interaction with IKEv2 Extensions</name> | |||
| <xref target="RFC7296"/> instead of <xref target="RFC6023"/>. In th | <t> It is believed that this specification requires no modification | |||
| is case, the | to the IKEv2 extensions defined so far. In particular, the IKE SA | |||
| responder may respond with non-fatal error such as NO_PROPOSAL_CHOSE | resumption mechanism defined in <xref target="RFC5723" | |||
| N notify message type.</t> | format="default"/> can be used to resume IKE SAs created using this | |||
| specification. | ||||
| </t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Interaction with Childless IKE SA</name> | ||||
| <t>Note that if the initial IKE SA is used to transfer sensitive inf | <t>It is possible to establish IKE SAs with post-quantum algorithms | |||
| ormation, then this information | by | |||
| will not be protected using the additional key exchanges, which may | only using IKE_FOLLOWUP_KE exchanges and without the use of | |||
| use post-quantum algorithms. In this arrangement, | IKE_INTERMEDIATE exchanges. In this case, the IKE SA that is | |||
| the peers will have to use post-quantum algorithm in Transform Type | created from the IKE_SA_INIT exchange, can be immediately rekeyed with | |||
| 4 in order to mitigate the risk of quantum attack. </t> | CREATE_CHILD_SA with additional key exchanges, where IKE_FOLLOWUP_KE | |||
| </section> | messages are used for these additional key exchanges. If the classical key exch | |||
| </section> | ange method is used in the | |||
| IKE_SA_INIT message, the very first Child SA created in IKE_AUTH | ||||
| will offer no resistance against the quantum threats. | ||||
| Consequently, if the peers' local policy requires all Child | ||||
| SAs to be post-quantum secure, then the peers can avoid creating | ||||
| the very first Child SA by adopting <xref target="RFC6023" | ||||
| format="default"/>. In this case, the initiator sends two types | ||||
| of proposals in the IKE_SA_INIT request: one with and another one | ||||
| without ADDKE Transform Types. The responder | ||||
| chooses the latter proposal type and includes a | ||||
| CHILDLESS_IKEV2_SUPPORTED notification in the IKE_SA_INIT | ||||
| response. Assuming that the initiator supports childless IKE SA | ||||
| extension, both peers perform the modified IKE_AUTH exchange | ||||
| described in <xref target="RFC6023" format="default"/>, and no | ||||
| Child SA is created in this exchange. The peers should then | ||||
| immediately rekey the IKE SA and subsequently create the Child | ||||
| SAs, all with additional key exchanges using a CREATE_CHILD_SA | ||||
| exchange.</t> | ||||
| <t>It is also possible for the initiator to send proposals without | ||||
| any ADDKE Transform Types in the IKE_SA_INIT message. | ||||
| In this instance, the responder will have no information | ||||
| about whether or not the initiator supports the extension in this | ||||
| specification. This may not be efficient, as the responder will | ||||
| have to wait for the subsequent CREATE_CHILD_SA request to | ||||
| determine whether or not the initiator's request is appropriate | ||||
| for its local policy.</t> | ||||
| <t>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 cannot enforce that the initiator use this mode. | ||||
| Therefore, it is entirely possible that the initiator does not | ||||
| support this extension and sends IKE_AUTH request as per <xref | ||||
| target="RFC7296" format="default"/> instead of <xref | ||||
| target="RFC6023" format="default"/>. In this case, the responder | ||||
| may respond with an error that is not fatal, such as the NO_PROPOSAL | ||||
| _CHOSEN | ||||
| notify message type.</t> | ||||
| <t>Note that if the initial IKE SA is used to transfer sensitive | ||||
| information, then this information will not be protected using the | ||||
| additional key exchanges, which may use post-quantum algorithms. | ||||
| In this arrangement, the peers will have to use post-quantum | ||||
| algorithm in Transform Type 4 in order to mitigate the risk of | ||||
| quantum attack. </t> | ||||
| </section> | ||||
| </section> | </section> | |||
| </section> | ||||
| </section> | </section> | |||
| <section title="IANA Considerations" anchor="IANA"> | <section anchor="IANA" numbered="true" toc="default"> | |||
| <t>This document adds new exchange type into the "IKEv2 Exchange Types" | <name>IANA Considerations</name> | |||
| registry:</t> | <t>This document adds a new exchange type into the "IKEv2 Exchange | |||
| Types" registry:</t> | ||||
| <figure align="center"><artwork align="left"><![CDATA[ | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| 44 IKE_FOLLOWUP_KE | 44 IKE_FOLLOWUP_KE | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t>This document renames Transform Type 4 defined in "Transform Type Val ues" registry | <t>This document renames Transform Type 4 defined in the "Transform Type V alues" registry | |||
| from "Diffie-Hellman Group (D-H)" to "Key Exchange Method (KE)".</t> | from "Diffie-Hellman Group (D-H)" to "Key Exchange Method (KE)".</t> | |||
| <t>This document renames the IKEv2 registry originally titled "Transform T | ||||
| <t>This document renames IKEv2 registry "Transform Type 4 - Diffie-Hellm | ype 4 - Diffie-Hellman Group Transform IDs" to | |||
| an Group Transform IDs" to | ||||
| "Transform Type 4 - Key Exchange Method Transform IDs".</t> | "Transform Type 4 - Key Exchange Method Transform IDs".</t> | |||
| <t>This document adds the following Transform Types to the "Transform Type Values" registry:</t> | ||||
| <t>This document adds the following Transform Types to the "Transform Ty | <table anchor="transform-type-values" align="center"> | |||
| pe Values" registry:</t> | <name>"Transform Type Values" Registry</name> | |||
| <figure align="left"><artwork align="left"><![CDATA[ | <thead> | |||
| Type Description Used In | <tr> | |||
| 6 Additional Key Exchange 1 (optional in IKE, AH, ESP) | <th>Type</th> | |||
| 7 Additional Key Exchange 2 (optional in IKE, AH, ESP) | <th>Description</th> | |||
| 8 Additional Key Exchange 3 (optional in IKE, AH, ESP) | <th>Used In</th> | |||
| 9 Additional Key Exchange 4 (optional in IKE, AH, ESP) | </tr> | |||
| 10 Additional Key Exchange 5 (optional in IKE, AH, ESP) | </thead> | |||
| 11 Additional Key Exchange 6 (optional in IKE, AH, ESP) | <tbody> | |||
| 12 Additional Key Exchange 7 (optional in IKE, AH, ESP) | <tr> | |||
| ]]></artwork></figure> | <td>6</td> | |||
| <td>Additional Key Exchange 1 (ADDKE1)</td> | ||||
| <td>(optional in IKE, AH, ESP)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>7</td> | ||||
| <td>Additional Key Exchange 2 (ADDKE2)</td> | ||||
| <td>(optional in IKE, AH, ESP)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>8</td> | ||||
| <td>Additional Key Exchange 3 (ADDKE3)</td> | ||||
| <td>(optional in IKE, AH, ESP)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>9</td> | ||||
| <td>Additional Key Exchange 4 (ADDKE4)</td> | ||||
| <td>(optional in IKE, AH, ESP)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>10</td> | ||||
| <td>Additional Key Exchange 5 (ADDKE5)</td> | ||||
| <td>(optional in IKE, AH, ESP)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>11</td> | ||||
| <td>Additional Key Exchange 6 (ADDKE6)</td> | ||||
| <td>(optional in IKE, AH, ESP)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>12</td> | ||||
| <td>Additional Key Exchange 7 (ADDKE7)</td> | ||||
| <td>(optional in IKE, AH, ESP)</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t>This document defines a new Notify Message Type in the "Notify Messag e Types - Status Types" registry:</t> | <t>This document defines a new Notify Message Type in the "IKEv2 Notify Me ssage Types - Status Types" registry:</t> | |||
| <figure align="center"><artwork align="left"><![CDATA[ | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| 16441 ADDITIONAL_KEY_EXCHANGE | 16441 ADDITIONAL_KEY_EXCHANGE | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t>and a new Notify Message Type in the "Notify Message Types - Error Ty pes" registry:</t> | <t>This document also defines a new Notify Message Type in the "IKEv2 Noti fy Message Types - Error Types" registry:</t> | |||
| <figure align="center"><artwork align="left"><![CDATA[ | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| 47 STATE_NOT_FOUND | 47 STATE_NOT_FOUND | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <section title="Additional Considerations and Changes"> | ||||
| <t>The IANA is requested to add the following instructions for desig | ||||
| nated experts | ||||
| for Transform Type 4 sub-registry.</t> | ||||
| <t>While adding new KE methods, the following considerations must be | ||||
| applied. | ||||
| A KE method must take exactly one round-trip (one IKE exchange) and | ||||
| at the end | ||||
| of this exchange, both peers must be able to derive the shared secre | ||||
| t. In addition, any public value peers exchanged during a KE method must fit int | ||||
| o a single IKE | ||||
| message. If these restrictions are not met for a KE method, then th | ||||
| ere must be | ||||
| documentation on how this KE method is used in IKEv2.</t> | ||||
| <t>The following changes to IANA are also requested. It is assumed t | <t>IANA has added the following instructions for designated | |||
| hat | experts for the "Transform Type 4 - Key Exchange Method Transform IDs" s | |||
| RFCXXXX refers to this specification.</t> | ubregistry:</t> | |||
| <t><list style="symbols"> | ||||
| <t>Add a reference to RFCXXXX in the "Transform Type 4 - Diffie-He | <ul><li>While adding new Key Exchange (KE) methods, the following consid | |||
| llman Group Transform IDs" | erations must be | |||
| registry.</t> | 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.</li></ul> | ||||
| <t>IANA has also completed the following changes. It is assumed that | ||||
| [RFC9370] refers to this specification.</t> | ||||
| <ul spacing="normal"> | ||||
| <t>Replace the note on "Transform Type 4 - Diffie-Hellman Group Tr | <li><t>Added a reference to [RFC9370] in what was the "Transform Type | |||
| ansform IDs" registry with: | 4 - | |||
| This registry was originally named "Transform Type 4 - Diffie-Hell | Diffie-Hellman Group Transform IDs" registry.</t></li> | |||
| man Group Transform IDs" and | <li><t>Replaced the Note on what was the "Transform Type 4 - Diffie-He | |||
| was renamed to its current name by [RFCXXXX]. It has been referen | llman Group | |||
| ced in its original name in | Transform IDs" registry with the following notes:</t> | |||
| a number of RFCs prior to [RFCXXXX]. To find out requirement leve | <t>This registry was originally named "Transform Type 4 - | |||
| ls for Key Exchange Methods | Diffie-Hellman Group Transform IDs" and was referenced using | |||
| for IKEv2, see [RFC8247].</t> | that name in a number of RFCs published prior to [RFC9370], | |||
| which gave it the current title.</t> | ||||
| <t>Add this note to "Transform Type Values" registry: Transform Ty | <t>This registry is used by the "Key Exchange Method (KE)" transfor | |||
| pe "Transform Type 4 - Key | m type and by all "Additional Key Exchange (ADDKE)" transform types.</t> | |||
| Exchange Method Transform IDs" was originally named "Transform Typ | ||||
| e 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 "Additi | ||||
| onal Key Exchange" entries use | ||||
| the same "Transform Type 4 - Key Exchange Method Transform IDs" as | ||||
| the "Key Exchange Method (KE)".</t> | ||||
| <t>Append RFCXXXX to the Reference column of Transform Type 4 in t | <t>To find out requirement levels | |||
| he Transform Type Values registry.</t> | for Key Exchange Methods for IKEv2, see <xref target="RFC8247" format=" | |||
| default"/>.</t></li> | ||||
| <li><t>Appended [RFC9370] to the Reference column of Transform Type 4 i | ||||
| n | ||||
| the "Transform Type Values" registry.</t></li> | ||||
| <li><t>Added these notes to the "Transform Type Values" registry:</t> | ||||
| <t>"Key Exchange Method (KE)" transform type was originally | ||||
| named "Diffie-Hellman Group (D-H)" and was referenced by that name in a numb | ||||
| er of RFCs | ||||
| published prior to [RFC9370], which gave it the current title.</t><t>All "Ad | ||||
| ditional Key Exchange (ADDKE)" entries use the same | ||||
| "Transform Type 4 - Key Exchange Method Transform IDs" | ||||
| registry as the "Key Exchange Method (KE)" entry.</t></li> | ||||
| <t>Append this note to "Transform Type 4 - Diffie-Hellman Group Tr | </ul> | |||
| ansform IDs" registry: All | ||||
| "Additional Key Exchange" entries use these values as the "Key Ex | ||||
| change Method (KE)".</t> | ||||
| </list></t> | ||||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="security" numbered="true" toc="default"> | ||||
| <section title="Security Considerations" anchor="security"> | <name>Security Considerations</name> | |||
| <t>The extension in this document is intended to mitigate two possible t | <t>The extension in this document is intended to mitigate two possible | |||
| hreats in IKEv2, namely | threats in IKEv2: the compromise of (EC)DH key exchange using | |||
| the compromise of (EC)DH key exchange using Shor's algorithm while remai | Shor's algorithm while remaining backward compatible and the potential | |||
| ning backward compatible; | compromise of existing or future PQC key exchange algorithms. To | |||
| and the potential compromise of existing or future PQC key exchange algo | address the former threat, this extension allows the establishment of a | |||
| rithms. To address the | shared secret by using multiple key exchanges: typically, one classical | |||
| former threat, this extension allows the establishment of a shared secre | (EC)DH and the other one post-quantum algorithm. In order to address | |||
| t by using multiple key | the latter threat, multiple key exchanges using a post-quantum algorithm | |||
| exchanges, typically one classical (EC)DH and the other one post-quantum | can be performed to form the shared key. | |||
| algorithm. In order to | </t> | |||
| address the latter threat, multiple key exchanges using a post-quantum a | <t>Unlike key exchange methods (Transform Type 4), the Encryption | |||
| lgorithm can be composed to | Algorithm (Transform Type 1), the Pseudorandom Function (Transform Type | |||
| form the shared key. | 2), and the Integrity Algorithm (Transform Type 3) are not susceptible | |||
| </t> | to Shor's algorithm. However, they are susceptible to Grover's attack | |||
| <xref target="GROVER" format="default"/>, which allows a quantum | ||||
| <t>Unlike key exchange methods (Transform Type 4), the Encryption Algori | computer to perform a brute force key search, using quadratically fewer | |||
| thm (Transform Type 1), | steps than the classical counterpart. Simply increasing the key length | |||
| the Pseudorandom Function (Transform Type 2) and the Integrity Algorithm | can mitigate this attack. It was previously believed that one needed to | |||
| (Transform Type 3) are | double the key length of these algorithms. However, there are a number | |||
| not susceptible to Shor's algorithm. However, they are susceptible to G | of factors that suggest that it is quite unlikely to achieve the | |||
| rover's attack <xref target="GROVER"/>, | quadratic speedup using Grover's algorithm. According to NIST <xref | |||
| which allows a quantum computer to perform a brute force key search usin | target="NISTPQCFAQ" format="default"/>, current applications can | |||
| g quadratically fewer | continue using an AES algorithm with the minimum key length of 128 bits. | |||
| steps than the classical counterpart. Simply increasing the key length | Nevertheless, if the data needs to remain secure for many years to come, | |||
| can mitigate this attack. | one may want to consider using a longer key size for the algorithms in | |||
| It was previously believed that one needed to double the key length of t | Transform Types 1-3. | |||
| hese algorithms. However, | </t> | |||
| there are a number of factors that suggest that it is quite unlikely to | <t>SKEYSEED is calculated from shared SK(x), using an algorithm defined | |||
| achieve the quadratic speed up | ||||
| using Grover's algorithm. According to NIST <xref target="NISTPQCFAQ"/> | ||||
| , current applications can | ||||
| continue using AES algorithm with the minimum key length of 128 bit. Ne | ||||
| vertheless, if the data | ||||
| needs to remain secure for many years to come, one may want to consider | ||||
| using a longer key size for the | ||||
| algorithms in Transform Types 1-3. | ||||
| </t> | ||||
| <t>SKEYSEED is calculated from shared SK(x) using an algorithm defined | ||||
| in Transform Type 2. While a quantum attacker may learn the value | 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 exchange, | of 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 algorithm | other SK(x) values generated by means of a post-quantum algorithm | |||
| ensure that the final SKEYSEED is not compromised. This assumes that | ensure that the final SKEYSEED is not compromised. This assumes that | |||
| the algorithm defined in the Transform Type 2 is quantum resistant. | the algorithm defined in the Transform Type 2 is quantum resistant. | |||
| </t> | </t> | |||
| <t>The ordering of the additional key exchanges should not matter in | ||||
| <t>The ordering of the additional key exchanges should not matter in gen | general, as only the final shared secret is of interest. Nonetheless, | |||
| eral, | because the strength of the running shared secret increases with every | |||
| as only the final shared secret is of interest. Nonetheless, because th | additional key exchange, an implementer may want to first perform the | |||
| e strength | most secure method (in some metrics) followed by less secure | |||
| of the running shared secret increases with every additional key exchang | methods.</t> | |||
| e, an | <t>The main focus of this document is to prevent a passive attacker from | |||
| implementer may want to first perform the most secure method (in some me | performing a "harvest-and-decrypt" attack: in other words, attackers that reco | |||
| trics) and | rd | |||
| followed by less secure one(s).</t> | messages exchanged today and proceed to decrypt them once they have access | |||
| to cryptographically relevant quantum computers. This attack is prevented due | ||||
| <t> The main focus of this document is to prevent a passive attacker | to the hybrid | |||
| performing a "harvest and decrypt" attack. In other words, an attacker | ||||
| that records messages exchanged today and proceeds to decrypt them once | ||||
| he owns a quantum computer. This attack is prevented due to the hybrid | ||||
| nature of the key exchange. Other attacks involving an active attacker | nature of the key exchange. Other attacks involving an active attacker | |||
| using a quantum-computer are not completely solved by this | using a quantum-computer are not completely solved by this | |||
| document. This is for two reasons.</t> | document. This is for two reasons:</t> | |||
| <ul><li>The first reason is that the authentication step remains | ||||
| <t> The first reason is because 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 signature | |||
| algorithms. Whilst the pre-shared key option, provided the key is | algorithms. While the pre-shared key option, provided the key is | |||
| long enough, is post-quantum secure, the other algorithms are not. Mor eover, | long enough, is post-quantum secure, the other algorithms are not. Mor eover, | |||
| in implementations where scalability is a requirement, the pre-shared | in implementations where scalability is a requirement, the pre-shared | |||
| key method may not be suitable. Post-quantum authenticity may be | key method may not be suitable. Post-quantum authenticity may be | |||
| provided by using a post-quantum digital signature. | provided by using a post-quantum digital signature. | |||
| </t> | </li> | |||
| <li>Secondly, it should be noted that the purpose of post-quantum algorith | ||||
| <t> Secondly, it should be noted that the purpose of post-quantum algori | ms is | |||
| thms is | ||||
| to provide resistance to attacks mounted in the future. The current | to provide resistance to attacks mounted in the future. The current | |||
| threat is that encrypted sessions are subject to eavesdropping and | threat is that encrypted sessions are subject to eavesdropping and are | |||
| archived with decryption by quantum computers taking place at some | archived with decryption by quantum computers at some | |||
| point in the future. Until quantum computers become available there | point in the future. Until quantum computers become available, there | |||
| is no point in attacking the authenticity of a connection because | is no point in attacking the authenticity of a connection because | |||
| there are no possibilities for exploitation. These only occur at | there are no possibilities for exploitation. These only occur at | |||
| the time of the connection, for example by mounting an on-path | the time of the connection, for example, by mounting an on-path | |||
| attack. Consequently there is less urgency for | attack. Consequently, there is less urgency for | |||
| post-quantum authenticity compared to post-quantum confidentiality.</t> | post-quantum authenticity compared to post-quantum confidentiality.</li> | |||
| </ul> | ||||
| <t> Performing multiple key exchanges while establishing IKE SA | <t> Performing multiple key exchanges while establishing an IKE SA | |||
| increases the responder's susceptibility to DoS attacks, because | increases the responder's susceptibility to DoS attacks because of an | |||
| of an increased amount of resources needed before the initiator | increased amount of resources needed before the initiator is | |||
| is authenticated. This is especially true for post-quantum | authenticated. This is especially true for post-quantum key exchange | |||
| key exchange methods, where many of them are more memory and/or CPU inte | methods, where many of them are more memory and/or CPU intensive than | |||
| nsive than the classical counterparts. | the classical counterparts. | |||
| </t> | </t> | |||
| <t> Responders may consider recommendations from <xref target="RFC8019" | ||||
| <t> Responders may consider recommendations from <xref target="RFC8019" | format="default"/> to deal with increased DoS-attack susceptibility. It | |||
| /> | is also possible that the responder only agrees to create an initial IKE S | |||
| to deal with increased DoS attack susceptibility. It is also possible t | A | |||
| hat | without performing additional key exchanges if the initiator includes | |||
| the responder only agrees to create initial IKE SA without performing | such an option in its proposals. Then, peers immediately rekey the | |||
| additional key exchanges, provided the initiator includes such an option | initial IKE SA with the CREATE_CHILD_SA exchange, and additional key | |||
| in its proposals. Then peers immediately rekey | exchanges are performed via the IKE_FOLLOWUP_KE exchanges. In this | |||
| the initial IKE SA with the CREATE_CHILD_SA exchange and additional key | case, at the point when resource-intensive operations are required, the | |||
| exchanges performed via the IKE_FOLLOWUP_KE exchanges. | peers have already authenticated each other. However, in the context of | |||
| In this case, at the point when resource-intensive operations are requir | hybrid post-quantum key exchanges, this scenario would leave the initial | |||
| ed, | IKE SA (and initial Child SA, if it is created) unprotected against | |||
| the peers have already authenticated each other. | quantum computers. Nevertheless, the rekeyed IKE SA (and Child SAs that | |||
| However, in the context of hybrid post-quantum key exchange this scenari | will be created over it) will have a full protection. This is similar | |||
| o would leave | to the scenario described in <xref target="RFC8784" format="default"/>. | |||
| the initial IKE SA (and initial Child SA if it is created) unprotected | Depending on the arrangement and peers' policy, this scenario may or may | |||
| against quantum computers. Nevertheless the rekeyed IKE SA (and Child | not be appropriate. For example, in the G-IKEv2 protocol <xref | |||
| SAs that will be created over it) will have a full protection. | target="I-D.ietf-ipsecme-g-ikev2" format="default"/>, the cryptographic | |||
| This is similar to the scenario described in <xref target="RFC8784" />. | materials are sent from the group controller to the group members when | |||
| Depending on the arrangement and peers' policy, this scenario may or may | the initial IKE SA is created. | |||
| not be appropriate. | </t> | |||
| For example, in the G-IKEv2 protocol <xref target="I-D.ietf-ipsecme-g-ike | ||||
| v2"/> | ||||
| the cryptographic materials are sent from the group controller to the gro | ||||
| up members | ||||
| when the initial IKE SA is created. | ||||
| </t> | ||||
| </section> | </section> | |||
| </middle> | ||||
| <back> | ||||
| <section title="Acknowledgements" anchor="acknowledgements"> | <displayreference target="I-D.ietf-ipsecme-g-ikev2" to="G-IKEV2"/> | |||
| <t> The authors would like to thank Frederic Detienne and Olivier | <displayreference target="I-D.tjhai-ikev2-beyond-64k-limit" to="BEYOND-64K"/> | |||
| 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 v | ||||
| aluable comments. | ||||
| Thanks to Paul Wouters for reviewing the document.</t> | ||||
| </section> | ||||
| </middle> | <references> | |||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | ||||
| 119.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
| 296.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
| 174.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9 | ||||
| 242.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6 | ||||
| 023.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
| 383.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
| 019.xml"/> | ||||
| <back> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
| <references title='Normative References'> | 247.xml"/> | |||
| &RFC2119; | ||||
| &RFC7296; | <reference anchor="GROVER"> | |||
| &RFC8174; | <front> | |||
| &RFC9242; | <title>A fast quantum mechanical algorithm for database search</titl | |||
| </references> | e> | |||
| <references title='Informative References'> | ||||
| &RFC6023; | ||||
| &RFC7383; | ||||
| &RFC8019; | ||||
| <reference anchor="GROVER"><front> | ||||
| <title>A Fast Quantum Mechanical Algorithm for Database Search</titl | ||||
| e> | ||||
| <author fullname="L. Grover" initials="L." surname="Grover"> | <author fullname="L. Grover" initials="L." surname="Grover"> | |||
| </author> | </author> | |||
| <date year="1996"/> | <date month="May" year="1996"/> | |||
| </front> | </front> | |||
| <seriesInfo name="Proc." value="of the Twenty-Eighth Annual ACM Symp | <seriesInfo name="Proc." value="of the Twenty-Eighth Annual ACM Sympos | |||
| osium on the Theory of Computing (STOC 1996)"/> | ium on the Theory of Computing (STOC), pp. 212-219"/> | |||
| <seriesInfo name="DOI" value="10.48550/arXiv.quant-ph/9605043"/> | ||||
| </reference> | </reference> | |||
| &RFC8784; | ||||
| &RFC5723; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
| &I-D.ietf-ipsecme-g-ikev2; | 784.xml"/> | |||
| &I-D.tjhai-ikev2-beyond-64k-limit; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5 | |||
| <reference anchor="IKEV2TYPE4ID" target="https://www.iana.org/assignment | 723.xml"/> | |||
| s/ikev2-parameters/ikev2-parameters.xhtml#ikev2-parameters-8"> | ||||
| <front> | <reference anchor="I-D.ietf-ipsecme-g-ikev2"> | |||
| <title>Internet Key Exchange Version 2 (IKEv2) Parameters: Trans | <front> | |||
| form Type 4 - Diffie-Hellman Group Transform IDs</title> | <title>Group Key Management using IKEv2</title> | |||
| <author fullname="IANA"></author> | <author initials="V" surname="Smyslov" fullname="Valery Smyslov"> | |||
| </front> | <organization>ELVIS-PLUS</organization> | |||
| </author> | ||||
| <author initials="B" surname="Weis" fullname="Brian Weis"> | ||||
| <organization>Independent</organization> | ||||
| </author> | ||||
| <date month="April" day="19" year="2023"/> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-ipsecme-g-ikev2-09 | ||||
| "/> | ||||
| </reference> | ||||
| <reference anchor="I-D.tjhai-ikev2-beyond-64k-limit"> | ||||
| <front> | ||||
| <title>Beyond 64KB Limit of IKEv2 Payloads</title> | ||||
| <author initials="CJ." surname="Tjhai" fullname="CJ. Tjhai"> | ||||
| <organization>Post-Quantum</organization> | ||||
| </author> | ||||
| <author initials="T." surname="Heider" fullname="Tobias Heider"> | ||||
| <organization>genua GmbH</organization> | ||||
| </author> | ||||
| <author initials="V." surname="Smyslov" fullname="Valery Smyslov"> | ||||
| <organization>ELVIS-PLUS</organization> | ||||
| </author> | ||||
| <date month="July" day="28" year="2022"/> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-tjhai-ikev2-beyond-64k- | ||||
| limit-03"/> | ||||
| </reference> | ||||
| <reference anchor="IKEV2TYPE4ID" target="https://www.iana.org/assignment | ||||
| s/ikev2-parameters/"> | ||||
| <front> | ||||
| <title>Internet Key Exchange Version 2 (IKEv2) Parameters: | ||||
| Transform Type 4 - Diffie-Hellman Group Transform IDs</title> | ||||
| <author><organization>IANA</organization></author> | ||||
| </front> | ||||
| </reference> | </reference> | |||
| <reference anchor="NISTPQCFAQ" target="https://csrc.nist.gov/Projects/po st-quantum-cryptography/faqs"> | <reference anchor="NISTPQCFAQ" target="https://csrc.nist.gov/Projects/po st-quantum-cryptography/faqs"> | |||
| <front> | <front> | |||
| <title>Post-Quantum Cryptography Standardization: FAQs</title> | <title>Post-Quantum Cryptography Standard</title> | |||
| <author fullname="NIST"></author> | <author><organization>NIST</organization></author> | |||
| </front> | <date month="January" year="2023"/> | |||
| </front> | ||||
| </reference> | </reference> | |||
| </references> | ||||
| <section title="Sample Multiple Key Exchanges" anchor="sample-exchanges"> | </references> | |||
| <t>This appendix shows some examples of multiple key exchanges. These examp | </references> | |||
| les are non-normative | ||||
| and they describe some message flow scenarios that may occur in establishing | ||||
| an IKE or CHILD SA. Note | ||||
| that some payloads that are not relevant to multiple key exchanges may be om | ||||
| itted for brevity. | ||||
| </t> | ||||
| <section title="IKE_INTERMEDIATE Exchanges Carrying Additional Key Exchange | <section anchor="sample-exchanges" numbered="true" toc="default"> | |||
| Payloads" anchor="sample-ake-ike-intermediate"> | <name>Sample Multiple Key Exchanges</name> | |||
| <t>The exchanges below show that the initiator proposes the use of additio | <t>This appendix shows some examples of multiple key exchanges. These | |||
| nal key exchanges | examples are not normative, and they describe some message flow scenarios | |||
| to establish an IKE SA. The initiator proposes three sets of additional | that may occur in establishing an IKE or Child SA. Note that some | |||
| key exchanges and all of which are optional. | payloads that are not relevant to multiple key exchanges may be omitted | |||
| So the responder can choose NONE for some or all of the additional excha | for brevity. | |||
| nges | </t> | |||
| if the proposed key exchange methods are not supported or for whatever r | <section anchor="sample-ake-ike-intermediate" numbered="true" toc="default | |||
| easons the responder decides not to perform | "> | |||
| <name>IKE_INTERMEDIATE Exchanges Carrying Additional Key Exchange Payloa | ||||
| ds</name> | ||||
| <t>The exchanges below show that the initiator proposes the use of | ||||
| additional key exchanges to establish an IKE SA. The initiator | ||||
| proposes three sets of additional key exchanges, all of which are | ||||
| optional. Therefore, the responder can choose NONE for some or all of | ||||
| the additional exchanges if the proposed key exchange methods are not | ||||
| supported or for whatever reasons the responder decides not to perform | ||||
| the additional key exchange.</t> | the additional key exchange.</t> | |||
| <figure><artwork align="center"><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| 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 } | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t>In this particular example, the responder chooses to perform two addi | <t>In this particular example, the responder chooses to perform two | |||
| tional key exchanges. It selects | additional key exchanges. It selects PQ_KEM_2, NONE, and PQ_KEM_5 for | |||
| PQ_KEM_2, NONE and PQ_KEM_5 for the first, second and third addition | the first, second, and third additional key exchanges, respectively. As | |||
| al key exchanges respectively. | per <xref target="RFC7296" format="default"/>, a set of | |||
| As per <xref target="RFC7296"/> specification, a set of keying mater | keying materials is derived, in particular SK_d, SK_a[i/r], and | |||
| ials are derived, in particular | SK_e[i/r]. Both peers then perform an IKE_INTERMEDIATE exchange, | |||
| SK_d, SK_a[i/r], SK_e[i/r]. Both peers then perform an IKE_INTERMED | carrying PQ_KEM_2 payload, which is protected with SK_e[i/r] and | |||
| IATE exchange carrying PQ_KEM_2 payload | SK_a[i/r] keys. After the completion of this IKE_INTERMEDIATE | |||
| which is protected with SK_e[i/r] and SK_a[i/r] keys. After the com | exchange, the SKEYSEED is updated using SK(1), which is the PQ_KEM_2 | |||
| pletion of this IKE_INTERMEDIATE exchange, | shared secret, as follows.</t> | |||
| the SKEYSEED is updated using SK(1), which is the PQ_KEM_2 shared se | ||||
| cret, as follows.</t> | ||||
| <figure><artwork align="left" ><![CDATA[ | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| SKEYSEED(1) = prf(SK_d, SK(1) | Ni | Nr) | SKEYSEED(1) = prf(SK_d, SK(1) | Ni | Nr) | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t>The updated SKEYSEED value is then used to derive the following k eying materials</t> | <t>The updated SKEYSEED value is then used to derive the following keyin g materials.</t> | |||
| <figure><artwork align="left" ><![CDATA[ | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| {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) | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t>As per <xref target="RFC9242"/> specification, both peers compute | ||||
| IntAuth_i1 and IntAuth_r1 using the SK_pi(1) | ||||
| and SK_pr(1) keys respectively. These values are required in the IK | ||||
| E_AUTH phase of the exchange.</t> | ||||
| <t>In the next IKE_INTERMEDIATE exchange, the peers use SK_e[i/r](1) | <t>As per <xref target="RFC9242" format="default"/>, | |||
| and SK_a[i/r](1) keys to protect the PQ_KEM_5 payload. | both peers compute IntAuth_i1 and IntAuth_r1 using the SK_pi(1) and | |||
| After completing this exchange, keying materials are updated as belo | SK_pr(1) keys, respectively. These values are required in the IKE_AUTH | |||
| w</t> | phase of the exchange.</t> | |||
| <t>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 this exchange, keying materials are updated as follows:</t> | ||||
| <figure><artwork align="left" ><![CDATA[ | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| 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) | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t>where SK(2) is the shared secret from the third additional key ex | ||||
| change, i.e. PQ_KEM_5. Both peers then compute | ||||
| the values of IntAuth_[i/r]2 using the SK_p[i/r](2) keys. | ||||
| </t> | ||||
| <t>After the completion of the second IKE_INTERMEDIATE exchange, bot | <t>In this update, SK(2) is the shared secret from the third | |||
| h peers continue to the IKE_AUTH exchange phase. | additional key exchange, i.e., PQ_KEM_5. Then, both peers compute the | |||
| As defined in <xref target="RFC9242"/>, the values IntAuth_[i/r]2 ar | values of IntAuth_[i/r]2 using the SK_p[i/r](2) keys. | |||
| e used to compute IntAuth which in turn is used to calculate | </t> | |||
| the payload to be signed or MACed, i.e. InitiatorSignedOctets and Re | ||||
| sponderSignedOctets.</t> | ||||
| </section> | ||||
| <section title="No Additional Key Exchange Used" anchor="sample-exchanges-no | <t>After the completion of the second IKE_INTERMEDIATE exchange, both | |||
| ne-selected"> | peers continue to the IKE_AUTH exchange phase. As defined in <xref | |||
| <t>The initiator proposes two sets of optional additional key exchanges, b | target="RFC9242" format="default"/>, the values IntAuth_[i/r]2 are | |||
| ut the responder does not | used to compute IntAuth, which, in turn, is used to calculate Initiator | |||
| support any of them. The responder chooses NONE for each set and conseque | SignedOctets and | |||
| ntly, IKE_INTERMEDIATE | ResponderSignedOctets blobs (see <xref target="RFC9242" sectionFormat="of" secti | |||
| exchange does not takes place and the exchange proceeds to IKE_AUTH phase. | on="3.3.2" />).</t> | |||
| The resulting keying | </section> | |||
| materials are the same as those derived with <xref target="RFC7296"/>.</t> | <section anchor="sample-exchanges-none-selected" numbered="true" toc="defa | |||
| ult"> | ||||
| <name>No Additional Key Exchange Used</name> | ||||
| <t>The initiator proposes two sets of optional additional key | ||||
| exchanges, but the responder does not support any of them. The | ||||
| responder chooses NONE for each set. Consequently, the | ||||
| IKE_INTERMEDIATE exchange does not take place, and the exchange | ||||
| proceeds to the IKE_AUTH phase. The resulting keying materials are the | ||||
| same as those derived with <xref target="RFC7296" | ||||
| format="default"/>.</t> | ||||
| <figure><artwork align="center"><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| 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 } | |||
| ]]></artwork></figure> | ]]> | |||
| </section> | </artwork> | |||
| <section title="Additional Key Exchange in the CREATE_CHILD_SA Exchange only | </section> | |||
| " anchor="sample-exchanges-ake-child-sas"> | <section anchor="sample-exchanges-ake-child-sas" numbered="true" toc="defa | |||
| <t>The exchanges below show that the initiator does not propose the use of | ult"> | |||
| additional key exchanges | <name>Additional Key Exchange in the CREATE_CHILD_SA Exchange Only</name | |||
| to establish an IKE SA, but they are required in order to establish a Chil | > | |||
| d SA. In order | <t>The exchanges below show that the initiator does not propose the | |||
| to establish a fully quantum-resistant IPsec SA, the responder includes a | use of additional key exchanges to establish an IKE SA, but they are | |||
| CHILDLESS_IKEV2_SUPPORTED | required in order to establish a Child SA. In order to establish a | |||
| notification in their IKE_SA_INIT response message. The initiator underst | fully quantum-resistant IPsec SA, the responder includes a | |||
| ands | CHILDLESS_IKEV2_SUPPORTED notification in their IKE_SA_INIT response | |||
| and supports this notification, then exchanges a modified IKE_AUTH message | message. The initiator understands and supports this notification, | |||
| with the | exchanges a modified IKE_AUTH message with the responder, and | |||
| responder and rekeys the IKE SA immediately with additional key exchanges. | rekeys the IKE SA immediately with additional key exchanges. Any | |||
| Any | Child SA will have to be created via a subsequent CREATED_CHILD_SA | |||
| Child SA will have to be created via subsequent CREATED_CHILD_SA exchange. | exchange. | |||
| </t> | </t> | |||
| <figure><artwork align="center"><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| 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) } | |||
| ]]></artwork></figure> | ]]> | |||
| </section> | </artwork> | |||
| <section title="No Matching Proposal for Additional Key Exchanges" anchor="s | </section> | |||
| ample-exchanges-no-proposal-chosen"> | <section anchor="sample-exchanges-no-proposal-chosen" numbered="true" toc= | |||
| <t>The initiator proposes the combination of PQ_KEM_1, PQ_KEM_2, PQ_KEM_3, | "default"> | |||
| and PQ_KEM_4 as | <name>No Matching Proposal for Additional Key Exchanges</name> | |||
| the additional key exchanges. The initiator indicates that either PQ_KEM_ | <t>The initiator proposes the combination of PQ_KEM_1, PQ_KEM_2, | |||
| 1 or PQ_KEM_2 must be | PQ_KEM_3, and PQ_KEM_4 as the additional key exchanges. The initiator | |||
| used to establish an IKE SA, but Additional Key Exchange 2 is optional so | indicates that either PQ_KEM_1 or PQ_KEM_2 must be used to establish | |||
| the responder | an IKE SA, but ADDKE2 Transform Type is optional. Therefore, the | |||
| can either select PQ_KEM_3 or PQ_KEM_4 or omit this key exchange by select | responder can either select PQ_KEM_3 or PQ_KEM_4 or omit this key | |||
| ing NONE. The responder, | exchange by selecting NONE. Although the responder supports the | |||
| although supports the optional PQ_KEM_3 and PQ_KEM_4 methods, does not sup | optional PQ_KEM_3 and PQ_KEM_4 methods, it does not support | |||
| port either PQ_KEM_1 or | either the PQ_KEM_1 or the PQ_KEM_2 mandatory method; therefore, it resp | |||
| PQ_KEM_2 mandatory method and therefore responds with NO_PROPOSAL_CHOSEN n | onds | |||
| otification. </t> | with a NO_PROPOSAL_CHOSEN notification. </t> | |||
| <figure><artwork align="center"><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| 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) | |||
| ]]></artwork></figure> | ]]> | |||
| </section> | </artwork> | |||
| </section> | ||||
| <section title="Design Criteria" anchor="design"> | </section> | |||
| <t> | </section> | |||
| <section anchor="design" numbered="true" toc="default"> | ||||
| <name>Design Criteria</name> | ||||
| <t> | ||||
| The design of the extension is driven by the | The design of the extension is driven by the | |||
| following criteria:</t> | following criteria:</t> | |||
| <ol type="%d)" spacing="normal"> | ||||
| <t><list style="hanging" hangIndent="5"><t hangText="1)"> | <li><t>Need for PQC in IPsec</t> | |||
| Need for PQC in IPsec. Quantum computers, which might become feasible in | <t>Quantum computers, which might become feasible in the near future, | |||
| the near future, pose a threat to | pose a threat to our classical public key cryptography. PQC, a family | |||
| our classical public key cryptography. PQC, a family of public key cryp | of public key cryptography that is believed to be resistant to | |||
| tography that is believed to | these computers, needs to be integrated into the IPsec protocol suite | |||
| be resistant against these computers, needs to be integrated into the IP | to restore confidentiality and authenticity.</t></li> | |||
| sec protocol suite to restore | <li><t>Hybrid</t> | |||
| confidentiality and authenticity.</t> | <t>There is currently no post-quantum key exchange that is trusted at | |||
| the level that (EC)DH is trusted for defending against conventional | ||||
| <t hangText="2)"> | (non-quantum) adversaries. A hybrid post-quantum algorithm to be | |||
| Hybrid. There is currently no post-quantum key exchange that is trusted | introduced, along with the well-established primitives, addresses this | |||
| at | concern, since the overall security is at least as strong as each | |||
| the level that (EC)DH is trusted for against conventional (non-quantum) | individual primitive.</t> | |||
| adversaries. A hybrid post-quantum algorithm to be introduced along | </li> | |||
| with the well-established primitives addresses this concern, since the | <li> | |||
| overall security is at least as strong as each individual primitive. | <t>Focus on post-quantum confidentiality</t> | |||
| </t> | <t>A passive attacker can store | |||
| all monitored encrypted IPsec communication today and decrypt it once | ||||
| <t hangText="3)"> | a quantum computer is available in the future. This attack can have | |||
| Focus on post-quantum confidentiality. A passive attacker | serious consequences that will not be visible for years to come. On | |||
| can store all monitored encrypted IPsec communication today and decrypt i | the other hand, an attacker can only perform active attacks, such as | |||
| t | impersonation of the communicating peers, once a quantum computer is | |||
| once a quantum computer is available in the future. This attack can have | available sometime in the future. Thus, this specification focuses | |||
| serious | on confidentiality due to the urgency of this problem and presents a | |||
| consequences that will not be visible for years to come. On the other ha | defense against the serious attack described above, but it does not | |||
| nd, | address authentication because it is less urgent at this stage.</t> | |||
| an attacker can only perform active attacks such as impersonation of the | </li> | |||
| communicating peers once a quantum computer is available, | <li> | |||
| sometime in the future. Thus, this specification focuses on | <t>Limit the amount of exchanged data</t> | |||
| confidentiality due to the urgency of this problem and | <t>The protocol design should be | |||
| presents a defense against the serious attack described above, but | such that the amount of exchanged data, such as public keys, is | |||
| it does not address authentication since it is less urgent at this stage. | kept as small as possible, even if the initiator and the responder need | |||
| </t> | to agree on a hybrid group or if multiple public keys need to be | |||
| exchanged.</t> | ||||
| <t hangText="4)"> | </li> | |||
| Limit amount of exchanged data. The protocol design should be | <li> | |||
| such that the amount of exchanged data, such as public-keys, is | <t>Not post-quantum specific</t> | |||
| kept as small as possible even if initiator and responder need | <t>Any cryptographic algorithm could be potentially | |||
| to agree on a hybrid group or multiple public-keys need to be | ||||
| exchanged. | ||||
| </t> | ||||
| <t hangText="5)"> | ||||
| Not post-quantum specific. Any cryptographic algorithm could be potentia | ||||
| lly | ||||
| broken in the future by currently unknown or impractical | broken in the future by currently unknown or impractical | |||
| attacks: quantum computers are merely the most concrete example | attacks. Quantum computers are merely the most concrete example | |||
| of this. The design does not categorize algorithms as "post-quantum" | of this. The design does not categorize algorithms as "post-quantum" | |||
| or "non post-quantum" nor does it create assumptions | or "non-post-quantum", nor does it create assumptions | |||
| about the properties of the algorithms, meaning that if | about the properties of the algorithms; meaning that if | |||
| algorithms with different properties become necessary in the future, | algorithms with different properties become necessary in the future, | |||
| this extension can be used unchanged to facilitate migration to | this extension can be used unchanged to facilitate migration to | |||
| those algorithms. | those algorithms.</t> | |||
| </t> | </li> | |||
| <li> | ||||
| <t hangText="6)"> | <t>Limited amount of changes</t> | |||
| Limited amount of changes. A key goal is to limit the number of | <t>A key goal is to limit the number of | |||
| changes required when enabling a post-quantum handshake. This | changes required when enabling a post-quantum handshake. This | |||
| ensures easier and quicker adoption in existing implementations. | ensures easier and quicker adoption in existing implementations.</t> | |||
| </t> | </li> | |||
| <t hangText="7)"> | <li> | |||
| Localized changes. Another key requirement is that changes to | <t>Localized changes</t> | |||
| <t>Another key requirement is that changes to | ||||
| the protocol are limited in scope, in particular, limiting | the protocol are limited in scope, in particular, limiting | |||
| changes in the exchanged messages and in the state machine, so | changes in the exchanged messages and in the state machine, so | |||
| that they can be easily implemented. | that they can be easily implemented.</t> | |||
| </t> | </li> | |||
| <li> | ||||
| <t hangText="8)"> | <t>Deterministic operation</t> | |||
| Deterministic operation. This requirement means that the hybrid | <t>This requirement means that the hybrid post-quantum exchange and, thus | |||
| post-quantum exchange, and thus, the computed keys, will be based | , | |||
| on algorithms that both client and server wish to support. | the computed keys will be based on algorithms that both client and | |||
| </t> | server wish to support.</t> | |||
| </li> | ||||
| <t hangText="9)"> | <li> | |||
| Fragmentation support. Some PQC algorithms could be relatively | <t>Fragmentation support</t> | |||
| bulky and they might require fragmentation. Thus, a design goal | <t>Some PQC algorithms could be relatively | |||
| bulky and might require fragmentation. Thus, a design goal | ||||
| is the adaptation and adoption of an existing fragmentation | is the adaptation and adoption of an existing fragmentation | |||
| method or the design of a new method that allows for the | method or the design of a new method that allows for the | |||
| fragmentation of the key shares. | fragmentation of the key shares.</t> | |||
| </t> | </li> | |||
| <li> | ||||
| <t hangText="10)"> | <t>Backward compatibility and interoperability</t> | |||
| Backwards compatibility and interoperability. This is a | <t>This is a fundamental | |||
| fundamental requirement to ensure that hybrid post-quantum IKEv2 | requirement to ensure that hybrid post-quantum IKEv2 and standard | |||
| and standard IKEv2 implementations as per <xref target="RFC7296"/> speci | IKEv2 implementations as per <xref target="RFC7296" format="default"/> | |||
| fication are interoperable. | are interoperable.</t> | |||
| </t> | </li> | |||
| <li> | ||||
| <t hangText="11)"> | <t>Compliance with USA Federal Information Processing Standards (FIPS)</t | |||
| USA Federal Information Processing Standards (FIPS) compliance. IPsec is | > | |||
| widely used in Federal Information | <t>IPsec is widely used in Federal Information Systems, and FIPS | |||
| Systems and FIPS certification is an important requirement. | certification is an important requirement. However, at the time of | |||
| However, at the time of writing, none of the algorithms that is believed | writing, none of the algorithms that is believed to be post-quantum is ye | |||
| to be post-quantum is FIPS compliant yet. Nonetheless, it is possible t | t | |||
| o combine | FIPS compliant. Nonetheless, it is possible to combine this | |||
| this post-quantum algorithm with a FIPS compliant key establishment meth | post-quantum algorithm with a FIPS-compliant key establishment method | |||
| od so that | so that the overall design remains FIPS compliant <xref | |||
| the overall design remains FIPS compliant <xref target="NISTPQCFAQ"/>. | target="NISTPQCFAQ" format="default"/>.</t> | |||
| </t> | </li> | |||
| <li> | ||||
| <t hangText="12)"> | <t>Ability to use this method with multiple classical (EC)DH key | |||
| Ability to use this method with multiple classical (EC)DH key exchanges. | exchanges</t> | |||
| In some situations peers have no single mutually trusted key exchange | <t>In some situations, peers have no single, mutually trusted, key | |||
| algorithm (e.g., due to local policy restrictions). | exchange algorithm (e.g., due to local policy restrictions). The | |||
| The ability to combine two (or more) key exchange methods | ability to combine two (or more) key exchange methods in such a way | |||
| in such a way that the resulting shared key depends on all of them | that the resulting shared key depends on all of them allows peers to | |||
| allows peers to communicate in this situation. | communicate in this situation.</t> | |||
| </t> | </li> | |||
| </ol> | ||||
| </list> | </section> | |||
| </t> | <section anchor="altdesign" numbered="true" toc="default"> | |||
| <name>Alternative Design</name> | ||||
| </section> | <t> | |||
| <section title="Alternative Design" anchor="altdesign"> | ||||
| <t> | ||||
| 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 are:</ | that have been considered but later discarded. These approaches are as | |||
| t> | follows.</t> | |||
| <ul spacing="normal"> | ||||
| <t><list style="symbols"> | <li> | |||
| <t>Sending the classical and post-quantum key | <t>Sending the classical and post-quantum key | |||
| exchanges as a single transform<vspace blankLines="1"/> | exchanges as a single transform</t> | |||
| A method to combine the various key exchanges into a single large | <t> | |||
| KE payload was considered; this effort is documented in a previous versi | A method to combine the various key exchanges into a single large KE | |||
| on of this | payload was considered. This effort is documented in a previous | |||
| draft (draft-tjhai-ipsecme-hybrid-qske-ikev2-01). This does allow us | version of this document (draft-tjhai-ipsecme-hybrid-qske-ikev2-01). | |||
| to cleanly apply hybrid key exchanges during the Child SA; however it | This method allows us to cleanly apply hybrid key exchanges during the | |||
| does add considerable complexity, and requires an independent | Child SA. However, it does add considerable complexity and requires an | |||
| fragmentation solution. | independent fragmentation solution. | |||
| </t> | </t> | |||
| </li> | ||||
| <t>Sending post-quantum proposals and policies in KE payload | <li> | |||
| only<vspace blankLines="1"/> | <t>Sending post-quantum proposals and policies in the KE payload | |||
| With the objective of not introducing unnecessary notify | only</t> | |||
| payloads, a method to communicate the hybrid post-quantum proposal | <t> | |||
| in the KE payload during the first pass of the protocol exchange | ||||
| was considered. Unfortunately, this design is susceptible to the follow | ||||
| ing | ||||
| downgrade attack. Consider the scenario where there is an on-path attac | ||||
| ker | ||||
| sitting between an initiator and a responder. The initiator proposes, | ||||
| through SAi payload, to use a hybrid post-quantum group and as a fallbac | ||||
| k | ||||
| a Diffie-Hellman group, and through KEi payload, the initiator proposes | ||||
| a list of hybrid post-quantum proposals and policies. The on-path attac | ||||
| ker | ||||
| intercepts this traffic and replies with N(INVALID_KE_PAYLOAD) suggestin | ||||
| g | ||||
| to downgrade to the fallback Diffie-Hellman group instead. The initiato | ||||
| r | ||||
| then resends the same SAi payload and the KEi payload containing the | ||||
| public value of the fallback Diffie-Hellman group. Note that the attack | ||||
| er | ||||
| may forward the second IKE_SA_INIT message only to the responder, and | ||||
| therefore at this point in time, the responder will not have the | ||||
| information that the initiator prefers the hybrid group. Of course, | ||||
| it is possible for the responder to have a policy to reject an | ||||
| IKE_SA_INIT message that (a) offers a hybrid group but not offering | ||||
| the corresponding public value in the KEi payload; and (b) the | ||||
| responder has not specifically acknowledged that it does not | ||||
| supported the requested hybrid group. However, the checking of this | ||||
| policy introduces unnecessary protocol complexity. Therefore, in | ||||
| order to fully prevent any downgrade attacks, using KE payload alone | ||||
| is not sufficient and that the initiator MUST always indicate its | ||||
| preferred post-quantum proposals and policies in a notify payload | ||||
| in the subsequent IKE_SA_INIT messages following a | ||||
| N(INVALID_KE_PAYLOAD) response.</t> | ||||
| <t>New payload types to negotiate hybrid proposal and to carry post- | With the objective of not introducing unnecessary notify payloads, a | |||
| quantum public values<vspace blankLines="1"/> | method to communicate the hybrid post-quantum proposal in the KE | |||
| Semantically, it makes sense to use a new payload type, which | payload during the first pass of the protocol exchange was considered. | |||
| mimics the SA payload, to carry a hybrid proposal. Likewise, another ne | Unfortunately, this design is susceptible to the following downgrade | |||
| w | attack. Consider the scenario where there is an on-path attacker | |||
| payload type that mimics the KE payload, could be used to transport hybr | sitting between an initiator and a responder. Through the SAi payload, t | |||
| id | he | |||
| public value. Although, in theory a new payload type could be made | initiator proposes using a hybrid post-quantum group and, as a | |||
| backwards compatible by not setting its critical flag as per Section 2.5 | fallback, a Diffie-Hellman group; and through the KEi payload, the | |||
| of <xref target="RFC7296" />, it is believed that it may not be that sim | initiator proposes a list of hybrid post-quantum proposals and | |||
| ple | policies. The on-path attacker intercepts this traffic and replies | |||
| in practice. Since | with N(INVALID_KE_PAYLOAD), suggesting a downgrade to the fallback | |||
| the original release of IKEv2 in RFC4306, no new payload type has ever | Diffie-Hellman group instead. The initiator then resends the same SAi | |||
| been proposed and therefore, this creates a potential risk of having a | payload and the KEi payload containing the public value of the | |||
| backward compatibility issue from non-conformant IKEv2 | fallback Diffie-Hellman group. Note that the attacker may forward the | |||
| implementations. Since there appears to be no other compelling advantag | second IKE_SA_INIT message only to the responder. Therefore, at this | |||
| es | point in time, the responder will not have the information that the | |||
| apart from a semantic one, the existing transform type and | initiator prefers the hybrid group. Of course, it is possible for the | |||
| responder to have a policy to reject an IKE_SA_INIT message that (a) | ||||
| offers a hybrid group but does not offer the corresponding public value | ||||
| in the KEi payload and (b) the responder has not specifically | ||||
| acknowledged that it does not support the requested hybrid group. | ||||
| However, the checking of this policy introduces unnecessary protocol | ||||
| complexity. Therefore, in order to fully prevent any downgrade | ||||
| attacks, using a KE payload alone is not sufficient, and the initiator | ||||
| <bcp14>MUST</bcp14> always indicate its preferred post-quantum | ||||
| proposals and policies in a notify payload in the subsequent | ||||
| IKE_SA_INIT messages following an N(INVALID_KE_PAYLOAD) response.</t> | ||||
| </li> | ||||
| <li> | ||||
| <t>New payload types to negotiate hybrid proposals and to carry | ||||
| post-quantum public values</t> | ||||
| <t> | ||||
| Semantically, it makes sense to use a new payload type, which mimics | ||||
| the SA payload, to carry a hybrid proposal. Likewise, another new | ||||
| payload type that mimics the KE payload could be used to transport | ||||
| hybrid public value. Although, in theory, a new payload type could be | ||||
| made backward compatible by not setting its critical flag as per | ||||
| <xref target="RFC7296" sectionFormat="of" section="2.5"/>, it is | ||||
| believed that it may not be that simple in practice. Since the | ||||
| original release of IKEv2 in RFC 4306, no new payload type has ever | ||||
| been proposed; therefore, this creates a potential risk of having a | ||||
| backward-compatibility issue from nonconformant IKEv2 | ||||
| implementations. Since there appears to be no other compelling | ||||
| advantages apart from a semantic one, the existing Transform Type and | ||||
| notify payloads are used instead. | notify payloads are used instead. | |||
| </t> | </t> | |||
| </li> | ||||
| <t>Hybrid public value payload<vspace blankLines="1"/> | <li> | |||
| One way to transport the negotiated hybrid public payload, which contain | <t>Hybrid public value payload</t> | |||
| s | <t> | |||
| one classical Diffie-Hellman public value and one or more post-quantum | One way to transport the negotiated hybrid public payload, which | |||
| public values, is to bundle these into a single KE payload. Alternative | contains one classical Diffie-Hellman public value and one or more | |||
| ly, | post-quantum public values, is to bundle these into a single KE | |||
| these could also be transported in a single new hybrid public value | payload. Alternatively, these could also be transported in a single | |||
| payload, but following the same reasoning as above, this may not be | new hybrid public value payload. However, following the same reasoning | |||
| a good idea from a backward compatibility perspective. Using a single | as above may not be a good idea from a backward-compatibility | |||
| KE payload would require an encoding or formatting to be defined so | perspective. Using a single KE payload would require encoding or | |||
| that both peers are able to compose and extract the individual public | formatting to be defined so that both peers are able to compose and | |||
| values. However, it is believed that it is cleaner to send the hybrid | extract the individual public values. However, it is believed that it | |||
| public values in multiple KE payloads--one for each group or | is cleaner to send the hybrid public values in multiple KE payloads: | |||
| algorithm. Furthermore, at this point in the protocol exchange, both | one for each group or algorithm. Furthermore, at this point in the | |||
| peers should have indicated support of handling multiple KE payloads. | protocol exchange, both peers should have indicated support for | |||
| </t> | handling multiple KE payloads. | |||
| </t> | ||||
| <t>Fragmentation<vspace blankLines="1"/> | </li> | |||
| Handling of large IKE_SA_INIT messages has been one of the most | <li> | |||
| challenging tasks. A number of approaches have been considered | <t>Fragmentation</t> | |||
| <t> | ||||
| The handling of large IKE_SA_INIT messages has been one of the most | ||||
| challenging tasks. A number of approaches have been considered, | ||||
| and the two prominent ones that have been discarded are outlined as | and the two prominent ones that have been discarded are outlined as | |||
| follows. | follows. | |||
| <vspace blankLines="1"/> | </t> | |||
| <t> | ||||
| The first approach is to treat the entire IKE_SA_INIT message as | 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 | a stream of bytes, which is then split into a number of | |||
| fragments, each of which is wrapped onto a payload that will fit | fragments, each of which is wrapped onto a payload that will fit | |||
| into the size of the network MTU. The payload that wraps each | into the size of the network MTU. The payload that wraps each | |||
| fragment has a new payload type and it is envisaged that this new | fragment has a new payload type, and it is envisaged that this new | |||
| payload type will not cause a backward compatibility issue because | payload type will not cause a backward-compatibility issue because, | |||
| at this stage of the protocol, both peers should have indicated | at this stage of the protocol, both peers should have indicated | |||
| support of fragmentation in the first pass of the IKE_SA_INIT | support of fragmentation in the first pass of the IKE_SA_INIT | |||
| exchange. The negotiation of fragmentation is performed using a | exchange. The negotiation of fragmentation is performed using a | |||
| notify payload, which also defines supporting parameters such as | notify payload, which also defines supporting parameters, such as | |||
| the size of fragment in octets and the fragment identifier. The | the size of fragment in octets and the fragment identifier. The | |||
| new payload that wraps each fragment of the messages in this | new payload that wraps each fragment of the messages in this | |||
| exchange is assigned the same fragment identifier. Furthermore, it | exchange is assigned the same fragment identifier. Furthermore, it | |||
| also has other parameters such as a fragment index and total | also has other parameters, such as a fragment index and total | |||
| number of fragments. This approach has been discarded due to | number of fragments. This approach has been discarded due to | |||
| its blanket approach to fragmentation. In cases where only a few | its blanket approach to fragmentation. In cases where only a few | |||
| payloads need to be fragmented, this approach appears to be | payloads need to be fragmented, this approach appears to be | |||
| overly complicated. | overly complicated. | |||
| <vspace blankLines="1"/> | </t> | |||
| Another idea that has been discarded was fragmenting an individual | ||||
| <t> | ||||
| 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. | |||
| </t> | </t> | |||
| <figure> | ||||
| </list> | <name>Example of How to Fragment a KE Payload</name> | |||
| </t> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| <figure><artwork align="center" ><![CDATA[ | ||||
| 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 ~ | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ]]></artwork></figure> | ]]> | |||
| </artwork> | ||||
| <t><list hangIndent="3" style="hanging"><t> | </figure> | |||
| When the flag F is set, this means the current KE payload is a | <t> | |||
| When the flag F is set, the current KE payload is a | ||||
| fragment of a larger KE payload. The Payload Length field denotes | fragment of a larger KE payload. The Payload Length field denotes | |||
| the size of this payload fragment in octets--including the size of | the size of this payload fragment in octets: including the size of | |||
| the generic payload header. The two-octet RESERVED field | the generic payload header. The 2-octet RESERVED field | |||
| following Diffie-Hellman Group Number was to be used as a fragment | following Diffie-Hellman Group Number was to be used as a fragment | |||
| identifier to help assembly and disassembly of fragments. The | identifier to help the assembly and disassembly of fragments. The | |||
| Fragment Index and Total Fragments fields are self-explanatory. | Fragment Index and Total Fragments fields are self-explanatory. | |||
| The Total KE Payload Data Length indicates the size of the | The Total KE Payload Data Length indicates the size of the | |||
| assembled KE payload data in octets. Finally, the actual fragment | assembled KE payload data in octets. Finally, the actual fragment | |||
| is carried in Fragment KE Payload field.</t> | is carried in Fragment KE Payload field.</t> | |||
| </list> | <t> | |||
| </t> | This approach has been discarded because it is believed that the | |||
| working group may not want to use the RESERVED field to change the | ||||
| <t><list hangIndent="3" style="hanging"><t> | format of a packet, and that implementers may not like the added | |||
| This approach has been discarded because it is believed that the working | complexity from checking the fragmentation flag in each received | |||
| group may not want to use the RESERVED field to change the | payload. More importantly, fragmenting the messages in this way | |||
| format of a packet and that implementers may not like the | may leave the system to be more prone to denial-of-service (DoS) | |||
| added complexity from checking the fragmentation flag in each | attacks. This issue can be solved using IKE_INTERMEDIATE <xref target="RFC | |||
| received payload. More importantly, fragmenting the messages | 9242" format="default"/> to | |||
| in this way may leave the system to be more prone to denial of | transport the large post-quantum key exchange payloads and using | |||
| service (DoS) attacks. By using IKE_INTERMEDIATE to transport the large | the generic IKEv2 fragmentation protocol | |||
| post-quantum key exchange payloads, and using the generic IKEv2 | <xref target="RFC7383" format="default"/>.</t> | |||
| fragmentation protocol <xref target="RFC7383" /> solve the issue.</t> | </li> | |||
| </list> | <li> | |||
| </t> | <t>Group sub-identifier</t> | |||
| <t> | ||||
| <t><list style="symbols"><t>Group sub-identifier<vspace blankLines="1"/> | As discussed before, each group identifier is used to distinguish a | |||
| As discussed before, each group identifier is used to | post-quantum algorithm. Further classification could be made on a | |||
| distinguish a post-quantum algorithm. Further classification | particular post-quantum algorithm by assigning an additional value | |||
| could be made on a particular post-quantum algorithm by assigning | alongside the group identifier. This sub-identifier value may be used | |||
| additional value alongside the group identifier. This sub- | to assign different security-parameter sets to a given post-quantum | |||
| identifier value may be used to assign different security | algorithm. However, this level of detail does not fit the principles | |||
| parameter sets to a given post-quantum algorithm. However, this | of the document where it should deal with generic hybrid key exchange | |||
| level of details does not fit the principles of the document where | protocol and not a specific ciphersuite. Furthermore, there are | |||
| it should deal with generic hybrid key exchange protocol, not a | enough Diffie-Hellman group identifiers should this be required in the | |||
| specific ciphersuite. Furthermore, there are enough Diffie- | future. | |||
| Hellman group identifiers should this be required in the future. | </t> | |||
| </t> | </li> | |||
| </ul> | ||||
| </list> | ||||
| </t> | ||||
| </section> | </section> | |||
| <section anchor="acknowledgements" numbered="false" toc="default"> | ||||
| </back> | <name>Acknowledgements</name> | |||
| <t> The authors would like to thank <contact fullname="Frederic | ||||
| </rfc> | Detienne"/> and <contact fullname="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 <contact fullname="Tobias Heider"/> and <contact fullname="Tobias | ||||
| Guggemos"/> for valuable comments. Thanks to <contact fullname="Paul | ||||
| Wouters"/> for reviewing the document.</t> | ||||
| </section> | ||||
| </back> | ||||
| </rfc> | ||||
| End of changes. 164 change blocks. | ||||
| 1694 lines changed or deleted | 1472 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||