| rfc9867xml2.original.xml | rfc9867.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='UTF-8'?> | |||
| <rfc category="std" submissionType="IETF" ipr="trust200902" docName="draft-ietf- | ||||
| ipsecme-ikev2-qr-alt-10"> | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | <!DOCTYPE rfc [ | |||
| <!ENTITY nbsp " "> | ||||
| <!ENTITY zwsp "​"> | ||||
| <!ENTITY nbhy "‑"> | ||||
| <!ENTITY wj "⁠"> | ||||
| ]> | ||||
| <?rfc toc="yes" ?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" submissionType="I | |||
| <?rfc symrefs="yes" ?> | ETF" ipr="trust200902" docName="draft-ietf-ipsecme-ikev2-qr-alt-10" number="9867 | |||
| <?rfc sortrefs="no"?> | " consensus="true" updates="" obsoletes="" xml:lang="en" tocInclude="true" symRe | |||
| <?rfc iprnotified="no" ?> | fs="true" sortRefs="false" version="3"> | |||
| <?rfc strict="yes" ?> | ||||
| <front> | <front> | |||
| <title abbrev="Enhanced Use of PPKs in IKEv2">Mixing Preshared Keys in t | <title abbrev="Enhanced Mixing PSKs in IKEv2 for PQ Security">Mixing Preshar | |||
| he IKE_INTERMEDIATE and in the CREATE_CHILD_SA Exchanges of IKEv2 for Post-quant | ed Keys in the IKE_INTERMEDIATE and CREATE_CHILD_SA Exchanges of the Internet Ke | |||
| um Security</title> | y Exchange Protocol Version 2 (IKEv2) for Post-Quantum Security</title> | |||
| <author initials='V.' surname="Smyslov" fullname='Valery Smyslov'> | <seriesInfo name="RFC" value="9867"/> | |||
| <organization>ELVIS-PLUS</organization> | <author initials="V." surname="Smyslov" fullname="Valery Smyslov"> | |||
| <address> | <organization>ELVIS-PLUS</organization> | |||
| <postal> | <address> | |||
| <street>PO Box 81</street> | <postal> | |||
| <city>Moscow (Zelenograd)</city> | <street>PO Box 81</street> | |||
| <code>124460</code> | <city>Moscow (Zelenograd)</city> | |||
| <country>RU</country> | <code>124460</code> | |||
| </postal> | <country>Russian Federation</country> | |||
| <phone>+7 495 276 0211</phone> | </postal> | |||
| <email>svan@elvis.ru</email> | <phone>+7 495 276 0211</phone> | |||
| </address> | <email>svan@elvis.ru</email> | |||
| </author> | </address> | |||
| <date/> | </author> | |||
| <date month="September" year="2025"/> | ||||
| <keyword>internet key exchange</keyword> | <keyword>internet key exchange</keyword> | |||
| <keyword>quantum computer</keyword> | <keyword>quantum computer</keyword> | |||
| <keyword>post quantum</keyword> | <keyword>post quantum</keyword> | |||
| <keyword>post-quantum</keyword> | <keyword>post-quantum</keyword> | |||
| <keyword>quantum safe</keyword> | <keyword>quantum safe</keyword> | |||
| <keyword>PPK</keyword> | <keyword>PPK</keyword> | |||
| <abstract> | <abstract> | |||
| <t> An Internet Key Exchange protocol version 2 (IKEv2) extension de | <t> An Internet Key Exchange Protocol Version 2 (IKEv2) extension defined | |||
| fined in RFC8784 allows IPsec | in RFC 8784 allows IPsec | |||
| traffic to be protected against someone storing VPN communications t | traffic to be protected against someone storing VPN communications | |||
| oday | ||||
| and decrypting them later, when (and if) a Cryptographically Relevan t Quantum Computer (CRQC) is available. | and decrypting them later, when (and if) a Cryptographically Relevan t Quantum Computer (CRQC) is available. | |||
| The protection is achieved by means of a Post-quantum Preshared Key (PPK) which is mixed into the session keys calculation. | The protection is achieved by means of a Post-quantum Preshared Key (PPK) that is mixed into the session keys calculation. | |||
| However, this protection does not cover an initial IKEv2 Security As sociation (SA), which might be unacceptable in some scenarios. | However, this protection does not cover an initial IKEv2 Security As sociation (SA), which might be unacceptable in some scenarios. | |||
| This specification defines an alternative way to provide protection against quantum computers, which | This specification defines an alternative way to provide protection against quantum computers, which | |||
| is similar to the solution defined in RFC8784, but also protects the | is similar to the solution defined in RFC 8784, but it also protects | |||
| initial IKEv2 SA. | the initial IKEv2 SA. | |||
| </t> | </t> | |||
| <t> RFC 8784 assumes that PPKs are static and thus they are only used when | ||||
| <t> RFC8784 assumes that PPKs are static and thus they are only used | an initial IKEv2 SA is created. If a fresh PPK is available before t | |||
| when | he IKE SA expires, | |||
| an initial IKEv2 SA is created. If a fresh PPK is available before t | ||||
| he IKE SA expired, | ||||
| then the only way to use it is to delete the current IKE SA and crea te a new one from scratch, which is inefficient. | then the only way to use it is to delete the current IKE SA and crea te a new one from scratch, which is inefficient. | |||
| This specification defines a way to use PPKs in active IKEv2 SAs for creating additional IPsec SAs and rekey operations. | This specification defines a way to use PPKs in active IKEv2 SAs for creating additional IPsec SAs and rekey operations. | |||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | ||||
| <middle> | <section> | |||
| <section title="Introduction"> | <name>Introduction</name> | |||
| <t> The Internet Key Exchange protocol version 2, defined in <xref t | <t> The Internet Key Exchange Protocol Version 2 (IKEv2), defined in <xref | |||
| arget="RFC7296" />, | target="RFC7296"/>, | |||
| is used in the IPsec architecture for performing authenticated key e xchange. | is used in the IPsec architecture for performing authenticated key e xchange. | |||
| An extension to IKEv2 for mixing preshared keys for post-quantum sec urity is defined in <xref target="RFC8784" />. | An extension to IKEv2 for mixing preshared keys for post-quantum sec urity is defined in <xref target="RFC8784"/>. | |||
| This extension allows today's IPsec traffic to be protected against future quantum computers. | This extension allows today's IPsec traffic to be protected against future quantum computers. | |||
| The protection is achieved by means of using a Post-quantum Preshare d Key (PPK) which is mixed into the session keys calculation. | The protection is achieved by means of using a Post-quantum Preshare d Key (PPK) that is mixed into the session keys calculation. | |||
| At the time this extension was being developed, the consensus in the IPsecME | At the time this extension was being developed, the consensus in the IPsecME | |||
| WG was that the IPsec traffic was more important to be protected tha | WG was that it was more important to protect the IPsec traffic than | |||
| n the IKE traffic. | the IKE traffic. | |||
| <!-- At the time this extension was being developed, it was a consen | It was believed that information transferred over IKE SA (including peers' ident | |||
| sus in the IPsecME WG that it was the IPsec traffic | ities) is less important | |||
| that mostly needed to be protected. --> It was believed that informa | and that extending the protection to also cover the initial IKE SA w | |||
| tion transferred over IKE SA (including peers' identities) is less important | ould require serious modifications to the core IKEv2 protocol. | |||
| and extending the protection to also cover initial IKE SA would requ | ||||
| ire serious modifications to core IKEv2 protocol. | ||||
| One of the goals was to minimize such changes. It was also decided t hat immediate rekey of initial IKE SA | One of the goals was to minimize such changes. It was also decided t hat immediate rekey of initial IKE SA | |||
| would add this protection to the new IKE SA (albeit it would not pro vide protection of the identity of the peers). | would add this protection to the new IKE SA (albeit it would not pro vide protection of the identity of the peers). | |||
| </t> | </t> | |||
| <t> However, in some situations, it is desirable to have this protection f | ||||
| <t> However, in some situations it is desirable to have this protect | or the IKE SA from the very beginning, | |||
| ion for the IKE SA from the very beginning, | ||||
| when an initial IKE SA is created. An example of such a situation is the Group Key Management protocol using IKEv2, | when an initial IKE SA is created. An example of such a situation is the Group Key Management protocol using IKEv2, | |||
| defined in <xref target="I-D.ietf-ipsecme-g-ikev2" />. In this proto | defined in <xref target="I-D.ietf-ipsecme-g-ikev2"/>. In this protoc | |||
| col group policy and session keys are transferred | ol, the group policy and session keys are transferred | |||
| from a Group Controller/Key Server (GCKS) to the Group Members (GM) | from a Group Controller/Key Server (GCKS) to the Group Members (GMs) | |||
| immediately once an initial IKE SA is created. | immediately once an initial IKE SA is created. | |||
| While session keys are additionally protected with a key derived fro m SK_d (and thus are immune to quantum computers if PPKs | While session keys are additionally protected with a key derived fro m SK_d (and thus are immune to quantum computers if PPKs | |||
| <xref target="RFC8784" /> are employed), the other sensitive data, i | <xref target="RFC8784"/> are employed), the other sensitive data, in | |||
| ncluding group policy, is not. | cluding group policy, is not. | |||
| </t> | </t> | |||
| <t> Another issue with using PPKs as defined in <xref target="RFC8784"/> i | ||||
| <t> Another issue with using PPKs as it is defined in <xref target=" | s that this approach assumes that PPKs are static entities, | |||
| RFC8784" /> is that this approach assumes that PPKs are static entities, | which are changed very infrequently. For this reason, PPKs are only | |||
| which are changed very infrequently. For this reason PPKs are only u | used once when an initial IKE SA is established. | |||
| sed once - when an initial IKE SA is established. | This restriction makes it difficult to use PPKs as defined in <xref | |||
| This restriction makes it difficult to use PPKs as defined in <xref | target="RFC8784"/> when | |||
| target="RFC8784" /> when | they are changed relatively frequently, for example, via the use of | |||
| they are changed relatively frequently, for example via the use of Q | Quantum Key Distribution (QKD). | |||
| uantum Key Distribution (QKD). | ||||
| If a fresh PPK becomes available before the IKE SA is expired, there is no way to use it except | If a fresh PPK becomes available before the IKE SA is expired, there is no way to use it except | |||
| for deleting this IKE SA and re-creating a new one from scratch usin | for deleting the IKE SA and recreating a new one from scratch using | |||
| g the fresh PPK. | the fresh PPK. | |||
| </t> | </t> | |||
| <t> Some time after the protocol extension for mixing preshared keys in IK | ||||
| <t> Some time after the protocol extension for mixing preshared keys | Ev2 for post-quantum security was defined in <xref target="RFC8784"/>, | |||
| in IKEv2 for post-quantum security was defined in <xref target="RFC8784" />, | a new IKE_INTERMEDIATE exchange for IKEv2 <xref target="RFC9242"/> w | |||
| a new IKE_INTERMEDIATE exchange for IKEv2 <xref target="RFC9242" /> | as developed. While the primary motivation for developing | |||
| was developed. While the primary motivation for developing | this exchange was to allow multiple key exchanges to be used in IKEv | |||
| this exchange was to allow multiple key exchanges to be used in IKEv | 2 (which is defined in <xref target="RFC9370"/>), | |||
| 2 (which is defined in <xref target="RFC9370" />), | ||||
| the IKE_INTERMEDIATE exchange itself can be used for other purposes too. | the IKE_INTERMEDIATE exchange itself can be used for other purposes too. | |||
| </t> | </t> | |||
| <t> This specification defines the use of PPKs in the IKE_INTERMEDIATE exc | ||||
| <t> This specification defines the use of PPKs in the IKE_INTERMEDIA | hange of IKEv2 for post-quantum security, | |||
| TE exchange of IKEv2 for post-quantum security, | ||||
| which allows getting full protection against quantum computers for i nitial IKE SA. | which allows getting full protection against quantum computers for i nitial IKE SA. | |||
| </t> | </t> | |||
| <t> This specification also defines the use of PPKs in the CREATE_CHILD_SA | ||||
| <t> This specification also defines the use of PPKs in the CREATE_CH | exchange | |||
| ILD_SA exchange | for creating additional IPsec SAs and for rekeying IKE and IPsec SAs | |||
| for creating additional IPsec SAs and for rekeying of IKE and IPsec | . | |||
| SAs. | This allows implementations to leverage fresh PPKs without the need | |||
| This allows implementations to leverage fresh PPKs without the need | to delete the IKE SA and create it from scratch. | |||
| to delete IKE SA and create it from scratch. | </t> | |||
| </t> | <t> This specification does not replace the approach defined in <xref targ | |||
| et="RFC8784"/>. | ||||
| <t> This specification does not replace the approach defined in RFC | ||||
| 8784. | ||||
| Both approaches for using PPKs in IKEv2 can be used depending on the circumstances | Both approaches for using PPKs in IKEv2 can be used depending on the circumstances | |||
| (see <xref target="comparison" />). | (see <xref target="comparison"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="mustshouldmay"> | ||||
| <section anchor="mustshouldmay" title="Terminology and Notation"> | <name>Terminology and Notation</name> | |||
| <t> The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NO | <t> | |||
| T", "SHOULD", "SHOULD NOT", | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
| "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this docu | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| ment are to be interpreted | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
| as described in BCP 14 <xref target="RFC2119" /> <xref target="RFC81 | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| 74" /> when, and only when, | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| they appear in all capitals, as shown here. | be interpreted as | |||
| </t> | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
| when, and only when, they appear in all capitals, as shown here. | ||||
| </t> | ||||
| <t> This document uses the terms defined in <xref target="RFC7296" / >. In particular, | <t> This document uses the terms defined in <xref target="RFC7296"/>. In p articular, | |||
| readers should be familiar with the terms "initiator" and "responder " as used in that document. | readers should be familiar with the terms "initiator" and "responder " as used in that document. | |||
| </t> | </t> | |||
| <t> The approach defined in <xref target="RFC8784"/> is referred to as "us | ||||
| <t> The approach defined in RFC 8784 is referred to as "using PPKs i | ing PPKs in the IKE_AUTH exchange" or simply | |||
| n the IKE_AUTH exchange" or simply | ||||
| "using PPKs in IKE_AUTH" throughout this document. | "using PPKs in IKE_AUTH" throughout this document. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="protocol"> | ||||
| <section anchor="protocol" title="Protocol Description"> | <name>Protocol Description</name> | |||
| <section anchor="init" title="Creating Initial IKE SA"> | <section anchor="init"> | |||
| <t> The IKE initiator which supports the IKE_INTERMEDIATE exchange a | <name>Creating Initial IKE SA</name> | |||
| nd wants to use PPK to protect initial IKE SA | <t> The IKE initiator, which supports the IKE_INTERMEDIATE exchange and | |||
| wants to use a PPK to protect the initial IKE SA, | ||||
| includes the INTERMEDIATE_EXCHANGE_SUPPORTED notification and a noti fication of type USE_PPK_INT in the IKE_SA_INIT request. | includes the INTERMEDIATE_EXCHANGE_SUPPORTED notification and a noti fication of type USE_PPK_INT in the IKE_SA_INIT request. | |||
| If the responder supports the IKE_INTERMEDIATE exchange and is willi ng to use PPK for initial IKE SA protection, | If the responder supports the IKE_INTERMEDIATE exchange and is willi ng to use PPK for initial IKE SA protection, | |||
| it includes both these notifications in the IKE_SA_INIT response. | it includes both these notifications in the IKE_SA_INIT response. | |||
| </t> | </t> | |||
| <artwork align="left"><![CDATA[ | ||||
| <figure align="center"> | ||||
| <artwork align="left"><![CDATA[ | ||||
| Initiator Responder | Initiator Responder | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| HDR, SAi1, KEi, Ni, | HDR, SAi1, KEi, Ni, | |||
| N(INTERMEDIATE_EXCHANGE_SUPPORTED), | N(INTERMEDIATE_EXCHANGE_SUPPORTED), | |||
| N(USE_PPK_INT) ---> | N(USE_PPK_INT) ---> | |||
| <--- HDR, SAr1, KEr, Nr, [CERTREQ,] | <--- HDR, SAr1, KEr, Nr, [CERTREQ,] | |||
| N(INTERMEDIATE_EXCHANGE_SUPPORTED), | N(INTERMEDIATE_EXCHANGE_SUPPORTED), | |||
| N(USE_PPK_INT) | N(USE_PPK_INT)]]></artwork> | |||
| ]]></artwork> | ||||
| </figure> | ||||
| <t> The USE_PPK_INT is a Status Type IKEv2 notification. Its Notify | ||||
| Message Type | ||||
| is <TBA1 by IANA>, Protocol ID and SPI Size are both set t | ||||
| o 0. | ||||
| This specification does not define any data that this notificati | ||||
| on may contain, | ||||
| so the Notification Data is left empty. However, future extensio | ||||
| ns of this specification may make use of it. | ||||
| Implementations <bcp14>MUST</bcp14> ignore any data in the notif | ||||
| ication they do not understand. | ||||
| </t> | ||||
| <t> Note that this negotiation is independent from negotiation of us | ||||
| ing PPKs as specified in <xref target="RFC8784" />. | ||||
| An initiator that supports both the use of PPKs in IKE_AUTH <xref ta | ||||
| rget="RFC8784" /> and in IKE_INTERMEDIATE <bcp14>MAY</bcp14> include both | ||||
| the USE_PPK_INT and the USE_PPK notifications if | ||||
| configured to so. However, if the responder supports both specificat | ||||
| ions | ||||
| and is configured to use PPKs, it has to choose one to use, thus it | ||||
| <bcp14>MUST</bcp14> return | ||||
| either USE_PPK_INT or USE_PPK notification in the response, but not | ||||
| both. | ||||
| </t> | ||||
| <t> If the initiator did not propose using this extension in the IKE | <t> The USE_PPK_INT is a Status Type IKEv2 notification. Its Notify | |||
| _SA_INIT request and responder's policy | Message Type is 16445; the Protocol ID is set to 0; the Security | |||
| Parameter Index (SPI) is absent, so the SPI Size is set to 0 too. This | ||||
| specification does not define any data that this notification may | ||||
| contain, so the Notification Data is left empty. However, future | ||||
| extensions of this specification may make use of it. Implementations | ||||
| <bcp14>MUST</bcp14> ignore any data in the notification that they do | ||||
| not understand. | ||||
| </t> | ||||
| <t> Note that this negotiation is independent from the negotiation of us | ||||
| ing PPKs as specified in <xref target="RFC8784"/>. | ||||
| An initiator that supports both the use of PPKs in IKE_AUTH <xref ta | ||||
| rget="RFC8784"/> and IKE_INTERMEDIATE <bcp14>MAY</bcp14> include both | ||||
| the USE_PPK_INT and USE_PPK notifications if | ||||
| configured to do so. However, if the responder supports both specifi | ||||
| cations | ||||
| and is configured to use PPKs, it has to choose one to use; thus, it | ||||
| <bcp14>MUST</bcp14> return | ||||
| either a USE_PPK_INT or a USE_PPK notification in the response but n | ||||
| ot both. | ||||
| </t> | ||||
| <t> If the initiator did not propose using this extension in the IKE_SA_ | ||||
| INIT request and the responder's policy | ||||
| mandates protecting initial IKE SA with a PPK, then the responder <b cp14>MUST</bcp14> return the NO_PROPOSAL_CHOSEN notification. | mandates protecting initial IKE SA with a PPK, then the responder <b cp14>MUST</bcp14> return the NO_PROPOSAL_CHOSEN notification. | |||
| </t> | </t> | |||
| <t> If the negotiation was successful, the initiator includes one or mor | ||||
| <t> If the negotiation was successful, the initiator includes one or | e | |||
| more | PPK_IDENTITY_KEY notifications in the IKE_INTERMEDIATE request with | |||
| PPK_IDENTITY_KEY notification into the IKE_INTERMEDIATE request with | PPK identities that the initiator believes | |||
| PPK identities the initiator believes | are appropriate for the IKE SA being created. | |||
| are appropriate for the IKE SA being created, | </t> | |||
| </t> | <t> The PPK_IDENTITY_KEY is a Status Type IKEv2 notification. Its Notify | |||
| Message Type | ||||
| <t> The PPK_IDENTITY_KEY is a Status Type IKEv2 notification. Its No | is 16446; the Protocol ID and the SPI Size fields are both set to 0. | |||
| tify Message Type | The format of the Notification Data is shown below in <xref target=" | |||
| is <TBA2 by IANA>, Protocol ID and SPI Size fields are both se | ppk_identity_key_format"/>. | |||
| t to 0. | </t> | |||
| The format of the notification data is shown below on <xref target=" | ||||
| ppk_identity_key_format" />. | ||||
| </t> | ||||
| <figure title="PPK_IDENTITY_KEY Notification Data Format" anchor="pp | <figure anchor="ppk_identity_key_format"> | |||
| k_identity_key_format"> | <name>PPK_IDENTITY_KEY Notification Data Format</name> | |||
| <preamble></preamble> | <artwork><![CDATA[ | |||
| <artwork><![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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| ~ PPK_ID ~ | ~ PPK_ID ~ | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| + PPK Confirmation + | + PPK Confirmation + | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | |||
| ]]></artwork> | </figure> | |||
| <postamble></postamble> | ||||
| </figure> | ||||
| <t>Where:</t> | ||||
| <t><list style="symbols"> | ||||
| <t>PPK_ID (variable) -- PPK_ID as defined in Section 5.1 of <xref | ||||
| target="RFC8784" />. | ||||
| The receiver can determine the length of PPK_ID by subtracting 8 | ||||
| (the length of PPK Confirmation) from the Notification Data length. | ||||
| </t> | ||||
| <t>PPK Confirmation (8 octets) -- value, which allows the responde | ||||
| r to check whether it has the same PPK as the initiator for a given PPK_ID. | ||||
| This field contains the first 8 octets of a string computed as prf | ||||
| ( PPK, Ni | Nr | SPIi | SPIr ), | ||||
| where prf is the negotiated PRF; PPK is the key value for a specif | ||||
| ied PPK_ID; Ni, Nr, SPIi, SPIr -- nonces and IKE SPIs for the SA being establish | ||||
| ed. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> If a series of the IKE_INTERMEDIATE exchanges takes place, the P | <t>Where:</t> | |||
| PK_IDENTITY_KEY notification(s) | <dl spacing="normal" newline="false"> | |||
| <bcp14>MUST</bcp14> be sent in the last one, i.e. in the IKE_INTERME | <dt>PPK_ID (variable):</dt><dd> PPK_ID as defined in <xref | |||
| DIATE exchange immediately preceding the IKE_AUTH exchange. | target="RFC8784" section="5.1"/>. The receiver can determine the | |||
| If the last IKE_INTERMEDIATE exchange contains other payloads aimed | length of PPK_ID by subtracting 8 (the length of PPK Confirmation) | |||
| for some other purpose, | from the Notification Data length.</dd> | |||
| then the notification(s) <bcp14>MAY</bcp14> be piggybacked with thes | <dt>PPK Confirmation (8 octets):</dt><dd><t>A value that allows the | |||
| e payloads. | responder to check whether it has the same PPK as the initiator for | |||
| a given PPK_ID. This field contains the first 8 octets of a string | ||||
| computed as prf( PPK, Ni | Nr | SPIi | SPIr ), where:</t> | ||||
| <ul spacing="compact"> | ||||
| <li>"prf" is the negotiated PRF;</li> | ||||
| <li>PPK is the key value for a specified PPK_ID;</li> | ||||
| <li>Ni, Nr, SPIi, SPIr are nonces and IKE SPIs for the SA being estab | ||||
| lished.</li> | ||||
| </ul> | ||||
| </dd> | ||||
| </dl> | ||||
| <t>If a series of the IKE_INTERMEDIATE exchanges takes place, the | ||||
| PPK_IDENTITY_KEY notification(s) <bcp14>MUST</bcp14> be sent in the | ||||
| last one, i.e., in the IKE_INTERMEDIATE exchange immediately preceding | ||||
| the IKE_AUTH exchange. If this IKE_INTERMEDIATE exchange contains | ||||
| other payloads aimed for some other purpose, then the notification(s) | ||||
| <bcp14>MAY</bcp14> be piggybacked with these payloads. Note that | ||||
| future IKEv2 extensions utilizing the IKE_INTERMEDIATE exchange may | ||||
| allow one or more of these exchanges to happen after the one concerned | ||||
| with PPK for the case when such extensions are negotiated.</t> | ||||
| <figure align="center"> | <artwork align="left"><![CDATA[ | |||
| <artwork align="left"><![CDATA[ | ||||
| Initiator Responder | Initiator Responder | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| HDR, SK { ... N(PPK_IDENTITY_KEY, PPK_ID_1) | HDR, SK { ... N(PPK_IDENTITY_KEY, PPK_ID_1) | |||
| [, N(PPK_IDENTITY_KEY, PPK_ID_2)] ... | [, N(PPK_IDENTITY_KEY, PPK_ID_2)] ... | |||
| [, N(PPK_IDENTITY_KEY, PPK_ID_n)]} ---> | [, N(PPK_IDENTITY_KEY, PPK_ID_n)]} --->]]></artwork> | |||
| ]]></artwork> | ||||
| </figure> | ||||
| Depending on the responder's capabilities and policy the following s | <t> | |||
| ituations are possible. | Depending on the responder's capabilities and policy, the following | |||
| </t> | situations are possible: | |||
| </t> | ||||
| <ol> | <!-- [rfced] Sections 3.1 and 3.2: We're having trouble parsing "one | |||
| of the PPKs which IDs were sent" and "initiator's one". Would the | ||||
| following match the intended meaning or is there another way this | ||||
| can be written for clarity and consistency? | ||||
| <li anchor="case1"> If the responder is configured with one of the | a) Section 3.1: | |||
| PPKs | ||||
| which IDs were sent by the initiator and this PPK matches the init | ||||
| iator's one | ||||
| <!-- If the responder is configured with a PPK, which ID was among | ||||
| IDs sent by the initiator, and this PPK matches the initiator's one --> | ||||
| (based on the information from the PPK Confirmation field), then t | ||||
| he responder selects this PPK | ||||
| and returns back its identity in the PPK_IDENTITY notification. Th | ||||
| e PPK_IDENTITY notification | ||||
| is defined in <xref target="RFC8784" />. | ||||
| <figure align="center"> | Original: | |||
| <artwork align="left"><![CDATA[ | 1. If the responder is configured with one of the PPKs which IDs | |||
| Initiator Responder | were sent by the initiator and this PPK matches the initiator's | |||
| <--- HDR, SK { ... N(PPK_IDENTITY, PPK_ID_i)} | one (based on the information from the PPK Confirmation field), | |||
| ]]></artwork> | then the responder selects this PPK and returns back its identity | |||
| </figure> | in the PPK_IDENTITY notification. | |||
| In this case the IKE_AUTH exchange is performed as defined in IKEv | Perhaps: | |||
| 2 <xref target="RFC7296" />. | 1. If the responder is configured with a PPK that was among the | |||
| However, the keys for the IKE SA are computed using PPK, as descri | IDs sent by the initiator, and if this PPK matches the | |||
| bed in <xref target="init_keys" />. | initiator's PPK (based on the information from the PPK | |||
| If the responder returns a PPK identity that was not proposed by t | Confirmation field), then the responder selects this PPK and | |||
| he initiator, then the initiator | returns its identity in the PPK_IDENTITY notification. | |||
| <bcp14>MUST</bcp14> treat this as a fatal and abort the IKE SA est | ||||
| ablishment. | ||||
| </li> | ||||
| <li anchor="case2"> If the responder does not have any of the PPKs | b) Section 3.1: | |||
| which IDs were sent by the initiator | ||||
| or it has some of the proposed PPKs, but their values mismatch the | ||||
| initiator's ones | ||||
| (based on the information from the PPK Confirmation field), and us | ||||
| ing PPK is mandatory for the responder, | ||||
| then it <bcp14>MUST</bcp14> return AUTHENTICATION_FAILED notificat | ||||
| ion and abort creating the IKE SA. | ||||
| <figure align="center"> | Original | |||
| <artwork align="left"><![CDATA[ | 2. If the responder does not have any of the PPKs which IDs were | |||
| Initiator Responder | sent by the initiator or it has some of the proposed PPKs, but | |||
| <--- HDR, SK {... N(AUTHENTICATION_FAILED)} | their values mismatch the initiator's ones (based on the | |||
| ]]></artwork> | information from the PPK Confirmation field), and using PPK is | |||
| </figure> | mandatory for the responder, then it MUST return | |||
| AUTHENTICATION_FAILED notification and abort creating the IKE SA. | ||||
| </li> | Perhaps: | |||
| 2. If the responder does not have any of the PPKs that were among | ||||
| the IDs sent by the initiator, or if the responder has some of | ||||
| the proposed PPKs but their values are mismatched from the | ||||
| initiator's PPKs (based on the information from the PPK | ||||
| Confirmation field), and if using PPK is mandatory for the | ||||
| responder, then it MUST return an AUTHENTICATION_FAILED | ||||
| notification and abort creating the IKE SA. | ||||
| <li anchor="case3"> <!-- If the responder does not have any of the | c) Section 3.2: | |||
| PPKs which IDs were sent by the initiator --> | ||||
| If the responder does not have any PPKs proposed by the initiator | ||||
| or it has some of the proposed PPKs, but their values mismatch the | ||||
| initiator's ones | ||||
| (based on the information from the PPK Confirmation field), and us | ||||
| ing PPK is optional for the responder, | ||||
| then it does not include any PPK_IDENTITY notification to the resp | ||||
| onse. | ||||
| <figure align="center"> | Original: | |||
| <artwork align="left"><![CDATA[ | In case the responder does not support (or is not configured for) | |||
| Initiator Responder | using PPKs in the CREATE_CHILD_SA exchange, or does not have any of | |||
| <--- HDR, SK {...} | the PPKs which IDs were sent by the initiator, or it has some of | |||
| ]]></artwork> | proposed PPKs, but their values mismatch the initiator's ones (based | |||
| </figure> | on the information from the PPK Confirmation field), then it does not | |||
| include any PPK_IDENTITY notification in the response and new SA is | ||||
| created as defined in IKEv2 [RFC7296]. | ||||
| In this case the initiator cannot achieve quantum computer resista | Perhaps: | |||
| nce using the proposed PPKs. | If the responder does not support (or is not configured for) | |||
| If this is a requirement for the initiator, then it <bcp14>MUST</b | using PPKs in the CREATE_CHILD_SA exchange or does not have any of | |||
| cp14> abort creating the IKE SA. | the PPKs that were among the IDs sent by the initiator, or if the | |||
| Otherwise, the initiator continues with the IKE_AUTH exchange as d | responder has some of proposed PPKs but their values are mismatched | |||
| escribed in IKEv2 <xref target="RFC7296" />. | from the initiator's PPKs (based on the information from the PPK | |||
| </li> | Confirmation field), then it does not include any PPK_IDENTITY | |||
| </ol> | notifications in the response, and new SA is created as defined in | |||
| IKEv2 [RFC7296]. | ||||
| <t><xref target="responders_behavior"/> summarizes the above logic f | d) Section 3.2: | |||
| or the responder: | ||||
| </t> | ||||
| <table title="Responder's behavior" anchor="responders_behavior"> | Original: | |||
| <thead> | If using PPKs in CREATE_CHILD_SA is mandatory for the responder and | |||
| <tr> | the initiator does not include any PPK_IDENTITY_KEY notification in | |||
| <th>Received USE_PPK_INT</th> | the request or the responder does not have any of the PPKs which IDs | |||
| <th>Supports USE_PPK_INT</th> | were sent by the initiator, or it has some of proposed PPKs, but | |||
| <th>Has one of proposed PPKs</th> | their values mismatch the initiator's ones (based on the information | |||
| <th>PPK is mandatory for initial IKE SA</th> | from the PPK Confirmation field), then the responder MUST return the | |||
| <th>Action</th> | NO_PROPOSAL_CHOSEN notification. | |||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>No</td> | ||||
| <td>*</td> | ||||
| <td>*</td> | ||||
| <td>No</td> | ||||
| <td><xref target="RFC8784" /> (if proposed) or standard IKEv2 | ||||
| protocol</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>No</td> | ||||
| <td>Yes</td> | ||||
| <td>*</td> | ||||
| <td>Yes</td> | ||||
| <td>Send NO_PROPOSAL_CHOSEN</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>Yes</td> | ||||
| <td>Yes</td> | ||||
| <td>Yes</td> | ||||
| <td>*</td> | ||||
| <td><xref target="case1"/> (use this extension)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>Yes</td> | ||||
| <td>Yes</td> | ||||
| <td>No</td> | ||||
| <td>Yes</td> | ||||
| <td><xref target="case2"/> (abort negotiation)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>Yes</td> | ||||
| <td>Yes</td> | ||||
| <td>No</td> | ||||
| <td>No</td> | ||||
| <td><xref target="case3"/> (standard IKEv2 protocol)</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t> Since the responder selects a PPK before it knows the identity o | Perhaps: | |||
| f the initiator, a situation may occur, | If using PPKs in CREATE_CHILD_SA is mandatory for the responder and | |||
| when the responder agrees to use some PPK in the IKE_INTERMEDIATE ex | the initiator does not include any PPK_IDENTITY_KEY notification in | |||
| change, but during the IKE_AUTH exchange | the request, or if the responder does not have any of the PPKs that | |||
| were among the IDs sent by the initiator, or if the responder has some | ||||
| of the proposed PPKs but with mismatched values from the initiator's PPKs | ||||
| (based on the information from the PPK Confirmation field), then the | ||||
| responder MUST return the NO_PROPOSAL_CHOSEN notification. | ||||
| --> | ||||
| <ol type="1"> | ||||
| <li anchor="case1"> | ||||
| <t>If the responder is configured with a PPK with an ID that is | ||||
| among the IDs sent by the initiator, and if this PPK matches the | ||||
| initiator's PPK (based on the information from the PPK | ||||
| Confirmation field), then the responder selects this PPK and | ||||
| returns its identity in the PPK_IDENTITY notification. The | ||||
| PPK_IDENTITY notification is defined in <xref target="RFC8784"/>. | ||||
| </t> | ||||
| <artwork align="left"><![CDATA[ | ||||
| Initiator Responder | ||||
| --------------------------------------------------------------- | ||||
| <--- HDR, SK { ... N(PPK_IDENTITY, PPK_ID_i)}]]></artwork> | ||||
| <t> | ||||
| In this case, the IKE_AUTH exchange is performed as defined in IKE | ||||
| v2 <xref target="RFC7296"/>. | ||||
| However, the keys for the IKE SA are computed using PPK, as descri | ||||
| bed in <xref target="init_keys"/>. | ||||
| If the responder returns a PPK identity that was not proposed by t | ||||
| he initiator, then the initiator | ||||
| <bcp14>MUST</bcp14> treat this as fatal and abort the IKE SA estab | ||||
| lishment. | ||||
| </t> | ||||
| </li> | ||||
| <li anchor="case2"> | ||||
| <t>If the responder does not have a PPK with an ID that matches any | ||||
| of IDs sent by the initiator, or if the responder has some of the | ||||
| proposed PPKs but their values are mismatched from the initiator's | ||||
| PPKs (based on the information from the PPK Confirmation field), | ||||
| and if using PPK is mandatory for the responder, then it | ||||
| <bcp14>MUST</bcp14> return an AUTHENTICATION_FAILED notification | ||||
| and abort creating the IKE SA. | ||||
| </t> | ||||
| <artwork align="left"><![CDATA[ | ||||
| Initiator Responder | ||||
| --------------------------------------------------------------- | ||||
| <--- HDR, SK {... N(AUTHENTICATION_FAILED)}]]></artwork> | ||||
| </li> | ||||
| <li anchor="case3"> | ||||
| <t> | ||||
| If the responder does not have any PPKs proposed by the initiator, | ||||
| or if it has only some of the proposed PPKs but their values misma | ||||
| tch the initiator's ones | ||||
| (based on the information from the PPK Confirmation field), and if | ||||
| using PPK is optional for the responder, | ||||
| then it does not include any PPK_IDENTITY notification to the resp | ||||
| onse. | ||||
| </t> | ||||
| <artwork align="left"><![CDATA[ | ||||
| Initiator Responder | ||||
| --------------------------------------------------------------- | ||||
| <--- HDR, SK {...}]]></artwork> | ||||
| <t> | ||||
| In this case, the initiator cannot achieve quantum computer resist | ||||
| ance using the proposed PPKs. | ||||
| If this is a requirement for the initiator, then it <bcp14>MUST</b | ||||
| cp14> abort creating the IKE SA. | ||||
| Otherwise, the initiator continues with the IKE_AUTH exchange as d | ||||
| escribed in IKEv2 <xref target="RFC7296"/>. | ||||
| </t> | ||||
| </li> | ||||
| </ol> | ||||
| <t><xref target="responders_behavior"/> summarizes the above logic for t | ||||
| he responder:</t> | ||||
| <table anchor="responders_behavior"> | ||||
| <name>Responder's Behavior</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th>Received USE_PPK_INT</th> | ||||
| <th>Supports USE_PPK_INT</th> | ||||
| <th>Has one of the proposed PPKs</th> | ||||
| <th>PPK is mandatory for initial IKE SA</th> | ||||
| <th>Action</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>No</td> | ||||
| <td>*</td> | ||||
| <td>*</td> | ||||
| <td>No</td> | ||||
| <td> | ||||
| <xref target="RFC8784"/> (if proposed) or standard IKEv2 protoco | ||||
| l</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>No</td> | ||||
| <td>Yes</td> | ||||
| <td>*</td> | ||||
| <td>Yes</td> | ||||
| <td>Send NO_PROPOSAL_CHOSEN</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>Yes</td> | ||||
| <td>Yes</td> | ||||
| <td>Yes</td> | ||||
| <td>*</td> | ||||
| <td> | ||||
| <xref target="case1"/> (use this extension)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>Yes</td> | ||||
| <td>Yes</td> | ||||
| <td>No</td> | ||||
| <td>Yes</td> | ||||
| <td> | ||||
| <xref target="case2"/> (abort negotiation)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>Yes</td> | ||||
| <td>Yes</td> | ||||
| <td>No</td> | ||||
| <td>No</td> | ||||
| <td> | ||||
| <xref target="case3"/> (standard IKEv2 protocol)</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t> Since the responder selects a PPK before it knows the identity of th | ||||
| e initiator, a situation may occur | ||||
| where the responder agrees to use some PPK in the IKE_INTERMEDIATE e | ||||
| xchange but then, during the IKE_AUTH exchange, | ||||
| discovers that this particular PPK is not associated with the initia tor's identity in its local policy. | discovers that this particular PPK is not associated with the initia tor's identity in its local policy. | |||
| Note that the responder does have this PPK, but it is just not liste | Note that the responder does have this PPK, but it is just not liste | |||
| d among the PPKs for using with this initiator. | d among the PPKs to be used with this initiator. | |||
| In this case the responder <bcp14>SHOULD</bcp14> abort negotiation a | In this case, the responder <bcp14>SHOULD</bcp14> abort negotiation | |||
| nd return back the AUTHENTICATION_FAILED notification | and return back the AUTHENTICATION_FAILED notification | |||
| to be consistent with its policy. However, the responder <bcp14>MAY< /bcp14> continue creating IKE SA using the negotiated | to be consistent with its policy. However, the responder <bcp14>MAY< /bcp14> continue creating IKE SA using the negotiated | |||
| "wrong" PPK if this is acceptable according to its local policy. | "wrong" PPK if this is acceptable according to its local policy. | |||
| </t> | </t> | |||
| <section anchor="init_keys"> | ||||
| <section anchor="init_keys" title="Computing IKE SA Keys"> | <name>Computing IKE SA Keys</name> | |||
| <t> Once the PPK is negotiated in the last IKE_INTERMEDIATE exchan | <t>Once the PPK is negotiated in the IKE_INTERMEDIATE exchange, the | |||
| ge, the IKE SA keys are recalculated. | IKE SA keys are recalculated. Note that if the IKE SA keys are also | |||
| Note that if the IKE SA keys are also recalculated as the result o | recalculated as a result of other actions performed in this | |||
| f the other actions performed in the IKE_INTERMEDIATE exchange | IKE_INTERMEDIATE exchange (for example, as defined in <xref | |||
| (for example, as defined in <xref target= "RFC9370" />), then appl | target="RFC9370"/>), then applying the PPK <bcp14>MUST</bcp14> be | |||
| ying the PPK | done after all of them so that recalculating IKE SA keys with the | |||
| <bcp14>MUST</bcp14> be done after all of them, so that recalculati | PPK is the last action before they are used in the next | |||
| ng IKE SA keys with the PPK | exchange. Note that future IKEv2 extensions utilizing the | |||
| is the last action before they are used in the IKE_AUTH exchange. | IKE_INTERMEDIATE exchange may update this requirement for the case | |||
| </t> | when such extensions are negotiated. | |||
| </t> | ||||
| <t> The IKE SA keys are computed differently compared to how PPKs | <t> The IKE SA keys are computed differently compared to how PPKs | |||
| are used in IKE_AUTH. | are used in IKE_AUTH. A new SKEYSEED' value is computed using the | |||
| A new SKEYSEED' value is computed using the negotiated PPK and the | negotiated PPK and the most recently computed SK_d key. Note that | |||
| most recently computed SK_d key. | the PPK is applied to SK_d exactly how it is specified in <xref | |||
| Note that the PPK is applied to SK_d exactly how it is specified i | target="RFC8784"/>, and the result is used as SKEYSEED'. | |||
| n <xref target="RFC8784" />, | </t> | |||
| and the result is used as SKEYSEED'. | <artwork align="left"><![CDATA[ | |||
| SKEYSEED' = prf+ (PPK, SK_d)]]></artwork> | ||||
| <figure align="center"> | <t> | |||
| <artwork align="left"><![CDATA[ | Then the SKEYSEED' is used to recalculate all SK_* keys as defined | |||
| SKEYSEED' = prf+ (PPK, SK_d) | in <xref target="RFC7296" section="2.14"/>. | |||
| ]]></artwork> | ||||
| </figure> | ||||
| Then the SKEYSEED' is used to recalculate all SK_* keys as defined | ||||
| in Section 2.14 of <xref target="RFC7296" />. | ||||
| <figure align="center"> | </t> | |||
| <artwork align="left"><![CDATA[ | <artwork align="left"><![CDATA[ | |||
| {SK_d | SK_ai | SK_ar | SK_ei | SK_er | SK_pi | SK_pr} | {SK_d | SK_ai | SK_ar | SK_ei | SK_er | SK_pi | SK_pr} | |||
| = prf+ (SKEYSEED', Ni | Nr | SPIi | SPIr ) | = prf+ (SKEYSEED', Ni | Nr | SPIi | SPIr )]]></artwor | |||
| k> | ||||
| ]]></artwork> | <t> | |||
| </figure> | ||||
| In the formula above, Ni and Nr are nonces from the IKE_SA_INIT ex change, and SPIi and SPIr are the SPIs of the IKE SA being created. | In the formula above, Ni and Nr are nonces from the IKE_SA_INIT ex change, and SPIi and SPIr are the SPIs of the IKE SA being created. | |||
| Note that SK_d, SK_pi, and SK_pr are not individually recalculated | Note that SK_d, SK_pi, and SK_pr are not individually recalculated | |||
| using PPK, as it is defined in <xref target="RFC8784" />. | using PPK, as defined in <xref target="RFC8784"/>. | |||
| </t> | </t> | |||
| <t> The resulting keys are then used in the IKE_AUTH exchange and in t | ||||
| <t> The resulting keys are then used in the IKE_AUTH exchange and | he created IKE SA. | |||
| in the created IKE SA. | </t> | |||
| </t> | </section> | |||
| </section> | </section> | |||
| </section> | <section anchor="create_child_sa"> | |||
| <name>Using PPKs in the CREATE_CHILD_SA Exchange</name> | ||||
| <section anchor="create_child_sa" title="Using PPKs in the CREATE_CHIL | <t> If a fresh PPK is available to both peers at the time when an IKE SA | |||
| D_SA Exchange"> | is active, | |||
| <t> If a fresh PPK is available to both peers at the time when an IK | ||||
| E SA is active, | ||||
| peers <bcp14>MAY</bcp14> use this fresh PPK without creating a new I KE SA from scratch | peers <bcp14>MAY</bcp14> use this fresh PPK without creating a new I KE SA from scratch | |||
| when they have a need to create additional IPsec SAs or to rekey exi sting SAs. | when they have a need to create additional IPsec SAs or to rekey exi sting SAs. | |||
| In this case the PPK can be used for creating additional IPsec SAs a | In this case, the PPK can be used for creating additional IPsec SAs | |||
| nd for rekeying both IKE and IPsec SAs | and for rekeying both IKE and IPsec SAs | |||
| regardless whether the current IKE SA was created with the use of a | regardless of whether the current IKE SA was created with the use of | |||
| PPK | a PPK | |||
| (no matter how: in IKE_AUTH, in IKE_INTERMEDIATE or in CREATE_CHILD_ | (no matter how: in IKE_AUTH, in IKE_INTERMEDIATE, or in CREATE_CHILD | |||
| SA) or not. | _SA) or not. | |||
| </t> | </t> | |||
| <t> If the initiator wants to use a PPK in the CREATE_CHILD_SA exchange, | ||||
| <t> If the initiator wants to use a PPK in the CREATE_CHILD_SA excha | it includes one or more | |||
| nge, it includes one or more | PPK_IDENTITY_KEY notifications containing PPK identities that the in | |||
| PPK_IDENTITY_KEY notification containing PPK identities the initiato | itiator believes | |||
| r believes | are appropriate for the SA being created in the CREATE_CHILD_SA requ | |||
| are appropriate for the SA being created, into the CREATE_CHILD_SA r | est. | |||
| equest. | In this case, the PPK Confirmation field contains the first 8 octets | |||
| The PPK Confirmation field in this case contains the first 8 octets | of a string computed as prf( PPK, Ni | SPIi | SPIr ), | |||
| of a string computed as prf( PPK, Ni | SPIi | SPIr ), | where Ni is the initiator's nonce from the CREATE_CHILD_SA request a | |||
| where Ni is the initiator's nonce from the CREATE_CHILD_SA request a | nd SPIi/SPIr are the SPIs of the current IKE SA. | |||
| nd SPIi/SPIr - SPIs of the current IKE SA. | ||||
| If the responder supports using PPKs in the CREATE_CHILD_SA exchange and is configured and ready to do it, | If the responder supports using PPKs in the CREATE_CHILD_SA exchange and is configured and ready to do it, | |||
| then it sends back the PPK_IDENTITY notification containing the ID o f the selected PPK, as depicted in figures below. | then it sends back the PPK_IDENTITY notification containing the ID o f the selected PPK, as depicted in the figures below. | |||
| <figure align="center" title="CREATE_CHILD_SA Exchange for Creating or Rekeying | </t> | |||
| Child SAs"> | <figure> | |||
| <artwork align="left"><![CDATA[ | <name>CREATE_CHILD_SA Exchange for Creating or Rekeying Child SAs</nam | |||
| e> | ||||
| <artwork align="left"><![CDATA[ | ||||
| Initiator Responder | Initiator Responder | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| HDR, SK {[N(REKEY_SA),] SA, Ni, [KEi,] TSi, TSr, | HDR, SK {[N(REKEY_SA),] SA, Ni, [KEi,] TSi, TSr, | |||
| N(PPK_IDENTITY_KEY, PPK_ID_1) | N(PPK_IDENTITY_KEY, PPK_ID_1) | |||
| [, N(PPK_IDENTITY_KEY, PPK_ID_2)] ... | [, N(PPK_IDENTITY_KEY, PPK_ID_2)] ... | |||
| [, N(PPK_IDENTITY_KEY, PPK_ID_n)]} ---> | [, N(PPK_IDENTITY_KEY, PPK_ID_n)]} ---> | |||
| <--- HDR, SK {SA, Nr [KEr,] TSi, TSr, | <--- HDR, SK {SA, Nr [KEr,] TSi, TSr, | |||
| N(PPK_IDENTITY, PPK_ID_i)} | N(PPK_IDENTITY, PPK_ID_i)}]]></artwork> | |||
| ]]></artwork> | </figure> | |||
| </figure> | <figure> | |||
| <name>CREATE_CHILD_SA Exchange for Rekeying IKE SA</name> | ||||
| <figure align="center" title="CREATE_CHILD_SA Exchange for Rekeying IKE SA"> | <artwork align="left"><![CDATA[ | |||
| <artwork align="left"><![CDATA[ | ||||
| Initiator Responder | Initiator Responder | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| HDR, SK {SA, Ni, KEi, | HDR, SK {SA, Ni, KEi, | |||
| N(PPK_IDENTITY_KEY, PPK_ID_1) | N(PPK_IDENTITY_KEY, PPK_ID_1) | |||
| [, N(PPK_IDENTITY_KEY, PPK_ID_2)] ... | [, N(PPK_IDENTITY_KEY, PPK_ID_2)] ... | |||
| [, N(PPK_IDENTITY_KEY, PPK_ID_n)]} ---> | [, N(PPK_IDENTITY_KEY, PPK_ID_n)]} ---> | |||
| <--- HDR, SK {SA, Nr, KEr, | <--- HDR, SK {SA, Nr, KEr, | |||
| N(PPK_IDENTITY, PPK_ID_i)} | N(PPK_IDENTITY, PPK_ID_i)}]]></artwork> | |||
| ]]></artwork> | </figure> | |||
| </figure> | ||||
| In case the responder does not support (or is not configured for) us | ||||
| ing PPKs in the CREATE_CHILD_SA exchange, or does not have any of the PPKs | ||||
| which IDs were sent by the initiator, or it has some of proposed PPK | ||||
| s, but their values mismatch the initiator's ones | ||||
| (based on the information from the PPK Confirmation field), then it | ||||
| does not include any PPK_IDENTITY notification in the response | ||||
| and new SA is created as defined in IKEv2 <xref target="RFC7296" />. | ||||
| If this is inappropriate for the initiator, | ||||
| it can immediately delete this SA. | ||||
| </t> | ||||
| <t> If using PPKs in CREATE_CHILD_SA is mandatory for the responder | ||||
| and the initiator does not include any PPK_IDENTITY_KEY notification in the requ | ||||
| est | ||||
| or the responder does not have any of the PPKs which IDs were sent b | ||||
| y the initiator, or it has some of proposed PPKs, but their values mismatch | ||||
| the initiator's ones (based on the information from the PPK Confirma | ||||
| tion field), then the responder <bcp14>MUST</bcp14> return the NO_PROPOSAL_CHOSE | ||||
| N | ||||
| notification. | ||||
| </t> | ||||
| <t> Otherwise the new SA is created using the selected PPK. | ||||
| </t> | ||||
| <section anchor="create_child_sa_keys" title="Computing Keys"> | <t> | |||
| <t> For the purpose of calculation session keys for the new SA, th | If the responder does not support (or is not configured for) using | |||
| e current SK_d key is first | PPKs in the CREATE_CHILD_SA exchange or does not have a PPK with an | |||
| ID that matches any of IDs sent by the initiator, or if the | ||||
| responder has some of the proposed PPKs but their values are | ||||
| mismatched from the initiator's PPKs (based on the information from | ||||
| the PPK Confirmation field), then it will not include any | ||||
| PPK_IDENTITY notifications in the response, and new SA is created as | ||||
| defined in IKEv2 <xref target="RFC7296"/>. If this is inappropriate | ||||
| for the initiator, it can immediately delete this SA. | ||||
| </t> | ||||
| <t> | ||||
| If using PPKs in CREATE_CHILD_SA is mandatory for the responder, and | ||||
| the initiator does not include any PPK_IDENTITY_KEY notifications in | ||||
| the request, or if the responder does not have a PPK with an ID that | ||||
| matches any of IDs sent by the initiator, or if the responder has | ||||
| some of the proposed PPKs but with mismatched values from the | ||||
| initiator's PPKs (based on the information from the PPK Confirmation | ||||
| field), then the responder <bcp14>MUST</bcp14> return the | ||||
| NO_PROPOSAL_CHOSEN notification. | ||||
| </t> | ||||
| <t> Otherwise, the new SA is created using the selected PPK. | ||||
| </t> | ||||
| <section anchor="create_child_sa_keys"> | ||||
| <name>Computing Keys</name> | ||||
| <t> For the purpose of calculation session keys for the new SA, the cu | ||||
| rrent SK_d key is first | ||||
| mixed with the selected PPK: | mixed with the selected PPK: | |||
| <figure align="center"> | </t> | |||
| <artwork align="left"><![CDATA[ | <artwork align="left"><![CDATA[ | |||
| SK_d' = prf+ (PPK, SK_d) | SK_d' = prf+ (PPK, SK_d)]]></artwork> | |||
| ]]></artwork> | <t> | |||
| </figure> | ||||
| The resulting key SK_d' is then used instead of SK_d in all formul as for computing keys for the new SA | The resulting key SK_d' is then used instead of SK_d in all formul as for computing keys for the new SA | |||
| (Sections 2.17 and 2.18 of <xref target="RFC7296" />, Section 2.2. | (Sections <xref target="RFC7296" sectionFormat="bare" section="2.1 | |||
| 4 of <xref target="RFC9370" />). | 7"/> and <xref target="RFC7296" sectionFormat="bare" section="2.18"/> of <xref t | |||
| </t> | arget="RFC7296"/> and <xref target="RFC9370" section="2.2.4"/>). | |||
| </t> | ||||
| <t> Note that if the PPK that was used for the IKE SA establishmen | <t> Note that if the PPK that was used for the IKE SA establishment is | |||
| t is not changed, then there is no point | not changed, then there is no point | |||
| to use it in the CREATE_CHILD_SA exchange. | to use it in the CREATE_CHILD_SA exchange. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | ||||
| </section> | </section> | |||
| </section> | ||||
| <section anchor="security" title="Security Considerations"> | </section> | |||
| <t> Security considerations of using Post-quantum Preshared Keys | <section anchor="security"> | |||
| in the IKEv2 protocol are discussed in <xref target="RFC8784" />. | <name>Security Considerations</name> | |||
| <t> Security considerations for using Post-quantum Preshared Keys | ||||
| in the IKEv2 protocol are discussed in <xref target="RFC8784"/>. | ||||
| Unlike using PPKs in IKE_AUTH, this specification makes even initial IKE SA quantum | Unlike using PPKs in IKE_AUTH, this specification makes even initial IKE SA quantum | |||
| secure. In addition, a PPK is mixed into the SK_* keys calculation | secure. In addition, a PPK is mixed into the SK_* keys calculation | |||
| before the IKE_AUTH exchange starts, and since the PPK is used in au thentication too, | before the IKE_AUTH exchange starts, and since the PPK is used in au thentication too, | |||
| this exchange is quantum secure even against an active attacker. | this exchange is quantum secure even against an active attacker. | |||
| </t> | </t> | |||
| <t> This specification relies on the IKE_INTERMEDIATE exchange. | ||||
| <t> This specification relies on the IKE_INTERMEDIATE exchange. | Refer to <xref target="RFC9242"/> for discussion of related security | |||
| Refer to <xref target="RFC9242" /> for discussion of related securit | issues. | |||
| y issues. | </t> | |||
| </t> | ||||
| <t> Section 4 of <xref target="RFC9370" /> discusses the potential i | ||||
| mpact | ||||
| of appearing a CRQC to various cryptographic primitives used in IKEv | ||||
| 2. | ||||
| It is worth to repeat here that it is believed that security of symm | ||||
| etric | ||||
| key cryptographic primitives will not be affected by CRQC. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="iana" title="IANA Considerations"> | ||||
| <t>This document defines two new Notify Message Types in the "IKEv2 | ||||
| Notify Message Status Types" registry:</t> | ||||
| <figure align="center"> | ||||
| <artwork align="left"><![CDATA[ | ||||
| <TBA1> USE_PPK_INT | ||||
| <TBA2> PPK_IDENTITY_KEY | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section title="Acknowledgements" anchor="acknowledgements"> | ||||
| <t> Author would like to thank Paul Wouters for valuable comments an | ||||
| d Tero Kivinen | ||||
| who made a thorough review of the document and proposed a lot of tex | ||||
| t improvements, and who also | ||||
| pointed out to the problem of mismatched preshared keys. Thanks to R | ||||
| ebecca Guthrie | ||||
| for providing comments and proposals for the document and to Mikhail | ||||
| Borodin for discovering | ||||
| the problem of calculating PPK Confirmation in CREATE_CHILD_SA. | ||||
| </t> | ||||
| </section> | ||||
| </middle> | ||||
| <back> | <t> <xref target="RFC9370" section="4"/> discusses the potential impact | |||
| <references title='Normative References'> | of when a CRQC is accessible on various cryptographic primitives used in | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | IKEv2. It is worthwhile to repeat here that it is believed that the | |||
| RFC.2119.xml" ?> | security of symmetric key cryptographic primitives will not be affected | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | by CRQC. | |||
| RFC.8174.xml" ?> | </t> | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | </section> | |||
| RFC.7296.xml" ?> | <section anchor="iana"> | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | <name>IANA Considerations</name> | |||
| RFC.8784.xml" ?> | <t>Per this document, IANA has added the following Notify Message Types in | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | the "IKEv2 Notify Message Status Types" registry:</t> | |||
| RFC.9242.xml" ?> | ||||
| </references> | ||||
| <references title='Informative References'> | <dl spacing="compact" newline="false"> | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference | <dt>16445</dt><dd>USE_PPK_INT</dd> | |||
| .I-D.ietf-ipsecme-g-ikev2.xml" ?> | <dt>16446</dt><dd>PPK_IDENTITY_KEY</dd> | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | </dl> | |||
| RFC.9370.xml" ?> | </section> | |||
| </references> | ||||
| <section anchor="comparison" title="Comparison of this Specification wit | </middle> | |||
| h RFC8784"> | <back> | |||
| <displayreference target="I-D.ietf-ipsecme-g-ikev2" to="G-IKEV2"/> | ||||
| <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.8 | ||||
| 174.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 | ||||
| 784.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9 | ||||
| 242.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <t> This specification is not intended to be a replacement for using | <!-- [I-D.ietf-ipsecme-g-ikev2] IESG State: RFC Ed Queue (in AUTH48) as of 09/18 | |||
| PPKs in IKE_AUTH as defined in <xref target="RFC8784" />. | /25 --> | |||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D. | ||||
| ietf-ipsecme-g-ikev2.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9 | ||||
| 370.xml"/> | ||||
| </references> | ||||
| </references> | ||||
| <section anchor="comparison"> | ||||
| <name>Comparison of this Specification with RFC 8784</name> | ||||
| <t> This specification is not intended to be a replacement for using PPKs | ||||
| in IKE_AUTH as defined in <xref target="RFC8784"/>. | ||||
| Instead, it is supposed to be used in situations where the approach defined there | Instead, it is supposed to be used in situations where the approach defined there | |||
| does not meet the requirements, like the need to make the initial IK E SA quantum-secure or | does not meet the requirements, like the need to make the initial IK E SA quantum-secure or | |||
| the need to choose between several available PPKs. | the need to choose between several available PPKs. | |||
| However, if the peers support both using PPKs in IKE_AUTH and this s pecification, | However, if the peers support both using PPKs in IKE_AUTH and this s pecification, | |||
| then the latter may also be used in situations where using PPKs in I KE_AUTH suffices | then the latter may also be used in situations where using PPKs in I KE_AUTH suffices | |||
| (e.g., when initial IKE SA is not required to be quantum-protected). | (e.g., when the initial IKE SA is not required to be quantum-protect | |||
| </t> | ed). | |||
| </t> | ||||
| <t> The approach defined in this document has the following advantag | <t> The approach defined in this document has the following advantages: | |||
| es: | </t> | |||
| <list style="numbers"> | <ol spacing="normal" type="1"> | |||
| <t> The main advantage of using PPK in the IKE_INTERMEDIATE exch | <li> | |||
| ange instead of the IKE_AUTH exchange is that it allows IKE_AUTH to be fully pro | <t> The main advantage of using PPK in the IKE_INTERMEDIATE exchange i | |||
| tected. | nstead of the IKE_AUTH exchange is that it allows IKE_AUTH to be fully protected | |||
| . | ||||
| This means that the ID payloads and any other sensitive content sent in the IKE_AUTH are protected against quantum computers. | This means that the ID payloads and any other sensitive content sent in the IKE_AUTH are protected against quantum computers. | |||
| The same is true for the sensitive data sent in the GSA_AUTH exc | The same is true for the sensitive data sent in the GSA_AUTH exc | |||
| hange is the G-IKEv2 protocol <xref target="I-D.ietf-ipsecme-g-ikev2" />. | hange in the G-IKEv2 protocol <xref target="I-D.ietf-ipsecme-g-ikev2"/>. | |||
| </t> | </t> | |||
| <t> In addition to the IKE_AUTH exchange being fully protected, | </li> | |||
| the initial IKE SA is also fully protected, which is important when | <li> | |||
| sensitive information is transferred over initial IKE SA. Exampl | <t> In addition to the IKE_AUTH exchange being fully protected, the in | |||
| es of such | itial IKE SA is also fully protected, which is important when | |||
| situation are the CREATE_CHILD_SA exchange of IKEv2 and the GSA_ | sensitive information is transferred over initial IKE SA. Exampl | |||
| REGISTRATION exchange of G-IKEv2 <xref target="I-D.ietf-ipsecme-g-ikev2" />. | es of such a | |||
| </t> | situation are the CREATE_CHILD_SA exchange of IKEv2 and the GSA_ | |||
| <t> As the PPK exchange happens as separate exchange before IKE_ | REGISTRATION exchange of G-IKEv2 <xref target="I-D.ietf-ipsecme-g-ikev2"/>. | |||
| AUTH this means that initiator can propose several PPKs and | </t> | |||
| responder can pick one. This is not possible when PPK exchange h | </li> | |||
| appens in the IKE_AUTH. This feature could simplify PPK | <li> | |||
| <t> As the PPK exchange happens as a separate exchange before IKE_AUTH | ||||
| , this means that initiator can propose several PPKs and | ||||
| the responder can pick one. This is not possible when the PPK ex | ||||
| change happens in the IKE_AUTH. This feature could simplify PPK | ||||
| rollover. | rollover. | |||
| </t> | </t> | |||
| <t> With this specification there is no need for the initiator t | </li> | |||
| o calculate the content of the AUTH payload twice (with and | <li> | |||
| <t> With this specification there is no need for the initiator to calc | ||||
| ulate the content of the AUTH payload twice (with and | ||||
| without PPK) to support a situation when using PPK is optional f or both sides. | without PPK) to support a situation when using PPK is optional f or both sides. | |||
| </t> | </t> | |||
| </list> | </li> | |||
| </ol> | ||||
| <t> | ||||
| The main disadvantage of the approach defined in this document is th at it always requires an additional round trip (the IKE_INTERMEDIATE exchange) | The main disadvantage of the approach defined in this document is th at it always requires an additional round trip (the IKE_INTERMEDIATE exchange) | |||
| to set up IKE SA and initial IPsec SA. However, if the IKE_INTERMEDI | to set up the IKE SA and the initial IPsec SA. However, if the IKE_I | |||
| ATE exchange has to be used for some other purposes in any case, | NTERMEDIATE exchange has to be used for some other purposes in any case, | |||
| then the PPK related payloads can be piggybacked with other payloads | then the PPK-related payloads can be piggybacked with other payloads | |||
| , thus eliminating this penalty. | , thus eliminating this penalty. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="acknowledgements" numbered="false"> | ||||
| <name>Acknowledgements</name> | ||||
| <t> Author would like to thank <contact fullname="Paul Wouters"/> for | ||||
| valuable comments and <contact fullname="Tero Kivinen"/> who made a | ||||
| thorough review of the document and proposed a lot of text improvements, | ||||
| and who also pointed out to the problem of mismatched preshared | ||||
| keys. Thanks to <contact fullname="Rebecca Guthrie"/> for providing | ||||
| comments and proposals for the document and to <contact | ||||
| fullname="Mikhail Borodin"/> for discovering the problem of calculating | ||||
| PPK Confirmation in CREATE_CHILD_SA.</t> | ||||
| </section> | ||||
| </back> | ||||
| </back> | ||||
| </rfc> | </rfc> | |||
| End of changes. 71 change blocks. | ||||
| 582 lines changed or deleted | 628 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||