| 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- | <!DOCTYPE rfc [ | |||
| ipsecme-ikev2-qr-alt-10"> | <!ENTITY nbsp " "> | |||
| <!ENTITY zwsp "​"> | ||||
| <!ENTITY nbhy "‑"> | ||||
| <!ENTITY wj "⁠"> | ||||
| ]> | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" submissionType="I ETF" ipr="trust200902" docName="draft-ietf-ipsecme-ikev2-qr-alt-10" number="9867 " consensus="true" updates="" obsoletes="" xml:lang="en" tocInclude="true" symRe fs="true" sortRefs="false" version="3"> | |||
| <?rfc toc="yes" ?> | <!-- [rfced] Document title and abbreviated title. | |||
| <?rfc symrefs="yes" ?> | ||||
| <?rfc sortrefs="no"?> | ||||
| <?rfc iprnotified="no" ?> | ||||
| <?rfc strict="yes" ?> | ||||
| <front> | a) Please note that the document title has been updated as | |||
| <title abbrev="Enhanced Use of PPKs in IKEv2">Mixing Preshared Keys in t | follows. The abbreviation "IKEv2" has been expanded | |||
| he IKE_INTERMEDIATE and in the CREATE_CHILD_SA Exchanges of IKEv2 for Post-quant | per Section 3.6 of RFC 7322 ("RFC Style Guide"). | |||
| um Security</title> | ||||
| <author initials='V.' surname="Smyslov" fullname='Valery Smyslov'> | ||||
| <organization>ELVIS-PLUS</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>PO Box 81</street> | ||||
| <city>Moscow (Zelenograd)</city> | ||||
| <code>124460</code> | ||||
| <country>RU</country> | ||||
| </postal> | ||||
| <phone>+7 495 276 0211</phone> | ||||
| <email>svan@elvis.ru</email> | ||||
| </address> | ||||
| </author> | ||||
| <date/> | ||||
| <keyword>internet key exchange</keyword> | Additionally, may we make the document title more concise by | |||
| <keyword>quantum computer</keyword> | removing "IKE_INTERMEDIATE" and "CREATE_CHILD_SA", as they are | |||
| <keyword>post quantum</keyword> | not mentioned in the Abstract, and by potentially adding "PPK", | |||
| <keyword>post-quantum</keyword> | which is mentioned in the Abstract? Please let us know if one | |||
| <keyword>quantum safe</keyword> | of the suggestions below retains the intended meaning or if | |||
| <keyword>PPK</keyword> | you prefer otherwise. | |||
| <abstract> | Original: | |||
| <t> An Internet Key Exchange protocol version 2 (IKEv2) extension de | Mixing Preshared Keys in the IKE_INTERMEDIATE and in the | |||
| fined in RFC8784 allows IPsec | CREATE_CHILD_SA Exchanges of IKEv2 for Post-quantum Security | |||
| traffic to be protected against someone storing VPN communications t | ||||
| oday | Current: | |||
| Mixing Preshared Keys in the IKE_INTERMEDIATE and | ||||
| CREATE_CHILD_SA Exchanges of the Internet Key Exchange | ||||
| Protocol Version 2 (IKEv2) for Post-Quantum Security | ||||
| Perhaps A: | ||||
| Mixing Preshared Keys in Exchanges of the Internet | ||||
| Key Exchange Protocol Version 2 (IKEv2) for | ||||
| Post-Quantum Security | ||||
| or | ||||
| Perhaps B: | ||||
| Enhanced Use of Post-Quantum Preshared Keys (PPKs) in the | ||||
| Internet Key Exchange Protocol Version 2 (IKEv2) for | ||||
| Post-Quantum Security | ||||
| b) Please verify that the abbreviated title that spans the header | ||||
| of the PDF file still matches the document title. | ||||
| Original/Current: | ||||
| Enhanced Use of PPKs in IKEv2 | ||||
| --> | ||||
| <front> | ||||
| <title abbrev="Enhanced Use of PPKs in IKEv2">Mixing Preshared Keys in the I | ||||
| KE_INTERMEDIATE and CREATE_CHILD_SA Exchanges of the Internet Key Exchange Proto | ||||
| col Version 2 (IKEv2) for Post-Quantum Security</title> | ||||
| <seriesInfo name="RFC" value="9867"/> | ||||
| <author initials="V." surname="Smyslov" fullname="Valery Smyslov"> | ||||
| <organization>ELVIS-PLUS</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>PO Box 81</street> | ||||
| <city>Moscow (Zelenograd)</city> | ||||
| <code>124460</code> | ||||
| <country>Russian Federation</country> | ||||
| </postal> | ||||
| <phone>+7 495 276 0211</phone> | ||||
| <email>svan@elvis.ru</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="September" year="2025"/> | ||||
| <keyword>internet key exchange</keyword> | ||||
| <keyword>quantum computer</keyword> | ||||
| <keyword>post quantum</keyword> | ||||
| <keyword>post-quantum</keyword> | ||||
| <keyword>quantum safe</keyword> | ||||
| <keyword>PPK</keyword> | ||||
| <abstract> | ||||
| <t> An Internet Key Exchange Protocol Version 2 (IKEv2) extension defined | ||||
| in RFC 8784 allows IPsec | ||||
| traffic to be protected against someone storing VPN communications | ||||
| 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 n the IKE traffic. | WG was that it was more important to protect the IPsec traffic than the IKE traffic. | |||
| <!-- At the time this extension was being developed, it was a consen sus in the IPsecME WG that it was the IPsec traffic | <!-- At the time this extension was being developed, it was a consen sus in the IPsecME WG that it was the IPsec traffic | |||
| that mostly needed to be protected. --> It was believed that informa tion transferred over IKE SA (including peers' identities) is less important | that mostly needed to be protected. --> It was believed that informa tion transferred over IKE SA (including peers' identities) is less important | |||
| and extending the protection to also cover initial IKE SA would requ ire serious modifications to core IKEv2 protocol. | and that extending the protection to also cover the initial IKE SA w ould require serious modifications to the 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 | <t> The USE_PPK_INT is a Status Type IKEv2 notification. Its Notify Mess | |||
| Message Type | age Type | |||
| is <TBA1 by IANA>, Protocol ID and SPI Size are both set t | is 16445; the Protocol ID and Security Parameter Index (SPI) Siz | |||
| o 0. | e are both set to 0. | |||
| This specification does not define any data that this notificati on may contain, | 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. | 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 | Implementations <bcp14>MUST</bcp14> ignore any data in the notif | |||
| ication they do not understand. | ication that they do not understand. | |||
| </t> | </t> | |||
| <t> Note that this negotiation is independent from the negotiation of us | ||||
| <t> Note that this negotiation is independent from negotiation of us | ing PPKs as specified in <xref target="RFC8784"/>. | |||
| ing PPKs as specified in <xref target="RFC8784" />. | An initiator that supports both the use of PPKs in IKE_AUTH <xref ta | |||
| An initiator that supports both the use of PPKs in IKE_AUTH <xref ta | rget="RFC8784"/> and IKE_INTERMEDIATE <bcp14>MAY</bcp14> include both | |||
| rget="RFC8784" /> and in IKE_INTERMEDIATE <bcp14>MAY</bcp14> include both | the USE_PPK_INT and USE_PPK notifications if | |||
| the USE_PPK_INT and the USE_PPK notifications if | configured to do so. However, if the responder supports both specifi | |||
| configured to so. However, if the responder supports both specificat | cations | |||
| ions | and is configured to use PPKs, it has to choose one to use; thus, it | |||
| and is configured to use PPKs, it has to choose one to use, thus it | <bcp14>MUST</bcp14> return | |||
| <bcp14>MUST</bcp14> return | either a USE_PPK_INT or a USE_PPK notification in the response but n | |||
| either USE_PPK_INT or USE_PPK notification in the response, but not | ot both. | |||
| both. | </t> | |||
| </t> | <t> If the initiator did not propose using this extension in the IKE_SA_ | |||
| INIT request and the responder's policy | ||||
| <t> If the initiator did not propose using this extension in the IKE | ||||
| _SA_INIT request and 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 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 | |||
| length of PPK_ID by subtracting 8 (the length of PPK Confirmation) | ||||
| from the Notification Data length.</dd> | ||||
| <dt>PPK Confirmation (8 octets):</dt><dd><t>A value that allows the | ||||
| 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_I | ||||
| DENTITY_KEY notification(s) | ||||
| <bcp14>MUST</bcp14> be sent in the last one, i.e., in the IKE_INTERM | ||||
| EDIATE exchange immediately preceding the IKE_AUTH exchange. | ||||
| If the last IKE_INTERMEDIATE exchange contains other payloads aimed for some other purpose, | If the last IKE_INTERMEDIATE exchange contains other payloads aimed for some other purpose, | |||
| then the notification(s) <bcp14>MAY</bcp14> be piggybacked with thes e payloads. | then the notification(s) <bcp14>MAY</bcp14> be piggybacked with thes e payloads. | |||
| <figure align="center"> | </t> | |||
| <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 | ||||
| Original: | ||||
| 1. If the responder is configured with one of the PPKs which IDs | ||||
| were sent by the initiator and this PPK matches the initiator's | ||||
| one (based on the information from the PPK Confirmation field), | ||||
| then the responder selects this PPK and returns back its identity | ||||
| in the PPK_IDENTITY notification. | ||||
| Perhaps: | ||||
| 1. If the responder is configured with a PPK that was 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. | ||||
| b) Section 3.1: | ||||
| Original | ||||
| 2. If the responder does not have any of the PPKs 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 using PPK is | ||||
| mandatory for the responder, then it MUST return | ||||
| AUTHENTICATION_FAILED notification and abort creating the IKE SA. | ||||
| 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. | ||||
| c) Section 3.2: | ||||
| Original: | ||||
| In case the responder does not support (or is not configured for) | ||||
| using 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 PPKs, 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 [RFC7296]. | ||||
| Perhaps: | ||||
| If the responder does not support (or is not configured for) | ||||
| using PPKs in the CREATE_CHILD_SA exchange or does not have any of | ||||
| the PPKs that were among the IDs sent by the initiator, or if the | ||||
| responder has some of proposed PPKs but their values are mismatched | ||||
| from the initiator's PPKs (based on the information from the PPK | ||||
| Confirmation field), then it does not include any PPK_IDENTITY | ||||
| notifications in the response, and new SA is created as defined in | ||||
| IKEv2 [RFC7296]. | ||||
| d) Section 3.2: | ||||
| Original: | ||||
| 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 request or the responder does not have any of the PPKs which IDs | ||||
| were sent by the initiator, or it has some of proposed PPKs, but | ||||
| their values mismatch the initiator's ones (based on the information | ||||
| from the PPK Confirmation field), then the responder MUST return the | ||||
| NO_PROPOSAL_CHOSEN notification. | ||||
| Perhaps: | ||||
| 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 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 one of the PPKs | ||||
| which IDs were sent by the initiator and this PPK matches the init iator's one | 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 --> | <!-- 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 | (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 | and returns back its identity in the PPK_IDENTITY notification. Th e PPK_IDENTITY notification | |||
| is defined in <xref target="RFC8784" />. | is defined in <xref target="RFC8784"/>. | |||
| </t> | ||||
| <figure align="center"> | <artwork align="left"><![CDATA[ | |||
| <artwork align="left"><![CDATA[ | ||||
| Initiator Responder | Initiator Responder | |||
| --------------------------------------------------------------- | --------------------------------------------------------------- | |||
| <--- HDR, SK { ... N(PPK_IDENTITY, PPK_ID_i)} | <--- HDR, SK { ... N(PPK_IDENTITY, PPK_ID_i)}]]></artwork> | |||
| ]]></artwork> | <t> | |||
| </figure> | In this case, the IKE_AUTH exchange is performed as defined in IKE | |||
| v2 <xref target="RFC7296"/>. | ||||
| In this case the IKE_AUTH exchange is performed as defined in IKEv | However, the keys for the IKE SA are computed using PPK, as descri | |||
| 2 <xref target="RFC7296" />. | bed in <xref target="init_keys"/>. | |||
| 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 | If the responder returns a PPK identity that was not proposed by t he initiator, then the initiator | |||
| <bcp14>MUST</bcp14> treat this as a fatal and abort the IKE SA est | <bcp14>MUST</bcp14> treat this as fatal and abort the IKE SA estab | |||
| ablishment. | lishment. | |||
| </li> | </t> | |||
| </li> | ||||
| <li anchor="case2"> If the responder does not have any of the PPKs | <li anchor="case2"> | |||
| which IDs were sent by the initiator | <t> If the responder does not have any of the PPKs which IDs were se | |||
| or it has some of the proposed PPKs, but their values mismatch the | nt by the initiator, | |||
| initiator's ones | or if it has some of the proposed PPKs but their values mismatch t | |||
| he initiator's ones | ||||
| (based on the information from the PPK Confirmation field), and us ing PPK is mandatory for the responder, | (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. | then it <bcp14>MUST</bcp14> return AUTHENTICATION_FAILED notificat ion and abort creating the IKE SA. | |||
| </t> | ||||
| <figure align="center"> | <artwork align="left"><![CDATA[ | |||
| <artwork align="left"><![CDATA[ | ||||
| Initiator Responder | Initiator Responder | |||
| --------------------------------------------------------------- | --------------------------------------------------------------- | |||
| <--- HDR, SK {... N(AUTHENTICATION_FAILED)} | <--- HDR, SK {... N(AUTHENTICATION_FAILED)}]]></artwork> | |||
| ]]></artwork> | </li> | |||
| </figure> | <li anchor="case3"> | |||
| <t> <!-- If the responder does not have any of the PPKs which IDs we | ||||
| </li> | re sent by the initiator --> | |||
| If the responder does not have any PPKs proposed by the initiator, | ||||
| <li anchor="case3"> <!-- If the responder does not have any of the | or if it has only some of the proposed PPKs but their values misma | |||
| PPKs which IDs were sent by the initiator --> | tch the initiator's ones | |||
| If the responder does not have any PPKs proposed by the initiator | (based on the information from the PPK Confirmation field), and if | |||
| or it has some of the proposed PPKs, but their values mismatch the | using PPK is optional for the responder, | |||
| 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. | then it does not include any PPK_IDENTITY notification to the resp onse. | |||
| </t> | ||||
| <figure align="center"> | <artwork align="left"><![CDATA[ | |||
| <artwork align="left"><![CDATA[ | ||||
| Initiator Responder | Initiator Responder | |||
| --------------------------------------------------------------- | --------------------------------------------------------------- | |||
| <--- HDR, SK {...} | <--- HDR, SK {...}]]></artwork> | |||
| ]]></artwork> | <t> | |||
| </figure> | In this case, the initiator cannot achieve quantum computer resist | |||
| ance using the proposed PPKs. | ||||
| In this case the initiator cannot achieve quantum computer resista | ||||
| nce using the proposed PPKs. | ||||
| If this is a requirement for the initiator, then it <bcp14>MUST</b cp14> abort creating the IKE SA. | 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 | Otherwise, the initiator continues with the IKE_AUTH exchange as d | |||
| escribed in IKEv2 <xref target="RFC7296" />. | escribed in IKEv2 <xref target="RFC7296"/>. | |||
| </li> | ||||
| </ol> | ||||
| <t><xref target="responders_behavior"/> summarizes the above logic f | ||||
| or the responder: | ||||
| </t> | </t> | |||
| </li> | ||||
| <table title="Responder's behavior" anchor="responders_behavior"> | </ol> | |||
| <thead> | <t><xref target="responders_behavior"/> summarizes the above logic for t | |||
| <tr> | he responder:</t> | |||
| <th>Received USE_PPK_INT</th> | <table anchor="responders_behavior"> | |||
| <th>Supports USE_PPK_INT</th> | <name>Responder's Behavior</name> | |||
| <th>Has one of proposed PPKs</th> | <thead> | |||
| <th>PPK is mandatory for initial IKE SA</th> | <tr> | |||
| <th>Action</th> | <th>Received USE_PPK_INT</th> | |||
| </tr> | <th>Supports USE_PPK_INT</th> | |||
| </thead> | <th>Has one of the proposed PPKs</th> | |||
| <tbody> | <th>PPK is mandatory for initial IKE SA</th> | |||
| <tr> | <th>Action</th> | |||
| <td>No</td> | </tr> | |||
| <td>*</td> | </thead> | |||
| <td>*</td> | <tbody> | |||
| <td>No</td> | <tr> | |||
| <td><xref target="RFC8784" /> (if proposed) or standard IKEv2 | <td>No</td> | |||
| protocol</td> | <td>*</td> | |||
| </tr> | <td>*</td> | |||
| <tr> | <td>No</td> | |||
| <td>No</td> | <td> | |||
| <td>Yes</td> | <xref target="RFC8784"/> (if proposed) or standard IKEv2 protoco | |||
| <td>*</td> | l</td> | |||
| <td>Yes</td> | </tr> | |||
| <td>Send NO_PROPOSAL_CHOSEN</td> | <tr> | |||
| </tr> | <td>No</td> | |||
| <tr> | <td>Yes</td> | |||
| <td>Yes</td> | <td>*</td> | |||
| <td>Yes</td> | <td>Yes</td> | |||
| <td>Yes</td> | <td>Send NO_PROPOSAL_CHOSEN</td> | |||
| <td>*</td> | </tr> | |||
| <td><xref target="case1"/> (use this extension)</td> | <tr> | |||
| </tr> | <td>Yes</td> | |||
| <tr> | <td>Yes</td> | |||
| <td>Yes</td> | <td>Yes</td> | |||
| <td>Yes</td> | <td>*</td> | |||
| <td>No</td> | <td> | |||
| <td>Yes</td> | <xref target="case1"/> (use this extension)</td> | |||
| <td><xref target="case2"/> (abort negotiation)</td> | </tr> | |||
| </tr> | <tr> | |||
| <tr> | <td>Yes</td> | |||
| <td>Yes</td> | <td>Yes</td> | |||
| <td>Yes</td> | <td>No</td> | |||
| <td>No</td> | <td>Yes</td> | |||
| <td>No</td> | <td> | |||
| <td><xref target="case3"/> (standard IKEv2 protocol)</td> | <xref target="case2"/> (abort negotiation)</td> | |||
| </tr> | </tr> | |||
| </tbody> | <tr> | |||
| </table> | <td>Yes</td> | |||
| <td>Yes</td> | ||||
| <t> Since the responder selects a PPK before it knows the identity o | <td>No</td> | |||
| f the initiator, a situation may occur, | <td>No</td> | |||
| when the responder agrees to use some PPK in the IKE_INTERMEDIATE ex | <td> | |||
| change, but during the IKE_AUTH exchange | <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 last IKE_INTERMEDIATE exchange, | |||
| ge, the IKE SA keys are recalculated. | the IKE SA keys are recalculated. | |||
| Note that if the IKE SA keys are also recalculated as the result o f the other actions performed in the IKE_INTERMEDIATE exchange | Note that if the IKE SA keys are also recalculated as the result o f the other actions performed in the IKE_INTERMEDIATE exchange | |||
| (for example, as defined in <xref target= "RFC9370" />), then appl | (for example, as defined in <xref target="RFC9370"/>), then applyi | |||
| ying the PPK | ng the PPK | |||
| <bcp14>MUST</bcp14> be done after all of them, so that recalculati | <bcp14>MUST</bcp14> be done after all of them so that recalculatin | |||
| ng IKE SA keys with the PPK | g IKE SA keys with the PPK | |||
| is the last action before they are used in the IKE_AUTH exchange. | is the last action before they are used in the IKE_AUTH exchange. | |||
| </t> | </t> | |||
| <t> The IKE SA keys are computed differently compared to how PPKs are | ||||
| used in IKE_AUTH. | ||||
| <t> The IKE SA keys are computed differently compared to how PPKs | <!--[rfced] Is the use of the apostrophe in "SKEYSEED'" correct? We | |||
| are used in IKE_AUTH. | ask as only "SKEYSEED" appears in RFCs 7296 and 8784. We note | |||
| that there are five instances in this document. | ||||
| One example | ||||
| Original: | ||||
| A new SKEYSEED' value is computed using the | ||||
| negotiated PPK and the most recently computed | ||||
| SK_d key. | ||||
| --> | ||||
| A new SKEYSEED' value is computed using the negotiated PPK and the most recently computed SK_d key. | A new SKEYSEED' value is computed using the negotiated PPK and the most recently computed SK_d key. | |||
| Note that the PPK is applied to SK_d exactly how it is specified i n <xref target="RFC8784" />, | Note that the PPK is applied to SK_d exactly how it is specified i n <xref target="RFC8784"/>, | |||
| and the result is used as SKEYSEED'. | and the result is used as SKEYSEED'. | |||
| <figure align="center"> | </t> | |||
| <artwork align="left"><![CDATA[ | <artwork align="left"><![CDATA[ | |||
| SKEYSEED' = prf+ (PPK, SK_d) | SKEYSEED' = prf+ (PPK, SK_d)]]></artwork> | |||
| ]]></artwork> | <t> | |||
| </figure> | ||||
| Then the SKEYSEED' is used to recalculate all SK_* keys as defined in Section 2.14 of <xref target="RFC7296" />. | Then the SKEYSEED' is used to recalculate all SK_* keys as defined in <xref target="RFC7296" section="2.14"/>. | |||
| <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> | <t> | |||
| In case the responder does not support (or is not configured for) us | 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 | 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 | which IDs were sent by the initiator, or if it has some of proposed | |||
| s, but their values mismatch the initiator's ones | PPKs but their values mismatch the initiator's PPKs | |||
| (based on the information from the PPK Confirmation field), then it does not include any PPK_IDENTITY notification in the response | (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, | and a new SA is created as defined in IKEv2 <xref target="RFC7296"/> . If this is inappropriate for the initiator, | |||
| it can immediately delete this SA. | it can immediately delete this SA. | |||
| </t> | </t> | |||
| <t> If using PPKs in CREATE_CHILD_SA is mandatory for the responder, and | ||||
| <t> If using PPKs in CREATE_CHILD_SA is mandatory for the responder | the initiator does not include any PPK_IDENTITY_KEY notifications in the reques | |||
| and the initiator does not include any PPK_IDENTITY_KEY notification in the requ | t, | |||
| est | or if the responder does not have any of the PPKs which IDs were sen | |||
| or the responder does not have any of the PPKs which IDs were sent b | t by the initiator, or it has some of proposed PPKs but their values mismatch | |||
| 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 | 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. | notification. | |||
| </t> | </t> | |||
| <t> Otherwise, the new SA is created using the selected PPK. | ||||
| <t> Otherwise the new SA is created using the selected PPK. | </t> | |||
| </t> | <section anchor="create_child_sa_keys"> | |||
| <name>Computing Keys</name> | ||||
| <section anchor="create_child_sa_keys" title="Computing Keys"> | <t> For the purpose of calculation session keys for the new SA, the cu | |||
| <t> For the purpose of calculation session keys for the new SA, th | rrent SK_d key is first | |||
| e current 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 | <!-- [rfced] We're having trouble parsing "impact of appearing a CRQC | |||
| mpact | to". Is "appearing" the preferred term, or could this sentence be | |||
| of appearing a CRQC to various cryptographic primitives used in IKEv | rephrased as shown below for clarity? | |||
| 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"> | Original: | |||
| <t>This document defines two new Notify Message Types in the "IKEv2 | Section 4 of [RFC9370] discusses the potential impact of appearing a | |||
| Notify Message Status Types" registry:</t> | CRQC to various cryptographic primitives used in IKEv2. | |||
| <figure align="center"> | ||||
| <artwork align="left"><![CDATA[ | ||||
| <TBA1> USE_PPK_INT | ||||
| <TBA2> PPK_IDENTITY_KEY | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section title="Acknowledgements" anchor="acknowledgements"> | Perhaps: | |||
| <t> Author would like to thank Paul Wouters for valuable comments an | Section 4 of [RFC9370] discusses the potential impact of when a | |||
| d Tero Kivinen | CRQC is accessible to various cryptographic primitives used in IKEv2. | |||
| 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 appearing a CRQC to various cryptographic primitives used in IKEv | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | 2. | |||
| RFC.2119.xml" ?> | It is worthwhile to repeat here that it is believed that the securit | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | y of symmetric | |||
| RFC.8174.xml" ?> | key cryptographic primitives will not be affected by CRQC. | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | </t> | |||
| RFC.7296.xml" ?> | </section> | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | <section anchor="iana"> | |||
| RFC.8784.xml" ?> | <name>IANA Considerations</name> | |||
| <?rfc include="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | <t>Per this document, IANA has added the following Notify Message Types in | |||
| RFC.9242.xml" ?> | the "IKEv2 Notify Message Status Types" registry:</t> | |||
| </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> | ||||
| <!-- [rfced] Some author comments are present in the XML. Please confirm that | ||||
| no updates related to these comments are outstanding. Note that the | ||||
| comments will be deleted prior to publication. | ||||
| --> | ||||
| <!-- [rfced] FYI - We have added expansions for the following abbreviations | ||||
| per Section 3.6 of RFC 7322 ("RFC Style Guide"). Please review each | ||||
| expansion in the document carefully to ensure correctness. | ||||
| Security Parameter Index (SPI) | ||||
| --> | ||||
| <!-- [rfced] Please review the "Inclusive Language" portion of the online | ||||
| Style Guide <https://www.rfc-editor.org/styleguide/part2/#inclusive_language> | ||||
| and let us know if any changes are needed. Updates of this nature typically | ||||
| result in more precise language, which is helpful for readers. | ||||
| Note that our script did not flag any words in particular, but this should | ||||
| still be reviewed as a best practice. | ||||
| --> | ||||
| </back> | ||||
| </rfc> | </rfc> | |||
| End of changes. 84 change blocks. | ||||
| 534 lines changed or deleted | 674 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||