rfc9370.txt | rfc9370-alternate.txt | |||
---|---|---|---|---|
skipping to change at line 332 ¶ | skipping to change at line 332 ¶ | |||
2.2.1. IKE_SA_INIT Round: Negotiation | 2.2.1. IKE_SA_INIT Round: Negotiation | |||
Multiple key exchanges are negotiated using the standard IKEv2 | Multiple key exchanges are negotiated using the standard IKEv2 | |||
mechanism via SA payload. For this purpose, seven new transform | mechanism via SA payload. For this purpose, seven new transform | |||
types are defined: Additional Key Exchange 1 (AKE1) with IANA- | types are defined: Additional Key Exchange 1 (AKE1) with IANA- | |||
assigned value 6, Additional Key Exchange 2 (AKE2) (7), Additional | assigned value 6, Additional Key Exchange 2 (AKE2) (7), Additional | |||
Key Exchange 3 (AKE3) (8), Additional Key Exchange 4 (AKE4) (9), | Key Exchange 3 (AKE3) (8), Additional Key Exchange 4 (AKE4) (9), | |||
Additional Key Exchange 5 (AKE5) (10), Additional Key Exchange 6 | Additional Key Exchange 5 (AKE5) (10), Additional Key Exchange 6 | |||
(AKE6) (11), and Additional Key Exchange 7 (AKE7) (12). They are | (AKE6) (11), and Additional Key Exchange 7 (AKE7) (12). They are | |||
collectively called "Additional Key Exchange Transform Types" in this | collectively called "Additional Key Exchange (AKE*) Transform Types" | |||
document and have slightly different semantics than the existing | in this document and have slightly different semantics than the | |||
IKEv2 Transform Types. They are interpreted as an indication of | existing IKEv2 Transform Types. They are interpreted as an | |||
additional key exchange methods that peers agree to perform in a | indication of additional key exchange methods that peers agree to | |||
series of IKE_INTERMEDIATE exchanges following the IKE_SA_INIT | perform in a series of IKE_INTERMEDIATE exchanges following the | |||
exchange. The allowed Transform IDs for these transform types are | IKE_SA_INIT exchange. The allowed Transform IDs for these transform | |||
the same as the IDs for Transform Type 4, so they all share a single | types are the same as the IDs for Transform Type 4, so they all share | |||
IANA registry for Transform IDs. | a single IANA registry for Transform IDs. | |||
The key exchange method negotiated via Transform Type 4 always takes | The key exchange method negotiated via Transform Type 4 always takes | |||
place in the IKE_SA_INIT exchange, as defined in [RFC7296]. | place in the IKE_SA_INIT exchange, as defined in [RFC7296]. | |||
Additional key exchanges negotiated via newly defined transforms MUST | Additional key exchanges negotiated via newly defined transforms MUST | |||
take place in a series of IKE_INTERMEDIATE exchanges following the | take place in a series of IKE_INTERMEDIATE exchanges following the | |||
IKE_SA_INIT exchange, performed in an order of the values of their | IKE_SA_INIT exchange, performed in an order of the values of their | |||
Transform Types. This is so that the key exchange negotiated using | Transform Types. This is so that the key exchange negotiated using | |||
Additional Key Exchange i always precedes that of Additional Key | Additional Key Exchange i always precedes that of Additional Key | |||
Exchange i + 1. Each additional key exchange method MUST be fully | Exchange i + 1. Each additional key exchange method MUST be fully | |||
completed before the next one is started. | completed before the next one is started. | |||
With these semantics, note that Additional Key Exchange Transform | With these semantics, note that Additional Key Exchange (AKE*) | |||
Types are not associated with any particular type of key exchange and | Transform Types are not associated with any particular type of key | |||
do not have any Transform IDs that are specific per Transform Type | exchange and do not have any Transform IDs that are specific per | |||
IANA registry. Instead, they all share a single registry for | Transform Type IANA registry. Instead, they all share a single | |||
Transform IDs, namely "Transform Type 4 - Key Exchange Method | registry for Transform IDs, namely "Transform Type 4 - Key Exchange | |||
Transform IDs". All key exchange algorithms (both classical or post- | Method Transform IDs". All key exchange algorithms (both classical | |||
quantum) should be added to this registry. This approach gives peers | or post-quantum) should be added to this registry. This approach | |||
flexibility in defining the ways they want to combine different key | gives peers flexibility in defining the ways they want to combine | |||
exchange methods. | different key exchange methods. | |||
When forming a proposal, the initiator adds transforms for the | When forming a proposal, the initiator adds transforms for the | |||
IKE_SA_INIT exchange using Transform Type 4. In most cases, they | IKE_SA_INIT exchange using Transform Type 4. In most cases, they | |||
will contain classical (EC)DH key exchange methods, but that is not a | will contain classical (EC)DH key exchange methods, but that is not a | |||
requirement. Additional key exchange methods are proposed using | requirement. Additional key exchange methods are proposed using | |||
Additional Key Exchange Transform Types. All of these transform | Additional Key Exchange (AKE*) Transform Types. All of these | |||
types are optional; the initiator is free to select any of them for | transform types are optional; the initiator is free to select any of | |||
proposing additional key exchange methods. Consequently, if none of | them for proposing additional key exchange methods. Consequently, if | |||
the Additional Key Exchange Transform Types are included in the | none of the Additional Key Exchange (AKE*) Transform Types are | |||
proposal, then this proposal indicates the performing of standard | included in the proposal, then this proposal indicates the performing | |||
IKEv2, as defined in [RFC7296]. On the other hand, if the initiator | of standard IKEv2, as defined in [RFC7296]. On the other hand, if | |||
includes any Additional Key Exchange Transform Type in the proposal, | the initiator includes any Additional Key Exchange (AKE*) Transform | |||
the responder MUST select one of the algorithms proposed using this | Type in the proposal, the responder MUST select one of the algorithms | |||
type. Note that this is not a new requirement; this behavior is | proposed using this type. Note that this is not a new requirement; | |||
already specified in Section 2.7 of [RFC7296]. A Transform ID NONE | this behavior is already specified in Section 2.7 of [RFC7296]. A | |||
MAY be added to those transform types that contain key exchange | Transform ID NONE MAY be added to those transform types that contain | |||
methods which the initiator believes are optional according to its | key exchange methods which the initiator believes are optional | |||
local policy. | according to its local policy. | |||
The responder performs the negotiation using the standard IKEv2 | The responder performs the negotiation using the standard IKEv2 | |||
procedure described in Section 3.3 of [RFC7296]. However, for the | procedure described in Section 3.3 of [RFC7296]. However, for the | |||
Additional Key Exchange Transform Types, the responder's choice MUST | Additional Key Exchange (AKE*) Transform Types, the responder's | |||
NOT contain duplicated algorithms (those with an identical Transform | choice MUST NOT contain duplicated algorithms (those with an | |||
ID and attributes), except for the Transform ID of NONE. An | identical Transform ID and attributes), except for the Transform ID | |||
algorithm is represented as a transform. In some cases, the | of NONE. An algorithm is represented as a transform. In some cases, | |||
transform could include a set of associated attributes that define | the transform could include a set of associated attributes that | |||
details of the algorithm. In this case, two transforms can be the | define details of the algorithm. In this case, two transforms can be | |||
same, but the attributes must be different. Additionally, the order | the same, but the attributes must be different. Additionally, the | |||
of the attributes does not affect the equality of the algorithm, so | order of the attributes does not affect the equality of the | |||
the following two transforms define the same algorithm: "ID=alg1, | algorithm, so the following two transforms define the same algorithm: | |||
ATTR1=attr1, ATTR2=attr2" and "ID=alg1, ATTR2=attr2, ATTR1=attr1". | "ID=alg1, ATTR1=attr1, ATTR2=attr2" and "ID=alg1, ATTR2=attr2, | |||
If the responder is unable to select algorithms that are not | ATTR1=attr1". If the responder is unable to select algorithms that | |||
duplicated for each proposed key exchange (either because the | are not duplicated for each proposed key exchange (either because the | |||
proposal contains too few choices or due to the local policy | proposal contains too few choices or due to the local policy | |||
restrictions on using the proposed algorithms), then the responder | restrictions on using the proposed algorithms), then the responder | |||
MUST reject the message with an error notification of type | MUST reject the message with an error notification of type | |||
NO_PROPOSAL_CHOSEN. If the responder's message contains one or more | NO_PROPOSAL_CHOSEN. If the responder's message contains one or more | |||
duplicated choices, the initiator should log the error and MUST treat | duplicated choices, the initiator should log the error and MUST treat | |||
the exchange as failed. The initiator MUST NOT initiate any | the exchange as failed. The initiator MUST NOT initiate any | |||
IKE_INTERMEDIATE (or IKE_FOLLOWUP_KE) exchanges so that no new SA is | IKE_INTERMEDIATE (or IKE_FOLLOWUP_KE) exchanges so that no new SA is | |||
created. If this happens in the CREATE_CHILD_SA exchange, then the | created. If this happens in the CREATE_CHILD_SA exchange, then the | |||
initiator MAY delete the IKE SA over which the invalid message was | initiator MAY delete the IKE SA over which the invalid message was | |||
received by sending a Delete payload. | received by sending a Delete payload. | |||
If the responder selects NONE for some Additional Key Exchange | If the responder selects NONE for some Additional Key Exchange (AKE*) | |||
Transform Types (provided they are proposed by the initiator), then | Transform Types (provided they are proposed by the initiator), then | |||
any corresponding additional key exchanges MUST NOT take place. | any corresponding additional key exchanges MUST NOT take place. | |||
Therefore, if the initiator includes NONE in all of the Additional | Therefore, if the initiator includes NONE in all of the Additional | |||
Key Exchange Transform Types and the responder selects this value for | Key Exchange (AKE*) Transform Types and the responder selects this | |||
all of them, then no IKE_INTERMEDIATE exchanges performing additional | value for all of them, then no IKE_INTERMEDIATE exchanges performing | |||
key exchanges will take place between the peers. Note that the | additional key exchanges will take place between the peers. Note | |||
IKE_INTERMEDIATE exchanges may still take place for other purposes. | that the IKE_INTERMEDIATE exchanges may still take place for other | |||
purposes. | ||||
The initiator MAY propose Additional Key Exchange Transform Types | The initiator MAY propose Additional Key Exchange (AKE*) Transform | |||
that are not consecutive, for example, proposing Additional Key | Types that are not consecutive, for example, proposing Additional Key | |||
Exchange 2 (AKE2) and Additional Key Exchange 5 (AKE5) Transform | Exchange 2 (AKE2) and Additional Key Exchange 5 (AKE5) Transform | |||
Types only. The responder MUST treat all of the omitted Additional | Types only. The responder MUST treat all of the omitted Additional | |||
Key Exchange transforms as if they were proposed with Transform ID | Key Exchange transforms as if they were proposed with Transform ID | |||
NONE. | NONE. | |||
Below is an example of the SA payload in the initiator's IKE_SA_INIT | Below is an example of the SA payload in the initiator's IKE_SA_INIT | |||
request message. Here, the abbreviation "AKEi" is used to denote the | request message. Here, the abbreviation "AKEi" is used to denote the | |||
i-th Additional Key Exchange Transform Type defined in this document; | i-th Additional Key Exchange (AKE*) Transform Type defined in this | |||
the abbreviation "KE" is used for the Key Exchange transform, which | document; the abbreviation "KE" is used for the Key Exchange | |||
this document renames from the Diffie-Hellman Group transform. | transform, which this document renames from the Diffie-Hellman Group | |||
Additionally, the notations PQ_KEM_1, PQ_KEM_2, and PQ_KEM_3 are used | transform. Additionally, the notations PQ_KEM_1, PQ_KEM_2, and | |||
to represent Transform IDs that have yet to be defined of some | PQ_KEM_3 are used to represent Transform IDs that have yet to be | |||
popular post-quantum key exchange methods. | defined of some popular post-quantum key exchange methods. | |||
SA Payload | SA Payload | |||
| | | | |||
+--- Proposal #1 ( Proto ID = IKE(1), SPI Size = 8, | +--- Proposal #1 ( Proto ID = IKE(1), SPI Size = 8, | |||
| 9 transforms, SPI = 0x35a1d6f22564f89d ) | | 9 transforms, SPI = 0x35a1d6f22564f89d ) | |||
| | | | |||
+-- Transform ENCR ( ID = ENCR_AES_GCM_16 ) | +-- Transform ENCR ( ID = ENCR_AES_GCM_16 ) | |||
| +-- Attribute ( Key Length = 256 ) | | +-- Attribute ( Key Length = 256 ) | |||
| | | | |||
+-- Transform KE ( ID = 4096-bit MODP Group ) | +-- Transform KE ( ID = 4096-bit MODP Group ) | |||
skipping to change at line 483 ¶ | skipping to change at line 484 ¶ | |||
+-- Transform KE ( ID = 4096-bit MODP Group ) | +-- Transform KE ( ID = 4096-bit MODP Group ) | |||
| | | | |||
+-- Transform PRF ( ID = PRF_HMAC_SHA2_256 ) | +-- Transform PRF ( ID = PRF_HMAC_SHA2_256 ) | |||
| | | | |||
+-- Transform AKE2 ( ID = PQ_KEM_2 ) | +-- Transform AKE2 ( ID = PQ_KEM_2 ) | |||
| | | | |||
+-- Transform AKE3 ( ID = PQ_KEM_1 ) | +-- Transform AKE3 ( ID = PQ_KEM_1 ) | |||
| | | | |||
+-- Transform AKE5 ( ID = NONE ) | +-- Transform AKE5 ( ID = NONE ) | |||
If the initiator includes any Additional Key Exchange Transform Types | If the initiator includes any Additional Key Exchange (AKE*) | |||
into the SA payload in the IKE_SA_INIT exchange request message, then | Transform Types into the SA payload in the IKE_SA_INIT exchange | |||
it MUST also negotiate the use of the IKE_INTERMEDIATE exchange, as | request message, then it MUST also negotiate the use of the | |||
described in [RFC9242] by including an | IKE_INTERMEDIATE exchange, as described in [RFC9242] by including an | |||
INTERMEDIATE_EXCHANGE_SUPPORTED notification in the same message. If | INTERMEDIATE_EXCHANGE_SUPPORTED notification in the same message. If | |||
the responder agrees to use additional key exchanges while | the responder agrees to use additional key exchanges while | |||
establishing an initial IKE SA, it MUST also return this notification | establishing an initial IKE SA, it MUST also return this notification | |||
in the IKE_SA_INIT response message, confirming that IKE_INTERMEDIATE | in the IKE_SA_INIT response message, confirming that IKE_INTERMEDIATE | |||
exchange is supported and will be used for transferring additional | exchange is supported and will be used for transferring additional | |||
key exchange data. If the IKE_INTERMEDIATE exchange is not | key exchange data. If the IKE_INTERMEDIATE exchange is not | |||
negotiated, then the peers MUST treat any Additional Key Exchange | negotiated, then the peers MUST treat any Additional Key Exchange | |||
Transform Types in the IKE_SA_INIT exchange messages as unknown | (AKE*) Transform Types in the IKE_SA_INIT exchange messages as | |||
transform types and skip the proposals they appear in. If no other | unknown transform types and skip the proposals they appear in. If no | |||
proposals are present in the SA payload, the peers will proceed as if | other proposals are present in the SA payload, the peers will proceed | |||
no proposal has been chosen (i.e., the responder will send a | as if no proposal has been chosen (i.e., the responder will send a | |||
NO_PROPOSAL_CHOSEN notification). | NO_PROPOSAL_CHOSEN notification). | |||
Initiator Responder | Initiator Responder | |||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | |||
HDR, SAi1(.. AKE*...), KEi, Ni, | HDR, SAi1(.. AKE*...), KEi, Ni, | |||
N(INTERMEDIATE_EXCHANGE_SUPPORTED) ---> | N(INTERMEDIATE_EXCHANGE_SUPPORTED) ---> | |||
HDR, SAr1(.. AKE*...), KEr, Nr, | HDR, SAr1(.. AKE*...), KEr, Nr, | |||
[CERTREQ], | [CERTREQ], | |||
<--- N(INTERMEDIATE_EXCHANGE_SUPPORTED) | <--- N(INTERMEDIATE_EXCHANGE_SUPPORTED) | |||
skipping to change at line 578 ¶ | skipping to change at line 579 ¶ | |||
creating additional Child SAs, rekeying these Child SAs, and rekeying | creating additional Child SAs, rekeying these Child SAs, and rekeying | |||
IKE SA itself. When creating or rekeying Child SAs, the peers may | IKE SA itself. When creating or rekeying Child SAs, the peers may | |||
optionally perform a key exchange to add a fresh entropy into the | optionally perform a key exchange to add a fresh entropy into the | |||
session keys. In the case of an IKE SA rekey, the key exchange is | session keys. In the case of an IKE SA rekey, the key exchange is | |||
mandatory. Peers supporting this specification may want to use | mandatory. Peers supporting this specification may want to use | |||
multiple key exchanges in these situations. | multiple key exchanges in these situations. | |||
Using multiple key exchanges with a CREATE_CHILD_SA exchange is | Using multiple key exchanges with a CREATE_CHILD_SA exchange is | |||
negotiated in a similar fashion to the initial IKE exchange, see | negotiated in a similar fashion to the initial IKE exchange, see | |||
Section 2.2.1. If the initiator includes any Additional Key Exchange | Section 2.2.1. If the initiator includes any Additional Key Exchange | |||
Transform Types in the SA payload (along with Transform Type 4), and | (AKE*) Transform Types in the SA payload (along with Transform Type | |||
if the responder agrees to perform additional key exchanges, then the | 4), and if the responder agrees to perform additional key exchanges, | |||
additional key exchanges are performed in a series of new | then the additional key exchanges are performed in a series of new | |||
IKE_FOLLOWUP_KE exchanges that follow the CREATE_CHILD_SA exchange. | IKE_FOLLOWUP_KE exchanges that follow the CREATE_CHILD_SA exchange. | |||
The IKE_FOLLOWUP_KE exchange is introduced especially for | The IKE_FOLLOWUP_KE exchange is introduced especially for | |||
transferring data of additional key exchanges following the one | transferring data of additional key exchanges following the one | |||
performed in the CREATE_CHILD_SA. Its Exchange Type value is 44. | performed in the CREATE_CHILD_SA. Its Exchange Type value is 44. | |||
The key exchange negotiated via Transform Type 4 always takes place | The key exchange negotiated via Transform Type 4 always takes place | |||
in the CREATE_CHILD_SA exchange, as per the IKEv2 specification | in the CREATE_CHILD_SA exchange, as per the IKEv2 specification | |||
[RFC7296]. Additional key exchanges are performed in an order of the | [RFC7296]. Additional key exchanges are performed in an order of the | |||
values of their Transform Types so that the key exchange negotiated | values of their Transform Types so that the key exchange negotiated | |||
using Transform Type i always precedes the key exchange negotiated | using Transform Type i always precedes the key exchange negotiated | |||
skipping to change at line 749 ¶ | skipping to change at line 750 ¶ | |||
from the IKE_SA_INIT exchange, can be immediately rekeyed with | from the IKE_SA_INIT exchange, can be immediately rekeyed with | |||
CREATE_CHILD_SA with additional key exchanges, where IKE_FOLLOWUP_KE | CREATE_CHILD_SA with additional key exchanges, where IKE_FOLLOWUP_KE | |||
messages are used for these additional key exchanges. If the | messages are used for these additional key exchanges. If the | |||
classical key exchange method is used in the IKE_SA_INIT message, the | classical key exchange method is used in the IKE_SA_INIT message, the | |||
very first Child SA created in IKE_AUTH will offer no resistance | very first Child SA created in IKE_AUTH will offer no resistance | |||
against the quantum threats. Consequently, if the peers' local | against the quantum threats. Consequently, if the peers' local | |||
policy requires all Child SAs to be post-quantum secure, then the | policy requires all Child SAs to be post-quantum secure, then the | |||
peers can avoid creating the very first Child SA by adopting | peers can avoid creating the very first Child SA by adopting | |||
[RFC6023]. In this case, the initiator sends two types of proposals | [RFC6023]. In this case, the initiator sends two types of proposals | |||
in the IKE_SA_INIT request: one with and another one without | in the IKE_SA_INIT request: one with and another one without | |||
Additional Key Exchange Transform Types. The responder chooses the | Additional Key Exchange (AKE*) Transform Types. The responder | |||
latter proposal type and includes a CHILDLESS_IKEV2_SUPPORTED | chooses the latter proposal type and includes a | |||
notification in the IKE_SA_INIT response. Assuming that the | CHILDLESS_IKEV2_SUPPORTED notification in the IKE_SA_INIT response. | |||
initiator supports childless IKE SA extension, both peers perform the | Assuming that the initiator supports childless IKE SA extension, both | |||
modified IKE_AUTH exchange described in [RFC6023], and no Child SA is | peers perform the modified IKE_AUTH exchange described in [RFC6023], | |||
created in this exchange. The peers should then immediately rekey | and no Child SA is created in this exchange. The peers should then | |||
the IKE SA and subsequently create the Child SAs, all with additional | immediately rekey the IKE SA and subsequently create the Child SAs, | |||
key exchanges using a CREATE_CHILD_SA exchange. | all with additional key exchanges using a CREATE_CHILD_SA exchange. | |||
It is also possible for the initiator to send proposals without any | It is also possible for the initiator to send proposals without any | |||
Additional Key Exchange Transform Types in the IKE_SA_INIT message. | Additional Key Exchange (AKE*) Transform Types in the IKE_SA_INIT | |||
In this instance, the responder will have no information about | message. In this instance, the responder will have no information | |||
whether or not the initiator supports the extension in this | about whether or not the initiator supports the extension in this | |||
specification. This may not be efficient, as the responder will have | specification. This may not be efficient, as the responder will have | |||
to wait for the subsequent CREATE_CHILD_SA request to determine | to wait for the subsequent CREATE_CHILD_SA request to determine | |||
whether or not the initiator's request is appropriate for its local | whether or not the initiator's request is appropriate for its local | |||
policy. | policy. | |||
The support for childless IKE SA is not negotiated, but it is the | The support for childless IKE SA is not negotiated, but it is the | |||
responder that indicates the support for this mode. As such, the | responder that indicates the support for this mode. As such, the | |||
responder cannot enforce that the initiator use this mode. | responder cannot enforce that the initiator use this mode. | |||
Therefore, it is entirely possible that the initiator does not | Therefore, it is entirely possible that the initiator does not | |||
support this extension and sends IKE_AUTH request as per [RFC7296] | support this extension and sends IKE_AUTH request as per [RFC7296] | |||
End of changes. 13 change blocks. | ||||
77 lines changed or deleted | 78 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |